made with requirebin
Last active
August 29, 2015 14:05
-
-
Save joakin/33a10c722ec3dbc0374a to your computer and use it in GitHub Desktop.
requirebin emojify multiline marked sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var emoji = require('emoji-images'); | |
var marked = require('marked'); | |
var insertCSS = require('insert-css'); | |
var multiline = require('multiline'); | |
var emojiPath = 'http://www.tortue.me/emoji/'; | |
var emojify = function(text) { return emoji(text, emojiPath); } | |
insertCSS(multiline(function() {/*@preserve | |
body { padding: 30px; } | |
img.emoji { width: 24px; } | |
table { box-shadow: 0px 5px 12px rgba(0,0,0,0.2); margin: 30px 20px; } | |
th { padding: 10px; } | |
td:first-child { width: 28px; } | |
*/})); | |
var content = multiline(function() {/*@preserve | |
Emojify example! | |
================ | |
Hi, how are you doing:interrobang: :bowtie: :neckbeard: | |
This is an emojify example :+1: | |
:unlock: **JS** with **npm** and **browserify** is really cool:bangbang: :wink: | |
|| TODO | | |
|-|-| | |
|:white_check_mark:| Try requirebin.com | | |
|:white_check_mark:| Play with emoji-images | | |
|:white_check_mark:| Play with marked | | |
|:white_check_mark:| Play with multiline | | |
|:white_check_mark:| Play with insert-css | | |
*/}) | |
document.body.innerHTML = emojify(marked(content)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/uxeGr":[function(require,module,exports){ | |
// universal module definition: https://github.com/umdjs/umd/blob/master/returnExports.js#L41 | |
(function (root, factory) { | |
if (typeof exports === 'object') { | |
// Node. Does not work with strict CommonJS, but | |
// only CommonJS-like enviroments that support module.exports, | |
// like Node. | |
module.exports = factory(); | |
} else if (typeof define === 'function' && define.amd) { | |
// AMD. Register as an anonymous module. | |
define(factory); | |
} else { | |
// Browser globals (root is window) | |
root.emoji = factory(); | |
} | |
}(this, function () { | |
var emojis = [":blush:",":scream:",":smirk:",":smiley:",":stuck_out_tongue_closed_eyes:",":stuck_out_tongue_winking_eye:",":rage:",":disappointed:",":sob:",":kissing_heart:",":wink:",":pensive:",":confounded:",":flushed:",":relaxed:",":mask:",":heart:",":broken_heart:",":sunny:",":umbrella:",":cloud:",":snowflake:",":snowman:",":zap:",":cyclone:",":foggy:",":ocean:",":cat:",":dog:",":mouse:",":hamster:",":rabbit:",":wolf:",":frog:",":tiger:",":koala:",":bear:",":pig:",":pig_nose:",":cow:",":boar:",":monkey_face:",":monkey:",":horse:",":racehorse:",":camel:",":sheep:",":elephant:",":panda_face:",":snake:",":bird:",":baby_chick:",":hatched_chick:",":hatching_chick:",":chicken:",":penguin:",":turtle:",":bug:",":honeybee:",":ant:",":beetle:",":snail:",":octopus:",":tropical_fish:",":fish:",":whale:",":whale2:",":dolphin:",":cow2:",":ram:",":rat:",":water_buffalo:",":tiger2:",":rabbit2:",":dragon:",":goat:",":rooster:",":dog2:",":pig2:",":mouse2:",":ox:",":dragon_face:",":blowfish:",":crocodile:",":dromedary_camel:",":leopard:",":cat2:",":poodle:",":paw_prints:",":bouquet:",":cherry_blossom:",":tulip:",":four_leaf_clover:",":rose:",":sunflower:",":hibiscus:",":maple_leaf:",":leaves:",":fallen_leaf:",":herb:",":mushroom:",":cactus:",":palm_tree:",":evergreen_tree:",":deciduous_tree:",":chestnut:",":seedling:",":blossom:",":ear_of_rice:",":shell:",":globe_with_meridians:",":sun_with_face:",":full_moon_with_face:",":new_moon_with_face:",":new_moon:",":waxing_crescent_moon:",":first_quarter_moon:",":waxing_gibbous_moon:",":full_moon:",":waning_gibbous_moon:",":last_quarter_moon:",":waning_crescent_moon:",":last_quarter_moon_with_face:",":first_quarter_moon_with_face:",":moon:",":earth_africa:",":earth_americas:",":earth_asia:",":volcano:",":milky_way:",":partly_sunny:",":octocat:",":squirrel:",":bamboo:",":gift_heart:",":dolls:",":school_satchel:",":mortar_board:",":flags:",":fireworks:",":sparkler:",":wind_chime:",":rice_scene:",":jack_o_lantern:",":ghost:",":santa:",":christmas_tree:",":gift:",":bell:",":no_bell:",":tanabata_tree:",":tada:",":confetti_ball:",":balloon:",":crystal_ball:",":cd:",":dvd:",":floppy_disk:",":camera:",":video_camera:",":movie_camera:",":computer:",":tv:",":iphone:",":phone:",":telephone:",":telephone_receiver:",":pager:",":fax:",":minidisc:",":vhs:",":sound:",":speaker:",":mute:",":loudspeaker:",":mega:",":hourglass:",":hourglass_flowing_sand:",":alarm_clock:",":watch:",":radio:",":satellite:",":loop:",":mag:",":mag_right:",":unlock:",":lock:",":lock_with_ink_pen:",":closed_lock_with_key:",":key:",":bulb:",":flashlight:",":high_brightness:",":low_brightness:",":electric_plug:",":battery:",":calling:",":email:",":mailbox:",":postbox:",":bath:",":bathtub:",":shower:",":toilet:",":wrench:",":nut_and_bolt:",":hammer:",":seat:",":moneybag:",":yen:",":dollar:",":pound:",":euro:",":credit_card:",":money_with_wings:",":e-mail:",":inbox_tray:",":outbox_tray:",":envelope:",":incoming_envelope:",":postal_horn:",":mailbox_closed:",":mailbox_with_mail:",":mailbox_with_no_mail:",":door:",":smoking:",":bomb:",":gun:",":hocho:",":pill:",":syringe:",":page_facing_up:",":page_with_curl:",":bookmark_tabs:",":bar_chart:",":chart_with_upwards_trend:",":chart_with_downwards_trend:",":scroll:",":clipboard:",":calendar:",":date:",":card_index:",":file_folder:",":open_file_folder:",":scissors:",":pushpin:",":paperclip:",":black_nib:",":pencil2:",":straight_ruler:",":triangular_ruler:",":closed_book:",":green_book:",":blue_book:",":orange_book:",":notebook:",":notebook_with_decorative_cover:",":ledger:",":books:",":bookmark:",":name_badge:",":microscope:",":telescope:",":newspaper:",":football:",":basketball:",":soccer:",":baseball:",":tennis:",":8ball:",":rugby_football:",":bowling:",":golf:",":mountain_bicyclist:",":bicyclist:",":horse_racing:",":snowboarder:",":swimmer:",":surfer:",":ski:",":spades:",":hearts:",":clubs:",":diamonds:",":gem:",":ring:",":trophy:",":musical_score:",":musical_keyboard:",":violin:",":space_invader:",":video_game:",":black_joker:",":flower_playing_cards:",":game_die:",":dart:",":mahjong:",":clapper:",":memo:",":pencil:",":book:",":art:",":microphone:",":headphones:",":trumpet:",":saxophone:",":guitar:",":shoe:",":sandal:",":high_heel:",":lipstick:",":boot:",":shirt:",":tshirt:",":necktie:",":womans_clothes:",":dress:",":running_shirt_with_sash:",":jeans:",":kimono:",":bikini:",":ribbon:",":tophat:",":crown:",":womans_hat:",":mans_shoe:",":closed_umbrella:",":briefcase:",":handbag:",":pouch:",":purse:",":eyeglasses:",":fishing_pole_and_fish:",":coffee:",":tea:",":sake:",":baby_bottle:",":beer:",":beers:",":cocktail:",":tropical_drink:",":wine_glass:",":fork_and_knife:",":pizza:",":hamburger:",":fries:",":poultry_leg:",":meat_on_bone:",":spaghetti:",":curry:",":fried_shrimp:",":bento:",":sushi:",":fish_cake:",":rice_ball:",":rice_cracker:",":rice:",":ramen:",":stew:",":oden:",":dango:",":egg:",":bread:",":doughnut:",":custard:",":icecream:",":ice_cream:",":shaved_ice:",":birthday:",":cake:",":cookie:",":chocolate_bar:",":candy:",":lollipop:",":honey_pot:",":apple:",":green_apple:",":tangerine:",":lemon:",":cherries:",":grapes:",":watermelon:",":strawberry:",":peach:",":melon:",":banana:",":pear:",":pineapple:",":sweet_potato:",":eggplant:",":tomato:",":corn:",":alien:",":angel:",":anger:",":angry:",":anguished:",":astonished:",":baby:",":blue_heart:",":blush:",":boom:",":bow:",":bowtie:",":boy:",":bride_with_veil:",":broken_heart:",":bust_in_silhouette:",":busts_in_silhouette:",":clap:",":cold_sweat:",":collision:",":confounded:",":confused:",":construction_worker:",":cop:",":couple_with_heart:",":couple:",":couplekiss:",":cry:",":crying_cat_face:",":cupid:",":dancer:",":dancers:",":dash:",":disappointed:",":dizzy_face:",":dizzy:",":droplet:",":ear:",":exclamation:",":expressionless:",":eyes:",":facepunch:",":family:",":fearful:",":feelsgood:",":feet:",":finnadie:",":fire:",":fist:",":flushed:",":frowning:",":girl:",":goberserk:",":godmode:",":green_heart:",":grey_exclamation:",":grey_question:",":grimacing:",":grin:",":grinning:",":guardsman:",":haircut:",":hand:",":hankey:",":hear_no_evil:",":heart_eyes_cat:",":heart_eyes:",":heart:",":heartbeat:",":heartpulse:",":hurtrealbad:",":hushed:",":imp:",":information_desk_person:",":innocent:",":japanese_goblin:",":japanese_ogre:",":joy_cat:",":joy:",":kiss:",":kissing_cat:",":kissing_closed_eyes:",":kissing_heart:",":kissing_smiling_eyes:",":kissing:",":laughing:",":lips:",":love_letter:",":man_with_gua_pi_mao:",":man_with_turban:",":man:",":mask:",":massage:",":metal:",":muscle:",":musical_note:",":nail_care:",":neckbeard:",":neutral_face:",":no_good:",":no_mouth:",":nose:",":notes:",":ok_hand:",":ok_woman:",":older_man:",":older_woman:",":open_hands:",":open_mouth:",":pensive:",":persevere:",":person_frowning:",":person_with_blond_hair:",":person_with_pouting_face:",":point_down:",":point_left:",":point_right:",":point_up_2:",":point_up:",":poop:",":pouting_cat:",":pray:",":princess:",":punch:",":purple_heart:",":question:",":rage:",":rage1:",":rage2:",":rage3:",":rage4:",":raised_hand:",":raised_hands:",":relaxed:",":relieved:",":revolving_hearts:",":runner:",":running:",":satisfied:",":scream_cat:",":scream:",":see_no_evil:",":shit:",":skull:",":sleeping:",":sleepy:",":smile_cat:",":smile:",":smiley_cat:",":smiley:",":smiling_imp:",":smirk_cat:",":smirk:",":sob:",":sparkling_heart:",":sparkles:",":speak_no_evil:",":speech_balloon:",":star:",":star2:",":stuck_out_tongue_closed_eyes:",":stuck_out_tongue_winking_eye:",":stuck_out_tongue:",":sunglasses:",":suspect:",":sweat_drops:",":sweat_smile:",":sweat:",":thought_balloon:",":-1:",":thumbsdown:",":thumbsup:",":+1:",":tired_face:",":tongue:",":triumph:",":trollface:",":two_hearts:",":two_men_holding_hands:",":two_women_holding_hands:",":unamused:",":v:",":walking:",":wave:",":weary:",":wink2:",":wink:",":woman:",":worried:",":yellow_heart:",":yum:",":zzz:",":109:",":house:",":house_with_garden:",":school:",":office:",":post_office:",":hospital:",":bank:",":convenience_store:",":love_hotel:",":hotel:",":wedding:",":church:",":department_store:",":european_post_office:",":city_sunrise:",":city_sunset:",":japanese_castle:",":european_castle:",":tent:",":factory:",":tokyo_tower:",":japan:",":mount_fuji:",":sunrise_over_mountains:",":sunrise:",":stars:",":statue_of_liberty:",":bridge_at_night:",":carousel_horse:",":rainbow:",":ferris_wheel:",":fountain:",":roller_coaster:",":ship:",":speedboat:",":boat:",":sailboat:",":rowboat:",":anchor:",":rocket:",":airplane:",":helicopter:",":steam_locomotive:",":tram:",":mountain_railway:",":bike:",":aerial_tramway:",":suspension_railway:",":mountain_cableway:",":tractor:",":blue_car:",":oncoming_automobile:",":car:",":red_car:",":taxi:",":oncoming_taxi:",":articulated_lorry:",":bus:",":oncoming_bus:",":rotating_light:",":police_car:",":oncoming_police_car:",":fire_engine:",":ambulance:",":minibus:",":truck:",":train:",":station:",":train2:",":bullettrain_front:",":bullettrain_side:",":light_rail:",":monorail:",":railway_car:",":trolleybus:",":ticket:",":fuelpump:",":vertical_traffic_light:",":traffic_light:",":warning:",":construction:",":beginner:",":atm:",":slot_machine:",":busstop:",":barber:",":hotsprings:",":checkered_flag:",":crossed_flags:",":izakaya_lantern:",":moyai:",":circus_tent:",":performing_arts:",":round_pushpin:",":triangular_flag_on_post:",":jp:",":kr:",":cn:",":us:",":fr:",":es:",":it:",":ru:",":gb:",":uk:",":de:",":100:",":1234:",":one:",":two:",":three:",":four:",":five:",":six:",":seven:",":eight:",":nine:",":keycap_ten:",":zero:",":hash:",":symbols:",":arrow_backward:",":arrow_down:",":arrow_forward:",":arrow_left:",":capital_abcd:",":abcd:",":abc:",":arrow_lower_left:",":arrow_lower_right:",":arrow_right:",":arrow_up:",":arrow_upper_left:",":arrow_upper_right:",":arrow_double_down:",":arrow_double_up:",":arrow_down_small:",":arrow_heading_down:",":arrow_heading_up:",":leftwards_arrow_with_hook:",":arrow_right_hook:",":left_right_arrow:",":arrow_up_down:",":arrow_up_small:",":arrows_clockwise:",":arrows_counterclockwise:",":rewind:",":fast_forward:",":information_source:",":ok:",":twisted_rightwards_arrows:",":repeat:",":repeat_one:",":new:",":top:",":up:",":cool:",":free:",":ng:",":cinema:",":koko:",":signal_strength:",":u5272:",":u5408:",":u55b6:",":u6307:",":u6708:",":u6709:",":u6e80:",":u7121:",":u7533:",":u7a7a:",":u7981:",":sa:",":restroom:",":mens:",":womens:",":baby_symbol:",":no_smoking:",":parking:",":wheelchair:",":metro:",":baggage_claim:",":accept:",":wc:",":potable_water:",":put_litter_in_its_place:",":secret:",":congratulations:",":m:",":passport_control:",":left_luggage:",":customs:",":ideograph_advantage:",":cl:",":sos:",":id:",":no_entry_sign:",":underage:",":no_mobile_phones:",":do_not_litter:",":non-potable_water:",":no_bicycles:",":no_pedestrians:",":children_crossing:",":no_entry:",":eight_spoked_asterisk:",":eight_pointed_black_star:",":heart_decoration:",":vs:",":vibration_mode:",":mobile_phone_off:",":chart:",":currency_exchange:",":aries:",":taurus:",":gemini:",":cancer:",":leo:",":virgo:",":libra:",":scorpius:",":sagittarius:",":capricorn:",":aquarius:",":pisces:",":ophiuchus:",":six_pointed_star:",":negative_squared_cross_mark:",":a:",":b:",":ab:",":o2:",":diamond_shape_with_a_dot_inside:",":recycle:",":end:",":on:",":soon:",":clock1:",":clock130:",":clock10:",":clock1030:",":clock11:",":clock1130:",":clock12:",":clock1230:",":clock2:",":clock230:",":clock3:",":clock330:",":clock4:",":clock430:",":clock5:",":clock530:",":clock6:",":clock630:",":clock7:",":clock730:",":clock8:",":clock830:",":clock9:",":clock930:",":heavy_dollar_sign:",":copyright:",":registered:",":tm:",":x:",":heavy_exclamation_mark:",":bangbang:",":interrobang:",":o:",":heavy_multiplication_x:",":heavy_plus_sign:",":heavy_minus_sign:",":heavy_division_sign:",":white_flower:",":heavy_check_mark:",":ballot_box_with_check:",":radio_button:",":link:",":curly_loop:",":wavy_dash:",":part_alternation_mark:",":trident:",":black_square:",":white_square:",":white_check_mark:",":black_square_button:",":white_square_button:",":black_circle:",":white_circle:",":red_circle:",":large_blue_circle:",":large_blue_diamond:",":large_orange_diamond:",":small_blue_diamond:",":small_orange_diamond:",":small_red_triangle:",":small_red_triangle_down:",":shipit:"], | |
test = /\:[a-z0-9_\-\+]+\:/g; | |
function emoji(someString, url, size) { | |
return someString.replace(test, function (match) { | |
if (emojis.indexOf(match) !== -1) { | |
var name = String(match).slice(1, -1); | |
return '<img class="emoji" title=":' + name + ':" alt="' + name + '" src="' + url + '/' + encodeURIComponent(name) + '.png"' + (size ? (' height="' + size + '"') : '') + ' />'; | |
} else { | |
return match; | |
} | |
}); | |
}; | |
emoji.list = emojis; | |
return emoji; | |
})); | |
},{}],"emoji-images":[function(require,module,exports){ | |
module.exports=require('/uxeGr'); | |
},{}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvaG9tZS9hZG1pbi9icm93c2VyaWZ5LWNkbi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL3RtcC9lbW9qaS1pbWFnZXMxMTQ3MTctMzI2NDItMXR4Y3o3My9ub2RlX21vZHVsZXMvZW1vamktaW1hZ2VzL2Vtb2ppLWltYWdlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpfXZhciBmPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChmLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGYsZi5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvcmV0dXJuRXhwb3J0cy5qcyNMNDFcbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgICAgIC8vIGxpa2UgTm9kZS5cbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcbiAgICAgICAgcm9vdC5lbW9qaSA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVtb2ppcyA9IFtcIjpibHVzaDpcIixcIjpzY3JlYW06XCIsXCI6c21pcms6XCIsXCI6c21pbGV5OlwiLFwiOnN0dWNrX291dF90b25ndWVfY2xvc2VkX2V5ZXM6XCIsXCI6c3R1Y2tfb3V0X3Rvbmd1ZV93aW5raW5nX2V5ZTpcIixcIjpyYWdlOlwiLFwiOmRpc2FwcG9pbnRlZDpcIixcIjpzb2I6XCIsXCI6a2lzc2luZ19oZWFydDpcIixcIjp3aW5rOlwiLFwiOnBlbnNpdmU6XCIsXCI6Y29uZm91bmRlZDpcIixcIjpmbHVzaGVkOlwiLFwiOnJlbGF4ZWQ6XCIsXCI6bWFzazpcIixcIjpoZWFydDpcIixcIjpicm9rZW5faGVhcnQ6XCIsXCI6c3Vubnk6XCIsXCI6dW1icmVsbGE6XCIsXCI6Y2xvdWQ6XCIsXCI6c25vd2ZsYWtlOlwiLFwiOnNub3dtYW46XCIsXCI6emFwOlwiLFwiOmN5Y2xvbmU6XCIsXCI6Zm9nZ3k6XCIsXCI6b2NlYW46XCIsXCI6Y2F0OlwiLFwiOmRvZzpcIixcIjptb3VzZTpcIixcIjpoYW1zdGVyOlwiLFwiOnJhYmJpdDpcIixcIjp3b2xmOlwiLFwiOmZyb2c6XCIsXCI6dGlnZXI6XCIsXCI6a29hbGE6XCIsXCI6YmVhcjpcIixcIjpwaWc6XCIsXCI6cGlnX25vc2U6XCIsXCI6Y293OlwiLFwiOmJvYXI6XCIsXCI6bW9ua2V5X2ZhY2U6XCIsXCI6bW9ua2V5OlwiLFwiOmhvcnNlOlwiLFwiOnJhY2Vob3JzZTpcIixcIjpjYW1lbDpcIixcIjpzaGVlcDpcIixcIjplbGVwaGFudDpcIixcIjpwYW5kYV9mYWNlOlwiLFwiOnNuYWtlOlwiLFwiOmJpcmQ6XCIsXCI6YmFieV9jaGljazpcIixcIjpoYXRjaGVkX2NoaWNrOlwiLFwiOmhhdGNoaW5nX2NoaWNrOlwiLFwiOmNoaWNrZW46XCIsXCI6cGVuZ3VpbjpcIixcIjp0dXJ0bGU6XCIsXCI6YnVnOlwiLFwiOmhvbmV5YmVlOlwiLFwiOmFudDpcIixcIjpiZWV0bGU6XCIsXCI6c25haWw6XCIsXCI6b2N0b3B1czpcIixcIjp0cm9waWNhbF9maXNoOlwiLFwiOmZpc2g6XCIsXCI6d2hhbGU6XCIsXCI6d2hhbGUyOlwiLFwiOmRvbHBoaW46XCIsXCI6Y293MjpcIixcIjpyYW06XCIsXCI6cmF0OlwiLFwiOndhdGVyX2J1ZmZhbG86XCIsXCI6dGlnZXIyOlwiLFwiOnJhYmJpdDI6XCIsXCI6ZHJhZ29uOlwiLFwiOmdvYXQ6XCIsXCI6cm9vc3RlcjpcIixcIjpkb2cyOlwiLFwiOnBpZzI6XCIsXCI6bW91c2UyOlwiLFwiOm94OlwiLFwiOmRyYWdvbl9mYWNlOlwiLFwiOmJsb3dmaXNoOlwiLFwiOmNyb2NvZGlsZTpcIixcIjpkcm9tZWRhcnlfY2FtZWw6XCIsXCI6bGVvcGFyZDpcIixcIjpjYXQyOlwiLFwiOnBvb2RsZTpcIixcIjpwYXdfcHJpbnRzOlwiLFwiOmJvdXF1ZXQ6XCIsXCI6Y2hlcnJ5X2Jsb3Nzb206XCIsXCI6dHVsaXA6XCIsXCI6Zm91cl9sZWFmX2Nsb3ZlcjpcIixcIjpyb3NlOlwiLFwiOnN1bmZsb3dlcjpcIixcIjpoaWJpc2N1czpcIixcIjptYXBsZV9sZWFmOlwiLFwiOmxlYXZlczpcIixcIjpmYWxsZW5fbGVhZjpcIixcIjpoZXJiOlwiLFwiOm11c2hyb29tOlwiLFwiOmNhY3R1czpcIixcIjpwYWxtX3RyZWU6XCIsXCI6ZXZlcmdyZWVuX3RyZWU6XCIsXCI6ZGVjaWR1b3VzX3RyZWU6XCIsXCI6Y2hlc3RudXQ6XCIsXCI6c2VlZGxpbmc6XCIsXCI6Ymxvc3NvbTpcIixcIjplYXJfb2ZfcmljZTpcIixcIjpzaGVsbDpcIixcIjpnbG9iZV93aXRoX21lcmlkaWFuczpcIixcIjpzdW5fd2l0aF9mYWNlOlwiLFwiOmZ1bGxfbW9vbl93aXRoX2ZhY2U6XCIsXCI6bmV3X21vb25fd2l0aF9mYWNlOlwiLFwiOm5ld19tb29uOlwiLFwiOndheGluZ19jcmVzY2VudF9tb29uOlwiLFwiOmZpcnN0X3F1YXJ0ZXJfbW9vbjpcIixcIjp3YXhpbmdfZ2liYm91c19tb29uOlwiLFwiOmZ1bGxfbW9vbjpcIixcIjp3YW5pbmdfZ2liYm91c19tb29uOlwiLFwiOmxhc3RfcXVhcnRlcl9tb29uOlwiLFwiOndhbmluZ19jcmVzY2VudF9tb29uOlwiLFwiOmxhc3RfcXVhcnRlcl9tb29uX3dpdGhfZmFjZTpcIixcIjpmaXJzdF9xdWFydGVyX21vb25fd2l0aF9mYWNlOlwiLFwiOm1vb246XCIsXCI6ZWFydGhfYWZyaWNhOlwiLFwiOmVhcnRoX2FtZXJpY2FzOlwiLFwiOmVhcnRoX2FzaWE6XCIsXCI6dm9sY2FubzpcIixcIjptaWxreV93YXk6XCIsXCI6cGFydGx5X3N1bm55OlwiLFwiOm9jdG9jYXQ6XCIsXCI6c3F1aXJyZWw6XCIsXCI6YmFtYm9vOlwiLFwiOmdpZnRfaGVhcnQ6XCIsXCI6ZG9sbHM6XCIsXCI6c2Nob29sX3NhdGNoZWw6XCIsXCI6bW9ydGFyX2JvYXJkOlwiLFwiOmZsYWdzOlwiLFwiOmZpcmV3b3JrczpcIixcIjpzcGFya2xlcjpcIixcIjp3aW5kX2NoaW1lOlwiLFwiOnJpY2Vfc2NlbmU6XCIsXCI6amFja19vX2xhbnRlcm46XCIsXCI6Z2hvc3Q6XCIsXCI6c2FudGE6XCIsXCI6Y2hyaXN0bWFzX3RyZWU6XCIsXCI6Z2lmdDpcIixcIjpiZWxsOlwiLFwiOm5vX2JlbGw6XCIsXCI6dGFuYWJhdGFfdHJlZTpcIixcIjp0YWRhOlwiLFwiOmNvbmZldHRpX2JhbGw6XCIsXCI6YmFsbG9vbjpcIixcIjpjcnlzdGFsX2JhbGw6XCIsXCI6Y2Q6XCIsXCI6ZHZkOlwiLFwiOmZsb3BweV9kaXNrOlwiLFwiOmNhbWVyYTpcIixcIjp2aWRlb19jYW1lcmE6XCIsXCI6bW92aWVfY2FtZXJhOlwiLFwiOmNvbXB1dGVyOlwiLFwiOnR2OlwiLFwiOmlwaG9uZTpcIixcIjpwaG9uZTpcIixcIjp0ZWxlcGhvbmU6XCIsXCI6dGVsZXBob25lX3JlY2VpdmVyOlwiLFwiOnBhZ2VyOlwiLFwiOmZheDpcIixcIjptaW5pZGlzYzpcIixcIjp2aHM6XCIsXCI6c291bmQ6XCIsXCI6c3BlYWtlcjpcIixcIjptdXRlOlwiLFwiOmxvdWRzcGVha2VyOlwiLFwiOm1lZ2E6XCIsXCI6aG91cmdsYXNzOlwiLFwiOmhvdXJnbGFzc19mbG93aW5nX3NhbmQ6XCIsXCI6YWxhcm1fY2xvY2s6XCIsXCI6d2F0Y2g6XCIsXCI6cmFkaW86XCIsXCI6c2F0ZWxsaXRlOlwiLFwiOmxvb3A6XCIsXCI6bWFnOlwiLFwiOm1hZ19yaWdodDpcIixcIjp1bmxvY2s6XCIsXCI6bG9jazpcIixcIjpsb2NrX3dpdGhfaW5rX3BlbjpcIixcIjpjbG9zZWRfbG9ja193aXRoX2tleTpcIixcIjprZXk6XCIsXCI6YnVsYjpcIixcIjpmbGFzaGxpZ2h0OlwiLFwiOmhpZ2hfYnJpZ2h0bmVzczpcIixcIjpsb3dfYnJpZ2h0bmVzczpcIixcIjplbGVjdHJpY19wbHVnOlwiLFwiOmJhdHRlcnk6XCIsXCI6Y2FsbGluZzpcIixcIjplbWFpbDpcIixcIjptYWlsYm94OlwiLFwiOnBvc3Rib3g6XCIsXCI6YmF0aDpcIixcIjpiYXRodHViOlwiLFwiOnNob3dlcjpcIixcIjp0b2lsZXQ6XCIsXCI6d3JlbmNoOlwiLFwiOm51dF9hbmRfYm9sdDpcIixcIjpoYW1tZXI6XCIsXCI6c2VhdDpcIixcIjptb25leWJhZzpcIixcIjp5ZW46XCIsXCI6ZG9sbGFyOlwiLFwiOnBvdW5kOlwiLFwiOmV1cm86XCIsXCI6Y3JlZGl0X2NhcmQ6XCIsXCI6bW9uZXlfd2l0aF93aW5nczpcIixcIjplLW1haWw6XCIsXCI6aW5ib3hfdHJheTpcIixcIjpvdXRib3hfdHJheTpcIixcIjplbnZlbG9wZTpcIixcIjppbmNvbWluZ19lbnZlbG9wZTpcIixcIjpwb3N0YWxfaG9ybjpcIixcIjptYWlsYm94X2Nsb3NlZDpcIixcIjptYWlsYm94X3dpdGhfbWFpbDpcIixcIjptYWlsYm94X3dpdGhfbm9fbWFpbDpcIixcIjpkb29yOlwiLFwiOnNtb2tpbmc6XCIsXCI6Ym9tYjpcIixcIjpndW46XCIsXCI6aG9jaG86XCIsXCI6cGlsbDpcIixcIjpzeXJpbmdlOlwiLFwiOnBhZ2VfZmFjaW5nX3VwOlwiLFwiOnBhZ2Vfd2l0aF9jdXJsOlwiLFwiOmJvb2ttYXJrX3RhYnM6XCIsXCI6YmFyX2NoYXJ0OlwiLFwiOmNoYXJ0X3dpdGhfdXB3YXJkc190cmVuZDpcIixcIjpjaGFydF93aXRoX2Rvd253YXJkc190cmVuZDpcIixcIjpzY3JvbGw6XCIsXCI6Y2xpcGJvYXJkOlwiLFwiOmNhbGVuZGFyOlwiLFwiOmRhdGU6XCIsXCI6Y2FyZF9pbmRleDpcIixcIjpmaWxlX2ZvbGRlcjpcIixcIjpvcGVuX2ZpbGVfZm9sZGVyOlwiLFwiOnNjaXNzb3JzOlwiLFwiOnB1c2hwaW46XCIsXCI6cGFwZXJjbGlwOlwiLFwiOmJsYWNrX25pYjpcIixcIjpwZW5jaWwyOlwiLFwiOnN0cmFpZ2h0X3J1bGVyOlwiLFwiOnRyaWFuZ3VsYXJfcnVsZXI6XCIsXCI6Y2xvc2VkX2Jvb2s6XCIsXCI6Z3JlZW5fYm9vazpcIixcIjpibHVlX2Jvb2s6XCIsXCI6b3JhbmdlX2Jvb2s6XCIsXCI6bm90ZWJvb2s6XCIsXCI6bm90ZWJvb2tfd2l0aF9kZWNvcmF0aXZlX2NvdmVyOlwiLFwiOmxlZGdlcjpcIixcIjpib29rczpcIixcIjpib29rbWFyazpcIixcIjpuYW1lX2JhZGdlOlwiLFwiOm1pY3Jvc2NvcGU6XCIsXCI6dGVsZXNjb3BlOlwiLFwiOm5ld3NwYXBlcjpcIixcIjpmb290YmFsbDpcIixcIjpiYXNrZXRiYWxsOlwiLFwiOnNvY2NlcjpcIixcIjpiYXNlYmFsbDpcIixcIjp0ZW5uaXM6XCIsXCI6OGJhbGw6XCIsXCI6cnVnYnlfZm9vdGJhbGw6XCIsXCI6Ym93bGluZzpcIixcIjpnb2xmOlwiLFwiOm1vdW50YWluX2JpY3ljbGlzdDpcIixcIjpiaWN5Y2xpc3Q6XCIsXCI6aG9yc2VfcmFjaW5nOlwiLFwiOnNub3dib2FyZGVyOlwiLFwiOnN3aW1tZXI6XCIsXCI6c3VyZmVyOlwiLFwiOnNraTpcIixcIjpzcGFkZXM6XCIsXCI6aGVhcnRzOlwiLFwiOmNsdWJzOlwiLFwiOmRpYW1vbmRzOlwiLFwiOmdlbTpcIixcIjpyaW5nOlwiLFwiOnRyb3BoeTpcIixcIjptdXNpY2FsX3Njb3JlOlwiLFwiOm11c2ljYWxfa2V5Ym9hcmQ6XCIsXCI6dmlvbGluOlwiLFwiOnNwYWNlX2ludmFkZXI6XCIsXCI6dmlkZW9fZ2FtZTpcIixcIjpibGFja19qb2tlcjpcIixcIjpmbG93ZXJfcGxheWluZ19jYXJkczpcIixcIjpnYW1lX2RpZTpcIixcIjpkYXJ0OlwiLFwiOm1haGpvbmc6XCIsXCI6Y2xhcHBlcjpcIixcIjptZW1vOlwiLFwiOnBlbmNpbDpcIixcIjpib29rOlwiLFwiOmFydDpcIixcIjptaWNyb3Bob25lOlwiLFwiOmhlYWRwaG9uZXM6XCIsXCI6dHJ1bXBldDpcIixcIjpzYXhvcGhvbmU6XCIsXCI6Z3VpdGFyOlwiLFwiOnNob2U6XCIsXCI6c2FuZGFsOlwiLFwiOmhpZ2hfaGVlbDpcIixcIjpsaXBzdGljazpcIixcIjpib290OlwiLFwiOnNoaXJ0OlwiLFwiOnRzaGlydDpcIixcIjpuZWNrdGllOlwiLFwiOndvbWFuc19jbG90aGVzOlwiLFwiOmRyZXNzOlwiLFwiOnJ1bm5pbmdfc2hpcnRfd2l0aF9zYXNoOlwiLFwiOmplYW5zOlwiLFwiOmtpbW9ubzpcIixcIjpiaWtpbmk6XCIsXCI6cmliYm9uOlwiLFwiOnRvcGhhdDpcIixcIjpjcm93bjpcIixcIjp3b21hbnNfaGF0OlwiLFwiOm1hbnNfc2hvZTpcIixcIjpjbG9zZWRfdW1icmVsbGE6XCIsXCI6YnJpZWZjYXNlOlwiLFwiOmhhbmRiYWc6XCIsXCI6cG91Y2g6XCIsXCI6cHVyc2U6XCIsXCI6ZXllZ2xhc3NlczpcIixcIjpmaXNoaW5nX3BvbGVfYW5kX2Zpc2g6XCIsXCI6Y29mZmVlOlwiLFwiOnRlYTpcIixcIjpzYWtlOlwiLFwiOmJhYnlfYm90dGxlOlwiLFwiOmJlZXI6XCIsXCI6YmVlcnM6XCIsXCI6Y29ja3RhaWw6XCIsXCI6dHJvcGljYWxfZHJpbms6XCIsXCI6d2luZV9nbGFzczpcIixcIjpmb3JrX2FuZF9rbmlmZTpcIixcIjpwaXp6YTpcIixcIjpoYW1idXJnZXI6XCIsXCI6ZnJpZXM6XCIsXCI6cG91bHRyeV9sZWc6XCIsXCI6bWVhdF9vbl9ib25lOlwiLFwiOnNwYWdoZXR0aTpcIixcIjpjdXJyeTpcIixcIjpmcmllZF9zaHJpbXA6XCIsXCI6YmVudG86XCIsXCI6c3VzaGk6XCIsXCI6ZmlzaF9jYWtlOlwiLFwiOnJpY2VfYmFsbDpcIixcIjpyaWNlX2NyYWNrZXI6XCIsXCI6cmljZTpcIixcIjpyYW1lbjpcIixcIjpzdGV3OlwiLFwiOm9kZW46XCIsXCI6ZGFuZ286XCIsXCI6ZWdnOlwiLFwiOmJyZWFkOlwiLFwiOmRvdWdobnV0OlwiLFwiOmN1c3RhcmQ6XCIsXCI6aWNlY3JlYW06XCIsXCI6aWNlX2NyZWFtOlwiLFwiOnNoYXZlZF9pY2U6XCIsXCI6YmlydGhkYXk6XCIsXCI6Y2FrZTpcIixcIjpjb29raWU6XCIsXCI6Y2hvY29sYXRlX2JhcjpcIixcIjpjYW5keTpcIixcIjpsb2xsaXBvcDpcIixcIjpob25leV9wb3Q6XCIsXCI6YXBwbGU6XCIsXCI6Z3JlZW5fYXBwbGU6XCIsXCI6dGFuZ2VyaW5lOlwiLFwiOmxlbW9uOlwiLFwiOmNoZXJyaWVzOlwiLFwiOmdyYXBlczpcIixcIjp3YXRlcm1lbG9uOlwiLFwiOnN0cmF3YmVycnk6XCIsXCI6cGVhY2g6XCIsXCI6bWVsb246XCIsXCI6YmFuYW5hOlwiLFwiOnBlYXI6XCIsXCI6cGluZWFwcGxlOlwiLFwiOnN3ZWV0X3BvdGF0bzpcIixcIjplZ2dwbGFudDpcIixcIjp0b21hdG86XCIsXCI6Y29ybjpcIixcIjphbGllbjpcIixcIjphbmdlbDpcIixcIjphbmdlcjpcIixcIjphbmdyeTpcIixcIjphbmd1aXNoZWQ6XCIsXCI6YXN0b25pc2hlZDpcIixcIjpiYWJ5OlwiLFwiOmJsdWVfaGVhcnQ6XCIsXCI6Ymx1c2g6XCIsXCI6Ym9vbTpcIixcIjpib3c6XCIsXCI6Ym93dGllOlwiLFwiOmJveTpcIixcIjpicmlkZV93aXRoX3ZlaWw6XCIsXCI6YnJva2VuX2hlYXJ0OlwiLFwiOmJ1c3RfaW5fc2lsaG91ZXR0ZTpcIixcIjpidXN0c19pbl9zaWxob3VldHRlOlwiLFwiOmNsYXA6XCIsXCI6Y29sZF9zd2VhdDpcIixcIjpjb2xsaXNpb246XCIsXCI6Y29uZm91bmRlZDpcIixcIjpjb25mdXNlZDpcIixcIjpjb25zdHJ1Y3Rpb25fd29ya2VyOlwiLFwiOmNvcDpcIixcIjpjb3VwbGVfd2l0aF9oZWFydDpcIixcIjpjb3VwbGU6XCIsXCI6Y291cGxla2lzczpcIixcIjpjcnk6XCIsXCI6Y3J5aW5nX2NhdF9mYWNlOlwiLFwiOmN1cGlkOlwiLFwiOmRhbmNlcjpcIixcIjpkYW5jZXJzOlwiLFwiOmRhc2g6XCIsXCI6ZGlzYXBwb2ludGVkOlwiLFwiOmRpenp5X2ZhY2U6XCIsXCI6ZGl6enk6XCIsXCI6ZHJvcGxldDpcIixcIjplYXI6XCIsXCI6ZXhjbGFtYXRpb246XCIsXCI6ZXhwcmVzc2lvbmxlc3M6XCIsXCI6ZXllczpcIixcIjpmYWNlcHVuY2g6XCIsXCI6ZmFtaWx5OlwiLFwiOmZlYXJmdWw6XCIsXCI6ZmVlbHNnb29kOlwiLFwiOmZlZXQ6XCIsXCI6ZmlubmFkaWU6XCIsXCI6ZmlyZTpcIixcIjpmaXN0OlwiLFwiOmZsdXNoZWQ6XCIsXCI6ZnJvd25pbmc6XCIsXCI6Z2lybDpcIixcIjpnb2JlcnNlcms6XCIsXCI6Z29kbW9kZTpcIixcIjpncmVlbl9oZWFydDpcIixcIjpncmV5X2V4Y2xhbWF0aW9uOlwiLFwiOmdyZXlfcXVlc3Rpb246XCIsXCI6Z3JpbWFjaW5nOlwiLFwiOmdyaW46XCIsXCI6Z3Jpbm5pbmc6XCIsXCI6Z3VhcmRzbWFuOlwiLFwiOmhhaXJjdXQ6XCIsXCI6aGFuZDpcIixcIjpoYW5rZXk6XCIsXCI6aGVhcl9ub19ldmlsOlwiLFwiOmhlYXJ0X2V5ZXNfY2F0OlwiLFwiOmhlYXJ0X2V5ZXM6XCIsXCI6aGVhcnQ6XCIsXCI6aGVhcnRiZWF0OlwiLFwiOmhlYXJ0cHVsc2U6XCIsXCI6aHVydHJlYWxiYWQ6XCIsXCI6aHVzaGVkOlwiLFwiOmltcDpcIixcIjppbmZvcm1hdGlvbl9kZXNrX3BlcnNvbjpcIixcIjppbm5vY2VudDpcIixcIjpqYXBhbmVzZV9nb2JsaW46XCIsXCI6amFwYW5lc2Vfb2dyZTpcIixcIjpqb3lfY2F0OlwiLFwiOmpveTpcIixcIjpraXNzOlwiLFwiOmtpc3NpbmdfY2F0OlwiLFwiOmtpc3NpbmdfY2xvc2VkX2V5ZXM6XCIsXCI6a2lzc2luZ19oZWFydDpcIixcIjpraXNzaW5nX3NtaWxpbmdfZXllczpcIixcIjpraXNzaW5nOlwiLFwiOmxhdWdoaW5nOlwiLFwiOmxpcHM6XCIsXCI6bG92ZV9sZXR0ZXI6XCIsXCI6bWFuX3dpdGhfZ3VhX3BpX21hbzpcIixcIjptYW5fd2l0aF90dXJiYW46XCIsXCI6bWFuOlwiLFwiOm1hc2s6XCIsXCI6bWFzc2FnZTpcIixcIjptZXRhbDpcIixcIjptdXNjbGU6XCIsXCI6bXVzaWNhbF9ub3RlOlwiLFwiOm5haWxfY2FyZTpcIixcIjpuZWNrYmVhcmQ6XCIsXCI6bmV1dHJhbF9mYWNlOlwiLFwiOm5vX2dvb2Q6XCIsXCI6bm9fbW91dGg6XCIsXCI6bm9zZTpcIixcIjpub3RlczpcIixcIjpva19oYW5kOlwiLFwiOm9rX3dvbWFuOlwiLFwiOm9sZGVyX21hbjpcIixcIjpvbGRlcl93b21hbjpcIixcIjpvcGVuX2hhbmRzOlwiLFwiOm9wZW5fbW91dGg6XCIsXCI6cGVuc2l2ZTpcIixcIjpwZXJzZXZlcmU6XCIsXCI6cGVyc29uX2Zyb3duaW5nOlwiLFwiOnBlcnNvbl93aXRoX2Jsb25kX2hhaXI6XCIsXCI6cGVyc29uX3dpdGhfcG91dGluZ19mYWNlOlwiLFwiOnBvaW50X2Rvd246XCIsXCI6cG9pbnRfbGVmdDpcIixcIjpwb2ludF9yaWdodDpcIixcIjpwb2ludF91cF8yOlwiLFwiOnBvaW50X3VwOlwiLFwiOnBvb3A6XCIsXCI6cG91dGluZ19jYXQ6XCIsXCI6cHJheTpcIixcIjpwcmluY2VzczpcIixcIjpwdW5jaDpcIixcIjpwdXJwbGVfaGVhcnQ6XCIsXCI6cXVlc3Rpb246XCIsXCI6cmFnZTpcIixcIjpyYWdlMTpcIixcIjpyYWdlMjpcIixcIjpyYWdlMzpcIixcIjpyYWdlNDpcIixcIjpyYWlzZWRfaGFuZDpcIixcIjpyYWlzZWRfaGFuZHM6XCIsXCI6cmVsYXhlZDpcIixcIjpyZWxpZXZlZDpcIixcIjpyZXZvbHZpbmdfaGVhcnRzOlwiLFwiOnJ1bm5lcjpcIixcIjpydW5uaW5nOlwiLFwiOnNhdGlzZmllZDpcIixcIjpzY3JlYW1fY2F0OlwiLFwiOnNjcmVhbTpcIixcIjpzZWVfbm9fZXZpbDpcIixcIjpzaGl0OlwiLFwiOnNrdWxsOlwiLFwiOnNsZWVwaW5nOlwiLFwiOnNsZWVweTpcIixcIjpzbWlsZV9jYXQ6XCIsXCI6c21pbGU6XCIsXCI6c21pbGV5X2NhdDpcIixcIjpzbWlsZXk6XCIsXCI6c21pbGluZ19pbXA6XCIsXCI6c21pcmtfY2F0OlwiLFwiOnNtaXJrOlwiLFwiOnNvYjpcIixcIjpzcGFya2xpbmdfaGVhcnQ6XCIsXCI6c3BhcmtsZXM6XCIsXCI6c3BlYWtfbm9fZXZpbDpcIixcIjpzcGVlY2hfYmFsbG9vbjpcIixcIjpzdGFyOlwiLFwiOnN0YXIyOlwiLFwiOnN0dWNrX291dF90b25ndWVfY2xvc2VkX2V5ZXM6XCIsXCI6c3R1Y2tfb3V0X3Rvbmd1ZV93aW5raW5nX2V5ZTpcIixcIjpzdHVja19vdXRfdG9uZ3VlOlwiLFwiOnN1bmdsYXNzZXM6XCIsXCI6c3VzcGVjdDpcIixcIjpzd2VhdF9kcm9wczpcIixcIjpzd2VhdF9zbWlsZTpcIixcIjpzd2VhdDpcIixcIjp0aG91Z2h0X2JhbGxvb246XCIsXCI6LTE6XCIsXCI6dGh1bWJzZG93bjpcIixcIjp0aHVtYnN1cDpcIixcIjorMTpcIixcIjp0aXJlZF9mYWNlOlwiLFwiOnRvbmd1ZTpcIixcIjp0cml1bXBoOlwiLFwiOnRyb2xsZmFjZTpcIixcIjp0d29faGVhcnRzOlwiLFwiOnR3b19tZW5faG9sZGluZ19oYW5kczpcIixcIjp0d29fd29tZW5faG9sZGluZ19oYW5kczpcIixcIjp1bmFtdXNlZDpcIixcIjp2OlwiLFwiOndhbGtpbmc6XCIsXCI6d2F2ZTpcIixcIjp3ZWFyeTpcIixcIjp3aW5rMjpcIixcIjp3aW5rOlwiLFwiOndvbWFuOlwiLFwiOndvcnJpZWQ6XCIsXCI6eWVsbG93X2hlYXJ0OlwiLFwiOnl1bTpcIixcIjp6eno6XCIsXCI6MTA5OlwiLFwiOmhvdXNlOlwiLFwiOmhvdXNlX3dpdGhfZ2FyZGVuOlwiLFwiOnNjaG9vbDpcIixcIjpvZmZpY2U6XCIsXCI6cG9zdF9vZmZpY2U6XCIsXCI6aG9zcGl0YWw6XCIsXCI6YmFuazpcIixcIjpjb252ZW5pZW5jZV9zdG9yZTpcIixcIjpsb3ZlX2hvdGVsOlwiLFwiOmhvdGVsOlwiLFwiOndlZGRpbmc6XCIsXCI6Y2h1cmNoOlwiLFwiOmRlcGFydG1lbnRfc3RvcmU6XCIsXCI6ZXVyb3BlYW5fcG9zdF9vZmZpY2U6XCIsXCI6Y2l0eV9zdW5yaXNlOlwiLFwiOmNpdHlfc3Vuc2V0OlwiLFwiOmphcGFuZXNlX2Nhc3RsZTpcIixcIjpldXJvcGVhbl9jYXN0bGU6XCIsXCI6dGVudDpcIixcIjpmYWN0b3J5OlwiLFwiOnRva3lvX3Rvd2VyOlwiLFwiOmphcGFuOlwiLFwiOm1vdW50X2Z1amk6XCIsXCI6c3VucmlzZV9vdmVyX21vdW50YWluczpcIixcIjpzdW5yaXNlOlwiLFwiOnN0YXJzOlwiLFwiOnN0YXR1ZV9vZl9saWJlcnR5OlwiLFwiOmJyaWRnZV9hdF9uaWdodDpcIixcIjpjYXJvdXNlbF9ob3JzZTpcIixcIjpyYWluYm93OlwiLFwiOmZlcnJpc193aGVlbDpcIixcIjpmb3VudGFpbjpcIixcIjpyb2xsZXJfY29hc3RlcjpcIixcIjpzaGlwOlwiLFwiOnNwZWVkYm9hdDpcIixcIjpib2F0OlwiLFwiOnNhaWxib2F0OlwiLFwiOnJvd2JvYXQ6XCIsXCI6YW5jaG9yOlwiLFwiOnJvY2tldDpcIixcIjphaXJwbGFuZTpcIixcIjpoZWxpY29wdGVyOlwiLFwiOnN0ZWFtX2xvY29tb3RpdmU6XCIsXCI6dHJhbTpcIixcIjptb3VudGFpbl9yYWlsd2F5OlwiLFwiOmJpa2U6XCIsXCI6YWVyaWFsX3RyYW13YXk6XCIsXCI6c3VzcGVuc2lvbl9yYWlsd2F5OlwiLFwiOm1vdW50YWluX2NhYmxld2F5OlwiLFwiOnRyYWN0b3I6XCIsXCI6Ymx1ZV9jYXI6XCIsXCI6b25jb21pbmdfYXV0b21vYmlsZTpcIixcIjpjYXI6XCIsXCI6cmVkX2NhcjpcIixcIjp0YXhpOlwiLFwiOm9uY29taW5nX3RheGk6XCIsXCI6YXJ0aWN1bGF0ZWRfbG9ycnk6XCIsXCI6YnVzOlwiLFwiOm9uY29taW5nX2J1czpcIixcIjpyb3RhdGluZ19saWdodDpcIixcIjpwb2xpY2VfY2FyOlwiLFwiOm9uY29taW5nX3BvbGljZV9jYXI6XCIsXCI6ZmlyZV9lbmdpbmU6XCIsXCI6YW1idWxhbmNlOlwiLFwiOm1pbmlidXM6XCIsXCI6dHJ1Y2s6XCIsXCI6dHJhaW46XCIsXCI6c3RhdGlvbjpcIixcIjp0cmFpbjI6XCIsXCI6YnVsbGV0dHJhaW5fZnJvbnQ6XCIsXCI6YnVsbGV0dHJhaW5fc2lkZTpcIixcIjpsaWdodF9yYWlsOlwiLFwiOm1vbm9yYWlsOlwiLFwiOnJhaWx3YXlfY2FyOlwiLFwiOnRyb2xsZXlidXM6XCIsXCI6dGlja2V0OlwiLFwiOmZ1ZWxwdW1wOlwiLFwiOnZlcnRpY2FsX3RyYWZmaWNfbGlnaHQ6XCIsXCI6dHJhZmZpY19saWdodDpcIixcIjp3YXJuaW5nOlwiLFwiOmNvbnN0cnVjdGlvbjpcIixcIjpiZWdpbm5lcjpcIixcIjphdG06XCIsXCI6c2xvdF9tYWNoaW5lOlwiLFwiOmJ1c3N0b3A6XCIsXCI6YmFyYmVyOlwiLFwiOmhvdHNwcmluZ3M6XCIsXCI6Y2hlY2tlcmVkX2ZsYWc6XCIsXCI6Y3Jvc3NlZF9mbGFnczpcIixcIjppemFrYXlhX2xhbnRlcm46XCIsXCI6bW95YWk6XCIsXCI6Y2lyY3VzX3RlbnQ6XCIsXCI6cGVyZm9ybWluZ19hcnRzOlwiLFwiOnJvdW5kX3B1c2hwaW46XCIsXCI6dHJpYW5ndWxhcl9mbGFnX29uX3Bvc3Q6XCIsXCI6anA6XCIsXCI6a3I6XCIsXCI6Y246XCIsXCI6dXM6XCIsXCI6ZnI6XCIsXCI6ZXM6XCIsXCI6aXQ6XCIsXCI6cnU6XCIsXCI6Z2I6XCIsXCI6dWs6XCIsXCI6ZGU6XCIsXCI6MTAwOlwiLFwiOjEyMzQ6XCIsXCI6b25lOlwiLFwiOnR3bzpcIixcIjp0aHJlZTpcIixcIjpmb3VyOlwiLFwiOmZpdmU6XCIsXCI6c2l4OlwiLFwiOnNldmVuOlwiLFwiOmVpZ2h0OlwiLFwiOm5pbmU6XCIsXCI6a2V5Y2FwX3RlbjpcIixcIjp6ZXJvOlwiLFwiOmhhc2g6XCIsXCI6c3ltYm9sczpcIixcIjphcnJvd19iYWNrd2FyZDpcIixcIjphcnJvd19kb3duOlwiLFwiOmFycm93X2ZvcndhcmQ6XCIsXCI6YXJyb3dfbGVmdDpcIixcIjpjYXBpdGFsX2FiY2Q6XCIsXCI6YWJjZDpcIixcIjphYmM6XCIsXCI6YXJyb3dfbG93ZXJfbGVmdDpcIixcIjphcnJvd19sb3dlcl9yaWdodDpcIixcIjphcnJvd19yaWdodDpcIixcIjphcnJvd191cDpcIixcIjphcnJvd191cHBlcl9sZWZ0OlwiLFwiOmFycm93X3VwcGVyX3JpZ2h0OlwiLFwiOmFycm93X2RvdWJsZV9kb3duOlwiLFwiOmFycm93X2RvdWJsZV91cDpcIixcIjphcnJvd19kb3duX3NtYWxsOlwiLFwiOmFycm93X2hlYWRpbmdfZG93bjpcIixcIjphcnJvd19oZWFkaW5nX3VwOlwiLFwiOmxlZnR3YXJkc19hcnJvd193aXRoX2hvb2s6XCIsXCI6YXJyb3dfcmlnaHRfaG9vazpcIixcIjpsZWZ0X3JpZ2h0X2Fycm93OlwiLFwiOmFycm93X3VwX2Rvd246XCIsXCI6YXJyb3dfdXBfc21hbGw6XCIsXCI6YXJyb3dzX2Nsb2Nrd2lzZTpcIixcIjphcnJvd3NfY291bnRlcmNsb2Nrd2lzZTpcIixcIjpyZXdpbmQ6XCIsXCI6ZmFzdF9mb3J3YXJkOlwiLFwiOmluZm9ybWF0aW9uX3NvdXJjZTpcIixcIjpvazpcIixcIjp0d2lzdGVkX3JpZ2h0d2FyZHNfYXJyb3dzOlwiLFwiOnJlcGVhdDpcIixcIjpyZXBlYXRfb25lOlwiLFwiOm5ldzpcIixcIjp0b3A6XCIsXCI6dXA6XCIsXCI6Y29vbDpcIixcIjpmcmVlOlwiLFwiOm5nOlwiLFwiOmNpbmVtYTpcIixcIjprb2tvOlwiLFwiOnNpZ25hbF9zdHJlbmd0aDpcIixcIjp1NTI3MjpcIixcIjp1NTQwODpcIixcIjp1NTViNjpcIixcIjp1NjMwNzpcIixcIjp1NjcwODpcIixcIjp1NjcwOTpcIixcIjp1NmU4MDpcIixcIjp1NzEyMTpcIixcIjp1NzUzMzpcIixcIjp1N2E3YTpcIixcIjp1Nzk4MTpcIixcIjpzYTpcIixcIjpyZXN0cm9vbTpcIixcIjptZW5zOlwiLFwiOndvbWVuczpcIixcIjpiYWJ5X3N5bWJvbDpcIixcIjpub19zbW9raW5nOlwiLFwiOnBhcmtpbmc6XCIsXCI6d2hlZWxjaGFpcjpcIixcIjptZXRybzpcIixcIjpiYWdnYWdlX2NsYWltOlwiLFwiOmFjY2VwdDpcIixcIjp3YzpcIixcIjpwb3RhYmxlX3dhdGVyOlwiLFwiOnB1dF9saXR0ZXJfaW5faXRzX3BsYWNlOlwiLFwiOnNlY3JldDpcIixcIjpjb25ncmF0dWxhdGlvbnM6XCIsXCI6bTpcIixcIjpwYXNzcG9ydF9jb250cm9sOlwiLFwiOmxlZnRfbHVnZ2FnZTpcIixcIjpjdXN0b21zOlwiLFwiOmlkZW9ncmFwaF9hZHZhbnRhZ2U6XCIsXCI6Y2w6XCIsXCI6c29zOlwiLFwiOmlkOlwiLFwiOm5vX2VudHJ5X3NpZ246XCIsXCI6dW5kZXJhZ2U6XCIsXCI6bm9fbW9iaWxlX3Bob25lczpcIixcIjpkb19ub3RfbGl0dGVyOlwiLFwiOm5vbi1wb3RhYmxlX3dhdGVyOlwiLFwiOm5vX2JpY3ljbGVzOlwiLFwiOm5vX3BlZGVzdHJpYW5zOlwiLFwiOmNoaWxkcmVuX2Nyb3NzaW5nOlwiLFwiOm5vX2VudHJ5OlwiLFwiOmVpZ2h0X3Nwb2tlZF9hc3RlcmlzazpcIixcIjplaWdodF9wb2ludGVkX2JsYWNrX3N0YXI6XCIsXCI6aGVhcnRfZGVjb3JhdGlvbjpcIixcIjp2czpcIixcIjp2aWJyYXRpb25fbW9kZTpcIixcIjptb2JpbGVfcGhvbmVfb2ZmOlwiLFwiOmNoYXJ0OlwiLFwiOmN1cnJlbmN5X2V4Y2hhbmdlOlwiLFwiOmFyaWVzOlwiLFwiOnRhdXJ1czpcIixcIjpnZW1pbmk6XCIsXCI6Y2FuY2VyOlwiLFwiOmxlbzpcIixcIjp2aXJnbzpcIixcIjpsaWJyYTpcIixcIjpzY29ycGl1czpcIixcIjpzYWdpdHRhcml1czpcIixcIjpjYXByaWNvcm46XCIsXCI6YXF1YXJpdXM6XCIsXCI6cGlzY2VzOlwiLFwiOm9waGl1Y2h1czpcIixcIjpzaXhfcG9pbnRlZF9zdGFyOlwiLFwiOm5lZ2F0aXZlX3NxdWFyZWRfY3Jvc3NfbWFyazpcIixcIjphOlwiLFwiOmI6XCIsXCI6YWI6XCIsXCI6bzI6XCIsXCI6ZGlhbW9uZF9zaGFwZV93aXRoX2FfZG90X2luc2lkZTpcIixcIjpyZWN5Y2xlOlwiLFwiOmVuZDpcIixcIjpvbjpcIixcIjpzb29uOlwiLFwiOmNsb2NrMTpcIixcIjpjbG9jazEzMDpcIixcIjpjbG9jazEwOlwiLFwiOmNsb2NrMTAzMDpcIixcIjpjbG9jazExOlwiLFwiOmNsb2NrMTEzMDpcIixcIjpjbG9jazEyOlwiLFwiOmNsb2NrMTIzMDpcIixcIjpjbG9jazI6XCIsXCI6Y2xvY2syMzA6XCIsXCI6Y2xvY2szOlwiLFwiOmNsb2NrMzMwOlwiLFwiOmNsb2NrNDpcIixcIjpjbG9jazQzMDpcIixcIjpjbG9jazU6XCIsXCI6Y2xvY2s1MzA6XCIsXCI6Y2xvY2s2OlwiLFwiOmNsb2NrNjMwOlwiLFwiOmNsb2NrNzpcIixcIjpjbG9jazczMDpcIixcIjpjbG9jazg6XCIsXCI6Y2xvY2s4MzA6XCIsXCI6Y2xvY2s5OlwiLFwiOmNsb2NrOTMwOlwiLFwiOmhlYXZ5X2RvbGxhcl9zaWduOlwiLFwiOmNvcHlyaWdodDpcIixcIjpyZWdpc3RlcmVkOlwiLFwiOnRtOlwiLFwiOng6XCIsXCI6aGVhdnlfZXhjbGFtYXRpb25fbWFyazpcIixcIjpiYW5nYmFuZzpcIixcIjppbnRlcnJvYmFuZzpcIixcIjpvOlwiLFwiOmhlYXZ5X211bHRpcGxpY2F0aW9uX3g6XCIsXCI6aGVhdnlfcGx1c19zaWduOlwiLFwiOmhlYXZ5X21pbnVzX3NpZ246XCIsXCI6aGVhdnlfZGl2aXNpb25fc2lnbjpcIixcIjp3aGl0ZV9mbG93ZXI6XCIsXCI6aGVhdnlfY2hlY2tfbWFyazpcIixcIjpiYWxsb3RfYm94X3dpdGhfY2hlY2s6XCIsXCI6cmFkaW9fYnV0dG9uOlwiLFwiOmxpbms6XCIsXCI6Y3VybHlfbG9vcDpcIixcIjp3YXZ5X2Rhc2g6XCIsXCI6cGFydF9hbHRlcm5hdGlvbl9tYXJrOlwiLFwiOnRyaWRlbnQ6XCIsXCI6YmxhY2tfc3F1YXJlOlwiLFwiOndoaXRlX3NxdWFyZTpcIixcIjp3aGl0ZV9jaGVja19tYXJrOlwiLFwiOmJsYWNrX3NxdWFyZV9idXR0b246XCIsXCI6d2hpdGVfc3F1YXJlX2J1dHRvbjpcIixcIjpibGFja19jaXJjbGU6XCIsXCI6d2hpdGVfY2lyY2xlOlwiLFwiOnJlZF9jaXJjbGU6XCIsXCI6bGFyZ2VfYmx1ZV9jaXJjbGU6XCIsXCI6bGFyZ2VfYmx1ZV9kaWFtb25kOlwiLFwiOmxhcmdlX29yYW5nZV9kaWFtb25kOlwiLFwiOnNtYWxsX2JsdWVfZGlhbW9uZDpcIixcIjpzbWFsbF9vcmFuZ2VfZGlhbW9uZDpcIixcIjpzbWFsbF9yZWRfdHJpYW5nbGU6XCIsXCI6c21hbGxfcmVkX3RyaWFuZ2xlX2Rvd246XCIsXCI6c2hpcGl0OlwiXSxcbiAgICAgICAgdGVzdCA9IC9cXDpbYS16MC05X1xcLVxcK10rXFw6L2c7XG5cbiAgICBmdW5jdGlvbiBlbW9qaShzb21lU3RyaW5nLCB1cmwsIHNpemUpIHtcbiAgICAgICAgcmV0dXJuIHNvbWVTdHJpbmcucmVwbGFjZSh0ZXN0LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGlmIChlbW9qaXMuaW5kZXhPZihtYXRjaCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBTdHJpbmcobWF0Y2gpLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzxpbWcgY2xhc3M9XCJlbW9qaVwiIHRpdGxlPVwiOicgKyBuYW1lICsgJzpcIiBhbHQ9XCInICsgbmFtZSArICdcIiBzcmM9XCInICsgdXJsICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgJy5wbmdcIicgKyAoc2l6ZSA/ICgnIGhlaWdodD1cIicgKyBzaXplICsgJ1wiJykgOiAnJykgKyAnIC8+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZW1vamkubGlzdCA9IGVtb2ppcztcblxuICAgIHJldHVybiBlbW9qaTtcbn0pKTtcbiJdfQ== | |
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"OssCdo":[function(require,module,exports){ | |
(function (global){ | |
/** | |
* marked - a markdown parser | |
* Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) | |
* https://github.com/chjj/marked | |
*/ | |
;(function() { | |
/** | |
* Block-Level Grammar | |
*/ | |
var block = { | |
newline: /^\n+/, | |
code: /^( {4}[^\n]+\n*)+/, | |
fences: noop, | |
hr: /^( *[-*_]){3,} *(?:\n+|$)/, | |
heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, | |
nptable: noop, | |
lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, | |
blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, | |
list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, | |
html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, | |
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, | |
table: noop, | |
paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, | |
text: /^[^\n]+/ | |
}; | |
block.bullet = /(?:[*+-]|\d+\.)/; | |
block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; | |
block.item = replace(block.item, 'gm') | |
(/bull/g, block.bullet) | |
(); | |
block.list = replace(block.list) | |
(/bull/g, block.bullet) | |
('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))') | |
('def', '\\n+(?=' + block.def.source + ')') | |
(); | |
block.blockquote = replace(block.blockquote) | |
('def', block.def) | |
(); | |
block._tag = '(?!(?:' | |
+ 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' | |
+ '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' | |
+ '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b'; | |
block.html = replace(block.html) | |
('comment', /<!--[\s\S]*?-->/) | |
('closed', /<(tag)[\s\S]+?<\/\1>/) | |
('closing', /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/) | |
(/tag/g, block._tag) | |
(); | |
block.paragraph = replace(block.paragraph) | |
('hr', block.hr) | |
('heading', block.heading) | |
('lheading', block.lheading) | |
('blockquote', block.blockquote) | |
('tag', '<' + block._tag) | |
('def', block.def) | |
(); | |
/** | |
* Normal Block Grammar | |
*/ | |
block.normal = merge({}, block); | |
/** | |
* GFM Block Grammar | |
*/ | |
block.gfm = merge({}, block.normal, { | |
fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, | |
paragraph: /^/ | |
}); | |
block.gfm.paragraph = replace(block.paragraph) | |
('(?!', '(?!' | |
+ block.gfm.fences.source.replace('\\1', '\\2') + '|' | |
+ block.list.source.replace('\\1', '\\3') + '|') | |
(); | |
/** | |
* GFM + Tables Block Grammar | |
*/ | |
block.tables = merge({}, block.gfm, { | |
nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, | |
table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ | |
}); | |
/** | |
* Block Lexer | |
*/ | |
function Lexer(options) { | |
this.tokens = []; | |
this.tokens.links = {}; | |
this.options = options || marked.defaults; | |
this.rules = block.normal; | |
if (this.options.gfm) { | |
if (this.options.tables) { | |
this.rules = block.tables; | |
} else { | |
this.rules = block.gfm; | |
} | |
} | |
} | |
/** | |
* Expose Block Rules | |
*/ | |
Lexer.rules = block; | |
/** | |
* Static Lex Method | |
*/ | |
Lexer.lex = function(src, options) { | |
var lexer = new Lexer(options); | |
return lexer.lex(src); | |
}; | |
/** | |
* Preprocessing | |
*/ | |
Lexer.prototype.lex = function(src) { | |
src = src | |
.replace(/\r\n|\r/g, '\n') | |
.replace(/\t/g, ' ') | |
.replace(/\u00a0/g, ' ') | |
.replace(/\u2424/g, '\n'); | |
return this.token(src, true); | |
}; | |
/** | |
* Lexing | |
*/ | |
Lexer.prototype.token = function(src, top, bq) { | |
var src = src.replace(/^ +$/gm, '') | |
, next | |
, loose | |
, cap | |
, bull | |
, b | |
, item | |
, space | |
, i | |
, l; | |
while (src) { | |
// newline | |
if (cap = this.rules.newline.exec(src)) { | |
src = src.substring(cap[0].length); | |
if (cap[0].length > 1) { | |
this.tokens.push({ | |
type: 'space' | |
}); | |
} | |
} | |
// code | |
if (cap = this.rules.code.exec(src)) { | |
src = src.substring(cap[0].length); | |
cap = cap[0].replace(/^ {4}/gm, ''); | |
this.tokens.push({ | |
type: 'code', | |
text: !this.options.pedantic | |
? cap.replace(/\n+$/, '') | |
: cap | |
}); | |
continue; | |
} | |
// fences (gfm) | |
if (cap = this.rules.fences.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'code', | |
lang: cap[2], | |
text: cap[3] | |
}); | |
continue; | |
} | |
// heading | |
if (cap = this.rules.heading.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'heading', | |
depth: cap[1].length, | |
text: cap[2] | |
}); | |
continue; | |
} | |
// table no leading pipe (gfm) | |
if (top && (cap = this.rules.nptable.exec(src))) { | |
src = src.substring(cap[0].length); | |
item = { | |
type: 'table', | |
header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), | |
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), | |
cells: cap[3].replace(/\n$/, '').split('\n') | |
}; | |
for (i = 0; i < item.align.length; i++) { | |
if (/^ *-+: *$/.test(item.align[i])) { | |
item.align[i] = 'right'; | |
} else if (/^ *:-+: *$/.test(item.align[i])) { | |
item.align[i] = 'center'; | |
} else if (/^ *:-+ *$/.test(item.align[i])) { | |
item.align[i] = 'left'; | |
} else { | |
item.align[i] = null; | |
} | |
} | |
for (i = 0; i < item.cells.length; i++) { | |
item.cells[i] = item.cells[i].split(/ *\| */); | |
} | |
this.tokens.push(item); | |
continue; | |
} | |
// lheading | |
if (cap = this.rules.lheading.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'heading', | |
depth: cap[2] === '=' ? 1 : 2, | |
text: cap[1] | |
}); | |
continue; | |
} | |
// hr | |
if (cap = this.rules.hr.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'hr' | |
}); | |
continue; | |
} | |
// blockquote | |
if (cap = this.rules.blockquote.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'blockquote_start' | |
}); | |
cap = cap[0].replace(/^ *> ?/gm, ''); | |
// Pass `top` to keep the current | |
// "toplevel" state. This is exactly | |
// how markdown.pl works. | |
this.token(cap, top, true); | |
this.tokens.push({ | |
type: 'blockquote_end' | |
}); | |
continue; | |
} | |
// list | |
if (cap = this.rules.list.exec(src)) { | |
src = src.substring(cap[0].length); | |
bull = cap[2]; | |
this.tokens.push({ | |
type: 'list_start', | |
ordered: bull.length > 1 | |
}); | |
// Get each top-level item. | |
cap = cap[0].match(this.rules.item); | |
next = false; | |
l = cap.length; | |
i = 0; | |
for (; i < l; i++) { | |
item = cap[i]; | |
// Remove the list item's bullet | |
// so it is seen as the next token. | |
space = item.length; | |
item = item.replace(/^ *([*+-]|\d+\.) +/, ''); | |
// Outdent whatever the | |
// list item contains. Hacky. | |
if (~item.indexOf('\n ')) { | |
space -= item.length; | |
item = !this.options.pedantic | |
? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') | |
: item.replace(/^ {1,4}/gm, ''); | |
} | |
// Determine whether the next list item belongs here. | |
// Backpedal if it does not belong in this list. | |
if (this.options.smartLists && i !== l - 1) { | |
b = block.bullet.exec(cap[i + 1])[0]; | |
if (bull !== b && !(bull.length > 1 && b.length > 1)) { | |
src = cap.slice(i + 1).join('\n') + src; | |
i = l - 1; | |
} | |
} | |
// Determine whether item is loose or not. | |
// Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ | |
// for discount behavior. | |
loose = next || /\n\n(?!\s*$)/.test(item); | |
if (i !== l - 1) { | |
next = item.charAt(item.length - 1) === '\n'; | |
if (!loose) loose = next; | |
} | |
this.tokens.push({ | |
type: loose | |
? 'loose_item_start' | |
: 'list_item_start' | |
}); | |
// Recurse. | |
this.token(item, false, bq); | |
this.tokens.push({ | |
type: 'list_item_end' | |
}); | |
} | |
this.tokens.push({ | |
type: 'list_end' | |
}); | |
continue; | |
} | |
// html | |
if (cap = this.rules.html.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: this.options.sanitize | |
? 'paragraph' | |
: 'html', | |
pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style', | |
text: cap[0] | |
}); | |
continue; | |
} | |
// def | |
if ((!bq && top) && (cap = this.rules.def.exec(src))) { | |
src = src.substring(cap[0].length); | |
this.tokens.links[cap[1].toLowerCase()] = { | |
href: cap[2], | |
title: cap[3] | |
}; | |
continue; | |
} | |
// table (gfm) | |
if (top && (cap = this.rules.table.exec(src))) { | |
src = src.substring(cap[0].length); | |
item = { | |
type: 'table', | |
header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), | |
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), | |
cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') | |
}; | |
for (i = 0; i < item.align.length; i++) { | |
if (/^ *-+: *$/.test(item.align[i])) { | |
item.align[i] = 'right'; | |
} else if (/^ *:-+: *$/.test(item.align[i])) { | |
item.align[i] = 'center'; | |
} else if (/^ *:-+ *$/.test(item.align[i])) { | |
item.align[i] = 'left'; | |
} else { | |
item.align[i] = null; | |
} | |
} | |
for (i = 0; i < item.cells.length; i++) { | |
item.cells[i] = item.cells[i] | |
.replace(/^ *\| *| *\| *$/g, '') | |
.split(/ *\| */); | |
} | |
this.tokens.push(item); | |
continue; | |
} | |
// top-level paragraph | |
if (top && (cap = this.rules.paragraph.exec(src))) { | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'paragraph', | |
text: cap[1].charAt(cap[1].length - 1) === '\n' | |
? cap[1].slice(0, -1) | |
: cap[1] | |
}); | |
continue; | |
} | |
// text | |
if (cap = this.rules.text.exec(src)) { | |
// Top-level should never reach here. | |
src = src.substring(cap[0].length); | |
this.tokens.push({ | |
type: 'text', | |
text: cap[0] | |
}); | |
continue; | |
} | |
if (src) { | |
throw new | |
Error('Infinite loop on byte: ' + src.charCodeAt(0)); | |
} | |
} | |
return this.tokens; | |
}; | |
/** | |
* Inline-Level Grammar | |
*/ | |
var inline = { | |
escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, | |
autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, | |
url: noop, | |
tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, | |
link: /^!?\[(inside)\]\(href\)/, | |
reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, | |
nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, | |
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, | |
em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, | |
code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, | |
br: /^ {2,}\n(?!\s*$)/, | |
del: noop, | |
text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/ | |
}; | |
inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/; | |
inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/; | |
inline.link = replace(inline.link) | |
('inside', inline._inside) | |
('href', inline._href) | |
(); | |
inline.reflink = replace(inline.reflink) | |
('inside', inline._inside) | |
(); | |
/** | |
* Normal Inline Grammar | |
*/ | |
inline.normal = merge({}, inline); | |
/** | |
* Pedantic Inline Grammar | |
*/ | |
inline.pedantic = merge({}, inline.normal, { | |
strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, | |
em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ | |
}); | |
/** | |
* GFM Inline Grammar | |
*/ | |
inline.gfm = merge({}, inline.normal, { | |
escape: replace(inline.escape)('])', '~|])')(), | |
url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, | |
del: /^~~(?=\S)([\s\S]*?\S)~~/, | |
text: replace(inline.text) | |
(']|', '~]|') | |
('|', '|https?://|') | |
() | |
}); | |
/** | |
* GFM + Line Breaks Inline Grammar | |
*/ | |
inline.breaks = merge({}, inline.gfm, { | |
br: replace(inline.br)('{2,}', '*')(), | |
text: replace(inline.gfm.text)('{2,}', '*')() | |
}); | |
/** | |
* Inline Lexer & Compiler | |
*/ | |
function InlineLexer(links, options) { | |
this.options = options || marked.defaults; | |
this.links = links; | |
this.rules = inline.normal; | |
this.renderer = this.options.renderer || new Renderer; | |
this.renderer.options = this.options; | |
if (!this.links) { | |
throw new | |
Error('Tokens array requires a `links` property.'); | |
} | |
if (this.options.gfm) { | |
if (this.options.breaks) { | |
this.rules = inline.breaks; | |
} else { | |
this.rules = inline.gfm; | |
} | |
} else if (this.options.pedantic) { | |
this.rules = inline.pedantic; | |
} | |
} | |
/** | |
* Expose Inline Rules | |
*/ | |
InlineLexer.rules = inline; | |
/** | |
* Static Lexing/Compiling Method | |
*/ | |
InlineLexer.output = function(src, links, options) { | |
var inline = new InlineLexer(links, options); | |
return inline.output(src); | |
}; | |
/** | |
* Lexing/Compiling | |
*/ | |
InlineLexer.prototype.output = function(src) { | |
var out = '' | |
, link | |
, text | |
, href | |
, cap; | |
while (src) { | |
// escape | |
if (cap = this.rules.escape.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += cap[1]; | |
continue; | |
} | |
// autolink | |
if (cap = this.rules.autolink.exec(src)) { | |
src = src.substring(cap[0].length); | |
if (cap[2] === '@') { | |
text = cap[1].charAt(6) === ':' | |
? this.mangle(cap[1].substring(7)) | |
: this.mangle(cap[1]); | |
href = this.mangle('mailto:') + text; | |
} else { | |
text = escape(cap[1]); | |
href = text; | |
} | |
out += this.renderer.link(href, null, text); | |
continue; | |
} | |
// url (gfm) | |
if (!this.inLink && (cap = this.rules.url.exec(src))) { | |
src = src.substring(cap[0].length); | |
text = escape(cap[1]); | |
href = text; | |
out += this.renderer.link(href, null, text); | |
continue; | |
} | |
// tag | |
if (cap = this.rules.tag.exec(src)) { | |
if (!this.inLink && /^<a /i.test(cap[0])) { | |
this.inLink = true; | |
} else if (this.inLink && /^<\/a>/i.test(cap[0])) { | |
this.inLink = false; | |
} | |
src = src.substring(cap[0].length); | |
out += this.options.sanitize | |
? escape(cap[0]) | |
: cap[0]; | |
continue; | |
} | |
// link | |
if (cap = this.rules.link.exec(src)) { | |
src = src.substring(cap[0].length); | |
this.inLink = true; | |
out += this.outputLink(cap, { | |
href: cap[2], | |
title: cap[3] | |
}); | |
this.inLink = false; | |
continue; | |
} | |
// reflink, nolink | |
if ((cap = this.rules.reflink.exec(src)) | |
|| (cap = this.rules.nolink.exec(src))) { | |
src = src.substring(cap[0].length); | |
link = (cap[2] || cap[1]).replace(/\s+/g, ' '); | |
link = this.links[link.toLowerCase()]; | |
if (!link || !link.href) { | |
out += cap[0].charAt(0); | |
src = cap[0].substring(1) + src; | |
continue; | |
} | |
this.inLink = true; | |
out += this.outputLink(cap, link); | |
this.inLink = false; | |
continue; | |
} | |
// strong | |
if (cap = this.rules.strong.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += this.renderer.strong(this.output(cap[2] || cap[1])); | |
continue; | |
} | |
// em | |
if (cap = this.rules.em.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += this.renderer.em(this.output(cap[2] || cap[1])); | |
continue; | |
} | |
// code | |
if (cap = this.rules.code.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += this.renderer.codespan(escape(cap[2], true)); | |
continue; | |
} | |
// br | |
if (cap = this.rules.br.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += this.renderer.br(); | |
continue; | |
} | |
// del (gfm) | |
if (cap = this.rules.del.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += this.renderer.del(this.output(cap[1])); | |
continue; | |
} | |
// text | |
if (cap = this.rules.text.exec(src)) { | |
src = src.substring(cap[0].length); | |
out += escape(this.smartypants(cap[0])); | |
continue; | |
} | |
if (src) { | |
throw new | |
Error('Infinite loop on byte: ' + src.charCodeAt(0)); | |
} | |
} | |
return out; | |
}; | |
/** | |
* Compile Link | |
*/ | |
InlineLexer.prototype.outputLink = function(cap, link) { | |
var href = escape(link.href) | |
, title = link.title ? escape(link.title) : null; | |
return cap[0].charAt(0) !== '!' | |
? this.renderer.link(href, title, this.output(cap[1])) | |
: this.renderer.image(href, title, escape(cap[1])); | |
}; | |
/** | |
* Smartypants Transformations | |
*/ | |
InlineLexer.prototype.smartypants = function(text) { | |
if (!this.options.smartypants) return text; | |
return text | |
// em-dashes | |
.replace(/--/g, '\u2014') | |
// opening singles | |
.replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') | |
// closing singles & apostrophes | |
.replace(/'/g, '\u2019') | |
// opening doubles | |
.replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') | |
// closing doubles | |
.replace(/"/g, '\u201d') | |
// ellipses | |
.replace(/\.{3}/g, '\u2026'); | |
}; | |
/** | |
* Mangle Links | |
*/ | |
InlineLexer.prototype.mangle = function(text) { | |
var out = '' | |
, l = text.length | |
, i = 0 | |
, ch; | |
for (; i < l; i++) { | |
ch = text.charCodeAt(i); | |
if (Math.random() > 0.5) { | |
ch = 'x' + ch.toString(16); | |
} | |
out += '&#' + ch + ';'; | |
} | |
return out; | |
}; | |
/** | |
* Renderer | |
*/ | |
function Renderer(options) { | |
this.options = options || {}; | |
} | |
Renderer.prototype.code = function(code, lang, escaped) { | |
if (this.options.highlight) { | |
var out = this.options.highlight(code, lang); | |
if (out != null && out !== code) { | |
escaped = true; | |
code = out; | |
} | |
} | |
if (!lang) { | |
return '<pre><code>' | |
+ (escaped ? code : escape(code, true)) | |
+ '\n</code></pre>'; | |
} | |
return '<pre><code class="' | |
+ this.options.langPrefix | |
+ escape(lang, true) | |
+ '">' | |
+ (escaped ? code : escape(code, true)) | |
+ '\n</code></pre>\n'; | |
}; | |
Renderer.prototype.blockquote = function(quote) { | |
return '<blockquote>\n' + quote + '</blockquote>\n'; | |
}; | |
Renderer.prototype.html = function(html) { | |
return html; | |
}; | |
Renderer.prototype.heading = function(text, level, raw) { | |
return '<h' | |
+ level | |
+ ' id="' | |
+ this.options.headerPrefix | |
+ raw.toLowerCase().replace(/[^\w]+/g, '-') | |
+ '">' | |
+ text | |
+ '</h' | |
+ level | |
+ '>\n'; | |
}; | |
Renderer.prototype.hr = function() { | |
return this.options.xhtml ? '<hr/>\n' : '<hr>\n'; | |
}; | |
Renderer.prototype.list = function(body, ordered) { | |
var type = ordered ? 'ol' : 'ul'; | |
return '<' + type + '>\n' + body + '</' + type + '>\n'; | |
}; | |
Renderer.prototype.listitem = function(text) { | |
return '<li>' + text + '</li>\n'; | |
}; | |
Renderer.prototype.paragraph = function(text) { | |
return '<p>' + text + '</p>\n'; | |
}; | |
Renderer.prototype.table = function(header, body) { | |
return '<table>\n' | |
+ '<thead>\n' | |
+ header | |
+ '</thead>\n' | |
+ '<tbody>\n' | |
+ body | |
+ '</tbody>\n' | |
+ '</table>\n'; | |
}; | |
Renderer.prototype.tablerow = function(content) { | |
return '<tr>\n' + content + '</tr>\n'; | |
}; | |
Renderer.prototype.tablecell = function(content, flags) { | |
var type = flags.header ? 'th' : 'td'; | |
var tag = flags.align | |
? '<' + type + ' style="text-align:' + flags.align + '">' | |
: '<' + type + '>'; | |
return tag + content + '</' + type + '>\n'; | |
}; | |
// span level renderer | |
Renderer.prototype.strong = function(text) { | |
return '<strong>' + text + '</strong>'; | |
}; | |
Renderer.prototype.em = function(text) { | |
return '<em>' + text + '</em>'; | |
}; | |
Renderer.prototype.codespan = function(text) { | |
return '<code>' + text + '</code>'; | |
}; | |
Renderer.prototype.br = function() { | |
return this.options.xhtml ? '<br/>' : '<br>'; | |
}; | |
Renderer.prototype.del = function(text) { | |
return '<del>' + text + '</del>'; | |
}; | |
Renderer.prototype.link = function(href, title, text) { | |
if (this.options.sanitize) { | |
try { | |
var prot = decodeURIComponent(unescape(href)) | |
.replace(/[^\w:]/g, '') | |
.toLowerCase(); | |
} catch (e) { | |
return ''; | |
} | |
if (prot.indexOf('javascript:') === 0) { | |
return ''; | |
} | |
} | |
var out = '<a href="' + href + '"'; | |
if (title) { | |
out += ' title="' + title + '"'; | |
} | |
out += '>' + text + '</a>'; | |
return out; | |
}; | |
Renderer.prototype.image = function(href, title, text) { | |
var out = '<img src="' + href + '" alt="' + text + '"'; | |
if (title) { | |
out += ' title="' + title + '"'; | |
} | |
out += this.options.xhtml ? '/>' : '>'; | |
return out; | |
}; | |
/** | |
* Parsing & Compiling | |
*/ | |
function Parser(options) { | |
this.tokens = []; | |
this.token = null; | |
this.options = options || marked.defaults; | |
this.options.renderer = this.options.renderer || new Renderer; | |
this.renderer = this.options.renderer; | |
this.renderer.options = this.options; | |
} | |
/** | |
* Static Parse Method | |
*/ | |
Parser.parse = function(src, options, renderer) { | |
var parser = new Parser(options, renderer); | |
return parser.parse(src); | |
}; | |
/** | |
* Parse Loop | |
*/ | |
Parser.prototype.parse = function(src) { | |
this.inline = new InlineLexer(src.links, this.options, this.renderer); | |
this.tokens = src.reverse(); | |
var out = ''; | |
while (this.next()) { | |
out += this.tok(); | |
} | |
return out; | |
}; | |
/** | |
* Next Token | |
*/ | |
Parser.prototype.next = function() { | |
return this.token = this.tokens.pop(); | |
}; | |
/** | |
* Preview Next Token | |
*/ | |
Parser.prototype.peek = function() { | |
return this.tokens[this.tokens.length - 1] || 0; | |
}; | |
/** | |
* Parse Text Tokens | |
*/ | |
Parser.prototype.parseText = function() { | |
var body = this.token.text; | |
while (this.peek().type === 'text') { | |
body += '\n' + this.next().text; | |
} | |
return this.inline.output(body); | |
}; | |
/** | |
* Parse Current Token | |
*/ | |
Parser.prototype.tok = function() { | |
switch (this.token.type) { | |
case 'space': { | |
return ''; | |
} | |
case 'hr': { | |
return this.renderer.hr(); | |
} | |
case 'heading': { | |
return this.renderer.heading( | |
this.inline.output(this.token.text), | |
this.token.depth, | |
this.token.text); | |
} | |
case 'code': { | |
return this.renderer.code(this.token.text, | |
this.token.lang, | |
this.token.escaped); | |
} | |
case 'table': { | |
var header = '' | |
, body = '' | |
, i | |
, row | |
, cell | |
, flags | |
, j; | |
// header | |
cell = ''; | |
for (i = 0; i < this.token.header.length; i++) { | |
flags = { header: true, align: this.token.align[i] }; | |
cell += this.renderer.tablecell( | |
this.inline.output(this.token.header[i]), | |
{ header: true, align: this.token.align[i] } | |
); | |
} | |
header += this.renderer.tablerow(cell); | |
for (i = 0; i < this.token.cells.length; i++) { | |
row = this.token.cells[i]; | |
cell = ''; | |
for (j = 0; j < row.length; j++) { | |
cell += this.renderer.tablecell( | |
this.inline.output(row[j]), | |
{ header: false, align: this.token.align[j] } | |
); | |
} | |
body += this.renderer.tablerow(cell); | |
} | |
return this.renderer.table(header, body); | |
} | |
case 'blockquote_start': { | |
var body = ''; | |
while (this.next().type !== 'blockquote_end') { | |
body += this.tok(); | |
} | |
return this.renderer.blockquote(body); | |
} | |
case 'list_start': { | |
var body = '' | |
, ordered = this.token.ordered; | |
while (this.next().type !== 'list_end') { | |
body += this.tok(); | |
} | |
return this.renderer.list(body, ordered); | |
} | |
case 'list_item_start': { | |
var body = ''; | |
while (this.next().type !== 'list_item_end') { | |
body += this.token.type === 'text' | |
? this.parseText() | |
: this.tok(); | |
} | |
return this.renderer.listitem(body); | |
} | |
case 'loose_item_start': { | |
var body = ''; | |
while (this.next().type !== 'list_item_end') { | |
body += this.tok(); | |
} | |
return this.renderer.listitem(body); | |
} | |
case 'html': { | |
var html = !this.token.pre && !this.options.pedantic | |
? this.inline.output(this.token.text) | |
: this.token.text; | |
return this.renderer.html(html); | |
} | |
case 'paragraph': { | |
return this.renderer.paragraph(this.inline.output(this.token.text)); | |
} | |
case 'text': { | |
return this.renderer.paragraph(this.parseText()); | |
} | |
} | |
}; | |
/** | |
* Helpers | |
*/ | |
function escape(html, encode) { | |
return html | |
.replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') | |
.replace(/</g, '<') | |
.replace(/>/g, '>') | |
.replace(/"/g, '"') | |
.replace(/'/g, '''); | |
} | |
function unescape(html) { | |
return html.replace(/&([#\w]+);/g, function(_, n) { | |
n = n.toLowerCase(); | |
if (n === 'colon') return ':'; | |
if (n.charAt(0) === '#') { | |
return n.charAt(1) === 'x' | |
? String.fromCharCode(parseInt(n.substring(2), 16)) | |
: String.fromCharCode(+n.substring(1)); | |
} | |
return ''; | |
}); | |
} | |
function replace(regex, opt) { | |
regex = regex.source; | |
opt = opt || ''; | |
return function self(name, val) { | |
if (!name) return new RegExp(regex, opt); | |
val = val.source || val; | |
val = val.replace(/(^|[^\[])\^/g, '$1'); | |
regex = regex.replace(name, val); | |
return self; | |
}; | |
} | |
function noop() {} | |
noop.exec = noop; | |
function merge(obj) { | |
var i = 1 | |
, target | |
, key; | |
for (; i < arguments.length; i++) { | |
target = arguments[i]; | |
for (key in target) { | |
if (Object.prototype.hasOwnProperty.call(target, key)) { | |
obj[key] = target[key]; | |
} | |
} | |
} | |
return obj; | |
} | |
/** | |
* Marked | |
*/ | |
function marked(src, opt, callback) { | |
if (callback || typeof opt === 'function') { | |
if (!callback) { | |
callback = opt; | |
opt = null; | |
} | |
opt = merge({}, marked.defaults, opt || {}); | |
var highlight = opt.highlight | |
, tokens | |
, pending | |
, i = 0; | |
try { | |
tokens = Lexer.lex(src, opt) | |
} catch (e) { | |
return callback(e); | |
} | |
pending = tokens.length; | |
var done = function() { | |
var out, err; | |
try { | |
out = Parser.parse(tokens, opt); | |
} catch (e) { | |
err = e; | |
} | |
opt.highlight = highlight; | |
return err | |
? callback(err) | |
: callback(null, out); | |
}; | |
if (!highlight || highlight.length < 3) { | |
return done(); | |
} | |
delete opt.highlight; | |
if (!pending) return done(); | |
for (; i < tokens.length; i++) { | |
(function(token) { | |
if (token.type !== 'code') { | |
return --pending || done(); | |
} | |
return highlight(token.text, token.lang, function(err, code) { | |
if (code == null || code === token.text) { | |
return --pending || done(); | |
} | |
token.text = code; | |
token.escaped = true; | |
--pending || done(); | |
}); | |
})(tokens[i]); | |
} | |
return; | |
} | |
try { | |
if (opt) opt = merge({}, marked.defaults, opt); | |
return Parser.parse(Lexer.lex(src, opt), opt); | |
} catch (e) { | |
e.message += '\nPlease report this to https://github.com/chjj/marked.'; | |
if ((opt || marked.defaults).silent) { | |
return '<p>An error occured:</p><pre>' | |
+ escape(e.message + '', true) | |
+ '</pre>'; | |
} | |
throw e; | |
} | |
} | |
/** | |
* Options | |
*/ | |
marked.options = | |
marked.setOptions = function(opt) { | |
merge(marked.defaults, opt); | |
return marked; | |
}; | |
marked.defaults = { | |
gfm: true, | |
tables: true, | |
breaks: false, | |
pedantic: false, | |
sanitize: false, | |
smartLists: false, | |
silent: false, | |
highlight: null, | |
langPrefix: 'lang-', | |
smartypants: false, | |
headerPrefix: '', | |
renderer: new Renderer, | |
xhtml: false | |
}; | |
/** | |
* Expose | |
*/ | |
marked.Parser = Parser; | |
marked.parser = Parser.parse; | |
marked.Renderer = Renderer; | |
marked.Lexer = Lexer; | |
marked.lexer = Lexer.lex; | |
marked.InlineLexer = InlineLexer; | |
marked.inlineLexer = InlineLexer.output; | |
marked.parse = marked; | |
if (typeof exports === 'object') { | |
module.exports = marked; | |
} else if (typeof define === 'function' && define.amd) { | |
define(function() { return marked; }); | |
} else { | |
this.marked = marked; | |
} | |
}).call(function() { | |
return this || (typeof window !== 'undefined' ? window : global); | |
}()); | |
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
},{}],"marked":[function(require,module,exports){ | |
module.exports=require('OssCdo'); | |
},{}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvaG9tZS9hZG1pbi9icm93c2VyaWZ5LWNkbi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL3RtcC9tYXJrZWQxMTQ3MTctMzI2NDItbW9kN2kyL25vZGVfbW9kdWxlcy9tYXJrZWQvbGliL21hcmtlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uIChnbG9iYWwpe1xuLyoqXG4gKiBtYXJrZWQgLSBhIG1hcmtkb3duIHBhcnNlclxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQsIENocmlzdG9waGVyIEplZmZyZXkuIChNSVQgTGljZW5zZWQpXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2hqai9tYXJrZWRcbiAqL1xuXG47KGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIEJsb2NrLUxldmVsIEdyYW1tYXJcbiAqL1xuXG52YXIgYmxvY2sgPSB7XG4gIG5ld2xpbmU6IC9eXFxuKy8sXG4gIGNvZGU6IC9eKCB7NH1bXlxcbl0rXFxuKikrLyxcbiAgZmVuY2VzOiBub29wLFxuICBocjogL14oICpbLSpfXSl7Myx9ICooPzpcXG4rfCQpLyxcbiAgaGVhZGluZzogL14gKigjezEsNn0pICooW15cXG5dKz8pICojKiAqKD86XFxuK3wkKS8sXG4gIG5wdGFibGU6IG5vb3AsXG4gIGxoZWFkaW5nOiAvXihbXlxcbl0rKVxcbiAqKD18LSl7Mix9ICooPzpcXG4rfCQpLyxcbiAgYmxvY2txdW90ZTogL14oICo+W15cXG5dKyhcXG4oPyFkZWYpW15cXG5dKykqXFxuKikrLyxcbiAgbGlzdDogL14oICopKGJ1bGwpIFtcXHNcXFNdKz8oPzpocnxkZWZ8XFxuezIsfSg/ISApKD8hXFwxYnVsbCApXFxuKnxcXHMqJCkvLFxuICBodG1sOiAvXiAqKD86Y29tbWVudHxjbG9zZWR8Y2xvc2luZykgKig/OlxcbnsyLH18XFxzKiQpLyxcbiAgZGVmOiAvXiAqXFxbKFteXFxdXSspXFxdOiAqPD8oW15cXHM+XSspPj8oPzogK1tcIihdKFteXFxuXSspW1wiKV0pPyAqKD86XFxuK3wkKS8sXG4gIHRhYmxlOiBub29wLFxuICBwYXJhZ3JhcGg6IC9eKCg/OlteXFxuXStcXG4/KD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfHRhZ3xkZWYpKSspXFxuKi8sXG4gIHRleHQ6IC9eW15cXG5dKy9cbn07XG5cbmJsb2NrLmJ1bGxldCA9IC8oPzpbKistXXxcXGQrXFwuKS87XG5ibG9jay5pdGVtID0gL14oICopKGJ1bGwpIFteXFxuXSooPzpcXG4oPyFcXDFidWxsIClbXlxcbl0qKSovO1xuYmxvY2suaXRlbSA9IHJlcGxhY2UoYmxvY2suaXRlbSwgJ2dtJylcbiAgKC9idWxsL2csIGJsb2NrLmJ1bGxldClcbiAgKCk7XG5cbmJsb2NrLmxpc3QgPSByZXBsYWNlKGJsb2NrLmxpc3QpXG4gICgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gICgnaHInLCAnXFxcXG4rKD89XFxcXDE/KD86Wy0qX10gKil7Myx9KD86XFxcXG4rfCQpKScpXG4gICgnZGVmJywgJ1xcXFxuKyg/PScgKyBibG9jay5kZWYuc291cmNlICsgJyknKVxuICAoKTtcblxuYmxvY2suYmxvY2txdW90ZSA9IHJlcGxhY2UoYmxvY2suYmxvY2txdW90ZSlcbiAgKCdkZWYnLCBibG9jay5kZWYpXG4gICgpO1xuXG5ibG9jay5fdGFnID0gJyg/ISg/OidcbiAgKyAnYXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGUnXG4gICsgJ3x2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkbydcbiAgKyAnfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcXFxiKVxcXFx3Kyg/ITovfFteXFxcXHdcXFxcc0BdKkApXFxcXGInO1xuXG5ibG9jay5odG1sID0gcmVwbGFjZShibG9jay5odG1sKVxuICAoJ2NvbW1lbnQnLCAvPCEtLVtcXHNcXFNdKj8tLT4vKVxuICAoJ2Nsb3NlZCcsIC88KHRhZylbXFxzXFxTXSs/PFxcL1xcMT4vKVxuICAoJ2Nsb3NpbmcnLCAvPHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXidcIj5dKSo/Pi8pXG4gICgvdGFnL2csIGJsb2NrLl90YWcpXG4gICgpO1xuXG5ibG9jay5wYXJhZ3JhcGggPSByZXBsYWNlKGJsb2NrLnBhcmFncmFwaClcbiAgKCdocicsIGJsb2NrLmhyKVxuICAoJ2hlYWRpbmcnLCBibG9jay5oZWFkaW5nKVxuICAoJ2xoZWFkaW5nJywgYmxvY2subGhlYWRpbmcpXG4gICgnYmxvY2txdW90ZScsIGJsb2NrLmJsb2NrcXVvdGUpXG4gICgndGFnJywgJzwnICsgYmxvY2suX3RhZylcbiAgKCdkZWYnLCBibG9jay5kZWYpXG4gICgpO1xuXG4vKipcbiAqIE5vcm1hbCBCbG9jayBHcmFtbWFyXG4gKi9cblxuYmxvY2subm9ybWFsID0gbWVyZ2Uoe30sIGJsb2NrKTtcblxuLyoqXG4gKiBHRk0gQmxvY2sgR3JhbW1hclxuICovXG5cbmJsb2NrLmdmbSA9IG1lcmdlKHt9LCBibG9jay5ub3JtYWwsIHtcbiAgZmVuY2VzOiAvXiAqKGB7Myx9fH57Myx9KSAqKFxcUyspPyAqXFxuKFtcXHNcXFNdKz8pXFxzKlxcMSAqKD86XFxuK3wkKS8sXG4gIHBhcmFncmFwaDogL14vXG59KTtcblxuYmxvY2suZ2ZtLnBhcmFncmFwaCA9IHJlcGxhY2UoYmxvY2sucGFyYWdyYXBoKVxuICAoJyg/IScsICcoPyEnXG4gICAgKyBibG9jay5nZm0uZmVuY2VzLnNvdXJjZS5yZXBsYWNlKCdcXFxcMScsICdcXFxcMicpICsgJ3wnXG4gICAgKyBibG9jay5saXN0LnNvdXJjZS5yZXBsYWNlKCdcXFxcMScsICdcXFxcMycpICsgJ3wnKVxuICAoKTtcblxuLyoqXG4gKiBHRk0gKyBUYWJsZXMgQmxvY2sgR3JhbW1hclxuICovXG5cbmJsb2NrLnRhYmxlcyA9IG1lcmdlKHt9LCBibG9jay5nZm0sIHtcbiAgbnB0YWJsZTogL14gKihcXFMuKlxcfC4qKVxcbiAqKFstOl0rICpcXHxbLXwgOl0qKVxcbigoPzouKlxcfC4qKD86XFxufCQpKSopXFxuKi8sXG4gIHRhYmxlOiAvXiAqXFx8KC4rKVxcbiAqXFx8KCAqWy06XStbLXwgOl0qKVxcbigoPzogKlxcfC4qKD86XFxufCQpKSopXFxuKi9cbn0pO1xuXG4vKipcbiAqIEJsb2NrIExleGVyXG4gKi9cblxuZnVuY3Rpb24gTGV4ZXIob3B0aW9ucykge1xuICB0aGlzLnRva2VucyA9IFtdO1xuICB0aGlzLnRva2Vucy5saW5rcyA9IHt9O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbiAgdGhpcy5ydWxlcyA9IGJsb2NrLm5vcm1hbDtcblxuICBpZiAodGhpcy5vcHRpb25zLmdmbSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudGFibGVzKSB7XG4gICAgICB0aGlzLnJ1bGVzID0gYmxvY2sudGFibGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bGVzID0gYmxvY2suZ2ZtO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEV4cG9zZSBCbG9jayBSdWxlc1xuICovXG5cbkxleGVyLnJ1bGVzID0gYmxvY2s7XG5cbi8qKlxuICogU3RhdGljIExleCBNZXRob2RcbiAqL1xuXG5MZXhlci5sZXggPSBmdW5jdGlvbihzcmMsIG9wdGlvbnMpIHtcbiAgdmFyIGxleGVyID0gbmV3IExleGVyKG9wdGlvbnMpO1xuICByZXR1cm4gbGV4ZXIubGV4KHNyYyk7XG59O1xuXG4vKipcbiAqIFByZXByb2Nlc3NpbmdcbiAqL1xuXG5MZXhlci5wcm90b3R5cGUubGV4ID0gZnVuY3Rpb24oc3JjKSB7XG4gIHNyYyA9IHNyY1xuICAgIC5yZXBsYWNlKC9cXHJcXG58XFxyL2csICdcXG4nKVxuICAgIC5yZXBsYWNlKC9cXHQvZywgJyAgICAnKVxuICAgIC5yZXBsYWNlKC9cXHUwMGEwL2csICcgJylcbiAgICAucmVwbGFjZSgvXFx1MjQyNC9nLCAnXFxuJyk7XG5cbiAgcmV0dXJuIHRoaXMudG9rZW4oc3JjLCB0cnVlKTtcbn07XG5cbi8qKlxuICogTGV4aW5nXG4gKi9cblxuTGV4ZXIucHJvdG90eXBlLnRva2VuID0gZnVuY3Rpb24oc3JjLCB0b3AsIGJxKSB7XG4gIHZhciBzcmMgPSBzcmMucmVwbGFjZSgvXiArJC9nbSwgJycpXG4gICAgLCBuZXh0XG4gICAgLCBsb29zZVxuICAgICwgY2FwXG4gICAgLCBidWxsXG4gICAgLCBiXG4gICAgLCBpdGVtXG4gICAgLCBzcGFjZVxuICAgICwgaVxuICAgICwgbDtcblxuICB3aGlsZSAoc3JjKSB7XG4gICAgLy8gbmV3bGluZVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKGNhcFswXS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdzcGFjZSdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29kZVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmNvZGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgY2FwID0gY2FwWzBdLnJlcGxhY2UoL14gezR9L2dtLCAnJyk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICB0ZXh0OiAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgICAgPyBjYXAucmVwbGFjZSgvXFxuKyQvLCAnJylcbiAgICAgICAgICA6IGNhcFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBmZW5jZXMgKGdmbSlcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgbGFuZzogY2FwWzJdLFxuICAgICAgICB0ZXh0OiBjYXBbM11cbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaGVhZGluZ1xuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IGNhcFsyXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSBubyBsZWFkaW5nIHBpcGUgKGdmbSlcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLm5wdGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBjYXBbMV0ucmVwbGFjZSgvXiAqfCAqXFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBhbGlnbjogY2FwWzJdLnJlcGxhY2UoL14gKnxcXHwgKiQvZywgJycpLnNwbGl0KC8gKlxcfCAqLyksXG4gICAgICAgIGNlbGxzOiBjYXBbM10ucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJylcbiAgICAgIH07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLmFsaWduLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgvXiAqLSs6ICokLy50ZXN0KGl0ZW0uYWxpZ25baV0pKSB7XG4gICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHtcbiAgICAgICAgICBpdGVtLmFsaWduW2ldID0gJ2NlbnRlcic7XG4gICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAnbGVmdCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlbS5jZWxsc1tpXSA9IGl0ZW0uY2VsbHNbaV0uc3BsaXQoLyAqXFx8ICovKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b2tlbnMucHVzaChpdGVtKTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbGhlYWRpbmdcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saGVhZGluZy5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICBkZXB0aDogY2FwWzJdID09PSAnPScgPyAxIDogMixcbiAgICAgICAgdGV4dDogY2FwWzFdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGhyXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaHIuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdocidcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gYmxvY2txdW90ZVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuXG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGVfc3RhcnQnXG4gICAgICB9KTtcblxuICAgICAgY2FwID0gY2FwWzBdLnJlcGxhY2UoL14gKj4gPy9nbSwgJycpO1xuXG4gICAgICAvLyBQYXNzIGB0b3BgIHRvIGtlZXAgdGhlIGN1cnJlbnRcbiAgICAgIC8vIFwidG9wbGV2ZWxcIiBzdGF0ZS4gVGhpcyBpcyBleGFjdGx5XG4gICAgICAvLyBob3cgbWFya2Rvd24ucGwgd29ya3MuXG4gICAgICB0aGlzLnRva2VuKGNhcCwgdG9wLCB0cnVlKTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdibG9ja3F1b3RlX2VuZCdcbiAgICAgIH0pO1xuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsaXN0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubGlzdC5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBidWxsID0gY2FwWzJdO1xuXG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2xpc3Rfc3RhcnQnLFxuICAgICAgICBvcmRlcmVkOiBidWxsLmxlbmd0aCA+IDFcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgZWFjaCB0b3AtbGV2ZWwgaXRlbS5cbiAgICAgIGNhcCA9IGNhcFswXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pO1xuXG4gICAgICBuZXh0ID0gZmFsc2U7XG4gICAgICBsID0gY2FwLmxlbmd0aDtcbiAgICAgIGkgPSAwO1xuXG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpdGVtID0gY2FwW2ldO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbGlzdCBpdGVtJ3MgYnVsbGV0XG4gICAgICAgIC8vIHNvIGl0IGlzIHNlZW4gYXMgdGhlIG5leHQgdG9rZW4uXG4gICAgICAgIHNwYWNlID0gaXRlbS5sZW5ndGg7XG4gICAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoL14gKihbKistXXxcXGQrXFwuKSArLywgJycpO1xuXG4gICAgICAgIC8vIE91dGRlbnQgd2hhdGV2ZXIgdGhlXG4gICAgICAgIC8vIGxpc3QgaXRlbSBjb250YWlucy4gSGFja3kuXG4gICAgICAgIGlmICh+aXRlbS5pbmRleE9mKCdcXG4gJykpIHtcbiAgICAgICAgICBzcGFjZSAtPSBpdGVtLmxlbmd0aDtcbiAgICAgICAgICBpdGVtID0gIXRoaXMub3B0aW9ucy5wZWRhbnRpY1xuICAgICAgICAgICAgPyBpdGVtLnJlcGxhY2UobmV3IFJlZ0V4cCgnXiB7MSwnICsgc3BhY2UgKyAnfScsICdnbScpLCAnJylcbiAgICAgICAgICAgIDogaXRlbS5yZXBsYWNlKC9eIHsxLDR9L2dtLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgbmV4dCBsaXN0IGl0ZW0gYmVsb25ncyBoZXJlLlxuICAgICAgICAvLyBCYWNrcGVkYWwgaWYgaXQgZG9lcyBub3QgYmVsb25nIGluIHRoaXMgbGlzdC5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zbWFydExpc3RzICYmIGkgIT09IGwgLSAxKSB7XG4gICAgICAgICAgYiA9IGJsb2NrLmJ1bGxldC5leGVjKGNhcFtpICsgMV0pWzBdO1xuICAgICAgICAgIGlmIChidWxsICE9PSBiICYmICEoYnVsbC5sZW5ndGggPiAxICYmIGIubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgICAgIHNyYyA9IGNhcC5zbGljZShpICsgMSkuam9pbignXFxuJykgKyBzcmM7XG4gICAgICAgICAgICBpID0gbCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaXRlbSBpcyBsb29zZSBvciBub3QuXG4gICAgICAgIC8vIFVzZTogLyhefFxcbikoPyEgKVteXFxuXStcXG5cXG4oPyFcXHMqJCkvXG4gICAgICAgIC8vIGZvciBkaXNjb3VudCBiZWhhdmlvci5cbiAgICAgICAgbG9vc2UgPSBuZXh0IHx8IC9cXG5cXG4oPyFcXHMqJCkvLnRlc3QoaXRlbSk7XG4gICAgICAgIGlmIChpICE9PSBsIC0gMSkge1xuICAgICAgICAgIG5leHQgPSBpdGVtLmNoYXJBdChpdGVtLmxlbmd0aCAtIDEpID09PSAnXFxuJztcbiAgICAgICAgICBpZiAoIWxvb3NlKSBsb29zZSA9IG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBsb29zZVxuICAgICAgICAgICAgPyAnbG9vc2VfaXRlbV9zdGFydCdcbiAgICAgICAgICAgIDogJ2xpc3RfaXRlbV9zdGFydCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjdXJzZS5cbiAgICAgICAgdGhpcy50b2tlbihpdGVtLCBmYWxzZSwgYnEpO1xuXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW1fZW5kJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdsaXN0X2VuZCdcbiAgICAgIH0pO1xuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBodG1sXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaHRtbC5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogdGhpcy5vcHRpb25zLnNhbml0aXplXG4gICAgICAgICAgPyAncGFyYWdyYXBoJ1xuICAgICAgICAgIDogJ2h0bWwnLFxuICAgICAgICBwcmU6IGNhcFsxXSA9PT0gJ3ByZScgfHwgY2FwWzFdID09PSAnc2NyaXB0JyB8fCBjYXBbMV0gPT09ICdzdHlsZScsXG4gICAgICAgIHRleHQ6IGNhcFswXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBkZWZcbiAgICBpZiAoKCFicSAmJiB0b3ApICYmIChjYXAgPSB0aGlzLnJ1bGVzLmRlZi5leGVjKHNyYykpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMubGlua3NbY2FwWzFdLnRvTG93ZXJDYXNlKCldID0ge1xuICAgICAgICBocmVmOiBjYXBbMl0sXG4gICAgICAgIHRpdGxlOiBjYXBbM11cbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSAoZ2ZtKVxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMudGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBjYXBbMV0ucmVwbGFjZSgvXiAqfCAqXFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBhbGlnbjogY2FwWzJdLnJlcGxhY2UoL14gKnxcXHwgKiQvZywgJycpLnNwbGl0KC8gKlxcfCAqLyksXG4gICAgICAgIGNlbGxzOiBjYXBbM10ucmVwbGFjZSgvKD86ICpcXHwgKik/XFxuJC8sICcnKS5zcGxpdCgnXFxuJylcbiAgICAgIH07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLmFsaWduLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgvXiAqLSs6ICokLy50ZXN0KGl0ZW0uYWxpZ25baV0pKSB7XG4gICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHtcbiAgICAgICAgICBpdGVtLmFsaWduW2ldID0gJ2NlbnRlcic7XG4gICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAnbGVmdCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlbS5jZWxsc1tpXSA9IGl0ZW0uY2VsbHNbaV1cbiAgICAgICAgICAucmVwbGFjZSgvXiAqXFx8ICp8ICpcXHwgKiQvZywgJycpXG4gICAgICAgICAgLnNwbGl0KC8gKlxcfCAqLyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goaXRlbSk7XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHRvcC1sZXZlbCBwYXJhZ3JhcGhcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKHNyYykpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICB0ZXh0OiBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICA6IGNhcFsxXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXh0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGV4dC5leGVjKHNyYykpIHtcbiAgICAgIC8vIFRvcC1sZXZlbCBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS5cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB0ZXh0OiBjYXBbMF1cbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHNyYykge1xuICAgICAgdGhyb3cgbmV3XG4gICAgICAgIEVycm9yKCdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMudG9rZW5zO1xufTtcblxuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5cbnZhciBpbmxpbmUgPSB7XG4gIGVzY2FwZTogL15cXFxcKFtcXFxcYCp7fVxcW1xcXSgpIytcXC0uIV8+XSkvLFxuICBhdXRvbGluazogL148KFteID5dKyhAfDpcXC8pW14gPl0rKT4vLFxuICB1cmw6IG5vb3AsXG4gIHRhZzogL148IS0tW1xcc1xcU10qPy0tPnxePFxcLz9cXHcrKD86XCJbXlwiXSpcInwnW14nXSonfFteJ1wiPl0pKj8+LyxcbiAgbGluazogL14hP1xcWyhpbnNpZGUpXFxdXFwoaHJlZlxcKS8sXG4gIHJlZmxpbms6IC9eIT9cXFsoaW5zaWRlKVxcXVxccypcXFsoW15cXF1dKilcXF0vLFxuICBub2xpbms6IC9eIT9cXFsoKD86XFxbW15cXF1dKlxcXXxbXlxcW1xcXV0pKilcXF0vLFxuICBzdHJvbmc6IC9eX18oW1xcc1xcU10rPylfXyg/IV8pfF5cXCpcXCooW1xcc1xcU10rPylcXCpcXCooPyFcXCopLyxcbiAgZW06IC9eXFxiXygoPzpfX3xbXFxzXFxTXSkrPylfXFxifF5cXCooKD86XFwqXFwqfFtcXHNcXFNdKSs/KVxcKig/IVxcKikvLFxuICBjb2RlOiAvXihgKylcXHMqKFtcXHNcXFNdKj9bXmBdKVxccypcXDEoPyFgKS8sXG4gIGJyOiAvXiB7Mix9XFxuKD8hXFxzKiQpLyxcbiAgZGVsOiBub29wLFxuICB0ZXh0OiAvXltcXHNcXFNdKz8oPz1bXFxcXDwhXFxbXypgXXwgezIsfVxcbnwkKS9cbn07XG5cbmlubGluZS5faW5zaWRlID0gLyg/OlxcW1teXFxdXSpcXF18W15cXFtcXF1dfFxcXSg/PVteXFxbXSpcXF0pKSovO1xuaW5saW5lLl9ocmVmID0gL1xccyo8PyhbXFxzXFxTXSo/KT4/KD86XFxzK1snXCJdKFtcXHNcXFNdKj8pWydcIl0pP1xccyovO1xuXG5pbmxpbmUubGluayA9IHJlcGxhY2UoaW5saW5lLmxpbmspXG4gICgnaW5zaWRlJywgaW5saW5lLl9pbnNpZGUpXG4gICgnaHJlZicsIGlubGluZS5faHJlZilcbiAgKCk7XG5cbmlubGluZS5yZWZsaW5rID0gcmVwbGFjZShpbmxpbmUucmVmbGluaylcbiAgKCdpbnNpZGUnLCBpbmxpbmUuX2luc2lkZSlcbiAgKCk7XG5cbi8qKlxuICogTm9ybWFsIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLm5vcm1hbCA9IG1lcmdlKHt9LCBpbmxpbmUpO1xuXG4vKipcbiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLnBlZGFudGljID0gbWVyZ2Uoe30sIGlubGluZS5ub3JtYWwsIHtcbiAgc3Ryb25nOiAvXl9fKD89XFxTKShbXFxzXFxTXSo/XFxTKV9fKD8hXyl8XlxcKlxcKig/PVxcUykoW1xcc1xcU10qP1xcUylcXCpcXCooPyFcXCopLyxcbiAgZW06IC9eXyg/PVxcUykoW1xcc1xcU10qP1xcUylfKD8hXyl8XlxcKig/PVxcUykoW1xcc1xcU10qP1xcUylcXCooPyFcXCopL1xufSk7XG5cbi8qKlxuICogR0ZNIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLmdmbSA9IG1lcmdlKHt9LCBpbmxpbmUubm9ybWFsLCB7XG4gIGVzY2FwZTogcmVwbGFjZShpbmxpbmUuZXNjYXBlKSgnXSknLCAnfnxdKScpKCksXG4gIHVybDogL14oaHR0cHM/OlxcL1xcL1teXFxzPF0rW148Liw6O1wiJylcXF1cXHNdKS8sXG4gIGRlbDogL15+fig/PVxcUykoW1xcc1xcU10qP1xcUyl+fi8sXG4gIHRleHQ6IHJlcGxhY2UoaW5saW5lLnRleHQpXG4gICAgKCddfCcsICd+XXwnKVxuICAgICgnfCcsICd8aHR0cHM/Oi8vfCcpXG4gICAgKClcbn0pO1xuXG4vKipcbiAqIEdGTSArIExpbmUgQnJlYWtzIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLmJyZWFrcyA9IG1lcmdlKHt9LCBpbmxpbmUuZ2ZtLCB7XG4gIGJyOiByZXBsYWNlKGlubGluZS5icikoJ3syLH0nLCAnKicpKCksXG4gIHRleHQ6IHJlcGxhY2UoaW5saW5lLmdmbS50ZXh0KSgnezIsfScsICcqJykoKVxufSk7XG5cbi8qKlxuICogSW5saW5lIExleGVyICYgQ29tcGlsZXJcbiAqL1xuXG5mdW5jdGlvbiBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbiAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICB0aGlzLnJ1bGVzID0gaW5saW5lLm5vcm1hbDtcbiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgUmVuZGVyZXI7XG4gIHRoaXMucmVuZGVyZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICBpZiAoIXRoaXMubGlua3MpIHtcbiAgICB0aHJvdyBuZXdcbiAgICAgIEVycm9yKCdUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LicpO1xuICB9XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrcykge1xuICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5icmVha3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBpbmxpbmUuZ2ZtO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICB0aGlzLnJ1bGVzID0gaW5saW5lLnBlZGFudGljO1xuICB9XG59XG5cbi8qKlxuICogRXhwb3NlIElubGluZSBSdWxlc1xuICovXG5cbklubGluZUxleGVyLnJ1bGVzID0gaW5saW5lO1xuXG4vKipcbiAqIFN0YXRpYyBMZXhpbmcvQ29tcGlsaW5nIE1ldGhvZFxuICovXG5cbklubGluZUxleGVyLm91dHB1dCA9IGZ1bmN0aW9uKHNyYywgbGlua3MsIG9wdGlvbnMpIHtcbiAgdmFyIGlubGluZSA9IG5ldyBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucyk7XG4gIHJldHVybiBpbmxpbmUub3V0cHV0KHNyYyk7XG59O1xuXG4vKipcbiAqIExleGluZy9Db21waWxpbmdcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUub3V0cHV0ID0gZnVuY3Rpb24oc3JjKSB7XG4gIHZhciBvdXQgPSAnJ1xuICAgICwgbGlua1xuICAgICwgdGV4dFxuICAgICwgaHJlZlxuICAgICwgY2FwO1xuXG4gIHdoaWxlIChzcmMpIHtcbiAgICAvLyBlc2NhcGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5lc2NhcGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IGNhcFsxXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGF1dG9saW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBjYXBbMV0uY2hhckF0KDYpID09PSAnOidcbiAgICAgICAgICA/IHRoaXMubWFuZ2xlKGNhcFsxXS5zdWJzdHJpbmcoNykpXG4gICAgICAgICAgOiB0aGlzLm1hbmdsZShjYXBbMV0pO1xuICAgICAgICBocmVmID0gdGhpcy5tYW5nbGUoJ21haWx0bzonKSArIHRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gZXNjYXBlKGNhcFsxXSk7XG4gICAgICAgIGhyZWYgPSB0ZXh0O1xuICAgICAgfVxuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIubGluayhocmVmLCBudWxsLCB0ZXh0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHVybCAoZ2ZtKVxuICAgIGlmICghdGhpcy5pbkxpbmsgJiYgKGNhcCA9IHRoaXMucnVsZXMudXJsLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0ZXh0ID0gZXNjYXBlKGNhcFsxXSk7XG4gICAgICBocmVmID0gdGV4dDtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWdcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy50YWcuZXhlYyhzcmMpKSB7XG4gICAgICBpZiAoIXRoaXMuaW5MaW5rICYmIC9ePGEgL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5MaW5rID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbkxpbmsgJiYgL148XFwvYT4vaS50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgdGhpcy5pbkxpbmsgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5vcHRpb25zLnNhbml0aXplXG4gICAgICAgID8gZXNjYXBlKGNhcFswXSlcbiAgICAgICAgOiBjYXBbMF07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsaW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubGluay5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwge1xuICAgICAgICBocmVmOiBjYXBbMl0sXG4gICAgICAgIHRpdGxlOiBjYXBbM11cbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbkxpbmsgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHJlZmxpbmssIG5vbGlua1xuICAgIGlmICgoY2FwID0gdGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoc3JjKSlcbiAgICAgICAgfHwgKGNhcCA9IHRoaXMucnVsZXMubm9saW5rLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBsaW5rID0gKGNhcFsyXSB8fCBjYXBbMV0pLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgIGxpbmsgPSB0aGlzLmxpbmtzW2xpbmsudG9Mb3dlckNhc2UoKV07XG4gICAgICBpZiAoIWxpbmsgfHwgIWxpbmsuaHJlZikge1xuICAgICAgICBvdXQgKz0gY2FwWzBdLmNoYXJBdCgwKTtcbiAgICAgICAgc3JjID0gY2FwWzBdLnN1YnN0cmluZygxKSArIHNyYztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwgbGluayk7XG4gICAgICB0aGlzLmluTGluayA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc3Ryb25nXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnN0cm9uZyh0aGlzLm91dHB1dChjYXBbMl0gfHwgY2FwWzFdKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBlbVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmVtLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmVtKHRoaXMub3V0cHV0KGNhcFsyXSB8fCBjYXBbMV0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGNvZGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5jb2RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmNvZGVzcGFuKGVzY2FwZShjYXBbMl0sIHRydWUpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGJyXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYnIuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuYnIoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGRlbCAoZ2ZtKVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmRlbC5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoY2FwWzFdKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXh0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGV4dC5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gZXNjYXBlKHRoaXMuc21hcnR5cGFudHMoY2FwWzBdKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3JjKSB7XG4gICAgICB0aHJvdyBuZXdcbiAgICAgICAgRXJyb3IoJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb21waWxlIExpbmtcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUub3V0cHV0TGluayA9IGZ1bmN0aW9uKGNhcCwgbGluaykge1xuICB2YXIgaHJlZiA9IGVzY2FwZShsaW5rLmhyZWYpXG4gICAgLCB0aXRsZSA9IGxpbmsudGl0bGUgPyBlc2NhcGUobGluay50aXRsZSkgOiBudWxsO1xuXG4gIHJldHVybiBjYXBbMF0uY2hhckF0KDApICE9PSAnISdcbiAgICA/IHRoaXMucmVuZGVyZXIubGluayhocmVmLCB0aXRsZSwgdGhpcy5vdXRwdXQoY2FwWzFdKSlcbiAgICA6IHRoaXMucmVuZGVyZXIuaW1hZ2UoaHJlZiwgdGl0bGUsIGVzY2FwZShjYXBbMV0pKTtcbn07XG5cbi8qKlxuICogU21hcnR5cGFudHMgVHJhbnNmb3JtYXRpb25zXG4gKi9cblxuSW5saW5lTGV4ZXIucHJvdG90eXBlLnNtYXJ0eXBhbnRzID0gZnVuY3Rpb24odGV4dCkge1xuICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHlwYW50cykgcmV0dXJuIHRleHQ7XG4gIHJldHVybiB0ZXh0XG4gICAgLy8gZW0tZGFzaGVzXG4gICAgLnJlcGxhY2UoLy0tL2csICdcXHUyMDE0JylcbiAgICAvLyBvcGVuaW5nIHNpbmdsZXNcbiAgICAucmVwbGFjZSgvKF58Wy1cXHUyMDE0LyhcXFt7XCJcXHNdKScvZywgJyQxXFx1MjAxOCcpXG4gICAgLy8gY2xvc2luZyBzaW5nbGVzICYgYXBvc3Ryb3BoZXNcbiAgICAucmVwbGFjZSgvJy9nLCAnXFx1MjAxOScpXG4gICAgLy8gb3BlbmluZyBkb3VibGVzXG4gICAgLnJlcGxhY2UoLyhefFstXFx1MjAxNC8oXFxbe1xcdTIwMThcXHNdKVwiL2csICckMVxcdTIwMWMnKVxuICAgIC8vIGNsb3NpbmcgZG91Ymxlc1xuICAgIC5yZXBsYWNlKC9cIi9nLCAnXFx1MjAxZCcpXG4gICAgLy8gZWxsaXBzZXNcbiAgICAucmVwbGFjZSgvXFwuezN9L2csICdcXHUyMDI2Jyk7XG59O1xuXG4vKipcbiAqIE1hbmdsZSBMaW5rc1xuICovXG5cbklubGluZUxleGVyLnByb3RvdHlwZS5tYW5nbGUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHZhciBvdXQgPSAnJ1xuICAgICwgbCA9IHRleHQubGVuZ3RoXG4gICAgLCBpID0gMFxuICAgICwgY2g7XG5cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICBjaCA9IHRleHQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoTWF0aC5yYW5kb20oKSA+IDAuNSkge1xuICAgICAgY2ggPSAneCcgKyBjaC50b1N0cmluZygxNik7XG4gICAgfVxuICAgIG91dCArPSAnJiMnICsgY2ggKyAnOyc7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJlclxuICovXG5cbmZ1bmN0aW9uIFJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuUmVuZGVyZXIucHJvdG90eXBlLmNvZGUgPSBmdW5jdGlvbihjb2RlLCBsYW5nLCBlc2NhcGVkKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KSB7XG4gICAgdmFyIG91dCA9IHRoaXMub3B0aW9ucy5oaWdobGlnaHQoY29kZSwgbGFuZyk7XG4gICAgaWYgKG91dCAhPSBudWxsICYmIG91dCAhPT0gY29kZSkge1xuICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICBjb2RlID0gb3V0O1xuICAgIH1cbiAgfVxuXG4gIGlmICghbGFuZykge1xuICAgIHJldHVybiAnPHByZT48Y29kZT4nXG4gICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICAgICsgJ1xcbjwvY29kZT48L3ByZT4nO1xuICB9XG5cbiAgcmV0dXJuICc8cHJlPjxjb2RlIGNsYXNzPVwiJ1xuICAgICsgdGhpcy5vcHRpb25zLmxhbmdQcmVmaXhcbiAgICArIGVzY2FwZShsYW5nLCB0cnVlKVxuICAgICsgJ1wiPidcbiAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICArICdcXG48L2NvZGU+PC9wcmU+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5ibG9ja3F1b3RlID0gZnVuY3Rpb24ocXVvdGUpIHtcbiAgcmV0dXJuICc8YmxvY2txdW90ZT5cXG4nICsgcXVvdGUgKyAnPC9ibG9ja3F1b3RlPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgcmV0dXJuIGh0bWw7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaGVhZGluZyA9IGZ1bmN0aW9uKHRleHQsIGxldmVsLCByYXcpIHtcbiAgcmV0dXJuICc8aCdcbiAgICArIGxldmVsXG4gICAgKyAnIGlkPVwiJ1xuICAgICsgdGhpcy5vcHRpb25zLmhlYWRlclByZWZpeFxuICAgICsgcmF3LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cXHddKy9nLCAnLScpXG4gICAgKyAnXCI+J1xuICAgICsgdGV4dFxuICAgICsgJzwvaCdcbiAgICArIGxldmVsXG4gICAgKyAnPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaHIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbCA/ICc8aHIvPlxcbicgOiAnPGhyPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUubGlzdCA9IGZ1bmN0aW9uKGJvZHksIG9yZGVyZWQpIHtcbiAgdmFyIHR5cGUgPSBvcmRlcmVkID8gJ29sJyA6ICd1bCc7XG4gIHJldHVybiAnPCcgKyB0eXBlICsgJz5cXG4nICsgYm9keSArICc8LycgKyB0eXBlICsgJz5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmxpc3RpdGVtID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxsaT4nICsgdGV4dCArICc8L2xpPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUucGFyYWdyYXBoID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxwPicgKyB0ZXh0ICsgJzwvcD5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnRhYmxlID0gZnVuY3Rpb24oaGVhZGVyLCBib2R5KSB7XG4gIHJldHVybiAnPHRhYmxlPlxcbidcbiAgICArICc8dGhlYWQ+XFxuJ1xuICAgICsgaGVhZGVyXG4gICAgKyAnPC90aGVhZD5cXG4nXG4gICAgKyAnPHRib2R5PlxcbidcbiAgICArIGJvZHlcbiAgICArICc8L3Rib2R5PlxcbidcbiAgICArICc8L3RhYmxlPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUudGFibGVyb3cgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiAnPHRyPlxcbicgKyBjb250ZW50ICsgJzwvdHI+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS50YWJsZWNlbGwgPSBmdW5jdGlvbihjb250ZW50LCBmbGFncykge1xuICB2YXIgdHlwZSA9IGZsYWdzLmhlYWRlciA/ICd0aCcgOiAndGQnO1xuICB2YXIgdGFnID0gZmxhZ3MuYWxpZ25cbiAgICA/ICc8JyArIHR5cGUgKyAnIHN0eWxlPVwidGV4dC1hbGlnbjonICsgZmxhZ3MuYWxpZ24gKyAnXCI+J1xuICAgIDogJzwnICsgdHlwZSArICc+JztcbiAgcmV0dXJuIHRhZyArIGNvbnRlbnQgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbn07XG5cbi8vIHNwYW4gbGV2ZWwgcmVuZGVyZXJcblJlbmRlcmVyLnByb3RvdHlwZS5zdHJvbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPHN0cm9uZz4nICsgdGV4dCArICc8L3N0cm9uZz4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmVtID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxlbT4nICsgdGV4dCArICc8L2VtPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuY29kZXNwYW4gPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPGNvZGU+JyArIHRleHQgKyAnPC9jb2RlPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuYnIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbCA/ICc8YnIvPicgOiAnPGJyPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxkZWw+JyArIHRleHQgKyAnPC9kZWw+Jztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcHJvdCA9IGRlY29kZVVSSUNvbXBvbmVudCh1bmVzY2FwZShocmVmKSlcbiAgICAgICAgLnJlcGxhY2UoL1teXFx3Ol0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHByb3QuaW5kZXhPZignamF2YXNjcmlwdDonKSA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuICB2YXIgb3V0ID0gJzxhIGhyZWY9XCInICsgaHJlZiArICdcIic7XG4gIGlmICh0aXRsZSkge1xuICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgfVxuICBvdXQgKz0gJz4nICsgdGV4dCArICc8L2E+JztcbiAgcmV0dXJuIG91dDtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5pbWFnZSA9IGZ1bmN0aW9uKGhyZWYsIHRpdGxlLCB0ZXh0KSB7XG4gIHZhciBvdXQgPSAnPGltZyBzcmM9XCInICsgaHJlZiArICdcIiBhbHQ9XCInICsgdGV4dCArICdcIic7XG4gIGlmICh0aXRsZSkge1xuICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgfVxuICBvdXQgKz0gdGhpcy5vcHRpb25zLnhodG1sID8gJy8+JyA6ICc+JztcbiAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGFyc2luZyAmIENvbXBpbGluZ1xuICovXG5cbmZ1bmN0aW9uIFBhcnNlcihvcHRpb25zKSB7XG4gIHRoaXMudG9rZW5zID0gW107XG4gIHRoaXMudG9rZW4gPSBudWxsO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbiAgdGhpcy5vcHRpb25zLnJlbmRlcmVyID0gdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IG5ldyBSZW5kZXJlcjtcbiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlcjtcbiAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xufVxuXG4vKipcbiAqIFN0YXRpYyBQYXJzZSBNZXRob2RcbiAqL1xuXG5QYXJzZXIucGFyc2UgPSBmdW5jdGlvbihzcmMsIG9wdGlvbnMsIHJlbmRlcmVyKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMsIHJlbmRlcmVyKTtcbiAgcmV0dXJuIHBhcnNlci5wYXJzZShzcmMpO1xufTtcblxuLyoqXG4gKiBQYXJzZSBMb29wXG4gKi9cblxuUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHNyYykge1xuICB0aGlzLmlubGluZSA9IG5ldyBJbmxpbmVMZXhlcihzcmMubGlua3MsIHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJlcik7XG4gIHRoaXMudG9rZW5zID0gc3JjLnJldmVyc2UoKTtcblxuICB2YXIgb3V0ID0gJyc7XG4gIHdoaWxlICh0aGlzLm5leHQoKSkge1xuICAgIG91dCArPSB0aGlzLnRvaygpO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogTmV4dCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b2tlbiA9IHRoaXMudG9rZW5zLnBvcCgpO1xufTtcblxuLyoqXG4gKiBQcmV2aWV3IE5leHQgVG9rZW5cbiAqL1xuXG5QYXJzZXIucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdIHx8IDA7XG59O1xuXG4vKipcbiAqIFBhcnNlIFRleHQgVG9rZW5zXG4gKi9cblxuUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRleHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGJvZHkgPSB0aGlzLnRva2VuLnRleHQ7XG5cbiAgd2hpbGUgKHRoaXMucGVlaygpLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGJvZHkgKz0gJ1xcbicgKyB0aGlzLm5leHQoKS50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuaW5saW5lLm91dHB1dChib2R5KTtcbn07XG5cbi8qKlxuICogUGFyc2UgQ3VycmVudCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUudG9rID0gZnVuY3Rpb24oKSB7XG4gIHN3aXRjaCAodGhpcy50b2tlbi50eXBlKSB7XG4gICAgY2FzZSAnc3BhY2UnOiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNhc2UgJ2hyJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuaHIoKTtcbiAgICB9XG4gICAgY2FzZSAnaGVhZGluZyc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmhlYWRpbmcoXG4gICAgICAgIHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLFxuICAgICAgICB0aGlzLnRva2VuLmRlcHRoLFxuICAgICAgICB0aGlzLnRva2VuLnRleHQpO1xuICAgIH1cbiAgICBjYXNlICdjb2RlJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsXG4gICAgICAgIHRoaXMudG9rZW4ubGFuZyxcbiAgICAgICAgdGhpcy50b2tlbi5lc2NhcGVkKTtcbiAgICB9XG4gICAgY2FzZSAndGFibGUnOiB7XG4gICAgICB2YXIgaGVhZGVyID0gJydcbiAgICAgICAgLCBib2R5ID0gJydcbiAgICAgICAgLCBpXG4gICAgICAgICwgcm93XG4gICAgICAgICwgY2VsbFxuICAgICAgICAsIGZsYWdzXG4gICAgICAgICwgajtcblxuICAgICAgLy8gaGVhZGVyXG4gICAgICBjZWxsID0gJyc7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZmxhZ3MgPSB7IGhlYWRlcjogdHJ1ZSwgYWxpZ246IHRoaXMudG9rZW4uYWxpZ25baV0gfTtcbiAgICAgICAgY2VsbCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlY2VsbChcbiAgICAgICAgICB0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi5oZWFkZXJbaV0pLFxuICAgICAgICAgIHsgaGVhZGVyOiB0cnVlLCBhbGlnbjogdGhpcy50b2tlbi5hbGlnbltpXSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBoZWFkZXIgKz0gdGhpcy5yZW5kZXJlci50YWJsZXJvdyhjZWxsKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudG9rZW4uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcm93ID0gdGhpcy50b2tlbi5jZWxsc1tpXTtcblxuICAgICAgICBjZWxsID0gJyc7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjZWxsICs9IHRoaXMucmVuZGVyZXIudGFibGVjZWxsKFxuICAgICAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHJvd1tqXSksXG4gICAgICAgICAgICB7IGhlYWRlcjogZmFsc2UsIGFsaWduOiB0aGlzLnRva2VuLmFsaWduW2pdIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgYm9keSArPSB0aGlzLnJlbmRlcmVyLnRhYmxlcm93KGNlbGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaGVhZGVyLCBib2R5KTtcbiAgICB9XG4gICAgY2FzZSAnYmxvY2txdW90ZV9zdGFydCc6IHtcbiAgICAgIHZhciBib2R5ID0gJyc7XG5cbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKS50eXBlICE9PSAnYmxvY2txdW90ZV9lbmQnKSB7XG4gICAgICAgIGJvZHkgKz0gdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShib2R5KTtcbiAgICB9XG4gICAgY2FzZSAnbGlzdF9zdGFydCc6IHtcbiAgICAgIHZhciBib2R5ID0gJydcbiAgICAgICAgLCBvcmRlcmVkID0gdGhpcy50b2tlbi5vcmRlcmVkO1xuXG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2xpc3RfZW5kJykge1xuICAgICAgICBib2R5ICs9IHRoaXMudG9rKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QoYm9keSwgb3JkZXJlZCk7XG4gICAgfVxuICAgIGNhc2UgJ2xpc3RfaXRlbV9zdGFydCc6IHtcbiAgICAgIHZhciBib2R5ID0gJyc7XG5cbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKS50eXBlICE9PSAnbGlzdF9pdGVtX2VuZCcpIHtcbiAgICAgICAgYm9keSArPSB0aGlzLnRva2VuLnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgID8gdGhpcy5wYXJzZVRleHQoKVxuICAgICAgICAgIDogdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0oYm9keSk7XG4gICAgfVxuICAgIGNhc2UgJ2xvb3NlX2l0ZW1fc3RhcnQnOiB7XG4gICAgICB2YXIgYm9keSA9ICcnO1xuXG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2xpc3RfaXRlbV9lbmQnKSB7XG4gICAgICAgIGJvZHkgKz0gdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0oYm9keSk7XG4gICAgfVxuICAgIGNhc2UgJ2h0bWwnOiB7XG4gICAgICB2YXIgaHRtbCA9ICF0aGlzLnRva2VuLnByZSAmJiAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgID8gdGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dClcbiAgICAgICAgOiB0aGlzLnRva2VuLnRleHQ7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGh0bWwpO1xuICAgIH1cbiAgICBjYXNlICdwYXJhZ3JhcGgnOiB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO1xuICAgIH1cbiAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXJzXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGh0bWwsIGVuY29kZSkge1xuICByZXR1cm4gaHRtbFxuICAgIC5yZXBsYWNlKCFlbmNvZGUgPyAvJig/ISM/XFx3KzspL2cgOiAvJi9nLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgIC5yZXBsYWNlKC8nL2csICcmIzM5OycpO1xufVxuXG5mdW5jdGlvbiB1bmVzY2FwZShodG1sKSB7XG4gIHJldHVybiBodG1sLnJlcGxhY2UoLyYoWyNcXHddKyk7L2csIGZ1bmN0aW9uKF8sIG4pIHtcbiAgICBuID0gbi50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuID09PSAnY29sb24nKSByZXR1cm4gJzonO1xuICAgIGlmIChuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICByZXR1cm4gbi5jaGFyQXQoMSkgPT09ICd4J1xuICAgICAgICA/IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobi5zdWJzdHJpbmcoMiksIDE2KSlcbiAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2UocmVnZXgsIG9wdCkge1xuICByZWdleCA9IHJlZ2V4LnNvdXJjZTtcbiAgb3B0ID0gb3B0IHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb24gc2VsZihuYW1lLCB2YWwpIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4LCBvcHQpO1xuICAgIHZhbCA9IHZhbC5zb3VyY2UgfHwgdmFsO1xuICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8oXnxbXlxcW10pXFxeL2csICckMScpO1xuICAgIHJlZ2V4ID0gcmVnZXgucmVwbGFjZShuYW1lLCB2YWwpO1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cbm5vb3AuZXhlYyA9IG5vb3A7XG5cbmZ1bmN0aW9uIG1lcmdlKG9iaikge1xuICB2YXIgaSA9IDFcbiAgICAsIHRhcmdldFxuICAgICwga2V5O1xuXG4gIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGFyZ2V0ID0gYXJndW1lbnRzW2ldO1xuICAgIGZvciAoa2V5IGluIHRhcmdldCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSB0YXJnZXRba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5cbi8qKlxuICogTWFya2VkXG4gKi9cblxuZnVuY3Rpb24gbWFya2VkKHNyYywgb3B0LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgfHwgdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0O1xuICAgICAgb3B0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBvcHQgPSBtZXJnZSh7fSwgbWFya2VkLmRlZmF1bHRzLCBvcHQgfHwge30pO1xuXG4gICAgdmFyIGhpZ2hsaWdodCA9IG9wdC5oaWdobGlnaHRcbiAgICAgICwgdG9rZW5zXG4gICAgICAsIHBlbmRpbmdcbiAgICAgICwgaSA9IDA7XG5cbiAgICB0cnkge1xuICAgICAgdG9rZW5zID0gTGV4ZXIubGV4KHNyYywgb3B0KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlKTtcbiAgICB9XG5cbiAgICBwZW5kaW5nID0gdG9rZW5zLmxlbmd0aDtcblxuICAgIHZhciBkb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3V0LCBlcnI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG91dCA9IFBhcnNlci5wYXJzZSh0b2tlbnMsIG9wdCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVyciA9IGU7XG4gICAgICB9XG5cbiAgICAgIG9wdC5oaWdobGlnaHQgPSBoaWdobGlnaHQ7XG5cbiAgICAgIHJldHVybiBlcnJcbiAgICAgICAgPyBjYWxsYmFjayhlcnIpXG4gICAgICAgIDogY2FsbGJhY2sobnVsbCwgb3V0KTtcbiAgICB9O1xuXG4gICAgaWYgKCFoaWdobGlnaHQgfHwgaGlnaGxpZ2h0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBkb25lKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlIG9wdC5oaWdobGlnaHQ7XG5cbiAgICBpZiAoIXBlbmRpbmcpIHJldHVybiBkb25lKCk7XG5cbiAgICBmb3IgKDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgKGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAnY29kZScpIHtcbiAgICAgICAgICByZXR1cm4gLS1wZW5kaW5nIHx8IGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGlnaGxpZ2h0KHRva2VuLnRleHQsIHRva2VuLmxhbmcsIGZ1bmN0aW9uKGVyciwgY29kZSkge1xuICAgICAgICAgIGlmIChjb2RlID09IG51bGwgfHwgY29kZSA9PT0gdG9rZW4udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIC0tcGVuZGluZyB8fCBkb25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuLnRleHQgPSBjb2RlO1xuICAgICAgICAgIHRva2VuLmVzY2FwZWQgPSB0cnVlO1xuICAgICAgICAgIC0tcGVuZGluZyB8fCBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSkodG9rZW5zW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0KSBvcHQgPSBtZXJnZSh7fSwgbWFya2VkLmRlZmF1bHRzLCBvcHQpO1xuICAgIHJldHVybiBQYXJzZXIucGFyc2UoTGV4ZXIubGV4KHNyYywgb3B0KSwgb3B0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGUubWVzc2FnZSArPSAnXFxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4nO1xuICAgIGlmICgob3B0IHx8IG1hcmtlZC5kZWZhdWx0cykuc2lsZW50KSB7XG4gICAgICByZXR1cm4gJzxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+J1xuICAgICAgICArIGVzY2FwZShlLm1lc3NhZ2UgKyAnJywgdHJ1ZSlcbiAgICAgICAgKyAnPC9wcmU+JztcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnNcbiAqL1xuXG5tYXJrZWQub3B0aW9ucyA9XG5tYXJrZWQuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdCkge1xuICBtZXJnZShtYXJrZWQuZGVmYXVsdHMsIG9wdCk7XG4gIHJldHVybiBtYXJrZWQ7XG59O1xuXG5tYXJrZWQuZGVmYXVsdHMgPSB7XG4gIGdmbTogdHJ1ZSxcbiAgdGFibGVzOiB0cnVlLFxuICBicmVha3M6IGZhbHNlLFxuICBwZWRhbnRpYzogZmFsc2UsXG4gIHNhbml0aXplOiBmYWxzZSxcbiAgc21hcnRMaXN0czogZmFsc2UsXG4gIHNpbGVudDogZmFsc2UsXG4gIGhpZ2hsaWdodDogbnVsbCxcbiAgbGFuZ1ByZWZpeDogJ2xhbmctJyxcbiAgc21hcnR5cGFudHM6IGZhbHNlLFxuICBoZWFkZXJQcmVmaXg6ICcnLFxuICByZW5kZXJlcjogbmV3IFJlbmRlcmVyLFxuICB4aHRtbDogZmFsc2Vcbn07XG5cbi8qKlxuICogRXhwb3NlXG4gKi9cblxubWFya2VkLlBhcnNlciA9IFBhcnNlcjtcbm1hcmtlZC5wYXJzZXIgPSBQYXJzZXIucGFyc2U7XG5cbm1hcmtlZC5SZW5kZXJlciA9IFJlbmRlcmVyO1xuXG5tYXJrZWQuTGV4ZXIgPSBMZXhlcjtcbm1hcmtlZC5sZXhlciA9IExleGVyLmxleDtcblxubWFya2VkLklubGluZUxleGVyID0gSW5saW5lTGV4ZXI7XG5tYXJrZWQuaW5saW5lTGV4ZXIgPSBJbmxpbmVMZXhlci5vdXRwdXQ7XG5cbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcblxuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICBtb2R1bGUuZXhwb3J0cyA9IG1hcmtlZDtcbn0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIG1hcmtlZDsgfSk7XG59IGVsc2Uge1xuICB0aGlzLm1hcmtlZCA9IG1hcmtlZDtcbn1cblxufSkuY2FsbChmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKTtcbn0oKSk7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pIl19 | |
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"XxGlWs":[function(require,module,exports){ | |
var inserted = {}; | |
module.exports = function (css, options) { | |
if (inserted[css]) return; | |
inserted[css] = true; | |
var elem = document.createElement('style'); | |
elem.setAttribute('type', 'text/css'); | |
if ('textContent' in elem) { | |
elem.textContent = css; | |
} else { | |
elem.styleSheet.cssText = css; | |
} | |
var head = document.getElementsByTagName('head')[0]; | |
if (options && options.prepend) { | |
head.insertBefore(elem, head.childNodes[0]); | |
} else { | |
head.appendChild(elem); | |
} | |
}; | |
},{}],"insert-css":[function(require,module,exports){ | |
module.exports=require('XxGlWs'); | |
},{}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvaG9tZS9hZG1pbi9icm93c2VyaWZ5LWNkbi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL3RtcC9pbnNlcnQtY3NzMTE0NzctMjY3MjUtMXcweHhmcy9ub2RlX21vZHVsZXMvaW5zZXJ0LWNzcy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3Rocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIil9dmFyIGY9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGYuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sZixmLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsInZhciBpbnNlcnRlZCA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoaW5zZXJ0ZWRbY3NzXSkgcmV0dXJuO1xuICAgIGluc2VydGVkW2Nzc10gPSB0cnVlO1xuICAgIFxuICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBlbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXG4gICAgaWYgKCd0ZXh0Q29udGVudCcgaW4gZWxlbSkge1xuICAgICAgZWxlbS50ZXh0Q29udGVudCA9IGNzcztcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgfVxuICAgIFxuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnByZXBlbmQpIHtcbiAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoZWxlbSwgaGVhZC5jaGlsZE5vZGVzWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGVsZW0pO1xuICAgIH1cbn07XG4iXX0= | |
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"G1qPwI":[function(require,module,exports){ | |
'use strict'; | |
var stripIndent = require('strip-indent'); | |
// start matching after: comment start block => ! or @preserve => optional whitespace => newline | |
// stop matching before: last newline => optional whitespace => comment end block | |
var reCommentContents = /\/\*!?(?:\@preserve)?[ \t]*(?:\r\n|\n)([\s\S]*?)(?:\r\n|\n)\s*\*\//; | |
var multiline = module.exports = function (fn) { | |
if (typeof fn !== 'function') { | |
throw new TypeError('Expected a function.'); | |
} | |
var match = reCommentContents.exec(fn.toString()); | |
if (!match) { | |
throw new TypeError('Multiline comment missing.'); | |
} | |
return match[1]; | |
}; | |
multiline.stripIndent = function (fn) { | |
return stripIndent(multiline(fn)); | |
}; | |
},{"strip-indent":3}],"multiline":[function(require,module,exports){ | |
module.exports=require('G1qPwI'); | |
},{}],3:[function(require,module,exports){ | |
'use strict'; | |
module.exports = function (str) { | |
var match = str.match(/^[ \t]*(?=[^\s])/gm); | |
if (!match) { | |
return str; | |
} | |
var indent = Math.min.apply(Math, match.map(function (el) { return el.length })); | |
var re = new RegExp('^[ \\t]{' + indent + '}', 'gm'); | |
return indent > 0 ? str.replace(re, '') : str; | |
}; | |
},{}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvaG9tZS9hZG1pbi9icm93c2VyaWZ5LWNkbi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL3RtcC9tdWx0aWxpbmUxMTQ3MTctMzI2NDItdHo5bDBxL25vZGVfbW9kdWxlcy9tdWx0aWxpbmUvaW5kZXguanMiLCIvdG1wL211bHRpbGluZTExNDcxNy0zMjY0Mi10ejlsMHEvbm9kZV9tb2R1bGVzL211bHRpbGluZS9ub2RlX21vZHVsZXMvc3RyaXAtaW5kZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cmlwSW5kZW50ID0gcmVxdWlyZSgnc3RyaXAtaW5kZW50Jyk7XG5cbi8vIHN0YXJ0IG1hdGNoaW5nIGFmdGVyOiBjb21tZW50IHN0YXJ0IGJsb2NrID0+ICEgb3IgQHByZXNlcnZlID0+IG9wdGlvbmFsIHdoaXRlc3BhY2UgPT4gbmV3bGluZVxuLy8gc3RvcCBtYXRjaGluZyBiZWZvcmU6IGxhc3QgbmV3bGluZSA9PiBvcHRpb25hbCB3aGl0ZXNwYWNlID0+IGNvbW1lbnQgZW5kIGJsb2NrXG52YXIgcmVDb21tZW50Q29udGVudHMgPSAvXFwvXFwqIT8oPzpcXEBwcmVzZXJ2ZSk/WyBcXHRdKig/OlxcclxcbnxcXG4pKFtcXHNcXFNdKj8pKD86XFxyXFxufFxcbilcXHMqXFwqXFwvLztcblxudmFyIG11bHRpbGluZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG5cdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGZ1bmN0aW9uLicpO1xuXHR9XG5cblx0dmFyIG1hdGNoID0gcmVDb21tZW50Q29udGVudHMuZXhlYyhmbi50b1N0cmluZygpKTtcblxuXHRpZiAoIW1hdGNoKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignTXVsdGlsaW5lIGNvbW1lbnQgbWlzc2luZy4nKTtcblx0fVxuXG5cdHJldHVybiBtYXRjaFsxXTtcbn07XG5cbm11bHRpbGluZS5zdHJpcEluZGVudCA9IGZ1bmN0aW9uIChmbikge1xuXHRyZXR1cm4gc3RyaXBJbmRlbnQobXVsdGlsaW5lKGZuKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHZhciBtYXRjaCA9IHN0ci5tYXRjaCgvXlsgXFx0XSooPz1bXlxcc10pL2dtKTtcblxuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIHN0cjtcblx0fVxuXG5cdHZhciBpbmRlbnQgPSBNYXRoLm1pbi5hcHBseShNYXRoLCBtYXRjaC5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5sZW5ndGggfSkpO1xuXHR2YXIgcmUgPSBuZXcgUmVnRXhwKCdeWyBcXFxcdF17JyArIGluZGVudCArICd9JywgJ2dtJyk7XG5cblx0cmV0dXJuIGluZGVudCA+IDAgPyBzdHIucmVwbGFjZShyZSwgJycpIDogc3RyO1xufTtcbiJdfQ== | |
var emoji = require('emoji-images'); | |
var marked = require('marked'); | |
var insertCSS = require('insert-css'); | |
var multiline = require('multiline'); | |
var emojiPath = 'http://www.tortue.me/emoji/'; | |
var emojify = function(text) { return emoji(text, emojiPath); } | |
insertCSS(multiline(function() {/*@preserve | |
body { padding: 30px; } | |
img.emoji { width: 24px; } | |
table { box-shadow: 0px 5px 12px rgba(0,0,0,0.2); margin: 30px 20px; } | |
th { padding: 10px; } | |
td:first-child { width: 28px; } | |
*/})); | |
var content = multiline(function() {/*@preserve | |
Emojify example! | |
================ | |
Hi, how are you doing:interrobang: :bowtie: :neckbeard: | |
This is an emojify example :+1: | |
:unlock: **JS** with **npm** and **browserify** is really cool:bangbang: :wink: | |
|| TODO | | |
|-|-| | |
|:white_check_mark:| Try requirebin.com | | |
|:white_check_mark:| Play with emoji-images | | |
|:white_check_mark:| Play with marked | | |
|:white_check_mark:| Play with multiline | | |
|:white_check_mark:| Play with insert-css | | |
*/}) | |
document.body.innerHTML = emojify(marked(content)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"emoji-images": "0.1.1", | |
"marked": "0.3.2", | |
"insert-css": "0.2.0", | |
"multiline": "0.3.4" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; } | |
body, html { height: 100%; width: 100%; }</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment