summaryrefslogtreecommitdiff
path: root/vendor/gen/https
diff options
context:
space:
mode:
authorMike Vink <ivi@vinkies.net>2025-05-29 16:29:27 +0200
committerMike Vink <ivi@vinkies.net>2025-05-30 09:48:22 +0200
commit1f7447307a7f8f0db4c10272d3778cca1ad4a620 (patch)
treea42351ed2d38f36456e7075c06a5f28ede07db21 /vendor/gen/https
parent215fa9977743dbeef78e0f15bb0b642bffd7a0ac (diff)
vendor
Diffstat (limited to 'vendor/gen/https')
-rw-r--r--vendor/gen/https/deno.land/03169f9846c51b5b3d43a8ebf91c47c38526c0e378672be639bb0f701097f433.js8
-rw-r--r--vendor/gen/https/deno.land/038fa7d3b945e542996e23f44b29047c0e19756bb2246623a6af949769ba1fbe.js140
-rw-r--r--vendor/gen/https/deno.land/0e9edfbf05b0c1ceedbe773bc87b513107294e0810cfaedc7d0236e924d599a2.js12
-rw-r--r--vendor/gen/https/deno.land/0eff7d41d121028e0827789106fecfd7747a49a75f592c9f3763f85e2b0c07e9.js5
-rw-r--r--vendor/gen/https/deno.land/0ff350ac6da1547191afc3438561d2b27a4614f7eeb0be9bd37aa60034cf66b4.js20
-rw-r--r--vendor/gen/https/deno.land/10f0c558d34276481bd8b14a6f4fdcaffa6d3b008c9876752f47796195886710.js34
-rw-r--r--vendor/gen/https/deno.land/1178b982861aaff8dbf2f91525b694abb5964d2d3c1c58d8ccdc2611ed3773d0.js64
-rw-r--r--vendor/gen/https/deno.land/11bd02bbc70e81aa9d1bfd7ef5e029fca6be91c5c0d08cd4600539a45c89dd71.js9
-rw-r--r--vendor/gen/https/deno.land/11d8d1c1ca991e6fea8175d2a82192fc662842142d60613e729b753652696aea.js72
-rw-r--r--vendor/gen/https/deno.land/122ba645fcf60323afcb1a9c26faff8d78590b795fd06a6ba53216601c54ecad.js26
-rw-r--r--vendor/gen/https/deno.land/140822725cd5bead60b2a9d3b8d43c48d8a4154f19d7f8f93dfb4bab6fe205f5.js63
-rw-r--r--vendor/gen/https/deno.land/14863e3b2b9ebce9db02ba80f01114277213f612399d0e198773bda87cacf032.js72
-rw-r--r--vendor/gen/https/deno.land/15a8f8fb8e6473afdb506294ce0868e983280c6427db20b73301a375fed03774.js42
-rw-r--r--vendor/gen/https/deno.land/164198804ee6fd3a1b8eadd17caf07b9b37735aeeab7d0d37d418ef0e0bab6aa.js20
-rw-r--r--vendor/gen/https/deno.land/17eee7a04f7e632433840cbea3e2ed1f30c66687b7b96c2c9508c10c08be78ea.js69
-rw-r--r--vendor/gen/https/deno.land/17fe72dfaa9d1191231a593f549925f2bbf57f9dc3a4f5bbc09916b5ec8f8e36.js25
-rw-r--r--vendor/gen/https/deno.land/18e400968e65abc09c92e8e9b2fc538d234085ece6db8db98e7d18e2c627af63.js44
-rw-r--r--vendor/gen/https/deno.land/1cf158f4e836587419b228a6946abc0a57c1d72ba3cea0824c8654aa850e77f0.js3
-rw-r--r--vendor/gen/https/deno.land/1d586a2a460fc0ce582837f8f789bbf6031ac1ad0b1e56eb8cb0e5e3ffeaea43.js15
-rw-r--r--vendor/gen/https/deno.land/1d6daf5bf2fec45795de5bad68fbda4684c225707be41cbcb7c028fb3c168fa7.js6
-rw-r--r--vendor/gen/https/deno.land/1e9ee246e74ed6bac55a3441b5778f2b5f332cae5eef297d4c4bdced80851920.js115
-rw-r--r--vendor/gen/https/deno.land/20bde93de9c94dedce9e9d77dcf3928866101dd1ee74aaf0af7561b5004b92f7.js103
-rw-r--r--vendor/gen/https/deno.land/20c89930f0236478b4864cc94b867208d4f0b3ed08ca929b6f406ba570b71130.js131
-rw-r--r--vendor/gen/https/deno.land/213144b2acfdc2c06a74aec338fe2c8e9540600388d4fd2d9fc43d626e93bd03.js68
-rw-r--r--vendor/gen/https/deno.land/2183e4f87bc58e6ff69a485d6ae4191d0390bed46c11cc4f6f77f2f10228e346.js101
-rw-r--r--vendor/gen/https/deno.land/23a0985510d7072cd1e6c4bfcb34fb4c8dc4914695738e8b6e76f3a782bf18fc.js27
-rw-r--r--vendor/gen/https/deno.land/2490f5351f6789a193b1c2a8fbdd4765bfe1012a77c578ba34bd51a23a8c9a54.js52
-rw-r--r--vendor/gen/https/deno.land/24e417d1fe867af5b0963ef39b9e36a92606dd20e47fa41b2647ea9a8bdff88f.js304
-rw-r--r--vendor/gen/https/deno.land/26b01031a6c86e674db7bc2e53cba480ae54b8e630505748b53d7f5f9a4f2dbd.js89
-rw-r--r--vendor/gen/https/deno.land/2776d915d491213dda5d2fd2df49f58b04545cf60f8bcda7328a908de8f56537.js106
-rw-r--r--vendor/gen/https/deno.land/27cac20f1c3fe1bb58f37d1f8e15c5ed582d09aa5da88c4c3c39bf6ca7066eb6.js132
-rw-r--r--vendor/gen/https/deno.land/2a4c33798619da8a200dc5952d5aaaf738400248db5f2efb1846d8381780a949.js90
-rw-r--r--vendor/gen/https/deno.land/2af2c282efe6df44d6c3d080b7c7aab87be18e8572224e7d740e339ade45d43c.js23
-rw-r--r--vendor/gen/https/deno.land/2c91ceaa563dce37b10ca40d9c35dfba01d0092758aca694e4e3feed42188219.js84
-rw-r--r--vendor/gen/https/deno.land/2d7aca0133be6de43a0ae1681c780b6b959f0a3720d8b645d1aed6b1d0482ff6.js63
-rw-r--r--vendor/gen/https/deno.land/30fb7366d35e88ff50a3fd97f74d2d283a1a621319b43dd2171885d2755bf8d5.js220
-rw-r--r--vendor/gen/https/deno.land/31e5dd6ab63a7c44741e363d311de87953a27b5a6fd987c2a37b2bb781ff9c89.js36
-rw-r--r--vendor/gen/https/deno.land/3566b6c7334a68d62e2547dd836014ef030a442e79f0885b6497cc76da422029.js3
-rw-r--r--vendor/gen/https/deno.land/35b8ef7a35a7f9731e47af7a5fca344771fe68bd64597b33249606c61e34323f.js13
-rw-r--r--vendor/gen/https/deno.land/377d368b85c4aa9cdfcf52674ca12468c78648c304e88e58661e7fb330d99939.js27
-rw-r--r--vendor/gen/https/deno.land/38efb93200e818215777b3e1c4c7e61b12248fe849bccc95a4351967457c4ab5.js159
-rw-r--r--vendor/gen/https/deno.land/3a9963ae66c46e85c06330c85a956a4620dd81ff0a8dde98869c7cdd550c631e.js48
-rw-r--r--vendor/gen/https/deno.land/3ab709284215897ee1d95fa35ad8801d5d503cd61985bf7b0bd88d6da152c67c.js3
-rw-r--r--vendor/gen/https/deno.land/3c1dfb8e021495a9b103085fee11891391a50d60a2630525bc601bc25900adb7.js98
-rw-r--r--vendor/gen/https/deno.land/3c52f7056d9a3596f53495fdf8505e3bca3620b0696bdaf47234f131622a39c5.js221
-rw-r--r--vendor/gen/https/deno.land/3ebb8b3dd4953c0b8e13fa2b6c942b15b7a4aa0688ebd88146f3235dee6eb931.js3
-rw-r--r--vendor/gen/https/deno.land/410a778354e2e5a3f2277bbe986f125a437e586a79995a44806d451136d74545.js517
-rw-r--r--vendor/gen/https/deno.land/44544b175b294b2446e49829a3c1c2e1aae0058858ba6f9e5c40c56cd16a62db.js45
-rw-r--r--vendor/gen/https/deno.land/451b8255dcd8b53272e619ade6aa66c644bb730d1e66d1ee63f6442fe4046402.js124
-rw-r--r--vendor/gen/https/deno.land/454be91687a6cdd906bf292893d80849f0b0308b0c7e5faa7c2fe2cb753ce9e0.js3
-rw-r--r--vendor/gen/https/deno.land/45d8062aed7e7539fcdaa85061650e6cd731b275e44ef70a3b8e5badd871205d.js109
-rw-r--r--vendor/gen/https/deno.land/466d17d163946adf94be4279e8491bfbcdacd7455a305c759f3d212dffa3ed2e.js13
-rw-r--r--vendor/gen/https/deno.land/4717b2fafbd4bc99c447f6bba6715da806a78f1510f64879572eada428cb4da8.js19
-rw-r--r--vendor/gen/https/deno.land/48671f07ca6e9f20af82f7009faf390f972515c1b4e03316efba2615e2aaa243.js124
-rw-r--r--vendor/gen/https/deno.land/4be9cb631cde86b7757ecc3603b33f01eae85c5790148f8e7d302170a8953848.js26
-rw-r--r--vendor/gen/https/deno.land/4c3a319d1ee41f5d5c8b2641ebb010f5317ef20a6302108732d7ce6cc5b20bbe.js130
-rw-r--r--vendor/gen/https/deno.land/4c9f25e769e1a9c9f2f8c94b39029dcc87c86a632b003d42777b479230b4a94b.js233
-rw-r--r--vendor/gen/https/deno.land/4d466d8e167bcb9dca15d78611336dacdd6d5f90f914312c29129b67b170cbe4.js247
-rw-r--r--vendor/gen/https/deno.land/4da031df864b2407ee225bbc7e019818e0738ebcd8767b934063fcffa33bffa3.js13
-rw-r--r--vendor/gen/https/deno.land/4e25728eaf52b7ef4beef7844850754032e0011a1ba5996a2b9037dacd1bbde0.js65
-rw-r--r--vendor/gen/https/deno.land/4f5335c2d09065ff97ba3e6d69f5e92a5669fc492101e27ff1fa3741d6b1eeee.js110
-rw-r--r--vendor/gen/https/deno.land/54e73a4a75987340e842ebdfa887a096948e028928d30002d16fe0938ec00bd4.js4
-rw-r--r--vendor/gen/https/deno.land/563f031a66eba38ffe1953bc4baf77ef05145e3c109d0059188c64a030ea79b7.js446
-rw-r--r--vendor/gen/https/deno.land/5779c67789adb09e546f79f1878945b92e09269f0b16f320148de168e98a8226.js106
-rw-r--r--vendor/gen/https/deno.land/5b428de6e3bbbea28f55a17efc24bdd837e6d4965d3340b81a2c99bc78318b66.js23
-rw-r--r--vendor/gen/https/deno.land/5c5e6f23fc0fe5fd3624e053ce89fb815c0099343be1d7baddfd5cafeb0df6b7.js3
-rw-r--r--vendor/gen/https/deno.land/5c99d6eab6b2a302e3804cdb8da75892b986a62ca77652d6695c51f7865cd1b2.js84
-rw-r--r--vendor/gen/https/deno.land/5cf59b83b4328f5b9c4b3ac6b0494b532ac14b94623be56005e9736f1c3a229e.js46
-rw-r--r--vendor/gen/https/deno.land/5d7b7fa47314ea06dc93b7ed12a6fa7c29132c1808186406439d10c1e96d5919.js31
-rw-r--r--vendor/gen/https/deno.land/5f898e73824d4d9d5537fdd0382fb53ab3f27451cd351eb4ca9c5ef39294d020.js10
-rw-r--r--vendor/gen/https/deno.land/60080fb447981c47ec60891798c3c8b0b7d5e32272bf01020b18f565b5229795.js233
-rw-r--r--vendor/gen/https/deno.land/61954d66cc5603c402b5f92094c57fbed77a7a37baa05ffdcc3602f5c801d499.js10
-rw-r--r--vendor/gen/https/deno.land/624eb29f6fb28d3d56325f2c07de764adfbaaf9ff862a2cddea6301d71eaea50.js19
-rw-r--r--vendor/gen/https/deno.land/631e349030535d78d335e67712cf905a87c75b9f80e8bc940e2a3276eb05c770.js73
-rw-r--r--vendor/gen/https/deno.land/64b187f10eca491f2de5bad67338eba7d10700ca5867bda5fdfc5e06bef001ec.js145
-rw-r--r--vendor/gen/https/deno.land/653a9124b6c7f2524a1e24c4414d26cf65abdfb71ad6df5710e2e43e106bf5d9.js85
-rw-r--r--vendor/gen/https/deno.land/683b7dddf0f9dec790e257c3356353924573d9830d6da5e65cbaeb13542e62bc.js25
-rw-r--r--vendor/gen/https/deno.land/691762d8ecff814dc5b66d198c595a2ee1b134ce9785ee1888950aa7ba00f189.js436
-rw-r--r--vendor/gen/https/deno.land/6bd2e3f5843f0a5debff31a300e1d6176f32f60a59fad82367571366ca5e83ab.js58
-rw-r--r--vendor/gen/https/deno.land/6d20ec93492b438ce20abd5a6993bfc0ef988c47aa87241085a98b21d8e85c47.js35
-rw-r--r--vendor/gen/https/deno.land/6faca7611ce04828ee0a49c74e2fe5341a8e81432d9532a5219ac424cf65574d.js3
-rw-r--r--vendor/gen/https/deno.land/6fba7f50b35cc56498d23c59daba2d639e5b8041606078234ee006699d921a00.js3
-rw-r--r--vendor/gen/https/deno.land/7005829e4cbf864e811a7ecbea3a35b461c60b8ee370c7bf29ee85b72247875f.js78
-rw-r--r--vendor/gen/https/deno.land/715a1d94fe72f48bab4e27fc1fe672cf872e98017b5847ccc3c684c836c5d947.js26
-rw-r--r--vendor/gen/https/deno.land/716503e16f57dca602e9fd35df4afbf0123ef5fb24e5fb214ebbe3bc765aa27a.js27
-rw-r--r--vendor/gen/https/deno.land/721bb4290fe85bb4d19eb3947d3a05e8429f2005b9d9974c99116cfe44df50c2.js3
-rw-r--r--vendor/gen/https/deno.land/73f8e40cdfb2f7106d82269a0774d7824e2f8630ac33479a521255866f3e7f0d.js94
-rw-r--r--vendor/gen/https/deno.land/74b01b574b3f43138835e07df185a4ec6a7b7703dd41b0a4946fef7d4dd1a83e.js294
-rw-r--r--vendor/gen/https/deno.land/74f8f850392a8719021d136a3167defffc0a0de3c943f5f3d44b3a5d882dc70b.js3
-rw-r--r--vendor/gen/https/deno.land/750a0e6ae5b5ce579002ffa2a4ba9a12fd10d2e29d70392b60b03aa1a4e37ca9.js63
-rw-r--r--vendor/gen/https/deno.land/7524db45790c0421867b75620bad578c3cad442c86708f875bb8abe9295a742a.js83
-rw-r--r--vendor/gen/https/deno.land/75258a5685194b619b66f09dfe484bdffafe772adff2680dac5f664130deb066.js141
-rw-r--r--vendor/gen/https/deno.land/75298f0eb6c3938cc21df5890715ade25acf246723868d17d393552917f2471d.js134
-rw-r--r--vendor/gen/https/deno.land/757dde3b17685721d57978fb10850726d14635e5c21bf97348221d6fabb62d75.js7
-rw-r--r--vendor/gen/https/deno.land/76f33d277005d03aa28ed94886ccb3f481034101758f3169e677969b99b95b2f.js18
-rw-r--r--vendor/gen/https/deno.land/77a10369b2b0a22d56de43ff92b44031d71e5d1caa09255872fb602353b86143.js15
-rw-r--r--vendor/gen/https/deno.land/78e773d9faefe298ca9933405ae4d8e6e3a855c0a706e96031a535c172bf99bf.js5
-rw-r--r--vendor/gen/https/deno.land/79823bbc13d776f85eda5718d2492219a14637000246daff1355fe1dbbb279ce.js80
-rw-r--r--vendor/gen/https/deno.land/79a8ce76a2188c42fb91f9c354664324230fb7b89458d73d5b6606b45972dfdb.js4
-rw-r--r--vendor/gen/https/deno.land/7c0611e51d6da48336233c71b22977d63210b451912a648847f17cb373b5cff8.js23
-rw-r--r--vendor/gen/https/deno.land/7ef55e2ddc76480d92fc85dfd2e61f7d8911c5efc22dd2c4c0cfb25dad793fa1.js18
-rw-r--r--vendor/gen/https/deno.land/7f25ad671ee24d9f46765b020c9bd6357c95a18d203e03070c2a8d84190167fb.js10
-rw-r--r--vendor/gen/https/deno.land/7f28f15b14e3c857e06c06ffa44655fc3b4e308f58dea66274992b8434cc0e35.js13
-rw-r--r--vendor/gen/https/deno.land/81fbc654f86552bde44b0a558f3a511492f3c807c9dbc34b63d8799fb7175175.js59
-rw-r--r--vendor/gen/https/deno.land/823a9022143dd0e31c2040be602112921aa9567ba2b7e55126661516f8214ea5.js38
-rw-r--r--vendor/gen/https/deno.land/82be6b592ac37957d410393f36f1be296af35cb697766e1f81c60de69db56891.js29
-rw-r--r--vendor/gen/https/deno.land/8561c6478eca43443120a3e3813a65d7e221d72be0364620cc7930ce341a1319.js213
-rw-r--r--vendor/gen/https/deno.land/86998418cd1baf272ddca9e3c8b33b508e05b30a09f7ad3ca24152a0287bc2c4.js51
-rw-r--r--vendor/gen/https/deno.land/86ed0b9408c940603c7c1969618f57babb40be15d2912e0658e4ccd0f83bad98.js43
-rw-r--r--vendor/gen/https/deno.land/86f94448e3ea0bddb1075c51b2fbb6c04da42ae4cdc52751ab25bcd451a85379.js87
-rw-r--r--vendor/gen/https/deno.land/88610722e66f8688b2f40e480ac27de34320384d2777d1aa682424f11c083f65.js37
-rw-r--r--vendor/gen/https/deno.land/8929470cdbe8fc71aae682fb1518570b7e7e42407fbb3a640aabcdeb49331a14.js105
-rw-r--r--vendor/gen/https/deno.land/893432f34c8af4ef278b36a3dbcc5d0deec203fc3e6749eea430c0dbd489c850.js78
-rw-r--r--vendor/gen/https/deno.land/89ad6ac51ee2a5f2898c804219dc6e99fd3e304e28a49a796a4b9fd3ce793d2f.js26
-rw-r--r--vendor/gen/https/deno.land/8a02dcdbb7385b814998c348f029efb817aa93be139f0be6f6fbdb009d364f72.js3
-rw-r--r--vendor/gen/https/deno.land/8a1d4511b8f2b9aed2a8d06d26234b32d0b2e2fd089c56788746a84ce2b5657a.js714
-rw-r--r--vendor/gen/https/deno.land/8a5cef7308a79d18e459106207b7b2056b670cb0d75b75d23fd5da72b9dcc6ba.js14
-rw-r--r--vendor/gen/https/deno.land/8b9e9160f3a0e54f0e5d702063871e91e1492c805e124a3f03472d58238d34cd.js61
-rw-r--r--vendor/gen/https/deno.land/8bf0236b96f24c1623e587b7c0cf3c199557796529f434f101d5987a38f21a83.js51
-rw-r--r--vendor/gen/https/deno.land/8c0b95919f52419042551a1d030a6b5807bdb565afecdc6eed51d31d0010a092.js853
-rw-r--r--vendor/gen/https/deno.land/8d1fde568a3fee9c1f33208eacfe737e03a3bfd24d84ee53a6a8b314e529a341.js35
-rw-r--r--vendor/gen/https/deno.land/8e13e56efc0ab70a1829248301d4a2d1f1cd8ed308f40336a4a4372cb31de324.js1383
-rw-r--r--vendor/gen/https/deno.land/8ff2624c5c21ed0dc87c654d08bd72bd8d37a89508b0a29c64ec3448bb2af726.js25
-rw-r--r--vendor/gen/https/deno.land/9013a95f0c5758768ae5a9fd8fcfb1b10de82e26b90888065d0add44087bee29.js37
-rw-r--r--vendor/gen/https/deno.land/92479c3c048c7fe77aff827f925bec1558c2307c8c96d5cec7b9808beb910699.js33
-rw-r--r--vendor/gen/https/deno.land/933fa6a8c6ed95819acdfaf57f66e8539ff8f18769af26fef468b2f111eb7b1d.js99
-rw-r--r--vendor/gen/https/deno.land/934dc04fa84b83650a23ea29851bb29cc527105c156123c5ce5212f4cc4dfe45.js485
-rw-r--r--vendor/gen/https/deno.land/9357f4868ca6ed11b518750d43038b4ab81a79b38ffd4e0f5dd2b6ac0b825b52.js67
-rw-r--r--vendor/gen/https/deno.land/936428dffbff71b213bd57d419fcb8b7be2b58766cef7c6e31478b4cf92d9d03.js5
-rw-r--r--vendor/gen/https/deno.land/96837a0d8b9fa98caa6242855b2236f19c5c8132a4048efeb3e0037fe24644f4.js5
-rw-r--r--vendor/gen/https/deno.land/978202d32ddc6b8ca33e7a4952d156af6f8470aad796d45d91b4153c0c4abda6.js48
-rw-r--r--vendor/gen/https/deno.land/98009cf0d9b7bf8c93ccedf9d4efb562d421fed638e1c6419615658575f37e70.js3
-rw-r--r--vendor/gen/https/deno.land/9c1f5cb3e2801bc4ef15fa27426125f58e1320b663e89fd95558c870717dfcbf.js7
-rw-r--r--vendor/gen/https/deno.land/9cb036abadad5dc481f4e8049fd5c5f7711b3b5cc8d0d11c4a03005fdcb41560.js43
-rw-r--r--vendor/gen/https/deno.land/9d6d5c7bf6e94259ee1cbf067e9c79b6901e0161a772b9bc6ac1ed9aa53c4487.js42
-rw-r--r--vendor/gen/https/deno.land/9e76f64c85bbd2191baef628b4355a88bce06fd0aacc5861a3db29bf6d805ad5.js195
-rw-r--r--vendor/gen/https/deno.land/a0fab84dd7db3361dc01a7e9adb6a56c8687824456dee2e7bda560162e212af5.js57
-rw-r--r--vendor/gen/https/deno.land/a1d7e697a2ce1b02191959f5519b60b7a0cff44624326e60882d91c949eb6e1a.js4
-rw-r--r--vendor/gen/https/deno.land/a1ecf01679e9a072e3fcb67fdc0c72bd9f0cb869e0da64dcaaa6d66c6426485d.js45
-rw-r--r--vendor/gen/https/deno.land/a1f0a3b1767fb95b49e43ce38f4e77a0b6d2a5f812e7292dff495ef6dcc715ae.js28
-rw-r--r--vendor/gen/https/deno.land/a1ffddb82c7c3d3a654ac3cae5af0c27137ea544999726961b8a861fc3d109af.js115
-rw-r--r--vendor/gen/https/deno.land/a2c4e100e69a26246471a4a40b33c5e69175effef0af41eea14e1289d6214ab6.js9
-rw-r--r--vendor/gen/https/deno.land/a2ebd302f1560ba601d7654f6a17f7c6a896c262db50e1178bb6677802f39401.js26
-rw-r--r--vendor/gen/https/deno.land/a345c1e6061c714f4b7f0c60c5dd2c22044837f9abca210d502436299c05ba5f.js19
-rw-r--r--vendor/gen/https/deno.land/a3c0d2358d026014ddf7f7f71ae9b5fa57d2690f93c3555d8d692c51db7a6af5.js347
-rw-r--r--vendor/gen/https/deno.land/a3f479751556a01612701b1f61c1b91e6e4a6424cada6e6d346ece2472b8016f.js3
-rw-r--r--vendor/gen/https/deno.land/a58ec68acb97ed1d285f9d18d22e00f3d70ef42f0bb5d9a73a4a133059023ecd.js13
-rw-r--r--vendor/gen/https/deno.land/a5c3947b8fadf72708c17d7cc459b4ada54f0a242d45d5bee3e31add18f859ba.js3
-rw-r--r--vendor/gen/https/deno.land/a6003d14dce8cf272c965072ada755d0997d02091192e648ad9d6fec3d6568c2.js50
-rw-r--r--vendor/gen/https/deno.land/a628841e2dca4f32cd805688d9e166dce1486b5a5a98a154bfdb428724423c69.js3
-rw-r--r--vendor/gen/https/deno.land/a6ec6f3510616248b0edd4442b5f244a0722fba2ed52a645812ad07b0eac1d20.js8
-rw-r--r--vendor/gen/https/deno.land/a72ad68e4135a8e5e626af97b8df6af86a6c4fdff3ec2d0c68854cc6424ac29f.js240
-rw-r--r--vendor/gen/https/deno.land/a789cb6c48c7a1d04c243ad9a99d34bcc1b7bc5e4006a4918461e2d957f1b471.js10
-rw-r--r--vendor/gen/https/deno.land/a7d2cd91bbf79350d5df1606d7571bad822fb6a33c35d0667a2506f937314b91.js15
-rw-r--r--vendor/gen/https/deno.land/a8505974f72fcbd736ae4b912e0e51c5f27f8243d826eb776061d81ac3d4cf72.js85
-rw-r--r--vendor/gen/https/deno.land/a94773728869a4bb4351cfa2169dbd0c8a7e717593400c695edbab0970d22b9c.js25
-rw-r--r--vendor/gen/https/deno.land/a951c2a1162a432fc83cda09e7cd6f0dd125bb5c1c70c43848606295b60cc7eb.js4
-rw-r--r--vendor/gen/https/deno.land/ad2d49ec36cd9398ebd9d085925339ac4d2faf5397a1153871d0ec2b4bd96f96.js20
-rw-r--r--vendor/gen/https/deno.land/ae96820eb6bd61609f33a5714be30ae1a34dfefabded9aa931a7931a6efb3224.js13
-rw-r--r--vendor/gen/https/deno.land/b04ac5a483d0425a66ef8f823cec21e6dd5d728e03a56b827c00577a683d9141.js1057
-rw-r--r--vendor/gen/https/deno.land/b1ecf2da2637e535c066eefcfbc2fe27606629100938bdda0a0a7b5d7d35bdd4.js23
-rw-r--r--vendor/gen/https/deno.land/b52b0c3d0f67cabd69f0301754eb9a74af9e5c5992916f3969de2e30d80d65d6.js20
-rw-r--r--vendor/gen/https/deno.land/b5381f20d1c2d147bff9bd97bde16422d0e5869a2442912f3631d96a76eddb68.js45
-rw-r--r--vendor/gen/https/deno.land/b56f203d7c983a08006eaf50209fbeea5d62c6811f25a9a7645e0e9b4272c505.js9
-rw-r--r--vendor/gen/https/deno.land/b6bb333bf077c1e16e7a4653e7ead93848f46feb6e87cc8be8eaab47b758df61.js16
-rw-r--r--vendor/gen/https/deno.land/b7b648aeb7bf351c40c852c4737f6347ad692730f00a61bd30037e13d6ea262f.js13
-rw-r--r--vendor/gen/https/deno.land/b7b9e383e5e7585d47f56e395335495e36ac227039432f2817fcbc9c673af259.js339
-rw-r--r--vendor/gen/https/deno.land/b92b8334e101357a25eaa93990b6e43be520eaf83c20b3addaae80feea4cf623.js6
-rw-r--r--vendor/gen/https/deno.land/bbec36a1ca77b6c7e202b4e56f361584a2bf7cbe94fd74766b08df51542f3ae0.js63
-rw-r--r--vendor/gen/https/deno.land/bc954c21a677007a2ed3673129ee4c05fadbd001d5c4c9ee5931ec76ef25c7f9.js318
-rw-r--r--vendor/gen/https/deno.land/bce94b4ca143a85aa1b121c00bc9a977cf51daf2f3b81b49a377d98ea6533d47.js7
-rw-r--r--vendor/gen/https/deno.land/c29991ec35bcd4a12128c087485dbc7c75721547d27bfda98c9d4b939e1db61d.js365
-rw-r--r--vendor/gen/https/deno.land/c421fbca3fa750ad5bd8ab518977815e39211072fa28843400e1abf98522894e.js263
-rw-r--r--vendor/gen/https/deno.land/c4ef91eda37aa641a25cfd385328c9732b4221eec13d8b930ffa6b22cbf60e54.js3
-rw-r--r--vendor/gen/https/deno.land/c58677db7dd1da121aa6bbba12387b02c31d47527dfddf4f19a7be673985f6af.js25
-rw-r--r--vendor/gen/https/deno.land/c6b2811f36fa978537367cc3f928d87013f4bd005a8194a9c38c37e02a366ea9.js9
-rw-r--r--vendor/gen/https/deno.land/c81f2bcd15b421c959318ba5ed1f59535e7affded9151d30ff55d8132c10533d.js154
-rw-r--r--vendor/gen/https/deno.land/c8a4ba18f007f8fce03e4d69e94fe7ac343998375f340b66b9ec791160b032f7.js19
-rw-r--r--vendor/gen/https/deno.land/ca1ca5971235e65015567cd6b776958e0c5202d4d0cd423f01b497ee04b199c6.js3
-rw-r--r--vendor/gen/https/deno.land/cdce2b3c5cbf354be962968c408d5adf43c4648dd285c23f64d5dc447c75d6d5.js55
-rw-r--r--vendor/gen/https/deno.land/cde923fbb86c5b350acd4c9ea35da65c063787df78adfe038efb54a1e5548fbd.js4
-rw-r--r--vendor/gen/https/deno.land/ce6ebdf888d5ac271720481c38a41e348b8ec9615375f66167d2b8a65da0e629.js9
-rw-r--r--vendor/gen/https/deno.land/ce75e5f4eb4244400bc774cee099115d5ff39780ead41332f7e0adaf3750dc07.js152
-rw-r--r--vendor/gen/https/deno.land/cf2ac3e390878267b518e05a7a89fdcc4bfdc09f204332b5ec6db49b66da6f66.js27
-rw-r--r--vendor/gen/https/deno.land/d0cd986227f092828793c6d13996684c76badd525af6e252685bfcddbeb5defd.js11
-rw-r--r--vendor/gen/https/deno.land/d12174d1bd572035c0e166e17b57cb58410c7e8657c072c48eaa37a43526b583.js199
-rw-r--r--vendor/gen/https/deno.land/d211b9fc75c5154e48599a5b8007ba854f6e3f037b83dae06373f1a55c18d846.js3
-rw-r--r--vendor/gen/https/deno.land/d251f9a3376cfcfbcbada46a892fa72002f1a96e91a74e7946bbfb94dd756abe.js97
-rw-r--r--vendor/gen/https/deno.land/d2a67f3ca20f6cf16e975c3cc103aa7a0cf7bd0f349334c452d3fb21d3a7e901.js188
-rw-r--r--vendor/gen/https/deno.land/d51312a103219438e4b7584cb897e47f0938ec37f40c6dab8e55b3dd3262275d.js3
-rw-r--r--vendor/gen/https/deno.land/d6813b59e015f107c0a8367217770b111bf9f55ef06bdf428a94e413a42c5d64.js11
-rw-r--r--vendor/gen/https/deno.land/d83074ffc62bbad072e50e64df7a17cc4c4ec4206af1dbdced23b7c68bb89b82.js21
-rw-r--r--vendor/gen/https/deno.land/d89a261d566c18ca648e5048a6db5c13d40b0f4c87d46d7cbb5e356886806dce.js138
-rw-r--r--vendor/gen/https/deno.land/d94627d92746845093fa21805116112485063409239d2ff1806d4c41c278fab9.js20
-rw-r--r--vendor/gen/https/deno.land/d9d653821e9f1717cbd7eb811e53650fb78255a6526ba2f1ee18f438dc840517.js9
-rw-r--r--vendor/gen/https/deno.land/da191e04599bc403f4efba8fce8427aef969431bff7a6f72bcdb883003a981e6.js6
-rw-r--r--vendor/gen/https/deno.land/da5cde75ecd58bfc9df9cf6e8ac10f2871c184dfd68fedbdd0ebe1dba6e1b598.js7
-rw-r--r--vendor/gen/https/deno.land/db0b2d75d0ac611a2e0bb54cffae722ff107d36bd76c5cbac2c78fd57aec1a17.js44
-rw-r--r--vendor/gen/https/deno.land/dc17962467533991133f70ea8148335749ee94c09706f4ad12e0e1eac11b748d.js134
-rw-r--r--vendor/gen/https/deno.land/dd8c23b12196ccee33022cfaae7ed223c72b26c1d78e3e991bceb9daa070f691.js4
-rw-r--r--vendor/gen/https/deno.land/de234168948ad2f16752540df5d771bc45aea48a509c5bbf5bf5aa0b09b6bd58.js53
-rw-r--r--vendor/gen/https/deno.land/e373f2347336fe56eca5d0409c355d64c8d56c249db6412279b7fae7e78816bd.js68
-rw-r--r--vendor/gen/https/deno.land/e4c8e4b371b67de364d0d508d4e1301bb691dbfc4fa99f37a5a32e017c69ad30.js5
-rw-r--r--vendor/gen/https/deno.land/e7bceb0bf728eb749e9c145128c9520b662a295ecadd239f363a05c52f178b5f.js10
-rw-r--r--vendor/gen/https/deno.land/e81338b01519599c2e66a798b892305c443ca2ffb64f85cb4287a76d893b2650.js10
-rw-r--r--vendor/gen/https/deno.land/eb8f80b56106578add3c34d4a67149cce6779fec8fbebb17a7ecbcca2ef41a52.js163
-rw-r--r--vendor/gen/https/deno.land/ed1f5033c2c651877a8a846f864c21d6250a6a1b470777a89b1579a83b93de0b.js387
-rw-r--r--vendor/gen/https/deno.land/ed630f2b8500d6bda96430c93688cb4fbac733b20fd72c0d8a15328b95852453.js10
-rw-r--r--vendor/gen/https/deno.land/ed797ca86734190a29b9cc9a04450e54abb1935e4b18b4808e890bfd2ab9e793.js198
-rw-r--r--vendor/gen/https/deno.land/ed86b2884f587966d7603fa9d467a38520fdd0d9a0f8c97c7231d8aa8425e08e.js37
-rw-r--r--vendor/gen/https/deno.land/ee461dcf7bc911e1ae7f7325e06420f386fc9da6ca7120580368c1f192bf34ac.js18
-rw-r--r--vendor/gen/https/deno.land/f077dc9f645c546d47a82c55a975266381b30c45d73900e03bb18e702d746344.js116
-rw-r--r--vendor/gen/https/deno.land/f1561e684b27ff55faacd9771405941bd912fc01fa66fcf29258f32063199bd6.js4
-rw-r--r--vendor/gen/https/deno.land/f182e676d52341f44023b0b0e7f431da35821eed8c08bc4dfa93983aeca96e38.js51
-rw-r--r--vendor/gen/https/deno.land/f5ab6a7e6b26573f6cb96ffcf1cb5c4eba0a44d7737754299ecf5ebb12af5906.js4
-rw-r--r--vendor/gen/https/deno.land/f64818ea7796afb334b74e1511bde33341be04316575a248563f571b7eae772b.js171
-rw-r--r--vendor/gen/https/deno.land/f6b9b2bd96618d6fbd88b97b38a1f5c50174bb785acbc29de06f1535dd58f755.js40
-rw-r--r--vendor/gen/https/deno.land/f934b190b693fc774b58f2eb8cfd39ef420d11cd108028b71a788a4f975c05a4.js9
-rw-r--r--vendor/gen/https/deno.land/fc05666a60f1512f32e3b7e8552b2385add292079bd266bc201dbf7f087411cb.js3
-rw-r--r--vendor/gen/https/deno.land/fdaf1203a8e5af8f885066836e1b4da9dedd6ff81f3dabb347d119a209ebc6a3.js23
-rw-r--r--vendor/gen/https/deno.land/fe21d44375cf065a9abcbcf926f7f4583ceb12e84f57f12b6d2149919d79d05b.js54
-rw-r--r--vendor/gen/https/jsr.io/0048572f7e9d90059453f4d0e932f038e6b729b85f2790af70a5744efde0a290.js117
-rw-r--r--vendor/gen/https/jsr.io/015c88c241d68e20fcbdb0dd94cb199af1fa83ad2cbe5064cb25e36dcdf406e5.js30
-rw-r--r--vendor/gen/https/jsr.io/016dfa2b631fd2ff95f5f0da03575c1a3e85c532e60ac5a50208fb4ab606b893.js71
-rw-r--r--vendor/gen/https/jsr.io/04da19a95e47f74a8bbf4e6444261cdbbf6b41168a7ef4686aeeeb41244e6364.js39
-rw-r--r--vendor/gen/https/jsr.io/057a32a8a2a061c80fc3ac3cfd0ae77b08f46dd05a750d3db5775d2d7ebaa39a.js16
-rw-r--r--vendor/gen/https/jsr.io/0593e0ab0c93abb5a17250ca2b65b8a7b5d23a9253f8a163f6fdc115396ef93d.js40
-rw-r--r--vendor/gen/https/jsr.io/069edb2631331d75ad72b912ca478f8a30a5d043879d0059987ff081a47d25e5.js181
-rw-r--r--vendor/gen/https/jsr.io/081236b688f80c0c99d298ab430a6547867a10504949c43e730bc01c7d00a232.js17
-rw-r--r--vendor/gen/https/jsr.io/0a5487698f5644dfd1a0f393d451106e457ee09ddce0b2f0fab8ef8678a6625a.js82
-rw-r--r--vendor/gen/https/jsr.io/0a97246903f0a65f9d85f5bd92a9fc811546233af84935178147a3841cc915ed.js53
-rw-r--r--vendor/gen/https/jsr.io/0bc2c76582e1b8a41cb5a25cac9c0a9f93939f069c0738a0944227ae078f0834.js134
-rw-r--r--vendor/gen/https/jsr.io/0c4d9698d06eda300c8819213081f7e749cce45215b2584b8ad836b846a1436f.js859
-rw-r--r--vendor/gen/https/jsr.io/0d09955d261f90a3e9026087e0ef08c617c90c39a9d0f19465e0ef5d9f597d15.js34
-rw-r--r--vendor/gen/https/jsr.io/0fa0ca839dbb298b989195e7b6298a1f91f3a831335f6e1c56ac264ab3065575.js109
-rw-r--r--vendor/gen/https/jsr.io/0fc017f09bf1a62205dd12c68444f7489a60d91780e13e119bf99a190da44eb3.js43
-rw-r--r--vendor/gen/https/jsr.io/0fd081c84bc9d4e5df142cdf1f33522ed70a5b80565ebe3bb6e43e367ab6931a.js29
-rw-r--r--vendor/gen/https/jsr.io/1032cb573d730ec0e72a1a1cf5caae0f5c1a05814e04acfb8822bdeaae948ce2.js33
-rw-r--r--vendor/gen/https/jsr.io/1343090cfa12d7a373df3737a8aea05573e14a2cc46e3c02f8cc4f571ef21428.js34
-rw-r--r--vendor/gen/https/jsr.io/1385e88bf982d9ebd71bd1ae75298f5d421441a57bf8383721cd875960901f13.js40
-rw-r--r--vendor/gen/https/jsr.io/14c2e7d7cbd0578d0c71adcc5f68504350c3a4245895784bf8741d53c6c61c43.js131
-rw-r--r--vendor/gen/https/jsr.io/14c325e4d60cdbf83301211077ecbce5016df36cafc4ee08329a89cd724a7891.js73
-rw-r--r--vendor/gen/https/jsr.io/169a7a9f9f4503f27e19e895b1d11e116a8ba7e62fea05683820204e82f3dda8.js74
-rw-r--r--vendor/gen/https/jsr.io/179f2e8864819323bbe3744a75a9f3ad1b214c60aeb28f569fd1147416bf8a9b.js47
-rw-r--r--vendor/gen/https/jsr.io/1a8c8e54fd981ec59cc603b3e473ea85f1f02651cd6fd641a3e460eb4e69311b.js28
-rw-r--r--vendor/gen/https/jsr.io/1ac3d76153ab81b8cf0f6675645e174a12faae32e6fa6524ab909e0b03c3348f.js1239
-rw-r--r--vendor/gen/https/jsr.io/1c97b0b0f1c6087b0c3dfa4a2da62aaae248ad106e50a6e70f71ac038247afa6.js43
-rw-r--r--vendor/gen/https/jsr.io/1e9cde642783926318331c7378e3263854a5bd5f58a91b78c54b96ce2d70e0a8.js23
-rw-r--r--vendor/gen/https/jsr.io/20186b85c41d56e6c736e8fb833fe9d682f01b4468fc12efd39a58688418d54d.js41
-rw-r--r--vendor/gen/https/jsr.io/21b6c9b75dfe4daec50585f69f1fc9bc35b33e506b82697277823eca9554919f.js46
-rw-r--r--vendor/gen/https/jsr.io/22868d83da97dcd7a8b8491b9f56f3278eb38b6c47aa5068bfaba35ed4f184fe.js5
-rw-r--r--vendor/gen/https/jsr.io/23dd695362b33b015f9571c930e513361219d796e62f6994cb54ecbf1f8847bb.js84
-rw-r--r--vendor/gen/https/jsr.io/240ddf07245e78a80fd400a82f119a5d566397aec6081dec5d65e4022396199d.js42
-rw-r--r--vendor/gen/https/jsr.io/264b5c2fd3ca2f77b897f4ca4174959deb5b0ba0827f362927dbfc32f904859c.js95
-rw-r--r--vendor/gen/https/jsr.io/2690ba5c1d393196f984c7da831a246087c0b598c0e496771bfe1304f0d014f2.js55
-rw-r--r--vendor/gen/https/jsr.io/272b8f245218da9945acf2490e22fd5b03b0b7f84d7e9400ecf2770a34f360c7.js146
-rw-r--r--vendor/gen/https/jsr.io/27e256c652de55aa49124212e299cc074b47585ce9996f125fbb8f26a6f3d413.js85
-rw-r--r--vendor/gen/https/jsr.io/2873410a9626037eec217ec7ec81300d63a80b5770ffd091e227d12e29268b0b.js138
-rw-r--r--vendor/gen/https/jsr.io/2b61d5ccebac8f353bed4197d355dea0769292a00153c97b5cac03718fdb1bb8.js33
-rw-r--r--vendor/gen/https/jsr.io/2b730be9f91a5d1af7cc15bf48772cac084b8338780ddb9dde2f6b7866ad74eb.js50
-rw-r--r--vendor/gen/https/jsr.io/2dfc5906e290c712f0c7f3ad228e202b0ff32b317cb64f487ee2810539739211.js40
-rw-r--r--vendor/gen/https/jsr.io/2f22c2a213f8d0b79812fd751c5efcbdc0c8a82c7e93a0d77f66a7a095cedb02.js58
-rw-r--r--vendor/gen/https/jsr.io/2fab163696b080858a88eec838206926fe73e0ac01075f0833f63052c8c3fc30.js24
-rw-r--r--vendor/gen/https/jsr.io/3028e15592e85f3abad159660201866f1bc8d92a1fac9b1cb0588af2471d9ae7.js49
-rw-r--r--vendor/gen/https/jsr.io/3033b260d04154e6fb47d4992b9453aa2481def9df8595254c5de0a8b547c8ab.js21
-rw-r--r--vendor/gen/https/jsr.io/3056f7672646bc615e2d6cd1010ef69cfed329768bbdbed2094fa9e8a8dd0d49.js71
-rw-r--r--vendor/gen/https/jsr.io/308e8b732951c0b54bcba8346b862f82bb8c234b22cdcf5e791c54e6bee87859.js10
-rw-r--r--vendor/gen/https/jsr.io/3117caa912daf7a12cb9b141ce914c3fc8d1dcd65c7de5f1fd0dc47c61358bf9.js435
-rw-r--r--vendor/gen/https/jsr.io/31939e2cd228e73559ef4bbb0326c7947aed6a713c2912b95ef2a0f25458dffd.js116
-rw-r--r--vendor/gen/https/jsr.io/324c04d0a020b457392045ccecba780e08b6ce8431d068879ec2f485ca92d07a.js87
-rw-r--r--vendor/gen/https/jsr.io/34b12cbddc84ee767c60b6bf1bae25087bac28cf398f1b58fac7da0d61d62c65.js16
-rw-r--r--vendor/gen/https/jsr.io/357a9ee9f8c9fb9c039a1be3630b0ebb48453dd6301220ff065cfb62b941b431.js76
-rw-r--r--vendor/gen/https/jsr.io/35a962b444037158086a1f9ae4ad7f22a48ee64c967938bcd0f03d85fd2c4d43.js26
-rw-r--r--vendor/gen/https/jsr.io/3606c59f3e92316faeb20c991c858e0e1fb18771bb9d01d7a3ed8514b85b4bdb.js9
-rw-r--r--vendor/gen/https/jsr.io/36c1e87dab15e3bd201553b517dec4b821e3a0045fc94d176dfc131a19d049d6.js295
-rw-r--r--vendor/gen/https/jsr.io/385bb16ccbe5833897df28ba737d9f998e1c7bbed9de7a151df15888630ac12a.js294
-rw-r--r--vendor/gen/https/jsr.io/38aa7b6afdc64af601c4eab0a42f4f139c1497a1452d607daaa6823c21f533be.js35
-rw-r--r--vendor/gen/https/jsr.io/3a61a512dbdae4e3b6f7e30b820e02c70fe4972d886f28435219ed65178c2b83.js7
-rw-r--r--vendor/gen/https/jsr.io/3b7cb2596c03a339e2fc597548be8d6fe74112b478dd5206fe023f7a51cf2e7e.js25
-rw-r--r--vendor/gen/https/jsr.io/3b96c708fd94345746410a9d43a001a79afb48c21b1ce15bdff8f066d84d2de5.js266
-rw-r--r--vendor/gen/https/jsr.io/3b9c564787e5f2f66afd4abe8ff7b405532c182d381eddeab28466173172c34d.js627
-rw-r--r--vendor/gen/https/jsr.io/3c78879b3e16ca06e56737c27c7272499f5c768d3b4080c728b63c4f98f8299d.js16
-rw-r--r--vendor/gen/https/jsr.io/3cba2e78a97f1de50755b20ffa539bd0bde61f127769015037fc617d6d071635.js29
-rw-r--r--vendor/gen/https/jsr.io/3d9ec5951e86ecfa4573d5391ec7021ff3a65ee612fff17e71112d0af364fe81.js11
-rw-r--r--vendor/gen/https/jsr.io/3f59705da94195438968647319ea2cac89b81d4e967347f0fcc8998c7a615a50.js182
-rw-r--r--vendor/gen/https/jsr.io/3fd7f5223bf8f7e17fa4352df42656f2cb2af8814dc41c8b3fe39fb7840a8449.js207
-rw-r--r--vendor/gen/https/jsr.io/3ffe5517419da88b6c9199c98b1503003f5949fdc374e53d8e49fab827d55edf.js36
-rw-r--r--vendor/gen/https/jsr.io/41634e30ec873a003c71f1c2c33ec4d9f83a9e44a01d6ca60d3ef06b4db00bbe.js29
-rw-r--r--vendor/gen/https/jsr.io/420abd08837ee239adf5e93b512dc8b414bd03aaa189f0eb845fbd299b8b6a78.js95
-rw-r--r--vendor/gen/https/jsr.io/47d73fd65d0272244d9a0bc6f8b8a6fd770a2850f159a336ab2448bdd3a4fd86.js177
-rw-r--r--vendor/gen/https/jsr.io/49f6f053887d48ae744d6d0724488bdab682f647ddadaf5fecd0940c9be000d3.js11
-rw-r--r--vendor/gen/https/jsr.io/4a62cc9e15d67262b11752c2aa575b5bc71b9b3e832d30b8312e211c71d82358.js25
-rw-r--r--vendor/gen/https/jsr.io/4c8dda6c45b02ddbb9144d5293e9340bc17c145bacb4db4172d5d5fc5677d385.js855
-rw-r--r--vendor/gen/https/jsr.io/4cd07ccdab851a623a4ab1ee79152bc24bbc59b2664a3e4db97b6c8b1934b39e.js9
-rw-r--r--vendor/gen/https/jsr.io/4d6cee0ff1bf9cfe8022c9c6649944bee022bdb32336cc243bce667a69bb3798.js15
-rw-r--r--vendor/gen/https/jsr.io/50436fdcbcd0f6c11763b46aaa357399c4dcfc34a2c081d55f05ff6117764ce7.js53
-rw-r--r--vendor/gen/https/jsr.io/50c2c141172a883abf52dfcc12154f246025a3ff081b6707c82d69b2bfa533ca.js71
-rw-r--r--vendor/gen/https/jsr.io/50ec11ccd831a2a5370f919d392e0412ed7085af7d5d821bc3fce15102f26ea9.js29
-rw-r--r--vendor/gen/https/jsr.io/51bfd7542bc0eda1a32293215f01b64eb581456a2370dd96febda3af3ccdbf29.js34
-rw-r--r--vendor/gen/https/jsr.io/52723ab88f0d7683c38830d4b4913dacb4e28f10cae0c1b3c7edf5edbb3180c0.js40
-rw-r--r--vendor/gen/https/jsr.io/52a5ceb4391fa51760fc2e28428cfa87e4f4e1751be6b657bfd4b7e26746aba1.js39
-rw-r--r--vendor/gen/https/jsr.io/5304106c4e963b63ea0d18a201e1b9cdec614d7f987a7c1df04d83dda9ad391a.js17
-rw-r--r--vendor/gen/https/jsr.io/5351942042f1aab5ffc9c2cbd36ae1eb5897741bd7565a8dc4fc7d1403da6d62.js44
-rw-r--r--vendor/gen/https/jsr.io/548a8a28c6d1bb97e6d28c99071457837531f26c0806d130d385ecb0c3f40e35.js25
-rw-r--r--vendor/gen/https/jsr.io/55ba303596e2b0b0a3440b83abf434b8919584f53f34ee5017729f4dbe5b3cea.js13
-rw-r--r--vendor/gen/https/jsr.io/560e33636905b3f4b7797daddd2356fffc4f8a3d1a8ba29b731b198274973d20.js33
-rw-r--r--vendor/gen/https/jsr.io/561e93e1856f69ee9e73f3e4fe6c9a1e9006c74d8eedbcb1e83b2b69b070fb48.js81
-rw-r--r--vendor/gen/https/jsr.io/58252e6d286c880d8773d8a341cfe36914d2bd9c2f6ec9db90d26b95f521f5a0.js214
-rw-r--r--vendor/gen/https/jsr.io/590dc3cc72c9f412bf0525f9de88ed9fe5165a6288da3c007a9b5f2c74b438f4.js31
-rw-r--r--vendor/gen/https/jsr.io/59b15946e5c41739f041facf257e61065ca2e759fa92c8dc627590b8ad366543.js104
-rw-r--r--vendor/gen/https/jsr.io/5a2b3f7cda9dc10babd5c467f85a5ee73f994a8548762b861ed441397aade522.js7
-rw-r--r--vendor/gen/https/jsr.io/5a3e5143598daa6b6fbe4264ac06f15b7ca7553501fbd415da1cc427f2b370f2.js50
-rw-r--r--vendor/gen/https/jsr.io/5aaf5a8124be57046a016c9b1a7e3d9ba20e9b3865f259c932999ea7636b6e00.js152
-rw-r--r--vendor/gen/https/jsr.io/5ad0b729bff518ae7b1d0e1b7df87fb6b9211646cf1b700f51bed24d18c41962.js129
-rw-r--r--vendor/gen/https/jsr.io/5b2ed25f336e15fc393d4e34f9694d457ece3821100c6200e4261af96dd1f320.js64
-rw-r--r--vendor/gen/https/jsr.io/5c777cdacb2b2650a97900385ce3cdd687aba4f7e98960ce3f524ad23becf40c.js28
-rw-r--r--vendor/gen/https/jsr.io/5da4665762c15cd959e16747dc6dcd6acdab04f5b2c4fc2b40c6f81faa998e84.js48
-rw-r--r--vendor/gen/https/jsr.io/5ff5b9a14f6bb57b6e7c7035553a5a8c12be8daff3b2d2f66ddfd87a704ac89e.js117
-rw-r--r--vendor/gen/https/jsr.io/60a4950732b161230d657ba32a1f0423c16e3e80101ee98f7220f201b665e466.js63
-rw-r--r--vendor/gen/https/jsr.io/6285dfaf21300225c1ee1691dec58f0fe9dabb33adb0e4cf6790798b02c1111e.js60
-rw-r--r--vendor/gen/https/jsr.io/6309c5636a1829309dd3307c9db57a6c498ddace1c314f49005ec1e853b8a559.js44
-rw-r--r--vendor/gen/https/jsr.io/6478588dab36d4c6b1fad2b6909e61673d0fcd3cb2fa3dda5df94186b0870130.js32
-rw-r--r--vendor/gen/https/jsr.io/651ba47183723c05f7ffd2456f7e0d3d88168e0bf6a00537cc2d2fa1dbfa57c3.js41
-rw-r--r--vendor/gen/https/jsr.io/65faaccaf28669a72ef1b6830ea46615956c2f248bae796c29cd2292757640e7.js80
-rw-r--r--vendor/gen/https/jsr.io/6747bf701f3d06962451bf17cd72da9de6bf605cd2a83dc7221c64bbf6831c78.js28
-rw-r--r--vendor/gen/https/jsr.io/676979eaa18bc94435f9733ede83ca3be7eb3ab8566b1f9967aaa7b89abb9a9e.js214
-rw-r--r--vendor/gen/https/jsr.io/6a34c89abc1f2de5e2abf89333e993b3cd10d3aaa33652f033913f0e59218890.js93
-rw-r--r--vendor/gen/https/jsr.io/6b0fe05b55b67d65e900040720f1786785fe3230bb279928ba030016c815aeff.js31
-rw-r--r--vendor/gen/https/jsr.io/6b4d93c891018ad595cf8ce1de36ba2333f9ab24ae6ffb40b9c56bee82480636.js11
-rw-r--r--vendor/gen/https/jsr.io/6dc153e700218eaf14764539b39826de198c3a73de2cc26f56ef42136a3dde49.js41
-rw-r--r--vendor/gen/https/jsr.io/6e25cb4ac2850b01023cf179359c85777db38a8dd21d87c852a04d7ea74493fc.js139
-rw-r--r--vendor/gen/https/jsr.io/6f8f7f5108dda9845849548f2d97c52a64621c94a50080622cbbd6ad1df18725.js20
-rw-r--r--vendor/gen/https/jsr.io/73024f538622d1ca5bab214faa71cdb9cff76c5fc8527c7e2aec87c13bb316dc.js9
-rw-r--r--vendor/gen/https/jsr.io/747afd3f78995a6f93354a3128bc7c3659e1dddad22fa4087da9f47a5a5df701.js17
-rw-r--r--vendor/gen/https/jsr.io/74a9e65c6c0c814de7082d8591d274f4c8e82f69264757876492fd0311e58682.js46
-rw-r--r--vendor/gen/https/jsr.io/762a06d5cb62c7976d8eff7361c8145e3a869b837c701fe66c3ff50d34f5bba6.js19
-rw-r--r--vendor/gen/https/jsr.io/769bbd5bd8b1a0055f7ded6c1675bffee41ad499f3155663351baac1a6d71f5b.js62
-rw-r--r--vendor/gen/https/jsr.io/78a4df5e1ccb1386d9b6208cdf7265e15af199d4337692fa6fd9ac1f33a7618b.js74
-rw-r--r--vendor/gen/https/jsr.io/79723db584e7d9342e232ee1b43cbb3a43290f20feeb991d0afce2089f35dd99.js30
-rw-r--r--vendor/gen/https/jsr.io/79e1ab97020b4c9a9154275b6fd14a76696de85cd4da82636a97637dcbecde18.js217
-rw-r--r--vendor/gen/https/jsr.io/7a355925927e59c1b259e2a6f95925987a2b7c2f7f42641b4304c4cac214819b.js161
-rw-r--r--vendor/gen/https/jsr.io/7a9c1bc33a76752abbdb0526735a4efc927cb49acb2e0652056b65b39e5413b8.js35
-rw-r--r--vendor/gen/https/jsr.io/7af12675adbdb192abff581e22d0b8bc64913d7b5ef406c354e1274e423a6383.js16
-rw-r--r--vendor/gen/https/jsr.io/7b700222389200c367abe08d5c2b036f40a97247c5d8fa22a5a1f2da6a65b9af.js121
-rw-r--r--vendor/gen/https/jsr.io/7bf9ff33835356995e82eebb24fe4b52afb4f364360acbb1274723efc2414c23.js45
-rw-r--r--vendor/gen/https/jsr.io/7e02d6fde9e2a9fd86cfdfe19b8a0abdc309b1e1080fa275a921a36ea9b144bc.js33
-rw-r--r--vendor/gen/https/jsr.io/7ef95e827d53e7a4dd4d0a2daf85aacd41ca0ed4b387c4c1fb903abec22b7f63.js28
-rw-r--r--vendor/gen/https/jsr.io/7fe4057724d6a3ff861e6d81afea88473bd0df708dd59158de4eca309bbda2db.js26
-rw-r--r--vendor/gen/https/jsr.io/807992fce1e69434fb4f6b410e34161f57cd0c25d162888c7b021ebb3c978979.js10
-rw-r--r--vendor/gen/https/jsr.io/84003758484e1d3a99bebf88da29e64a399372453c17163f298aa6a88be5214b.js108
-rw-r--r--vendor/gen/https/jsr.io/85a9de88532df558c8914723531a910b73b52d30a948d4836769a3d85a2c4b76.js10
-rw-r--r--vendor/gen/https/jsr.io/8716e215c72c88449c76eb578318d4821148047bf78f5e21398b6703ce3191b4.js15
-rw-r--r--vendor/gen/https/jsr.io/8723e1f25cd62b03a4a90125bfa0735a433fa48534216660acddc5339e57971d.js29
-rw-r--r--vendor/gen/https/jsr.io/87f385692355b13d6c2d3c59d5637b249b3dbd5e129200cf556a65f3ff1cf348.js34
-rw-r--r--vendor/gen/https/jsr.io/8830625e22147a5105ac9c36460a9029c630ce356fc1665a5213ead4f55c4c80.js33
-rw-r--r--vendor/gen/https/jsr.io/899db1f33a2c0cff5cde63f30ca5bced082d934efcbcaba71fc4e480ddded700.js29
-rw-r--r--vendor/gen/https/jsr.io/8a11ac2a3ee9720926cf6acb595e4fa0490672b4622b8715d97db262a66d643a.js40
-rw-r--r--vendor/gen/https/jsr.io/8aff16c286c919482b617aa45fb52eb33bd519c292c30a75805c4b2eb34b28a1.js139
-rw-r--r--vendor/gen/https/jsr.io/8b4e24245a9065e2615ec879005f14842c30d9da9bc0f7d190880e5b306b4fc6.js13
-rw-r--r--vendor/gen/https/jsr.io/8b7c659a7c5be6d2872c842f5ca8b5e45a8847160f1da1ede807fc18f3209c98.js19
-rw-r--r--vendor/gen/https/jsr.io/8d1c890b758033cc6367cbb53714b2eb41dce91e959b4ced1b0f0f650d53fb64.js34
-rw-r--r--vendor/gen/https/jsr.io/8d53724239042b86f5795d180122804571647256ffa8e5f8358e5712f4e4af88.js51
-rw-r--r--vendor/gen/https/jsr.io/9012576778908b158e024660562adbf3f4f16d402c08352c59ab89a1249c85b1.js87
-rw-r--r--vendor/gen/https/jsr.io/90332a2c99630129e9ac5ad20794927391d60c3a46aba172cfbc4bacbd336134.js42
-rw-r--r--vendor/gen/https/jsr.io/90ec6ffe8bc46e52f8dee6e4ac18e9eb05d2961f04043f5c0568a52a5ee68719.js33
-rw-r--r--vendor/gen/https/jsr.io/910266dea525a8c1a49ff738196a5e27d7d1d437c43571597b5e2fc30e3033fb.js33
-rw-r--r--vendor/gen/https/jsr.io/922f7cb1f4edaef51d69b5613cec55bea117e9f71d3b74f49cadebee27ca9137.js12
-rw-r--r--vendor/gen/https/jsr.io/92434716b7698fef650a97c8f39c0d5b9a386c75f835219feb0ddf94a0156dd9.js9
-rw-r--r--vendor/gen/https/jsr.io/9337c54a851fa7e98de02877cc8d9ce59da3ab1f79e4ae31856af9f815a2de5e.js10
-rw-r--r--vendor/gen/https/jsr.io/952cb0109337dc9b2ca17eb596e622208b74117dae73e791d4ce3d8b2e9a74f4.js77
-rw-r--r--vendor/gen/https/jsr.io/95a1cd8a407d14ce1ed34f21e53075771dd66b4336755fb2ab087faa31c6e42f.js101
-rw-r--r--vendor/gen/https/jsr.io/97354b4c15b720fc58f4d4222b501edd6a3f090531cea1d3eac1aa677df70d75.js165
-rw-r--r--vendor/gen/https/jsr.io/98248e544ed47a15c14f94c7703548db184e7d0af81b715ac68343bc4b5d401c.js252
-rw-r--r--vendor/gen/https/jsr.io/98cb00e3517957054dc1b9f9b06db6ce05d5815406747c2845298cbc1890fb68.js22
-rw-r--r--vendor/gen/https/jsr.io/98f0259426a0c81a230d4c389982c1135532ead00f6ed20a8512836d26b91574.js46
-rw-r--r--vendor/gen/https/jsr.io/98f62dcda1e98ade7b8eec4fa4b9b5c664c1069ca223bcc2b5a93805f0e97884.js13
-rw-r--r--vendor/gen/https/jsr.io/992b4d94d2181a6ea0f6ca6443106d10e641b5198e04d0a84f446c0485f86a3b.js102
-rw-r--r--vendor/gen/https/jsr.io/9a5768f12c3d5486b6a5324e94c9a06da3c138ecae2dedb72cbe0c0c86912157.js35
-rw-r--r--vendor/gen/https/jsr.io/9b021aa9d7accb3c15a3433f842c97639b9bd91dbd9be7fba09c9d099164fee6.js15
-rw-r--r--vendor/gen/https/jsr.io/9e70c413dd22ed24e5ae6d305c9d42c1eb39670785101b4ffc7fceafa1f7797e.js46
-rw-r--r--vendor/gen/https/jsr.io/a0b7e8477b3687472f959d96973062e83a843ecd2caee2a9fb327b10b406bd8f.js28
-rw-r--r--vendor/gen/https/jsr.io/a16be1205c7305277e3dc0bc58e8ae9fbc68100d59b874588c142e26e7ae057a.js29
-rw-r--r--vendor/gen/https/jsr.io/a1b7b3e77d09f84a8a399462a64ad12165676a13d7efacf78dfa068c0ad92ec4.js692
-rw-r--r--vendor/gen/https/jsr.io/a20a0a0104176c5284237e906fcc75e949c8c412c98ff9e2c27b71d6401bc18c.js37
-rw-r--r--vendor/gen/https/jsr.io/a274509fe14a74ce9d9ee5de63590df49825b9f75f011b3f6fbb8806ff0e8d84.js40
-rw-r--r--vendor/gen/https/jsr.io/a3264823d25646a082d91622329c08defbdd71814a7eaa3dc69f993b1b035d71.js29
-rw-r--r--vendor/gen/https/jsr.io/a7b60c5acd878057b22633c478f52903b96e57744ad9bf47df95bfd5d903b48d.js9
-rw-r--r--vendor/gen/https/jsr.io/a80cf6c3276c9f87132aa5e59667bfd5967a37f532932f755b28cf29a9f9109b.js17
-rw-r--r--vendor/gen/https/jsr.io/a8cee04f686812adf569c862c389ea4a108d63b6a64cf60216e8c7104bc659de.js84
-rw-r--r--vendor/gen/https/jsr.io/ab3237661902e46b66589337c5a061918baf367104349b90dd7f910f683eba6b.js12
-rw-r--r--vendor/gen/https/jsr.io/ab6c32e2d05c70692da93963f74d258531b9f3d9776bddc3afc7421a2d8ec309.js29
-rw-r--r--vendor/gen/https/jsr.io/ac4da3110b73ce8297daa0a53bd9810ec5f816c9151e9ccbd645543af0af5936.js18
-rw-r--r--vendor/gen/https/jsr.io/ace2f4cea3ca89beea78967ace279c6700de0309d3258a49191432b548ac22b2.js29
-rw-r--r--vendor/gen/https/jsr.io/ad40331effdde59acb79f761b463e2be34bd07e4d6320c9cc305fa0598df503c.js30
-rw-r--r--vendor/gen/https/jsr.io/adbe56f42ba4cca03a81cd613a1d391e8baab107c8ef28d55be2b0cf3522c7a1.js28
-rw-r--r--vendor/gen/https/jsr.io/adc27699f317593c105ce7d06e41bb85f370a37936d5b65a49d55363fb52a133.js14
-rw-r--r--vendor/gen/https/jsr.io/aec75bce0faff15bda446d4f6e5b7f6a678d38af88aa5c7d98969ce9fdcbf265.js19
-rw-r--r--vendor/gen/https/jsr.io/afa9cfe71a94297bb0a232341d4d1993b5bf6eafdf88867dd1a5c0d45b7f535c.js50
-rw-r--r--vendor/gen/https/jsr.io/afe469936d3857e381b7086a6ecb3f6a7b40a0400c10fa2827a1f0200de57a0f.js77
-rw-r--r--vendor/gen/https/jsr.io/b03f1a0b11c99f0a3aab83a25ae3daebe28abed9beafd56072596f8e80c6c58b.js48
-rw-r--r--vendor/gen/https/jsr.io/b46e482efb61416b06d67206660efaa4111bfb752ff7950d2a7d29feccc31ed8.js34
-rw-r--r--vendor/gen/https/jsr.io/b519461d2f80078b67e67a141da6406675a9a13c5f618fa300ba29185b7785b0.js24
-rw-r--r--vendor/gen/https/jsr.io/b6032b1a54d54ddceef1977651fc7c93aa6aa011bf5e447d7e1ed36d51b9ebd9.js75
-rw-r--r--vendor/gen/https/jsr.io/b6447565302b0926e9a9ee9be7baf6b6ee4377252ac301705c902d0bad0e2dca.js33
-rw-r--r--vendor/gen/https/jsr.io/b6c2a8bfeeb3680c0fa67ceee394b69e61c8679344242038a6bfb006ece7b5f7.js9
-rw-r--r--vendor/gen/https/jsr.io/b6c9bf6950bf2470b05ff5d1536cb2bcc7ff6d2d90a030bd8144f0b0940ec257.js31
-rw-r--r--vendor/gen/https/jsr.io/b766ba6cc8f67eca6b69141d5b966816a727fec3d38098c6c5629f915d597a3b.js62
-rw-r--r--vendor/gen/https/jsr.io/b8c879dcf8a00694f2d60b43aff97c3c5b71a7c30b1e92e460b45d6e5eae4d5d.js111
-rw-r--r--vendor/gen/https/jsr.io/b9859d0030b7e958ce09a6edca0994aab18997d0f063b955d380ea875852a919.js751
-rw-r--r--vendor/gen/https/jsr.io/bb1e1102f0410b69a83b390e1ac8899b3368a13f93406c05ea529eee1d9f98f9.js274
-rw-r--r--vendor/gen/https/jsr.io/bb905bc2f8533ff77cd0689d547cd97ee453c168804747a23f3917c658337a63.js86
-rw-r--r--vendor/gen/https/jsr.io/bc4fb8b9edfcac38bb3444c2744233b88b823fef1cd9e6691d1e40e7cc02beec.js331
-rw-r--r--vendor/gen/https/jsr.io/c4dab3e93e863ba69bb87220ccdf01bedbe71f1db791125469f780ab2a8b939e.js85
-rw-r--r--vendor/gen/https/jsr.io/c503ebed74a8963596fcf649c89c8b399e81df46df930177056c5968545b18f8.js947
-rw-r--r--vendor/gen/https/jsr.io/c5a9c53010e29942c373acf9060630c1aa073f501d5e59b0c412901c445b0f2a.js121
-rw-r--r--vendor/gen/https/jsr.io/c5f0f2266368c0c131094c035b462a4e5aa9ecb04434dcfebf483e2e1e3533a1.js94
-rw-r--r--vendor/gen/https/jsr.io/c7b43dd6851d84d742dcf098b509ce07b71a7f617222f2b719745d65d5c8f6f9.js109
-rw-r--r--vendor/gen/https/jsr.io/c913ceb3f6a5cf75818eb291e60821c1913312480db1afa9743a41de0181636f.js53
-rw-r--r--vendor/gen/https/jsr.io/ca0f20d4b84d6ae651de68bd07becc010bdedb6be433f7d841129070f16166c8.js21
-rw-r--r--vendor/gen/https/jsr.io/cb315c9c97ffdce335482e9fa441d05411ea3b89d8f3058e4777516917187a8e.js35
-rw-r--r--vendor/gen/https/jsr.io/ce27067ea7c10f0cde68eeb1b15fbf030e7260a319a44a394093aa2d91db5f53.js22
-rw-r--r--vendor/gen/https/jsr.io/cf0e6de6d6b02318bf9ee1b292abc26f5646b5de42190b80c825effe19007796.js29
-rw-r--r--vendor/gen/https/jsr.io/d06808fe6097adace2ddf2186702ab3d63d1bd46e4f59748e6bfe886c3871fd5.js36
-rw-r--r--vendor/gen/https/jsr.io/d16c9512c025de36eaf781853df942212b9dba9e62b4e0b8f622367783646eeb.js116
-rw-r--r--vendor/gen/https/jsr.io/d1a28cffd932ac7e2195b10c3497bf832935d5d3a7dde0770ae98a9728fada08.js63
-rw-r--r--vendor/gen/https/jsr.io/d20b5f91a0f87c99ad77b39a05130c575462a7d0c85cdc29f3994df327f1f683.js22
-rw-r--r--vendor/gen/https/jsr.io/d284c0b38d5698704caef2b0deb1a25ef5082748b28a14bd398e4b12ff038284.js214
-rw-r--r--vendor/gen/https/jsr.io/d31abe7d26b93fcfed50f679445732e9683ba27d600a0859738e51a99175ed8f.js20
-rw-r--r--vendor/gen/https/jsr.io/d3219b96fafc0b02f7f7775c919795c35e5f6e9119b484954ac57e3df1248f59.js40
-rw-r--r--vendor/gen/https/jsr.io/d3745929d47019970406c35c201d22c399e2f5293d7a7cb59b8813dfda1bb82d.js311
-rw-r--r--vendor/gen/https/jsr.io/d4462d78a8e03200bae927934258fa95e966d8c682c893e2c630ffb61628ccfe.js104
-rw-r--r--vendor/gen/https/jsr.io/d4b76e8922cdf2472e27b2787ab6d9f85911f093958dfe3bc27dde1bac6168ad.js51
-rw-r--r--vendor/gen/https/jsr.io/d66d545141b19d2745c8934c4ea43789bcc5d2db57aeaf5b133ce50847a520ad.js31
-rw-r--r--vendor/gen/https/jsr.io/d7701d0e3d46aa0a2f44434d9ecb33d4a0624b75f54da0d6ea5daa2454cab1d2.js19
-rw-r--r--vendor/gen/https/jsr.io/d77d190843438d9f873bc4d830989e945a260d8789624ebbc6bfc13df1be4367.js29
-rw-r--r--vendor/gen/https/jsr.io/d789b6dce9dc3e5e94bd66aaf8fe68410725f1da2d406a26067ad8603e73ab08.js44
-rw-r--r--vendor/gen/https/jsr.io/d79a58233f7495a8b07c0419ec5e64b6353ca3979abed89b309abc2f76e4e2fc.js96
-rw-r--r--vendor/gen/https/jsr.io/d826eac8b20d62e1cc01c34af2b1fb798b488876ac93e0c0f1abeb74c01ccbaf.js17
-rw-r--r--vendor/gen/https/jsr.io/d915d765b92a466f7464571e00e4eae01a1b8626275715170befd60e8667063f.js55
-rw-r--r--vendor/gen/https/jsr.io/d95b6b47a3752a1955eee0ea328ed5d221fac6faf441d37c634703d8ce779998.js30
-rw-r--r--vendor/gen/https/jsr.io/d9a020f9d7834a4e0ea6eda653acc8ffa08e7fe1c83d3c24e266c5ad5207a15e.js86
-rw-r--r--vendor/gen/https/jsr.io/dc8d9f13513537a6923ece69c506c812192aefcddbda4947eaf1754852b8666e.js34
-rw-r--r--vendor/gen/https/jsr.io/ddc13a2e19371c728b8ce06c328e06608ae89b4d59bdc83bcc7fb83795b6a7b3.js29
-rw-r--r--vendor/gen/https/jsr.io/dece048b74f5163eff86ab8d1a24466930b258604919dd7c5df7375baa85f2a1.js105
-rw-r--r--vendor/gen/https/jsr.io/df1dc1df6123e8cb6e627eb6154bf1b50a90c94393ac6f4e9294177c4e289922.js44
-rw-r--r--vendor/gen/https/jsr.io/e0252c2df52f0833903b247c8ad2fce6c8994514d1bebdd7030dd15b4cb1287c.js62
-rw-r--r--vendor/gen/https/jsr.io/e19b3fafe881837081484810056013761fba67a9a3332254076e53ca3661e2ea.js34
-rw-r--r--vendor/gen/https/jsr.io/e2d8f9557914ded459628fbb10e89444786db537d31ed2835aabde59c3672c00.js28
-rw-r--r--vendor/gen/https/jsr.io/e37ee0ef03712b5cd7f4b603b710e772efe0a22f0531ae7488706cfa7f41a468.js79
-rw-r--r--vendor/gen/https/jsr.io/e4e8a54551c5cfbad39fd5119b233c7dfc947e3c95708bfc07a73213a2030dea.js277
-rw-r--r--vendor/gen/https/jsr.io/e537a12b3fbee13ae9d4799f09e089d20f4b0ee3af305cf01e3e1aeea7b33378.js121
-rw-r--r--vendor/gen/https/jsr.io/e53dcec6288a00c9653737a60aaf3127c5a407027d8b83ee6962d04167d48039.js116
-rw-r--r--vendor/gen/https/jsr.io/e5530d8e1389ecf7e18adedbc01bac3786c80c74741482719df51a7596f705a1.js165
-rw-r--r--vendor/gen/https/jsr.io/e5d326d0e3fc3aabea837af914bc13c1d6ee269e558a56cdb45afb52ab3e139a.js35
-rw-r--r--vendor/gen/https/jsr.io/e5d3d4e4308057b025750f79dd17e2d4a272067a0d1086a81f574fbbb347a835.js58
-rw-r--r--vendor/gen/https/jsr.io/e653f5d5a31bad09961e65fa9dea0ac82103c43f2ecf35967dcc67a4c354491d.js12
-rw-r--r--vendor/gen/https/jsr.io/e78d1e56f9ecfb52c371cb5d4386f81f01665c44834480369825f802c56e9ee1.js53
-rw-r--r--vendor/gen/https/jsr.io/eacfc9300d4ef48ffa8b03a1a3ed74761dbb5a1f726c2ed6384306dced42cf3b.js11356
-rw-r--r--vendor/gen/https/jsr.io/ed23d1e1eba157f2190d0d22d30ee2e89c4ea2a35d78e2587f1e763f894285a7.js16
-rw-r--r--vendor/gen/https/jsr.io/ed6cbf64a1608cf2107868a43906eb1a831cded43d18a797400a571a05c0f531.js86
-rw-r--r--vendor/gen/https/jsr.io/ee949e354ee9f474ec486fc007d8be5fa472e19e53ac9adbb6b914de5d609260.js22
-rw-r--r--vendor/gen/https/jsr.io/eede9b66af1c66357dabce516fa2c2884c263f459544ed190e0330d74d005242.js68
-rw-r--r--vendor/gen/https/jsr.io/ef0f76b7de957a45053ec55e476a11efce100bda99c5f6bd71d17dee17b5976c.js13
-rw-r--r--vendor/gen/https/jsr.io/f1347d8476f3b29ba5b1ce20ac64aa1f87536b0511c7a42c5f5b9357be6339df.js44
-rw-r--r--vendor/gen/https/jsr.io/f13e348e07ffac5aa796aa5d228d6f1cdf2ad20e69e426f824905dc5f2d8fea8.js34
-rw-r--r--vendor/gen/https/jsr.io/f1a1af589e1c10c5e82a69a78b93a401e01c212c339e5f4c0118088a2270220a.js18
-rw-r--r--vendor/gen/https/jsr.io/f1be9026d372f22a068353b1f58861b2ae95c2d993dc6aca507b98cc0ba957dc.js82
-rw-r--r--vendor/gen/https/jsr.io/f37370f7dbc9eb7bb9416d7100e6704fff77a5123c5505b6925c1b6eb688031a.js427
-rw-r--r--vendor/gen/https/jsr.io/f4b08ff3716c647cd205aece3dc8dce6c78616d2042cf985b649b82f03f0a51f.js21
-rw-r--r--vendor/gen/https/jsr.io/f5f384eec98ab72dd1842d44353096dcf386e40ee22a4347f24ab5cf92457ce4.js16
-rw-r--r--vendor/gen/https/jsr.io/f67d23f6d79954611711428bb8e43b3250f26d23984bf226e4a11fcfe4de3746.js30
-rw-r--r--vendor/gen/https/jsr.io/f719b3188b4c1efb386b3b2c3cbb1c730439b55ba26bd582ba3a33f7c4306ffc.js30
-rw-r--r--vendor/gen/https/jsr.io/f7d33f42ecc346a9fedce195a6dab77c20d73c0564bf1301e9a9d42b1ba08886.js46
-rw-r--r--vendor/gen/https/jsr.io/f83f6f8c3f16e0135da6fe3e3305af6c26c79dd0bca7a6cc79948dbe2763aea0.js20
-rw-r--r--vendor/gen/https/jsr.io/fa4892503785bbda11cc1755619e0e2e9ea16cf5760fc303748ae0e5a902d54c.js5
-rw-r--r--vendor/gen/https/jsr.io/fa9593097cdd3e75d061bd2ebf9cab31f1dfad09188062a8db1e1f8413a415c4.js30
476 files changed, 52614 insertions, 0 deletions
diff --git a/vendor/gen/https/deno.land/03169f9846c51b5b3d43a8ebf91c47c38526c0e378672be639bb0f701097f433.js b/vendor/gen/https/deno.land/03169f9846c51b5b3d43a8ebf91c47c38526c0e378672be639bb0f701097f433.js
new file mode 100644
index 0000000..c4debba
--- /dev/null
+++ b/vendor/gen/https/deno.land/03169f9846c51b5b3d43a8ebf91c47c38526c0e378672be639bb0f701097f433.js
@@ -0,0 +1,8 @@
+import { StringType } from "./string.ts";
+/** String type with auto completion of sibling command names. */ export class CommandType extends StringType {
+ /** Complete sub-command names of global parent command. */ complete(_cmd, parent) {
+ return parent?.getCommands(false).map((cmd)=>cmd.getName()) || [];
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBTdHJpbmdUeXBlIH0gZnJvbSBcIi4vc3RyaW5nLnRzXCI7XG5cbi8qKiBTdHJpbmcgdHlwZSB3aXRoIGF1dG8gY29tcGxldGlvbiBvZiBzaWJsaW5nIGNvbW1hbmQgbmFtZXMuICovXG5leHBvcnQgY2xhc3MgQ29tbWFuZFR5cGUgZXh0ZW5kcyBTdHJpbmdUeXBlIHtcbiAgLyoqIENvbXBsZXRlIHN1Yi1jb21tYW5kIG5hbWVzIG9mIGdsb2JhbCBwYXJlbnQgY29tbWFuZC4gKi9cbiAgcHVibGljIGNvbXBsZXRlKF9jbWQ6IENvbW1hbmQsIHBhcmVudD86IENvbW1hbmQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHBhcmVudD8uZ2V0Q29tbWFuZHMoZmFsc2UpXG4gICAgICAubWFwKChjbWQ6IENvbW1hbmQpID0+IGNtZC5nZXROYW1lKCkpIHx8IFtdO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxVQUFVLFFBQVEsY0FBYztBQUV6QywrREFBK0QsR0FDL0QsT0FBTyxNQUFNLG9CQUFvQjtFQUMvQix5REFBeUQsR0FDekQsQUFBTyxTQUFTLElBQWEsRUFBRSxNQUFnQixFQUFZO0lBQ3pELE9BQU8sUUFBUSxZQUFZLE9BQ3hCLElBQUksQ0FBQyxNQUFpQixJQUFJLE9BQU8sT0FBTyxFQUFFO0VBQy9DO0FBQ0YifQ==
+// denoCacheMetadata=4688067432176511820,9811945471896507560 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/038fa7d3b945e542996e23f44b29047c0e19756bb2246623a6af949769ba1fbe.js b/vendor/gen/https/deno.land/038fa7d3b945e542996e23f44b29047c0e19756bb2246623a6af949769ba1fbe.js
new file mode 100644
index 0000000..334076c
--- /dev/null
+++ b/vendor/gen/https/deno.land/038fa7d3b945e542996e23f44b29047c0e19756bb2246623a6af949769ba1fbe.js
@@ -0,0 +1,140 @@
+export default function analyze(source, visitor) {
+ const length = source.length;
+ const statuses = [];
+ let index = 0;
+ while(index < length){
+ const char = source.charAt(index++);
+ switch(char){
+ // Detect start brackets
+ case "{":
+ {
+ const status = statuses[0];
+ if (status === "literal" && source.charAt(index - 2) === "$") {
+ statuses.unshift("bracket");
+ } else if (status !== "comment" && status !== "single-quote" && status !== "double-quote" && status !== "literal" && status !== "regex" && status !== "line-comment") {
+ if (statuses.length === 0 && visitor("open-bracket", index) === false) {
+ return;
+ }
+ statuses.unshift("bracket");
+ }
+ break;
+ }
+ // Detect end brackets
+ case "}":
+ {
+ const status = statuses[0];
+ if (status === "bracket") {
+ statuses.shift();
+ if (statuses.length === 0 && visitor("close", index) === false) {
+ return;
+ }
+ }
+ break;
+ }
+ // Detect double quotes
+ case '"':
+ {
+ const status = statuses[0];
+ if (status === "double-quote") {
+ statuses.shift();
+ } else if (status !== "comment" && status !== "single-quote" && status !== "literal" && status !== "regex" && status !== "line-comment") {
+ statuses.unshift("double-quote");
+ }
+ break;
+ }
+ // Detect single quotes
+ case "'":
+ {
+ const status = statuses[0];
+ if (status === "single-quote") {
+ statuses.shift();
+ } else if (status !== "comment" && status !== "double-quote" && status !== "literal" && status !== "regex" && status !== "line-comment") {
+ statuses.unshift("single-quote");
+ }
+ break;
+ }
+ // Detect literals
+ case "`":
+ {
+ const status = statuses[0];
+ if (status === "literal") {
+ statuses.shift();
+ } else if (status !== "comment" && status !== "double-quote" && status !== "single-quote" && status !== "regex" && status !== "line-comment") {
+ statuses.unshift("literal");
+ }
+ break;
+ }
+ // Detect comments and regex
+ case "/":
+ {
+ const status = statuses[0];
+ if (status === "single-quote" || status === "double-quote" || status === "literal" || status === "line-comment") {
+ break;
+ }
+ // We are in a comment: close or ignore
+ if (status === "comment") {
+ if (source.charAt(index - 2) === "*") {
+ statuses.shift();
+ }
+ break;
+ }
+ // We are in a regex: close or ignore
+ if (status === "regex") {
+ if (source.charAt(index - 2) !== "\\") {
+ statuses.shift();
+ }
+ break;
+ }
+ // Start a new comment
+ if (source.charAt(index) === "*") {
+ statuses.unshift("comment");
+ break;
+ }
+ // Start a new line comment
+ if (source.charAt(index - 2) === "/") {
+ statuses.unshift("line-comment");
+ break;
+ }
+ // Start a new regex
+ const prev = prevChar(source, index - 1);
+ if (prev === "(" || prev === "=" || prev === ":" || prev === ",") {
+ statuses.unshift("regex");
+ }
+ break;
+ }
+ // Detect end of line comments
+ case "\n":
+ {
+ const status = statuses[0];
+ if (status === "line-comment") {
+ statuses.shift();
+ }
+ break;
+ }
+ // Detect filters
+ case "|":
+ {
+ const status = statuses[0];
+ if (status === "bracket" && source.charAt(index) === ">" && visitor("new-filter", index + 1) === false) {
+ return;
+ }
+ break;
+ }
+ }
+ }
+ if (statuses.length > 0) {
+ visitor("unclosed", index);
+ }
+}
+// Get the previous character in a string ignoring spaces, line breaks and tabs
+function prevChar(source, index) {
+ while(index > 0){
+ const char = source.charAt(--index);
+ if (char !== " " && char !== "\n" && char !== "\r" && char !== "\t") {
+ return char;
+ }
+ }
+ return "";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9zcmMvanMudHMiXSwic291cmNlc0NvbnRlbnQiOlsidHlwZSBicmVha3BvaW50cyA9XG4gIHwgXCJuZXctZmlsdGVyXCJcbiAgfCBcIm9wZW4tYnJhY2tldFwiXG4gIHwgXCJjbG9zZVwiXG4gIHwgXCJ1bmNsb3NlZFwiO1xuXG50eXBlIHN0YXR1cyA9XG4gIHwgXCJzaW5nbGUtcXVvdGVcIlxuICB8IFwiZG91YmxlLXF1b3RlXCJcbiAgfCBcInJlZ2V4XCJcbiAgfCBcImxpdGVyYWxcIlxuICB8IFwiYnJhY2tldFwiXG4gIHwgXCJjb21tZW50XCJcbiAgfCBcImxpbmUtY29tbWVudFwiO1xuXG50eXBlIFZpc2l0b3IgPSAodHlwZTogYnJlYWtwb2ludHMsIGluZGV4OiBudW1iZXIpID0+IGZhbHNlIHwgdm9pZDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5hbHl6ZShzb3VyY2U6IHN0cmluZywgdmlzaXRvcjogVmlzaXRvcikge1xuICBjb25zdCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICBjb25zdCBzdGF0dXNlczogc3RhdHVzW10gPSBbXTtcbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyID0gc291cmNlLmNoYXJBdChpbmRleCsrKTtcblxuICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgLy8gRGV0ZWN0IHN0YXJ0IGJyYWNrZXRzXG4gICAgICBjYXNlIFwie1wiOiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0YXR1c2VzWzBdO1xuXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwibGl0ZXJhbFwiICYmIHNvdXJjZS5jaGFyQXQoaW5kZXggLSAyKSA9PT0gXCIkXCIpIHtcbiAgICAgICAgICBzdGF0dXNlcy51bnNoaWZ0KFwiYnJhY2tldFwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBzdGF0dXMgIT09IFwiY29tbWVudFwiICYmIHN0YXR1cyAhPT0gXCJzaW5nbGUtcXVvdGVcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJkb3VibGUtcXVvdGVcIiAmJiBzdGF0dXMgIT09IFwibGl0ZXJhbFwiICYmXG4gICAgICAgICAgc3RhdHVzICE9PSBcInJlZ2V4XCIgJiYgc3RhdHVzICE9PSBcImxpbmUtY29tbWVudFwiXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXR1c2VzLmxlbmd0aCA9PT0gMCAmJiB2aXNpdG9yKFwib3Blbi1icmFja2V0XCIsIGluZGV4KSA9PT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdHVzZXMudW5zaGlmdChcImJyYWNrZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVjdCBlbmQgYnJhY2tldHNcbiAgICAgIGNhc2UgXCJ9XCI6IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RhdHVzZXNbMF07XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJicmFja2V0XCIpIHtcbiAgICAgICAgICBzdGF0dXNlcy5zaGlmdCgpO1xuXG4gICAgICAgICAgaWYgKHN0YXR1c2VzLmxlbmd0aCA9PT0gMCAmJiB2aXNpdG9yKFwiY2xvc2VcIiwgaW5kZXgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZWN0IGRvdWJsZSBxdW90ZXNcbiAgICAgIGNhc2UgJ1wiJzoge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBzdGF0dXNlc1swXTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJkb3VibGUtcXVvdGVcIikge1xuICAgICAgICAgIHN0YXR1c2VzLnNoaWZ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgc3RhdHVzICE9PSBcImNvbW1lbnRcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJzaW5nbGUtcXVvdGVcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJsaXRlcmFsXCIgJiZcbiAgICAgICAgICBzdGF0dXMgIT09IFwicmVnZXhcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJsaW5lLWNvbW1lbnRcIlxuICAgICAgICApIHtcbiAgICAgICAgICBzdGF0dXNlcy51bnNoaWZ0KFwiZG91YmxlLXF1b3RlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlY3Qgc2luZ2xlIHF1b3Rlc1xuICAgICAgY2FzZSBcIidcIjoge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBzdGF0dXNlc1swXTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzaW5nbGUtcXVvdGVcIikge1xuICAgICAgICAgIHN0YXR1c2VzLnNoaWZ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgc3RhdHVzICE9PSBcImNvbW1lbnRcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJkb3VibGUtcXVvdGVcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJsaXRlcmFsXCIgJiZcbiAgICAgICAgICBzdGF0dXMgIT09IFwicmVnZXhcIiAmJlxuICAgICAgICAgIHN0YXR1cyAhPT0gXCJsaW5lLWNvbW1lbnRcIlxuICAgICAgICApIHtcbiAgICAgICAgICBzdGF0dXNlcy51bnNoaWZ0KFwic2luZ2xlLXF1b3RlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlY3QgbGl0ZXJhbHNcbiAgICAgIGNhc2UgXCJgXCI6IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RhdHVzZXNbMF07XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgICAgc3RhdHVzZXMuc2hpZnQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBzdGF0dXMgIT09IFwiY29tbWVudFwiICYmXG4gICAgICAgICAgc3RhdHVzICE9PSBcImRvdWJsZS1xdW90ZVwiICYmXG4gICAgICAgICAgc3RhdHVzICE9PSBcInNpbmdsZS1xdW90ZVwiICYmXG4gICAgICAgICAgc3RhdHVzICE9PSBcInJlZ2V4XCIgJiZcbiAgICAgICAgICBzdGF0dXMgIT09IFwibGluZS1jb21tZW50XCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhdHVzZXMudW5zaGlmdChcImxpdGVyYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVjdCBjb21tZW50cyBhbmQgcmVnZXhcbiAgICAgIGNhc2UgXCIvXCI6IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RhdHVzZXNbMF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0dXMgPT09IFwic2luZ2xlLXF1b3RlXCIgfHwgc3RhdHVzID09PSBcImRvdWJsZS1xdW90ZVwiIHx8XG4gICAgICAgICAgc3RhdHVzID09PSBcImxpdGVyYWxcIiB8fCBzdGF0dXMgPT09IFwibGluZS1jb21tZW50XCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBhcmUgaW4gYSBjb21tZW50OiBjbG9zZSBvciBpZ25vcmVcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmNoYXJBdChpbmRleCAtIDIpID09PSBcIipcIikge1xuICAgICAgICAgICAgc3RhdHVzZXMuc2hpZnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBhcmUgaW4gYSByZWdleDogY2xvc2Ugb3IgaWdub3JlXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwicmVnZXhcIikge1xuICAgICAgICAgIGlmIChzb3VyY2UuY2hhckF0KGluZGV4IC0gMikgIT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBzdGF0dXNlcy5zaGlmdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IGEgbmV3IGNvbW1lbnRcbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQXQoaW5kZXgpID09PSBcIipcIikge1xuICAgICAgICAgIHN0YXR1c2VzLnVuc2hpZnQoXCJjb21tZW50XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgYSBuZXcgbGluZSBjb21tZW50XG4gICAgICAgIGlmIChzb3VyY2UuY2hhckF0KGluZGV4IC0gMikgPT09IFwiL1wiKSB7XG4gICAgICAgICAgc3RhdHVzZXMudW5zaGlmdChcImxpbmUtY29tbWVudFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IGEgbmV3IHJlZ2V4XG4gICAgICAgIGNvbnN0IHByZXYgPSBwcmV2Q2hhcihzb3VyY2UsIGluZGV4IC0gMSk7XG4gICAgICAgIGlmIChwcmV2ID09PSBcIihcIiB8fCBwcmV2ID09PSBcIj1cIiB8fCBwcmV2ID09PSBcIjpcIiB8fCBwcmV2ID09PSBcIixcIikge1xuICAgICAgICAgIHN0YXR1c2VzLnVuc2hpZnQoXCJyZWdleFwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZWN0IGVuZCBvZiBsaW5lIGNvbW1lbnRzXG4gICAgICBjYXNlIFwiXFxuXCI6IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RhdHVzZXNbMF07XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwibGluZS1jb21tZW50XCIpIHtcbiAgICAgICAgICBzdGF0dXNlcy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlY3QgZmlsdGVyc1xuICAgICAgY2FzZSBcInxcIjoge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBzdGF0dXNlc1swXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXR1cyA9PT0gXCJicmFja2V0XCIgJiYgc291cmNlLmNoYXJBdChpbmRleCkgPT09IFwiPlwiICYmXG4gICAgICAgICAgdmlzaXRvcihcIm5ldy1maWx0ZXJcIiwgaW5kZXggKyAxKSA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0dXNlcy5sZW5ndGggPiAwKSB7XG4gICAgdmlzaXRvcihcInVuY2xvc2VkXCIsIGluZGV4KTtcbiAgfVxufVxuXG4vLyBHZXQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpbiBhIHN0cmluZyBpZ25vcmluZyBzcGFjZXMsIGxpbmUgYnJlYWtzIGFuZCB0YWJzXG5mdW5jdGlvbiBwcmV2Q2hhcihzb3VyY2U6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgY29uc3QgY2hhciA9IHNvdXJjZS5jaGFyQXQoLS1pbmRleCk7XG4gICAgaWYgKGNoYXIgIT09IFwiIFwiICYmIGNoYXIgIT09IFwiXFxuXCIgJiYgY2hhciAhPT0gXCJcXHJcIiAmJiBjaGFyICE9PSBcIlxcdFwiKSB7XG4gICAgICByZXR1cm4gY2hhcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLGVBQWUsU0FBUyxRQUFRLE1BQWMsRUFBRSxPQUFnQjtFQUM5RCxNQUFNLFNBQVMsT0FBTyxNQUFNO0VBQzVCLE1BQU0sV0FBcUIsRUFBRTtFQUM3QixJQUFJLFFBQVE7RUFFWixNQUFPLFFBQVEsT0FBUTtJQUNy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
+// denoCacheMetadata=13743754940318670184,14976623851099149579 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/0e9edfbf05b0c1ceedbe773bc87b513107294e0810cfaedc7d0236e924d599a2.js b/vendor/gen/https/deno.land/0e9edfbf05b0c1ceedbe773bc87b513107294e0810cfaedc7d0236e924d599a2.js
new file mode 100644
index 0000000..dcb0841
--- /dev/null
+++ b/vendor/gen/https/deno.land/0e9edfbf05b0c1ceedbe773bc87b513107294e0810cfaedc7d0236e924d599a2.js
@@ -0,0 +1,12 @@
+/**
+ * A plugin to add a search helper to the data
+ * Installed by default
+ * @see https://lume.land/plugins/search/
+ */ export function search() {
+ return (site)=>{
+ site.data("search", site.search);
+ };
+}
+export default search;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy9zZWFyY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgU2l0ZSBmcm9tIFwiLi4vY29yZS9zaXRlLnRzXCI7XG5pbXBvcnQgdHlwZSBTZWFyY2hlciBmcm9tIFwiLi4vY29yZS9zZWFyY2hlci50c1wiO1xuXG4vKipcbiAqIEEgcGx1Z2luIHRvIGFkZCBhIHNlYXJjaCBoZWxwZXIgdG8gdGhlIGRhdGFcbiAqIEluc3RhbGxlZCBieSBkZWZhdWx0XG4gKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvc2VhcmNoL1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoKCkge1xuICByZXR1cm4gKHNpdGU6IFNpdGUpID0+IHtcbiAgICBzaXRlLmRhdGEoXCJzZWFyY2hcIiwgc2l0ZS5zZWFyY2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZWFyY2g7XG5cbi8qKiBFeHRlbmRzIERhdGEgaW50ZXJmYWNlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBMdW1lIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc2VhcmNoZXIgaGVscGVyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvc2VhcmNoL1xuICAgICAgICovXG4gICAgICBzZWFyY2g6IFNlYXJjaGVyO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVM7RUFDZCxPQUFPLENBQUM7SUFDTixLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTTtFQUNqQztBQUNGO0FBRUEsZUFBZSxPQUFPIn0=
+// denoCacheMetadata=16801648713670826467,2576736340305366551 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/0eff7d41d121028e0827789106fecfd7747a49a75f592c9f3763f85e2b0c07e9.js b/vendor/gen/https/deno.land/0eff7d41d121028e0827789106fecfd7747a49a75f592c9f3763f85e2b0c07e9.js
new file mode 100644
index 0000000..5048ae3
--- /dev/null
+++ b/vendor/gen/https/deno.land/0eff7d41d121028e0827789106fecfd7747a49a75f592c9f3763f85e2b0c07e9.js
@@ -0,0 +1,5 @@
+export * from "./cell.ts";
+export * from "./row.ts";
+export * from "./table.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NlbGwudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jvdy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFibGUudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVk7QUFDMUIsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsYUFBYSJ9
+// denoCacheMetadata=10722799848786018650,17577046021429910119 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/0ff350ac6da1547191afc3438561d2b27a4614f7eeb0be9bd37aa60034cf66b4.js b/vendor/gen/https/deno.land/0ff350ac6da1547191afc3438561d2b27a4614f7eeb0be9bd37aa60034cf66b4.js
new file mode 100644
index 0000000..55a4619
--- /dev/null
+++ b/vendor/gen/https/deno.land/0ff350ac6da1547191afc3438561d2b27a4614f7eeb0be9bd37aa60034cf66b4.js
@@ -0,0 +1,20 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * All internal non-test code, that is files that do not have `test` or `bench` in the name, must use the assertion functions within `_utils/asserts.ts` and not `testing/asserts.ts`. This is to create a separation of concerns between internal and testing assertions.
+ */ export class DenoStdInternalError extends Error {
+ constructor(message){
+ super(message);
+ this.name = "DenoStdInternalError";
+ }
+}
+/** Make an assertion, if not `true`, then throw. */ export function assert(expr, msg = "") {
+ if (!expr) {
+ throw new DenoStdInternalError(msg);
+ }
+}
+/** Use this to assert unreachable code. */ export function unreachable() {
+ throw new DenoStdInternalError("unreachable");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL191dGlsL2Fzc2VydHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBBbGwgaW50ZXJuYWwgbm9uLXRlc3QgY29kZSwgdGhhdCBpcyBmaWxlcyB0aGF0IGRvIG5vdCBoYXZlIGB0ZXN0YCBvciBgYmVuY2hgIGluIHRoZSBuYW1lLCBtdXN0IHVzZSB0aGUgYXNzZXJ0aW9uIGZ1bmN0aW9ucyB3aXRoaW4gYF91dGlscy9hc3NlcnRzLnRzYCBhbmQgbm90IGB0ZXN0aW5nL2Fzc2VydHMudHNgLiBUaGlzIGlzIHRvIGNyZWF0ZSBhIHNlcGFyYXRpb24gb2YgY29uY2VybnMgYmV0d2VlbiBpbnRlcm5hbCBhbmQgdGVzdGluZyBhc3NlcnRpb25zLlxuICovXG5cbmV4cG9ydCBjbGFzcyBEZW5vU3RkSW50ZXJuYWxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJEZW5vU3RkSW50ZXJuYWxFcnJvclwiO1xuICB9XG59XG5cbi8qKiBNYWtlIGFuIGFzc2VydGlvbiwgaWYgbm90IGB0cnVlYCwgdGhlbiB0aHJvdy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoZXhwcjogdW5rbm93biwgbXNnID0gXCJcIik6IGFzc2VydHMgZXhwciB7XG4gIGlmICghZXhwcikge1xuICAgIHRocm93IG5ldyBEZW5vU3RkSW50ZXJuYWxFcnJvcihtc2cpO1xuICB9XG59XG5cbi8qKiBVc2UgdGhpcyB0byBhc3NlcnQgdW5yZWFjaGFibGUgY29kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlYWNoYWJsZSgpOiBuZXZlciB7XG4gIHRocm93IG5ldyBEZW5vU3RkSW50ZXJuYWxFcnJvcihcInVucmVhY2hhYmxlXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckM7O0NBRUMsR0FFRCxPQUFPLE1BQU0sNkJBQTZCO0VBQ3hDLFlBQVksT0FBZSxDQUFFO0lBQzNCLEtBQUssQ0FBQztJQUNOLElBQUksQ0FBQyxJQUFJLEdBQUc7RUFDZDtBQUNGO0FBRUEsa0RBQWtELEdBQ2xELE9BQU8sU0FBUyxPQUFPLElBQWEsRUFBRSxNQUFNLEVBQUU7RUFDNUMsSUFBSSxDQUFDLE1BQU07SUFDVCxNQUFNLElBQUkscUJBQXFCO0VBQ2pDO0FBQ0Y7QUFFQSx5Q0FBeUMsR0FDekMsT0FBTyxTQUFTO0VBQ2QsTUFBTSxJQUFJLHFCQUFxQjtBQUNqQyJ9
+// denoCacheMetadata=861895762102166337,10984339633016137749 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/10f0c558d34276481bd8b14a6f4fdcaffa6d3b008c9876752f47796195886710.js b/vendor/gen/https/deno.land/10f0c558d34276481bd8b14a6f4fdcaffa6d3b008c9876752f47796195886710.js
new file mode 100644
index 0000000..0a9349e
--- /dev/null
+++ b/vendor/gen/https/deno.land/10f0c558d34276481bd8b14a6f4fdcaffa6d3b008c9876752f47796195886710.js
@@ -0,0 +1,34 @@
+const ssxElement = Symbol.for("ssx.element");
+const objectConstructor = {}.constructor;
+/** Check if the argument passed is a plain object */ export function isPlainObject(obj) {
+ return typeof obj === "object" && obj !== null && obj.constructor === objectConstructor && // @ts-ignore: Check if the argument passed is a SSX element
+ obj[ssxElement] !== true && // @ts-ignore: Check if the argument passed is a Page.data object
+ obj !== obj.page?.data;
+}
+/**
+ * Merge two objects recursively.
+ * It's used to merge user options with default options.
+ */ export function merge(defaults, user) {
+ const merged = {
+ ...defaults
+ };
+ if (!user) {
+ return merged;
+ }
+ for (const [key, value] of Object.entries(user)){
+ if (value === undefined) {
+ continue;
+ }
+ // @ts-ignore: No index signature with a parameter of type 'string' was found on type 'unknown'
+ if (isPlainObject(merged[key]) && isPlainObject(value)) {
+ // @ts-ignore: Type 'string' cannot be used to index type 'Type'
+ merged[key] = merge(merged[key], value);
+ continue;
+ }
+ // @ts-ignore: Type 'string' cannot be used to index type 'Type'
+ merged[key] = value;
+ }
+ return merged;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9vYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3N4RWxlbWVudCA9IFN5bWJvbC5mb3IoXCJzc3guZWxlbWVudFwiKTtcbmNvbnN0IG9iamVjdENvbnN0cnVjdG9yID0ge30uY29uc3RydWN0b3I7XG5cbi8qKiBUeXBlU2NyaXB0IGhlbHBlciB0byBjcmVhdGUgb3B0aW9uYWwgcHJvcGVydGllcyByZWN1cnNpdmVseSAqL1xuZXhwb3J0IHR5cGUgRGVlcFBhcnRpYWw8VD4gPSBUIGV4dGVuZHMgb2JqZWN0ID8ge1xuICAgIFtQIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtQXT47XG4gIH1cbiAgOiBUO1xuXG4vKiogQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IHBhc3NlZCBpcyBhIHBsYWluIG9iamVjdCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqOiB1bmtub3duKTogb2JqIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgb2JqICE9PSBudWxsICYmXG4gICAgb2JqLmNvbnN0cnVjdG9yID09PSBvYmplY3RDb25zdHJ1Y3RvciAmJlxuICAgIC8vIEB0cy1pZ25vcmU6IENoZWNrIGlmIHRoZSBhcmd1bWVudCBwYXNzZWQgaXMgYSBTU1ggZWxlbWVudFxuICAgIG9ialtzc3hFbGVtZW50XSAhPT0gdHJ1ZSAmJlxuICAgIC8vIEB0cy1pZ25vcmU6IENoZWNrIGlmIHRoZSBhcmd1bWVudCBwYXNzZWQgaXMgYSBQYWdlLmRhdGEgb2JqZWN0XG4gICAgb2JqICE9PSBvYmoucGFnZT8uZGF0YTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb2JqZWN0cyByZWN1cnNpdmVseS5cbiAqIEl0J3MgdXNlZCB0byBtZXJnZSB1c2VyIG9wdGlvbnMgd2l0aCBkZWZhdWx0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUeXBlPihcbiAgZGVmYXVsdHM6IFR5cGUsXG4gIHVzZXI/OiBUeXBlLFxuKTogUmVxdWlyZWQ8VHlwZT4ge1xuICBjb25zdCBtZXJnZWQgPSB7IC4uLmRlZmF1bHRzIH07XG5cbiAgaWYgKCF1c2VyKSB7XG4gICAgcmV0dXJuIG1lcmdlZCBhcyB1bmtub3duIGFzIFJlcXVpcmVkPFR5cGU+O1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXNlcikpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZTogTm8gaW5kZXggc2lnbmF0dXJlIHdpdGggYSBwYXJhbWV0ZXIgb2YgdHlwZSAnc3RyaW5nJyB3YXMgZm91bmQgb24gdHlwZSAndW5rbm93bidcbiAgICBpZiAoaXNQbGFpbk9iamVjdChtZXJnZWRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmU6IFR5cGUgJ3N0cmluZycgY2Fubm90IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnVHlwZSdcbiAgICAgIG1lcmdlZFtrZXldID0gbWVyZ2UobWVyZ2VkW2tleV0sIHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmU6IFR5cGUgJ3N0cmluZycgY2Fubm90IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnVHlwZSdcbiAgICBtZXJnZWRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZCBhcyB1bmtub3duIGFzIFJlcXVpcmVkPFR5cGU+O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sYUFBYSxPQUFPLEdBQUcsQ0FBQztBQUM5QixNQUFNLG9CQUFvQixDQUFDLEVBQUUsV0FBVztBQVF4QyxtREFBbUQsR0FDbkQsT0FBTyxTQUFTLGNBQWMsR0FBWTtFQUN4QyxPQUFPLE9BQU8sUUFBUSxZQUFZLFFBQVEsUUFDeEMsSUFBSSxXQUFXLEtBQUsscUJBQ3BCLDREQUE0RDtFQUM1RCxHQUFHLENBQUMsV0FBVyxLQUFLLFFBQ3BCLGlFQUFpRTtFQUNqRSxRQUFRLElBQUksSUFBSSxFQUFFO0FBQ3RCO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLE1BQ2QsUUFBYyxFQUNkLElBQVc7RUFFWCxNQUFNLFNBQVM7SUFBRSxHQUFHLFFBQVE7RUFBQztFQUU3QixJQUFJLENBQUMsTUFBTTtJQUNULE9BQU87RUFDVDtFQUVBLEtBQUssTUFBTSxDQUFDLEtBQUssTUFBTSxJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU87SUFDL0MsSUFBSSxVQUFVLFdBQVc7TUFDdkI7SUFDRjtJQUVBLCtGQUErRjtJQUMvRixJQUFJLGNBQWMsTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLFFBQVE7TUFDdEQsZ0VBQWdFO01BQ2hFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFO01BQ2pDO0lBQ0Y7SUFFQSxnRUFBZ0U7SUFDaEUsTUFBTSxDQUFDLElBQUksR0FBRztFQUNoQjtFQUVBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=18063696159046291710,9600638505032324490 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/1178b982861aaff8dbf2f91525b694abb5964d2d3c1c58d8ccdc2611ed3773d0.js b/vendor/gen/https/deno.land/1178b982861aaff8dbf2f91525b694abb5964d2d3c1c58d8ccdc2611ed3773d0.js
new file mode 100644
index 0000000..81635fe
--- /dev/null
+++ b/vendor/gen/https/deno.land/1178b982861aaff8dbf2f91525b694abb5964d2d3c1c58d8ccdc2611ed3773d0.js
@@ -0,0 +1,64 @@
+import * as ansiEscapes from "./ansi_escapes.ts";
+import { getCursorPosition } from "./cursor_position.ts";
+/**
+ * Chainable ansi escape sequences.
+ * If invoked as method, a new Tty instance will be returned.
+ * ```
+ * tty.cursorTo(0, 0).eraseScreen();
+ * ```
+ */ export const tty = factory();
+function factory(options) {
+ let result = "";
+ let stack = [];
+ const stdout = options?.stdout ?? Deno.stdout;
+ const stdin = options?.stdin ?? Deno.stdin;
+ const tty = function(...args) {
+ if (this) {
+ update(args);
+ stdout.writeSync(new TextEncoder().encode(result));
+ return this;
+ }
+ return factory(args[0] ?? options);
+ };
+ tty.text = function(text) {
+ stack.push([
+ text,
+ []
+ ]);
+ update();
+ stdout.writeSync(new TextEncoder().encode(result));
+ return this;
+ };
+ tty.getCursorPosition = ()=>getCursorPosition({
+ stdout,
+ stdin
+ });
+ const methodList = Object.entries(ansiEscapes);
+ for (const [name, method] of methodList){
+ if (name === "cursorPosition") {
+ continue;
+ }
+ Object.defineProperty(tty, name, {
+ get () {
+ stack.push([
+ method,
+ []
+ ]);
+ return this;
+ }
+ });
+ }
+ return tty;
+ function update(args) {
+ if (!stack.length) {
+ return;
+ }
+ if (args) {
+ stack[stack.length - 1][1] = args;
+ }
+ result = stack.reduce((prev, [cur, args])=>prev + (typeof cur === "string" ? cur : cur.call(tty, ...args)), "");
+ stack = [];
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS90dHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYW5zaUVzY2FwZXMgZnJvbSBcIi4vYW5zaV9lc2NhcGVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENoYWluIH0gZnJvbSBcIi4vY2hhaW4udHNcIjtcbmltcG9ydCB7IEN1cnNvciwgZ2V0Q3Vyc29yUG9zaXRpb24gfSBmcm9tIFwiLi9jdXJzb3JfcG9zaXRpb24udHNcIjtcblxuLyoqIENyZWF0ZSBuZXcgYEFuc2lgIGluc3RhbmNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdHlPcHRpb25zIHtcbiAgc3Rkb3V0PzogRGVuby5Xcml0ZXJTeW5jO1xuICBzdGRpbj86IERlbm8uUmVhZGVyU3luYyAmIHsgcmlkOiBudW1iZXIgfTtcbn1cblxudHlwZSBFeGVjdXRvciA9ICh0aGlzOiBUdHlDaGFpbiwgLi4uYXJnczogQXJncykgPT4gc3RyaW5nO1xudHlwZSBBcmdzID0gQXJyYXk8dW5rbm93bj47XG50eXBlIFByb3BlcnR5ID0gc3RyaW5nIHwgRXhlY3V0b3I7XG50eXBlIFByb3BlcnR5TmFtZXMgPSBrZXlvZiBDaGFpbjxUdHlDaGFpbj47XG5cbi8qKiBBbnNpIGluc3RhbmNlIHJldHVybmVkIGJ5IGFsbCBhbnNpIGVzY2FwZSBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdHlDaGFpbiBleHRlbmRzIEV4Y2x1ZGU8Q2hhaW48VHR5Q2hhaW4+LCBcImN1cnNvclBvc2l0aW9uXCI+IHtcbiAgLyoqIFdyaXRlIGFuc2kgZXNjYXBlIHNlcXVlbmNlLiAqL1xuICAoKTogdm9pZDtcbiAgLyoqIEdldCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gKi9cbiAgZ2V0Q3Vyc29yUG9zaXRpb24oKTogQ3Vyc29yO1xufVxuXG4vKiogQ3JlYXRlIG5ldyBgVHR5YCBpbnN0YW5jZS4gKi9cbmV4cG9ydCB0eXBlIFR0eUZhY3RvcnkgPSAob3B0aW9ucz86IFR0eU9wdGlvbnMpID0+IFR0eTtcblxuLyoqXG4gKiBDaGFpbmFibGUgYW5zaSBlc2NhcGUgc2VxdWVuY2VzLlxuICogSWYgaW52b2tlZCBhcyBtZXRob2QsIGEgbmV3IFR0eSBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgdHlwZSBUdHkgPSBUdHlGYWN0b3J5ICYgVHR5Q2hhaW47XG5cbi8qKlxuICogQ2hhaW5hYmxlIGFuc2kgZXNjYXBlIHNlcXVlbmNlcy5cbiAqIElmIGludm9rZWQgYXMgbWV0aG9kLCBhIG5ldyBUdHkgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZC5cbiAqIGBgYFxuICogdHR5LmN1cnNvclRvKDAsIDApLmVyYXNlU2NyZWVuKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHR0eTogVHR5ID0gZmFjdG9yeSgpO1xuXG5mdW5jdGlvbiBmYWN0b3J5KG9wdGlvbnM/OiBUdHlPcHRpb25zKTogVHR5IHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGxldCBzdGFjazogQXJyYXk8W1Byb3BlcnR5LCBBcmdzXT4gPSBbXTtcbiAgY29uc3Qgc3Rkb3V0OiBEZW5vLldyaXRlclN5bmMgPSBvcHRpb25zPy5zdGRvdXQgPz8gRGVuby5zdGRvdXQ7XG4gIGNvbnN0IHN0ZGluOiBEZW5vLlJlYWRlclN5bmMgJiB7IHJpZDogbnVtYmVyIH0gPSBvcHRpb25zPy5zdGRpbiA/PyBEZW5vLnN0ZGluO1xuXG4gIGNvbnN0IHR0eTogVHR5ID0gZnVuY3Rpb24gKFxuICAgIHRoaXM6IFR0eUNoYWluIHwgdW5kZWZpbmVkLFxuICAgIC4uLmFyZ3M6IEFyZ3MgfCBbVHR5T3B0aW9uc11cbiAgKTogVHR5Q2hhaW4ge1xuICAgIGlmICh0aGlzKSB7XG4gICAgICB1cGRhdGUoYXJncyk7XG4gICAgICBzdGRvdXQud3JpdGVTeW5jKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyZXN1bHQpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeShhcmdzWzBdIGFzIFR0eU9wdGlvbnMgPz8gb3B0aW9ucyk7XG4gIH0gYXMgVHR5O1xuXG4gIHR0eS50ZXh0ID0gZnVuY3Rpb24gKHRleHQ6IHN0cmluZyk6IFR0eUNoYWluIHtcbiAgICBzdGFjay5wdXNoKFt0ZXh0LCBbXV0pO1xuICAgIHVwZGF0ZSgpO1xuICAgIHN0ZG91dC53cml0ZVN5bmMobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHJlc3VsdCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHR0eS5nZXRDdXJzb3JQb3NpdGlvbiA9ICgpOiBDdXJzb3IgPT4gZ2V0Q3Vyc29yUG9zaXRpb24oeyBzdGRvdXQsIHN0ZGluIH0pO1xuXG4gIGNvbnN0IG1ldGhvZExpc3Q6IEFycmF5PFtQcm9wZXJ0eU5hbWVzLCBQcm9wZXJ0eV0+ID0gT2JqZWN0LmVudHJpZXMoXG4gICAgYW5zaUVzY2FwZXMsXG4gICkgYXMgQXJyYXk8W1Byb3BlcnR5TmFtZXMsIFByb3BlcnR5XT47XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgbWV0aG9kXSBvZiBtZXRob2RMaXN0KSB7XG4gICAgaWYgKG5hbWUgPT09IFwiY3Vyc29yUG9zaXRpb25cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0dHksIG5hbWUsIHtcbiAgICAgIGdldCh0aGlzOiBUdHlDaGFpbikge1xuICAgICAgICBzdGFjay5wdXNoKFttZXRob2QsIFtdXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0dHk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlKGFyZ3M/OiBBcmdzKSB7XG4gICAgaWYgKCFzdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdWzFdID0gYXJncztcbiAgICB9XG4gICAgcmVzdWx0ID0gc3RhY2sucmVkdWNlKFxuICAgICAgKHByZXY6IHN0cmluZywgW2N1ciwgYXJnc106IFtQcm9wZXJ0eSwgQXJnc10pID0+XG4gICAgICAgIHByZXYgKyAodHlwZW9mIGN1ciA9PT0gXCJzdHJpbmdcIiA/IGN1ciA6IGN1ci5jYWxsKHR0eSwgLi4uYXJncykpLFxuICAgICAgXCJcIixcbiAgICApO1xuICAgIHN0YWNrID0gW107XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLGlCQUFpQixvQkFBb0I7QUFFakQsU0FBaUIsaUJBQWlCLFFBQVEsdUJBQXVCO0FBOEJqRTs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU0sTUFBVyxVQUFVO0FBRWxDLFNBQVMsUUFBUSxPQUFvQjtFQUNuQyxJQUFJLFNBQVM7RUFDYixJQUFJLFFBQWlDLEVBQUU7RUFDdkMsTUFBTSxTQUEwQixTQUFTLFVBQVUsS0FBSyxNQUFNO0VBQzlELE1BQU0sUUFBMkMsU0FBUyxTQUFTLEtBQUssS0FBSztFQUU3RSxNQUFNLE1BQVcsU0FFZixHQUFHLElBQXlCO0lBRTVCLElBQUksSUFBSSxFQUFFO01BQ1IsT0FBTztNQUNQLE9BQU8sU0FBUyxDQUFDLElBQUksY0FBYyxNQUFNLENBQUM7TUFDMUMsT0FBTyxJQUFJO0lBQ2I7SUFDQSxPQUFPLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBa0I7RUFDMUM7RUFFQSxJQUFJLElBQUksR0FBRyxTQUFVLElBQVk7SUFDL0IsTUFBTSxJQUFJLENBQUM7TUFBQztNQUFNLEVBQUU7S0FBQztJQUNyQjtJQUNBLE9BQU8sU0FBUyxDQUFDLElBQUksY0FBYyxNQUFNLENBQUM7SUFDMUMsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJLGlCQUFpQixHQUFHLElBQWMsa0JBQWtCO01BQUU7TUFBUTtJQUFNO0VBRXhFLE1BQU0sYUFBK0MsT0FBTyxPQUFPLENBQ2pFO0VBR0YsS0FBSyxNQUFNLENBQUMsTUFBTSxPQUFPLElBQUksV0FBWTtJQUN2QyxJQUFJLFNBQVMsa0JBQWtCO01BQzdCO0lBQ0Y7SUFDQSxPQUFPLGNBQWMsQ0FBQyxLQUFLLE1BQU07TUFDL0I7UUFDRSxNQUFNLElBQUksQ0FBQztVQUFDO1VBQVEsRUFBRTtTQUFDO1FBQ3ZCLE9BQU8sSUFBSTtNQUNiO0lBQ0Y7RUFDRjtFQUVBLE9BQU87RUFFUCxTQUFTLE9BQU8sSUFBVztJQUN6QixJQUFJLENBQUMsTUFBTSxNQUFNLEVBQUU7TUFDakI7SUFDRjtJQUNBLElBQUksTUFBTTtNQUNSLEtBQUssQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHO0lBQy9CO0lBQ0EsU0FBUyxNQUFNLE1BQU0sQ0FDbkIsQ0FBQyxNQUFjLENBQUMsS0FBSyxLQUF1QixHQUMxQyxPQUFPLENBQUMsT0FBTyxRQUFRLFdBQVcsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssR0FDaEU7SUFFRixRQUFRLEVBQUU7RUFDWjtBQUNGIn0=
+// denoCacheMetadata=13769434344427767206,6359390300626044585 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/11bd02bbc70e81aa9d1bfd7ef5e029fca6be91c5c0d08cd4600539a45c89dd71.js b/vendor/gen/https/deno.land/11bd02bbc70e81aa9d1bfd7ef5e029fca6be91c5c0d08cd4600539a45c89dd71.js
new file mode 100644
index 0000000..856f18b
--- /dev/null
+++ b/vendor/gen/https/deno.land/11bd02bbc70e81aa9d1bfd7ef5e029fca6be91c5c0d08cd4600539a45c89dd71.js
@@ -0,0 +1,9 @@
+import { string } from "../../flags/types/string.ts";
+import { Type } from "../type.ts";
+/** String type. Allows any value. */ export class StringType extends Type {
+ /** Complete string type. */ parse(type) {
+ return string(type);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9zdHJpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaW5nIH0gZnJvbSBcIi4uLy4uL2ZsYWdzL3R5cGVzL3N0cmluZy50c1wiO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50VmFsdWUgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqIFN0cmluZyB0eXBlLiBBbGxvd3MgYW55IHZhbHVlLiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ1R5cGUgZXh0ZW5kcyBUeXBlPHN0cmluZz4ge1xuICAvKiogQ29tcGxldGUgc3RyaW5nIHR5cGUuICovXG4gIHB1YmxpYyBwYXJzZSh0eXBlOiBBcmd1bWVudFZhbHVlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyaW5nKHR5cGUpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxNQUFNLFFBQVEsOEJBQThCO0FBQ3JELFNBQVMsSUFBSSxRQUFRLGFBQWE7QUFHbEMsbUNBQW1DLEdBQ25DLE9BQU8sTUFBTSxtQkFBbUI7RUFDOUIsMEJBQTBCLEdBQzFCLEFBQU8sTUFBTSxJQUFtQixFQUFVO0lBQ3hDLE9BQU8sT0FBTztFQUNoQjtBQUNGIn0=
+// denoCacheMetadata=2377750236260082203,14401060473031173160 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/11d8d1c1ca991e6fea8175d2a82192fc662842142d60613e729b753652696aea.js b/vendor/gen/https/deno.land/11d8d1c1ca991e6fea8175d2a82192fc662842142d60613e729b753652696aea.js
new file mode 100644
index 0000000..d571f48
--- /dev/null
+++ b/vendor/gen/https/deno.land/11d8d1c1ca991e6fea8175d2a82192fc662842142d60613e729b753652696aea.js
@@ -0,0 +1,72 @@
+import { log } from "./utils/log.ts";
+/**
+ * Script runner to store and run commands or execute functions
+ * It can execute the scripts and functions in parallel or sequentially
+ */ export default class Scripts {
+ /** The current working directory */ cwd;
+ /** All registered scripts and functions */ scripts = new Map();
+ constructor(options = {}){
+ this.cwd = options.cwd || Deno.cwd();
+ }
+ /** Register one or more scripts under a specific name */ set(name, ...scripts) {
+ this.scripts.set(name, scripts);
+ }
+ /** Run one or more commands */ async run(...names) {
+ for (const name of names){
+ const success = await this.#run(name);
+ if (!success) {
+ return false;
+ }
+ }
+ return true;
+ }
+ /** Run an individual script or function */ async #run(name) {
+ if (typeof name === "string" && this.scripts.has(name)) {
+ log.info(`[script] ${name}`);
+ const command = this.scripts.get(name);
+ return this.run(...command);
+ }
+ if (Array.isArray(name)) {
+ const results = await Promise.all(name.map((n)=>this.#run(n)));
+ return results.every((success)=>success);
+ }
+ if (typeof name === "function") {
+ return this.#runFunction(name);
+ }
+ return this.#runScript(name);
+ }
+ /** Run a function */ async #runFunction(fn) {
+ if (fn.name) {
+ log.info(`[script] ${fn.name}()`);
+ }
+ const result = await fn();
+ return result !== false;
+ }
+ /** Run a shell command */ async #runScript(script) {
+ log.info(`[script] ${script}`);
+ const args = shArgs(script);
+ const cmd = args.shift();
+ const command = new Deno.Command(cmd, {
+ args,
+ stdout: "inherit",
+ stderr: "inherit",
+ cwd: this.cwd
+ });
+ const output = await command.output();
+ return output.success;
+ }
+}
+/** Returns the shell arguments for the current platform */ function shArgs(script) {
+ return Deno.build.os === "windows" ? [
+ "PowerShell.exe",
+ "-Command",
+ script
+ ] : [
+ "/usr/bin/env",
+ "bash",
+ "-c",
+ script
+ ];
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9zY3JpcHRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZyB9IGZyb20gXCIuL3V0aWxzL2xvZy50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKiogVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKi9cbiAgY3dkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNjcmlwdCBydW5uZXIgdG8gc3RvcmUgYW5kIHJ1biBjb21tYW5kcyBvciBleGVjdXRlIGZ1bmN0aW9uc1xuICogSXQgY2FuIGV4ZWN1dGUgdGhlIHNjcmlwdHMgYW5kIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbCBvciBzZXF1ZW50aWFsbHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyaXB0cyB7XG4gIC8qKiBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAqL1xuICBjd2Q6IHN0cmluZztcblxuICAvKiogQWxsIHJlZ2lzdGVyZWQgc2NyaXB0cyBhbmQgZnVuY3Rpb25zICovXG4gIHNjcmlwdHMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0T3JGdW5jdGlvbltdPigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuY3dkID0gb3B0aW9ucy5jd2QgfHwgRGVuby5jd2QoKTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBvbmUgb3IgbW9yZSBzY3JpcHRzIHVuZGVyIGEgc3BlY2lmaWMgbmFtZSAqL1xuICBzZXQobmFtZTogc3RyaW5nLCAuLi5zY3JpcHRzOiBTY3JpcHRPckZ1bmN0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLnNjcmlwdHMuc2V0KG5hbWUsIHNjcmlwdHMpO1xuICB9XG5cbiAgLyoqIFJ1biBvbmUgb3IgbW9yZSBjb21tYW5kcyAqL1xuICBhc3luYyBydW4oXG4gICAgLi4ubmFtZXM6IFNjcmlwdE9yRnVuY3Rpb25bXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLiNydW4obmFtZSk7XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogUnVuIGFuIGluZGl2aWR1YWwgc2NyaXB0IG9yIGZ1bmN0aW9uICovXG4gIGFzeW5jICNydW4obmFtZTogU2NyaXB0T3JGdW5jdGlvbik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiB0aGlzLnNjcmlwdHMuaGFzKG5hbWUpKSB7XG4gICAgICBsb2cuaW5mbyhgW3NjcmlwdF0gJHtuYW1lfWApO1xuICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuc2NyaXB0cy5nZXQobmFtZSkhO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKC4uLmNvbW1hbmQpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG5hbWUubWFwKChuKSA9PiB0aGlzLiNydW4obikpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KChzdWNjZXNzKSA9PiBzdWNjZXNzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuI3J1bkZ1bmN0aW9uKG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNydW5TY3JpcHQobmFtZSk7XG4gIH1cblxuICAvKiogUnVuIGEgZnVuY3Rpb24gKi9cbiAgYXN5bmMgI3J1bkZ1bmN0aW9uKGZuOiAoKSA9PiB1bmtub3duKSB7XG4gICAgaWYgKGZuLm5hbWUpIHtcbiAgICAgIGxvZy5pbmZvKGBbc2NyaXB0XSAke2ZuLm5hbWV9KClgKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICByZXR1cm4gcmVzdWx0ICE9PSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBSdW4gYSBzaGVsbCBjb21tYW5kICovXG4gIGFzeW5jICNydW5TY3JpcHQoc2NyaXB0OiBzdHJpbmcpIHtcbiAgICBsb2cuaW5mbyhgW3NjcmlwdF0gJHtzY3JpcHR9YCk7XG5cbiAgICBjb25zdCBhcmdzID0gc2hBcmdzKHNjcmlwdCk7XG4gICAgY29uc3QgY21kID0gYXJncy5zaGlmdCgpITtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgRGVuby5Db21tYW5kKGNtZCwge1xuICAgICAgYXJncyxcbiAgICAgIHN0ZG91dDogXCJpbmhlcml0XCIsXG4gICAgICBzdGRlcnI6IFwiaW5oZXJpdFwiLFxuICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGNvbW1hbmQub3V0cHV0KCk7XG4gICAgcmV0dXJuIG91dHB1dC5zdWNjZXNzO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzaGVsbCBhcmd1bWVudHMgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtICovXG5mdW5jdGlvbiBzaEFyZ3Moc2NyaXB0OiBzdHJpbmcpIHtcbiAgcmV0dXJuIERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiXG4gICAgPyBbXCJQb3dlclNoZWxsLmV4ZVwiLCBcIi1Db21tYW5kXCIsIHNjcmlwdF1cbiAgICA6IFtcIi91c3IvYmluL2VudlwiLCBcImJhc2hcIiwgXCItY1wiLCBzY3JpcHRdO1xufVxuXG4vKiogQSBzY3JpcHQgb3IgZnVuY3Rpb24gKi9cbmV4cG9ydCB0eXBlIFNjcmlwdE9yRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gdW5rbm93bikgfCBTY3JpcHRPckZ1bmN0aW9uW107XG4iXSwibmFtZXMiOltdLCJtYXBwaW5n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
+// denoCacheMetadata=17080815661023851789,14652836808927501812 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/122ba645fcf60323afcb1a9c26faff8d78590b795fd06a6ba53216601c54ecad.js b/vendor/gen/https/deno.land/122ba645fcf60323afcb1a9c26faff8d78590b795fd06a6ba53216601c54ecad.js
new file mode 100644
index 0000000..9f961e1
--- /dev/null
+++ b/vendor/gen/https/deno.land/122ba645fcf60323afcb1a9c26faff8d78590b795fd06a6ba53216601c54ecad.js
@@ -0,0 +1,26 @@
+import Site from "./core/site.ts";
+import url from "./plugins/url.ts";
+import json from "./plugins/json.ts";
+import markdown from "./plugins/markdown.ts";
+import modules from "./plugins/modules.ts";
+import vento from "./plugins/vento.ts";
+import search from "./plugins/search.ts";
+import paginate from "./plugins/paginate.ts";
+import toml from "./plugins/toml.ts";
+import yaml from "./plugins/yaml.ts";
+import { getOptionsFromCli } from "./core/utils/cli_options.ts";
+export default function lume(options = {}, pluginOptions = {}, cliOptions = true) {
+ if (cliOptions) {
+ getOptionsFromCli(options);
+ }
+ const site = new Site(options);
+ // Ignore some files by the watcher
+ site.options.watcher.ignore.push("/deno.lock");
+ site.options.watcher.ignore.push("/node_modules/.deno");
+ site.options.watcher.ignore.push("/.git");
+ site.options.watcher.ignore.push("/_cache");
+ site.options.watcher.ignore.push((path)=>path.endsWith("/.DS_Store"));
+ return site.ignore("node_modules").ignore("import_map.json").ignore("deno.json").ignore("deno.jsonc").ignore("deno.lock").ignore((path)=>path.endsWith(".d.ts")).mergeKey("tags", "stringArray").use(url()).use(json(pluginOptions.json)).use(markdown(pluginOptions.markdown)).use(modules(pluginOptions.modules)).use(vento(pluginOptions.vento)).use(paginate(pluginOptions.paginate)).use(search()).use(toml(pluginOptions.toml)).use(yaml(pluginOptions.yaml));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaXRlIGZyb20gXCIuL2NvcmUvc2l0ZS50c1wiO1xuaW1wb3J0IHVybCBmcm9tIFwiLi9wbHVnaW5zL3VybC50c1wiO1xuaW1wb3J0IGpzb24sIHsgT3B0aW9ucyBhcyBKc29uT3B0aW9ucyB9IGZyb20gXCIuL3BsdWdpbnMvanNvbi50c1wiO1xuaW1wb3J0IG1hcmtkb3duLCB7IE9wdGlvbnMgYXMgTWFya2Rvd25PcHRpb25zIH0gZnJvbSBcIi4vcGx1Z2lucy9tYXJrZG93bi50c1wiO1xuaW1wb3J0IG1vZHVsZXMsIHsgT3B0aW9ucyBhcyBNb2R1bGVzT3B0aW9ucyB9IGZyb20gXCIuL3BsdWdpbnMvbW9kdWxlcy50c1wiO1xuaW1wb3J0IHZlbnRvLCB7IE9wdGlvbnMgYXMgVmVudG9PcHRpb25zIH0gZnJvbSBcIi4vcGx1Z2lucy92ZW50by50c1wiO1xuaW1wb3J0IHNlYXJjaCBmcm9tIFwiLi9wbHVnaW5zL3NlYXJjaC50c1wiO1xuaW1wb3J0IHBhZ2luYXRlLCB7IE9wdGlvbnMgYXMgUGFnaW5hdGVPcHRpb25zIH0gZnJvbSBcIi4vcGx1Z2lucy9wYWdpbmF0ZS50c1wiO1xuaW1wb3J0IHRvbWwsIHsgT3B0aW9ucyBhcyBUb21sT3B0aW9ucyB9IGZyb20gXCIuL3BsdWdpbnMvdG9tbC50c1wiO1xuaW1wb3J0IHlhbWwsIHsgT3B0aW9ucyBhcyBZYW1sT3B0aW9ucyB9IGZyb20gXCIuL3BsdWdpbnMveWFtbC50c1wiO1xuaW1wb3J0IHsgZ2V0T3B0aW9uc0Zyb21DbGkgfSBmcm9tIFwiLi9jb3JlL3V0aWxzL2NsaV9vcHRpb25zLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgRGVlcFBhcnRpYWwgfSBmcm9tIFwiLi9jb3JlL3V0aWxzL29iamVjdC50c1wiO1xuaW1wb3J0IHR5cGUgeyBTaXRlT3B0aW9ucyB9IGZyb20gXCIuL2NvcmUvc2l0ZS50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk9wdGlvbnMge1xuICBqc29uPzogSnNvbk9wdGlvbnM7XG4gIG1hcmtkb3duPzogTWFya2Rvd25PcHRpb25zO1xuICBtb2R1bGVzPzogTW9kdWxlc09wdGlvbnM7XG4gIHZlbnRvPzogVmVudG9PcHRpb25zO1xuICBwYWdpbmF0ZT86IFBhZ2luYXRlT3B0aW9ucztcbiAgdG9tbD86IFRvbWxPcHRpb25zO1xuICB5YW1sPzogWWFtbE9wdGlvbnM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGx1bWUoXG4gIG9wdGlvbnM6IERlZXBQYXJ0aWFsPFNpdGVPcHRpb25zPiA9IHt9LFxuICBwbHVnaW5PcHRpb25zOiBQbHVnaW5PcHRpb25zID0ge30sXG4gIGNsaU9wdGlvbnMgPSB0cnVlLFxuKTogU2l0ZSB7XG4gIGlmIChjbGlPcHRpb25zKSB7XG4gICAgZ2V0T3B0aW9uc0Zyb21DbGkob3B0aW9ucyk7XG4gIH1cblxuICBjb25zdCBzaXRlID0gbmV3IFNpdGUob3B0aW9ucyBhcyBQYXJ0aWFsPFNpdGVPcHRpb25zPik7XG5cbiAgLy8gSWdub3JlIHNvbWUgZmlsZXMgYnkgdGhlIHdhdGNoZXJcbiAgc2l0ZS5vcHRpb25zLndhdGNoZXIuaWdub3JlLnB1c2goXCIvZGVuby5sb2NrXCIpO1xuICBzaXRlLm9wdGlvbnMud2F0Y2hlci5pZ25vcmUucHVzaChcIi9ub2RlX21vZHVsZXMvLmRlbm9cIik7XG4gIHNpdGUub3B0aW9ucy53YXRjaGVyLmlnbm9yZS5wdXNoKFwiLy5naXRcIik7XG4gIHNpdGUub3B0aW9ucy53YXRjaGVyLmlnbm9yZS5wdXNoKFwiL19jYWNoZVwiKTtcbiAgc2l0ZS5vcHRpb25zLndhdGNoZXIuaWdub3JlLnB1c2goKHBhdGgpID0+IHBhdGguZW5kc1dpdGgoXCIvLkRTX1N0b3JlXCIpKTtcblxuICByZXR1cm4gc2l0ZVxuICAgIC5pZ25vcmUoXCJub2RlX21vZHVsZXNcIilcbiAgICAuaWdub3JlKFwiaW1wb3J0X21hcC5qc29uXCIpXG4gICAgLmlnbm9yZShcImRlbm8uanNvblwiKVxuICAgIC5pZ25vcmUoXCJkZW5vLmpzb25jXCIpXG4gICAgLmlnbm9yZShcImRlbm8ubG9ja1wiKVxuICAgIC5pZ25vcmUoKHBhdGgpID0+IHBhdGguZW5kc1dpdGgoXCIuZC50c1wiKSlcbiAgICAubWVyZ2VLZXkoXCJ0YWdzXCIsIFwic3RyaW5nQXJyYXlcIilcbiAgICAudXNlKHVybCgpKVxuICAgIC51c2UoanNvbihwbHVnaW5PcHRpb25zLmpzb24pKVxuICAgIC51c2UobWFya2Rvd24ocGx1Z2luT3B0aW9ucy5tYXJrZG93bikpXG4gICAgLnVzZShtb2R1bGVzKHBsdWdpbk9wdGlvbnMubW9kdWxlcykpXG4gICAgLnVzZSh2ZW50byhwbHVnaW5PcHRpb25zLnZlbnRvKSlcbiAgICAudXNlKHBhZ2luYXRlKHBsdWdpbk9wdGlvbnMucGFnaW5hdGUpKVxuICAgIC51c2Uoc2VhcmNoKCkpXG4gICAgLnVzZSh0b21sKHBsdWdpbk9wdGlvbnMudG9tbCkpXG4gICAgLnVzZSh5YW1sKHBsdWdpbk9wdGlvbnMueWFtbCkpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxpQkFBaUI7QUFDbEMsT0FBTyxTQUFTLG1CQUFtQjtBQUNuQyxPQUFPLFVBQXNDLG9CQUFvQjtBQUNqRSxPQUFPLGNBQThDLHdCQUF3QjtBQUM3RSxPQUFPLGFBQTRDLHVCQUF1QjtBQUMxRSxPQUFPLFdBQXdDLHFCQUFxQjtBQUNwRSxPQUFPLFlBQVksc0JBQXNCO0FBQ3pDLE9BQU8sY0FBOEMsd0JBQXdCO0FBQzdFLE9BQU8sVUFBc0Msb0JBQW9CO0FBQ2pFLE9BQU8sVUFBc0Msb0JBQW9CO0FBQ2pFLFNBQVMsaUJBQWlCLFFBQVEsOEJBQThCO0FBZWhFLGVBQWUsU0FBUyxLQUN0QixVQUFvQyxDQUFDLENBQUMsRUFDdEMsZ0JBQStCLENBQUMsQ0FBQyxFQUNqQyxhQUFhLElBQUk7RUFFakIsSUFBSSxZQUFZO0lBQ2Qsa0JBQWtCO0VBQ3BCO0VBRUEsTUFBTSxPQUFPLElBQUksS0FBSztFQUV0QixtQ0FBbUM7RUFDbkMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDakMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDakMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDakMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDakMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFTLEtBQUssUUFBUSxDQUFDO0VBRXpELE9BQU8sS0FDSixNQUFNLENBQUMsZ0JBQ1AsTUFBTSxDQUFDLG1CQUNQLE1BQU0sQ0FBQyxhQUNQLE1BQU0sQ0FBQyxjQUNQLE1BQU0sQ0FBQyxhQUNQLE1BQU0sQ0FBQyxDQUFDLE9BQVMsS0FBSyxRQUFRLENBQUMsVUFDL0IsUUFBUSxDQUFDLFFBQVEsZUFDakIsR0FBRyxDQUFDLE9BQ0osR0FBRyxDQUFDLEtBQUssY0FBYyxJQUFJLEdBQzNCLEdBQUcsQ0FBQyxTQUFTLGNBQWMsUUFBUSxHQUNuQyxHQUFHLENBQUMsUUFBUSxjQUFjLE9BQU8sR0FDakMsR0FBRyxDQUFDLE1BQU0sY0FBYyxLQUFLLEdBQzdCLEdBQUcsQ0FBQyxTQUFTLGNBQWMsUUFBUSxHQUNuQyxHQUFHLENBQUMsVUFDSixHQUFHLENBQUMsS0FBSyxjQUFjLElBQUksR0FDM0IsR0FBRyxDQUFDLEtBQUssY0FBYyxJQUFJO0FBQ2hDIn0=
+// denoCacheMetadata=9242829105867286239,18287443376734203278 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/140822725cd5bead60b2a9d3b8d43c48d8a4154f19d7f8f93dfb4bab6fe205f5.js b/vendor/gen/https/deno.land/140822725cd5bead60b2a9d3b8d43c48d8a4154f19d7f8f93dfb4bab6fe205f5.js
new file mode 100644
index 0000000..501d732
--- /dev/null
+++ b/vendor/gen/https/deno.land/140822725cd5bead60b2a9d3b8d43c48d8a4154f19d7f8f93dfb4bab6fe205f5.js
@@ -0,0 +1,63 @@
+import { parse, parseFrag } from "./parser.ts";
+import { CTOR_KEY } from "./constructor-lock.ts";
+import { Comment, NodeType, Text } from "./dom/node.ts";
+import { DocumentType } from "./dom/document.ts";
+import { DocumentFragment } from "./dom/document-fragment.ts";
+import { HTMLTemplateElement } from "./dom/elements/html-template-element.ts";
+import { Element } from "./dom/element.ts";
+export function nodesFromString(html) {
+ const parsed = JSON.parse(parse(html));
+ const node = nodeFromArray(parsed, null);
+ return node;
+}
+export function fragmentNodesFromString(html, contextLocalName) {
+ const parsed = JSON.parse(parseFrag(html, contextLocalName));
+ const node = nodeFromArray(parsed, null);
+ return node;
+}
+function nodeFromArray(data, parentNode) {
+ // For reference only:
+ // type node = [NodeType, nodeName, attributes, node[]]
+ // | [NodeType, characterData]
+ // <template> element gets special treatment, until
+ // we implement all the HTML elements
+ if (data[1] === "template") {
+ const content = nodeFromArray(data[3], null);
+ const contentFrag = new DocumentFragment();
+ const fragMutator = contentFrag._getChildNodesMutator();
+ for (const child of content.childNodes){
+ fragMutator.push(child);
+ child._setParent(contentFrag);
+ }
+ return new HTMLTemplateElement(parentNode, data[2], CTOR_KEY, contentFrag);
+ }
+ const elm = new Element(data[1], parentNode, data[2], CTOR_KEY);
+ const childNodes = elm._getChildNodesMutator();
+ let childNode;
+ for (const child of data.slice(3)){
+ switch(child[0]){
+ case NodeType.TEXT_NODE:
+ childNode = new Text(child[1]);
+ childNode.parentNode = elm;
+ childNodes.push(childNode);
+ break;
+ case NodeType.COMMENT_NODE:
+ childNode = new Comment(child[1]);
+ childNode.parentNode = elm;
+ childNodes.push(childNode);
+ break;
+ case NodeType.DOCUMENT_NODE:
+ case NodeType.ELEMENT_NODE:
+ nodeFromArray(child, elm);
+ break;
+ case NodeType.DOCUMENT_TYPE_NODE:
+ childNode = new DocumentType(child[1], child[2], child[3], CTOR_KEY);
+ childNode.parentNode = elm;
+ childNodes.push(childNode);
+ break;
+ }
+ }
+ return elm;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZGVzZXJpYWxpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2UsIHBhcnNlRnJhZyB9IGZyb20gXCIuL3BhcnNlci50c1wiO1xuaW1wb3J0IHsgQ1RPUl9LRVkgfSBmcm9tIFwiLi9jb25zdHJ1Y3Rvci1sb2NrLnRzXCI7XG5pbXBvcnQgeyBDb21tZW50LCBOb2RlLCBOb2RlVHlwZSwgVGV4dCB9IGZyb20gXCIuL2RvbS9ub2RlLnRzXCI7XG5pbXBvcnQgeyBEb2N1bWVudFR5cGUgfSBmcm9tIFwiLi9kb20vZG9jdW1lbnQudHNcIjtcbmltcG9ydCB7IERvY3VtZW50RnJhZ21lbnQgfSBmcm9tIFwiLi9kb20vZG9jdW1lbnQtZnJhZ21lbnQudHNcIjtcbmltcG9ydCB7IEhUTUxUZW1wbGF0ZUVsZW1lbnQgfSBmcm9tIFwiLi9kb20vZWxlbWVudHMvaHRtbC10ZW1wbGF0ZS1lbGVtZW50LnRzXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4vZG9tL2VsZW1lbnQudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzRnJvbVN0cmluZyhodG1sOiBzdHJpbmcpOiBOb2RlIHtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwYXJzZShodG1sKSk7XG4gIGNvbnN0IG5vZGUgPSBub2RlRnJvbUFycmF5KHBhcnNlZCwgbnVsbCk7XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFnbWVudE5vZGVzRnJvbVN0cmluZyhcbiAgaHRtbDogc3RyaW5nLFxuICBjb250ZXh0TG9jYWxOYW1lOiBzdHJpbmcsXG4pOiBOb2RlIHtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwYXJzZUZyYWcoaHRtbCwgY29udGV4dExvY2FsTmFtZSkpO1xuICBjb25zdCBub2RlID0gbm9kZUZyb21BcnJheShwYXJzZWQsIG51bGwpO1xuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBub2RlRnJvbUFycmF5KGRhdGE6IGFueSwgcGFyZW50Tm9kZTogTm9kZSB8IG51bGwpOiBOb2RlIHtcbiAgLy8gRm9yIHJlZmVyZW5jZSBvbmx5OlxuICAvLyB0eXBlIG5vZGUgPSBbTm9kZVR5cGUsIG5vZGVOYW1lLCBhdHRyaWJ1dGVzLCBub2RlW11dXG4gIC8vICAgICAgICAgICAgIHwgW05vZGVUeXBlLCBjaGFyYWN0ZXJEYXRhXVxuXG4gIC8vIDx0ZW1wbGF0ZT4gZWxlbWVudCBnZXRzIHNwZWNpYWwgdHJlYXRtZW50LCB1bnRpbFxuICAvLyB3ZSBpbXBsZW1lbnQgYWxsIHRoZSBIVE1MIGVsZW1lbnRzXG4gIGlmIChkYXRhWzFdID09PSBcInRlbXBsYXRlXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gbm9kZUZyb21BcnJheShkYXRhWzNdLCBudWxsKTtcbiAgICBjb25zdCBjb250ZW50RnJhZyA9IG5ldyBEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgY29uc3QgZnJhZ011dGF0b3IgPSBjb250ZW50RnJhZy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udGVudC5jaGlsZE5vZGVzKSB7XG4gICAgICBmcmFnTXV0YXRvci5wdXNoKGNoaWxkKTtcbiAgICAgIGNoaWxkLl9zZXRQYXJlbnQoY29udGVudEZyYWcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSFRNTFRlbXBsYXRlRWxlbWVudChcbiAgICAgIHBhcmVudE5vZGUsXG4gICAgICBkYXRhWzJdLFxuICAgICAgQ1RPUl9LRVksXG4gICAgICBjb250ZW50RnJhZyxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWxtID0gbmV3IEVsZW1lbnQoZGF0YVsxXSwgcGFyZW50Tm9kZSwgZGF0YVsyXSwgQ1RPUl9LRVkpO1xuICBjb25zdCBjaGlsZE5vZGVzID0gZWxtLl9nZXRDaGlsZE5vZGVzTXV0YXRvcigpO1xuICBsZXQgY2hpbGROb2RlOiBOb2RlO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZGF0YS5zbGljZSgzKSkge1xuICAgIHN3aXRjaCAoY2hpbGRbMF0pIHtcbiAgICAgIGNhc2UgTm9kZVR5cGUuVEVYVF9OT0RFOlxuICAgICAgICBjaGlsZE5vZGUgPSBuZXcgVGV4dChjaGlsZFsxXSk7XG4gICAgICAgIGNoaWxkTm9kZS5wYXJlbnROb2RlID0gPEVsZW1lbnQ+IGVsbTtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vZGVUeXBlLkNPTU1FTlRfTk9ERTpcbiAgICAgICAgY2hpbGROb2RlID0gbmV3IENvbW1lbnQoY2hpbGRbMV0pO1xuICAgICAgICBjaGlsZE5vZGUucGFyZW50Tm9kZSA9IDxFbGVtZW50PiBlbG07XG4gICAgICAgIGNoaWxkTm9kZXMucHVzaChjaGlsZE5vZGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb2RlVHlwZS5ET0NVTUVOVF9OT0RFOlxuICAgICAgY2FzZSBOb2RlVHlwZS5FTEVNRU5UX05PREU6XG4gICAgICAgIG5vZGVGcm9tQXJyYXkoY2hpbGQsIGVsbSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vZGVUeXBlLkRPQ1VNRU5UX1RZUEVfTk9ERTpcbiAgICAgICAgY2hpbGROb2RlID0gbmV3IERvY3VtZW50VHlwZShjaGlsZFsxXSwgY2hpbGRbMl0sIGNoaWxkWzNdLCBDVE9SX0tFWSk7XG4gICAgICAgIGNoaWxkTm9kZS5wYXJlbnROb2RlID0gPEVsZW1lbnQ+IGVsbTtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbG07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFLLEVBQUUsU0FBUyxRQUFRLGNBQWM7QUFDL0MsU0FBUyxRQUFRLFFBQVEsd0JBQXdCO0FBQ2pELFNBQVMsT0FBTyxFQUFRLFFBQVEsRUFBRSxJQUFJLFFBQVEsZ0JBQWdCO0FBQzlELFNBQVMsWUFBWSxRQUFRLG9CQUFvQjtBQUNqRCxTQUFTLGdCQUFnQixRQUFRLDZCQUE2QjtBQUM5RCxTQUFTLG1CQUFtQixRQUFRLDBDQUEwQztBQUM5RSxTQUFTLE9BQU8sUUFBUSxtQkFBbUI7QUFFM0MsT0FBTyxTQUFTLGdCQUFnQixJQUFZO0VBQzFDLE1BQU0sU0FBUyxLQUFLLEtBQUssQ0FBQyxNQUFNO0VBQ2hDLE1BQU0sT0FBTyxjQUFjLFFBQVE7RUFFbkMsT0FBTztBQUNUO0FBRUEsT0FBTyxTQUFTLHdCQUNkLElBQVksRUFDWixnQkFBd0I7RUFFeEIsTUFBTSxTQUFTLEtBQUssS0FBSyxDQUFDLFVBQVUsTUFBTTtFQUMxQyxNQUFNLE9BQU8sY0FBYyxRQUFRO0VBRW5DLE9BQU87QUFDVDtBQUVBLFNBQVMsY0FBYyxJQUFTLEVBQUUsVUFBdUI7RUFDdkQsc0JBQXNCO0VBQ3RCLHVEQUF1RDtFQUN2RCwwQ0FBMEM7RUFFMUMsbURBQW1EO0VBQ25ELHFDQUFxQztFQUNyQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssWUFBWTtJQUMxQixNQUFNLFVBQVUsY0FBYyxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sY0FBYyxJQUFJO0lBQ3hCLE1BQU0sY0FBYyxZQUFZLHFCQUFxQjtJQUVyRCxLQUFLLE1BQU0sU0FBUyxRQUFRLFVBQVUsQ0FBRTtNQUN0QyxZQUFZLElBQUksQ0FBQztNQUNqQixNQUFNLFVBQVUsQ0FBQztJQUNuQjtJQUVBLE9BQU8sSUFBSSxvQkFDVCxZQUNBLElBQUksQ0FBQyxFQUFFLEVBQ1AsVUFDQTtFQUVKO0VBRUEsTUFBTSxNQUFNLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUN0RCxNQUFNLGFBQWEsSUFBSSxxQkFBcUI7RUFDNUMsSUFBSTtFQUVKLEtBQUssTUFBTSxTQUFTLEtBQUssS0FBSyxDQUFDLEdBQUk7SUFDakMsT0FBUSxLQUFLLENBQUMsRUFBRTtNQUNkLEtBQUssU0FBUyxTQUFTO1FBQ3JCLFlBQVksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQzdCLFVBQVUsVUFBVSxHQUFhO1FBQ2pDLFdBQVcsSUFBSSxDQUFDO1FBQ2hCO01BRUYsS0FBSyxTQUFTLFlBQVk7UUFDeEIsWUFBWSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7UUFDaEMsVUFBVSxVQUFVLEdBQWE7UUFDakMsV0FBVyxJQUFJLENBQUM7UUFDaEI7TUFFRixLQUFLLFNBQVMsYUFBYTtNQUMzQixLQUFLLFNBQVMsWUFBWTtRQUN4QixjQUFjLE9BQU87UUFDckI7TUFFRixLQUFLLFNBQVMsa0JBQWtCO1FBQzlCLFlBQVksSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzNELFVBQVUsVUFBVSxHQUFhO1FBQ2pDLFdBQVcsSUFBSSxDQUFDO1FBQ2hCO0lBQ0o7RUFDRjtFQUVBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=14175222346964603523,8709987795125251490 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/14863e3b2b9ebce9db02ba80f01114277213f612399d0e198773bda87cacf032.js b/vendor/gen/https/deno.land/14863e3b2b9ebce9db02ba80f01114277213f612399d0e198773bda87cacf032.js
new file mode 100644
index 0000000..5a2cbc6
--- /dev/null
+++ b/vendor/gen/https/deno.land/14863e3b2b9ebce9db02ba80f01114277213f612399d0e198773bda87cacf032.js
@@ -0,0 +1,72 @@
+import { GenericPrompt } from "./_generic_prompt.ts";
+import { brightBlue, underline, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+import { GenericInput } from "./_generic_input.ts";
+/** Secret prompt representation. */ export class Secret extends GenericInput {
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ if (typeof options === "string") {
+ options = {
+ message: options
+ };
+ }
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ label: "Password",
+ hidden: false,
+ minLength: 0,
+ maxLength: Infinity,
+ ...options
+ }).prompt();
+ }
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ input() {
+ return underline(this.settings.hidden ? "" : "*".repeat(this.inputValue.length));
+ }
+ /** Read user input. */ read() {
+ if (this.settings.hidden) {
+ this.tty.cursorHide();
+ }
+ return super.read();
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ if (typeof value !== "string") {
+ return false;
+ }
+ if (value.length < this.settings.minLength) {
+ return `${this.settings.label} must be longer than ${this.settings.minLength} but has a length of ${value.length}.`;
+ }
+ if (value.length > this.settings.maxLength) {
+ return `${this.settings.label} can't be longer than ${this.settings.maxLength} but has a length of ${value.length}.`;
+ }
+ return true;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ return value;
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return this.settings.hidden ? "*".repeat(8) : "*".repeat(value.length);
+ }
+ /** Get input input. */ getValue() {
+ return this.inputValue;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L3NlY3JldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmljUHJvbXB0IH0gZnJvbSBcIi4vX2dlbmVyaWNfcHJvbXB0LnRzXCI7XG5pbXBvcnQgeyBicmlnaHRCbHVlLCB1bmRlcmxpbmUsIHllbGxvdyB9IGZyb20gXCIuL2RlcHMudHNcIjtcbmltcG9ydCB7IEZpZ3VyZXMgfSBmcm9tIFwiLi9maWd1cmVzLnRzXCI7XG5pbXBvcnQge1xuICBHZW5lcmljSW5wdXQsXG4gIEdlbmVyaWNJbnB1dEtleXMsXG4gIEdlbmVyaWNJbnB1dFByb21wdE9wdGlvbnMsXG4gIEdlbmVyaWNJbnB1dFByb21wdFNldHRpbmdzLFxufSBmcm9tIFwiLi9fZ2VuZXJpY19pbnB1dC50c1wiO1xuXG4vKiogU2VjcmV0IGtleSBvcHRpb25zLiAqL1xuZXhwb3J0IHR5cGUgU2VjcmV0S2V5cyA9IEdlbmVyaWNJbnB1dEtleXM7XG5cbi8qKiBTZWNyZXQgcHJvbXB0IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldE9wdGlvbnNcbiAgZXh0ZW5kcyBHZW5lcmljSW5wdXRQcm9tcHRPcHRpb25zPHN0cmluZywgc3RyaW5nPiB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAga2V5cz86IFNlY3JldEtleXM7XG59XG5cbi8qKiBTZWNyZXQgcHJvbXB0IHNldHRpbmdzLiAqL1xuaW50ZXJmYWNlIFNlY3JldFNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY0lucHV0UHJvbXB0U2V0dGluZ3M8c3RyaW5nLCBzdHJpbmc+IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaGlkZGVuOiBib29sZWFuO1xuICBtaW5MZW5ndGg6IG51bWJlcjtcbiAgbWF4TGVuZ3RoOiBudW1iZXI7XG4gIGtleXM/OiBTZWNyZXRLZXlzO1xufVxuXG4vKiogU2VjcmV0IHByb21wdCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXQgZXh0ZW5kcyBHZW5lcmljSW5wdXQ8c3RyaW5nLCBzdHJpbmcsIFNlY3JldFNldHRpbmdzPiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBwcm9tcHQgYW5kIHNob3cgY3Vyc29yIG9uIGVuZC4gKi9cbiAgcHVibGljIHN0YXRpYyBwcm9tcHQob3B0aW9uczogc3RyaW5nIHwgU2VjcmV0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBvcHRpb25zID0geyBtZXNzYWdlOiBvcHRpb25zIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHBvaW50ZXI6IGJyaWdodEJsdWUoRmlndXJlcy5QT0lOVEVSX1NNQUxMKSxcbiAgICAgIHByZWZpeDogeWVsbG93KFwiPyBcIiksXG4gICAgICBpbmRlbnQ6IFwiIFwiLFxuICAgICAgbGFiZWw6IFwiUGFzc3dvcmRcIixcbiAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICBtaW5MZW5ndGg6IDAsXG4gICAgICBtYXhMZW5ndGg6IEluZmluaXR5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KS5wcm9tcHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3QgcHJvbXB0IHZhbHVlLiBDYW4gYmUgdXNlZCBmb3IgdW5pdCB0ZXN0cyBvciBwcmUgc2VsZWN0aW9ucy5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbmplY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIEdlbmVyaWNQcm9tcHQuaW5qZWN0KHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnB1dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bmRlcmxpbmUoXG4gICAgICB0aGlzLnNldHRpbmdzLmhpZGRlbiA/IFwiXCIgOiBcIipcIi5yZXBlYXQodGhpcy5pbnB1dFZhbHVlLmxlbmd0aCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZWFkIHVzZXIgaW5wdXQuICovXG4gIHByb3RlY3RlZCByZWFkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnNldHRpbmdzLmhpZGRlbikge1xuICAgICAgdGhpcy50dHkuY3Vyc29ySGlkZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucmVhZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlucHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVXNlciBpbnB1dCB2YWx1ZS5cbiAgICogQHJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9yIGVycm9yIG1lc3NhZ2Ugb24gZXJyb3IuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gfCBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuc2V0dGluZ3MubWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5zZXR0aW5ncy5sYWJlbH0gbXVzdCBiZSBsb25nZXIgdGhhbiAke3RoaXMuc2V0dGluZ3MubWluTGVuZ3RofSBidXQgaGFzIGEgbGVuZ3RoIG9mICR7dmFsdWUubGVuZ3RofS5gO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoID4gdGhpcy5zZXR0aW5ncy5tYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnNldHRpbmdzLmxhYmVsfSBjYW4ndCBiZSBsb25nZXIgdGhhbiAke3RoaXMuc2V0dGluZ3MubWF4TGVuZ3RofSBidXQgaGFzIGEgbGVuZ3RoIG9mICR7dmFsdWUubGVuZ3RofS5gO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgaW5wdXQgdmFsdWUgdG8gb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUuXG4gICAqIEByZXR1cm4gT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCBmb3JtYXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaGlkZGVuID8gXCIqXCIucmVwZWF0KDgpIDogXCIqXCIucmVwZWF0KHZhbHVlLmxlbmd0aCk7XG4gIH1cblxuICAvKiogR2V0IGlucHV0IGlucHV0LiAqL1xuICBwcm90ZWN0ZWQgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxhQUFhLFFBQVEsdUJBQXVCO0FBQ3JELFNBQVMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsWUFBWTtBQUMxRCxTQUFTLE9BQU8sUUFBUSxlQUFlO0FBQ3ZDLFNBQ0UsWUFBWSxRQUlQLHNCQUFzQjtBQXdCN0Isa0NBQWtDLEdBQ2xDLE9BQU8sTUFBTSxlQUFlO0VBQzFCLCtDQUErQyxHQUMvQyxPQUFjLE9BQU8sT0FBK0IsRUFBbUI7SUFDckUsSUFBSSxPQUFPLFlBQVksVUFBVTtNQUMvQixVQUFVO1FBQUUsU0FBUztNQUFRO0lBQy9CO0lBRUEsT0FBTyxJQUFJLElBQUksQ0FBQztNQUNkLFNBQVMsV0FBVyxRQUFRLGFBQWE7TUFDekMsUUFBUSxPQUFPO01BQ2YsUUFBUTtNQUNSLE9BQU87TUFDUCxRQUFRO01BQ1IsV0FBVztNQUNYLFdBQVc7TUFDWCxHQUFHLE9BQU87SUFDWixHQUFHLE1BQU07RUFDWDtFQUVBOzs7R0FHQyxHQUNELE9BQWMsT0FBTyxLQUFhLEVBQVE7SUFDeEMsY0FBYyxNQUFNLENBQUM7RUFDdkI7RUFFVSxRQUFnQjtJQUN4QixPQUFPLFVBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07RUFFakU7RUFFQSxxQkFBcUIsR0FDckIsQUFBVSxPQUF5QjtJQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO01BQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVTtJQUNyQjtJQUNBLE9BQU8sS0FBSyxDQUFDO0VBQ2Y7RUFFQTs7OztHQUlDLEdBQ0QsQUFBVSxTQUFTLEtBQWEsRUFBb0I7SUFDbEQsSUFBSSxPQUFPLFVBQVUsVUFBVTtNQUM3QixPQUFPO0lBQ1Q7SUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO01BQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckg7SUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO01BQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEg7SUFDQSxPQUFPO0VBQ1Q7RUFFQTs7OztHQUlDLEdBQ0QsQUFBVSxVQUFVLEtBQWEsRUFBc0I7SUFDckQsT0FBTztFQUNUO0VBRUE7OztHQUdDLEdBQ0QsQUFBVSxPQUFPLEtBQWEsRUFBVTtJQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxNQUFNO0VBQ3ZFO0VBRUEscUJBQXFCLEdBQ3JCLEFBQVUsV0FBbUI7SUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVTtFQUN4QjtBQUNGIn0=
+// denoCacheMetadata=5105239299619113651,16748191054060486251 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/15a8f8fb8e6473afdb506294ce0868e983280c6427db20b73301a375fed03774.js b/vendor/gen/https/deno.land/15a8f8fb8e6473afdb506294ce0868e983280c6427db20b73301a375fed03774.js
new file mode 100644
index 0000000..8a15d33
--- /dev/null
+++ b/vendor/gen/https/deno.land/15a8f8fb8e6473afdb506294ce0868e983280c6427db20b73301a375fed03774.js
@@ -0,0 +1,42 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(functionTag);
+ };
+}
+function functionTag(env, code, _output, tokens) {
+ if (!code.match(/(export\s+)?(async\s+)?function\s/)) {
+ return;
+ }
+ const match = code.match(/^(export\s+)?(async\s+)?function\s+(\w+)\s*(\([^)]+\))?$/);
+ if (!match) {
+ throw new Error(`Invalid function: ${code}`);
+ }
+ const [_, exp, as, name, args] = match;
+ const compiled = [];
+ compiled.push(`${as || ""} function ${name} ${args || "()"} {`);
+ compiled.push(`let __output = "";`);
+ if (exp) {
+ compiled.push(...env.compileTokens(tokens, "__output", [
+ "/export"
+ ]));
+ if (tokens.length && (tokens[0][0] !== "tag" || tokens[0][1] !== "/export")) {
+ throw new Error(`Missing closing tag for export function tag: ${code}`);
+ }
+ } else {
+ compiled.push(...env.compileTokens(tokens, "__output", [
+ "/function"
+ ]));
+ if (tokens.length && (tokens[0][0] !== "tag" || tokens[0][1] !== "/function")) {
+ throw new Error(`Missing closing tag for function tag: ${code}`);
+ }
+ }
+ tokens.shift();
+ compiled.push(`return __output;`);
+ compiled.push(`}`);
+ if (exp) {
+ compiled.push(`__exports["${name}"] = ${name}`);
+ }
+ return compiled.join("\n");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2Z1bmN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tIFwiLi4vc3JjL3Rva2VuaXplci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCwgUGx1Z2luIH0gZnJvbSBcIi4uL3NyYy9lbnZpcm9ubWVudC50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogUGx1Z2luIHtcbiAgcmV0dXJuIChlbnY6IEVudmlyb25tZW50KSA9PiB7XG4gICAgZW52LnRhZ3MucHVzaChmdW5jdGlvblRhZyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGFnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjb2RlOiBzdHJpbmcsXG4gIF9vdXRwdXQ6IHN0cmluZyxcbiAgdG9rZW5zOiBUb2tlbltdLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb2RlLm1hdGNoKC8oZXhwb3J0XFxzKyk/KGFzeW5jXFxzKyk/ZnVuY3Rpb25cXHMvKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gY29kZS5tYXRjaChcbiAgICAvXihleHBvcnRcXHMrKT8oYXN5bmNcXHMrKT9mdW5jdGlvblxccysoXFx3KylcXHMqKFxcKFteKV0rXFwpKT8kLyxcbiAgKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZ1bmN0aW9uOiAke2NvZGV9YCk7XG4gIH1cblxuICBjb25zdCBbXywgZXhwLCBhcywgbmFtZSwgYXJnc10gPSBtYXRjaDtcblxuICBjb25zdCBjb21waWxlZDogc3RyaW5nW10gPSBbXTtcbiAgY29tcGlsZWQucHVzaChgJHthcyB8fCBcIlwifSBmdW5jdGlvbiAke25hbWV9ICR7YXJncyB8fCBcIigpXCJ9IHtgKTtcbiAgY29tcGlsZWQucHVzaChgbGV0IF9fb3V0cHV0ID0gXCJcIjtgKTtcblxuICBpZiAoZXhwKSB7XG4gICAgY29tcGlsZWQucHVzaCguLi5lbnYuY29tcGlsZVRva2Vucyh0b2tlbnMsIFwiX19vdXRwdXRcIiwgW1wiL2V4cG9ydFwiXSkpO1xuXG4gICAgaWYgKFxuICAgICAgdG9rZW5zLmxlbmd0aCAmJiAodG9rZW5zWzBdWzBdICE9PSBcInRhZ1wiIHx8IHRva2Vuc1swXVsxXSAhPT0gXCIvZXhwb3J0XCIpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2xvc2luZyB0YWcgZm9yIGV4cG9ydCBmdW5jdGlvbiB0YWc6ICR7Y29kZX1gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29tcGlsZWQucHVzaCguLi5lbnYuY29tcGlsZVRva2Vucyh0b2tlbnMsIFwiX19vdXRwdXRcIiwgW1wiL2Z1bmN0aW9uXCJdKSk7XG5cbiAgICBpZiAoXG4gICAgICB0b2tlbnMubGVuZ3RoICYmICh0b2tlbnNbMF1bMF0gIT09IFwidGFnXCIgfHwgdG9rZW5zWzBdWzFdICE9PSBcIi9mdW5jdGlvblwiKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGNsb3NpbmcgdGFnIGZvciBmdW5jdGlvbiB0YWc6ICR7Y29kZX1gKTtcbiAgICB9XG4gIH1cblxuICB0b2tlbnMuc2hpZnQoKTtcblxuICBjb21waWxlZC5wdXNoKGByZXR1cm4gX19vdXRwdXQ7YCk7XG4gIGNvbXBpbGVkLnB1c2goYH1gKTtcblxuICBpZiAoZXhwKSB7XG4gICAgY29tcGlsZWQucHVzaChgX19leHBvcnRzW1wiJHtuYW1lfVwiXSA9ICR7bmFtZX1gKTtcbiAgfVxuXG4gIHJldHVybiBjb21waWxlZC5qb2luKFwiXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7QUFDRjtBQUVBLFNBQVMsWUFDUCxHQUFnQixFQUNoQixJQUFZLEVBQ1osT0FBZSxFQUNmLE1BQWU7RUFFZixJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsc0NBQXNDO0lBQ3BEO0VBQ0Y7RUFFQSxNQUFNLFFBQVEsS0FBSyxLQUFLLENBQ3RCO0VBR0YsSUFBSSxDQUFDLE9BQU87SUFDVixNQUFNLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU07RUFDN0M7RUFFQSxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksTUFBTSxLQUFLLEdBQUc7RUFFakMsTUFBTSxXQUFxQixFQUFFO0VBQzdCLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDO0VBQzlELFNBQVMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUM7RUFFbEMsSUFBSSxLQUFLO0lBQ1AsU0FBUyxJQUFJLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxZQUFZO01BQUM7S0FBVTtJQUVsRSxJQUNFLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQ3RFO01BQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyw2Q0FBNkMsRUFBRSxNQUFNO0lBQ3hFO0VBQ0YsT0FBTztJQUNMLFNBQVMsSUFBSSxJQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsWUFBWTtNQUFDO0tBQVk7SUFFcEUsSUFDRSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssV0FBVyxHQUN4RTtNQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsc0NBQXNDLEVBQUUsTUFBTTtJQUNqRTtFQUNGO0VBRUEsT0FBTyxLQUFLO0VBRVosU0FBUyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztFQUNoQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVqQixJQUFJLEtBQUs7SUFDUCxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssRUFBRSxNQUFNO0VBQ2hEO0VBRUEsT0FBTyxTQUFTLElBQUksQ0FBQztBQUN2QiJ9
+// denoCacheMetadata=155647414038084898,14581215213938652872 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/164198804ee6fd3a1b8eadd17caf07b9b37735aeeab7d0d37d418ef0e0bab6aa.js b/vendor/gen/https/deno.land/164198804ee6fd3a1b8eadd17caf07b9b37735aeeab7d0d37d418ef0e0bab6aa.js
new file mode 100644
index 0000000..37b136b
--- /dev/null
+++ b/vendor/gen/https/deno.land/164198804ee6fd3a1b8eadd17caf07b9b37735aeeab7d0d37d418ef0e0bab6aa.js
@@ -0,0 +1,20 @@
+import { env } from "./env.ts";
+const tokens = new Map();
+const denoAuthTokens = env("DENO_AUTH_TOKENS");
+if (denoAuthTokens) {
+ const authTokens = denoAuthTokens.split(";");
+ for (const token of authTokens){
+ const [credentials, host] = token.split("@");
+ if (credentials.includes(":")) {
+ // Basic Auth
+ const encodedCredentials = btoa(credentials);
+ tokens.set(host, `Basic ${encodedCredentials}`);
+ } else {
+ // Bearer Token
+ tokens.set(host, `Bearer ${credentials}`);
+ }
+ }
+}
+export { tokens };
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy90b2tlbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4vZW52LnRzXCI7XG5cbmNvbnN0IHRva2VucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5jb25zdCBkZW5vQXV0aFRva2VucyA9IGVudjxzdHJpbmc+KFwiREVOT19BVVRIX1RPS0VOU1wiKTtcbmlmIChkZW5vQXV0aFRva2Vucykge1xuICBjb25zdCBhdXRoVG9rZW5zID0gZGVub0F1dGhUb2tlbnMuc3BsaXQoXCI7XCIpO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIGF1dGhUb2tlbnMpIHtcbiAgICBjb25zdCBbY3JlZGVudGlhbHMsIGhvc3RdID0gdG9rZW4uc3BsaXQoXCJAXCIpO1xuICAgIGlmIChjcmVkZW50aWFscy5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgIC8vIEJhc2ljIEF1dGhcbiAgICAgIGNvbnN0IGVuY29kZWRDcmVkZW50aWFscyA9IGJ0b2EoY3JlZGVudGlhbHMpO1xuICAgICAgdG9rZW5zLnNldChob3N0LCBgQmFzaWMgJHtlbmNvZGVkQ3JlZGVudGlhbHN9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJlYXJlciBUb2tlblxuICAgICAgdG9rZW5zLnNldChob3N0LCBgQmVhcmVyICR7Y3JlZGVudGlhbHN9YCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IHRva2VucyB9O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsR0FBRyxRQUFRLFdBQVc7QUFFL0IsTUFBTSxTQUFTLElBQUk7QUFDbkIsTUFBTSxpQkFBaUIsSUFBWTtBQUNuQyxJQUFJLGdCQUFnQjtFQUNsQixNQUFNLGFBQWEsZUFBZSxLQUFLLENBQUM7RUFDeEMsS0FBSyxNQUFNLFNBQVMsV0FBWTtJQUM5QixNQUFNLENBQUMsYUFBYSxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUM7SUFDeEMsSUFBSSxZQUFZLFFBQVEsQ0FBQyxNQUFNO01BQzdCLGFBQWE7TUFDYixNQUFNLHFCQUFxQixLQUFLO01BQ2hDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsb0JBQW9CO0lBQ2hELE9BQU87TUFDTCxlQUFlO01BQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhO0lBQzFDO0VBQ0Y7QUFDRjtBQUVBLFNBQVMsTUFBTSxHQUFHIn0=
+// denoCacheMetadata=8669114297459462885,17655648918300477460 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/17eee7a04f7e632433840cbea3e2ed1f30c66687b7b96c2c9508c10c08be78ea.js b/vendor/gen/https/deno.land/17eee7a04f7e632433840cbea3e2ed1f30c66687b7b96c2c9508c10c08be78ea.js
new file mode 100644
index 0000000..a405b26
--- /dev/null
+++ b/vendor/gen/https/deno.land/17eee7a04f7e632433840cbea3e2ed1f30c66687b7b96c2c9508c10c08be78ea.js
@@ -0,0 +1,69 @@
+import { posix } from "../../deps/path.ts";
+import { getExtension, normalizePath } from "./path.ts";
+/** Returns a function to filter the 404 page */ export function filter404page(page404) {
+ const url404 = page404 ? normalizePath(page404) : undefined;
+ return url404 ? (data)=>data.url !== url404 : ()=>true;
+}
+/** Returns the final part of a url */ export function getBasename(url) {
+ if (url === "/") {
+ return "";
+ }
+ if (url.endsWith("/")) {
+ return posix.basename(url);
+ }
+ return posix.basename(url, getExtension(url));
+}
+/** Returns the final URL assigned to a page */ export function getPageUrl(page, prettyUrls, parentPath, destination) {
+ const data = page.data;
+ let { url } = data;
+ if (url === false) {
+ return false;
+ }
+ if (typeof url === "function") {
+ page.data.url = getDefaultUrl(page.data.basename, parentPath, prettyUrls);
+ url = url(page);
+ }
+ if (url === false) {
+ return false;
+ }
+ if (typeof url === "string") {
+ // Relative URL
+ if (url.startsWith("./") || url.startsWith("../")) {
+ return normalizeUrl(posix.join(parentPath, url));
+ }
+ if (url.startsWith("/")) {
+ return normalizeUrl(url);
+ }
+ throw new Error(`The url variable for the page ${page.sourcePath} (${url}) must start with "/", "./" or "../" `);
+ }
+ // If the user has provided a value which hasn't yielded a string then it is an invalid url.
+ if (url !== undefined) {
+ throw new Error(`The url variable for the page ${page.sourcePath} is not correct. If specified, it should either be a string, or a function which returns a string. The provided url is of type: ${typeof url}.`);
+ }
+ if (typeof destination === "string") {
+ return normalizeUrl(destination);
+ }
+ const defaultUrl = getDefaultUrl(String(page.data.basename), parentPath, prettyUrls);
+ return destination ? destination(defaultUrl) : defaultUrl;
+}
+/** Returns the default URL for a page */ function getDefaultUrl(basename, parentPath, prettyUrls) {
+ // Calculate the URL from the path
+ const url = posix.join(parentPath, basename);
+ // Pretty URLs affects to all pages but 404
+ if (prettyUrls && url !== "/404") {
+ if (posix.basename(url) === "index") {
+ return posix.join(posix.dirname(url), "/");
+ }
+ return posix.join(url, "/");
+ }
+ return `${url}.html`;
+}
+/** Remove the /index.html part if exist and replace spaces */ function normalizeUrl(url) {
+ url = encodeURI(url);
+ if (url.endsWith("/index.html")) {
+ return url.slice(0, -10);
+ }
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9wYWdlX3VybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCB9IGZyb20gXCIuLi8uLi9kZXBzL3BhdGgudHNcIjtcbmltcG9ydCB7IGdldEV4dGVuc2lvbiwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCIuL3BhdGgudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBEZXN0aW5hdGlvbiB9IGZyb20gXCIuLi9zb3VyY2UudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YSwgUGFnZSwgUmF3RGF0YSB9IGZyb20gXCIuLi9maWxlLnRzXCI7XG5cbi8qKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gZmlsdGVyIHRoZSA0MDQgcGFnZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjQwNHBhZ2UocGFnZTQwND86IHN0cmluZyk6IChwYWdlOiBEYXRhKSA9PiBib29sZWFuIHtcbiAgY29uc3QgdXJsNDA0ID0gcGFnZTQwNCA/IG5vcm1hbGl6ZVBhdGgocGFnZTQwNCkgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHVybDQwNCA/IChkYXRhOiBEYXRhKSA9PiBkYXRhLnVybCAhPT0gdXJsNDA0IDogKCkgPT4gdHJ1ZTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGZpbmFsIHBhcnQgb2YgYSB1cmwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlbmFtZSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh1cmwgPT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBpZiAodXJsLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgIHJldHVybiBwb3NpeC5iYXNlbmFtZSh1cmwpO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l4LmJhc2VuYW1lKHVybCwgZ2V0RXh0ZW5zaW9uKHVybCkpO1xufVxuXG4vKiogUmV0dXJucyB0aGUgZmluYWwgVVJMIGFzc2lnbmVkIHRvIGEgcGFnZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VVcmwoXG4gIHBhZ2U6IFBhZ2UsXG4gIHByZXR0eVVybHM6IGJvb2xlYW4sXG4gIHBhcmVudFBhdGg6IHN0cmluZyxcbiAgZGVzdGluYXRpb24/OiBEZXN0aW5hdGlvbiB8IHN0cmluZyxcbik6IHN0cmluZyB8IGZhbHNlIHtcbiAgY29uc3QgZGF0YSA9IHBhZ2UuZGF0YSBhcyBSYXdEYXRhO1xuICBsZXQgeyB1cmwgfSA9IGRhdGE7XG5cbiAgaWYgKHVybCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHVybCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcGFnZS5kYXRhLnVybCA9IGdldERlZmF1bHRVcmwocGFnZS5kYXRhLmJhc2VuYW1lLCBwYXJlbnRQYXRoLCBwcmV0dHlVcmxzKTtcbiAgICB1cmwgPSB1cmwocGFnZSk7XG4gIH1cblxuICBpZiAodXJsID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gUmVsYXRpdmUgVVJMXG4gICAgaWYgKHVybC5zdGFydHNXaXRoKFwiLi9cIikgfHwgdXJsLnN0YXJ0c1dpdGgoXCIuLi9cIikpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVVcmwocG9zaXguam9pbihwYXJlbnRQYXRoLCB1cmwpKTtcbiAgICB9XG5cbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplVXJsKHVybCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSB1cmwgdmFyaWFibGUgZm9yIHRoZSBwYWdlICR7cGFnZS5zb3VyY2VQYXRofSAoJHt1cmx9KSBtdXN0IHN0YXJ0IHdpdGggXCIvXCIsIFwiLi9cIiBvciBcIi4uL1wiIGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCBhIHZhbHVlIHdoaWNoIGhhc24ndCB5aWVsZGVkIGEgc3RyaW5nIHRoZW4gaXQgaXMgYW4gaW52YWxpZCB1cmwuXG4gIGlmICh1cmwgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgdXJsIHZhcmlhYmxlIGZvciB0aGUgcGFnZSAke3BhZ2Uuc291cmNlUGF0aH0gaXMgbm90IGNvcnJlY3QuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGVpdGhlciBiZSBhIHN0cmluZywgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgc3RyaW5nLiBUaGUgcHJvdmlkZWQgdXJsIGlzIG9mIHR5cGU6ICR7dHlwZW9mIHVybH0uYCxcbiAgICApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkZXN0aW5hdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBub3JtYWxpemVVcmwoZGVzdGluYXRpb24pO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdFVybCA9IGdldERlZmF1bHRVcmwoXG4gICAgU3RyaW5nKHBhZ2UuZGF0YS5iYXNlbmFtZSksXG4gICAgcGFyZW50UGF0aCxcbiAgICBwcmV0dHlVcmxzLFxuICApO1xuICByZXR1cm4gZGVzdGluYXRpb24gPyBkZXN0aW5hdGlvbihkZWZhdWx0VXJsKSA6IGRlZmF1bHRVcmw7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBkZWZhdWx0IFVSTCBmb3IgYSBwYWdlICovXG5mdW5jdGlvbiBnZXREZWZhdWx0VXJsKFxuICBiYXNlbmFtZTogc3RyaW5nLFxuICBwYXJlbnRQYXRoOiBzdHJpbmcsXG4gIHByZXR0eVVybHM6IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICAvLyBDYWxjdWxhdGUgdGhlIFVSTCBmcm9tIHRoZSBwYXRoXG4gIGNvbnN0IHVybCA9IHBvc2l4LmpvaW4ocGFyZW50UGF0aCwgYmFzZW5hbWUpO1xuXG4gIC8vIFByZXR0eSBVUkxzIGFmZmVjdHMgdG8gYWxsIHBhZ2VzIGJ1dCA0MDRcbiAgaWYgKHByZXR0eVVybHMgJiYgdXJsICE9PSBcIi80MDRcIikge1xuICAgIGlmIChwb3NpeC5iYXNlbmFtZSh1cmwpID09PSBcImluZGV4XCIpIHtcbiAgICAgIHJldHVybiBwb3NpeC5qb2luKHBvc2l4LmRpcm5hbWUodXJsKSwgXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcG9zaXguam9pbih1cmwsIFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBgJHt1cmx9Lmh0bWxgO1xufVxuXG4vKiogUmVtb3ZlIHRoZSAvaW5kZXguaHRtbCBwYXJ0IGlmIGV4aXN0IGFuZCByZXBsYWNlIHNwYWNlcyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdXJsID0gZW5jb2RlVVJJKHVybCk7XG5cbiAgaWYgKHVybC5lbmRzV2l0aChcIi9pbmRleC5odG1sXCIpKSB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgwLCAtMTApO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQUssUUFBUSxxQkFBcUI7QUFDM0MsU0FBUyxZQUFZLEVBQUUsYUFBYSxRQUFRLFlBQVk7QUFLeEQsOENBQThDLEdBQzlDLE9BQU8sU0FBUyxjQUFjLE9BQWdCO0VBQzVDLE1BQU0sU0FBUyxVQUFVLGNBQWMsV0FBVztFQUVsRCxPQUFPLFNBQVMsQ0FBQyxPQUFlLEtBQUssR0FBRyxLQUFLLFNBQVMsSUFBTTtBQUM5RDtBQUVBLG9DQUFvQyxHQUNwQyxPQUFPLFNBQVMsWUFBWSxHQUFXO0VBQ3JDLElBQUksUUFBUSxLQUFLO0lBQ2YsT0FBTztFQUNUO0VBRUEsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNO0lBQ3JCLE9BQU8sTUFBTSxRQUFRLENBQUM7RUFDeEI7RUFFQSxPQUFPLE1BQU0sUUFBUSxDQUFDLEtBQUssYUFBYTtBQUMxQztBQUVBLDZDQUE2QyxHQUM3QyxPQUFPLFNBQVMsV0FDZCxJQUFVLEVBQ1YsVUFBbUIsRUFDbkIsVUFBa0IsRUFDbEIsV0FBa0M7RUFFbEMsTUFBTSxPQUFPLEtBQUssSUFBSTtFQUN0QixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUc7RUFFZCxJQUFJLFFBQVEsT0FBTztJQUNqQixPQUFPO0VBQ1Q7RUFFQSxJQUFJLE9BQU8sUUFBUSxZQUFZO0lBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxjQUFjLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZO0lBQzlELE1BQU0sSUFBSTtFQUNaO0VBRUEsSUFBSSxRQUFRLE9BQU87SUFDakIsT0FBTztFQUNUO0VBRUEsSUFBSSxPQUFPLFFBQVEsVUFBVTtJQUMzQixlQUFlO0lBQ2YsSUFBSSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFFBQVE7TUFDakQsT0FBTyxhQUFhLE1BQU0sSUFBSSxDQUFDLFlBQVk7SUFDN0M7SUFFQSxJQUFJLElBQUksVUFBVSxDQUFDLE1BQU07TUFDdkIsT0FBTyxhQUFhO0lBQ3RCO0lBRUEsTUFBTSxJQUFJLE1BQ1IsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxxQ0FBcUMsQ0FBQztFQUVuRztFQUVBLDRGQUE0RjtFQUM1RixJQUFJLFFBQVEsV0FBVztJQUNyQixNQUFNLElBQUksTUFDUixDQUFDLDhCQUE4QixFQUFFLEtBQUssVUFBVSxDQUFDLGdJQUFnSSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7RUFFcE07RUFFQSxJQUFJLE9BQU8sZ0JBQWdCLFVBQVU7SUFDbkMsT0FBTyxhQUFhO0VBQ3RCO0VBRUEsTUFBTSxhQUFhLGNBQ2pCLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxHQUN6QixZQUNBO0VBRUYsT0FBTyxjQUFjLFlBQVksY0FBYztBQUNqRDtBQUVBLHVDQUF1QyxHQUN2QyxTQUFTLGNBQ1AsUUFBZ0IsRUFDaEIsVUFBa0IsRUFDbEIsVUFBbUI7RUFFbkIsa0NBQWtDO0VBQ2xDLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQyxZQUFZO0VBRW5DLDJDQUEyQztFQUMzQyxJQUFJLGNBQWMsUUFBUSxRQUFRO0lBQ2hDLElBQUksTUFBTSxRQUFRLENBQUMsU0FBUyxTQUFTO01BQ25DLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsTUFBTTtJQUN4QztJQUNBLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSztFQUN6QjtFQUVBLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQztBQUN0QjtBQUVBLDREQUE0RCxHQUM1RCxTQUFTLGFBQWEsR0FBVztFQUMvQixNQUFNLFVBQVU7RUFFaEIsSUFBSSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0I7SUFDL0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDdkI7RUFFQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=9955320969880172011,3535195372225597886 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/17fe72dfaa9d1191231a593f549925f2bbf57f9dc3a4f5bbc09916b5ec8f8e36.js b/vendor/gen/https/deno.land/17fe72dfaa9d1191231a593f549925f2bbf57f9dc3a4f5bbc09916b5ec8f8e36.js
new file mode 100644
index 0000000..f205c12
--- /dev/null
+++ b/vendor/gen/https/deno.land/17fe72dfaa9d1191231a593f549925f2bbf57f9dc3a4f5bbc09916b5ec8f8e36.js
@@ -0,0 +1,25 @@
+import { Type } from "../type.ts";
+import { InvalidTypeError } from "../../flags/_errors.ts";
+/** Enum type. Allows only provided values. */ export class EnumType extends Type {
+ allowedValues;
+ constructor(values){
+ super();
+ this.allowedValues = Array.isArray(values) ? values : Object.values(values);
+ }
+ parse(type) {
+ for (const value of this.allowedValues){
+ if (value.toString() === type.value) {
+ return value;
+ }
+ }
+ throw new InvalidTypeError(type, this.allowedValues.slice());
+ }
+ values() {
+ return this.allowedValues.slice();
+ }
+ complete() {
+ return this.values();
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9lbnVtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudFZhbHVlIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBJbnZhbGlkVHlwZUVycm9yIH0gZnJvbSBcIi4uLy4uL2ZsYWdzL19lcnJvcnMudHNcIjtcblxuLyoqIEVudW0gdHlwZS4gQWxsb3dzIG9ubHkgcHJvdmlkZWQgdmFsdWVzLiAqL1xuZXhwb3J0IGNsYXNzIEVudW1UeXBlPFRWYWx1ZSBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+XG4gIGV4dGVuZHMgVHlwZTxUVmFsdWU+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkVmFsdWVzOiBSZWFkb25seUFycmF5PFRWYWx1ZT47XG5cbiAgY29uc3RydWN0b3IodmFsdWVzOiBSZWFkb25seUFycmF5PFRWYWx1ZT4gfCBSZWNvcmQ8c3RyaW5nLCBUVmFsdWU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFsbG93ZWRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBPYmplY3QudmFsdWVzKHZhbHVlcyk7XG4gIH1cblxuICBwdWJsaWMgcGFyc2UodHlwZTogQXJndW1lbnRWYWx1ZSk6IFRWYWx1ZSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLmFsbG93ZWRWYWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpID09PSB0eXBlLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgSW52YWxpZFR5cGVFcnJvcih0eXBlLCB0aGlzLmFsbG93ZWRWYWx1ZXMuc2xpY2UoKSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgdmFsdWVzKCk6IEFycmF5PFRWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRWYWx1ZXMuc2xpY2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb21wbGV0ZSgpOiBBcnJheTxUVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxRQUFRLGFBQWE7QUFFbEMsU0FBUyxnQkFBZ0IsUUFBUSx5QkFBeUI7QUFFMUQsNENBQTRDLEdBQzVDLE9BQU8sTUFBTSxpQkFDSDtFQUNTLGNBQXFDO0VBRXRELFlBQVksTUFBc0QsQ0FBRTtJQUNsRSxLQUFLO0lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLFNBQVMsT0FBTyxNQUFNLENBQUM7RUFDdEU7RUFFTyxNQUFNLElBQW1CLEVBQVU7SUFDeEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBRTtNQUN0QyxJQUFJLE1BQU0sUUFBUSxPQUFPLEtBQUssS0FBSyxFQUFFO1FBQ25DLE9BQU87TUFDVDtJQUNGO0lBRUEsTUFBTSxJQUFJLGlCQUFpQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztFQUMzRDtFQUVnQixTQUF3QjtJQUN0QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztFQUNqQztFQUVnQixXQUEwQjtJQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNO0VBQ3BCO0FBQ0YifQ==
+// denoCacheMetadata=7392067051627461164,13160157504860024976 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/18e400968e65abc09c92e8e9b2fc538d234085ece6db8db98e7d18e2c627af63.js b/vendor/gen/https/deno.land/18e400968e65abc09c92e8e9b2fc538d234085ece6db8db98e7d18e2c627af63.js
new file mode 100644
index 0000000..c2be92d
--- /dev/null
+++ b/vendor/gen/https/deno.land/18e400968e65abc09c92e8e9b2fc538d234085ece6db8db98e7d18e2c627af63.js
@@ -0,0 +1,44 @@
+export const defaultTags = [
+ ">",
+ "#",
+ "set",
+ "/set",
+ "if",
+ "/if",
+ "else",
+ "for",
+ "/for",
+ "function",
+ "async",
+ "/function",
+ "export",
+ "/export",
+ "import"
+];
+export default function(options = {
+ tags: defaultTags
+}) {
+ return (env)=>{
+ env.tokenPreprocessors.push((_, tokens)=>autoTrim(tokens, options));
+ };
+}
+export function autoTrim(tokens, options) {
+ for(let i = 0; i < tokens.length; i++){
+ const previous = tokens[i - 1];
+ const token = tokens[i];
+ const next = tokens[i + 1];
+ const [type, code] = token;
+ if (type === "tag" && options.tags.find((tag)=>code.startsWith(tag))) {
+ // Remove leading horizontal space
+ previous[1] = previous[1].replace(/[ \t]*$/, "");
+ // Remove trailing horizontal space + newline
+ if (next) {
+ next[1] = next[1].replace(/^[ \t]*(?:\r\n|\n)/, "");
+ }
+ } else if (type === "comment") {
+ previous[1] = previous[1].replace(/(?:\r\n|\n)[ \t]*$/, "");
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2F1dG9fdHJpbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4uL3NyYy90b2tlbml6ZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUYWdzID0gW1xuICBcIj5cIixcbiAgXCIjXCIsXG4gIFwic2V0XCIsXG4gIFwiL3NldFwiLFxuICBcImlmXCIsXG4gIFwiL2lmXCIsXG4gIFwiZWxzZVwiLFxuICBcImZvclwiLFxuICBcIi9mb3JcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImFzeW5jXCIsXG4gIFwiL2Z1bmN0aW9uXCIsXG4gIFwiZXhwb3J0XCIsXG4gIFwiL2V4cG9ydFwiLFxuICBcImltcG9ydFwiLFxuXTtcblxuZXhwb3J0IHR5cGUgQXV0b1RyaW1PcHRpb25zID0geyB0YWdzOiBzdHJpbmdbXSB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoXG4gIG9wdGlvbnM6IEF1dG9UcmltT3B0aW9ucyA9IHsgdGFnczogZGVmYXVsdFRhZ3MgfSxcbik6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIGVudi50b2tlblByZXByb2Nlc3NvcnMucHVzaCgoXywgdG9rZW5zKSA9PiBhdXRvVHJpbSh0b2tlbnMsIG9wdGlvbnMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG9UcmltKHRva2VuczogVG9rZW5bXSwgb3B0aW9uczogQXV0b1RyaW1PcHRpb25zKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0b2tlbnNbaSAtIDFdO1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldO1xuICAgIGNvbnN0IG5leHQgPSB0b2tlbnNbaSArIDFdO1xuXG4gICAgY29uc3QgW3R5cGUsIGNvZGVdID0gdG9rZW47XG5cbiAgICBpZiAodHlwZSA9PT0gXCJ0YWdcIiAmJiBvcHRpb25zLnRhZ3MuZmluZCgodGFnKSA9PiBjb2RlLnN0YXJ0c1dpdGgodGFnKSkpIHtcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGhvcml6b250YWwgc3BhY2VcbiAgICAgIHByZXZpb3VzWzFdID0gcHJldmlvdXNbMV0ucmVwbGFjZSgvWyBcXHRdKiQvLCBcIlwiKTtcblxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIGhvcml6b250YWwgc3BhY2UgKyBuZXdsaW5lXG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBuZXh0WzFdID0gbmV4dFsxXS5yZXBsYWNlKC9eWyBcXHRdKig/OlxcclxcbnxcXG4pLywgXCJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImNvbW1lbnRcIikge1xuICAgICAgcHJldmlvdXNbMV0gPSBwcmV2aW91c1sxXS5yZXBsYWNlKC8oPzpcXHJcXG58XFxuKVsgXFx0XSokLywgXCJcIik7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxNQUFNLGNBQWM7RUFDekI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0QsQ0FBQztBQUlGLGVBQWUsU0FDYixVQUEyQjtFQUFFLE1BQU07QUFBWSxDQUFDO0VBRWhELE9BQU8sQ0FBQztJQUNOLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFXLFNBQVMsUUFBUTtFQUM5RDtBQUNGO0FBRUEsT0FBTyxTQUFTLFNBQVMsTUFBZSxFQUFFLE9BQXdCO0VBQ2hFLElBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxPQUFPLE1BQU0sRUFBRSxJQUFLO0lBQ3RDLE1BQU0sV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFO0lBQzlCLE1BQU0sUUFBUSxNQUFNLENBQUMsRUFBRTtJQUN2QixNQUFNLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRTtJQUUxQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFFckIsSUFBSSxTQUFTLFNBQVMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBUSxLQUFLLFVBQVUsQ0FBQyxPQUFPO01BQ3RFLGtDQUFrQztNQUNsQyxRQUFRLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVc7TUFFN0MsNkNBQTZDO01BQzdDLElBQUksTUFBTTtRQUNSLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCO01BQ2xEO0lBQ0YsT0FBTyxJQUFJLFNBQVMsV0FBVztNQUM3QixRQUFRLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLHNCQUFzQjtJQUMxRDtFQUNGO0FBQ0YifQ==
+// denoCacheMetadata=165110764992329799,15214479482713827501 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/1cf158f4e836587419b228a6946abc0a57c1d72ba3cea0824c8654aa850e77f0.js b/vendor/gen/https/deno.land/1cf158f4e836587419b228a6946abc0a57c1d72ba3cea0824c8654aa850e77f0.js
new file mode 100644
index 0000000..627744b
--- /dev/null
+++ b/vendor/gen/https/deno.land/1cf158f4e836587419b228a6946abc0a57c1d72ba3cea0824c8654aa850e77f0.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/encoding@1.0.10/hex";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9oZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImpzcjpAc3RkL2VuY29kaW5nQDEuMC4xMC9oZXhcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQiJ9
+// denoCacheMetadata=13673458684599664053,4886244127072814137 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/1d586a2a460fc0ce582837f8f789bbf6031ac1ad0b1e56eb8cb0e5e3ffeaea43.js b/vendor/gen/https/deno.land/1d586a2a460fc0ce582837f8f789bbf6031ac1ad0b1e56eb8cb0e5e3ffeaea43.js
new file mode 100644
index 0000000..c9c3d45
--- /dev/null
+++ b/vendor/gen/https/deno.land/1d586a2a460fc0ce582837f8f789bbf6031ac1ad0b1e56eb8cb0e5e3ffeaea43.js
@@ -0,0 +1,15 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(echoTag);
+ };
+}
+function echoTag(env, code, output, tokens) {
+ if (!code.startsWith("echo ")) {
+ return;
+ }
+ const value = code.replace(/^echo\s+/, "");
+ const val = env.compileFilters(tokens, value, env.options.autoescape);
+ return `${output} += ${val};`;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2VjaG8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuLi9zcmMvdG9rZW5pemVyLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50LCBQbHVnaW4gfSBmcm9tIFwiLi4vc3JjL2Vudmlyb25tZW50LnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBQbHVnaW4ge1xuICByZXR1cm4gKGVudjogRW52aXJvbm1lbnQpID0+IHtcbiAgICBlbnYudGFncy5wdXNoKGVjaG9UYWcpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBlY2hvVGFnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjb2RlOiBzdHJpbmcsXG4gIG91dHB1dDogc3RyaW5nLFxuICB0b2tlbnM6IFRva2VuW10sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWNvZGUuc3RhcnRzV2l0aChcImVjaG8gXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdmFsdWUgPSBjb2RlLnJlcGxhY2UoL15lY2hvXFxzKy8sIFwiXCIpO1xuICBjb25zdCB2YWwgPSBlbnYuY29tcGlsZUZpbHRlcnModG9rZW5zLCB2YWx1ZSwgZW52Lm9wdGlvbnMuYXV0b2VzY2FwZSk7XG5cbiAgcmV0dXJuIGAke291dHB1dH0gKz0gJHt2YWx9O2A7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsZUFBZTtFQUNiLE9BQU8sQ0FBQztJQUNOLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUNoQjtBQUNGO0FBRUEsU0FBUyxRQUNQLEdBQWdCLEVBQ2hCLElBQVksRUFDWixNQUFjLEVBQ2QsTUFBZTtFQUVmLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQyxVQUFVO0lBQzdCO0VBQ0Y7RUFFQSxNQUFNLFFBQVEsS0FBSyxPQUFPLENBQUMsWUFBWTtFQUN2QyxNQUFNLE1BQU0sSUFBSSxjQUFjLENBQUMsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVU7RUFFcEUsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9CIn0=
+// denoCacheMetadata=15920853362610332307,17055562486665830648 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/1d6daf5bf2fec45795de5bad68fbda4684c225707be41cbcb7c028fb3c168fa7.js b/vendor/gen/https/deno.land/1d6daf5bf2fec45795de5bad68fbda4684c225707be41cbcb7c028fb3c168fa7.js
new file mode 100644
index 0000000..d0f2040
--- /dev/null
+++ b/vendor/gen/https/deno.land/1d6daf5bf2fec45795de5bad68fbda4684c225707be41cbcb7c028fb3c168fa7.js
@@ -0,0 +1,6 @@
+/**
+ * Symbols for using getElementsByTagName/ClassName on document-fragment
+ */ export const customByTagNameSym = Symbol();
+export const customByClassNameSym = Symbol();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3NlbGVjdG9ycy9jdXN0b20tYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3ltYm9scyBmb3IgdXNpbmcgZ2V0RWxlbWVudHNCeVRhZ05hbWUvQ2xhc3NOYW1lIG9uIGRvY3VtZW50LWZyYWdtZW50XG4gKi9cblxuZXhwb3J0IGNvbnN0IGN1c3RvbUJ5VGFnTmFtZVN5bSA9IFN5bWJvbCgpO1xuZXhwb3J0IGNvbnN0IGN1c3RvbUJ5Q2xhc3NOYW1lU3ltID0gU3ltYm9sKCk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0NBRUMsR0FFRCxPQUFPLE1BQU0scUJBQXFCLFNBQVM7QUFDM0MsT0FBTyxNQUFNLHVCQUF1QixTQUFTIn0=
+// denoCacheMetadata=903247193570706155,11963794454161240192 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/1e9ee246e74ed6bac55a3441b5778f2b5f332cae5eef297d4c4bdced80851920.js b/vendor/gen/https/deno.land/1e9ee246e74ed6bac55a3441b5778f2b5f332cae5eef297d4c4bdced80851920.js
new file mode 100644
index 0000000..457e74e
--- /dev/null
+++ b/vendor/gen/https/deno.land/1e9ee246e74ed6bac55a3441b5778f2b5f332cae5eef297d4c4bdced80851920.js
@@ -0,0 +1,115 @@
+import { didYouMeanOption, didYouMeanType, getFlag } from "./_utils.ts";
+export class FlagsError extends Error {
+ constructor(message){
+ super(message);
+ Object.setPrototypeOf(this, FlagsError.prototype);
+ }
+}
+export class UnknownRequiredOptionError extends FlagsError {
+ constructor(option, options){
+ super(`Unknown required option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
+ Object.setPrototypeOf(this, UnknownRequiredOptionError.prototype);
+ }
+}
+export class UnknownConflictingOptionError extends FlagsError {
+ constructor(option, options){
+ super(`Unknown conflicting option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
+ Object.setPrototypeOf(this, UnknownConflictingOptionError.prototype);
+ }
+}
+export class UnknownTypeError extends FlagsError {
+ constructor(type, types){
+ super(`Unknown type "${type}".${didYouMeanType(type, types)}`);
+ Object.setPrototypeOf(this, UnknownTypeError.prototype);
+ }
+}
+/* Validation errors. */ /**
+ * A validation error is thrown when the command is wrongly used by the user.
+ * For example: If the user passes some invalid options or arguments to the
+ * command.
+ */ export class ValidationError extends FlagsError {
+ constructor(message){
+ super(message);
+ Object.setPrototypeOf(this, ValidationError.prototype);
+ }
+}
+export class DuplicateOptionError extends ValidationError {
+ constructor(name){
+ super(`Option "${getFlag(name).replace(/^--no-/, "--")}" can only occur once, but was found several times.`);
+ Object.setPrototypeOf(this, DuplicateOptionError.prototype);
+ }
+}
+export class InvalidOptionError extends ValidationError {
+ constructor(option, options){
+ super(`Invalid option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
+ Object.setPrototypeOf(this, InvalidOptionError.prototype);
+ }
+}
+export class UnknownOptionError extends ValidationError {
+ constructor(option, options){
+ super(`Unknown option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
+ Object.setPrototypeOf(this, UnknownOptionError.prototype);
+ }
+}
+export class MissingOptionValueError extends ValidationError {
+ constructor(option){
+ super(`Missing value for option "${getFlag(option)}".`);
+ Object.setPrototypeOf(this, MissingOptionValueError.prototype);
+ }
+}
+export class InvalidOptionValueError extends ValidationError {
+ constructor(option, expected, value){
+ super(`Option "${getFlag(option)}" must be of type "${expected}", but got "${value}".`);
+ Object.setPrototypeOf(this, InvalidOptionValueError.prototype);
+ }
+}
+export class UnexpectedOptionValueError extends ValidationError {
+ constructor(option, value){
+ super(`Option "${getFlag(option)}" doesn't take a value, but got "${value}".`);
+ Object.setPrototypeOf(this, InvalidOptionValueError.prototype);
+ }
+}
+export class OptionNotCombinableError extends ValidationError {
+ constructor(option){
+ super(`Option "${getFlag(option)}" cannot be combined with other options.`);
+ Object.setPrototypeOf(this, OptionNotCombinableError.prototype);
+ }
+}
+export class ConflictingOptionError extends ValidationError {
+ constructor(option, conflictingOption){
+ super(`Option "${getFlag(option)}" conflicts with option "${getFlag(conflictingOption)}".`);
+ Object.setPrototypeOf(this, ConflictingOptionError.prototype);
+ }
+}
+export class DependingOptionError extends ValidationError {
+ constructor(option, dependingOption){
+ super(`Option "${getFlag(option)}" depends on option "${getFlag(dependingOption)}".`);
+ Object.setPrototypeOf(this, DependingOptionError.prototype);
+ }
+}
+export class MissingRequiredOptionError extends ValidationError {
+ constructor(option){
+ super(`Missing required option "${getFlag(option)}".`);
+ Object.setPrototypeOf(this, MissingRequiredOptionError.prototype);
+ }
+}
+export class UnexpectedRequiredArgumentError extends ValidationError {
+ constructor(arg){
+ super(`An required argument cannot follow an optional argument, but "${arg}" is defined as required.`);
+ Object.setPrototypeOf(this, UnexpectedRequiredArgumentError.prototype);
+ }
+}
+export class UnexpectedArgumentAfterVariadicArgumentError extends ValidationError {
+ constructor(arg){
+ super(`An argument cannot follow an variadic argument, but got "${arg}".`);
+ Object.setPrototypeOf(this, UnexpectedArgumentAfterVariadicArgumentError.prototype);
+ }
+}
+export class InvalidTypeError extends ValidationError {
+ constructor({ label, name, value, type }, expected){
+ super(`${label} "${name}" must be of type "${type}", but got "${value}".` + (expected ? ` Expected values: ${expected.map((value)=>`"${value}"`).join(", ")}` : ""));
+ Object.setPrototypeOf(this, MissingOptionValueError.prototype);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvX2Vycm9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaWRZb3VNZWFuT3B0aW9uLCBkaWRZb3VNZWFuVHlwZSwgZ2V0RmxhZyB9IGZyb20gXCIuL191dGlscy50c1wiO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudFZhbHVlLCBGbGFnT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBGbGFnc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgRmxhZ3NFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duUmVxdWlyZWRPcHRpb25FcnJvciBleHRlbmRzIEZsYWdzRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb246IHN0cmluZywgb3B0aW9uczogQXJyYXk8RmxhZ09wdGlvbnM+KSB7XG4gICAgc3VwZXIoXG4gICAgICBgVW5rbm93biByZXF1aXJlZCBvcHRpb24gXCIke2dldEZsYWcob3B0aW9uKX1cIi4ke1xuICAgICAgICBkaWRZb3VNZWFuT3B0aW9uKG9wdGlvbiwgb3B0aW9ucylcbiAgICAgIH1gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFVua25vd25SZXF1aXJlZE9wdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd25Db25mbGljdGluZ09wdGlvbkVycm9yIGV4dGVuZHMgRmxhZ3NFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbjogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxGbGFnT3B0aW9ucz4pIHtcbiAgICBzdXBlcihcbiAgICAgIGBVbmtub3duIGNvbmZsaWN0aW5nIG9wdGlvbiBcIiR7Z2V0RmxhZyhvcHRpb24pfVwiLiR7XG4gICAgICAgIGRpZFlvdU1lYW5PcHRpb24ob3B0aW9uLCBvcHRpb25zKVxuICAgICAgfWAsXG4gICAgKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVW5rbm93bkNvbmZsaWN0aW5nT3B0aW9uRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93blR5cGVFcnJvciBleHRlbmRzIEZsYWdzRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIHR5cGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgc3VwZXIoYFVua25vd24gdHlwZSBcIiR7dHlwZX1cIi4ke2RpZFlvdU1lYW5UeXBlKHR5cGUsIHR5cGVzKX1gKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVW5rbm93blR5cGVFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbi8qIFZhbGlkYXRpb24gZXJyb3JzLiAqL1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGUgY29tbWFuZCBpcyB3cm9uZ2x5IHVzZWQgYnkgdGhlIHVzZXIuXG4gKiBGb3IgZXhhbXBsZTogSWYgdGhlIHVzZXIgcGFzc2VzIHNvbWUgaW52YWxpZCBvcHRpb25zIG9yIGFyZ3VtZW50cyB0byB0aGVcbiAqIGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBGbGFnc0Vycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFZhbGlkYXRpb25FcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVPcHRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYE9wdGlvbiBcIiR7XG4gICAgICAgIGdldEZsYWcobmFtZSkucmVwbGFjZSgvXi0tbm8tLywgXCItLVwiKVxuICAgICAgfVwiIGNhbiBvbmx5IG9jY3VyIG9uY2UsIGJ1dCB3YXMgZm91bmQgc2V2ZXJhbCB0aW1lcy5gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIER1cGxpY2F0ZU9wdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRPcHRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbjogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxGbGFnT3B0aW9ucz4pIHtcbiAgICBzdXBlcihcbiAgICAgIGBJbnZhbGlkIG9wdGlvbiBcIiR7Z2V0RmxhZyhvcHRpb24pfVwiLiR7XG4gICAgICAgIGRpZFlvdU1lYW5PcHRpb24ob3B0aW9uLCBvcHRpb25zKVxuICAgICAgfWAsXG4gICAgKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZE9wdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd25PcHRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbjogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxGbGFnT3B0aW9ucz4pIHtcbiAgICBzdXBlcihcbiAgICAgIGBVbmtub3duIG9wdGlvbiBcIiR7Z2V0RmxhZyhvcHRpb24pfVwiLiR7XG4gICAgICAgIGRpZFlvdU1lYW5PcHRpb24ob3B0aW9uLCBvcHRpb25zKVxuICAgICAgfWAsXG4gICAgKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVW5rbm93bk9wdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pc3NpbmdPcHRpb25WYWx1ZUVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgTWlzc2luZyB2YWx1ZSBmb3Igb3B0aW9uIFwiJHtnZXRGbGFnKG9wdGlvbil9XCIuYCk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIE1pc3NpbmdPcHRpb25WYWx1ZUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRPcHRpb25WYWx1ZUVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uOiBzdHJpbmcsIGV4cGVjdGVkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBPcHRpb24gXCIke1xuICAgICAgICBnZXRGbGFnKG9wdGlvbilcbiAgICAgIH1cIiBtdXN0IGJlIG9mIHR5cGUgXCIke2V4cGVjdGVkfVwiLCBidXQgZ290IFwiJHt2YWx1ZX1cIi5gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEludmFsaWRPcHRpb25WYWx1ZUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRPcHRpb25WYWx1ZUVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBPcHRpb24gXCIke2dldEZsYWcob3B0aW9uKX1cIiBkb2Vzbid0IHRha2UgYSB2YWx1ZSwgYnV0IGdvdCBcIiR7dmFsdWV9XCIuYCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkT3B0aW9uVmFsdWVFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpb25Ob3RDb21iaW5hYmxlRXJyb3IgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb246IHN0cmluZykge1xuICAgIHN1cGVyKGBPcHRpb24gXCIke2dldEZsYWcob3B0aW9uKX1cIiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciBvcHRpb25zLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBPcHRpb25Ob3RDb21iaW5hYmxlRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RpbmdPcHRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbjogc3RyaW5nLCBjb25mbGljdGluZ09wdGlvbjogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBgT3B0aW9uIFwiJHtnZXRGbGFnKG9wdGlvbil9XCIgY29uZmxpY3RzIHdpdGggb3B0aW9uIFwiJHtcbiAgICAgICAgZ2V0RmxhZyhjb25mbGljdGluZ09wdGlvbilcbiAgICAgIH1cIi5gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIENvbmZsaWN0aW5nT3B0aW9uRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwZW5kaW5nT3B0aW9uRXJyb3IgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb246IHN0cmluZywgZGVwZW5kaW5nT3B0aW9uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBPcHRpb24gXCIke2dldEZsYWcob3B0aW9uKX1cIiBkZXBlbmRzIG9uIG9wdGlvbiBcIiR7XG4gICAgICAgIGdldEZsYWcoZGVwZW5kaW5nT3B0aW9uKVxuICAgICAgfVwiLmAsXG4gICAgKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgRGVwZW5kaW5nT3B0aW9uRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ1JlcXVpcmVkT3B0aW9uRXJyb3IgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb246IHN0cmluZykge1xuICAgIHN1cGVyKGBNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbiBcIiR7Z2V0RmxhZyhvcHRpb24pfVwiLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaXNzaW5nUmVxdWlyZWRPcHRpb25FcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkUmVxdWlyZWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoYXJnOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBBbiByZXF1aXJlZCBhcmd1bWVudCBjYW5ub3QgZm9sbG93IGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBidXQgXCIke2FyZ31cIiAgaXMgZGVmaW5lZCBhcyByZXF1aXJlZC5gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFxuICAgICAgdGhpcyxcbiAgICAgIFVuZXhwZWN0ZWRSZXF1aXJlZEFyZ3VtZW50RXJyb3IucHJvdG90eXBlLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRBcmd1bWVudEFmdGVyVmFyaWFkaWNBcmd1bWVudEVycm9yXG4gIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoYXJnOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgQW4gYXJndW1lbnQgY2Fubm90IGZvbGxvdyBhbiB2YXJpYWRpYyBhcmd1bWVudCwgYnV0IGdvdCBcIiR7YXJnfVwiLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihcbiAgICAgIHRoaXMsXG4gICAgICBVbmV4cGVjdGVkQXJndW1lbnRBZnRlclZhcmlhZGljQXJndW1lbnRFcnJvci5wcm90b3R5cGUsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFR5cGVFcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHsgbGFiZWwsIG5hbWUsIHZhbHVlLCB0eXBlIH06IEFyZ3VtZW50VmFsdWUsXG4gICAgZXhwZWN0ZWQ/OiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPixcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBgJHtsYWJlbH0gXCIke25hbWV9XCIgbXVzdCBiZSBvZiB0eXBlIFwiJHt0eXBlfVwiLCBidXQgZ290IFwiJHt2YWx1ZX1cIi5gICsgKFxuICAgICAgICBleHBlY3RlZFxuICAgICAgICAgID8gYCBFeHBlY3RlZCB2YWx1ZXM6ICR7XG4gICAgICAgICAgICBleHBlY3RlZC5tYXAoKHZhbHVlKSA9PiBgXCIke3ZhbHVlfVwiYCkuam9pbihcIiwgXCIpXG4gICAgICAgICAgfWBcbiAgICAgICAgICA6IFwiXCJcbiAgICAgICksXG4gICAgKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlzc2luZ09wdGlvblZhbHVlRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE9BQU8sUUFBUSxjQUFjO0FBR3hFLE9BQU8sTUFBTSxtQkFBbUI7RUFDOUIsWUFBWSxPQUFlLENBQUU7SUFDM0IsS0FBSyxDQUFDO0lBQ04sT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUztFQUNsRDtBQUNGO0FBRUEsT0FBTyxNQUFNLG1DQUFtQztFQUM5QyxZQUFZLE1BQWMsRUFBRSxPQUEyQixDQUFFO0lBQ3ZELEtBQUssQ0FDSCxDQUFDLHlCQUF5QixFQUFFLFFBQVEsUUFBUSxFQUFFLEVBQzVDLGlCQUFpQixRQUFRLFVBQ3pCO0lBRUosT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLDJCQUEyQixTQUFTO0VBQ2xFO0FBQ0Y7QUFFQSxPQUFPLE1BQU0sc0NBQXNDO0VBQ2pELFlB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
+// denoCacheMetadata=3478134091247672263,15991104039683507109 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/20bde93de9c94dedce9e9d77dcf3928866101dd1ee74aaf0af7561b5004b92f7.js b/vendor/gen/https/deno.land/20bde93de9c94dedce9e9d77dcf3928866101dd1ee74aaf0af7561b5004b92f7.js
new file mode 100644
index 0000000..78b6857
--- /dev/null
+++ b/vendor/gen/https/deno.land/20bde93de9c94dedce9e9d77dcf3928866101dd1ee74aaf0af7561b5004b92f7.js
@@ -0,0 +1,103 @@
+import { UnexpectedArgumentAfterVariadicArgumentError, UnexpectedRequiredArgumentError } from "../flags/_errors.ts";
+import { didYouMean } from "../flags/_utils.ts";
+import { OptionType } from "../flags/deprecated.ts";
+export function didYouMeanCommand(command, commands, excludes = []) {
+ const commandNames = commands.map((command)=>command.getName()).filter((command)=>!excludes.includes(command));
+ return didYouMean(" Did you mean command", command, commandNames);
+}
+const ARGUMENT_REGEX = /^[<\[].+[\]>]$/;
+const ARGUMENT_DETAILS_REGEX = /[<\[:>\]]/;
+/**
+ * Split options and arguments.
+ * @param args Arguments definition: `--color, -c <color1:string> <color2:string>`
+ *
+ * For example: `-c, --color <color1:string> <color2:string>`
+ *
+ * Will result in:
+ * ```
+ * {
+ * flags: [ "-c", "--color" ],
+ * typeDefinition: "<color1:string> <color2:string>"
+ * }
+ * ```
+ */ export function splitArguments(args) {
+ const parts = args.trim().split(/[, =] */g);
+ const typeParts = [];
+ while(parts[parts.length - 1] && ARGUMENT_REGEX.test(parts[parts.length - 1])){
+ typeParts.unshift(parts.pop());
+ }
+ const typeDefinition = typeParts.join(" ");
+ return {
+ flags: parts,
+ typeDefinition,
+ equalsSign: args.includes("=")
+ };
+}
+export function parseArgumentsDefinition(argsDefinition, validate = true, all) {
+ const argumentDetails = [];
+ let hasOptional = false;
+ let hasVariadic = false;
+ const parts = argsDefinition.split(/ +/);
+ for (const arg of parts){
+ if (validate && hasVariadic) {
+ throw new UnexpectedArgumentAfterVariadicArgumentError(arg);
+ }
+ const parts = arg.split(ARGUMENT_DETAILS_REGEX);
+ if (!parts[1]) {
+ if (all) {
+ argumentDetails.push(parts[0]);
+ }
+ continue;
+ }
+ const type = parts[2] || OptionType.STRING;
+ const details = {
+ optionalValue: arg[0] === "[",
+ requiredValue: arg[0] === "<",
+ name: parts[1],
+ action: parts[3] || type,
+ variadic: false,
+ list: type ? arg.indexOf(type + "[]") !== -1 : false,
+ type
+ };
+ if (validate && !details.optionalValue && hasOptional) {
+ throw new UnexpectedRequiredArgumentError(details.name);
+ }
+ if (arg[0] === "[") {
+ hasOptional = true;
+ }
+ if (details.name.length > 3) {
+ const istVariadicLeft = details.name.slice(0, 3) === "...";
+ const istVariadicRight = details.name.slice(-3) === "...";
+ hasVariadic = details.variadic = istVariadicLeft || istVariadicRight;
+ if (istVariadicLeft) {
+ details.name = details.name.slice(3);
+ } else if (istVariadicRight) {
+ details.name = details.name.slice(0, -3);
+ }
+ }
+ argumentDetails.push(details);
+ }
+ return argumentDetails;
+}
+export function dedent(str) {
+ const lines = str.split(/\r?\n|\r/g);
+ let text = "";
+ let indent = 0;
+ for (const line of lines){
+ if (text || line.trim()) {
+ if (!text) {
+ text = line.trimStart();
+ indent = line.length - text.length;
+ } else {
+ text += line.slice(indent);
+ }
+ text += "\n";
+ }
+ }
+ return text.trimEnd();
+}
+export function getDescription(description, short) {
+ return short ? description.trim().split("\n", 1)[0].trim() : dedent(description);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9fdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVW5leHBlY3RlZEFyZ3VtZW50QWZ0ZXJWYXJpYWRpY0FyZ3VtZW50RXJyb3IsXG4gIFVuZXhwZWN0ZWRSZXF1aXJlZEFyZ3VtZW50RXJyb3IsXG59IGZyb20gXCIuLi9mbGFncy9fZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBkaWRZb3VNZWFuIH0gZnJvbSBcIi4uL2ZsYWdzL191dGlscy50c1wiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi9mbGFncy9kZXByZWNhdGVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50IH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZFlvdU1lYW5Db21tYW5kKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGNvbW1hbmRzOiBBcnJheTxDb21tYW5kPixcbiAgZXhjbHVkZXM6IEFycmF5PHN0cmluZz4gPSBbXSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbW1hbmROYW1lcyA9IGNvbW1hbmRzXG4gICAgLm1hcCgoY29tbWFuZCkgPT4gY29tbWFuZC5nZXROYW1lKCkpXG4gICAgLmZpbHRlcigoY29tbWFuZCkgPT4gIWV4Y2x1ZGVzLmluY2x1ZGVzKGNvbW1hbmQpKTtcbiAgcmV0dXJuIGRpZFlvdU1lYW4oXCIgRGlkIHlvdSBtZWFuIGNvbW1hbmRcIiwgY29tbWFuZCwgY29tbWFuZE5hbWVzKTtcbn1cblxuY29uc3QgQVJHVU1FTlRfUkVHRVggPSAvXls8XFxbXS4rW1xcXT5dJC87XG5jb25zdCBBUkdVTUVOVF9ERVRBSUxTX1JFR0VYID0gL1s8XFxbOj5cXF1dLztcblxuaW50ZXJmYWNlIFNwbGl0QXJndW1lbnRzUmVzdWx0IHtcbiAgZmxhZ3M6IHN0cmluZ1tdO1xuICB0eXBlRGVmaW5pdGlvbjogc3RyaW5nO1xuICBlcXVhbHNTaWduOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNwbGl0IG9wdGlvbnMgYW5kIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyBkZWZpbml0aW9uOiBgLS1jb2xvciwgLWMgPGNvbG9yMTpzdHJpbmc+IDxjb2xvcjI6c3RyaW5nPmBcbiAqXG4gKiBGb3IgZXhhbXBsZTogYC1jLCAtLWNvbG9yIDxjb2xvcjE6c3RyaW5nPiA8Y29sb3IyOnN0cmluZz5gXG4gKlxuICogV2lsbCByZXN1bHQgaW46XG4gKiBgYGBcbiAqIHtcbiAqICAgZmxhZ3M6IFsgXCItY1wiLCBcIi0tY29sb3JcIiBdLFxuICogICB0eXBlRGVmaW5pdGlvbjogXCI8Y29sb3IxOnN0cmluZz4gPGNvbG9yMjpzdHJpbmc+XCJcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBcmd1bWVudHMoXG4gIGFyZ3M6IHN0cmluZyxcbik6IFNwbGl0QXJndW1lbnRzUmVzdWx0IHtcbiAgY29uc3QgcGFydHMgPSBhcmdzLnRyaW0oKS5zcGxpdCgvWywgPV0gKi9nKTtcbiAgY29uc3QgdHlwZVBhcnRzID0gW107XG5cbiAgd2hpbGUgKFxuICAgIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdICYmXG4gICAgQVJHVU1FTlRfUkVHRVgudGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSlcbiAgKSB7XG4gICAgdHlwZVBhcnRzLnVuc2hpZnQocGFydHMucG9wKCkpO1xuICB9XG5cbiAgY29uc3QgdHlwZURlZmluaXRpb246IHN0cmluZyA9IHR5cGVQYXJ0cy5qb2luKFwiIFwiKTtcblxuICByZXR1cm4geyBmbGFnczogcGFydHMsIHR5cGVEZWZpbml0aW9uLCBlcXVhbHNTaWduOiBhcmdzLmluY2x1ZGVzKFwiPVwiKSB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGFyZ3VtZW50cyBzdHJpbmcuXG4gKiBAcGFyYW0gYXJnc0RlZmluaXRpb24gQXJndW1lbnRzIGRlZmluaXRpb246IGA8Y29sb3IxOnN0cmluZz4gPGNvbG9yMjpzdHJpbmc+YFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmd1bWVudHNEZWZpbml0aW9uPFQgZXh0ZW5kcyBib29sZWFuPihcbiAgYXJnc0RlZmluaXRpb246IHN0cmluZyxcbiAgdmFsaWRhdGU6IGJvb2xlYW4sXG4gIGFsbDogdHJ1ZSxcbik6IEFycmF5PEFyZ3VtZW50IHwgc3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50c0RlZmluaXRpb248VCBleHRlbmRzIGJvb2xlYW4+KFxuICBhcmdzRGVmaW5pdGlvbjogc3RyaW5nLFxuICB2YWxpZGF0ZT86IGJvb2xlYW4sXG4gIGFsbD86IGZhbHNlLFxuKTogQXJyYXk8QXJndW1lbnQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzRGVmaW5pdGlvbjxUIGV4dGVuZHMgYm9vbGVhbj4oXG4gIGFyZ3NEZWZpbml0aW9uOiBzdHJpbmcsXG4gIHZhbGlkYXRlID0gdHJ1ZSxcbiAgYWxsPzogVCxcbik6IFQgZXh0ZW5kcyB0cnVlID8gQXJyYXk8QXJndW1lbnQgfCBzdHJpbmc+IDogQXJyYXk8QXJndW1lbnQ+IHtcbiAgY29uc3QgYXJndW1lbnREZXRhaWxzOiBBcnJheTxBcmd1bWVudCB8IHN0cmluZz4gPSBbXTtcblxuICBsZXQgaGFzT3B0aW9uYWwgPSBmYWxzZTtcbiAgbGV0IGhhc1ZhcmlhZGljID0gZmFsc2U7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IGFyZ3NEZWZpbml0aW9uLnNwbGl0KC8gKy8pO1xuXG4gIGZvciAoY29uc3QgYXJnIG9mIHBhcnRzKSB7XG4gICAgaWYgKHZhbGlkYXRlICYmIGhhc1ZhcmlhZGljKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFyZ3VtZW50QWZ0ZXJWYXJpYWRpY0FyZ3VtZW50RXJyb3IoYXJnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gYXJnLnNwbGl0KEFSR1VNRU5UX0RFVEFJTFNfUkVHRVgpO1xuXG4gICAgaWYgKCFwYXJ0c1sxXSkge1xuICAgICAgaWYgKGFsbCkge1xuICAgICAgICBhcmd1bWVudERldGFpbHMucHVzaChwYXJ0c1swXSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGFydHNbMl0gfHwgT3B0aW9uVHlwZS5TVFJJTkc7XG5cbiAgICBjb25zdCBkZXRhaWxzOiBBcmd1bWVudCA9IHtcbiAgICAgIG9wdGlvbmFsVmFsdWU6IGFyZ1swXSA9PT0gXCJbXCIsXG4gICAgICByZXF1aXJlZFZhbHVlOiBhcmdbMF0gPT09IFwiPFwiLFxuICAgICAgbmFtZTogcGFydHNbMV0sXG4gICAgICBhY3Rpb246IHBhcnRzWzNdIHx8IHR5cGUsXG4gICAgICB2YXJpYWRpYzogZmFsc2UsXG4gICAgICBsaXN0OiB0eXBlID8gYXJnLmluZGV4T2YodHlwZSArIFwiW11cIikgIT09IC0xIDogZmFsc2UsXG4gICAgICB0eXBlLFxuICAgIH07XG5cbiAgICBpZiAodmFsaWRhdGUgJiYgIWRldGFpbHMub3B0aW9uYWxWYWx1ZSAmJiBoYXNPcHRpb25hbCkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRSZXF1aXJlZEFyZ3VtZW50RXJyb3IoZGV0YWlscy5uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnWzBdID09PSBcIltcIikge1xuICAgICAgaGFzT3B0aW9uYWwgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLm5hbWUubGVuZ3RoID4gMykge1xuICAgICAgY29uc3QgaXN0VmFyaWFkaWNMZWZ0ID0gZGV0YWlscy5uYW1lLnNsaWNlKDAsIDMpID09PSBcIi4uLlwiO1xuICAgICAgY29uc3QgaXN0VmFyaWFkaWNSaWdodCA9IGRldGFpbHMubmFtZS5zbGljZSgtMykgPT09IFwiLi4uXCI7XG5cbiAgICAgIGhhc1ZhcmlhZGljID0gZGV0YWlscy52YXJpYWRpYyA9IGlzdFZhcmlhZGljTGVmdCB8fCBpc3RWYXJpYWRpY1JpZ2h0O1xuXG4gICAgICBpZiAoaXN0VmFyaWFkaWNMZWZ0KSB7XG4gICAgICAgIGRldGFpbHMubmFtZSA9IGRldGFpbHMubmFtZS5zbGljZSgzKTtcbiAgICAgIH0gZWxzZSBpZiAoaXN0VmFyaWFkaWNSaWdodCkge1xuICAgICAgICBkZXRhaWxzLm5hbWUgPSBkZXRhaWxzLm5hbWUuc2xpY2UoMCwgLTMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFyZ3VtZW50RGV0YWlscy5wdXNoKGRldGFpbHMpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3VtZW50RGV0YWlscyBhcyAoXG4gICAgVCBleHRlbmRzIHRydWUgPyBBcnJheTxBcmd1bWVudCB8IHN0cmluZz4gOiBBcnJheTxBcmd1bWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZGVudChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gc3RyLnNwbGl0KC9cXHI/XFxufFxcci9nKTtcbiAgbGV0IHRleHQgPSBcIlwiO1xuICBsZXQgaW5kZW50ID0gMDtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBpZiAodGV4dCB8fCBsaW5lLnRyaW0oKSkge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSBsaW5lLnRyaW1TdGFydCgpO1xuICAgICAgICBpbmRlbnQgPSBsaW5lLmxlbmd0aCAtIHRleHQubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBsaW5lLnNsaWNlKGluZGVudCk7XG4gICAgICB9XG4gICAgICB0ZXh0ICs9IFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRleHQudHJpbUVuZCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHNob3J0PzogYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIHJldHVybiBzaG9ydFxuICAgID8gZGVzY3JpcHRpb24udHJpbSgpLnNwbGl0KFwiXFxuXCIsIDEpWzBdLnRyaW0oKVxuICAgIDogZGVkZW50KGRlc2NyaXB0aW9uKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLDRDQUE0QyxFQUM1QywrQkFBK0IsUUFDMUIsc0JBQXNCO0FBQzdCLFNBQVMsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTLFVBQVUsUUFBUSx5QkFBeUI7QUFJcEQsT0FBTyxTQUFTLGtCQUNkLE9BQWUsRUFDZixRQUF3QixFQUN4QixXQUEwQixFQUFFO0VBRTVCLE1BQU0sZUFBZSxTQUNsQixHQUFHLENBQUMsQ0FBQyxVQUFZLFFBQVEsT0FBTyxJQUNoQyxNQUFNLENBQUMsQ0FBQyxVQUFZLENBQUMsU0FBUyxRQUFRLENBQUM7RUFDMUMsT0FBTyxXQUFXLHlCQUF5QixTQUFTO0FBQ3REO0FBRUEsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSx5QkFBeUI7QUFRL0I7Ozs7Ozs7Ozs7Ozs7Q0FhQyxHQUNELE9BQU8sU0FBUyxlQUNkLElBQVk7RUFFWixNQUFNLFFBQVEsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLE1BQU0sWUFBWSxFQUFFO0VBRXBCLE1BQ0UsS0FBSyxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFDdkIsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsRUFDM0M7SUFDQSxVQUFVLE9BQU8sQ0FBQyxNQUFNLEdBQUc7RUFDN0I7RUFFQSxNQUFNLGlCQUF5QixVQUFVLElBQUksQ0FBQztFQUU5QyxPQUFPO0lBQUUsT0FBTztJQUFPO0lBQWdCLFlBQVksS0FBSyxRQUFRLENBQUM7RUFBSztBQUN4RTtBQWdCQSxPQUFPLFNBQVMseUJBQ2QsY0FBc0IsRUFDdEIsV0FBVyxJQUFJLEVBQ2YsR0FBTztFQUVQLE1BQU0sa0JBQTRDLEVBQUU7RUFFcEQsSUFBSSxjQUFjO0VBQ2xCLElBQUksY0FBYztFQUNsQixNQUFNLFFBQWtCLGVBQWUsS0FBSyxDQUFDO0VBRTdDLEtBQUssTUFBTSxPQUFPLE1BQU87SUFDdkIsSUFBSSxZQUFZLGFBQWE7TUFDM0IsTUFBTSxJQUFJLDZDQUE2QztJQUN6RDtJQUNBLE1BQU0sUUFBa0IsSUFBSSxLQUFLLENBQUM7SUFFbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7TUFDYixJQUFJLEtBQUs7UUFDUCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO01BQy9CO01BQ0E7SUFDRjtJQUNBLE1BQU0sT0FBMkIsS0FBSyxDQUFDLEVBQUUsSUFBSSxXQUFXLE1BQU07SUFFOUQsTUFBTSxVQUFvQjtNQUN4QixlQUFlLEdBQUcsQ0FBQyxFQUFFLEtBQUs7TUFDMUIsZUFBZSxHQUFHLENBQUMsRUFBRSxLQUFLO01BQzFCLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDZCxRQUFRLEtBQUssQ0FBQyxFQUFFLElBQUk7TUFDcEIsVUFBVTtNQUNWLE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLFVBQVUsQ0FBQyxJQUFJO01BQy9DO0lBQ0Y7SUFFQSxJQUFJLFlBQVksQ0FBQyxRQUFRLGFBQWEsSUFBSSxhQUFhO01BQ3JELE1BQU0sSUFBSSxnQ0FBZ0MsUUFBUSxJQUFJO0lBQ3hEO0lBRUEsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEtBQUs7TUFDbEIsY0FBYztJQUNoQjtJQUVBLElBQUksUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUc7TUFDM0IsTUFBTSxrQkFBa0IsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTztNQUNyRCxNQUFNLG1CQUFtQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPO01BRXBELGNBQWMsUUFBUSxRQUFRLEdBQUcsbUJBQW1CO01BRXBELElBQUksaUJBQWlCO1FBQ25CLFFBQVEsSUFBSSxHQUFHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQztNQUNwQyxPQUFPLElBQUksa0JBQWtCO1FBQzNCLFFBQVEsSUFBSSxHQUFHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDeEM7SUFDRjtJQUVBLGdCQUFnQixJQUFJLENBQUM7RUFDdkI7RUFFQSxPQUFPO0FBR1Q7QUFFQSxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE1BQU0sUUFBUSxJQUFJLEtBQUssQ0FBQztFQUN4QixJQUFJLE9BQU87RUFDWCxJQUFJLFNBQVM7RUFFYixLQUFLLE1BQU0sUUFBUSxNQUFPO0lBQ3hCLElBQUksUUFBUSxLQUFLLElBQUksSUFBSTtNQUN2QixJQUFJLENBQUMsTUFBTTtRQUNULE9BQU8sS0FBSyxTQUFTO1FBQ3JCLFNBQVMsS0FBSyxNQUFNLEdBQUcsS0FBSyxNQUFNO01BQ3BDLE9BQU87UUFDTCxRQUFRLEtBQUssS0FBSyxDQUFDO01BQ3JCO01BQ0EsUUFBUTtJQUNWO0VBQ0Y7RUFFQSxPQUFPLEtBQUssT0FBTztBQUNyQjtBQUVBLE9BQU8sU0FBUyxlQUNkLFdBQW1CLEVBQ25CLEtBQWU7RUFFZixPQUFPLFFBQ0gsWUFBWSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQ3pDLE9BQU87QUFDYiJ9
+// denoCacheMetadata=4878635437097228381,7006901384097774764 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/20c89930f0236478b4864cc94b867208d4f0b3ed08ca929b6f406ba570b71130.js b/vendor/gen/https/deno.land/20c89930f0236478b4864cc94b867208d4f0b3ed08ca929b6f406ba570b71130.js
new file mode 100644
index 0000000..c72f1fc
--- /dev/null
+++ b/vendor/gen/https/deno.land/20c89930f0236478b4864cc94b867208d4f0b3ed08ca929b6f406ba570b71130.js
@@ -0,0 +1,131 @@
+import { posix } from "../deps/path.ts";
+import { documentToString, stringToDocument } from "./utils/dom.ts";
+import binaryLoader from "./loaders/binary.ts";
+import { decodeURIComponentSafe } from "./utils/path.ts";
+const decoder = new TextDecoder();
+const encoder = new TextEncoder();
+/** A page of the site */ export class Page {
+ /** The src info */ src;
+ /** Used to save the page data */ data = {};
+ /** Whether this page comes from a copied file with site.copy() */ isCopy = false;
+ /** The page content (string or Uint8Array) */ #content;
+ /** The parsed HTML (only for HTML documents) */ #document;
+ /** Convenient way to create a page dynamically */ static create(data, src) {
+ let { url, ...rest } = data;
+ const basename = posix.basename(url).replace(/\.[\w.]+$/, "");
+ const page = new Page(src);
+ if (url.endsWith("/index.html")) {
+ url = url.slice(0, -10);
+ }
+ page.data = {
+ ...rest,
+ url,
+ page,
+ basename
+ };
+ page.content = data.content;
+ return page;
+ }
+ constructor(src){
+ this.src = {
+ path: "",
+ ext: "",
+ ...src
+ };
+ }
+ /** Duplicate this page. */ duplicate(index, data) {
+ const page = new Page({
+ ...this.src
+ });
+ if (index !== undefined) {
+ page.src.path += `[${index}]`;
+ }
+ data.page = page;
+ page.data = data;
+ return page;
+ }
+ /** Returns the output path of this page */ get outputPath() {
+ const url = this.data.url;
+ const outputPath = url.endsWith("/") ? url + "index.html" : url;
+ return decodeURIComponentSafe(outputPath);
+ }
+ /** Returns the source path of this page */ get sourcePath() {
+ if (!this.src.path) {
+ return "(generated)";
+ }
+ return this.src.path + this.src.ext;
+ }
+ /** The content of this page */ set content(content) {
+ this.#document = undefined;
+ this.#content = content instanceof Uint8Array ? content : content && content.toString();
+ }
+ get content() {
+ if (this.#document) {
+ this.#content = documentToString(this.#document);
+ this.#document = undefined;
+ }
+ return this.#content;
+ }
+ /** The content of this page as text */ get text() {
+ return this.content instanceof Uint8Array ? decoder.decode(this.content) : this.content ?? "";
+ }
+ set text(text) {
+ this.content = text;
+ }
+ /** The content of this page as bytes */ get bytes() {
+ return this.content instanceof Uint8Array ? this.content : encoder.encode(this.content || "");
+ }
+ set bytes(bytes) {
+ this.content = bytes;
+ }
+ /** The parsed HTML code from the content */ set document(document) {
+ this.#content = undefined;
+ this.#document = document;
+ }
+ get document() {
+ if (!this.#document) {
+ this.#document = stringToDocument(this.text);
+ }
+ return this.#document;
+ }
+}
+export class StaticFile {
+ /** The src info */ src;
+ /** Used to save the contextual data */ data = {};
+ /** Whether this file must be copied with site.copy() */ isCopy = false;
+ static create(data, src) {
+ const file = new StaticFile(src);
+ file.data = {
+ ...data
+ };
+ return file;
+ }
+ constructor(src){
+ this.src = src;
+ }
+ async toPage() {
+ const { content } = await this.src.entry.getContent(binaryLoader);
+ const page = Page.create(this.data, this.src);
+ page.content = content;
+ page.isCopy = this.isCopy;
+ return page;
+ }
+ /** Returns the output path of this page */ get outputPath() {
+ return decodeURIComponentSafe(this.data.url);
+ }
+ /** Returns the source path of this page */ get sourcePath() {
+ if (!this.src.path) {
+ return "(generated)";
+ }
+ return this.src.path + this.src.ext;
+ }
+}
+/** Promote files to pages */ export async function filesToPages(files, pages, filter) {
+ const toRemove = files.filter(filter);
+ for (const file of toRemove){
+ pages.push(await file.toPage());
+ files.splice(files.indexOf(file), 1);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBvc2l4IH0gZnJvbSBcIi4uL2RlcHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgZG9jdW1lbnRUb1N0cmluZywgc3RyaW5nVG9Eb2N1bWVudCB9IGZyb20gXCIuL3V0aWxzL2RvbS50c1wiO1xuaW1wb3J0IGJpbmFyeUxvYWRlciBmcm9tIFwiLi9sb2FkZXJzL2JpbmFyeS50c1wiO1xuaW1wb3J0IHsgZGVjb2RlVVJJQ29tcG9uZW50U2FmZSB9IGZyb20gXCIuL3V0aWxzL3BhdGgudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBNZXJnZVN0cmF0ZWd5IH0gZnJvbSBcIi4vdXRpbHMvbWVyZ2VfZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBQcm94eUNvbXBvbmVudHMgfSBmcm9tIFwiLi9jb21wb25lbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVudHJ5IH0gZnJvbSBcIi4vZnMudHNcIjtcblxuY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKiogQSBwYWdlIG9mIHRoZSBzaXRlICovXG5leHBvcnQgY2xhc3MgUGFnZTxEIGV4dGVuZHMgRGF0YSA9IERhdGE+IHtcbiAgLyoqIFRoZSBzcmMgaW5mbyAqL1xuICBzcmM6IFNyYztcblxuICAvKiogVXNlZCB0byBzYXZlIHRoZSBwYWdlIGRhdGEgKi9cbiAgZGF0YTogRCA9IHt9IGFzIEQ7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBwYWdlIGNvbWVzIGZyb20gYSBjb3BpZWQgZmlsZSB3aXRoIHNpdGUuY29weSgpICovXG4gIGlzQ29weSA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgcGFnZSBjb250ZW50IChzdHJpbmcgb3IgVWludDhBcnJheSkgKi9cbiAgI2NvbnRlbnQ/OiBDb250ZW50O1xuXG4gIC8qKiBUaGUgcGFyc2VkIEhUTUwgKG9ubHkgZm9yIEhUTUwgZG9jdW1lbnRzKSAqL1xuICAjZG9jdW1lbnQ/OiBEb2N1bWVudDtcblxuICAvKiogQ29udmVuaWVudCB3YXkgdG8gY3JlYXRlIGEgcGFnZSBkeW5hbWljYWxseSAqL1xuICBzdGF0aWMgY3JlYXRlKFxuICAgIGRhdGE6IFBhcnRpYWw8RGF0YT4gJiB7IHVybDogc3RyaW5nIH0sXG4gICAgc3JjPzogUGFydGlhbDxTcmM+LFxuICApOiBQYWdlIHtcbiAgICBsZXQgeyB1cmwsIC4uLnJlc3QgfSA9IGRhdGE7XG4gICAgY29uc3QgYmFzZW5hbWUgPSBwb3NpeC5iYXNlbmFtZSh1cmwpLnJlcGxhY2UoL1xcLltcXHcuXSskLywgXCJcIik7XG4gICAgY29uc3QgcGFnZSA9IG5ldyBQYWdlKHNyYyk7XG5cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2luZGV4Lmh0bWxcIikpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCAtMTApO1xuICAgIH1cblxuICAgIHBhZ2UuZGF0YSA9IHsgLi4ucmVzdCwgdXJsLCBwYWdlLCBiYXNlbmFtZSB9IGFzIERhdGE7XG4gICAgcGFnZS5jb250ZW50ID0gZGF0YS5jb250ZW50IGFzIENvbnRlbnQgfCB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNyYz86IFBhcnRpYWw8U3JjPikge1xuICAgIHRoaXMuc3JjID0geyBwYXRoOiBcIlwiLCBleHQ6IFwiXCIsIC4uLnNyYyB9O1xuICB9XG5cbiAgLyoqIER1cGxpY2F0ZSB0aGlzIHBhZ2UuICovXG4gIGR1cGxpY2F0ZShpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLCBkYXRhOiBEKTogUGFnZTxEPiB7XG4gICAgY29uc3QgcGFnZSA9IG5ldyBQYWdlPEQ+KHsgLi4udGhpcy5zcmMgfSk7XG5cbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZS5zcmMucGF0aCArPSBgWyR7aW5kZXh9XWA7XG4gICAgfVxuXG4gICAgZGF0YS5wYWdlID0gcGFnZTtcbiAgICBwYWdlLmRhdGEgPSBkYXRhO1xuXG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgb3V0cHV0IHBhdGggb2YgdGhpcyBwYWdlICovXG4gIGdldCBvdXRwdXRQYXRoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5kYXRhLnVybDtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gdXJsLmVuZHNXaXRoKFwiL1wiKSA/IHVybCArIFwiaW5kZXguaHRtbFwiIDogdXJsO1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnRTYWZlKG91dHB1dFBhdGgpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNvdXJjZSBwYXRoIG9mIHRoaXMgcGFnZSAqL1xuICBnZXQgc291cmNlUGF0aCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zcmMucGF0aCkge1xuICAgICAgcmV0dXJuIFwiKGdlbmVyYXRlZClcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zcmMucGF0aCArIHRoaXMuc3JjLmV4dDtcbiAgfVxuXG4gIC8qKiBUaGUgY29udGVudCBvZiB0aGlzIHBhZ2UgKi9cbiAgc2V0IGNvbnRlbnQoY29udGVudDogQ29udGVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI2RvY3VtZW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI2NvbnRlbnQgPSBjb250ZW50IGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBjb250ZW50XG4gICAgICA6IGNvbnRlbnQgJiYgY29udGVudC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKTogQ29udGVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuI2RvY3VtZW50KSB7XG4gICAgICB0aGlzLiNjb250ZW50ID0gZG9jdW1lbnRUb1N0cmluZyh0aGlzLiNkb2N1bWVudCk7XG4gICAgICB0aGlzLiNkb2N1bWVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jY29udGVudDtcbiAgfVxuXG4gIC8qKiBUaGUgY29udGVudCBvZiB0aGlzIHBhZ2UgYXMgdGV4dCAqL1xuICBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5XG4gICAgICA/IGRlY29kZXIuZGVjb2RlKHRoaXMuY29udGVudClcbiAgICAgIDogdGhpcy5jb250ZW50ID8/IFwiXCI7XG4gIH1cblxuICBzZXQgdGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgLyoqIFRoZSBjb250ZW50IG9mIHRoaXMgcGFnZSBhcyBieXRlcyAqL1xuICBnZXQgYnl0ZXMoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgICAgID8gdGhpcy5jb250ZW50XG4gICAgICA6IGVuY29kZXIuZW5jb2RlKHRoaXMuY29udGVudCB8fCBcIlwiKTtcbiAgfVxuXG4gIHNldCBieXRlcyhieXRlczogVWludDhBcnJheSkge1xuICAgIHRoaXMuY29udGVudCA9IGJ5dGVzO1xuICB9XG5cbiAgLyoqIFRoZSBwYXJzZWQgSFRNTCBjb2RlIGZyb20gdGhlIGNvbnRlbnQgKi9cbiAgc2V0IGRvY3VtZW50KGRvY3VtZW50OiBEb2N1bWVudCkge1xuICAgIHRoaXMuI2NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4jZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudCB7XG4gICAgaWYgKCF0aGlzLiNkb2N1bWVudCkge1xuICAgICAgdGhpcy4jZG9jdW1lbnQgPSBzdHJpbmdUb0RvY3VtZW50KHRoaXMudGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2RvY3VtZW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNGaWxlPEQgZXh0ZW5kcyBEYXRhID0gRGF0YT4ge1xuICAvKiogVGhlIHNyYyBpbmZvICovXG4gIHNyYzogUmVxdWlyZWQ8U3JjPjtcblxuICAvKiogVXNlZCB0byBzYXZlIHRoZSBjb250ZXh0dWFsIGRhdGEgKi9cbiAgZGF0YTogRCA9IHt9IGFzIEQ7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBmaWxlIG11c3QgYmUgY29waWVkIHdpdGggc2l0ZS5jb3B5KCkgKi9cbiAgaXNDb3B5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGNyZWF0ZShcbiAgICBkYXRhOiBQYXJ0aWFsPERhdGE+ICYgeyB1cmw6IHN0cmluZyB9LFxuICAgIHNyYzogUmVxdWlyZWQ8U3JjPixcbiAgKTogU3RhdGljRmlsZSB7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBTdGF0aWNGaWxlKHNyYyk7XG4gICAgZmlsZS5kYXRhID0geyAuLi5kYXRhIH0gYXMgRGF0YTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNyYzogUmVxdWlyZWQ8U3JjPikge1xuICAgIHRoaXMuc3JjID0gc3JjO1xuICB9XG5cbiAgYXN5bmMgdG9QYWdlKCk6IFByb21pc2U8UGFnZT4ge1xuICAgIGNvbnN0IHsgY29udGVudCB9ID0gYXdhaXQgdGhpcy5zcmMuZW50cnkuZ2V0Q29udGVudChiaW5hcnlMb2FkZXIpO1xuICAgIGNvbnN0IHBhZ2UgPSBQYWdlLmNyZWF0ZSh0aGlzLmRhdGEsIHRoaXMuc3JjKTtcbiAgICBwYWdlLmNvbnRlbnQgPSBjb250ZW50IGFzIFVpbnQ4QXJyYXk7XG4gICAgcGFnZS5pc0NvcHkgPSB0aGlzLmlzQ29weTtcbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBvdXRwdXQgcGF0aCBvZiB0aGlzIHBhZ2UgKi9cbiAgZ2V0IG91dHB1dFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50U2FmZSh0aGlzLmRhdGEudXJsKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzb3VyY2UgcGF0aCBvZiB0aGlzIHBhZ2UgKi9cbiAgZ2V0IHNvdXJjZVBhdGgoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc3JjLnBhdGgpIHtcbiAgICAgIHJldHVybiBcIihnZW5lcmF0ZWQpXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3JjLnBhdGggKyB0aGlzLnNyYy5leHQ7XG4gIH1cbn1cblxuLyoqIFRoZSAuc3JjIHByb3BlcnR5IGZvciBhIFBhZ2Ugb3IgU3RhdGljRmlsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBTcmMge1xuICAvKiogVGhlIHBhdGggdG8gdGhlIGZpbGUgKHdpdGhvdXQgZXh0ZW5zaW9uKSAqL1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgKi9cbiAgZXh0OiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBvcmlnaW5hbCBlbnRyeSBpbnN0YW5jZSAqL1xuICBlbnRyeT86IEVudHJ5O1xufVxuXG4vKiogVGhlIC5jb250ZW50IHByb3BlcnR5IGZvciBhIFBhZ2UgKi9cbmV4cG9ydCB0eXBlIENvbnRlbnQgPSBVaW50OEFycmF5IHwgc3RyaW5nO1xuXG4vKiogVGhlIGRhdGEgb2YgYSBwYWdlIGRlY2xhcmVkIGluaXRpYWxseSAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXdEYXRhIHtcbiAgLyoqIExpc3Qgb2YgdGFncyBhc3NpZ25lZCB0byBhIHBhZ2Ugb3IgZm9sZGVyICovXG4gIHRhZ3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogVGhlIHVybCBvZiBhIHBhZ2UgKi9cbiAgdXJsPzogc3RyaW5nIHwgZmFsc2UgfCAoKHBhZ2U6IFBhZ2UpID0+IHN0cmluZyB8IGZhbHNlKTtcblxuICAvKiogVGhlIGJhc2VuYW1lIG9mIGEgcGFnZSAqL1xuICBiYXNlbmFtZT86IHN0cmluZztcblxuICAvKiogTWFyayB0aGUgcGFnZSBhcyBhIGRyYWZ0ICovXG4gIGRyYWZ0PzogYm9vbGVhbjtcblxuICAvKiogVGhlIGRhdGUgY3JlYXRpb24gb2YgdGhlIHBhZ2UgKi9cbiAgZGF0ZT86IERhdGUgfCBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqIFRvIGNvbmZpZ3VyZSB0aGUgcmVuZGVyaW5nIG9yZGVyIG9mIGEgcGFnZSAqL1xuICByZW5kZXJPcmRlcj86IG51bWJlcjtcblxuICAvKiogVGhlIHJhdyBjb250ZW50IG9mIGEgcGFnZSAqL1xuICBjb250ZW50PzogdW5rbm93bjtcblxuICAvKiogVGhlIGxheW91dCB1c2VkIHRvIHJlbmRlciBhIHBhZ2UgKi9cbiAgbGF5b3V0Pzogc3RyaW5nO1xuXG4gIC8qKiBUbyBjb25maWd1cmUgYSBkaWZmZXJlbnQgdGVtcGxhdGUgZW5naW5lKHMpIHRvIHJlbmRlciBhIHBhZ2UgKi9cbiAgdGVtcGxhdGVFbmdpbmU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogVG8gY29uZmlndXJlIGhvdyBzb21lIGRhdGEga2V5cyB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBwYXJlbnQgKi9cbiAgbWVyZ2VkS2V5cz86IFJlY29yZDxzdHJpbmcsIE1lcmdlU3RyYXRlZ3k+O1xuXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xufVxuXG4vKiogVGhlIGRhdGEgb2YgYSBwYWdlL2ZvbGRlciBvbmNlIGxvYWRlZCBhbmQgcHJvY2Vzc2VkICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGEgZXh0ZW5kcyBSYXdEYXRhIHtcbiAgLyoqIFRoZSB0aXRsZSBvZiB0aGUgcGFnZSAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKiogVGhlIHR5cGUgb2YgdGhlIHBhZ2UgKHVzZWQgdG8gZ3JvdXAgcGFnZXMgaW4gY29sbGVjdGlvbnMpICovXG4gIHR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBpZCBvZiB0aGUgcGFnZSAodXNlZCB0byBpZGVudGlmeSBhIHBhZ2UgaW4gYSBjb2xsZWN0aW9uKSAqL1xuICBpZD86IHN0cmluZyB8IG51bWJlcjtcblxuICAvKiogTGlzdCBvZiB0YWdzIGFzc2lnbmVkIHRvIGEgcGFnZSBvciBmb2xkZXIgKi9cbiAgdGFnczogc3RyaW5nW107XG5cbiAgLyoqIFRoZSB1cmwgb2YgYSBwYWdlICovXG4gIHVybDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgYmFzZW5hbWUgb2YgdGhlIHBhZ2UgKi9cbiAgYmFzZW5hbWU6IHN0cmluZztcblxuICAvKiogVGhlIGRhdGUgY3JlYXRpb24gb2YgdGhlIHBhZ2UgKi9cbiAgZGF0ZTogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJsZSBjb21wb25lbnRzXG4gICAqIEBzZWUgaHR0cHM6Ly9sdW1lLmxhbmQvZG9jcy9jb3JlL2NvbXBvbmVudHMvXG4gICAqL1xuICBjb21wOiBQcm94eUNvbXBvbmVudHM7XG5cbiAgLyoqIFRoZSBwYWdlIHJlZmVyZW5jZSAqL1xuICBwYWdlOiBQYWdlO1xuXG4gIC8qKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHBhZ2UgKi9cbiAgbGFuZz86IHN0cmluZztcblxuICAvKipcbiAgICogVW5tYXRjaGVkIExhbmd1YWdlIFVSTFxuICAgKiBUaGUgdXJsIGZvciB3aGVuIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgZG9lc24ndCBtYXRjaCB3aXRoIGFueSBvZiB0aGUgc2l0ZSdzIGF2YWlsYWJsZSBsYW5ndWFnZXMuXG4gICAqXG4gICAqIFZhbGlkIHZhbHVlcyBhcmU6XG4gICAqIC0gRXh0ZXJuYWwgVVJMIHN0cmluZyAoaHR0cCwgaHR0cHMpLCB3aGljaCBpcyBsYW5ndWFnZSBzZWxlY3RvciBwYWdlXG4gICAqIC0gU291cmNlIHBhdGggc3RyaW5nICgvKSwgd2hpY2ggaXMgbGFuZ3VhZ2Ugc2VsZWN0b3IgcGFnZVxuICAgKiAtIExhbmd1YWdlIGNvZGUgKGVuLCBnbCwgdmkpLCB3aGljaCBpcyBmYWxsYmFjayBsYW5ndWFnZSBwYWdlXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIG1hZGUgZm9yIHgtZGVmYXVsdCBmZWF0dXJlLlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NlYXJjaC9kb2NzL3NwZWNpYWx0eS9pbnRlcm5hdGlvbmFsL2xvY2FsaXplZC12ZXJzaW9ucyN4ZGVmYXVsdFxuICAgKi9cbiAgdW5tYXRjaGVkTGFuZ1VybD86IHN0cmluZztcblxuICAvKipcbiAgICogQWx0ZXJuYXRlIHBhZ2VzIChmb3IgbGFuZ3VhZ2VzKVxuICAgKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvbXVsdGlsYW5ndWFnZS9cbiAgICovXG4gIGFsdGVybmF0ZXM/OiBEYXRhW107XG59XG5cbi8qKiBQcm9tb3RlIGZpbGVzIHRvIHBhZ2VzICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlsZXNUb1BhZ2VzKFxuICBmaWxlczogU3RhdGljRmlsZVtdLFxuICBwYWdlczogUGFnZVtdLFxuICBmaWx0ZXI6IChmaWxlOiBTdGF0aWNGaWxlKSA9PiBib29sZWFuLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRvUmVtb3ZlOiBTdGF0aWNGaWxlW10gPSBmaWxlcy5maWx0ZXIoZmlsdGVyKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgdG9SZW1vdmUpIHtcbiAgICBwYWdlcy5wdXNoKGF3YWl0IGZpbGUudG9QYWdlKCkpO1xuICAgIGZpbGVzLnNwbGljZShmaWxlcy5pbmRleE9mKGZpbGUpLCAxKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLGtCQUFrQjtBQUN4QyxTQUFTLGdCQUFnQixFQUFFLGdCQUFnQixRQUFRLGlCQUFpQjtBQUNwRSxPQUFPLGtCQUFrQixzQkFBc0I7QUFDL0MsU0FBUyxzQkFBc0IsUUFBUSxrQkFBa0I7QUFNekQsTUFBTSxVQUFVLElBQUk7QUFDcEIsTUFBTSxVQUFVLElBQUk7QUFFcEIsdUJBQXVCLEdBQ3ZCLE9BQU8sTUFBTTtFQUNYLGlCQUFpQixHQUNqQixJQUFTO0VBRVQsK0JBQStCLEdBQy9CLE9B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
+// denoCacheMetadata=5509241674532620869,18181009048375279284 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/213144b2acfdc2c06a74aec338fe2c8e9540600388d4fd2d9fc43d626e93bd03.js b/vendor/gen/https/deno.land/213144b2acfdc2c06a74aec338fe2c8e9540600388d4fd2d9fc43d626e93bd03.js
new file mode 100644
index 0000000..1d10934
--- /dev/null
+++ b/vendor/gen/https/deno.land/213144b2acfdc2c06a74aec338fe2c8e9540600388d4fd2d9fc43d626e93bd03.js
@@ -0,0 +1,68 @@
+import { brightBlue, underline, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+import { GenericList } from "./_generic_list.ts";
+import { GenericPrompt } from "./_generic_prompt.ts";
+/** Select prompt representation. */ export class Select extends GenericList {
+ listIndex = this.getListIndex(this.settings.default);
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ listPointer: brightBlue(Figures.POINTER),
+ maxRows: 10,
+ searchLabel: brightBlue(Figures.SEARCH),
+ ...options,
+ options: Select.mapOptions(options)
+ }).prompt();
+ }
+ static mapOptions(options) {
+ return options.options.map((item)=>typeof item === "string" ? {
+ value: item
+ } : item).map((item)=>this.mapOption(item));
+ }
+ input() {
+ return underline(brightBlue(this.inputValue));
+ }
+ /**
+ * Render select option.
+ * @param item Select option settings.
+ * @param isSelected Set to true if option is selected.
+ */ getListItem(item, isSelected) {
+ let line = this.settings.indent;
+ line += isSelected ? `${this.settings.listPointer} ` : " ";
+ line += `${isSelected && !item.disabled ? this.highlight(item.name, (val)=>val) : this.highlight(item.name)}`;
+ return line;
+ }
+ /** Get value of selected option. */ getValue() {
+ return this.options[this.listIndex]?.value ?? this.settings.default;
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ return typeof value === "string" && value.length > 0 && this.options.findIndex((option)=>option.value === value) !== -1;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ return value.trim();
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return this.getOptionByValue(value)?.name ?? value;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBicmlnaHRCbHVlLCB1bmRlcmxpbmUsIHllbGxvdyB9IGZyb20gXCIuL2RlcHMudHNcIjtcbmltcG9ydCB7IEZpZ3VyZXMgfSBmcm9tIFwiLi9maWd1cmVzLnRzXCI7XG5pbXBvcnQge1xuICBHZW5lcmljTGlzdCxcbiAgR2VuZXJpY0xpc3RLZXlzLFxuICBHZW5lcmljTGlzdE9wdGlvbixcbiAgR2VuZXJpY0xpc3RPcHRpb25zLFxuICBHZW5lcmljTGlzdE9wdGlvblNldHRpbmdzLFxuICBHZW5lcmljTGlzdFNldHRpbmdzLFxufSBmcm9tIFwiLi9fZ2VuZXJpY19saXN0LnRzXCI7XG5pbXBvcnQgeyBHZW5lcmljUHJvbXB0IH0gZnJvbSBcIi4vX2dlbmVyaWNfcHJvbXB0LnRzXCI7XG5cbi8qKiBTZWxlY3Qga2V5IG9wdGlvbnMuICovXG5leHBvcnQgdHlwZSBTZWxlY3RLZXlzID0gR2VuZXJpY0xpc3RLZXlzO1xuXG4vKiogU2VsZWN0IG9wdGlvbiBvcHRpb25zLiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uID0gR2VuZXJpY0xpc3RPcHRpb247XG5cbi8qKiBTZWxlY3Qgb3B0aW9uIHNldHRpbmdzLiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uU2V0dGluZ3MgPSBHZW5lcmljTGlzdE9wdGlvblNldHRpbmdzO1xuXG4vKiogU2VsZWN0IG9wdGlvbnMgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIFNlbGVjdFZhbHVlT3B0aW9ucyA9IChzdHJpbmcgfCBTZWxlY3RPcHRpb24pW107XG4vKiogU2VsZWN0IG9wdGlvbiBzZXR0aW5ncyB0eXBlLiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0VmFsdWVTZXR0aW5ncyA9IFNlbGVjdE9wdGlvblNldHRpbmdzW107XG5cbi8qKiBTZWxlY3QgcHJvbXB0IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE9wdGlvbnMgZXh0ZW5kcyBHZW5lcmljTGlzdE9wdGlvbnM8c3RyaW5nLCBzdHJpbmc+IHtcbiAgb3B0aW9uczogU2VsZWN0VmFsdWVPcHRpb25zO1xuICBrZXlzPzogU2VsZWN0S2V5cztcbn1cblxuLyoqIFNlbGVjdCBwcm9tcHQgc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdFNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY0xpc3RTZXR0aW5nczxzdHJpbmcsIHN0cmluZz4ge1xuICBvcHRpb25zOiBTZWxlY3RWYWx1ZVNldHRpbmdzO1xuICBrZXlzPzogU2VsZWN0S2V5cztcbn1cblxuLyoqIFNlbGVjdCBwcm9tcHQgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgY2xhc3MgU2VsZWN0PFRTZXR0aW5ncyBleHRlbmRzIFNlbGVjdFNldHRpbmdzID0gU2VsZWN0U2V0dGluZ3M+XG4gIGV4dGVuZHMgR2VuZXJpY0xpc3Q8c3RyaW5nLCBzdHJpbmcsIFRTZXR0aW5ncz4ge1xuICBwcm90ZWN0ZWQgbGlzdEluZGV4OiBudW1iZXIgPSB0aGlzLmdldExpc3RJbmRleCh0aGlzLnNldHRpbmdzLmRlZmF1bHQpO1xuXG4gIC8qKlxuICAgKiBJbmplY3QgcHJvbXB0IHZhbHVlLiBDYW4gYmUgdXNlZCBmb3IgdW5pdCB0ZXN0cyBvciBwcmUgc2VsZWN0aW9ucy5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbmplY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIEdlbmVyaWNQcm9tcHQuaW5qZWN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBFeGVjdXRlIHRoZSBwcm9tcHQgYW5kIHNob3cgY3Vyc29yIG9uIGVuZC4gKi9cbiAgcHVibGljIHN0YXRpYyBwcm9tcHQob3B0aW9uczogU2VsZWN0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHBvaW50ZXI6IGJyaWdodEJsdWUoRmlndXJlcy5QT0lOVEVSX1NNQUxMKSxcbiAgICAgIHByZWZpeDogeWVsbG93KFwiPyBcIiksXG4gICAgICBpbmRlbnQ6IFwiIFwiLFxuICAgICAgbGlzdFBvaW50ZXI6IGJyaWdodEJsdWUoRmlndXJlcy5QT0lOVEVSKSxcbiAgICAgIG1heFJvd3M6IDEwLFxuICAgICAgc2VhcmNoTGFiZWw6IGJyaWdodEJsdWUoRmlndXJlcy5TRUFSQ0gpLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IFNlbGVjdC5tYXBPcHRpb25zKG9wdGlvbnMpLFxuICAgIH0pLnByb21wdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBtYXBPcHRpb25zKG9wdGlvbnM6IFNlbGVjdE9wdGlvbnMpOiBTZWxlY3RWYWx1ZVNldHRpbmdzIHtcbiAgICByZXR1cm4gb3B0aW9ucy5vcHRpb25zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcgfCBTZWxlY3RPcHRpb24pID0+XG4gICAgICAgIHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8geyB2YWx1ZTogaXRlbSB9IDogaXRlbVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5tYXBPcHRpb24oaXRlbSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlucHV0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVuZGVybGluZShicmlnaHRCbHVlKHRoaXMuaW5wdXRWYWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBzZWxlY3Qgb3B0aW9uLlxuICAgKiBAcGFyYW0gaXRlbSAgICAgICAgU2VsZWN0IG9wdGlvbiBzZXR0aW5ncy5cbiAgICogQHBhcmFtIGlzU2VsZWN0ZWQgIFNldCB0byB0cnVlIGlmIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRMaXN0SXRlbShcbiAgICBpdGVtOiBTZWxlY3RPcHRpb25TZXR0aW5ncyxcbiAgICBpc1NlbGVjdGVkPzogYm9vbGVhbixcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgbGluZSA9IHRoaXMuc2V0dGluZ3MuaW5kZW50O1xuICAgIGxpbmUgKz0gaXNTZWxlY3RlZCA/IGAke3RoaXMuc2V0dGluZ3MubGlzdFBvaW50ZXJ9IGAgOiBcIiAgXCI7XG4gICAgbGluZSArPSBgJHtcbiAgICAgIGlzU2VsZWN0ZWQgJiYgIWl0ZW0uZGlzYWJsZWRcbiAgICAgICAgPyB0aGlzLmhpZ2hsaWdodChpdGVtLm5hbWUsICh2YWwpID0+IHZhbClcbiAgICAgICAgOiB0aGlzLmhpZ2hsaWdodChpdGVtLm5hbWUpXG4gICAgfWA7XG4gICAgcmV0dXJuIGxpbmU7XG4gIH1cblxuICAvKiogR2V0IHZhbHVlIG9mIHNlbGVjdGVkIG9wdGlvbi4gKi9cbiAgcHJvdGVjdGVkIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0aGlzLmxpc3RJbmRleF0/LnZhbHVlID8/IHRoaXMuc2V0dGluZ3MuZGVmYXVsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpbnB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIFVzZXIgaW5wdXQgdmFsdWUuXG4gICAqIEByZXR1cm4gVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvciBlcnJvciBtZXNzYWdlIG9uIGVycm9yLlxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgICB2YWx1ZS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLm9wdGlvbnMuZmluZEluZGV4KChvcHRpb246IFNlbGVjdE9wdGlvblNldHRpbmdzKSA9PlxuICAgICAgICAgIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgKSAhPT0gLTE7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGlucHV0IHZhbHVlIHRvIG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKT8ubmFtZSA/PyB2YWx1ZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsWUFBWTtBQUMxRCxTQUFTLE9BQU8sUUFBUSxlQUFlO0FBQ3ZDLFNBQ0UsV0FBVyxRQU1OLHFCQUFxQjtBQUM1QixTQUFTLGFBQWEsUUFBUSx1QkFBdUI7QUE0QnJELGtDQUFrQyxHQUNsQyxPQUFPLE1BQU0sZUFDSDtFQUNFLFlBQW9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7RUFFdkU7OztHQUdDLEdBQ0QsT0FBYyxPQUFPLEtBQWEsRUFBUTtJQUN4QyxjQUFjLE1BQU0sQ0FBQztFQUN2QjtFQUVBLCtDQUErQyxHQUMvQyxPQUFjLE9BQU8sT0FBc0IsRUFBbUI7SUFDNUQsT0FBTyxJQUFJLElBQUksQ0FBQztNQUNkLFNBQVMsV0FBVyxRQUFRLGFBQWE7TUFDekMsUUFBUSxPQUFPO01BQ2YsUUFBUTtNQUNSLGFBQWEsV0FBVyxRQUFRLE9BQU87TUFDdkMsU0FBUztNQUNULGFBQWEsV0FBVyxRQUFRLE1BQU07TUFDdEMsR0FBRyxPQUFPO01BQ1YsU0FBUyxPQUFPLFVBQVUsQ0FBQztJQUM3QixHQUFHLE1BQU07RUFDWDtFQUVBLE9BQWlCLFdBQVcsT0FBc0IsRUFBdUI7SUFDdkUsT0FBTyxRQUFRLE9BQU8sQ0FDbkIsR0FBRyxDQUFDLENBQUMsT0FDSixPQUFPLFNBQVMsV0FBVztRQUFFLE9BQU87TUFBSyxJQUFJLE1BRTlDLEdBQUcsQ0FBQyxDQUFDLE9BQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUNsQztFQUVVLFFBQWdCO0lBQ3hCLE9BQU8sVUFBVSxXQUFXLElBQUksQ0FBQyxVQUFVO0VBQzdDO0VBRUE7Ozs7R0FJQyxHQUNELEFBQVUsWUFDUixJQUEwQixFQUMxQixVQUFvQixFQUNaO0lBQ1IsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUMvQixRQUFRLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRztJQUN2RCxRQUFRLEdBQ04sY0FBYyxDQUFDLEtBQUssUUFBUSxHQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBUSxPQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxHQUM1QjtJQUNGLE9BQU87RUFDVDtFQUVBLGtDQUFrQyxHQUNsQyxBQUFVLFdBQW1CO0lBQzNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87RUFDckU7RUFFQTs7OztHQUlDLEdBQ0QsQUFBVSxTQUFTLEtBQWEsRUFBb0I7SUFDbEQsT0FBTyxPQUFPLFVBQVUsWUFDdEIsTUFBTSxNQUFNLEdBQUcsS0FDZixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQ3BCLE9BQU8sS0FBSyxLQUFLLFdBQ2IsQ0FBQztFQUNiO0VBRUE7Ozs7R0FJQyxHQUNELEFBQVUsVUFBVSxLQUFhLEVBQVU7SUFDekMsT0FBTyxNQUFNLElBQUk7RUFDbkI7RUFFQTs7O0dBR0MsR0FDRCxBQUFVLE9BQU8sS0FBYSxFQUFVO0lBQ3RDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsUUFBUTtFQUMvQztBQUNGIn0=
+// denoCacheMetadata=6923234602173307256,8501236648406337255 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2183e4f87bc58e6ff69a485d6ae4191d0390bed46c11cc4f6f77f2f10228e346.js b/vendor/gen/https/deno.land/2183e4f87bc58e6ff69a485d6ae4191d0390bed46c11cc4f6f77f2f10228e346.js
new file mode 100644
index 0000000..60938d0
--- /dev/null
+++ b/vendor/gen/https/deno.land/2183e4f87bc58e6ff69a485d6ae4191d0390bed46c11cc4f6f77f2f10228e346.js
@@ -0,0 +1,101 @@
+import { distance } from "../_utils/distance.ts";
+/** Convert param case string to camel case. */ export function paramCaseToCamelCase(str) {
+ return str.replace(/-([a-z])/g, (g)=>g[1].toUpperCase());
+}
+/** Convert underscore case string to camel case. */ export function underscoreToCamelCase(str) {
+ return str.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase().replace(/_([a-z])/g, (g)=>g[1].toUpperCase());
+}
+/**
+ * Find option by flag, name or alias.
+ *
+ * @param flags Source options array.
+ * @param name Name of the option.
+ */ export function getOption(flags, name) {
+ while(name[0] === "-"){
+ name = name.slice(1);
+ }
+ for (const flag of flags){
+ if (isOption(flag, name)) {
+ return flag;
+ }
+ }
+ return;
+}
+export function didYouMeanOption(option, options) {
+ const optionNames = options.map((option)=>[
+ option.name,
+ ...option.aliases ?? []
+ ]).flat().map((option)=>getFlag(option));
+ return didYouMean(" Did you mean option", getFlag(option), optionNames);
+}
+export function didYouMeanType(type, types) {
+ return didYouMean(" Did you mean type", type, types);
+}
+export function didYouMean(message, type, types) {
+ const match = closest(type, types);
+ return match ? `${message} "${match}"?` : "";
+}
+export function getFlag(name) {
+ if (name.startsWith("-")) {
+ return name;
+ }
+ if (name.length > 1) {
+ return `--${name}`;
+ }
+ return `-${name}`;
+}
+/**
+ * Check if option has name or alias.
+ *
+ * @param option The option to check.
+ * @param name The option name or alias.
+ */ function isOption(option, name) {
+ return option.name === name || option.aliases && option.aliases.indexOf(name) !== -1;
+}
+export function matchWildCardOptions(name, flags) {
+ for (const option of flags){
+ if (option.name.indexOf("*") === -1) {
+ continue;
+ }
+ let matched = matchWildCardOption(name, option);
+ if (matched) {
+ matched = {
+ ...matched,
+ name
+ };
+ flags.push(matched);
+ return matched;
+ }
+ }
+}
+function matchWildCardOption(name, option) {
+ const parts = option.name.split(".");
+ const parts2 = name.split(".");
+ if (parts.length !== parts2.length) {
+ return false;
+ }
+ const count = Math.max(parts.length, parts2.length);
+ for(let i = 0; i < count; i++){
+ if (parts[i] !== parts2[i] && parts[i] !== "*") {
+ return false;
+ }
+ }
+ return option;
+}
+function closest(str, arr) {
+ let minDistance = Infinity;
+ let minIndex = 0;
+ for(let i = 0; i < arr.length; i++){
+ const dist = distance(str, arr[i]);
+ if (dist < minDistance) {
+ minDistance = dist;
+ minIndex = i;
+ }
+ }
+ return arr[minIndex];
+}
+export function getDefaultValue(option) {
+ return typeof option.default === "function" ? option.default() : option.default;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvX3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxhZ09wdGlvbnMgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuaW1wb3J0IHsgZGlzdGFuY2UgfSBmcm9tIFwiLi4vX3V0aWxzL2Rpc3RhbmNlLnRzXCI7XG5cbi8qKiBDb252ZXJ0IHBhcmFtIGNhc2Ugc3RyaW5nIHRvIGNhbWVsIGNhc2UuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1DYXNlVG9DYW1lbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoXG4gICAgLy0oW2Etel0pL2csXG4gICAgKGcpID0+IGdbMV0udG9VcHBlckNhc2UoKSxcbiAgKTtcbn1cblxuLyoqIENvbnZlcnQgdW5kZXJzY29yZSBjYXNlIHN0cmluZyB0byBjYW1lbCBjYXNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZGVyc2NvcmVUb0NhbWVsQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMV8kMlwiKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoXG4gICAgICAvXyhbYS16XSkvZyxcbiAgICAgIChnKSA9PiBnWzFdLnRvVXBwZXJDYXNlKCksXG4gICAgKTtcbn1cblxuLyoqXG4gKiBGaW5kIG9wdGlvbiBieSBmbGFnLCBuYW1lIG9yIGFsaWFzLlxuICpcbiAqIEBwYXJhbSBmbGFncyBTb3VyY2Ugb3B0aW9ucyBhcnJheS5cbiAqIEBwYXJhbSBuYW1lICBOYW1lIG9mIHRoZSBvcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcHRpb248TyBleHRlbmRzIEZsYWdPcHRpb25zPihcbiAgZmxhZ3M6IEFycmF5PE8+LFxuICBuYW1lOiBzdHJpbmcsXG4pOiBPIHwgdW5kZWZpbmVkIHtcbiAgd2hpbGUgKG5hbWVbMF0gPT09IFwiLVwiKSB7XG4gICAgbmFtZSA9IG5hbWUuc2xpY2UoMSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGZsYWcgb2YgZmxhZ3MpIHtcbiAgICBpZiAoaXNPcHRpb24oZmxhZywgbmFtZSkpIHtcbiAgICAgIHJldHVybiBmbGFnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZFlvdU1lYW5PcHRpb24oXG4gIG9wdGlvbjogc3RyaW5nLFxuICBvcHRpb25zOiBBcnJheTxGbGFnT3B0aW9ucz4sXG4pOiBzdHJpbmcge1xuICBjb25zdCBvcHRpb25OYW1lcyA9IG9wdGlvbnNcbiAgICAubWFwKChvcHRpb24pID0+IFtvcHRpb24ubmFtZSwgLi4uKG9wdGlvbi5hbGlhc2VzID8/IFtdKV0pXG4gICAgLmZsYXQoKVxuICAgIC5tYXAoKG9wdGlvbikgPT4gZ2V0RmxhZyhvcHRpb24pKTtcbiAgcmV0dXJuIGRpZFlvdU1lYW4oXCIgRGlkIHlvdSBtZWFuIG9wdGlvblwiLCBnZXRGbGFnKG9wdGlvbiksIG9wdGlvbk5hbWVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZFlvdU1lYW5UeXBlKHR5cGU6IHN0cmluZywgdHlwZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICByZXR1cm4gZGlkWW91TWVhbihcIiBEaWQgeW91IG1lYW4gdHlwZVwiLCB0eXBlLCB0eXBlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWRZb3VNZWFuKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIHR5cGU6IHN0cmluZyxcbiAgdHlwZXM6IEFycmF5PHN0cmluZz4sXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaDogc3RyaW5nIHwgdW5kZWZpbmVkID0gY2xvc2VzdCh0eXBlLCB0eXBlcyk7XG4gIHJldHVybiBtYXRjaCA/IGAke21lc3NhZ2V9IFwiJHttYXRjaH1cIj9gIDogXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsYWcobmFtZTogc3RyaW5nKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgaWYgKG5hbWUubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBgLS0ke25hbWV9YDtcbiAgfVxuICByZXR1cm4gYC0ke25hbWV9YDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBvcHRpb24gaGFzIG5hbWUgb3IgYWxpYXMuXG4gKlxuICogQHBhcmFtIG9wdGlvbiAgICBUaGUgb3B0aW9uIHRvIGNoZWNrLlxuICogQHBhcmFtIG5hbWUgICAgICBUaGUgb3B0aW9uIG5hbWUgb3IgYWxpYXMuXG4gKi9cbmZ1bmN0aW9uIGlzT3B0aW9uKG9wdGlvbjogRmxhZ09wdGlvbnMsIG5hbWU6IHN0cmluZykge1xuICByZXR1cm4gb3B0aW9uLm5hbWUgPT09IG5hbWUgfHxcbiAgICAob3B0aW9uLmFsaWFzZXMgJiYgb3B0aW9uLmFsaWFzZXMuaW5kZXhPZihuYW1lKSAhPT0gLTEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hXaWxkQ2FyZE9wdGlvbnMoXG4gIG5hbWU6IHN0cmluZyxcbiAgZmxhZ3M6IEFycmF5PEZsYWdPcHRpb25zPixcbik6IEZsYWdPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHRpb24gb2YgZmxhZ3MpIHtcbiAgICBpZiAob3B0aW9uLm5hbWUuaW5kZXhPZihcIipcIikgPT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoZWQgPSBtYXRjaFdpbGRDYXJkT3B0aW9uKG5hbWUsIG9wdGlvbik7XG4gICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgIG1hdGNoZWQgPSB7IC4uLm1hdGNoZWQsIG5hbWUgfTtcbiAgICAgIGZsYWdzLnB1c2gobWF0Y2hlZCk7XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hXaWxkQ2FyZE9wdGlvbihcbiAgbmFtZTogc3RyaW5nLFxuICBvcHRpb246IEZsYWdPcHRpb25zLFxuKTogRmxhZ09wdGlvbnMgfCBmYWxzZSB7XG4gIGNvbnN0IHBhcnRzID0gb3B0aW9uLm5hbWUuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBwYXJ0czIgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gcGFydHMyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjb3VudCA9IE1hdGgubWF4KHBhcnRzLmxlbmd0aCwgcGFydHMyLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGlmIChwYXJ0c1tpXSAhPT0gcGFydHMyW2ldICYmIHBhcnRzW2ldICE9PSBcIipcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uO1xufVxuXG5mdW5jdGlvbiBjbG9zZXN0KHN0cjogc3RyaW5nLCBhcnI6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IG1pbkRpc3RhbmNlID0gSW5maW5pdHk7XG4gIGxldCBtaW5JbmRleCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGlzdCA9IGRpc3RhbmNlKHN0ciwgYXJyW2ldKTtcbiAgICBpZiAoZGlzdCA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICBtaW5EaXN0YW5jZSA9IGRpc3Q7XG4gICAgICBtaW5JbmRleCA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJbbWluSW5kZXhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKG9wdGlvbjogRmxhZ09wdGlvbnMpOiB1bmtub3duIHtcbiAgcmV0dXJuIHR5cGVvZiBvcHRpb24uZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBvcHRpb24uZGVmYXVsdCgpXG4gICAgOiBvcHRpb24uZGVmYXVsdDtcbn1cbiJd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
+// denoCacheMetadata=3181218620809262683,8000131780211385183 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/23a0985510d7072cd1e6c4bfcb34fb4c8dc4914695738e8b6e76f3a782bf18fc.js b/vendor/gen/https/deno.land/23a0985510d7072cd1e6c4bfcb34fb4c8dc4914695738e8b6e76f3a782bf18fc.js
new file mode 100644
index 0000000..bf1f022
--- /dev/null
+++ b/vendor/gen/https/deno.land/23a0985510d7072cd1e6c4bfcb34fb4c8dc4914695738e8b6e76f3a782bf18fc.js
@@ -0,0 +1,27 @@
+import jsonLoader from "../core/loaders/json.ts";
+import { merge } from "../core/utils/object.ts";
+// Default options
+export const defaults = {
+ extensions: [
+ ".json",
+ ".jsonc"
+ ],
+ pageSubExtension: ".page"
+};
+/**
+ * A plugin to load JSON files as data and pages
+ * Installed by default
+ * @see https://lume.land/plugins/json/
+ */ export function json(userOptions) {
+ const options = merge(defaults, userOptions);
+ return (site)=>{
+ site.loadData(options.extensions, jsonLoader);
+ site.loadPages(options.extensions, {
+ pageSubExtension: options.pageSubExtension,
+ loader: jsonLoader
+ });
+ };
+}
+export default json;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy9qc29uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqc29uTG9hZGVyIGZyb20gXCIuLi9jb3JlL2xvYWRlcnMvanNvbi50c1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi4vY29yZS91dGlscy9vYmplY3QudHNcIjtcblxuaW1wb3J0IHR5cGUgU2l0ZSBmcm9tIFwiLi4vY29yZS9zaXRlLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBGaWxlIGV4dGVuc2lvbnMgdG8gbG9hZCAqL1xuICBleHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIE9wdGlvbmFsIHN1Yi1leHRlbnNpb24gZm9yIHBhZ2UgZmlsZXMgKi9cbiAgcGFnZVN1YkV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuLy8gRGVmYXVsdCBvcHRpb25zXG5leHBvcnQgY29uc3QgZGVmYXVsdHM6IE9wdGlvbnMgPSB7XG4gIGV4dGVuc2lvbnM6IFtcIi5qc29uXCIsIFwiLmpzb25jXCJdLFxuICBwYWdlU3ViRXh0ZW5zaW9uOiBcIi5wYWdlXCIsXG59O1xuXG4vKipcbiAqIEEgcGx1Z2luIHRvIGxvYWQgSlNPTiBmaWxlcyBhcyBkYXRhIGFuZCBwYWdlc1xuICogSW5zdGFsbGVkIGJ5IGRlZmF1bHRcbiAqIEBzZWUgaHR0cHM6Ly9sdW1lLmxhbmQvcGx1Z2lucy9qc29uL1xuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbih1c2VyT3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlKGRlZmF1bHRzLCB1c2VyT3B0aW9ucyk7XG5cbiAgcmV0dXJuIChzaXRlOiBTaXRlKSA9PiB7XG4gICAgc2l0ZS5sb2FkRGF0YShvcHRpb25zLmV4dGVuc2lvbnMsIGpzb25Mb2FkZXIpO1xuICAgIHNpdGUubG9hZFBhZ2VzKG9wdGlvbnMuZXh0ZW5zaW9ucywge1xuICAgICAgcGFnZVN1YkV4dGVuc2lvbjogb3B0aW9ucy5wYWdlU3ViRXh0ZW5zaW9uLFxuICAgICAgbG9hZGVyOiBqc29uTG9hZGVyLFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBqc29uO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sZ0JBQWdCLDBCQUEwQjtBQUNqRCxTQUFTLEtBQUssUUFBUSwwQkFBMEI7QUFZaEQsa0JBQWtCO0FBQ2xCLE9BQU8sTUFBTSxXQUFvQjtFQUMvQixZQUFZO0lBQUM7SUFBUztHQUFTO0VBQy9CLGtCQUFrQjtBQUNwQixFQUFFO0FBRUY7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBUyxLQUFLLFdBQXFCO0VBQ3hDLE1BQU0sVUFBVSxNQUFNLFVBQVU7RUFFaEMsT0FBTyxDQUFDO0lBQ04sS0FBSyxRQUFRLENBQUMsUUFBUSxVQUFVLEVBQUU7SUFDbEMsS0FBSyxTQUFTLENBQUMsUUFBUSxVQUFVLEVBQUU7TUFDakMsa0JBQWtCLFFBQVEsZ0JBQWdCO01BQzFDLFFBQVE7SUFDVjtFQUNGO0FBQ0Y7QUFFQSxlQUFlLEtBQUsifQ==
+// denoCacheMetadata=2000558100036652362,1393168950696169082 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2490f5351f6789a193b1c2a8fbdd4765bfe1012a77c578ba34bd51a23a8c9a54.js b/vendor/gen/https/deno.land/2490f5351f6789a193b1c2a8fbdd4765bfe1012a77c578ba34bd51a23a8c9a54.js
new file mode 100644
index 0000000..5b4f36f
--- /dev/null
+++ b/vendor/gen/https/deno.land/2490f5351f6789a193b1c2a8fbdd4765bfe1012a77c578ba34bd51a23a8c9a54.js
@@ -0,0 +1,52 @@
+import loader from "../core/loaders/module.ts";
+import { merge } from "../core/utils/object.ts";
+// Default options
+export const defaults = {
+ extensions: [
+ ".js",
+ ".ts"
+ ],
+ pageSubExtension: ".page"
+};
+/** Template engine to render js/ts files */ export class ModuleEngine {
+ helpers = {};
+ includes;
+ constructor(includes){
+ this.includes = includes;
+ }
+ deleteCache() {}
+ async render(content, data) {
+ return typeof content === "function" ? await content(data, this.helpers) : content;
+ }
+ addHelper(name, fn) {
+ this.helpers[name] = fn;
+ }
+}
+/**
+ * A plugin to load js/ts files as data and pages
+ * Installed by default
+ * @see https://lume.land/plugins/modules/
+ */ export function modules(userOptions) {
+ return (site)=>{
+ const options = merge({
+ ...defaults,
+ includes: site.options.includes
+ }, userOptions);
+ const engine = new ModuleEngine(options.includes);
+ // Ignore includes folder
+ if (options.includes) {
+ site.ignore(options.includes);
+ }
+ // Load the _data files
+ site.loadData(options.extensions, loader);
+ // Load the pages and register the engine
+ site.loadPages(options.extensions, {
+ loader,
+ engine,
+ pageSubExtension: options.pageSubExtension
+ });
+ };
+}
+export default modules;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy9tb2R1bGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2FkZXIgZnJvbSBcIi4uL2NvcmUvbG9hZGVycy9tb2R1bGUudHNcIjtcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvb2JqZWN0LnRzXCI7XG5cbmltcG9ydCB0eXBlIFNpdGUgZnJvbSBcIi4uL2NvcmUvc2l0ZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmdpbmUsIEhlbHBlciB9IGZyb20gXCIuLi9jb3JlL3JlbmRlcmVyLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBGaWxlIGV4dGVuc2lvbnMgdG8gbG9hZCAqL1xuICBleHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIE9wdGlvbmFsIHN1Yi1leHRlbnNpb24gZm9yIHBhZ2UgZmlsZXMgKi9cbiAgcGFnZVN1YkV4dGVuc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGluY2x1ZGVzIHBhdGhcbiAgICogQGRlZmF1bHQgYHNpdGUub3B0aW9ucy5pbmNsdWRlc2BcbiAgICovXG4gIGluY2x1ZGVzPzogc3RyaW5nO1xufVxuXG4vLyBEZWZhdWx0IG9wdGlvbnNcbmV4cG9ydCBjb25zdCBkZWZhdWx0czogT3B0aW9ucyA9IHtcbiAgZXh0ZW5zaW9uczogW1wiLmpzXCIsIFwiLnRzXCJdLFxuICBwYWdlU3ViRXh0ZW5zaW9uOiBcIi5wYWdlXCIsXG59O1xuXG4vKiogVGVtcGxhdGUgZW5naW5lIHRvIHJlbmRlciBqcy90cyBmaWxlcyAqL1xuZXhwb3J0IGNsYXNzIE1vZHVsZUVuZ2luZSBpbXBsZW1lbnRzIEVuZ2luZSB7XG4gIGhlbHBlcnM6IFJlY29yZDxzdHJpbmcsIEhlbHBlcj4gPSB7fTtcbiAgaW5jbHVkZXM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihpbmNsdWRlczogc3RyaW5nKSB7XG4gICAgdGhpcy5pbmNsdWRlcyA9IGluY2x1ZGVzO1xuICB9XG5cbiAgZGVsZXRlQ2FjaGUoKSB7fVxuXG4gIGFzeW5jIHJlbmRlcihcbiAgICBjb250ZW50OiB1bmtub3duLFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBhd2FpdCBjb250ZW50KGRhdGEsIHRoaXMuaGVscGVycylcbiAgICAgIDogY29udGVudDtcbiAgfVxuXG4gIGFkZEhlbHBlcihuYW1lOiBzdHJpbmcsIGZuOiBIZWxwZXIpIHtcbiAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGx1Z2luIHRvIGxvYWQganMvdHMgZmlsZXMgYXMgZGF0YSBhbmQgcGFnZXNcbiAqIEluc3RhbGxlZCBieSBkZWZhdWx0XG4gKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvbW9kdWxlcy9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZXModXNlck9wdGlvbnM/OiBPcHRpb25zKSB7XG4gIHJldHVybiAoc2l0ZTogU2l0ZSkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZShcbiAgICAgIHsgLi4uZGVmYXVsdHMsIGluY2x1ZGVzOiBzaXRlLm9wdGlvbnMuaW5jbHVkZXMgfSxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgICk7XG5cbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgTW9kdWxlRW5naW5lKG9wdGlvbnMuaW5jbHVkZXMpO1xuXG4gICAgLy8gSWdub3JlIGluY2x1ZGVzIGZvbGRlclxuICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKSB7XG4gICAgICBzaXRlLmlnbm9yZShvcHRpb25zLmluY2x1ZGVzKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIHRoZSBfZGF0YSBmaWxlc1xuICAgIHNpdGUubG9hZERhdGEob3B0aW9ucy5leHRlbnNpb25zLCBsb2FkZXIpO1xuXG4gICAgLy8gTG9hZCB0aGUgcGFnZXMgYW5kIHJlZ2lzdGVyIHRoZSBlbmdpbmVcbiAgICBzaXRlLmxvYWRQYWdlcyhvcHRpb25zLmV4dGVuc2lvbnMsIHtcbiAgICAgIGxvYWRlcixcbiAgICAgIGVuZ2luZSxcbiAgICAgIHBhZ2VTdWJFeHRlbnNpb246IG9wdGlvbnMucGFnZVN1YkV4dGVuc2lvbixcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9kdWxlcztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksNEJBQTRCO0FBQy9DLFNBQVMsS0FBSyxRQUFRLDBCQUEwQjtBQW1CaEQsa0JBQWtCO0FBQ2xCLE9BQU8sTUFBTSxXQUFvQjtFQUMvQixZQUFZO0lBQUM7SUFBTztHQUFNO0VBQzFCLGtCQUFrQjtBQUNwQixFQUFFO0FBRUYsMENBQTBDLEdBQzFDLE9BQU8sTUFBTTtFQUNYLFVBQWtDLENBQUMsRUFBRTtFQUNyQyxTQUFpQjtFQUVqQixZQUFZLFFBQWdCLENBQUU7SUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRztFQUNsQjtFQUVBLGNBQWMsQ0FBQztFQUVmLE1BQU0sT0FDSixPQUFnQixFQUNoQixJQUE2QixFQUNYO0lBQ2xCLE9BQU8sT0FBTyxZQUFZLGFBQ3RCLE1BQU0sUUFBUSxNQUFNLElBQUksQ0FBQyxPQUFPLElBQ2hDO0VBQ047RUFFQSxVQUFVLElBQVksRUFBRSxFQUFVLEVBQUU7SUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUc7RUFDdkI7QUFDRjtBQUVBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVMsUUFBUSxXQUFxQjtFQUMzQyxPQUFPLENBQUM7SUFDTixNQUFNLFVBQVUsTUFDZDtNQUFFLEdBQUcsUUFBUTtNQUFFLFVBQVUsS0FBSyxPQUFPLENBQUMsUUFBUTtJQUFDLEdBQy9DO0lBR0YsTUFBTSxTQUFTLElBQUksYUFBYSxRQUFRLFFBQVE7SUFFaEQseUJBQXlCO0lBQ3pCLElBQUksUUFBUSxRQUFRLEVBQUU7TUFDcEIsS0FBSyxNQUFNLENBQUMsUUFBUSxRQUFRO0lBQzlCO0lBRUEsdUJBQXVCO0lBQ3ZCLEtBQUssUUFBUSxDQUFDLFFBQVEsVUFBVSxFQUFFO0lBRWxDLHlDQUF5QztJQUN6QyxLQUFLLFNBQVMsQ0FBQyxRQUFRLFVBQVUsRUFBRTtNQUNqQztNQUNBO01BQ0Esa0JBQWtCLFFBQVEsZ0JBQWdCO0lBQzVDO0VBQ0Y7QUFDRjtBQUVBLGVBQWUsUUFBUSJ9
+// denoCacheMetadata=3926903311864228544,12364142428343781007 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/24e417d1fe867af5b0963ef39b9e36a92606dd20e47fa41b2647ea9a8bdff88f.js b/vendor/gen/https/deno.land/24e417d1fe867af5b0963ef39b9e36a92606dd20e47fa41b2647ea9a8bdff88f.js
new file mode 100644
index 0000000..2d1f5c9
--- /dev/null
+++ b/vendor/gen/https/deno.land/24e417d1fe867af5b0963ef39b9e36a92606dd20e47fa41b2647ea9a8bdff88f.js
@@ -0,0 +1,304 @@
+import { getFlag } from "../../flags/_utils.ts";
+import { Table } from "../../table/table.ts";
+import { dedent, getDescription, parseArgumentsDefinition } from "../_utils.ts";
+import { bold, brightBlue, brightMagenta, dim, getColorEnabled, green, italic, red, setColorEnabled, yellow } from "../deps.ts";
+import { Type } from "../type.ts";
+/** Help text generator. */ export class HelpGenerator {
+ cmd;
+ indent;
+ options;
+ /** Generate help text for given command. */ static generate(cmd, options) {
+ return new HelpGenerator(cmd, options).generate();
+ }
+ constructor(cmd, options = {}){
+ this.cmd = cmd;
+ this.indent = 2;
+ this.options = {
+ types: false,
+ hints: true,
+ colors: true,
+ long: false,
+ ...options
+ };
+ }
+ generate() {
+ const areColorsEnabled = getColorEnabled();
+ setColorEnabled(this.options.colors);
+ const result = this.generateHeader() + this.generateMeta() + this.generateDescription() + this.generateOptions() + this.generateCommands() + this.generateEnvironmentVariables() + this.generateExamples();
+ setColorEnabled(areColorsEnabled);
+ return result;
+ }
+ generateHeader() {
+ const usage = this.cmd.getUsage();
+ const rows = [
+ [
+ bold("Usage:"),
+ brightMagenta(this.cmd.getPath() + (usage ? " " + highlightArguments(usage, this.options.types) : ""))
+ ]
+ ];
+ const version = this.cmd.getVersion();
+ if (version) {
+ rows.push([
+ bold("Version:"),
+ yellow(`${this.cmd.getVersion()}`)
+ ]);
+ }
+ return "\n" + Table.from(rows).indent(this.indent).padding(1).toString() + "\n";
+ }
+ generateMeta() {
+ const meta = Object.entries(this.cmd.getMeta());
+ if (!meta.length) {
+ return "";
+ }
+ const rows = [];
+ for (const [name, value] of meta){
+ rows.push([
+ bold(`${name}: `) + value
+ ]);
+ }
+ return "\n" + Table.from(rows).indent(this.indent).padding(1).toString() + "\n";
+ }
+ generateDescription() {
+ if (!this.cmd.getDescription()) {
+ return "";
+ }
+ return this.label("Description") + Table.from([
+ [
+ dedent(this.cmd.getDescription())
+ ]
+ ]).indent(this.indent * 2).maxColWidth(140).padding(1).toString() + "\n";
+ }
+ generateOptions() {
+ const options = this.cmd.getOptions(false);
+ if (!options.length) {
+ return "";
+ }
+ let groups = [];
+ const hasGroups = options.some((option)=>option.groupName);
+ if (hasGroups) {
+ for (const option of options){
+ let group = groups.find((group)=>group.name === option.groupName);
+ if (!group) {
+ group = {
+ name: option.groupName,
+ options: []
+ };
+ groups.push(group);
+ }
+ group.options.push(option);
+ }
+ } else {
+ groups = [
+ {
+ name: "Options",
+ options
+ }
+ ];
+ }
+ let result = "";
+ for (const group of groups){
+ result += this.generateOptionGroup(group);
+ }
+ return result;
+ }
+ generateOptionGroup(group) {
+ if (!group.options.length) {
+ return "";
+ }
+ const hasTypeDefinitions = !!group.options.find((option)=>!!option.typeDefinition);
+ if (hasTypeDefinitions) {
+ return this.label(group.name ?? "Options") + Table.from([
+ ...group.options.map((option)=>[
+ option.flags.map((flag)=>brightBlue(flag)).join(", "),
+ highlightArguments(option.typeDefinition || "", this.options.types),
+ red(bold("-")),
+ getDescription(option.description, !this.options.long),
+ this.generateHints(option)
+ ])
+ ]).padding([
+ 2,
+ 2,
+ 1,
+ 2
+ ]).indent(this.indent * 2).maxColWidth([
+ 60,
+ 60,
+ 1,
+ 80,
+ 60
+ ]).toString() + "\n";
+ }
+ return this.label(group.name ?? "Options") + Table.from([
+ ...group.options.map((option)=>[
+ option.flags.map((flag)=>brightBlue(flag)).join(", "),
+ red(bold("-")),
+ getDescription(option.description, !this.options.long),
+ this.generateHints(option)
+ ])
+ ]).indent(this.indent * 2).maxColWidth([
+ 60,
+ 1,
+ 80,
+ 60
+ ]).padding([
+ 2,
+ 1,
+ 2
+ ]).toString() + "\n";
+ }
+ generateCommands() {
+ const commands = this.cmd.getCommands(false);
+ if (!commands.length) {
+ return "";
+ }
+ const hasTypeDefinitions = !!commands.find((command)=>!!command.getArgsDefinition());
+ if (hasTypeDefinitions) {
+ return this.label("Commands") + Table.from([
+ ...commands.map((command)=>[
+ [
+ command.getName(),
+ ...command.getAliases()
+ ].map((name)=>brightBlue(name)).join(", "),
+ highlightArguments(command.getArgsDefinition() || "", this.options.types),
+ red(bold("-")),
+ command.getShortDescription()
+ ])
+ ]).indent(this.indent * 2).maxColWidth([
+ 60,
+ 60,
+ 1,
+ 80
+ ]).padding([
+ 2,
+ 2,
+ 1,
+ 2
+ ]).toString() + "\n";
+ }
+ return this.label("Commands") + Table.from([
+ ...commands.map((command)=>[
+ [
+ command.getName(),
+ ...command.getAliases()
+ ].map((name)=>brightBlue(name)).join(", "),
+ red(bold("-")),
+ command.getShortDescription()
+ ])
+ ]).maxColWidth([
+ 60,
+ 1,
+ 80
+ ]).padding([
+ 2,
+ 1,
+ 2
+ ]).indent(this.indent * 2).toString() + "\n";
+ }
+ generateEnvironmentVariables() {
+ const envVars = this.cmd.getEnvVars(false);
+ if (!envVars.length) {
+ return "";
+ }
+ return this.label("Environment variables") + Table.from([
+ ...envVars.map((envVar)=>[
+ envVar.names.map((name)=>brightBlue(name)).join(", "),
+ highlightArgumentDetails(envVar.details, this.options.types),
+ red(bold("-")),
+ this.options.long ? dedent(envVar.description) : envVar.description.trim().split("\n", 1)[0],
+ envVar.required ? `(${yellow(`required`)})` : ""
+ ])
+ ]).padding([
+ 2,
+ 2,
+ 1,
+ 2
+ ]).indent(this.indent * 2).maxColWidth([
+ 60,
+ 60,
+ 1,
+ 80,
+ 10
+ ]).toString() + "\n";
+ }
+ generateExamples() {
+ const examples = this.cmd.getExamples();
+ if (!examples.length) {
+ return "";
+ }
+ return this.label("Examples") + Table.from(examples.map((example)=>[
+ dim(bold(`${capitalize(example.name)}:`)),
+ dedent(example.description)
+ ])).padding(1).indent(this.indent * 2).maxColWidth(150).toString() + "\n";
+ }
+ generateHints(option) {
+ if (!this.options.hints) {
+ return "";
+ }
+ const hints = [];
+ option.required && hints.push(yellow(`required`));
+ typeof option.default !== "undefined" && hints.push(bold(`Default: `) + inspect(option.default, this.options.colors));
+ option.depends?.length && hints.push(yellow(bold(`Depends: `)) + italic(option.depends.map(getFlag).join(", ")));
+ option.conflicts?.length && hints.push(red(bold(`Conflicts: `)) + italic(option.conflicts.map(getFlag).join(", ")));
+ const type = this.cmd.getType(option.args[0]?.type)?.handler;
+ if (type instanceof Type) {
+ const possibleValues = type.values?.(this.cmd, this.cmd.getParent());
+ if (possibleValues?.length) {
+ hints.push(bold(`Values: `) + possibleValues.map((value)=>inspect(value, this.options.colors)).join(", "));
+ }
+ }
+ if (hints.length) {
+ return `(${hints.join(", ")})`;
+ }
+ return "";
+ }
+ label(label) {
+ return "\n" + " ".repeat(this.indent) + bold(`${label}:`) + "\n\n";
+ }
+}
+function capitalize(string) {
+ return (string?.charAt(0).toUpperCase() + string.slice(1)) ?? "";
+}
+function inspect(value, colors) {
+ return Deno.inspect(value, // deno < 1.4.3 doesn't support the colors property.
+ {
+ depth: 1,
+ colors,
+ trailingComma: false
+ });
+}
+/**
+ * Colorize arguments string.
+ * @param argsDefinition Arguments definition: `<color1:string> <color2:string>`
+ * @param types Show types.
+ */ function highlightArguments(argsDefinition, types = true) {
+ if (!argsDefinition) {
+ return "";
+ }
+ return parseArgumentsDefinition(argsDefinition, false, true).map((arg)=>typeof arg === "string" ? arg : highlightArgumentDetails(arg, types)).join(" ");
+}
+/**
+ * Colorize argument string.
+ * @param arg Argument details.
+ * @param types Show types.
+ */ function highlightArgumentDetails(arg, types = true) {
+ let str = "";
+ str += yellow(arg.optionalValue ? "[" : "<");
+ let name = "";
+ name += arg.name;
+ if (arg.variadic) {
+ name += "...";
+ }
+ name = brightMagenta(name);
+ str += name;
+ if (types) {
+ str += yellow(":");
+ str += red(arg.type);
+ if (arg.list) {
+ str += green("[]");
+ }
+ }
+ str += yellow(arg.optionalValue ? "]" : ">");
+ return str;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9oZWxwL19oZWxwX2dlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRGbGFnIH0gZnJvbSBcIi4uLy4uL2ZsYWdzL191dGlscy50c1wiO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwiLi4vLi4vdGFibGUvdGFibGUudHNcIjtcbmltcG9ydCB7IGRlZGVudCwgZ2V0RGVzY3JpcHRpb24sIHBhcnNlQXJndW1lbnRzRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQge1xuICBib2xkLFxuICBicmlnaHRCbHVlLFxuICBicmlnaHRNYWdlbnRhLFxuICBkaW0sXG4gIGdldENvbG9yRW5hYmxlZCxcbiAgZ3JlZW4sXG4gIGl0YWxpYyxcbiAgcmVkLFxuICBzZXRDb2xvckVuYWJsZWQsXG4gIHllbGxvdyxcbn0gZnJvbSBcIi4uL2RlcHMudHNcIjtcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudCwgRW52VmFyLCBFeGFtcGxlLCBPcHRpb24gfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIZWxwT3B0aW9ucyB7XG4gIHR5cGVzPzogYm9vbGVhbjtcbiAgaGludHM/OiBib29sZWFuO1xuICBjb2xvcnM/OiBib29sZWFuO1xuICBsb25nPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE9wdGlvbkdyb3VwIHtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uPjtcbn1cblxuLyoqIEhlbHAgdGV4dCBnZW5lcmF0b3IuICovXG5leHBvcnQgY2xhc3MgSGVscEdlbmVyYXRvciB7XG4gIHByaXZhdGUgaW5kZW50ID0gMjtcbiAgcHJpdmF0ZSBvcHRpb25zOiBSZXF1aXJlZDxIZWxwT3B0aW9ucz47XG5cbiAgLyoqIEdlbmVyYXRlIGhlbHAgdGV4dCBmb3IgZ2l2ZW4gY29tbWFuZC4gKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZShjbWQ6IENvbW1hbmQsIG9wdGlvbnM/OiBIZWxwT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBIZWxwR2VuZXJhdG9yKGNtZCwgb3B0aW9ucykuZ2VuZXJhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjbWQ6IENvbW1hbmQsXG4gICAgb3B0aW9uczogSGVscE9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgdHlwZXM6IGZhbHNlLFxuICAgICAgaGludHM6IHRydWUsXG4gICAgICBjb2xvcnM6IHRydWUsXG4gICAgICBsb25nOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcmVDb2xvcnNFbmFibGVkID0gZ2V0Q29sb3JFbmFibGVkKCk7XG4gICAgc2V0Q29sb3JFbmFibGVkKHRoaXMub3B0aW9ucy5jb2xvcnMpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZW5lcmF0ZUhlYWRlcigpICtcbiAgICAgIHRoaXMuZ2VuZXJhdGVNZXRhKCkgK1xuICAgICAgdGhpcy5nZW5lcmF0ZURlc2NyaXB0aW9uKCkgK1xuICAgICAgdGhpcy5nZW5lcmF0ZU9wdGlvbnMoKSArXG4gICAgICB0aGlzLmdlbmVyYXRlQ29tbWFuZHMoKSArXG4gICAgICB0aGlzLmdlbmVyYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMoKSArXG4gICAgICB0aGlzLmdlbmVyYXRlRXhhbXBsZXMoKTtcblxuICAgIHNldENvbG9yRW5hYmxlZChhcmVDb2xvcnNFbmFibGVkKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNhZ2UgPSB0aGlzLmNtZC5nZXRVc2FnZSgpO1xuICAgIGNvbnN0IHJvd3MgPSBbXG4gICAgICBbXG4gICAgICAgIGJvbGQoXCJVc2FnZTpcIiksXG4gICAgICAgIGJyaWdodE1hZ2VudGEoXG4gICAgICAgICAgdGhpcy5jbWQuZ2V0UGF0aCgpICtcbiAgICAgICAgICAgICh1c2FnZSA/IFwiIFwiICsgaGlnaGxpZ2h0QXJndW1lbnRzKHVzYWdlLCB0aGlzLm9wdGlvbnMudHlwZXMpIDogXCJcIiksXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIF07XG4gICAgY29uc3QgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jbWQuZ2V0VmVyc2lvbigpO1xuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICByb3dzLnB1c2goW2JvbGQoXCJWZXJzaW9uOlwiKSwgeWVsbG93KGAke3RoaXMuY21kLmdldFZlcnNpb24oKX1gKV0pO1xuICAgIH1cbiAgICByZXR1cm4gXCJcXG5cIiArXG4gICAgICBUYWJsZS5mcm9tKHJvd3MpXG4gICAgICAgIC5pbmRlbnQodGhpcy5pbmRlbnQpXG4gICAgICAgIC5wYWRkaW5nKDEpXG4gICAgICAgIC50b1N0cmluZygpICtcbiAgICAgIFwiXFxuXCI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlTWV0YSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBPYmplY3QuZW50cmllcyh0aGlzLmNtZC5nZXRNZXRhKCkpO1xuICAgIGlmICghbWV0YS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgbWV0YSkge1xuICAgICAgcm93cy5wdXNoKFtib2xkKGAke25hbWV9OiBgKSArIHZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFxuXCIgK1xuICAgICAgVGFibGUuZnJvbShyb3dzKVxuICAgICAgICAuaW5kZW50KHRoaXMuaW5kZW50KVxuICAgICAgICAucGFkZGluZygxKVxuICAgICAgICAudG9TdHJpbmcoKSArXG4gICAgICBcIlxcblwiO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNtZC5nZXREZXNjcmlwdGlvbigpKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFiZWwoXCJEZXNjcmlwdGlvblwiKSArXG4gICAgICBUYWJsZS5mcm9tKFtcbiAgICAgICAgW2RlZGVudCh0aGlzLmNtZC5nZXREZXNjcmlwdGlvbigpKV0sXG4gICAgICBdKVxuICAgICAgICAuaW5kZW50KHRoaXMuaW5kZW50ICogMilcbiAgICAgICAgLm1heENvbFdpZHRoKDE0MClcbiAgICAgICAgLnBhZGRpbmcoMSlcbiAgICAgICAgLnRvU3RyaW5nKCkgK1xuICAgICAgXCJcXG5cIjtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVPcHRpb25zKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY21kLmdldE9wdGlvbnMoZmFsc2UpO1xuICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGxldCBncm91cHM6IEFycmF5PE9wdGlvbkdyb3VwPiA9IFtdO1xuICAgIGNvbnN0IGhhc0dyb3VwcyA9IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24uZ3JvdXBOYW1lKTtcbiAgICBpZiAoaGFzR3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGxldCBncm91cCA9IGdyb3Vwcy5maW5kKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gb3B0aW9uLmdyb3VwTmFtZSk7XG4gICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICBncm91cCA9IHtcbiAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5ncm91cE5hbWUsXG4gICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzID0gW3tcbiAgICAgICAgbmFtZTogXCJPcHRpb25zXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICB9XTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgcmVzdWx0ICs9IHRoaXMuZ2VuZXJhdGVPcHRpb25Hcm91cChncm91cCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVPcHRpb25Hcm91cChncm91cDogT3B0aW9uR3JvdXApOiBzdHJpbmcge1xuICAgIGlmICghZ3JvdXAub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBoYXNUeXBlRGVmaW5pdGlvbnMgPSAhIWdyb3VwLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PlxuICAgICAgISFvcHRpb24udHlwZURlZmluaXRpb25cbiAgICApO1xuXG4gICAgaWYgKGhhc1R5cGVEZWZpbml0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWwoZ3JvdXAubmFtZSA/PyBcIk9wdGlvbnNcIikgK1xuICAgICAgICBUYWJsZS5mcm9tKFtcbiAgICAgICAgICAuLi5ncm91cC5vcHRpb25zLm1hcCgob3B0aW9uOiBPcHRpb24pID0+IFtcbiAgICAgICAgICAgIG9wdGlvbi5mbGFncy5tYXAoKGZsYWcpID0+IGJyaWdodEJsdWUoZmxhZykpLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZ3VtZW50cyhcbiAgICAgICAgICAgICAgb3B0aW9uLnR5cGVEZWZpbml0aW9uIHx8IFwiXCIsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy50eXBlcyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByZWQoYm9sZChcIi1cIikpLFxuICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb24ob3B0aW9uLmRlc2NyaXB0aW9uLCAhdGhpcy5vcHRpb25zLmxvbmcpLFxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpbnRzKG9wdGlvbiksXG4gICAgICAgICAgXSksXG4gICAgICAgIF0pXG4gICAgICAgICAgLnBhZGRpbmcoWzIsIDIsIDEsIDJdKVxuICAgICAgICAgIC5pbmRlbnQodGhpcy5pbmRlbnQgKiAyKVxuICAgICAgICAgIC5tYXhDb2xXaWR0aChbNjAsIDYwLCAxLCA4MCwgNjBdKVxuICAgICAgICAgIC50b1N0cmluZygpICtcbiAgICAgICAgXCJcXG5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYWJlbChncm91cC5uYW1lID8/IFwiT3B0aW9uc1wiKSArXG4gICAgICBUYWJsZS5mcm9tKFtcbiAgICAgICAgLi4uZ3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbjogT3B0aW9uKSA9PiBbXG4gICAgICAgICAgb3B0aW9uLmZsYWdzLm1hcCgoZmxhZykgPT4gYnJpZ2h0Qmx1ZShmbGFnKSkuam9pbihcIiwgXCIpLFxuICAgICAgICAgIHJlZChib2xkKFwiLVwiKSksXG4gICAgICAgICAgZ2V0RGVzY3JpcHRpb24ob3B0aW9uLmRlc2NyaXB0aW9uLCAhdGhpcy5vcHRpb25zLmxvbmcpLFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaW50cyhvcHRpb24pLFxuICAgICAgICBdKSxcbiAgICAgIF0pXG4gICAgICAgIC5pbmRlbnQodGhpcy5pbmRlbnQgKiAyKVxuICAgICAgICAubWF4Q29sV2lkdGgoWzYwLCAxLCA4MCwgNjBdKVxuICAgICAgICAucGFkZGluZyhbMiwgMSwgMl0pXG4gICAgICAgIC50b1N0cmluZygpICtcbiAgICAgIFwiXFxuXCI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ29tbWFuZHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21tYW5kcyA9IHRoaXMuY21kLmdldENvbW1hbmRzKGZhbHNlKTtcbiAgICBpZiAoIWNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHlwZURlZmluaXRpb25zID0gISFjb21tYW5kcy5maW5kKChjb21tYW5kKSA9PlxuICAgICAgISFjb21tYW5kLmdldEFyZ3NEZWZpbml0aW9uKClcbiAgICApO1xuXG4gICAgaWYgKGhhc1R5cGVEZWZpbml0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWwoXCJDb21tYW5kc1wiKSArXG4gICAgICAgIFRhYmxlLmZyb20oW1xuICAgICAgICAgIC4uLmNvbW1hbmRzLm1hcCgoY29tbWFuZDogQ29tbWFuZCkgPT4gW1xuICAgICAgICAgICAgW2NvbW1hbmQuZ2V0TmFtZSgpLCAuLi5jb21tYW5kLmdldEFsaWFzZXMoKV0ubWFwKChuYW1lKSA9PlxuICAgICAgICAgICAgICBicmlnaHRCbHVlKG5hbWUpXG4gICAgICAgICAgICApLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZ3VtZW50cyhcbiAgICAgICAgICAgICAgY29tbWFuZC5nZXRBcmdzRGVmaW5pdGlvbigpIHx8IFwiXCIsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy50eXBlcyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByZWQoYm9sZChcIi1cIikpLFxuICAgICAgICAgICAgY29tbWFuZC5nZXRTaG9ydERlc2NyaXB0aW9uKCksXG4gICAgICAgICAgXSksXG4gICAgICAgIF0pXG4gICAgICAgICAgLmluZGVudCh0aGlzLmluZGVudCAqIDIpXG4gICAgICAgICAgLm1heENvbFdpZHRoKFs2MCwgNjAsIDEsIDgwXSlcbiAgICAgICAgICAucGFkZGluZyhbMiwgMiwgMSwgMl0pXG4gICAgICAgICAgLnRvU3RyaW5nKCkgK1xuICAgICAgICBcIlxcblwiO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhYmVsKFwiQ29tbWFuZHNcIikgK1xuICAgICAgVGFibGUuZnJvbShbXG4gICAgICAgIC4uLmNvbW1hbmRzLm1hcCgoY29tbWFuZDogQ29tbWFuZCkgPT4gW1xuICAgICAgICAgIFtjb21tYW5kLmdldE5hbWUoKSwgLi4uY29tbWFuZC5nZXRBbGlhc2VzKCldLm1hcCgobmFtZSkgPT5cbiAgICAgICAgICAgIGJyaWdodEJsdWUobmFtZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpLFxuICAgICAgICAgIHJlZChib2xkKFwiLVwiKSksXG4gICAgICAgICAgY29tbWFuZC5nZXRTaG9ydERlc2NyaXB0aW9uKCksXG4gICAgICAgIF0pLFxuICAgICAgXSlcbiAgICAgICAgLm1heENvbFdpZHRoKFs2MCwgMSwgODBdKVxuICAgICAgICAucGFkZGluZyhbMiwgMSwgMl0pXG4gICAgICAgIC5pbmRlbnQodGhpcy5pbmRlbnQgKiAyKVxuICAgICAgICAudG9TdHJpbmcoKSArXG4gICAgICBcIlxcblwiO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUVudmlyb25tZW50VmFyaWFibGVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW52VmFycyA9IHRoaXMuY21kLmdldEVudlZhcnMoZmFsc2UpO1xuICAgIGlmICghZW52VmFycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYWJlbChcIkVudmlyb25tZW50IHZhcmlhYmxlc1wiKSArXG4gICAgICBUYWJsZS5mcm9tKFtcbiAgICAgICAgLi4uZW52VmFycy5tYXAoKGVudlZhcjogRW52VmFyKSA9PiBbXG4gICAgICAgICAgZW52VmFyLm5hbWVzLm1hcCgobmFtZTogc3RyaW5nKSA9PiBicmlnaHRCbHVlKG5hbWUpKS5qb2luKFwiLCBcIiksXG4gICAgICAgICAgaGlnaGxpZ2h0QXJndW1lbnREZXRhaWxzKFxuICAgICAgICAgICAgZW52VmFyLmRldGFpbHMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudHlwZXMsXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWQoYm9sZChcIi1cIikpLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb25nXG4gICAgICAgICAgICA/IGRlZGVudChlbnZWYXIuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICA6IGVudlZhci5kZXNjcmlwdGlvbi50cmltKCkuc3BsaXQoXCJcXG5cIiwgMSlbMF0sXG4gICAgICAgICAgZW52VmFyLnJlcXVpcmVkID8gYCgke3llbGxvdyhgcmVxdWlyZWRgKX0pYCA6IFwiXCIsXG4gICAgICAgIF0pLFxuICAgICAgXSlcbiAgICAgICAgLnBhZGRpbmcoWzIsIDIsIDEsIDJdKVxuICAgICAgICAuaW5kZW50KHRoaXMuaW5kZW50ICogMilcbiAgICAgICAgLm1heENvbFdpZHRoKFs2MCwgNjAsIDEsIDgwLCAxMF0pXG4gICAgICAgIC50b1N0cmluZygpICtcbiAgICAgIFwiXFxuXCI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRXhhbXBsZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBleGFtcGxlcyA9IHRoaXMuY21kLmdldEV4YW1wbGVzKCk7XG4gICAgaWYgKCFleGFtcGxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYWJlbChcIkV4YW1wbGVzXCIpICtcbiAgICAgIFRhYmxlLmZyb20oZXhhbXBsZXMubWFwKChleGFtcGxlOiBFeGFtcGxlKSA9PiBbXG4gICAgICAgIGRpbShib2xkKGAke2NhcGl0YWxpemUoZXhhbXBsZS5uYW1lKX06YCkpLFxuICAgICAgICBkZWRlbnQoZXhhbXBsZS5kZXNjcmlwdGlvbiksXG4gICAgICBdKSlcbiAgICAgICAgLnBhZGRpbmcoMSlcbiAgICAgICAgLmluZGVudCh0aGlzLmluZGVudCAqIDIpXG4gICAgICAgIC5tYXhDb2xXaWR0aCgxNTApXG4gICAgICAgIC50b1N0cmluZygpICtcbiAgICAgIFwiXFxuXCI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlSGludHMob3B0aW9uOiBPcHRpb24pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vcHRpb25zLmhpbnRzKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgaGludHMgPSBbXTtcblxuICAgIG9wdGlvbi5yZXF1aXJlZCAmJiBoaW50cy5wdXNoKHllbGxvdyhgcmVxdWlyZWRgKSk7XG4gICAgdHlwZW9mIG9wdGlvbi5kZWZhdWx0ICE9PSBcInVuZGVmaW5lZFwiICYmIGhpbnRzLnB1c2goXG4gICAgICBib2xkKGBEZWZhdWx0OiBgKSArIGluc3BlY3Qob3B0aW9uLmRlZmF1bHQsIHRoaXMub3B0aW9ucy5jb2xvcnMpLFxuICAgICk7XG4gICAgb3B0aW9uLmRlcGVuZHM/Lmxlbmd0aCAmJiBoaW50cy5wdXNoKFxuICAgICAgeWVsbG93KGJvbGQoYERlcGVuZHM6IGApKSArXG4gICAgICAgIGl0YWxpYyhvcHRpb24uZGVwZW5kcy5tYXAoZ2V0RmxhZykuam9pbihcIiwgXCIpKSxcbiAgICApO1xuICAgIG9wdGlvbi5jb25mbGljdHM/Lmxlbmd0aCAmJiBoaW50cy5wdXNoKFxuICAgICAgcmVkKGJvbGQoYENvbmZsaWN0czogYCkpICtcbiAgICAgICAgaXRhbGljKG9wdGlvbi5jb25mbGljdHMubWFwKGdldEZsYWcpLmpvaW4oXCIsIFwiKSksXG4gICAgKTtcblxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNtZC5nZXRUeXBlKG9wdGlvbi5hcmdzWzBdPy50eXBlKT8uaGFuZGxlcjtcbiAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFR5cGUpIHtcbiAgICAgIGNvbnN0IHBvc3NpYmxlVmFsdWVzID0gdHlwZS52YWx1ZXM/Lih0aGlzLmNtZCwgdGhpcy5jbWQuZ2V0UGFyZW50KCkpO1xuICAgICAgaWYgKHBvc3NpYmxlVmFsdWVzPy5sZW5ndGgpIHtcbiAgICAgICAgaGludHMucHVzaChcbiAgICAgICAgICBib2xkKGBWYWx1ZXM6IGApICtcbiAgICAgICAgICAgIHBvc3NpYmxlVmFsdWVzLm1hcCgodmFsdWU6IHVua25vd24pID0+XG4gICAgICAgICAgICAgIGluc3BlY3QodmFsdWUsIHRoaXMub3B0aW9ucy5jb2xvcnMpXG4gICAgICAgICAgICApLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGludHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYCgke2hpbnRzLmpvaW4oXCIsIFwiKX0pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByaXZhdGUgbGFiZWwobGFiZWw6IHN0cmluZykge1xuICAgIHJldHVybiBcIlxcblwiICtcbiAgICAgIFwiIFwiLnJlcGVhdCh0aGlzLmluZGVudCkgKyBib2xkKGAke2xhYmVsfTpgKSArXG4gICAgICBcIlxcblxcblwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nPy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKSA/PyBcIlwiO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0KHZhbHVlOiB1bmtub3duLCBjb2xvcnM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICByZXR1cm4gRGVuby5pbnNwZWN0KFxuICAgIHZhbHVlLFxuICAgIC8vIGRlbm8gPCAxLjQuMyBkb2Vzbid0IHN1cHBvcnQgdGhlIGNvbG9ycyBwcm9wZXJ0eS5cbiAgICB7IGRlcHRoOiAxLCBjb2xvcnMsIHRyYWlsaW5nQ29tbWE6IGZhbHNlIH0gYXMgRGVuby5JbnNwZWN0T3B0aW9ucyxcbiAgKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBhcmd1bWVudHMgc3RyaW5nLlxuICogQHBhcmFtIGFyZ3NEZWZpbml0aW9uIEFyZ3VtZW50cyBkZWZpbml0aW9uOiBgPGNvbG9yMTpzdHJpbmc+IDxjb2xvcjI6c3RyaW5nPmBcbiAqIEBwYXJhbSB0eXBlcyBTaG93IHR5cGVzLlxuICovXG5mdW5jdGlvbiBoaWdobGlnaHRBcmd1bWVudHMoYXJnc0RlZmluaXRpb246IHN0cmluZywgdHlwZXMgPSB0cnVlKSB7XG4gIGlmICghYXJnc0RlZmluaXRpb24pIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUFyZ3VtZW50c0RlZmluaXRpb24oYXJnc0RlZmluaXRpb24sIGZhbHNlLCB0cnVlKVxuICAgIC5tYXAoKGFyZzogQXJndW1lbnQgfCBzdHJpbmcpID0+XG4gICAgICB0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiID8gYXJnIDogaGlnaGxpZ2h0QXJndW1lbnREZXRhaWxzKGFyZywgdHlwZXMpXG4gICAgKVxuICAgIC5qb2luKFwiIFwiKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBhcmd1bWVudCBzdHJpbmcuXG4gKiBAcGFyYW0gYXJnIEFyZ3VtZW50IGRldGFpbHMuXG4gKiBAcGFyYW0gdHlwZXMgU2hvdyB0eXBlcy5cbiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0QXJndW1lbnREZXRhaWxzKFxuICBhcmc6IEFyZ3VtZW50LFxuICB0eXBlcyA9IHRydWUsXG4pOiBzdHJpbmcge1xuICBsZXQgc3RyID0gXCJcIjtcblxuICBzdHIgKz0geWVsbG93KGFyZy5vcHRpb25hbFZhbHVlID8gXCJbXCIgOiBcIjxcIik7XG5cbiAgbGV0IG5hbWUgPSBcIlwiO1xuICBuYW1lICs9IGFyZy5uYW1lO1xuICBpZiAoYXJnLnZhcmlhZGljKSB7XG4gICAgbmFtZSArPSBcIi4uLlwiO1xuICB9XG4gIG5hbWUgPSBicmlnaHRNYWdlbnRhKG5hbWUpO1xuXG4gIHN0ciArPSBuYW1lO1xuXG4gIGlmICh0eXBlcykge1xuICAgIHN0ciArPSB5ZWxsb3coXCI6XCIpO1xuICAgIHN0ciArPSByZWQoYXJnLnR5cGUpO1xuICAgIGlmIChhcmcubGlzdCkge1xuICAgICAgc3RyICs9IGdyZWVuKFwiW11cIik7XG4gICAgfVxuICB9XG5cbiAgc3RyICs9IHllbGxvdyhhcmcub3B0aW9uYWxWYWx1ZSA/IFwiXVwiIDogXCI+XCIpO1xuXG4gIHJldHVybiBzdHI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLFFBQVEsd0JBQXdCO0FBQ2hELFNBQVMsS0FBSyxRQUFRLHVCQUF1QjtBQUM3QyxTQUFTLE1BQU0sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLFFBQVEsZUFBZTtBQUVoRixTQUNFLElBQUksRUFDSixVQUFVLEVBQ1YsYUFBYSxFQUNiLEdBQUcsRUFDSCxlQUFlLEVBQ2YsS0FBSyxFQUNMLE1BQU0sRUFDTixHQUFHLEVBQ0gsZUFBZSxFQUNmLE1BQU0sUUFDRCxhQUFhO0FBQ3BCLFNBQVMsSUFBSSxRQUFRLGFBQWE7QUFlbEMseUJBQXlCLEdBQ3pCLE9BQU8sTUFBTTs7RUFDSCxPQUFXO0VBQ1gsUUFBK0I7RUFFdkMsMENBQTBDLEdBQzFDLE9BQWMsU0FBUyxHQUFZLEVBQUUsT0FBcUIsRUFBVTtJQUNsRSxPQUFPLElBQUksY0FBYyxLQUFLLFNBQVMsUUFBUTtFQUNqRDtFQUVBLFlBQ0UsQUFBUSxHQUFZLEVBQ3BCLFVBQXVCLENBQUMsQ0FBQyxDQUN6QjtTQUZRLE1BQUE7U0FURixTQUFTO0lBWWYsSUFBSSxDQUFDLE9BQU8sR0FBRztNQUNiLE9BQU87TUFDUCxPQUFPO01BQ1AsUUFBUTtNQUNSLE1BQU07TUFDTixHQUFHLE9BQU87SUFDWjtFQUNGO0VBRVEsV0FBbUI7SUFDekIsTUFBTSxtQkFBbUI7SUFDekIsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtJQUVuQyxNQUFNLFNBQVMsSUFBSSxDQUFDLGNBQWMsS0FDaEMsSUFBSSxDQUFDLFlBQVksS0FDakIsSUFBSSxDQUFDLG1CQUFtQixLQUN4QixJQUFJLENBQUMsZUFBZSxLQUNwQixJQUFJ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
+// denoCacheMetadata=8250832201428207736,18270919239025489715 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/26b01031a6c86e674db7bc2e53cba480ae54b8e630505748b53d7f5f9a4f2dbd.js b/vendor/gen/https/deno.land/26b01031a6c86e674db7bc2e53cba480ae54b8e630505748b53d7f5f9a4f2dbd.js
new file mode 100644
index 0000000..8f40ecf
--- /dev/null
+++ b/vendor/gen/https/deno.land/26b01031a6c86e674db7bc2e53cba480ae54b8e630505748b53d7f5f9a4f2dbd.js
@@ -0,0 +1,89 @@
+/** Base key mapping. */ export const KeyMap = {
+ /* xterm/gnome ESC [ letter (with modifier) */ "[P": "f1",
+ "[Q": "f2",
+ "[R": "f3",
+ "[S": "f4",
+ /* xterm/gnome ESC O letter (without modifier) */ "OP": "f1",
+ "OQ": "f2",
+ "OR": "f3",
+ "OS": "f4",
+ /* xterm/rxvt ESC [ number ~ */ "[11~": "f1",
+ "[12~": "f2",
+ "[13~": "f3",
+ "[14~": "f4",
+ /* from Cygwin and used in libuv */ "[[A": "f1",
+ "[[B": "f2",
+ "[[C": "f3",
+ "[[D": "f4",
+ "[[E": "f5",
+ /* common */ "[15~": "f5",
+ "[17~": "f6",
+ "[18~": "f7",
+ "[19~": "f8",
+ "[20~": "f9",
+ "[21~": "f10",
+ "[23~": "f11",
+ "[24~": "f12",
+ /* xterm ESC [ letter */ "[A": "up",
+ "[B": "down",
+ "[C": "right",
+ "[D": "left",
+ "[E": "clear",
+ "[F": "end",
+ "[H": "home",
+ /* xterm/gnome ESC O letter */ "OA": "up",
+ "OB": "down",
+ "OC": "right",
+ "OD": "left",
+ "OE": "clear",
+ "OF": "end",
+ "OH": "home",
+ /* xterm/rxvt ESC [ number ~ */ "[1~": "home",
+ "[2~": "insert",
+ "[3~": "delete",
+ "[4~": "end",
+ "[5~": "pageup",
+ "[6~": "pagedown",
+ /* putty */ "[[5~": "pageup",
+ "[[6~": "pagedown",
+ /* rxvt */ "[7~": "home",
+ "[8~": "end"
+};
+/** Shift key mapping. */ export const KeyMapShift = {
+ /* rxvt keys with modifiers */ "[a": "up",
+ "[b": "down",
+ "[c": "right",
+ "[d": "left",
+ "[e": "clear",
+ "[2$": "insert",
+ "[3$": "delete",
+ "[5$": "pageup",
+ "[6$": "pagedown",
+ "[7$": "home",
+ "[8$": "end",
+ "[Z": "tab"
+};
+/** Ctrl key mapping. */ export const KeyMapCtrl = {
+ /* rxvt keys with modifiers */ "Oa": "up",
+ "Ob": "down",
+ "Oc": "right",
+ "Od": "left",
+ "Oe": "clear",
+ "[2^": "insert",
+ "[3^": "delete",
+ "[5^": "pageup",
+ "[6^": "pagedown",
+ "[7^": "home",
+ "[8^": "end"
+};
+/** Special key mapping. */ export const SpecialKeyMap = {
+ "\r": "return",
+ "\n": "enter",
+ "\t": "tab",
+ "\b": "backspace",
+ "\x7f": "backspace",
+ "\x1b": "escape",
+ " ": "space"
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1Ljcva2V5Y29kZS9rZXlfY29kZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEJhc2Uga2V5IG1hcHBpbmcuICovXG5leHBvcnQgY29uc3QgS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAvKiB4dGVybS9nbm9tZSBFU0MgWyBsZXR0ZXIgKHdpdGggbW9kaWZpZXIpICovXG4gIFwiW1BcIjogXCJmMVwiLFxuICBcIltRXCI6IFwiZjJcIixcbiAgXCJbUlwiOiBcImYzXCIsXG4gIFwiW1NcIjogXCJmNFwiLFxuXG4gIC8qIHh0ZXJtL2dub21lIEVTQyBPIGxldHRlciAod2l0aG91dCBtb2RpZmllcikgKi9cbiAgXCJPUFwiOiBcImYxXCIsXG4gIFwiT1FcIjogXCJmMlwiLFxuICBcIk9SXCI6IFwiZjNcIixcbiAgXCJPU1wiOiBcImY0XCIsXG5cbiAgLyogeHRlcm0vcnh2dCBFU0MgWyBudW1iZXIgfiAqL1xuICBcIlsxMX5cIjogXCJmMVwiLFxuICBcIlsxMn5cIjogXCJmMlwiLFxuICBcIlsxM35cIjogXCJmM1wiLFxuICBcIlsxNH5cIjogXCJmNFwiLFxuXG4gIC8qIGZyb20gQ3lnd2luIGFuZCB1c2VkIGluIGxpYnV2ICovXG4gIFwiW1tBXCI6IFwiZjFcIixcbiAgXCJbW0JcIjogXCJmMlwiLFxuICBcIltbQ1wiOiBcImYzXCIsXG4gIFwiW1tEXCI6IFwiZjRcIixcbiAgXCJbW0VcIjogXCJmNVwiLFxuXG4gIC8qIGNvbW1vbiAqL1xuICBcIlsxNX5cIjogXCJmNVwiLFxuICBcIlsxN35cIjogXCJmNlwiLFxuICBcIlsxOH5cIjogXCJmN1wiLFxuICBcIlsxOX5cIjogXCJmOFwiLFxuICBcIlsyMH5cIjogXCJmOVwiLFxuICBcIlsyMX5cIjogXCJmMTBcIixcbiAgXCJbMjN+XCI6IFwiZjExXCIsXG4gIFwiWzI0flwiOiBcImYxMlwiLFxuXG4gIC8qIHh0ZXJtIEVTQyBbIGxldHRlciAqL1xuICBcIltBXCI6IFwidXBcIixcbiAgXCJbQlwiOiBcImRvd25cIixcbiAgXCJbQ1wiOiBcInJpZ2h0XCIsXG4gIFwiW0RcIjogXCJsZWZ0XCIsXG4gIFwiW0VcIjogXCJjbGVhclwiLFxuICBcIltGXCI6IFwiZW5kXCIsXG4gIFwiW0hcIjogXCJob21lXCIsXG5cbiAgLyogeHRlcm0vZ25vbWUgRVNDIE8gbGV0dGVyICovXG4gIFwiT0FcIjogXCJ1cFwiLFxuICBcIk9CXCI6IFwiZG93blwiLFxuICBcIk9DXCI6IFwicmlnaHRcIixcbiAgXCJPRFwiOiBcImxlZnRcIixcbiAgXCJPRVwiOiBcImNsZWFyXCIsXG4gIFwiT0ZcIjogXCJlbmRcIixcbiAgXCJPSFwiOiBcImhvbWVcIixcblxuICAvKiB4dGVybS9yeHZ0IEVTQyBbIG51bWJlciB+ICovXG4gIFwiWzF+XCI6IFwiaG9tZVwiLFxuICBcIlsyflwiOiBcImluc2VydFwiLFxuICBcIlszflwiOiBcImRlbGV0ZVwiLFxuICBcIls0flwiOiBcImVuZFwiLFxuICBcIls1flwiOiBcInBhZ2V1cFwiLFxuICBcIls2flwiOiBcInBhZ2Vkb3duXCIsXG5cbiAgLyogcHV0dHkgKi9cbiAgXCJbWzV+XCI6IFwicGFnZXVwXCIsXG4gIFwiW1s2flwiOiBcInBhZ2Vkb3duXCIsXG5cbiAgLyogcnh2dCAqL1xuICBcIls3flwiOiBcImhvbWVcIixcbiAgXCJbOH5cIjogXCJlbmRcIixcbn07XG5cbi8qKiBTaGlmdCBrZXkgbWFwcGluZy4gKi9cbmV4cG9ydCBjb25zdCBLZXlNYXBTaGlmdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgLyogcnh2dCBrZXlzIHdpdGggbW9kaWZpZXJzICovXG4gIFwiW2FcIjogXCJ1cFwiLFxuICBcIltiXCI6IFwiZG93blwiLFxuICBcIltjXCI6IFwicmlnaHRcIixcbiAgXCJbZFwiOiBcImxlZnRcIixcbiAgXCJbZVwiOiBcImNsZWFyXCIsXG5cbiAgXCJbMiRcIjogXCJpbnNlcnRcIixcbiAgXCJbMyRcIjogXCJkZWxldGVcIixcbiAgXCJbNSRcIjogXCJwYWdldXBcIixcbiAgXCJbNiRcIjogXCJwYWdlZG93blwiLFxuICBcIls3JFwiOiBcImhvbWVcIixcbiAgXCJbOCRcIjogXCJlbmRcIixcblxuICBcIltaXCI6IFwidGFiXCIsXG59O1xuXG4vKiogQ3RybCBrZXkgbWFwcGluZy4gKi9cbmV4cG9ydCBjb25zdCBLZXlNYXBDdHJsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAvKiByeHZ0IGtleXMgd2l0aCBtb2RpZmllcnMgKi9cbiAgXCJPYVwiOiBcInVwXCIsXG4gIFwiT2JcIjogXCJkb3duXCIsXG4gIFwiT2NcIjogXCJyaWdodFwiLFxuICBcIk9kXCI6IFwibGVmdFwiLFxuICBcIk9lXCI6IFwiY2xlYXJcIixcblxuICBcIlsyXlwiOiBcImluc2VydFwiLFxuICBcIlszXlwiOiBcImRlbGV0ZVwiLFxuICBcIls1XlwiOiBcInBhZ2V1cFwiLFxuICBcIls2XlwiOiBcInBhZ2Vkb3duXCIsXG4gIFwiWzdeXCI6IFwiaG9tZVwiLFxuICBcIls4XlwiOiBcImVuZFwiLFxufTtcblxuLyoqIFNwZWNpYWwga2V5IG1hcHBpbmcuICovXG5leHBvcnQgY29uc3QgU3BlY2lhbEtleU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJcXHJcIjogXCJyZXR1cm5cIixcbiAgXCJcXG5cIjogXCJlbnRlclwiLFxuICBcIlxcdFwiOiBcInRhYlwiLFxuICBcIlxcYlwiOiBcImJhY2tzcGFjZVwiLFxuICBcIlxceDdmXCI6IFwiYmFja3NwYWNlXCIsXG4gIFwiXFx4MWJcIjogXCJlc2NhcGVcIixcbiAgXCIgXCI6IFwic3BhY2VcIixcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCLEdBQ3RCLE9BQU8sTUFBTSxTQUFpQztFQUM1Qyw0Q0FBNEMsR0FDNUMsTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUVOLCtDQUErQyxHQUMvQyxNQUFNO0VBQ04sTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBRU4sNkJBQTZCLEdBQzdCLFFBQVE7RUFDUixRQUFRO0VBQ1IsUUFBUTtFQUNSLFFBQVE7RUFFUixpQ0FBaUMsR0FDakMsT0FBTztFQUNQLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztFQUNQLE9BQU87RUFFUCxVQUFVLEdBQ1YsUUFBUTtFQUNSLFFBQVE7RUFDUixRQUFRO0VBQ1IsUUFBUTtFQUNSLFFBQVE7RUFDUixRQUFRO0VBQ1IsUUFBUTtFQUNSLFFBQVE7RUFFUixzQkFBc0IsR0FDdEIsTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUVOLDRCQUE0QixHQUM1QixNQUFNO0VBQ04sTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBRU4sNkJBQTZCLEdBQzdCLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztFQUNQLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztFQUVQLFNBQVMsR0FDVCxRQUFRO0VBQ1IsUUFBUTtFQUVSLFFBQVEsR0FDUixPQUFPO0VBQ1AsT0FBTztBQUNULEVBQUU7QUFFRix1QkFBdUIsR0FDdkIsT0FBTyxNQUFNLGNBQXNDO0VBQ2pELDRCQUE0QixHQUM1QixNQUFNO0VBQ04sTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUVOLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztFQUNQLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztFQUVQLE1BQU07QUFDUixFQUFFO0FBRUYsc0JBQXNCLEdBQ3RCLE9BQU8sTUFBTSxhQUFxQztFQUNoRCw0QkFBNEIsR0FDNUIsTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUNOLE1BQU07RUFFTixPQUFPO0VBQ1AsT0FBTztFQUNQLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztFQUNQLE9BQU87QUFDVCxFQUFFO0FBRUYseUJBQXlCLEdBQ3pCLE9BQU8sTUFBTSxnQkFBd0M7RUFDbkQsTUFBTTtFQUNOLE1BQU07RUFDTixNQUFNO0VBQ04sTUFBTTtFQUNOLFFBQVE7RUFDUixRQUFRO0VBQ1IsS0FBSztBQUNQLEVBQUUifQ==
+// denoCacheMetadata=1426592559983996066,12613432403990294189 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2776d915d491213dda5d2fd2df49f58b04545cf60f8bcda7328a908de8f56537.js b/vendor/gen/https/deno.land/2776d915d491213dda5d2fd2df49f58b04545cf60f8bcda7328a908de8f56537.js
new file mode 100644
index 0000000..ffb3aa2
--- /dev/null
+++ b/vendor/gen/https/deno.land/2776d915d491213dda5d2fd2df49f58b04545cf60f8bcda7328a908de8f56537.js
@@ -0,0 +1,106 @@
+/** Cell type */ // deno-lint-ignore ban-types
+/** Cell representation. */ export class Cell {
+ value;
+ options;
+ /** Get cell length. */ get length() {
+ return this.toString().length;
+ }
+ /**
+ * Create a new cell. If value is a cell, the value and all options of the cell
+ * will be copied to the new cell.
+ * @param value Cell or cell value.
+ */ static from(value) {
+ const cell = new this(value);
+ if (value instanceof Cell) {
+ cell.options = {
+ ...value.options
+ };
+ }
+ return cell;
+ }
+ /**
+ * Cell constructor.
+ * @param value Cell value.
+ */ constructor(value){
+ this.value = value;
+ this.options = {};
+ }
+ /** Get cell value. */ toString() {
+ return this.value.toString();
+ }
+ /**
+ * Set cell value.
+ * @param value Cell or cell value.
+ */ setValue(value) {
+ this.value = value;
+ return this;
+ }
+ /**
+ * Clone cell with all options.
+ * @param value Cell or cell value.
+ */ clone(value) {
+ const cell = new Cell(value ?? this);
+ cell.options = {
+ ...this.options
+ };
+ return cell;
+ }
+ /**
+ * Setter:
+ */ /**
+ * Enable/disable cell border.
+ * @param enable Enable/disable cell border.
+ * @param override Override existing value.
+ */ border(enable, override = true) {
+ if (override || typeof this.options.border === "undefined") {
+ this.options.border = enable;
+ }
+ return this;
+ }
+ /**
+ * Set col span.
+ * @param span Number of cols to span.
+ * @param override Override existing value.
+ */ colSpan(span, override = true) {
+ if (override || typeof this.options.colSpan === "undefined") {
+ this.options.colSpan = span;
+ }
+ return this;
+ }
+ /**
+ * Set row span.
+ * @param span Number of rows to span.
+ * @param override Override existing value.
+ */ rowSpan(span, override = true) {
+ if (override || typeof this.options.rowSpan === "undefined") {
+ this.options.rowSpan = span;
+ }
+ return this;
+ }
+ /**
+ * Align cell content.
+ * @param direction Align direction.
+ * @param override Override existing value.
+ */ align(direction, override = true) {
+ if (override || typeof this.options.align === "undefined") {
+ this.options.align = direction;
+ }
+ return this;
+ }
+ /**
+ * Getter:
+ */ /** Check if cell has border. */ getBorder() {
+ return this.options.border === true;
+ }
+ /** Get col span. */ getColSpan() {
+ return typeof this.options.colSpan === "number" && this.options.colSpan > 0 ? this.options.colSpan : 1;
+ }
+ /** Get row span. */ getRowSpan() {
+ return typeof this.options.rowSpan === "number" && this.options.rowSpan > 0 ? this.options.rowSpan : 1;
+ }
+ /** Get row span. */ getAlign() {
+ return this.options.align ?? "left";
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvY2VsbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ2VsbCB0eXBlICovXG4vLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuZXhwb3J0IHR5cGUgSUNlbGwgPSBudW1iZXIgfCBzdHJpbmcgfCBTdHJpbmcgfCBDZWxsO1xuXG5leHBvcnQgdHlwZSBEaXJlY3Rpb24gPSBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwiY2VudGVyXCI7XG5cbi8qKiBDZWxsIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsT3B0aW9ucyB7XG4gIGJvcmRlcj86IGJvb2xlYW47XG4gIGNvbFNwYW4/OiBudW1iZXI7XG4gIHJvd1NwYW4/OiBudW1iZXI7XG4gIGFsaWduPzogRGlyZWN0aW9uO1xufVxuXG4vKiogQ2VsbCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsIHtcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IElDZWxsT3B0aW9ucyA9IHt9O1xuXG4gIC8qKiBHZXQgY2VsbCBsZW5ndGguICovXG4gIHB1YmxpYyBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGNlbGwuIElmIHZhbHVlIGlzIGEgY2VsbCwgdGhlIHZhbHVlIGFuZCBhbGwgb3B0aW9ucyBvZiB0aGUgY2VsbFxuICAgKiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IGNlbGwuXG4gICAqIEBwYXJhbSB2YWx1ZSBDZWxsIG9yIGNlbGwgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb20odmFsdWU6IElDZWxsKTogQ2VsbCB7XG4gICAgY29uc3QgY2VsbCA9IG5ldyB0aGlzKHZhbHVlKTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBDZWxsKSB7XG4gICAgICBjZWxsLm9wdGlvbnMgPSB7IC4uLnZhbHVlLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cblxuICAvKipcbiAgICogQ2VsbCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHZhbHVlIENlbGwgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSB2YWx1ZTogSUNlbGwpIHt9XG5cbiAgLyoqIEdldCBjZWxsIHZhbHVlLiAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjZWxsIHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgQ2VsbCBvciBjZWxsIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBJQ2VsbCk6IHRoaXMge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZSBjZWxsIHdpdGggYWxsIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB2YWx1ZSBDZWxsIG9yIGNlbGwgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2xvbmUodmFsdWU/OiBJQ2VsbCk6IENlbGwge1xuICAgIGNvbnN0IGNlbGwgPSBuZXcgQ2VsbCh2YWx1ZSA/PyB0aGlzKTtcbiAgICBjZWxsLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucyB9O1xuICAgIHJldHVybiBjZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRlcjpcbiAgICovXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIGNlbGwgYm9yZGVyLlxuICAgKiBAcGFyYW0gZW5hYmxlICAgIEVuYWJsZS9kaXNhYmxlIGNlbGwgYm9yZGVyLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGJvcmRlcihlbmFibGU6IGJvb2xlYW4sIG92ZXJyaWRlID0gdHJ1ZSk6IHRoaXMge1xuICAgIGlmIChvdmVycmlkZSB8fCB0eXBlb2YgdGhpcy5vcHRpb25zLmJvcmRlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5vcHRpb25zLmJvcmRlciA9IGVuYWJsZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbCBzcGFuLlxuICAgKiBAcGFyYW0gc3BhbiAgICAgIE51bWJlciBvZiBjb2xzIHRvIHNwYW4uXG4gICAqIEBwYXJhbSBvdmVycmlkZSAgT3ZlcnJpZGUgZXhpc3RpbmcgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY29sU3BhbihzcGFuOiBudW1iZXIsIG92ZXJyaWRlID0gdHJ1ZSk6IHRoaXMge1xuICAgIGlmIChvdmVycmlkZSB8fCB0eXBlb2YgdGhpcy5vcHRpb25zLmNvbFNwYW4gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5jb2xTcGFuID0gc3BhbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJvdyBzcGFuLlxuICAgKiBAcGFyYW0gc3BhbiAgICAgIE51bWJlciBvZiByb3dzIHRvIHNwYW4uXG4gICAqIEBwYXJhbSBvdmVycmlkZSAgT3ZlcnJpZGUgZXhpc3RpbmcgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcm93U3BhbihzcGFuOiBudW1iZXIsIG92ZXJyaWRlID0gdHJ1ZSk6IHRoaXMge1xuICAgIGlmIChvdmVycmlkZSB8fCB0eXBlb2YgdGhpcy5vcHRpb25zLnJvd1NwYW4gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5yb3dTcGFuID0gc3BhbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxpZ24gY2VsbCBjb250ZW50LlxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIEFsaWduIGRpcmVjdGlvbi5cbiAgICogQHBhcmFtIG92ZXJyaWRlICBPdmVycmlkZSBleGlzdGluZyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBhbGlnbihkaXJlY3Rpb246IERpcmVjdGlvbiwgb3ZlcnJpZGUgPSB0cnVlKTogdGhpcyB7XG4gICAgaWYgKG92ZXJyaWRlIHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMuYWxpZ24gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5hbGlnbiA9IGRpcmVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyOlxuICAgKi9cblxuICAvKiogQ2hlY2sgaWYgY2VsbCBoYXMgYm9yZGVyLiAqL1xuICBwdWJsaWMgZ2V0Qm9yZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYm9yZGVyID09PSB0cnVlO1xuICB9XG5cbiAgLyoqIEdldCBjb2wgc3Bhbi4gKi9cbiAgcHVibGljIGdldENvbFNwYW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5jb2xTcGFuID09PSBcIm51bWJlclwiICYmIHRoaXMub3B0aW9ucy5jb2xTcGFuID4gMFxuICAgICAgPyB0aGlzLm9wdGlvbnMuY29sU3BhblxuICAgICAgOiAxO1xuICB9XG5cbiAgLyoqIEdldCByb3cgc3Bhbi4gKi9cbiAgcHVibGljIGdldFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5yb3dTcGFuID09PSBcIm51bWJlclwiICYmIHRoaXMub3B0aW9ucy5yb3dTcGFuID4gMFxuICAgICAgPyB0aGlzLm9wdGlvbnMucm93U3BhblxuICAgICAgOiAxO1xuICB9XG5cbiAgLyoqIEdldCByb3cgc3Bhbi4gKi9cbiAgcHVibGljIGdldEFsaWduKCk6IERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbGlnbiA/PyBcImxlZnRcIjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJB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
+// denoCacheMetadata=7398184624764203867,4849472601972011237 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/27cac20f1c3fe1bb58f37d1f8e15c5ed582d09aa5da88c4c3c39bf6ca7066eb6.js b/vendor/gen/https/deno.land/27cac20f1c3fe1bb58f37d1f8e15c5ed582d09aa5da88c4c3c39bf6ca7066eb6.js
new file mode 100644
index 0000000..7132d5d
--- /dev/null
+++ b/vendor/gen/https/deno.land/27cac20f1c3fe1bb58f37d1f8e15c5ed582d09aa5da88c4c3c39bf6ca7066eb6.js
@@ -0,0 +1,132 @@
+import { brightBlue, dim, green, red, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+import { GenericList } from "./_generic_list.ts";
+import { GenericPrompt } from "./_generic_prompt.ts";
+/** Checkbox prompt representation. */ export class Checkbox extends GenericList {
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Array of input values.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ listPointer: brightBlue(Figures.POINTER),
+ maxRows: 10,
+ searchLabel: brightBlue(Figures.SEARCH),
+ minOptions: 0,
+ maxOptions: Infinity,
+ check: green(Figures.TICK),
+ uncheck: red(Figures.CROSS),
+ ...options,
+ keys: {
+ check: [
+ "space"
+ ],
+ ...options.keys ?? {}
+ },
+ options: Checkbox.mapOptions(options)
+ }).prompt();
+ }
+ /**
+ * Create list separator.
+ * @param label Separator label.
+ */ static separator(label) {
+ return {
+ ...super.separator(label),
+ icon: false
+ };
+ }
+ /**
+ * Map string option values to options and set option defaults.
+ * @param options Checkbox options.
+ */ static mapOptions(options) {
+ return options.options.map((item)=>typeof item === "string" ? {
+ value: item
+ } : item).map((item)=>({
+ ...this.mapOption(item),
+ checked: typeof item.checked === "undefined" && options.default && options.default.indexOf(item.value) !== -1 ? true : !!item.checked,
+ icon: typeof item.icon === "undefined" ? true : item.icon
+ }));
+ }
+ /**
+ * Render checkbox option.
+ * @param item Checkbox option settings.
+ * @param isSelected Set to true if option is selected.
+ */ getListItem(item, isSelected) {
+ let line = this.settings.indent;
+ // pointer
+ line += isSelected ? this.settings.listPointer + " " : " ";
+ // icon
+ if (item.icon) {
+ let check = item.checked ? this.settings.check + " " : this.settings.uncheck + " ";
+ if (item.disabled) {
+ check = dim(check);
+ }
+ line += check;
+ } else {
+ line += " ";
+ }
+ // value
+ line += `${isSelected && !item.disabled ? this.highlight(item.name, (val)=>val) : this.highlight(item.name)}`;
+ return line;
+ }
+ /** Get value of checked options. */ getValue() {
+ return this.settings.options.filter((item)=>item.checked).map((item)=>item.value);
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case this.isKey(this.settings.keys, "check", event):
+ this.checkValue();
+ break;
+ default:
+ await super.handleEvent(event);
+ }
+ }
+ /** Check selected option. */ checkValue() {
+ const item = this.options[this.listIndex];
+ if (item.disabled) {
+ this.setErrorMessage("This option is disabled and cannot be changed.");
+ } else {
+ item.checked = !item.checked;
+ }
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ const isValidValue = Array.isArray(value) && value.every((val)=>typeof val === "string" && val.length > 0 && this.settings.options.findIndex((option)=>option.value === val) !== -1);
+ if (!isValidValue) {
+ return false;
+ }
+ if (value.length < this.settings.minOptions) {
+ return `The minimum number of options is ${this.settings.minOptions} but got ${value.length}.`;
+ }
+ if (value.length > this.settings.maxOptions) {
+ return `The maximum number of options is ${this.settings.maxOptions} but got ${value.length}.`;
+ }
+ return true;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ return value.map((val)=>val.trim());
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return value.map((val)=>this.getOptionByValue(val)?.name ?? val).join(", ");
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L2NoZWNrYm94LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgS2V5Q29kZSB9IGZyb20gXCIuLi9rZXljb2RlL21vZC50c1wiO1xuaW1wb3J0IHsgYnJpZ2h0Qmx1ZSwgZGltLCBncmVlbiwgcmVkLCB5ZWxsb3cgfSBmcm9tIFwiLi9kZXBzLnRzXCI7XG5pbXBvcnQgeyBGaWd1cmVzIH0gZnJvbSBcIi4vZmlndXJlcy50c1wiO1xuaW1wb3J0IHtcbiAgR2VuZXJpY0xpc3QsXG4gIEdlbmVyaWNMaXN0S2V5cyxcbiAgR2VuZXJpY0xpc3RPcHRpb24sXG4gIEdlbmVyaWNMaXN0T3B0aW9ucyxcbiAgR2VuZXJpY0xpc3RPcHRpb25TZXR0aW5ncyxcbiAgR2VuZXJpY0xpc3RTZXR0aW5ncyxcbn0gZnJvbSBcIi4vX2dlbmVyaWNfbGlzdC50c1wiO1xuaW1wb3J0IHsgR2VuZXJpY1Byb21wdCB9IGZyb20gXCIuL19nZW5lcmljX3Byb21wdC50c1wiO1xuXG4vKiogQ2hlY2tib3gga2V5IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrYm94S2V5cyBleHRlbmRzIEdlbmVyaWNMaXN0S2V5cyB7XG4gIGNoZWNrPzogc3RyaW5nW107XG59XG5cbi8qKiBDaGVja2JveCBvcHRpb24gb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3hPcHRpb24gZXh0ZW5kcyBHZW5lcmljTGlzdE9wdGlvbiB7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBpY29uPzogYm9vbGVhbjtcbn1cblxuLyoqIENoZWNrYm94IG9wdGlvbiBzZXR0aW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3hPcHRpb25TZXR0aW5ncyBleHRlbmRzIEdlbmVyaWNMaXN0T3B0aW9uU2V0dGluZ3Mge1xuICBjaGVja2VkOiBib29sZWFuO1xuICBpY29uOiBib29sZWFuO1xufVxuXG4vKiogQ2hlY2tib3ggb3B0aW9ucyB0eXBlLiAqL1xuZXhwb3J0IHR5cGUgQ2hlY2tib3hWYWx1ZU9wdGlvbnMgPSAoc3RyaW5nIHwgQ2hlY2tib3hPcHRpb24pW107XG4vKiogQ2hlY2tib3ggb3B0aW9uIHNldHRpbmdzIHR5cGUuICovXG5leHBvcnQgdHlwZSBDaGVja2JveFZhbHVlU2V0dGluZ3MgPSBDaGVja2JveE9wdGlvblNldHRpbmdzW107XG5cbi8qKiBDaGVja2JveCBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3hPcHRpb25zXG4gIGV4dGVuZHMgR2VuZXJpY0xpc3RPcHRpb25zPHN0cmluZ1tdLCBzdHJpbmdbXT4ge1xuICBvcHRpb25zOiBDaGVja2JveFZhbHVlT3B0aW9ucztcbiAgY2hlY2s/OiBzdHJpbmc7XG4gIHVuY2hlY2s/OiBzdHJpbmc7XG4gIG1pbk9wdGlvbnM/OiBudW1iZXI7XG4gIG1heE9wdGlvbnM/OiBudW1iZXI7XG4gIGtleXM/OiBDaGVja2JveEtleXM7XG59XG5cbi8qKiBDaGVja2JveCBwcm9tcHQgc2V0dGluZ3MuICovXG5pbnRlcmZhY2UgQ2hlY2tib3hTZXR0aW5ncyBleHRlbmRzIEdlbmVyaWNMaXN0U2V0dGluZ3M8c3RyaW5nW10sIHN0cmluZ1tdPiB7XG4gIG9wdGlvbnM6IENoZWNrYm94VmFsdWVTZXR0aW5ncztcbiAgY2hlY2s6IHN0cmluZztcbiAgdW5jaGVjazogc3RyaW5nO1xuICBtaW5PcHRpb25zOiBudW1iZXI7XG4gIG1heE9wdGlvbnM6IG51bWJlcjtcbiAga2V5cz86IENoZWNrYm94S2V5cztcbn1cblxuLyoqIENoZWNrYm94IHByb21wdCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja2JveFxuICBleHRlbmRzIEdlbmVyaWNMaXN0PHN0cmluZ1tdLCBzdHJpbmdbXSwgQ2hlY2tib3hTZXR0aW5ncz4ge1xuICAvKipcbiAgICogSW5qZWN0IHByb21wdCB2YWx1ZS4gQ2FuIGJlIHVzZWQgZm9yIHVuaXQgdGVzdHMgb3IgcHJlIHNlbGVjdGlvbnMuXG4gICAqIEBwYXJhbSB2YWx1ZSBBcnJheSBvZiBpbnB1dCB2YWx1ZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGluamVjdCh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBHZW5lcmljUHJvbXB0LmluamVjdCh2YWx1ZSk7XG4gIH1cblxuICAvKiogRXhlY3V0ZSB0aGUgcHJvbXB0IGFuZCBzaG93IGN1cnNvciBvbiBlbmQuICovXG4gIHB1YmxpYyBzdGF0aWMgcHJvbXB0KG9wdGlvbnM6IENoZWNrYm94T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgcG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVJfU01BTEwpLFxuICAgICAgcHJlZml4OiB5ZWxsb3coXCI/IFwiKSxcbiAgICAgIGluZGVudDogXCIgXCIsXG4gICAgICBsaXN0UG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVIpLFxuICAgICAgbWF4Um93czogMTAsXG4gICAgICBzZWFyY2hMYWJlbDogYnJpZ2h0Qmx1ZShGaWd1cmVzLlNFQVJDSCksXG4gICAgICBtaW5PcHRpb25zOiAwLFxuICAgICAgbWF4T3B0aW9uczogSW5maW5pdHksXG4gICAgICBjaGVjazogZ3JlZW4oRmlndXJlcy5USUNLKSxcbiAgICAgIHVuY2hlY2s6IHJlZChGaWd1cmVzLkNST1NTKSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBrZXlzOiB7XG4gICAgICAgIGNoZWNrOiBbXCJzcGFjZVwiXSxcbiAgICAgICAgLi4uKG9wdGlvbnMua2V5cyA/PyB7fSksXG4gICAgICB9LFxuICAgICAgb3B0aW9uczogQ2hlY2tib3gubWFwT3B0aW9ucyhvcHRpb25zKSxcbiAgICB9KS5wcm9tcHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbGlzdCBzZXBhcmF0b3IuXG4gICAqIEBwYXJhbSBsYWJlbCBTZXBhcmF0b3IgbGFiZWwuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNlcGFyYXRvcihsYWJlbD86IHN0cmluZyk6IENoZWNrYm94T3B0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuc2VwYXJhdG9yKGxhYmVsKSxcbiAgICAgIGljb246IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTWFwIHN0cmluZyBvcHRpb24gdmFsdWVzIHRvIG9wdGlvbnMgYW5kIHNldCBvcHRpb24gZGVmYXVsdHMuXG4gICAqIEBwYXJhbSBvcHRpb25zIENoZWNrYm94IG9wdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIG1hcE9wdGlvbnMob3B0aW9uczogQ2hlY2tib3hPcHRpb25zKTogQ2hlY2tib3hWYWx1ZVNldHRpbmdzIHtcbiAgICByZXR1cm4gb3B0aW9ucy5vcHRpb25zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcgfCBDaGVja2JveE9wdGlvbikgPT5cbiAgICAgICAgdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyB7IHZhbHVlOiBpdGVtIH0gOiBpdGVtXG4gICAgICApXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAuLi50aGlzLm1hcE9wdGlvbihpdGVtKSxcbiAgICAgICAgY2hlY2tlZDogdHlwZW9mIGl0ZW0uY2hlY2tlZCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBvcHRpb25zLmRlZmF1bHQgJiZcbiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdC5pbmRleE9mKGl0ZW0udmFsdWUpICE9PSAtMVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogISFpdGVtLmNoZWNrZWQsXG4gICAgICAgIGljb246IHR5cGVvZiBpdGVtLmljb24gPT09IFwidW5kZWZpbmVkXCIgPyB0cnVlIDogaXRlbS5pY29uLFxuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBjaGVja2JveCBvcHRpb24uXG4gICAqIEBwYXJhbSBpdGVtICAgICAgICBDaGVja2JveCBvcHRpb24gc2V0dGluZ3MuXG4gICAqIEBwYXJhbSBpc1NlbGVjdGVkICBTZXQgdG8gdHJ1ZSBpZiBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TGlzdEl0ZW0oXG4gICAgaXRlbTogQ2hlY2tib3hPcHRpb25TZXR0aW5ncyxcbiAgICBpc1NlbGVjdGVkPzogYm9vbGVhbixcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgbGluZSA9IHRoaXMuc2V0dGluZ3MuaW5kZW50O1xuXG4gICAgLy8gcG9pbnRlclxuICAgIGxpbmUgKz0gaXNTZWxlY3RlZCA/IHRoaXMuc2V0dGluZ3MubGlzdFBvaW50ZXIgKyBcIiBcIiA6IFwiICBcIjtcblxuICAgIC8vIGljb25cbiAgICBpZiAoaXRlbS5pY29uKSB7XG4gICAgICBsZXQgY2hlY2sgPSBpdGVtLmNoZWNrZWRcbiAgICAgICAgPyB0aGlzLnNldHRpbmdzLmNoZWNrICsgXCIgXCJcbiAgICAgICAgOiB0aGlzLnNldHRpbmdzLnVuY2hlY2sgKyBcIiBcIjtcbiAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGNoZWNrID0gZGltKGNoZWNrKTtcbiAgICAgIH1cbiAgICAgIGxpbmUgKz0gY2hlY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmUgKz0gXCIgIFwiO1xuICAgIH1cblxuICAgIC8vIHZhbHVlXG4gICAgbGluZSArPSBgJHtcbiAgICAgIGlzU2VsZWN0ZWQgJiYgIWl0ZW0uZGlzYWJsZWRcbiAgICAgICAgPyB0aGlzLmhpZ2hsaWdodChpdGVtLm5hbWUsICh2YWwpID0+IHZhbClcbiAgICAgICAgOiB0aGlzLmhpZ2hsaWdodChpdGVtLm5hbWUpXG4gICAgfWA7XG5cbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIC8qKiBHZXQgdmFsdWUgb2YgY2hlY2tlZCBvcHRpb25zLiAqL1xuICBwcm90ZWN0ZWQgZ2V0VmFsdWUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB1c2VyIGlucHV0IGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgS2V5IGV2ZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUV2ZW50KGV2ZW50OiBLZXlDb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHRoaXMuaXNLZXkodGhpcy5zZXR0aW5ncy5rZXlzLCBcImNoZWNrXCIsIGV2ZW50KTpcbiAgICAgICAgdGhpcy5jaGVja1ZhbHVlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXdhaXQgc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVjayBzZWxlY3RlZCBvcHRpb24uICovXG4gIHByb3RlY3RlZCBjaGVja1ZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm9wdGlvbnNbdGhpcy5saXN0SW5kZXhdO1xuICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNldEVycm9yTWVzc2FnZShcIlRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGFuZCBjYW5ub3QgYmUgY2hhbmdlZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uY2hlY2tlZCA9ICFpdGVtLmNoZWNrZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlucHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVXNlciBpbnB1dCB2YWx1ZS5cbiAgICogQHJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9yIGVycm9yIG1lc3NhZ2Ugb24gZXJyb3IuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGUodmFsdWU6IHN0cmluZ1tdKTogYm9vbGVhbiB8IHN0cmluZyB7XG4gICAgY29uc3QgaXNWYWxpZFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgIHZhbHVlLmV2ZXJ5KCh2YWwpID0+XG4gICAgICAgIHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgdmFsLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5vcHRpb25zLmZpbmRJbmRleCgob3B0aW9uOiBDaGVja2JveE9wdGlvblNldHRpbmdzKSA9PlxuICAgICAgICAgICAgb3B0aW9uLnZhbHVlID09PSB2YWxcbiAgICAgICAgICApICE9PSAtMVxuICAgICAgKTtcblxuICAgIGlmICghaXNWYWxpZFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuc2V0dGluZ3MubWluT3B0aW9ucykge1xuICAgICAgcmV0dXJuIGBUaGUgbWluaW11bSBudW1iZXIgb2Ygb3B0aW9ucyBpcyAke3RoaXMuc2V0dGluZ3MubWluT3B0aW9uc30gYnV0IGdvdCAke3ZhbHVlLmxlbmd0aH0uYDtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMuc2V0dGluZ3MubWF4T3B0aW9ucykge1xuICAgICAgcmV0dXJuIGBUaGUgbWF4aW11bSBudW1iZXIgb2Ygb3B0aW9ucyBpcyAke3RoaXMuc2V0dGluZ3MubWF4T3B0aW9uc30gYnV0IGdvdCAke3ZhbHVlLmxlbmd0aH0uYDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgaW5wdXQgdmFsdWUgdG8gb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUuXG4gICAqIEByZXR1cm4gT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgodmFsKSA9PiB2YWwudHJpbSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdCh2YWx1ZTogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKHZhbCkgPT4gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbCk/Lm5hbWUgPz8gdmFsKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxZQUFZO0FBQ2hFLFNBQVMsT0FBTyxRQUFRLGVBQWU7QUFDdkMsU0FDRSxXQUFXLFFBTU4scUJBQXFCO0FBQzVCLFNBQVMsYUFBYSxRQUFRLHVCQUF1QjtBQTZDckQsb0NBQW9DLEdBQ3BDLE9BQU8sTUFBTSxpQkFDSDtFQUNSOzs7R0FHQyxHQUNELE9BQWMsT0FBTyxLQUFlLEVBQVE7SUFDMUMsY0FBYyxNQUFNLENBQUM7RUFDdkI7RUFFQSwrQ0FBK0MsR0FDL0MsT0FBYyxPQUFPLE9BQXdCLEVBQXFCO0lBQ2hFLE9BQU8sSUFBSSxJQUFJLENBQUM7TUFDZCxTQUFTLFdBQVcsUUFBUSxhQUFhO01BQ3pDLFFBQVEsT0FBTztNQUNmLFFBQVE7TUFDUixhQUFhLFdBQVcsUUFBUSxPQUFPO01BQ3ZDLFNBQVM7TUFDVCxhQUFhLFdBQVcsUUFBUSxNQUFNO01BQ3RDLFlBQVk7TUFDWixZQUFZO01BQ1osT0FBTyxNQUFNLFFBQVEsSUFBSTtNQUN6QixTQUFTLElBQUksUUFBUSxLQUFLO01BQzFCLEdBQUcsT0FBTztNQUNWLE1BQU07UUFDSixPQUFPO1VBQUM7U0FBUTtRQUNoQixHQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztNQUN4QjtNQUNBLFNBQVMsU0FBUyxVQUFVLENBQUM7SUFDL0IsR0FBRyxNQUFNO0VBQ1g7RUFFQTs7O0dBR0MsR0FDRCxPQUFjLFVBQVUsS0FBYyxFQUFrQjtJQUN0RCxPQUFPO01BQ0wsR0FBRyxLQUFLLENBQUMsVUFBVSxNQUFNO01BQ3pCLE1BQU07SUFDUjtFQUNGO0VBRUE7OztHQUdDLEdBQ0QsT0FBaUIsV0FBVyxPQUF3QixFQUF5QjtJQUMzRSxPQUFPLFFBQVEsT0FBTyxDQUNuQixHQUFHLENBQUMsQ0FBQyxPQUNKLE9BQU8sU0FBUyxXQUFXO1FBQUUsT0FBTztNQUFLLElBQUksTUFFOUMsR0FBRyxDQUFDLENBQUMsT0FBUyxDQUFDO1FBQ2QsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7UUFDdkIsU0FBUyxPQUFPLEtBQUssT0FBTyxLQUFLLGVBQWUsUUFBUSxPQUFPLElBQzNELFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLElBQ3pDLE9BQ0EsQ0FBQyxDQUFDLEtBQUssT0FBTztRQUNsQixNQUFNLE9BQU8sS0FBSyxJQUFJLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSTtNQUMzRCxDQUFDO0VBQ0w7RUFFQTs7OztHQUlDLEdBQ0QsQUFBVSxZQUNSLElBQTRCLEVBQzVCLFVBQW9CLEVBQ1o7SUFDUixJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBRS9CLFVBQVU7SUFDVixRQUFRLGFBQWEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsTUFBTTtJQUV2RCxPQUFPO0lBQ1AsSUFBSSxLQUFLLElBQUksRUFBRTtNQUNiLElBQUksUUFBUSxLQUFLLE9BQU8sR0FDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUc7TUFDNUIsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNqQixRQUFRLElBQUk7TUFDZDtNQUNBLFFBQVE7SUFDVixPQUFPO01BQ0wsUUFBUTtJQUNWO0lBRUEsUUFBUTtJQUNSLFFBQVEsR0FDTixjQUFjLENBQUMsS0FBSyxRQUFRLEdBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFRLE9BQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEdBQzVCO0lBRUYsT0FBTztFQUNUO0VBRUEsa0NBQWtDLEdBQ2xDLEFBQVUsV0FBcUI7SUFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDekIsTUFBTSxDQUFDLENBQUMsT0FBUyxLQUFLLE9BQU8sRUFDN0IsR0FBRyxDQUFDLENBQUMsT0FBUyxLQUFLLEtBQUs7RUFDN0I7RUFFQTs7O0dBR0MsR0FDRCxNQUFnQixZQUFZLEtBQWMsRUFBaUI7SUFDekQsT0FBUTtNQUNOLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTO1FBQzNDLElBQUksQ0FBQyxVQUFVO1FBQ2Y7TUFDRjtRQUNFLE1BQU0sS0FBSyxDQUFDLFlBQVk7SUFDNUI7RUFDRjtFQUVBLDJCQUEyQixHQUMzQixBQUFVLGFBQW1CO0lBQzNCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDekMsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3ZCLE9BQU87TUFDTCxLQUFLLE9BQU8sR0FBRyxDQUFDLEtBQUssT0FBTztJQUM5QjtFQUNGO0VBRUE7Ozs7R0FJQyxHQUNELEFBQVUsU0FBUyxLQUFlLEVBQW9CO0lBQ3BELE1BQU0sZUFBZSxNQUFNLE9BQU8sQ0FBQyxVQUNqQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQ1gsT0FBTyxRQUFRLFlBQ2YsSUFBSSxNQUFNLEdBQUcsS0FDYixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUM3QixPQUFPLEtBQUssS0FBSyxTQUNiLENBQUM7SUFHYixJQUFJLENBQUMsY0FBYztNQUNqQixPQUFPO0lBQ1Q7SUFFQSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO01BQzNDLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hHO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtNQUMzQyxPQUFPLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRztJQUVBLE9BQU87RUFDVDtFQUVBOzs7O0dBSUMsR0FDRCxBQUFVLFVBQVUsS0FBZSxFQUFZO0lBQzdDLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFRLElBQUksSUFBSTtFQUNwQztFQUVBOzs7R0FHQyxHQUNELEFBQVUsT0FBTyxLQUFlLEVBQVU7SUFDeEMsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sUUFBUSxLQUMzRCxJQUFJLENBQUM7RUFDVjtBQUNGIn0=
+// denoCacheMetadata=4107910026148827865,8843354061789234009 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2a4c33798619da8a200dc5952d5aaaf738400248db5f2efb1846d8381780a949.js b/vendor/gen/https/deno.land/2a4c33798619da8a200dc5952d5aaaf738400248db5f2efb1846d8381780a949.js
new file mode 100644
index 0000000..903affd
--- /dev/null
+++ b/vendor/gen/https/deno.land/2a4c33798619da8a200dc5952d5aaaf738400248db5f2efb1846d8381780a949.js
@@ -0,0 +1,90 @@
+import { GenericPrompt } from "./_generic_prompt.ts";
+import { GenericSuggestions } from "./_generic_suggestions.ts";
+import { brightBlue, dim, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+/** Confirm prompt representation. */ export class Confirm extends GenericSuggestions {
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ if (typeof options === "string") {
+ options = {
+ message: options
+ };
+ }
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ listPointer: brightBlue(Figures.POINTER),
+ maxRows: 8,
+ active: "Yes",
+ inactive: "No",
+ ...options,
+ files: false,
+ complete: undefined,
+ suggestions: [
+ options.active ?? "Yes",
+ options.inactive ?? "No"
+ ],
+ list: false,
+ info: false
+ }).prompt();
+ }
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ defaults() {
+ let defaultMessage = "";
+ if (this.settings.default === true) {
+ defaultMessage += this.settings.active[0].toUpperCase() + "/" + this.settings.inactive[0].toLowerCase();
+ } else if (this.settings.default === false) {
+ defaultMessage += this.settings.active[0].toLowerCase() + "/" + this.settings.inactive[0].toUpperCase();
+ } else {
+ defaultMessage += this.settings.active[0].toLowerCase() + "/" + this.settings.inactive[0].toLowerCase();
+ }
+ return defaultMessage ? dim(` (${defaultMessage})`) : "";
+ }
+ success(value) {
+ this.saveSuggestions(this.format(value));
+ return super.success(value);
+ }
+ /** Get input input. */ getValue() {
+ return this.inputValue;
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ return typeof value === "string" && [
+ this.settings.active[0].toLowerCase(),
+ this.settings.active.toLowerCase(),
+ this.settings.inactive[0].toLowerCase(),
+ this.settings.inactive.toLowerCase()
+ ].indexOf(value.toLowerCase()) !== -1;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ switch(value.toLowerCase()){
+ case this.settings.active[0].toLowerCase():
+ case this.settings.active.toLowerCase():
+ return true;
+ case this.settings.inactive[0].toLowerCase():
+ case this.settings.inactive.toLowerCase():
+ return false;
+ }
+ return;
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return value ? this.settings.active : this.settings.inactive;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L2NvbmZpcm0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJpY1Byb21wdCB9IGZyb20gXCIuL19nZW5lcmljX3Byb21wdC50c1wiO1xuaW1wb3J0IHtcbiAgR2VuZXJpY1N1Z2dlc3Rpb25zLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNLZXlzLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNPcHRpb25zLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNTZXR0aW5ncyxcbn0gZnJvbSBcIi4vX2dlbmVyaWNfc3VnZ2VzdGlvbnMudHNcIjtcbmltcG9ydCB7IGJyaWdodEJsdWUsIGRpbSwgeWVsbG93IH0gZnJvbSBcIi4vZGVwcy50c1wiO1xuaW1wb3J0IHsgRmlndXJlcyB9IGZyb20gXCIuL2ZpZ3VyZXMudHNcIjtcblxuZXhwb3J0IHR5cGUgQ29uZmlybUtleXMgPSBHZW5lcmljU3VnZ2VzdGlvbnNLZXlzO1xuXG50eXBlIFVuc3VwcG9ydGVkT3B0aW9ucyA9XG4gIHwgXCJmaWxlc1wiXG4gIHwgXCJjb21wbGV0ZVwiXG4gIHwgXCJzdWdnZXN0aW9uc1wiXG4gIHwgXCJsaXN0XCJcbiAgfCBcImluZm9cIjtcblxuLyoqIENvbmZpcm0gcHJvbXB0IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1PcHRpb25zXG4gIGV4dGVuZHMgT21pdDxHZW5lcmljU3VnZ2VzdGlvbnNPcHRpb25zPGJvb2xlYW4sIHN0cmluZz4sIFVuc3VwcG9ydGVkT3B0aW9ucz4ge1xuICBhY3RpdmU/OiBzdHJpbmc7XG4gIGluYWN0aXZlPzogc3RyaW5nO1xuICBrZXlzPzogQ29uZmlybUtleXM7XG59XG5cbi8qKiBDb25maXJtIHByb21wdCBzZXR0aW5ncy4gKi9cbmludGVyZmFjZSBDb25maXJtU2V0dGluZ3MgZXh0ZW5kcyBHZW5lcmljU3VnZ2VzdGlvbnNTZXR0aW5nczxib29sZWFuLCBzdHJpbmc+IHtcbiAgYWN0aXZlOiBzdHJpbmc7XG4gIGluYWN0aXZlOiBzdHJpbmc7XG4gIGtleXM/OiBDb25maXJtS2V5cztcbn1cblxuLyoqIENvbmZpcm0gcHJvbXB0IHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpcm1cbiAgZXh0ZW5kcyBHZW5lcmljU3VnZ2VzdGlvbnM8Ym9vbGVhbiwgc3RyaW5nLCBDb25maXJtU2V0dGluZ3M+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHByb21wdCBhbmQgc2hvdyBjdXJzb3Igb24gZW5kLiAqL1xuICBwdWJsaWMgc3RhdGljIHByb21wdChcbiAgICBvcHRpb25zOiBzdHJpbmcgfCBDb25maXJtT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBvcHRpb25zID0geyBtZXNzYWdlOiBvcHRpb25zIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHBvaW50ZXI6IGJyaWdodEJsdWUoRmlndXJlcy5QT0lOVEVSX1NNQUxMKSxcbiAgICAgIHByZWZpeDogeWVsbG93KFwiPyBcIiksXG4gICAgICBpbmRlbnQ6IFwiIFwiLFxuICAgICAgbGlzdFBvaW50ZXI6IGJyaWdodEJsdWUoRmlndXJlcy5QT0lOVEVSKSxcbiAgICAgIG1heFJvd3M6IDgsXG4gICAgICBhY3RpdmU6IFwiWWVzXCIsXG4gICAgICBpbmFjdGl2ZTogXCJOb1wiLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGZpbGVzOiBmYWxzZSxcbiAgICAgIGNvbXBsZXRlOiB1bmRlZmluZWQsXG4gICAgICBzdWdnZXN0aW9uczogW1xuICAgICAgICBvcHRpb25zLmFjdGl2ZSA/PyBcIlllc1wiLFxuICAgICAgICBvcHRpb25zLmluYWN0aXZlID8/IFwiTm9cIixcbiAgICAgIF0sXG4gICAgICBsaXN0OiBmYWxzZSxcbiAgICAgIGluZm86IGZhbHNlLFxuICAgIH0pLnByb21wdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluamVjdCBwcm9tcHQgdmFsdWUuIENhbiBiZSB1c2VkIGZvciB1bml0IHRlc3RzIG9yIHByZSBzZWxlY3Rpb25zLlxuICAgKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGluamVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgR2VuZXJpY1Byb21wdC5pbmplY3QodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRzKCk6IHN0cmluZyB7XG4gICAgbGV0IGRlZmF1bHRNZXNzYWdlID0gXCJcIjtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmRlZmF1bHQgPT09IHRydWUpIHtcbiAgICAgIGRlZmF1bHRNZXNzYWdlICs9IHRoaXMuc2V0dGluZ3MuYWN0aXZlWzBdLnRvVXBwZXJDYXNlKCkgKyBcIi9cIiArXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaW5hY3RpdmVbMF0udG9Mb3dlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MuZGVmYXVsdCA9PT0gZmFsc2UpIHtcbiAgICAgIGRlZmF1bHRNZXNzYWdlICs9IHRoaXMuc2V0dGluZ3MuYWN0aXZlWzBdLnRvTG93ZXJDYXNlKCkgKyBcIi9cIiArXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaW5hY3RpdmVbMF0udG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdE1lc3NhZ2UgKz0gdGhpcy5zZXR0aW5ncy5hY3RpdmVbMF0udG9Mb3dlckNhc2UoKSArIFwiL1wiICtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5pbmFjdGl2ZVswXS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0TWVzc2FnZSA/IGRpbShgICgke2RlZmF1bHRNZXNzYWdlfSlgKSA6IFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VjY2Vzcyh2YWx1ZTogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5zYXZlU3VnZ2VzdGlvbnModGhpcy5mb3JtYXQodmFsdWUpKTtcbiAgICByZXR1cm4gc3VwZXIuc3VjY2Vzcyh2YWx1ZSk7XG4gIH1cblxuICAvKiogR2V0IGlucHV0IGlucHV0LiAqL1xuICBwcm90ZWN0ZWQgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlucHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVXNlciBpbnB1dCB2YWx1ZS5cbiAgICogQHJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9yIGVycm9yIG1lc3NhZ2Ugb24gZXJyb3IuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gfCBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIFtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFjdGl2ZVswXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHRoaXMuc2V0dGluZ3MuYWN0aXZlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5pbmFjdGl2ZVswXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHRoaXMuc2V0dGluZ3MuaW5hY3RpdmUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgXS5pbmRleE9mKHZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgaW5wdXQgdmFsdWUgdG8gb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUuXG4gICAqIEByZXR1cm4gT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoICh2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIHRoaXMuc2V0dGluZ3MuYWN0aXZlWzBdLnRvTG93ZXJDYXNlKCk6XG4gICAgICBjYXNlIHRoaXMuc2V0dGluZ3MuYWN0aXZlLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSB0aGlzLnNldHRpbmdzLmluYWN0aXZlWzBdLnRvTG93ZXJDYXNlKCk6XG4gICAgICBjYXNlIHRoaXMuc2V0dGluZ3MuaW5hY3RpdmUudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCBmb3JtYXQodmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuc2V0dGluZ3MuYWN0aXZlIDogdGhpcy5zZXR0aW5ncy5pbmFjdGl2ZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsYUFBYSxRQUFRLHVCQUF1QjtBQUNyRCxTQUNFLGtCQUFrQixRQUliLDRCQUE0QjtBQUNuQyxTQUFTLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLFlBQVk7QUFDcEQsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQTBCdkMsbUNBQW1DLEdBQ25DLE9BQU8sTUFBTSxnQkFDSDtFQUNSLCtDQUErQyxHQUMvQyxPQUFjLE9BQ1osT0FBZ0MsRUFDZDtJQUNsQixJQUFJLE9BQU8sWUFBWSxVQUFVO01BQy9CLFVBQVU7UUFBRSxTQUFTO01BQVE7SUFDL0I7SUFFQSxPQUFPLElBQUksSUFBSSxDQUFDO01BQ2QsU0FBUyxXQUFXLFFBQVEsYUFBYTtNQUN6QyxRQUFRLE9BQU87TUFDZixRQUFRO01BQ1IsYUFBYSxXQUFXLFFBQVEsT0FBTztNQUN2QyxTQUFTO01BQ1QsUUFBUTtNQUNSLFVB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
+// denoCacheMetadata=1905650617868920485,8250191922767453271 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2af2c282efe6df44d6c3d080b7c7aab87be18e8572224e7d740e339ade45d43c.js b/vendor/gen/https/deno.land/2af2c282efe6df44d6c3d080b7c7aab87be18e8572224e7d740e339ade45d43c.js
new file mode 100644
index 0000000..a8f3550
--- /dev/null
+++ b/vendor/gen/https/deno.land/2af2c282efe6df44d6c3d080b7c7aab87be18e8572224e7d740e339ade45d43c.js
@@ -0,0 +1,23 @@
+import { InvalidTypeError } from "../_errors.ts";
+/** Boolean type handler. Excepts `true`, `false`, `1`, `0` */ export const boolean = (type)=>{
+ if (~[
+ "1",
+ "true"
+ ].indexOf(type.value)) {
+ return true;
+ }
+ if (~[
+ "0",
+ "false"
+ ].indexOf(type.value)) {
+ return false;
+ }
+ throw new InvalidTypeError(type, [
+ "true",
+ "false",
+ "1",
+ "0"
+ ]);
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvdHlwZXMvYm9vbGVhbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFyZ3VtZW50VmFsdWUsIFR5cGVIYW5kbGVyIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBJbnZhbGlkVHlwZUVycm9yIH0gZnJvbSBcIi4uL19lcnJvcnMudHNcIjtcblxuLyoqIEJvb2xlYW4gdHlwZSBoYW5kbGVyLiBFeGNlcHRzIGB0cnVlYCwgYGZhbHNlYCwgYDFgLCBgMGAgKi9cbmV4cG9ydCBjb25zdCBib29sZWFuOiBUeXBlSGFuZGxlcjxib29sZWFuPiA9IChcbiAgdHlwZTogQXJndW1lbnRWYWx1ZSxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAofltcIjFcIiwgXCJ0cnVlXCJdLmluZGV4T2YodHlwZS52YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh+W1wiMFwiLCBcImZhbHNlXCJdLmluZGV4T2YodHlwZS52YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0aHJvdyBuZXcgSW52YWxpZFR5cGVFcnJvcih0eXBlLCBbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCIxXCIsIFwiMFwiXSk7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsZ0JBQWdCLFFBQVEsZ0JBQWdCO0FBRWpELDREQUE0RCxHQUM1RCxPQUFPLE1BQU0sVUFBZ0MsQ0FDM0M7RUFFQSxJQUFJLENBQUM7SUFBQztJQUFLO0dBQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLEdBQUc7SUFDdEMsT0FBTztFQUNUO0VBRUEsSUFBSSxDQUFDO0lBQUM7SUFBSztHQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxHQUFHO0lBQ3ZDLE9BQU87RUFDVDtFQUVBLE1BQU0sSUFBSSxpQkFBaUIsTUFBTTtJQUFDO0lBQVE7SUFBUztJQUFLO0dBQUk7QUFDOUQsRUFBRSJ9
+// denoCacheMetadata=17787616594023011246,8578684805629278150 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2c91ceaa563dce37b10ca40d9c35dfba01d0092758aca694e4e3feed42188219.js b/vendor/gen/https/deno.land/2c91ceaa563dce37b10ca40d9c35dfba01d0092758aca694e4e3feed42188219.js
new file mode 100644
index 0000000..df46070
--- /dev/null
+++ b/vendor/gen/https/deno.land/2c91ceaa563dce37b10ca40d9c35dfba01d0092758aca694e4e3feed42188219.js
@@ -0,0 +1,84 @@
+import { log } from "../core/utils/log.ts";
+import { localIp, openBrowser } from "../core/utils/net.ts";
+import { setEnv } from "../core/utils/env.ts";
+import { normalizePath } from "../core/utils/path.ts";
+import { fromFileUrl } from "../deps/path.ts";
+import { SiteWatcher } from "../core/watcher.ts";
+import logger from "../middlewares/logger.ts";
+import noCache from "../middlewares/no_cache.ts";
+import noCors from "../middlewares/no_cors.ts";
+import reload from "../middlewares/reload.ts";
+import { buildSite } from "./utils.ts";
+import { initLocalStorage } from "./missing_worker_apis.ts";
+addEventListener("message", (event)=>{
+ const { type } = event.data;
+ if (type === "build" || type === "rebuild") {
+ return build(event.data);
+ }
+ if (type === "localStorage") {
+ return initLocalStorage(event.data.data);
+ }
+});
+async function build({ type, config, serve }) {
+ // Set the live reload environment variable to add hash to the URLs in the module loader
+ setEnv("LUME_LIVE_RELOAD", "true");
+ const site = await buildSite(config);
+ // Start the watcher
+ const watcher = site.getWatcher();
+ const _config = normalizePath(fromFileUrl(site._data.configFile), site.root());
+ const mustReload = (files)=>files.has(_config);
+ watcher.addEventListener("change", (event)=>{
+ const files = event.files;
+ log.info("Changes detected:");
+ files.forEach((file)=>{
+ log.info(`- <gray>${file}</gray>`);
+ });
+ if (mustReload(files)) {
+ log.info("Reloading the site...");
+ postMessage({
+ type: "reload"
+ });
+ return;
+ }
+ return site.update(files);
+ });
+ watcher.addEventListener("error", (event)=>{
+ console.error(Deno.inspect(event.error, {
+ colors: true
+ }));
+ });
+ watcher.start();
+ if (!serve) {
+ return;
+ }
+ // Start the local server
+ const server = site.getServer();
+ const { port, hostname, open } = site.options.server;
+ server.addEventListener("start", ()=>{
+ if (type === "build") {
+ const ipAddr = localIp();
+ log.info(" Server started at:");
+ log.info(` <green>http://${hostname}:${port}/</green> (local)`);
+ if (ipAddr) {
+ log.info(` <green>http://${ipAddr}:${port}/</green> (network)`);
+ }
+ if (open) {
+ openBrowser(`http://${hostname}:${port}/`);
+ }
+ }
+ site.dispatchEvent({
+ type: "afterStartServer"
+ });
+ });
+ if (log.level < 5) {
+ server.use(logger());
+ }
+ server.use(reload({
+ watcher: new SiteWatcher(site),
+ basepath: site.options.location.pathname,
+ debugBar: site.debugBar
+ }), noCache(), noCors());
+ server.start();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY2xpL2J1aWxkX3dvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi4vY29yZS91dGlscy9sb2cudHNcIjtcbmltcG9ydCB7IGxvY2FsSXAsIG9wZW5Ccm93c2VyIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvbmV0LnRzXCI7XG5pbXBvcnQgeyBzZXRFbnYgfSBmcm9tIFwiLi4vY29yZS91dGlscy9lbnYudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwiLi4vY29yZS91dGlscy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCIuLi9kZXBzL3BhdGgudHNcIjtcbmltcG9ydCB7IFNpdGVXYXRjaGVyIH0gZnJvbSBcIi4uL2NvcmUvd2F0Y2hlci50c1wiO1xuaW1wb3J0IGxvZ2dlciBmcm9tIFwiLi4vbWlkZGxld2FyZXMvbG9nZ2VyLnRzXCI7XG5pbXBvcnQgbm9DYWNoZSBmcm9tIFwiLi4vbWlkZGxld2FyZXMvbm9fY2FjaGUudHNcIjtcbmltcG9ydCBub0NvcnMgZnJvbSBcIi4uL21pZGRsZXdhcmVzL25vX2NvcnMudHNcIjtcbmltcG9ydCByZWxvYWQgZnJvbSBcIi4uL21pZGRsZXdhcmVzL3JlbG9hZC50c1wiO1xuaW1wb3J0IHsgYnVpbGRTaXRlIH0gZnJvbSBcIi4vdXRpbHMudHNcIjtcbmltcG9ydCB7IGluaXRMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi9taXNzaW5nX3dvcmtlcl9hcGlzLnRzXCI7XG5cbmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChldmVudCkgPT4ge1xuICBjb25zdCB7IHR5cGUgfSA9IGV2ZW50LmRhdGE7XG5cbiAgaWYgKHR5cGUgPT09IFwiYnVpbGRcIiB8fCB0eXBlID09PSBcInJlYnVpbGRcIikge1xuICAgIHJldHVybiBidWlsZChldmVudC5kYXRhKTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBcImxvY2FsU3RvcmFnZVwiKSB7XG4gICAgcmV0dXJuIGluaXRMb2NhbFN0b3JhZ2UoZXZlbnQuZGF0YS5kYXRhKTtcbiAgfVxufSk7XG5cbmludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICB0eXBlOiBcImJ1aWxkXCIgfCBcInJlYnVpbGRcIjtcbiAgY29uZmlnPzogc3RyaW5nO1xuICBzZXJ2ZT86IGJvb2xlYW47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkKHsgdHlwZSwgY29uZmlnLCBzZXJ2ZSB9OiBCdWlsZE9wdGlvbnMpIHtcbiAgLy8gU2V0IHRoZSBsaXZlIHJlbG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhZGQgaGFzaCB0byB0aGUgVVJMcyBpbiB0aGUgbW9kdWxlIGxvYWRlclxuICBzZXRFbnYoXCJMVU1FX0xJVkVfUkVMT0FEXCIsIFwidHJ1ZVwiKTtcblxuICBjb25zdCBzaXRlID0gYXdhaXQgYnVpbGRTaXRlKGNvbmZpZyk7XG5cbiAgLy8gU3RhcnQgdGhlIHdhdGNoZXJcbiAgY29uc3Qgd2F0Y2hlciA9IHNpdGUuZ2V0V2F0Y2hlcigpO1xuICBjb25zdCBfY29uZmlnID0gbm9ybWFsaXplUGF0aChcbiAgICBmcm9tRmlsZVVybChzaXRlLl9kYXRhLmNvbmZpZ0ZpbGUgYXMgc3RyaW5nKSxcbiAgICBzaXRlLnJvb3QoKSxcbiAgKTtcblxuICBjb25zdCBtdXN0UmVsb2FkID0gKGZpbGVzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4gPT4gZmlsZXMuaGFzKF9jb25maWcpO1xuXG4gIHdhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmZpbGVzITtcblxuICAgIGxvZy5pbmZvKFwiQ2hhbmdlcyBkZXRlY3RlZDpcIik7XG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgbG9nLmluZm8oYC0gPGdyYXk+JHtmaWxlfTwvZ3JheT5gKTtcbiAgICB9KTtcblxuICAgIGlmIChtdXN0UmVsb2FkKGZpbGVzKSkge1xuICAgICAgbG9nLmluZm8oXCJSZWxvYWRpbmcgdGhlIHNpdGUuLi5cIik7XG4gICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6IFwicmVsb2FkXCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpdGUudXBkYXRlKGZpbGVzKTtcbiAgfSk7XG5cbiAgd2F0Y2hlci5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKGV2ZW50KSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihEZW5vLmluc3BlY3QoZXZlbnQuZXJyb3IsIHsgY29sb3JzOiB0cnVlIH0pKTtcbiAgfSk7XG5cbiAgd2F0Y2hlci5zdGFydCgpO1xuXG4gIGlmICghc2VydmUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTdGFydCB0aGUgbG9jYWwgc2VydmVyXG4gIGNvbnN0IHNlcnZlciA9IHNpdGUuZ2V0U2VydmVyKCk7XG4gIGNvbnN0IHsgcG9ydCwgaG9zdG5hbWUsIG9wZW4gfSA9IHNpdGUub3B0aW9ucy5zZXJ2ZXI7XG5cbiAgc2VydmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGFydFwiLCAoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09IFwiYnVpbGRcIikge1xuICAgICAgY29uc3QgaXBBZGRyID0gbG9jYWxJcCgpO1xuXG4gICAgICBsb2cuaW5mbyhcIiAgU2VydmVyIHN0YXJ0ZWQgYXQ6XCIpO1xuICAgICAgbG9nLmluZm8oYCAgPGdyZWVuPmh0dHA6Ly8ke2hvc3RuYW1lfToke3BvcnR9LzwvZ3JlZW4+IChsb2NhbClgKTtcblxuICAgICAgaWYgKGlwQWRkcikge1xuICAgICAgICBsb2cuaW5mbyhgICA8Z3JlZW4+aHR0cDovLyR7aXBBZGRyfToke3BvcnR9LzwvZ3JlZW4+IChuZXR3b3JrKWApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBvcGVuQnJvd3NlcihgaHR0cDovLyR7aG9zdG5hbWV9OiR7cG9ydH0vYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2l0ZS5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJhZnRlclN0YXJ0U2VydmVyXCIgfSk7XG4gIH0pO1xuXG4gIGlmIChsb2cubGV2ZWwgPCA1KSB7XG4gICAgc2VydmVyLnVzZShsb2dnZXIoKSk7XG4gIH1cblxuICBzZXJ2ZXIudXNlKFxuICAgIHJlbG9hZCh7XG4gICAgICB3YXRjaGVyOiBuZXcgU2l0ZVdhdGNoZXIoc2l0ZSksXG4gICAgICBiYXNlcGF0aDogc2l0ZS5vcHRpb25zLmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgZGVidWdCYXI6IHNpdGUuZGVidWdCYXIsXG4gICAgfSksXG4gICAgbm9DYWNoZSgpLFxuICAgIG5vQ29ycygpLFxuICApO1xuXG4gIHNlcnZlci5zdGFydCgpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsR0FBRyxRQUFRLHVCQUF1QjtBQUMzQyxTQUFTLE9BQU8sRUFBRSxXQUFXLFFBQVEsdUJBQXVCO0FBQzVELFNBQVMsTUFBTSxRQUFRLHVCQUF1QjtBQUM5QyxTQUFTLGFBQWEsUUFBUSx3QkFBd0I7QUFDdEQsU0FBUyxXQUFXLFFBQVEsa0JBQWtCO0FBQzlDLFNBQVMsV0FBVyxRQUFRLHFCQUFxQjtBQUNqRCxPQUFPLFlBQVksMkJBQTJCO0FBQzlDLE9BQU8sYUFBYSw2QkFBNkI7QUFDakQsT0FBTyxZQUFZLDRCQUE0QjtBQUMvQyxPQUFPLFlBQVksMkJBQTJCO0FBQzlDLFNBQVMsU0FBUyxRQUFRLGFBQWE7QUFDdkMsU0FBUyxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFFNUQsaUJBQWlCLFdBQVcsQ0FBQztFQUMzQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJO0VBRTNCLElBQUksU0FBUyxXQUFXLFNBQVMsV0FBVztJQUMxQyxPQUFPLE1BQU0sTUFBTSxJQUFJO0VBQ3pCO0VBRUEsSUFBSSxTQUFTLGdCQUFnQjtJQUMzQixPQUFPLGlCQUFpQixNQUFNLElBQUksQ0FBQyxJQUFJO0VBQ3pDO0FBQ0Y7QUFRQSxlQUFlLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZ0I7RUFDeEQsd0ZBQXdGO0VBQ3hGLE9BQU8sb0JBQW9CO0VBRTNCLE1BQU0sT0FBTyxNQUFNLFVBQVU7RUFFN0Isb0JBQW9CO0VBQ3BCLE1BQU0sVUFBVSxLQUFLLFVBQVU7RUFDL0IsTUFBTSxVQUFVLGNBQ2QsWUFBWSxLQUFLLEtBQUssQ0FBQyxVQUFVLEdBQ2pDLEtBQUssSUFBSTtFQUdYLE1BQU0sYUFBYSxDQUFDLFFBQWdDLE1BQU0sR0FBRyxDQUFDO0VBRTlELFFBQVEsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO0lBQ2xDLE1BQU0sUUFBUSxNQUFNLEtBQUs7SUFFekIsSUFBSSxJQUFJLENBQUM7SUFDVCxNQUFNLE9BQU8sQ0FBQyxDQUFDO01BQ2IsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPLENBQUM7SUFDbkM7SUFFQSxJQUFJLFdBQVcsUUFBUTtNQUNyQixJQUFJLElBQUksQ0FBQztNQUNULFlBQVk7UUFBRSxNQUFNO01BQVM7TUFDN0I7SUFDRjtJQUVBLE9BQU8sS0FBSyxNQUFNLENBQUM7RUFDckI7RUFFQSxRQUFRLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUNqQyxRQUFRLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRTtNQUFFLFFBQVE7SUFBSztFQUN6RDtFQUVBLFFBQVEsS0FBSztFQUViLElBQUksQ0FBQyxPQUFPO0lBQ1Y7RUFDRjtFQUVBLHlCQUF5QjtFQUN6QixNQUFNLFNBQVMsS0FBSyxTQUFTO0VBQzdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssT0FBTyxDQUFDLE1BQU07RUFFcEQsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTO0lBQy9CLElBQUksU0FBUyxTQUFTO01BQ3BCLE1BQU0sU0FBUztNQUVmLElBQUksSUFBSSxDQUFDO01BQ1QsSUFBSSxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsRUFBRSxLQUFLLGlCQUFpQixDQUFDO01BRS9ELElBQUksUUFBUTtRQUNWLElBQUksSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxtQkFBbUIsQ0FBQztNQUNqRTtNQUVBLElBQUksTUFBTTtRQUNSLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDM0M7SUFDRjtJQUVBLEtBQUssYUFBYSxDQUFDO01BQUUsTUFBTTtJQUFtQjtFQUNoRDtFQUVBLElBQUksSUFBSSxLQUFLLEdBQUcsR0FBRztJQUNqQixPQUFPLEdBQUcsQ0FBQztFQUNiO0VBRUEsT0FBTyxHQUFHLENBQ1IsT0FBTztJQUNMLFNBQVMsSUFBSSxZQUFZO0lBQ3pCLFVBQVUsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDeEMsVUFBVSxLQUFLLFFBQVE7RUFDekIsSUFDQSxXQUNBO0VBR0YsT0FBTyxLQUFLO0FBQ2QifQ==
+// denoCacheMetadata=14483602689525969081,2659150487986467211 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/2d7aca0133be6de43a0ae1681c780b6b959f0a3720d8b645d1aed6b1d0482ff6.js b/vendor/gen/https/deno.land/2d7aca0133be6de43a0ae1681c780b6b959f0a3720d8b645d1aed6b1d0482ff6.js
new file mode 100644
index 0000000..51188a1
--- /dev/null
+++ b/vendor/gen/https/deno.land/2d7aca0133be6de43a0ae1681c780b6b959f0a3720d8b645d1aed6b1d0482ff6.js
@@ -0,0 +1,63 @@
+import { isUrl } from "./path.ts";
+import { env } from "./env.ts";
+import { tokens } from "./tokens.ts";
+const useCache = env("LUME_NOCACHE") !== true;
+export async function read(path, isBinary, init) {
+ if (!isUrl(path)) {
+ if (path.startsWith("data:")) {
+ const response = await fetch(path);
+ return isBinary ? new Uint8Array(await response.arrayBuffer()) : response.text();
+ }
+ return isBinary ? Deno.readFile(path) : Deno.readTextFile(path);
+ }
+ const url = new URL(path);
+ if (url.protocol === "file:") {
+ return isBinary ? Deno.readFile(url) : Deno.readTextFile(url);
+ }
+ const authorization = tokens.get(url.host);
+ if (authorization) {
+ const headers = new Headers(init?.headers);
+ headers.set("Authorization", authorization);
+ init = {
+ ...init,
+ headers
+ };
+ }
+ if (!useCache) {
+ const response = await fetch(url, init);
+ if (!response.ok) {
+ throw new Error(`Failed to fetch "${url}"`);
+ }
+ return isBinary ? new Uint8Array(await response.arrayBuffer()) : response.text();
+ }
+ const cache = await caches.open("lume_remote_files");
+ // Prevent https://github.com/denoland/deno/issues/19696
+ try {
+ const cached = await cache.match(url);
+ if (cached) {
+ return isBinary ? new Uint8Array(await cached.arrayBuffer()) : cached.text();
+ }
+ } catch {
+ // ignore
+ }
+ const response = await fetch(url, init);
+ if (!response.ok) {
+ throw new Error(`Failed to fetch "${url}"`);
+ }
+ await cache.put(url, response.clone());
+ return isBinary ? new Uint8Array(await response.arrayBuffer()) : response.text();
+}
+/** Read a text file like a browser */ export async function readFile(path) {
+ return await read(path, false, {
+ headers: {
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
+ }
+ });
+}
+/**
+ * Clear the cache of remote files.
+ */ export async function clearCache() {
+ await caches.delete("lume_remote_files");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9yZWFkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzVXJsIH0gZnJvbSBcIi4vcGF0aC50c1wiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4vZW52LnRzXCI7XG5pbXBvcnQgeyB0b2tlbnMgfSBmcm9tIFwiLi90b2tlbnMudHNcIjtcblxuY29uc3QgdXNlQ2FjaGUgPSBlbnY8Ym9vbGVhbj4oXCJMVU1FX05PQ0FDSEVcIikgIT09IHRydWU7XG5cbi8qKlxuICogUmVhZCBhIGxvY2FsIG9yIHJlbW90ZSBmaWxlIGFuZCByZXR1cm4gaXRzIGNvbnRlbnQuXG4gKiBJZiB0aGUgZmlsZSBpcyByZW1vdGUsIGl0IHdpbGwgYmUgY2FjaGVkIGluIHRoZSBgbHVtZV9yZW1vdGVfZmlsZXNgIGNhY2hlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZChcbiAgcGF0aDogc3RyaW5nLFxuICBpc0JpbmFyeTogYm9vbGVhbixcbik6IFByb21pc2U8VWludDhBcnJheSB8IHN0cmluZz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZChcbiAgcGF0aDogc3RyaW5nLFxuICBpc0JpbmFyeTogdHJ1ZSxcbiAgaW5pdD86IFJlcXVlc3RJbml0LFxuKTogUHJvbWlzZTxVaW50OEFycmF5PjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkKFxuICBwYXRoOiBzdHJpbmcsXG4gIGlzQmluYXJ5OiBmYWxzZSxcbiAgaW5pdD86IFJlcXVlc3RJbml0LFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWQoXG4gIHBhdGg6IHN0cmluZyxcbiAgaXNCaW5hcnk6IGJvb2xlYW4sXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCxcbik6IFByb21pc2U8c3RyaW5nIHwgVWludDhBcnJheT4ge1xuICBpZiAoIWlzVXJsKHBhdGgpKSB7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHBhdGgpO1xuXG4gICAgICByZXR1cm4gaXNCaW5hcnlcbiAgICAgICAgPyBuZXcgVWludDhBcnJheShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxuICAgICAgICA6IHJlc3BvbnNlLnRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNCaW5hcnkgPyBEZW5vLnJlYWRGaWxlKHBhdGgpIDogRGVuby5yZWFkVGV4dEZpbGUocGF0aCk7XG4gIH1cblxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGgpO1xuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIikge1xuICAgIHJldHVybiBpc0JpbmFyeSA/IERlbm8ucmVhZEZpbGUodXJsKSA6IERlbm8ucmVhZFRleHRGaWxlKHVybCk7XG4gIH1cblxuICBjb25zdCBhdXRob3JpemF0aW9uID0gdG9rZW5zLmdldCh1cmwuaG9zdCk7XG4gIGlmIChhdXRob3JpemF0aW9uKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGluaXQ/LmhlYWRlcnMpO1xuICAgIGhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBhdXRob3JpemF0aW9uKTtcbiAgICBpbml0ID0geyAuLi5pbml0LCBoZWFkZXJzIH07XG4gIH1cblxuICBpZiAoIXVzZUNhY2hlKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGluaXQpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggXCIke3VybH1cImApO1xuICAgIH1cblxuICAgIHJldHVybiBpc0JpbmFyeVxuICAgICAgPyBuZXcgVWludDhBcnJheShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxuICAgICAgOiByZXNwb25zZS50ZXh0KCk7XG4gIH1cblxuICBjb25zdCBjYWNoZSA9IGF3YWl0IGNhY2hlcy5vcGVuKFwibHVtZV9yZW1vdGVfZmlsZXNcIik7XG5cbiAgLy8gUHJldmVudCBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTk2OTZcbiAgdHJ5IHtcbiAgICBjb25zdCBjYWNoZWQgPSBhd2FpdCBjYWNoZS5tYXRjaCh1cmwpO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGlzQmluYXJ5XG4gICAgICAgID8gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgY2FjaGVkLmFycmF5QnVmZmVyKCkpXG4gICAgICAgIDogY2FjaGVkLnRleHQoKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGluaXQpO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBcIiR7dXJsfVwiYCk7XG4gIH1cblxuICBhd2FpdCBjYWNoZS5wdXQodXJsLCByZXNwb25zZS5jbG9uZSgpKTtcblxuICByZXR1cm4gaXNCaW5hcnlcbiAgICA/IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpXG4gICAgOiByZXNwb25zZS50ZXh0KCk7XG59XG5cbi8qKiBSZWFkIGEgdGV4dCBmaWxlIGxpa2UgYSBicm93c2VyICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJlYWQocGF0aCwgZmFsc2UsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIlVzZXItQWdlbnRcIjpcbiAgICAgICAgXCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMC4xNTsgcnY6MTA5LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTE1LjBcIixcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDbGVhciB0aGUgY2FjaGUgb2YgcmVtb3RlIGZpbGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJDYWNoZSgpIHtcbiAgYXdhaXQgY2FjaGVzLmRlbGV0ZShcImx1bWVfcmVtb3RlX2ZpbGVzXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLFlBQVk7QUFDbEMsU0FBUyxHQUFHLFFBQVEsV0FBVztBQUMvQixTQUFTLE1BQU0sUUFBUSxjQUFjO0FBRXJDLE1BQU0sV0FBVyxJQUFhLG9CQUFvQjtBQW9CbEQsT0FBTyxlQUFlLEtBQ3BCLElBQVksRUFDWixRQUFpQixFQUNqQixJQUFrQjtFQUVsQixJQUFJLENBQUMsTUFBTSxPQUFPO0lBQ2hCLElBQUksS0FBSyxVQUFVLENBQUMsVUFBVTtNQUM1QixNQUFNLFdBQVcsTUFBTSxNQUFNO01BRTdCLE9BQU8sV0FDSCxJQUFJLFdBQVcsTUFBTSxTQUFTLFdBQVcsTUFDekMsU0FBUyxJQUFJO0lBQ25CO0lBRUEsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUM7RUFDNUQ7RUFFQSxNQUFNLE1BQU0sSUFBSSxJQUFJO0VBRXBCLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUztJQUM1QixPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQztFQUMzRDtFQUVBLE1BQU0sZ0JBQWdCLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSTtFQUN6QyxJQUFJLGVBQWU7SUFDakIsTUFBTSxVQUFVLElBQUksUUFBUSxNQUFNO0lBQ2xDLFFBQVEsR0FBRyxDQUFDLGlCQUFpQjtJQUM3QixPQUFPO01BQUUsR0FBRyxJQUFJO01BQUU7SUFBUTtFQUM1QjtFQUVBLElBQUksQ0FBQyxVQUFVO0lBQ2IsTUFBTSxXQUFXLE1BQU0sTUFBTSxLQUFLO0lBRWxDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtNQUNoQixNQUFNLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDO0lBRUEsT0FBTyxXQUNILElBQUksV0FBVyxNQUFNLFNBQVMsV0FBVyxNQUN6QyxTQUFTLElBQUk7RUFDbkI7RUFFQSxNQUFNLFFBQVEsTUFBTSxPQUFPLElBQUksQ0FBQztFQUVoQyx3REFBd0Q7RUFDeEQsSUFBSTtJQUNGLE1BQU0sU0FBUyxNQUFNLE1BQU0sS0FBSyxDQUFDO0lBRWpDLElBQUksUUFBUTtNQUNWLE9BQU8sV0FDSCxJQUFJLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFDdkMsT0FBTyxJQUFJO0lBQ2pCO0VBQ0YsRUFBRSxPQUFNO0VBQ04sU0FBUztFQUNYO0VBRUEsTUFBTSxXQUFXLE1BQU0sTUFBTSxLQUFLO0VBRWxDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUNoQixNQUFNLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzVDO0VBRUEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLFNBQVMsS0FBSztFQUVuQyxPQUFPLFdBQ0gsSUFBSSxXQUFXLE1BQU0sU0FBUyxXQUFXLE1BQ3pDLFNBQVMsSUFBSTtBQUNuQjtBQUVBLG9DQUFvQyxHQUNwQyxPQUFPLGVBQWUsU0FBUyxJQUFZO0VBQ3pDLE9BQU8sTUFBTSxLQUFLLE1BQU0sT0FBTztJQUM3QixTQUFTO01BQ1AsY0FDRTtJQUNKO0VBQ0Y7QUFDRjtBQUVBOztDQUVDLEdBQ0QsT0FBTyxlQUFlO0VBQ3BCLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDdEIifQ==
+// denoCacheMetadata=7481490000249095787,11458088934474428320 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/30fb7366d35e88ff50a3fd97f74d2d283a1a621319b43dd2171885d2755bf8d5.js b/vendor/gen/https/deno.land/30fb7366d35e88ff50a3fd97f74d2d283a1a621319b43dd2171885d2755bf8d5.js
new file mode 100644
index 0000000..4f11f78
--- /dev/null
+++ b/vendor/gen/https/deno.land/30fb7366d35e88ff50a3fd97f74d2d283a1a621319b43dd2171885d2755bf8d5.js
@@ -0,0 +1,220 @@
+import { posix } from "../deps/path.ts";
+import { toFileUrl } from "../deps/path.ts";
+export class Entry {
+ name;
+ path;
+ type;
+ src;
+ children = new Map();
+ flags = new Set();
+ #content = new Map();
+ #info;
+ constructor(name, path, type, src){
+ this.name = name;
+ this.path = path;
+ this.type = type;
+ this.src = src;
+ }
+ getContent(loader) {
+ if (!this.#content.has(loader)) {
+ this.#content.set(loader, loader(this.src));
+ }
+ return this.#content.get(loader);
+ }
+ getInfo() {
+ if (!this.#info) {
+ this.#info = this.src.includes("://") ? createFileInfo(this.type) : Deno.statSync(this.src);
+ }
+ return this.#info;
+ }
+}
+/** Virtual file system used to load and cache files (local and remote) */ export default class FS {
+ options;
+ entries = new Map();
+ remoteFiles = new Map();
+ tree;
+ constructor(options){
+ this.options = options;
+ this.tree = new Entry("", "/", "directory", options.root);
+ this.entries.set("/", this.tree);
+ }
+ init() {
+ this.#walkFs(this.tree);
+ this.#walkRemote();
+ }
+ /** Update the entry and returns it if it was removed */ update(path) {
+ // Check if it's a remote file
+ const src = toFileUrl(posix.join(this.options.root, path)).href;
+ const remote = findMapByValue(this.remoteFiles, src);
+ if (remote) {
+ path = remote;
+ }
+ const exist = this.entries.get(path);
+ let entry;
+ if (exist && exist.type !== "directory") {
+ this.entries.delete(path);
+ entry = this.addEntry({
+ path
+ });
+ } else if (exist) {
+ entry = exist;
+ } else {
+ entry = this.addEntry({
+ path
+ });
+ }
+ // Handle remote files
+ if (remote) {
+ entry.flags.add("remote");
+ entry.src = src;
+ }
+ try {
+ entry.getInfo();
+ } catch (error) {
+ // Remove if it doesn't exist
+ if (error instanceof Deno.errors.NotFound) {
+ const src = this.remoteFiles.get(path);
+ if (src) {
+ entry.flags.add("remote");
+ entry.src = src;
+ return;
+ }
+ this.removeEntry(path);
+ return exist;
+ }
+ }
+ // New directory, walk it
+ if (entry.type === "directory" && !exist) {
+ this.#walkFs(entry);
+ }
+ }
+ #isValid(path) {
+ const { ignore } = this.options;
+ return ignore ? !ignore.some((ignore)=>typeof ignore === "string" ? path.startsWith(posix.join(ignore, "/")) || path === ignore : ignore(path)) : true;
+ }
+ #walkFs(dir) {
+ const dirPath = posix.join(this.options.root, dir.path);
+ for (const dirEntry of Deno.readDirSync(dirPath)){
+ const path = posix.join(dir.path, dirEntry.name);
+ if (dirEntry.isSymlink) {
+ this.#walkLink(dir, dirEntry.name);
+ continue;
+ }
+ if (!this.#isValid(path)) {
+ continue;
+ }
+ const entry = new Entry(dirEntry.name, path, dirEntry.isDirectory ? "directory" : "file", posix.join(this.options.root, path));
+ dir.children.set(dirEntry.name, entry);
+ this.entries.set(path, entry);
+ if (entry.type === "directory") {
+ this.#walkFs(entry);
+ }
+ }
+ }
+ #walkLink(dir, name) {
+ const src = posix.join(dir.src, name);
+ const info = Deno.statSync(src);
+ const type = info.isDirectory ? "directory" : "file";
+ const entry = new Entry(name, posix.join(dir.path, name), type, Deno.realPathSync(src));
+ dir.children.set(name, entry);
+ this.entries.set(entry.path, entry);
+ if (type === "directory") {
+ this.#walkFs(entry);
+ }
+ }
+ #walkRemote() {
+ // Read from remote files
+ for (const [path, src] of this.remoteFiles){
+ if (this.entries.has(path)) {
+ continue;
+ }
+ this.addEntry({
+ path,
+ type: "file",
+ src
+ }).flags.add("remote");
+ }
+ }
+ addEntry(data) {
+ const pieces = data.path.split("/").filter((p)=>p);
+ let parent = this.tree;
+ if (!data.src) {
+ data.src = posix.join(this.options.root, data.path);
+ }
+ if (!data.type) {
+ try {
+ const info = Deno.statSync(data.src);
+ data.type = info.isDirectory ? "directory" : "file";
+ } catch {
+ data.type = "file";
+ }
+ }
+ while(pieces.length > 1){
+ const name = pieces.shift();
+ const children = parent.children;
+ const path = posix.join(parent.path, name);
+ if (!this.#isValid(path)) {
+ break;
+ }
+ parent = children.get(name) || new Entry(name, path, "directory", this.options.root + path);
+ children.set(name, parent);
+ this.entries.set(parent.path, parent);
+ }
+ const name = pieces.shift();
+ const children = parent.children;
+ const entry = new Entry(name, data.path, data.type, data.src);
+ children.set(name, entry);
+ this.entries.set(entry.path, entry);
+ return entry;
+ }
+ removeEntry(path) {
+ const entry = this.entries.get(path);
+ const isFolder = entry?.type === "directory";
+ this.entries.delete(path);
+ const parent = this.entries.get(posix.dirname(path));
+ const name = posix.basename(path);
+ parent.children.delete(name);
+ if (isFolder) {
+ const prefix = posix.join(path, "/");
+ for (const childPath of this.entries.keys()){
+ if (childPath.startsWith(prefix)) {
+ this.entries.delete(childPath);
+ }
+ }
+ }
+ }
+}
+function createFileInfo(type) {
+ return {
+ isFile: type === "file",
+ isDirectory: type === "directory",
+ isSymlink: false,
+ isBlockDevice: null,
+ isCharDevice: null,
+ isSocket: null,
+ isFifo: null,
+ size: 0,
+ mtime: new Date(),
+ atime: new Date(),
+ ctime: new Date(),
+ birthtime: new Date(),
+ dev: 0,
+ ino: null,
+ mode: null,
+ nlink: null,
+ uid: null,
+ gid: null,
+ rdev: null,
+ blksize: null,
+ blocks: null
+ };
+}
+function findMapByValue(map, value) {
+ for (const [key, val] of map.entries()){
+ if (val === value) {
+ return key;
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9mcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCB9IGZyb20gXCIuLi9kZXBzL3BhdGgudHNcIjtcbmltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCIuLi9kZXBzL3BhdGgudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBSYXdEYXRhIH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuXG50eXBlIEVudHJ5VHlwZSA9IFwiZmlsZVwiIHwgXCJkaXJlY3RvcnlcIjtcblxuZXhwb3J0IHR5cGUgTG9hZGVyID0gKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxSYXdEYXRhPjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgcm9vdDogc3RyaW5nO1xuICBpZ25vcmU/OiAoc3RyaW5nIHwgKChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4pKVtdO1xufVxuXG5leHBvcnQgY2xhc3MgRW50cnkge1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgdHlwZTogRW50cnlUeXBlO1xuICBzcmM6IHN0cmluZztcbiAgY2hpbGRyZW4gPSBuZXcgTWFwPHN0cmluZywgRW50cnk+KCk7XG4gIGZsYWdzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICNjb250ZW50ID0gbmV3IE1hcDxMb2FkZXIsIFByb21pc2U8UmF3RGF0YT4gfCBSYXdEYXRhPigpO1xuICAjaW5mbz86IERlbm8uRmlsZUluZm87XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHR5cGU6IEVudHJ5VHlwZSwgc3JjOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnNyYyA9IHNyYztcbiAgfVxuXG4gIGdldENvbnRlbnQobG9hZGVyOiBMb2FkZXIpOiBQcm9taXNlPFJhd0RhdGE+IHwgUmF3RGF0YSB7XG4gICAgaWYgKCF0aGlzLiNjb250ZW50Lmhhcyhsb2FkZXIpKSB7XG4gICAgICB0aGlzLiNjb250ZW50LnNldChsb2FkZXIsIGxvYWRlcih0aGlzLnNyYykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNjb250ZW50LmdldChsb2FkZXIpITtcbiAgfVxuXG4gIGdldEluZm8oKSB7XG4gICAgaWYgKCF0aGlzLiNpbmZvKSB7XG4gICAgICB0aGlzLiNpbmZvID0gdGhpcy5zcmMuaW5jbHVkZXMoXCI6Ly9cIilcbiAgICAgICAgPyBjcmVhdGVGaWxlSW5mbyh0aGlzLnR5cGUpXG4gICAgICAgIDogRGVuby5zdGF0U3luYyh0aGlzLnNyYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2luZm87XG4gIH1cbn1cblxuLyoqIFZpcnR1YWwgZmlsZSBzeXN0ZW0gdXNlZCB0byBsb2FkIGFuZCBjYWNoZSBmaWxlcyAobG9jYWwgYW5kIHJlbW90ZSkgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZTIHtcbiAgb3B0aW9uczogT3B0aW9ucztcbiAgZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcmVtb3RlRmlsZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICB0cmVlOiBFbnRyeTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRyZWUgPSBuZXcgRW50cnkoXCJcIiwgXCIvXCIsIFwiZGlyZWN0b3J5XCIsIG9wdGlvbnMucm9vdCk7XG4gICAgdGhpcy5lbnRyaWVzLnNldChcIi9cIiwgdGhpcy50cmVlKTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy4jd2Fsa0ZzKHRoaXMudHJlZSk7XG4gICAgdGhpcy4jd2Fsa1JlbW90ZSgpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSB0aGUgZW50cnkgYW5kIHJldHVybnMgaXQgaWYgaXQgd2FzIHJlbW92ZWQgKi9cbiAgdXBkYXRlKHBhdGg6IHN0cmluZyk6IEVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgICAvLyBDaGVjayBpZiBpdCdzIGEgcmVtb3RlIGZpbGVcbiAgICBjb25zdCBzcmMgPSB0b0ZpbGVVcmwocG9zaXguam9pbih0aGlzLm9wdGlvbnMucm9vdCwgcGF0aCkpLmhyZWY7XG4gICAgY29uc3QgcmVtb3RlID0gZmluZE1hcEJ5VmFsdWUodGhpcy5yZW1vdGVGaWxlcywgc3JjKTtcbiAgICBpZiAocmVtb3RlKSB7XG4gICAgICBwYXRoID0gcmVtb3RlO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0ID0gdGhpcy5lbnRyaWVzLmdldChwYXRoKTtcblxuICAgIGxldCBlbnRyeTogRW50cnk7XG4gICAgaWYgKGV4aXN0ICYmIGV4aXN0LnR5cGUgIT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgIHRoaXMuZW50cmllcy5kZWxldGUocGF0aCk7XG4gICAgICBlbnRyeSA9IHRoaXMuYWRkRW50cnkoeyBwYXRoIH0pO1xuICAgIH0gZWxzZSBpZiAoZXhpc3QpIHtcbiAgICAgIGVudHJ5ID0gZXhpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudHJ5ID0gdGhpcy5hZGRFbnRyeSh7IHBhdGggfSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJlbW90ZSBmaWxlc1xuICAgIGlmIChyZW1vdGUpIHtcbiAgICAgIGVudHJ5LmZsYWdzLmFkZChcInJlbW90ZVwiKTtcbiAgICAgIGVudHJ5LnNyYyA9IHNyYztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZW50cnkuZ2V0SW5mbygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBSZW1vdmUgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gdGhpcy5yZW1vdGVGaWxlcy5nZXQocGF0aCk7XG4gICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICBlbnRyeS5mbGFncy5hZGQoXCJyZW1vdGVcIik7XG4gICAgICAgICAgZW50cnkuc3JjID0gc3JjO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUVudHJ5KHBhdGgpO1xuICAgICAgICByZXR1cm4gZXhpc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmV3IGRpcmVjdG9yeSwgd2FsayBpdFxuICAgIGlmIChlbnRyeS50eXBlID09PSBcImRpcmVjdG9yeVwiICYmICFleGlzdCkge1xuICAgICAgdGhpcy4jd2Fsa0ZzKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICAjaXNWYWxpZChwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IGlnbm9yZSB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgcmV0dXJuIGlnbm9yZVxuICAgICAgPyAhaWdub3JlLnNvbWUoKGlnbm9yZSkgPT5cbiAgICAgICAgdHlwZW9mIGlnbm9yZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gKHBhdGguc3RhcnRzV2l0aChwb3NpeC5qb2luKGlnbm9yZSwgXCIvXCIpKSB8fFxuICAgICAgICAgICAgcGF0aCA9PT0gaWdub3JlKVxuICAgICAgICAgIDogaWdub3JlKHBhdGgpXG4gICAgICApXG4gICAgICA6IHRydWU7XG4gIH1cblxuICAjd2Fsa0ZzKGRpcjogRW50cnkpIHtcbiAgICBjb25zdCBkaXJQYXRoID0gcG9zaXguam9pbih0aGlzLm9wdGlvbnMucm9vdCwgZGlyLnBhdGgpO1xuXG4gICAgZm9yIChjb25zdCBkaXJFbnRyeSBvZiBEZW5vLnJlYWREaXJTeW5jKGRpclBhdGgpKSB7XG4gICAgICBjb25zdCBwYXRoID0gcG9zaXguam9pbihkaXIucGF0aCwgZGlyRW50cnkubmFtZSk7XG5cbiAgICAgIGlmIChkaXJFbnRyeS5pc1N5bWxpbmspIHtcbiAgICAgICAgdGhpcy4jd2Fsa0xpbmsoZGlyLCBkaXJFbnRyeS5uYW1lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy4jaXNWYWxpZChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW50cnkgPSBuZXcgRW50cnkoXG4gICAgICAgIGRpckVudHJ5Lm5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGRpckVudHJ5LmlzRGlyZWN0b3J5ID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICBwb3NpeC5qb2luKHRoaXMub3B0aW9ucy5yb290LCBwYXRoKSxcbiAgICAgICk7XG5cbiAgICAgIGRpci5jaGlsZHJlbi5zZXQoZGlyRW50cnkubmFtZSwgZW50cnkpO1xuICAgICAgdGhpcy5lbnRyaWVzLnNldChwYXRoLCBlbnRyeSk7XG5cbiAgICAgIGlmIChlbnRyeS50eXBlID09PSBcImRpcmVjdG9yeVwiKSB7XG4gICAgICAgIHRoaXMuI3dhbGtGcyhlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3dhbGtMaW5rKGRpcjogRW50cnksIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNyYyA9IHBvc2l4LmpvaW4oZGlyLnNyYywgbmFtZSk7XG4gICAgY29uc3QgaW5mbyA9IERlbm8uc3RhdFN5bmMoc3JjKTtcbiAgICBjb25zdCB0eXBlID0gaW5mby5pc0RpcmVjdG9yeSA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIjtcblxuICAgIGNvbnN0IGVudHJ5ID0gbmV3IEVudHJ5KFxuICAgICAgbmFtZSxcbiAgICAgIHBvc2l4LmpvaW4oZGlyLnBhdGgsIG5hbWUpLFxuICAgICAgdHlwZSxcbiAgICAgIERlbm8ucmVhbFBhdGhTeW5jKHNyYyksXG4gICAgKTtcblxuICAgIGRpci5jaGlsZHJlbi5zZXQobmFtZSwgZW50cnkpO1xuICAgIHRoaXMuZW50cmllcy5zZXQoZW50cnkucGF0aCwgZW50cnkpO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgIHRoaXMuI3dhbGtGcyhlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgI3dhbGtSZW1vdGUoKSB7XG4gICAgLy8gUmVhZCBmcm9tIHJlbW90ZSBmaWxlc1xuICAgIGZvciAoY29uc3QgW3BhdGgsIHNyY10gb2YgdGhpcy5yZW1vdGVGaWxlcykge1xuICAgICAgaWYgKHRoaXMuZW50cmllcy5oYXMocGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkRW50cnkoe1xuICAgICAgICBwYXRoLFxuICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgc3JjLFxuICAgICAgfSkuZmxhZ3MuYWRkKFwicmVtb3RlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEVudHJ5KGRhdGE6IHsgcGF0aDogc3RyaW5nOyB0eXBlPzogRW50cnlUeXBlOyBzcmM/OiBzdHJpbmcgfSk6IEVudHJ5IHtcbiAgICBjb25zdCBwaWVjZXMgPSBkYXRhLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocCkgPT4gcCk7XG4gICAgbGV0IHBhcmVudCA9IHRoaXMudHJlZTtcblxuICAgIGlmICghZGF0YS5zcmMpIHtcbiAgICAgIGRhdGEuc3JjID0gcG9zaXguam9pbih0aGlzLm9wdGlvbnMucm9vdCwgZGF0YS5wYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEudHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW5mbyA9IERlbm8uc3RhdFN5bmMoZGF0YS5zcmMhKTtcbiAgICAgICAgZGF0YS50eXBlID0gaW5mby5pc0RpcmVjdG9yeSA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIjtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBkYXRhLnR5cGUgPSBcImZpbGVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAocGllY2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwaWVjZXMuc2hpZnQoKSE7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IHBhdGggPSBwb3NpeC5qb2luKHBhcmVudC5wYXRoLCBuYW1lKTtcblxuICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkKHBhdGgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnQgPSBjaGlsZHJlbi5nZXQobmFtZSkgfHwgbmV3IEVudHJ5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBcImRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm9wdGlvbnMucm9vdCArIHBhdGgsXG4gICAgICApO1xuXG4gICAgICBjaGlsZHJlbi5zZXQobmFtZSwgcGFyZW50KTtcbiAgICAgIHRoaXMuZW50cmllcy5zZXQocGFyZW50LnBhdGgsIHBhcmVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IHBpZWNlcy5zaGlmdCgpITtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICBjb25zdCBlbnRyeSA9IG5ldyBFbnRyeShcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLnBhdGgsXG4gICAgICBkYXRhLnR5cGUsXG4gICAgICBkYXRhLnNyYyEsXG4gICAgKTtcbiAgICBjaGlsZHJlbi5zZXQobmFtZSwgZW50cnkpO1xuICAgIHRoaXMuZW50cmllcy5zZXQoZW50cnkucGF0aCwgZW50cnkpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHJlbW92ZUVudHJ5KHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChwYXRoKTtcbiAgICBjb25zdCBpc0ZvbGRlciA9IGVudHJ5Py50eXBlID09PSBcImRpcmVjdG9yeVwiO1xuXG4gICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShwYXRoKTtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVudHJpZXMuZ2V0KHBvc2l4LmRpcm5hbWUocGF0aCkpITtcbiAgICBjb25zdCBuYW1lID0gcG9zaXguYmFzZW5hbWUocGF0aCk7XG4gICAgcGFyZW50LmNoaWxkcmVuLmRlbGV0ZShuYW1lKTtcblxuICAgIGlmIChpc0ZvbGRlcikge1xuICAgICAgY29uc3QgcHJlZml4ID0gcG9zaXguam9pbihwYXRoLCBcIi9cIik7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkUGF0aCBvZiB0aGlzLmVudHJpZXMua2V5cygpKSB7XG4gICAgICAgIGlmIChjaGlsZFBhdGguc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShjaGlsZFBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVJbmZvKHR5cGU6IEVudHJ5VHlwZSk6IERlbm8uRmlsZUluZm8ge1xuICByZXR1cm4ge1xuICAgIGlzRmlsZTogdHlwZSA9PT0gXCJmaWxlXCIsXG4gICAgaXNEaXJlY3Rvcnk6IHR5cGUgPT09IFwiZGlyZWN0b3J5XCIsXG4gICAgaXNTeW1saW5rOiBmYWxzZSxcbiAgICBpc0Jsb2NrRGV2aWNlOiBudWxsLFxuICAgIGlzQ2hhckRldmljZTogbnVsbCxcbiAgICBpc1NvY2tldDogbnVsbCxcbiAgICBpc0ZpZm86IG51bGwsXG4gICAgc2l6ZTogMCxcbiAgICBtdGltZTogbmV3IERhdGUoKSxcbiAgICBhdGltZTogbmV3IERhdGUoKSxcbiAgICBjdGltZTogbmV3IERhdGUoKSxcbiAgICBiaXJ0aHRpbWU6IG5ldyBEYXRlKCksXG4gICAgZGV2OiAwLFxuICAgIGlubzogbnVsbCxcbiAgICBtb2RlOiBudWxsLFxuICAgIG5saW5rOiBudWxsLFxuICAgIHVpZDogbnVsbCxcbiAgICBnaWQ6IG51bGwsXG4gICAgcmRldjogbnVsbCxcbiAgICBibGtzaXplOiBudWxsLFxuICAgIGJsb2NrczogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZE1hcEJ5VmFsdWU8SywgVj4obWFwOiBNYXA8SywgVj4sIHZhbHVlOiBWKTogSyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBtYXAuZW50cmllcygpKSB7XG4gICAgaWYgKHZhbCA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFLLFFBQVEsa0JBQWtCO0FBQ3hDLFNBQVMsU0FBUyxRQUFRLGtCQUFrQjtBQWE1QyxPQUFPLE1BQU07RUFDWCxLQUFhO0VBQ2IsS0FBYTtFQUNiLEtBQWdCO0VBQ2hCLElBQVk7RUFDWixXQUFXLElBQUksTUFBcUI7RUFDcEMsUUFBUSxJQUFJLE1BQWM7RUFDMUIsQ0FBQSxPQUFRLEdBQUcsSUFBSSxNQUEwQztFQUN6RCxDQUFBLElBQUssQ0FBaUI7RUFFdEIsWUFBWSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQWUsRUFBRSxHQUFXLENBQUU7SUFDcEUsSUFBSSxDQUFDLElBQUksR0FBRztJQUNaLElBQUksQ0FBQyxJQUFJLEdBQUc7SUFDWixJQUFJLENBQUMsSUFBSSxHQUFHO0lBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNiO0VBRUEsV0FBVyxNQUFjLEVBQThCO0lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxPQUFRLENBQUMsR0FBRyxDQUFDLFNBQVM7TUFDOUIsSUFBSSxDQUFDLENBQUEsT0FBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUc7SUFDM0M7SUFFQSxPQUFPLElBQUksQ0FBQyxDQUFBLE9BQVEsQ0FBQyxHQUFHLENBQUM7RUFDM0I7RUFFQSxVQUFVO0lBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLElBQUssRUFBRTtNQUNmLElBQUksQ0FBQyxDQUFBLElBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUMzQixlQUFlLElBQUksQ0FBQyxJQUFJLElBQ3hCLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHO0lBQzVCO0lBRUEsT0FBTyxJQUFJLENBQUMsQ0FB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
+// denoCacheMetadata=3229067422392407821,2739894664235942750 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/31e5dd6ab63a7c44741e363d311de87953a27b5a6fd987c2a37b2bb781ff9c89.js b/vendor/gen/https/deno.land/31e5dd6ab63a7c44741e363d311de87953a27b5a6fd987c2a37b2bb781ff9c89.js
new file mode 100644
index 0000000..de65a77
--- /dev/null
+++ b/vendor/gen/https/deno.land/31e5dd6ab63a7c44741e363d311de87953a27b5a6fd987c2a37b2bb781ff9c89.js
@@ -0,0 +1,36 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(ifTag);
+ env.tags.push(elseTag);
+ };
+}
+function ifTag(env, code, output, tokens) {
+ if (!code.startsWith("if ")) {
+ return;
+ }
+ const condition = code.replace(/^if\s+/, "").trim();
+ const compiled = [];
+ compiled.push(`if (${condition}) {`);
+ compiled.push(...env.compileTokens(tokens, output, [
+ "/if"
+ ]));
+ tokens.shift();
+ compiled.push("}");
+ return compiled.join("\n");
+}
+function elseTag(_env, code) {
+ if (!code.startsWith("else ") && code !== "else") {
+ return;
+ }
+ const match = code.match(/^else(\s+if\s+(.*))?$/);
+ if (!match) {
+ throw new Error(`Invalid else: ${code}`);
+ }
+ const [_, ifTag, condition] = match;
+ if (ifTag) {
+ return `} else if (${condition}) {`;
+ }
+ return "} else {";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2lmLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tIFwiLi4vc3JjL3Rva2VuaXplci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCwgUGx1Z2luIH0gZnJvbSBcIi4uL3NyYy9lbnZpcm9ubWVudC50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogUGx1Z2luIHtcbiAgcmV0dXJuIChlbnY6IEVudmlyb25tZW50KSA9PiB7XG4gICAgZW52LnRhZ3MucHVzaChpZlRhZyk7XG4gICAgZW52LnRhZ3MucHVzaChlbHNlVGFnKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaWZUYWcoXG4gIGVudjogRW52aXJvbm1lbnQsXG4gIGNvZGU6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHRva2VuczogVG9rZW5bXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY29kZS5zdGFydHNXaXRoKFwiaWYgXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNvbmRpdGlvbiA9IGNvZGUucmVwbGFjZSgvXmlmXFxzKy8sIFwiXCIpLnRyaW0oKTtcbiAgY29uc3QgY29tcGlsZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgY29tcGlsZWQucHVzaChgaWYgKCR7Y29uZGl0aW9ufSkge2ApO1xuICBjb21waWxlZC5wdXNoKC4uLmVudi5jb21waWxlVG9rZW5zKHRva2Vucywgb3V0cHV0LCBbXCIvaWZcIl0pKTtcbiAgdG9rZW5zLnNoaWZ0KCk7XG4gIGNvbXBpbGVkLnB1c2goXCJ9XCIpO1xuXG4gIHJldHVybiBjb21waWxlZC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBlbHNlVGFnKFxuICBfZW52OiBFbnZpcm9ubWVudCxcbiAgY29kZTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb2RlLnN0YXJ0c1dpdGgoXCJlbHNlIFwiKSAmJiBjb2RlICE9PSBcImVsc2VcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtYXRjaCA9IGNvZGUubWF0Y2goL15lbHNlKFxccytpZlxccysoLiopKT8kLyk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbHNlOiAke2NvZGV9YCk7XG4gIH1cblxuICBjb25zdCBbXywgaWZUYWcsIGNvbmRpdGlvbl0gPSBtYXRjaDtcblxuICBpZiAoaWZUYWcpIHtcbiAgICByZXR1cm4gYH0gZWxzZSBpZiAoJHtjb25kaXRpb259KSB7YDtcbiAgfVxuXG4gIHJldHVybiBcIn0gZWxzZSB7XCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsZUFBZTtFQUNiLE9BQU8sQ0FBQztJQUNOLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUNoQjtBQUNGO0FBRUEsU0FBUyxNQUNQLEdBQWdCLEVBQ2hCLElBQVksRUFDWixNQUFjLEVBQ2QsTUFBZTtFQUVmLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQyxRQUFRO0lBQzNCO0VBQ0Y7RUFDQSxNQUFNLFlBQVksS0FBSyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUk7RUFDakQsTUFBTSxXQUFxQixFQUFFO0VBRTdCLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxDQUFDO0VBQ25DLFNBQVMsSUFBSSxJQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsUUFBUTtJQUFDO0dBQU07RUFDMUQsT0FBTyxLQUFLO0VBQ1osU0FBUyxJQUFJLENBQUM7RUFFZCxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBQ3ZCO0FBRUEsU0FBUyxRQUNQLElBQWlCLEVBQ2pCLElBQVk7RUFFWixJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTLFFBQVE7SUFDaEQ7RUFDRjtFQUNBLE1BQU0sUUFBUSxLQUFLLEtBQUssQ0FBQztFQUV6QixJQUFJLENBQUMsT0FBTztJQUNWLE1BQU0sSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU07RUFDekM7RUFFQSxNQUFNLENBQUMsR0FBRyxPQUFPLFVBQVUsR0FBRztFQUU5QixJQUFJLE9BQU87SUFDVCxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBRyxDQUFDO0VBQ3JDO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=6907840143127744410,18218313291425734298 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/3566b6c7334a68d62e2547dd836014ef030a442e79f0885b6497cc76da422029.js b/vendor/gen/https/deno.land/3566b6c7334a68d62e2547dd836014ef030a442e79f0885b6497cc76da422029.js
new file mode 100644
index 0000000..a1740d2
--- /dev/null
+++ b/vendor/gen/https/deno.land/3566b6c7334a68d62e2547dd836014ef030a442e79f0885b6497cc76da422029.js
@@ -0,0 +1,3 @@
+export { bold, brightBlue, brightMagenta, cyan, dim, getColorEnabled, green, italic, red, setColorEnabled, yellow } from "https://deno.land/std@0.170.0/fmt/colors.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9kZXBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGJvbGQsXG4gIGJyaWdodEJsdWUsXG4gIGJyaWdodE1hZ2VudGEsXG4gIGN5YW4sXG4gIGRpbSxcbiAgZ2V0Q29sb3JFbmFibGVkLFxuICBncmVlbixcbiAgaXRhbGljLFxuICByZWQsXG4gIHNldENvbG9yRW5hYmxlZCxcbiAgeWVsbG93LFxufSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTcwLjAvZm10L2NvbG9ycy50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0UsSUFBSSxFQUNKLFVBQVUsRUFDVixhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxlQUFlLEVBQ2YsS0FBSyxFQUNMLE1BQU0sRUFDTixHQUFHLEVBQ0gsZUFBZSxFQUNmLE1BQU0sUUFDRCw4Q0FBOEMifQ==
+// denoCacheMetadata=6478543896803235917,12827170697367652000 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/35b8ef7a35a7f9731e47af7a5fca344771fe68bd64597b33249606c61e34323f.js b/vendor/gen/https/deno.land/35b8ef7a35a7f9731e47af7a5fca344771fe68bd64597b33249606c61e34323f.js
new file mode 100644
index 0000000..31b0796
--- /dev/null
+++ b/vendor/gen/https/deno.land/35b8ef7a35a7f9731e47af7a5fca344771fe68bd64597b33249606c61e34323f.js
@@ -0,0 +1,13 @@
+import { StringType } from "./string.ts";
+/** Completion list type. */ export class ActionListType extends StringType {
+ cmd;
+ constructor(cmd){
+ super(), this.cmd = cmd;
+ }
+ /** Complete action names. */ complete() {
+ return this.cmd.getCompletions().map((type)=>type.name)// filter unique values
+ .filter((value, index, self)=>self.indexOf(value) === index);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9hY3Rpb25fbGlzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZC50c1wiO1xuaW1wb3J0IHsgU3RyaW5nVHlwZSB9IGZyb20gXCIuL3N0cmluZy50c1wiO1xuXG4vKiogQ29tcGxldGlvbiBsaXN0IHR5cGUuICovXG5leHBvcnQgY2xhc3MgQWN0aW9uTGlzdFR5cGUgZXh0ZW5kcyBTdHJpbmdUeXBlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNtZDogQ29tbWFuZCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKiogQ29tcGxldGUgYWN0aW9uIG5hbWVzLiAqL1xuICBwdWJsaWMgY29tcGxldGUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNtZC5nZXRDb21wbGV0aW9ucygpXG4gICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLm5hbWUpXG4gICAgICAvLyBmaWx0ZXIgdW5pcXVlIHZhbHVlc1xuICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxTQUFTLFVBQVUsUUFBUSxjQUFjO0FBRXpDLDBCQUEwQixHQUMxQixPQUFPLE1BQU0sdUJBQXVCOztFQUNsQyxZQUFZLEFBQVUsR0FBWSxDQUFFO0lBQ2xDLEtBQUssU0FEZSxNQUFBO0VBRXRCO0VBRUEsMkJBQTJCLEdBQzNCLEFBQU8sV0FBcUI7SUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FDM0IsR0FBRyxDQUFDLENBQUMsT0FBUyxLQUFLLElBQUksQ0FDeEIsdUJBQXVCO0tBQ3RCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sT0FBTyxPQUFTLEtBQUssT0FBTyxDQUFDLFdBQVc7RUFDNUQ7QUFDRiJ9
+// denoCacheMetadata=14213906548983373694,16714974819166753146 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/377d368b85c4aa9cdfcf52674ca12468c78648c304e88e58661e7fb330d99939.js b/vendor/gen/https/deno.land/377d368b85c4aa9cdfcf52674ca12468c78648c304e88e58661e7fb330d99939.js
new file mode 100644
index 0000000..763a736
--- /dev/null
+++ b/vendor/gen/https/deno.land/377d368b85c4aa9cdfcf52674ca12468c78648c304e88e58661e7fb330d99939.js
@@ -0,0 +1,27 @@
+import { Command } from "../command.ts";
+import { UnknownCommandError } from "../_errors.ts";
+import { CommandType } from "../types/command.ts";
+/** Generates well formatted and colored help output for specified command. */ export class HelpCommand extends Command {
+ constructor(cmd){
+ super();
+ return this.type("command", new CommandType()).arguments("[command:command]").description("Show this help or the help of a sub-command.").noGlobals().action(async (_, name)=>{
+ if (!cmd) {
+ cmd = name ? this.getGlobalParent()?.getBaseCommand(name) : this.getGlobalParent();
+ }
+ if (!cmd) {
+ const cmds = this.getGlobalParent()?.getCommands();
+ throw new UnknownCommandError(name ?? "", cmds ?? [], [
+ this.getName(),
+ ...this.getAliases()
+ ]);
+ }
+ await cmd.checkVersion();
+ cmd.showHelp();
+ if (this.shouldExit()) {
+ Deno.exit(0);
+ }
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9oZWxwL21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmQudHNcIjtcbmltcG9ydCB7IFVua25vd25Db21tYW5kRXJyb3IgfSBmcm9tIFwiLi4vX2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgQ29tbWFuZFR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvY29tbWFuZC50c1wiO1xuXG4vKiogR2VuZXJhdGVzIHdlbGwgZm9ybWF0dGVkIGFuZCBjb2xvcmVkIGhlbHAgb3V0cHV0IGZvciBzcGVjaWZpZWQgY29tbWFuZC4gKi9cbmV4cG9ydCBjbGFzcyBIZWxwQ29tbWFuZFxuICBleHRlbmRzIENvbW1hbmQ8dm9pZCwgdm9pZCwgdm9pZCwgW2NvbW1hbmROYW1lPzogQ29tbWFuZFR5cGVdPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjbWQ/OiBDb21tYW5kKSB7XG4gICAgc3VwZXIoKTtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLnR5cGUoXCJjb21tYW5kXCIsIG5ldyBDb21tYW5kVHlwZSgpKVxuICAgICAgLmFyZ3VtZW50cyhcIltjb21tYW5kOmNvbW1hbmRdXCIpXG4gICAgICAuZGVzY3JpcHRpb24oXCJTaG93IHRoaXMgaGVscCBvciB0aGUgaGVscCBvZiBhIHN1Yi1jb21tYW5kLlwiKVxuICAgICAgLm5vR2xvYmFscygpXG4gICAgICAuYWN0aW9uKGFzeW5jIChfLCBuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghY21kKSB7XG4gICAgICAgICAgY21kID0gbmFtZVxuICAgICAgICAgICAgPyB0aGlzLmdldEdsb2JhbFBhcmVudCgpPy5nZXRCYXNlQ29tbWFuZChuYW1lKVxuICAgICAgICAgICAgOiB0aGlzLmdldEdsb2JhbFBhcmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY21kKSB7XG4gICAgICAgICAgY29uc3QgY21kcyA9IHRoaXMuZ2V0R2xvYmFsUGFyZW50KCk/LmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgdGhyb3cgbmV3IFVua25vd25Db21tYW5kRXJyb3IobmFtZSA/PyBcIlwiLCBjbWRzID8/IFtdLCBbXG4gICAgICAgICAgICB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0QWxpYXNlcygpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGNtZC5jaGVja1ZlcnNpb24oKTtcbiAgICAgICAgY21kLnNob3dIZWxwKCk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEV4aXQoKSkge1xuICAgICAgICAgIERlbm8uZXhpdCgwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLE9BQU8sUUFBUSxnQkFBZ0I7QUFDeEMsU0FBUyxtQkFBbUIsUUFBUSxnQkFBZ0I7QUFDcEQsU0FBUyxXQUFXLFFBQVEsc0JBQXNCO0FBRWxELDRFQUE0RSxHQUM1RSxPQUFPLE1BQU0sb0JBQ0g7RUFDUixZQUFtQixHQUFhLENBQUU7SUFDaEMsS0FBSztJQUNMLE9BQU8sSUFBSSxDQUNSLElBQUksQ0FBQyxXQUFXLElBQUksZUFDcEIsU0FBUyxDQUFDLHFCQUNWLFdBQVcsQ0FBQyxnREFDWixTQUFTLEdBQ1QsTUFBTSxDQUFDLE9BQU8sR0FBRztNQUNoQixJQUFJLENBQUMsS0FBSztRQUNSLE1BQU0sT0FDRixJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsUUFDdkMsSUFBSSxDQUFDLGVBQWU7TUFDMUI7TUFDQSxJQUFJLENBQUMsS0FBSztRQUNSLE1BQU0sT0FBTyxJQUFJLENBQUMsZUFBZSxJQUFJO1FBQ3JDLE1BQU0sSUFBSSxvQkFBb0IsUUFBUSxJQUFJLFFBQVEsRUFBRSxFQUFFO1VBQ3BELElBQUksQ0FBQyxPQUFPO2FBQ1QsSUFBSSxDQUFDLFVBQVU7U0FDbkI7TUFDSDtNQUNBLE1BQU0sSUFBSSxZQUFZO01BQ3RCLElBQUksUUFBUTtNQUNaLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSTtRQUNyQixLQUFLLElBQUksQ0FBQztNQUNaO0lBQ0Y7RUFDSjtBQUNGIn0=
+// denoCacheMetadata=14597041301853195075,9704251461463242537 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/38efb93200e818215777b3e1c4c7e61b12248fe849bccc95a4351967457c4ab5.js b/vendor/gen/https/deno.land/38efb93200e818215777b3e1c4c7e61b12248fe849bccc95a4351967457c4ab5.js
new file mode 100644
index 0000000..30a39e2
--- /dev/null
+++ b/vendor/gen/https/deno.land/38efb93200e818215777b3e1c4c7e61b12248fe849bccc95a4351967457c4ab5.js
@@ -0,0 +1,159 @@
+import { autotrim, engine } from "../deps/vento.ts";
+import { posix } from "../deps/path.ts";
+import loader from "../core/loaders/text.ts";
+import { merge } from "../core/utils/object.ts";
+import { normalizePath } from "../core/utils/path.ts";
+import { log } from "../core/utils/log.ts";
+// Default options
+export const defaults = {
+ extensions: [
+ ".vento",
+ ".vto"
+ ],
+ autoTrim: true,
+ options: {
+ dataVarname: "it",
+ useWith: true,
+ autoescape: false
+ }
+};
+class LumeLoader {
+ fs;
+ #root;
+ constructor(root, fs){
+ this.#root = root;
+ this.fs = fs;
+ }
+ async load(file) {
+ const entry = this.fs.entries.get(normalizePath(file));
+ if (!entry) {
+ throw new Error(`File not found: ${file}`);
+ }
+ const data = await entry.getContent(loader);
+ return {
+ source: data.content,
+ data: data
+ };
+ }
+ resolve(from, file) {
+ if (file.startsWith(".")) {
+ return normalizePath(posix.join(posix.dirname(from), file));
+ }
+ if (file.startsWith(this.#root)) {
+ return normalizePath(file);
+ }
+ return normalizePath(posix.join(this.#root, file));
+ }
+}
+/** Template engine to render Vento files */ export class VentoEngine {
+ engine;
+ includes;
+ constructor(engine, includes){
+ this.engine = engine;
+ this.includes = includes;
+ }
+ deleteCache(file) {
+ this.engine.cache.delete(file);
+ }
+ async render(content, data, filename) {
+ const result = await this.engine.runString(content, data, filename);
+ return result.content;
+ }
+ addHelper(name, fn, options) {
+ if (options.async) {
+ this.engine.filters[name] = async function(...args) {
+ return await fn.apply({
+ data: this.data
+ }, args);
+ };
+ } else {
+ this.engine.filters[name] = function(...args) {
+ return fn.apply({
+ data: this.data
+ }, args);
+ };
+ }
+ }
+}
+/**
+ * A plugin to use the Vento template engine
+ * Installed by default
+ * @see https://lume.land/plugins/vento/
+ */ export function vento(userOptions) {
+ return (site)=>{
+ const options = merge({
+ ...defaults,
+ includes: site.options.includes
+ }, userOptions);
+ const vento = engine({
+ includes: new LumeLoader(normalizePath(options.includes), site.fs),
+ ...options.options
+ });
+ vento.tags.push(compTag);
+ if (options.autoTrim) {
+ vento.use(autotrim());
+ }
+ options.plugins?.forEach((plugin)=>vento.use(plugin));
+ site.hooks.addVentoPlugin = (plugin)=>{
+ vento.use(plugin);
+ };
+ site.hooks.vento = (callback)=>callback(vento);
+ const ventoEngine = new VentoEngine(vento, options.includes);
+ // Ignore includes folder
+ if (options.includes) {
+ site.ignore(options.includes);
+ }
+ // Load the pages and register the engine
+ site.loadPages(options.extensions, {
+ loader,
+ engine: ventoEngine,
+ pageSubExtension: options.pageSubExtension
+ });
+ site.filter("vto", filter, true);
+ async function filter(string, data) {
+ const result = await vento.runString(string, {
+ ...site.scopedData.get("/"),
+ ...data
+ });
+ return result.content;
+ }
+ };
+}
+/** Vento tag to render a component */ function compTag(env, code, output, tokens) {
+ // Components are always async
+ // so convert automatically {{ comp.whatever }} to {{ await comp.whatever }}
+ if (code.startsWith("comp.")) {
+ const value = `await ${code}`;
+ const val = env.compileFilters(tokens, value, env.options.autoescape);
+ return `${output} += ${val};`;
+ }
+ if (!code.startsWith("comp ")) {
+ return;
+ }
+ const match = code.match(/^comp\s+([\w.]+)(?:\s+([\s\S]+[^/]))?(?:\s+(\/))?$/);
+ if (!match) {
+ throw new Error(`Invalid component tag: ${code}`);
+ }
+ const [_, comp, args, closed] = match;
+ if (closed) {
+ return `${output} += await comp.${comp}(${args || ""});`;
+ }
+ const compiled = [];
+ const tmpOutput = `__content_${tokens.length}`;
+ compiled.push("{");
+ compiled.push(`let ${tmpOutput} = ""`);
+ compiled.push(...env.compileTokens(tokens, tmpOutput, [
+ "/comp"
+ ]));
+ if (tokens.length && (tokens[0][0] !== "tag" || tokens[0][1] !== "/comp")) {
+ log.fatal(`[vento plugin] Missing closing tag for component "${comp}"`);
+ throw new Error(`Missing closing tag for component tag: ${code}`);
+ }
+ tokens.shift();
+ compiled.push(`${output} += await comp.${comp}({...${args || "{}"}, content: ${tmpOutput}});`);
+ compiled.push("}");
+ return compiled.join("\n");
+}
+export default vento;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy92ZW50by50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdXRvdHJpbSwgZW5naW5lIH0gZnJvbSBcIi4uL2RlcHMvdmVudG8udHNcIjtcbmltcG9ydCB7IHBvc2l4IH0gZnJvbSBcIi4uL2RlcHMvcGF0aC50c1wiO1xuaW1wb3J0IGxvYWRlciBmcm9tIFwiLi4vY29yZS9sb2FkZXJzL3RleHQudHNcIjtcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvb2JqZWN0LnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvbG9nLnRzXCI7XG5cbmltcG9ydCB0eXBlIFNpdGUgZnJvbSBcIi4uL2NvcmUvc2l0ZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhIH0gZnJvbSBcIi4uL2NvcmUvZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmdpbmUsIEhlbHBlciwgSGVscGVyT3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL3JlbmRlcmVyLnRzXCI7XG5pbXBvcnQgdHlwZSBGUyBmcm9tIFwiLi4vY29yZS9mcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCwgTG9hZGVyLCBQbHVnaW4sIFRva2VuIH0gZnJvbSBcIi4uL2RlcHMvdmVudG8udHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqIEZpbGUgZXh0ZW5zaW9ucyB0byBsb2FkICovXG4gIGV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKiogT3B0aW9uYWwgc3ViLWV4dGVuc2lvbiBmb3IgcGFnZSBmaWxlcyAqL1xuICBwYWdlU3ViRXh0ZW5zaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaW5jbHVkZXMgcGF0aFxuICAgKiBAZGVmYXVsdCBgc2l0ZS5vcHRpb25zLmluY2x1ZGVzYFxuICAgKi9cbiAgaW5jbHVkZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsdWdpbnMgdG8gdXNlIGJ5IHZlbnRvXG4gICAqL1xuICBwbHVnaW5zPzogUGx1Z2luW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG8tdHJpbSB0aGUgdGVtcGxhdGVzXG4gICAqL1xuICBhdXRvVHJpbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIGZvciB0aGUgVmVudG8gZW5naW5lXG4gICAqIEBzZWUgaHR0cHM6Ly92ZW50by5qcy5vcmcvY29uZmlndXJhdGlvbi9cbiAgICovXG4gIG9wdGlvbnM6IHtcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGFjY2VzcyB0byB0aGUgZGF0YSBpbiB0aGUgdGVtcGxhdGVzICovXG4gICAgZGF0YVZhcm5hbWU/OiBzdHJpbmc7XG5cbiAgICAvKiogTWFrZSBkYXRhIGF2YWlsYWJsZSBvbiB0aGUgZ2xvYmFsIG9iamVjdCBpbnN0ZWFkIG9mIHZhck5hbWUgKi9cbiAgICB1c2VXaXRoPzogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IFhNTC1lc2NhcGUgaW50ZXJwb2xhdGlvbnMuICovXG4gICAgYXV0b2VzY2FwZT86IGJvb2xlYW47XG4gIH07XG59XG5cbi8vIERlZmF1bHQgb3B0aW9uc1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRzOiBPcHRpb25zID0ge1xuICBleHRlbnNpb25zOiBbXCIudmVudG9cIiwgXCIudnRvXCJdLFxuICBhdXRvVHJpbTogdHJ1ZSxcbiAgb3B0aW9uczoge1xuICAgIGRhdGFWYXJuYW1lOiBcIml0XCIsXG4gICAgdXNlV2l0aDogdHJ1ZSxcbiAgICBhdXRvZXNjYXBlOiBmYWxzZSxcbiAgfSxcbn07XG5cbmNsYXNzIEx1bWVMb2FkZXIgaW1wbGVtZW50cyBMb2FkZXIge1xuICBmczogRlM7XG4gICNyb290OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iocm9vdDogc3RyaW5nLCBmczogRlMpIHtcbiAgICB0aGlzLiNyb290ID0gcm9vdDtcbiAgICB0aGlzLmZzID0gZnM7XG4gIH1cblxuICBhc3luYyBsb2FkKGZpbGU6IHN0cmluZykge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5mcy5lbnRyaWVzLmdldChub3JtYWxpemVQYXRoKGZpbGUpKTtcblxuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZW50cnkuZ2V0Q29udGVudChsb2FkZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogZGF0YS5jb250ZW50IGFzIHN0cmluZyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIHJlc29sdmUoZnJvbTogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmaWxlLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplUGF0aChwb3NpeC5qb2luKHBvc2l4LmRpcm5hbWUoZnJvbSksIGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAoZmlsZS5zdGFydHNXaXRoKHRoaXMuI3Jvb3QpKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplUGF0aChmaWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplUGF0aChwb3NpeC5qb2luKHRoaXMuI3Jvb3QsIGZpbGUpKTtcbiAgfVxufVxuXG4vKiogVGVtcGxhdGUgZW5naW5lIHRvIHJlbmRlciBWZW50byBmaWxlcyAqL1xuZXhwb3J0IGNsYXNzIFZlbnRvRW5naW5lIGltcGxlbWVudHMgRW5naW5lIHtcbiAgZW5naW5lOiBFbnZpcm9ubWVudDtcbiAgaW5jbHVkZXM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihlbmdpbmU6IEVudmlyb25tZW50LCBpbmNsdWRlczogc3RyaW5nKSB7XG4gICAgdGhpcy5lbmdpbmUgPSBlbmdpbmU7XG4gICAgdGhpcy5pbmNsdWRlcyA9IGluY2x1ZGVzO1xuICB9XG5cbiAgZGVsZXRlQ2FjaGUoZmlsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbmdpbmUuY2FjaGUuZGVsZXRlKGZpbGUpO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZW5naW5lLnJ1blN0cmluZyhjb250ZW50LCBkYXRhLCBmaWxlbmFtZSk7XG4gICAgcmV0dXJuIHJlc3VsdC5jb250ZW50O1xuICB9XG5cbiAgYWRkSGVscGVyKG5hbWU6IHN0cmluZywgZm46IEhlbHBlciwgb3B0aW9uczogSGVscGVyT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICB0aGlzLmVuZ2luZS5maWx0ZXJzW25hbWVdID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZm4uYXBwbHkoeyBkYXRhOiB0aGlzLmRhdGEgYXMgRGF0YSB9LCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5naW5lLmZpbHRlcnNbbmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh7IGRhdGE6IHRoaXMuZGF0YSBhcyBEYXRhIH0sIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0byB1c2UgdGhlIFZlbnRvIHRlbXBsYXRlIGVuZ2luZVxuICogSW5zdGFsbGVkIGJ5IGRlZmF1bHRcbiAqIEBzZWUgaHR0cHM6Ly9sdW1lLmxhbmQvcGx1Z2lucy92ZW50by9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlbnRvKHVzZXJPcHRpb25zPzogT3B0aW9ucykge1xuICByZXR1cm4gKHNpdGU6IFNpdGUpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2UoXG4gICAgICB7IC4uLmRlZmF1bHRzLCBpbmNsdWRlczogc2l0ZS5vcHRpb25zLmluY2x1ZGVzIH0sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICApO1xuXG4gICAgY29uc3QgdmVudG8gPSBlbmdpbmUoe1xuICAgICAgaW5jbHVkZXM6IG5ldyBMdW1lTG9hZGVyKG5vcm1hbGl6ZVBhdGgob3B0aW9ucy5pbmNsdWRlcyksIHNpdGUuZnMpLFxuICAgICAgLi4ub3B0aW9ucy5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdmVudG8udGFncy5wdXNoKGNvbXBUYWcpO1xuXG4gICAgaWYgKG9wdGlvbnMuYXV0b1RyaW0pIHtcbiAgICAgIHZlbnRvLnVzZShhdXRvdHJpbSgpKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLnBsdWdpbnM/LmZvckVhY2goKHBsdWdpbikgPT4gdmVudG8udXNlKHBsdWdpbikpO1xuXG4gICAgc2l0ZS5ob29rcy5hZGRWZW50b1BsdWdpbiA9IChwbHVnaW46IFBsdWdpbikgPT4ge1xuICAgICAgdmVudG8udXNlKHBsdWdpbik7XG4gICAgfTtcbiAgICBzaXRlLmhvb2tzLnZlbnRvID0gKGNhbGxiYWNrKSA9PiBjYWxsYmFjayh2ZW50byk7XG5cbiAgICBjb25zdCB2ZW50b0VuZ2luZSA9IG5ldyBWZW50b0VuZ2luZSh2ZW50bywgb3B0aW9ucy5pbmNsdWRlcyk7XG5cbiAgICAvLyBJZ25vcmUgaW5jbHVkZXMgZm9sZGVyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMpIHtcbiAgICAgIHNpdGUuaWdub3JlKG9wdGlvbnMuaW5jbHVkZXMpO1xuICAgIH1cblxuICAgIC8vIExvYWQgdGhlIHBhZ2VzIGFuZCByZWdpc3RlciB0aGUgZW5naW5lXG4gICAgc2l0ZS5sb2FkUGFnZXMob3B0aW9ucy5leHRlbnNpb25zLCB7XG4gICAgICBsb2FkZXIsXG4gICAgICBlbmdpbmU6IHZlbnRvRW5naW5lLFxuICAgICAgcGFnZVN1YkV4dGVuc2lvbjogb3B0aW9ucy5wYWdlU3ViRXh0ZW5zaW9uLFxuICAgIH0pO1xuXG4gICAgc2l0ZS5maWx0ZXIoXCJ2dG9cIiwgZmlsdGVyIGFzIEhlbHBlciwgdHJ1ZSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmaWx0ZXIoc3RyaW5nOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVudG8ucnVuU3RyaW5nKHN0cmluZywge1xuICAgICAgICAuLi5zaXRlLnNjb3BlZERhdGEuZ2V0KFwiL1wiKSxcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5jb250ZW50O1xuICAgIH1cbiAgfTtcbn1cblxuLyoqIFZlbnRvIHRhZyB0byByZW5kZXIgYSBjb21wb25lbnQgKi9cbmZ1bmN0aW9uIGNvbXBUYWcoXG4gIGVudjogRW52aXJvbm1lbnQsXG4gIGNvZGU6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHRva2VuczogVG9rZW5bXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vIENvbXBvbmVudHMgYXJlIGFsd2F5cyBhc3luY1xuICAvLyBzbyBjb252ZXJ0IGF1dG9tYXRpY2FsbHkge3sgY29tcC53aGF0ZXZlciB9fSB0byB7eyBhd2FpdCBjb21wLndoYXRldmVyIH19XG4gIGlmIChjb2RlLnN0YXJ0c1dpdGgoXCJjb21wLlwiKSkge1xuICAgIGNvbnN0IHZhbHVlID0gYGF3YWl0ICR7Y29kZX1gO1xuICAgIGNvbnN0IHZhbCA9IGVudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIHZhbHVlLCBlbnYub3B0aW9ucy5hdXRvZXNjYXBlKTtcbiAgICByZXR1cm4gYCR7b3V0cHV0fSArPSAke3ZhbH07YDtcbiAgfVxuXG4gIGlmICghY29kZS5zdGFydHNXaXRoKFwiY29tcCBcIikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGNvZGUubWF0Y2goXG4gICAgL15jb21wXFxzKyhbXFx3Ll0rKSg/OlxccysoW1xcc1xcU10rW14vXSkpPyg/OlxccysoXFwvKSk/JC8sXG4gICk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb21wb25lbnQgdGFnOiAke2NvZGV9YCk7XG4gIH1cblxuICBjb25zdCBbXywgY29tcCwgYXJncywgY2xvc2VkXSA9IG1hdGNoO1xuXG4gIGlmIChjbG9zZWQpIHtcbiAgICByZXR1cm4gYCR7b3V0cHV0fSArPSBhd2FpdCBjb21wLiR7Y29tcH0oJHthcmdzIHx8IFwiXCJ9KTtgO1xuICB9XG5cbiAgY29uc3QgY29tcGlsZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHRtcE91dHB1dCA9IGBfX2NvbnRlbnRfJHt0b2tlbnMubGVuZ3RofWA7XG4gIGNvbXBpbGVkLnB1c2goXCJ7XCIpO1xuICBjb21waWxlZC5wdXNoKGBsZXQgJHt0bXBPdXRwdXR9ID0gXCJcImApO1xuICBjb21waWxlZC5wdXNoKC4uLmVudi5jb21waWxlVG9rZW5zKHRva2VucywgdG1wT3V0cHV0LCBbXCIvY29tcFwiXSkpO1xuXG4gIGlmICh0b2tlbnMubGVuZ3RoICYmICh0b2tlbnNbMF1bMF0gIT09IFwidGFnXCIgfHwgdG9rZW5zWzBdWzFdICE9PSBcIi9jb21wXCIpKSB7XG4gICAgbG9nLmZhdGFsKGBbdmVudG8gcGx1Z2luXSBNaXNzaW5nIGNsb3NpbmcgdGFnIGZvciBjb21wb25lbnQgXCIke2NvbXB9XCJgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2xvc2luZyB0YWcgZm9yIGNvbXBvbmVudCB0YWc6ICR7Y29kZX1gKTtcbiAgfVxuXG4gIHRva2Vucy5zaGlmdCgpO1xuICBjb21waWxlZC5wdXNoKFxuICAgIGAke291dHB1dH0gKz0gYXdhaXQgY29tcC4ke2NvbXB9KHsuLi4ke1xuICAgICAgYXJncyB8fCBcInt9XCJcbiAgICB9LCBjb250ZW50OiAke3RtcE91dHB1dH19KTtgLFxuICApO1xuICBjb21waWxlZC5wdXNoKFwifVwiKTtcblxuICByZXR1cm4gY29tcGlsZWQuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmVudG87XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxRQUFRLEVBQUUsTUFBTSxRQUFRLG1CQUFtQjtBQUNwRCxTQUFTLEtBQUssUUFBUSxrQkFBa0I7QUFDeEMsT0FBTyxZQUFZLDBCQUEwQjtBQUM3QyxTQUFTLEtBQUssUUFBUSwwQkFBMEI7QUFDaEQsU0FBUyxhQUFhLFFBQVEsd0JBQXdCO0FBQ3RELFNBQVMsR0FBRyxRQUFRLHVCQUF1QjtBQStDM0Msa0JBQWtCO0FBQ2xCLE9BQU8sTUFBTSxXQUFvQjtFQUMvQixZQUFZO0lBQUM7SUFBVTtHQUFPO0VBQzlCLFVBQVU7RUFDVixTQUFTO0lBQ1AsYUFBYTtJQUNiLFNBQVM7SUFDVCxZQUFZO0VBQ2Q7QUFDRixFQUFFO0FBRUYsTUFBTTtFQUNKLEdBQU87RUFDUCxDQUFBLElBQUssQ0FBUztFQUVkLFlBQVksSUFBWSxFQUFFLEVBQU0sQ0FBRTtJQUNoQyxJQUFJLENBQUMsQ0FBQSxJQUFLLEdBQUc7SUFDYixJQUFJLENBQUMsRUFBRSxHQUFHO0VBQ1o7RUFFQSxNQUFNLEtBQUssSUFBWSxFQUFFO0lBQ3ZCLE1BQU0sUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztJQUVoRCxJQUFJLENBQUMsT0FBTztNQUNWLE1BQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTTtJQUMzQztJQUVBLE1BQU0sT0FBTyxNQUFNLE1BQU0sVUFBVSxDQUFDO0lBRXBDLE9BQU87TUFDTCxRQUFRLEtBQUssT0FBTztNQUNwQixNQUFNO0lBQ1I7RUFDRjtFQUVBLFFBQVEsSUFBWSxF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
+// denoCacheMetadata=13921268945035092026,15435290338131790686 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/3a9963ae66c46e85c06330c85a956a4620dd81ff0a8dde98869c7cdd550c631e.js b/vendor/gen/https/deno.land/3a9963ae66c46e85c06330c85a956a4620dd81ff0a8dde98869c7cdd550c631e.js
new file mode 100644
index 0000000..2f41dd4
--- /dev/null
+++ b/vendor/gen/https/deno.land/3a9963ae66c46e85c06330c85a956a4620dd81ff0a8dde98869c7cdd550c631e.js
@@ -0,0 +1,48 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+// Alphabet chars.
+export const CHAR_UPPERCASE_A = 65; /* A */
+export const CHAR_LOWERCASE_A = 97; /* a */
+export const CHAR_UPPERCASE_Z = 90; /* Z */
+export const CHAR_LOWERCASE_Z = 122; /* z */
+// Non-alphabetic chars.
+export const CHAR_DOT = 46; /* . */
+export const CHAR_FORWARD_SLASH = 47; /* / */
+export const CHAR_BACKWARD_SLASH = 92; /* \ */
+export const CHAR_VERTICAL_LINE = 124; /* | */
+export const CHAR_COLON = 58; /* : */
+export const CHAR_QUESTION_MARK = 63; /* ? */
+export const CHAR_UNDERSCORE = 95; /* _ */
+export const CHAR_LINE_FEED = 10; /* \n */
+export const CHAR_CARRIAGE_RETURN = 13; /* \r */
+export const CHAR_TAB = 9; /* \t */
+export const CHAR_FORM_FEED = 12; /* \f */
+export const CHAR_EXCLAMATION_MARK = 33; /* ! */
+export const CHAR_HASH = 35; /* # */
+export const CHAR_SPACE = 32; /* */
+export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */
+export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */
+export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */
+export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */
+export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */
+export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */
+export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */
+export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */
+export const CHAR_HYPHEN_MINUS = 45; /* - */
+export const CHAR_PLUS = 43; /* + */
+export const CHAR_DOUBLE_QUOTE = 34; /* " */
+export const CHAR_SINGLE_QUOTE = 39; /* ' */
+export const CHAR_PERCENT = 37; /* % */
+export const CHAR_SEMICOLON = 59; /* ; */
+export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */
+export const CHAR_GRAVE_ACCENT = 96; /* ` */
+export const CHAR_AT = 64; /* @ */
+export const CHAR_AMPERSAND = 38; /* & */
+export const CHAR_EQUAL = 61; /* = */
+// Digits
+export const CHAR_0 = 48; /* 0 */
+export const CHAR_9 = 57; /* 9 */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvX2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vLyBBbHBoYWJldCBjaGFycy5cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9BID0gNjU7IC8qIEEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9BID0gOTc7IC8qIGEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9aID0gOTA7IC8qIFogKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9aID0gMTIyOyAvKiB6ICovXG5cbi8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuZXhwb3J0IGNvbnN0IENIQVJfRE9UID0gNDY7IC8qIC4gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUldBUkRfU0xBU0ggPSA0NzsgLyogLyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQkFDS1dBUkRfU0xBU0ggPSA5MjsgLyogXFwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAxMjQ7IC8qIHwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0NPTE9OID0gNTg7IC8qIDogKi9cbmV4cG9ydCBjb25zdCBDSEFSX1FVRVNUSU9OX01BUksgPSA2MzsgLyogPyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfVU5ERVJTQ09SRSA9IDk1OyAvKiBfICovXG5leHBvcnQgY29uc3QgQ0hBUl9MSU5FX0ZFRUQgPSAxMDsgLyogXFxuICovXG5leHBvcnQgY29uc3QgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSAxMzsgLyogXFxyICovXG5leHBvcnQgY29uc3QgQ0hBUl9UQUIgPSA5OyAvKiBcXHQgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUk1fRkVFRCA9IDEyOyAvKiBcXGYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VYQ0xBTUFUSU9OX01BUksgPSAzMzsgLyogISAqL1xuZXhwb3J0IGNvbnN0IENIQVJfSEFTSCA9IDM1OyAvKiAjICovXG5leHBvcnQgY29uc3QgQ0hBUl9TUEFDRSA9IDMyOyAvKiAgICovXG5leHBvcnQgY29uc3QgQ0hBUl9OT19CUkVBS19TUEFDRSA9IDE2MDsgLyogXFx1MDBBMCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFID0gNjUyNzk7IC8qIFxcdUZFRkYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgPSA5MTsgLyogWyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSA5MzsgLyogXSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUID0gNjA7IC8qIDwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQgPSA2MjsgLyogPiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUID0gMTIzOyAvKiB7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OyAvKiB9ICovXG5leHBvcnQgY29uc3QgQ0hBUl9IWVBIRU5fTUlOVVMgPSA0NTsgLyogLSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUExVUyA9IDQzOyAvKiArICovXG5leHBvcnQgY29uc3QgQ0hBUl9ET1VCTEVfUVVPVEUgPSAzNDsgLyogXCIgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NJTkdMRV9RVU9URSA9IDM5OyAvKiAnICovXG5leHBvcnQgY29uc3QgQ0hBUl9QRVJDRU5UID0gMzc7IC8qICUgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NFTUlDT0xPTiA9IDU5OyAvKiA7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCA9IDk0OyAvKiBeICovXG5leHBvcnQgY29uc3QgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsgLyogYCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQVQgPSA2NDsgLyogQCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQU1QRVJTQU5EID0gMzg7IC8qICYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VRVUFMID0gNjE7IC8qID0gKi9cblxuLy8gRGlnaXRzXG5leHBvcnQgY29uc3QgQ0hBUl8wID0gNDg7IC8qIDAgKi9cbmV4cG9ydCBjb25zdCBDSEFSXzkgPSA1NzsgLyogOSAqL1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxrQkFBa0I7QUFDbEIsT0FBTyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBSztBQUN6QyxPQUFPLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFLO0FBQ3pDLE9BQU8sTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQUs7QUFDekMsT0FBTyxNQUFNLG1CQUFtQixJQUFJLENBQUMsS0FBSztBQUUxQyx3QkFBd0I7QUFDeEIsT0FBTyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUs7QUFDakMsT0FBTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSztBQUMzQyxPQUFPLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFLO0FBQzVDLE9BQU8sTUFBTSxxQkFBcUIsSUFBSSxDQUFDLEtBQUs7QUFDNUMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSztBQUMzQyxPQUFPLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFLO0FBQ3hDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQU07QUFDeEMsT0FBTyxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBTTtBQUM5QyxPQUFPLE1BQU0sV0FBVyxFQUFFLENBQUMsTUFBTTtBQUNqQyxPQUFPLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNO0FBQ3hDLE9BQU8sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQUs7QUFDOUMsT0FBTyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLHNCQUFzQixJQUFJLENBQUMsVUFBVTtBQUNsRCxPQUFPLE1BQU0sZ0NBQWdDLE1BQU0sQ0FBQyxVQUFVO0FBQzlELE9BQU8sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQUs7QUFDakQsT0FBTyxNQUFNLDRCQUE0QixHQUFHLENBQUMsS0FBSztBQUNsRCxPQUFPLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxLQUFLO0FBQ2hELE9BQU8sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQUs7QUFDakQsT0FBTyxNQUFNLDBCQUEwQixJQUFJLENBQUMsS0FBSztBQUNqRCxPQUFPLE1BQU0sMkJBQTJCLElBQUksQ0FBQyxLQUFLO0FBQ2xELE9BQU8sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUs7QUFDMUMsT0FBTyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSztBQUMxQyxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLO0FBQzFDLE9BQU8sTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFLO0FBQ3JDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBSztBQUMvQyxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLO0FBQzFDLE9BQU8sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLO0FBQ2hDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFFbkMsU0FBUztBQUNULE9BQU8sTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLO0FBQy9CLE9BQU8sTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLIn0=
+// denoCacheMetadata=2124655160882666205,3294545937714056928 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/3ab709284215897ee1d95fa35ad8801d5d503cd61985bf7b0bd88d6da152c67c.js b/vendor/gen/https/deno.land/3ab709284215897ee1d95fa35ad8801d5d503cd61985bf7b0bd88d6da152c67c.js
new file mode 100644
index 0000000..8259770
--- /dev/null
+++ b/vendor/gen/https/deno.land/3ab709284215897ee1d95fa35ad8801d5d503cd61985bf7b0bd88d6da152c67c.js
@@ -0,0 +1,3 @@
+export * from "https://deno.land/x/cliffy@v0.25.7/mod.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9jbGlmZnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvbW9kLnRzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0Q0FBNEMifQ==
+// denoCacheMetadata=10646329415807899953,10317901753294029608 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/3c1dfb8e021495a9b103085fee11891391a50d60a2630525bc601bc25900adb7.js b/vendor/gen/https/deno.land/3c1dfb8e021495a9b103085fee11891391a50d60a2630525bc601bc25900adb7.js
new file mode 100644
index 0000000..8d1d850
--- /dev/null
+++ b/vendor/gen/https/deno.land/3c1dfb8e021495a9b103085fee11891391a50d60a2630525bc601bc25900adb7.js
@@ -0,0 +1,98 @@
+import { encodeBase64 } from "../deps/base64.ts";
+import { normalizePath } from "../core/utils/path.ts";
+import reloadClient from "./reload_client.js";
+/** Middleware to hot reload changes */ export function reload(options) {
+ const sockets = new Set();
+ const { watcher, debugBar } = options;
+ // Keep track of the change revision. A watch change
+ // can be dispatched in-between the browser loading
+ // the HTML and before it has established a WebSocket
+ // connection. In this case the browser is out of sync
+ // and shows an old version of the page. Upon establishing
+ // a websocket connection we send the latest revision
+ // and the browser can potentially refresh itself when
+ // it has an older revision. The initial revision is
+ // sent to the browser as part of the HTML.
+ let revision = 0;
+ let lastAcknowledgedRevision = 0;
+ watcher.addEventListener("change", (event)=>{
+ revision++;
+ if (!sockets.size) {
+ return;
+ }
+ lastAcknowledgedRevision = revision;
+ const files = event.files;
+ const message = JSON.stringify({
+ type: "update",
+ revision,
+ files: Array.from(files).map((file)=>normalizePath(file)),
+ data: debugBar
+ });
+ sockets.forEach((socket)=>{
+ if (socket.readyState === WebSocket.OPEN) {
+ socket.send(message);
+ }
+ });
+ console.log("Changes sent to the browser");
+ });
+ watcher.start();
+ return async (request, next)=>{
+ // Is a websocket
+ if (request.headers.get("upgrade") === "websocket") {
+ const { socket, response } = Deno.upgradeWebSocket(request);
+ socket.onopen = ()=>{
+ // Browser was in the process of being reloaded. Notify
+ // the user that the latest changes were sent.
+ if (lastAcknowledgedRevision < revision) {
+ lastAcknowledgedRevision = revision;
+ console.log("Changes sent to the browser");
+ }
+ // Tell the browser about the most recent revision
+ socket.send(JSON.stringify({
+ type: "init",
+ revision,
+ data: debugBar
+ }));
+ sockets.add(socket);
+ };
+ socket.onclose = ()=>sockets.delete(socket);
+ socket.onerror = (e)=>console.log("Socket errored", e);
+ return response;
+ }
+ // It's a regular request
+ const response = await next(request);
+ if (!response.body) {
+ return response;
+ }
+ // Insert live-reload script in the body
+ if (response.headers.get("content-type")?.includes("html")) {
+ const reader = response.body.getReader();
+ let body = "";
+ let result = await reader.read();
+ const decoder = new TextDecoder();
+ while(!result.done){
+ body += decoder.decode(result.value);
+ result = await reader.read();
+ }
+ const source = `${reloadClient}; liveReload(${revision}, "${options.basepath}", ${response.status}, "${debugBar?.url || ""}");`;
+ const integrity = await computeSourceIntegrity(source);
+ // Add live reload script and pass initial revision
+ body += `<script type="module" id="lume-live-reload" integrity="${integrity}">${source};</script>`;
+ const { status, statusText, headers } = response;
+ return new Response(body, {
+ status,
+ statusText,
+ headers
+ });
+ }
+ return response;
+ };
+}
+async function computeSourceIntegrity(source) {
+ const bytes = new TextEncoder().encode(source);
+ const hash = await crypto.subtle.digest("SHA-384", bytes);
+ return `sha384-${encodeBase64(hash)}`;
+}
+export default reload;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvbWlkZGxld2FyZXMvcmVsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuY29kZUJhc2U2NCB9IGZyb20gXCIuLi9kZXBzL2Jhc2U2NC50c1wiO1xuXG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvcGF0aC50c1wiO1xuaW1wb3J0IHJlbG9hZENsaWVudCBmcm9tIFwiLi9yZWxvYWRfY2xpZW50LmpzXCI7XG5cbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gXCIuLi9jb3JlL3NlcnZlci50c1wiO1xuaW1wb3J0IHR5cGUgeyBXYXRjaGVyIH0gZnJvbSBcIi4uL2NvcmUvd2F0Y2hlci50c1wiO1xuaW1wb3J0IHR5cGUgRGVidWdCYXIgZnJvbSBcIi4uL2NvcmUvZGVidWdiYXIudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqIFRoZSB3YXRjaGVyIGluc3RhbmNlIHRvIHVzZSAqL1xuICB3YXRjaGVyOiBXYXRjaGVyO1xuICAvKiogVGhlIGJhc2UgcGF0aCBvZiB0aGUgc2l0ZS4gSXQncyByZXF1aXJlZCBieSB0aGUgcmVsb2FkIHNjcmlwdCAqL1xuICBiYXNlcGF0aDogc3RyaW5nO1xuICAvKiogVGhlIGRlYnVnIGJhciBpbnN0YW5jZSB0byB1c2UgKi9cbiAgZGVidWdCYXI/OiBEZWJ1Z0Jhcjtcbn1cblxuLyoqIE1pZGRsZXdhcmUgdG8gaG90IHJlbG9hZCBjaGFuZ2VzICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKG9wdGlvbnM6IE9wdGlvbnMpOiBNaWRkbGV3YXJlIHtcbiAgY29uc3Qgc29ja2V0cyA9IG5ldyBTZXQ8V2ViU29ja2V0PigpO1xuICBjb25zdCB7IHdhdGNoZXIsIGRlYnVnQmFyIH0gPSBvcHRpb25zO1xuXG4gIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGNoYW5nZSByZXZpc2lvbi4gQSB3YXRjaCBjaGFuZ2VcbiAgLy8gY2FuIGJlIGRpc3BhdGNoZWQgaW4tYmV0d2VlbiB0aGUgYnJvd3NlciBsb2FkaW5nXG4gIC8vIHRoZSBIVE1MIGFuZCBiZWZvcmUgaXQgaGFzIGVzdGFibGlzaGVkIGEgV2ViU29ja2V0XG4gIC8vIGNvbm5lY3Rpb24uIEluIHRoaXMgY2FzZSB0aGUgYnJvd3NlciBpcyBvdXQgb2Ygc3luY1xuICAvLyBhbmQgc2hvd3MgYW4gb2xkIHZlcnNpb24gb2YgdGhlIHBhZ2UuIFVwb24gZXN0YWJsaXNoaW5nXG4gIC8vIGEgd2Vic29ja2V0IGNvbm5lY3Rpb24gd2Ugc2VuZCB0aGUgbGF0ZXN0IHJldmlzaW9uXG4gIC8vIGFuZCB0aGUgYnJvd3NlciBjYW4gcG90ZW50aWFsbHkgcmVmcmVzaCBpdHNlbGYgd2hlblxuICAvLyBpdCBoYXMgYW4gb2xkZXIgcmV2aXNpb24uIFRoZSBpbml0aWFsIHJldmlzaW9uIGlzXG4gIC8vIHNlbnQgdG8gdGhlIGJyb3dzZXIgYXMgcGFydCBvZiB0aGUgSFRNTC5cbiAgbGV0IHJldmlzaW9uID0gMDtcbiAgbGV0IGxhc3RBY2tub3dsZWRnZWRSZXZpc2lvbiA9IDA7XG5cbiAgd2F0Y2hlci5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChldmVudCkgPT4ge1xuICAgIHJldmlzaW9uKys7XG5cbiAgICBpZiAoIXNvY2tldHMuc2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhc3RBY2tub3dsZWRnZWRSZXZpc2lvbiA9IHJldmlzaW9uO1xuXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5maWxlcyE7XG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHR5cGU6IFwidXBkYXRlXCIsXG4gICAgICByZXZpc2lvbixcbiAgICAgIGZpbGVzOiBBcnJheS5mcm9tKGZpbGVzKS5tYXAoKGZpbGUpID0+IG5vcm1hbGl6ZVBhdGgoZmlsZSkpLFxuICAgICAgZGF0YTogZGVidWdCYXIsXG4gICAgfSk7XG5cbiAgICBzb2NrZXRzLmZvckVhY2goKHNvY2tldCkgPT4ge1xuICAgICAgaWYgKHNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgICBzb2NrZXQuc2VuZChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKFwiQ2hhbmdlcyBzZW50IHRvIHRoZSBicm93c2VyXCIpO1xuICB9KTtcblxuICB3YXRjaGVyLnN0YXJ0KCk7XG5cbiAgcmV0dXJuIGFzeW5jIChyZXF1ZXN0LCBuZXh0KSA9PiB7XG4gICAgLy8gSXMgYSB3ZWJzb2NrZXRcbiAgICBpZiAocmVxdWVzdC5oZWFkZXJzLmdldChcInVwZ3JhZGVcIikgPT09IFwid2Vic29ja2V0XCIpIHtcbiAgICAgIGNvbnN0IHsgc29ja2V0LCByZXNwb25zZSB9ID0gRGVuby51cGdyYWRlV2ViU29ja2V0KHJlcXVlc3QpO1xuXG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBCcm93c2VyIHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZWxvYWRlZC4gTm90aWZ5XG4gICAgICAgIC8vIHRoZSB1c2VyIHRoYXQgdGhlIGxhdGVzdCBjaGFuZ2VzIHdlcmUgc2VudC5cbiAgICAgICAgaWYgKGxhc3RBY2tub3dsZWRnZWRSZXZpc2lvbiA8IHJldmlzaW9uKSB7XG4gICAgICAgICAgbGFzdEFja25vd2xlZGdlZFJldmlzaW9uID0gcmV2aXNpb247XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDaGFuZ2VzIHNlbnQgdG8gdGhlIGJyb3dzZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUZWxsIHRoZSBicm93c2VyIGFib3V0IHRoZSBtb3N0IHJlY2VudCByZXZpc2lvblxuICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwiaW5pdFwiLCByZXZpc2lvbiwgZGF0YTogZGVidWdCYXIgfSkpO1xuXG4gICAgICAgIHNvY2tldHMuYWRkKHNvY2tldCk7XG4gICAgICB9O1xuICAgICAgc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiBzb2NrZXRzLmRlbGV0ZShzb2NrZXQpO1xuICAgICAgc29ja2V0Lm9uZXJyb3IgPSAoZSkgPT4gY29uc29sZS5sb2coXCJTb2NrZXQgZXJyb3JlZFwiLCBlKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8vIEl0J3MgYSByZWd1bGFyIHJlcXVlc3RcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvLyBJbnNlcnQgbGl2ZS1yZWxvYWQgc2NyaXB0IGluIHRoZSBib2R5XG4gICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpPy5pbmNsdWRlcyhcImh0bWxcIikpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAgIGxldCBib2R5ID0gXCJcIjtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuXG4gICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgIGJvZHkgKz0gZGVjb2Rlci5kZWNvZGUocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlID1cbiAgICAgICAgYCR7cmVsb2FkQ2xpZW50fTsgbGl2ZVJlbG9hZCgke3JldmlzaW9ufSwgXCIke29wdGlvbnMuYmFzZXBhdGh9XCIsICR7cmVzcG9uc2Uuc3RhdHVzfSwgXCIke1xuICAgICAgICAgIGRlYnVnQmFyPy51cmwgfHwgXCJcIlxuICAgICAgICB9XCIpO2A7XG4gICAgICBjb25zdCBpbnRlZ3JpdHkgPSBhd2FpdCBjb21wdXRlU291cmNlSW50ZWdyaXR5KHNvdXJjZSk7XG5cbiAgICAgIC8vIEFkZCBsaXZlIHJlbG9hZCBzY3JpcHQgYW5kIHBhc3MgaW5pdGlhbCByZXZpc2lvblxuICAgICAgYm9keSArPVxuICAgICAgICBgPHNjcmlwdCB0eXBlPVwibW9kdWxlXCIgaWQ9XCJsdW1lLWxpdmUtcmVsb2FkXCIgaW50ZWdyaXR5PVwiJHtpbnRlZ3JpdHl9XCI+JHtzb3VyY2V9Ozwvc2NyaXB0PmA7XG5cbiAgICAgIGNvbnN0IHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzIH0gPSByZXNwb25zZTtcblxuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShib2R5LCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVycyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VJbnRlZ3JpdHkoc291cmNlOiBzdHJpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc291cmNlKTtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTM4NFwiLCBieXRlcyk7XG4gIHJldHVybiBgc2hhMzg0LSR7ZW5jb2RlQmFzZTY0KGhhc2gpfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbG9hZDtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFlBQVksUUFBUSxvQkFBb0I7QUFFakQsU0FBUyxhQUFhLFFBQVEsd0JBQXdCO0FBQ3RELE9BQU8sa0JBQWtCLHFCQUFxQjtBQWU5QyxxQ0FBcUMsR0FDckMsT0FBTyxTQUFTLE9BQU8sT0FBZ0I7RUFDckMsTUFBTSxVQUFVLElBQUk7RUFDcEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRztFQUU5QixvREFBb0Q7RUFDcEQsbURBQW1EO0VBQ25ELHFEQUFx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
+// denoCacheMetadata=15168686068604235879,4151106969391383738 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/3c52f7056d9a3596f53495fdf8505e3bca3620b0696bdaf47234f131622a39c5.js b/vendor/gen/https/deno.land/3c52f7056d9a3596f53495fdf8505e3bca3620b0696bdaf47234f131622a39c5.js
new file mode 100644
index 0000000..e2bcd37
--- /dev/null
+++ b/vendor/gen/https/deno.land/3c52f7056d9a3596f53495fdf8505e3bca3620b0696bdaf47234f131622a39c5.js
@@ -0,0 +1,221 @@
+import { astring, meriyah, walker } from "../deps.ts";
+import { TransformError } from "./errors.ts";
+// List of identifiers that are in globalThis
+// but should be accessed as templateState.identifier
+const INCLUDE_GLOBAL = [
+ "name"
+];
+// List of identifiers that should be ignored
+// when transforming the code
+const DEFAULT_EXCLUDES = [
+ "globalThis",
+ "self",
+ "this",
+ "undefined",
+ "null"
+];
+// Tracks the scope of the code
+// and the variables that should be ignored
+class ScopeTracker {
+ scopes = [
+ {
+ globalScope: 0,
+ stack: []
+ }
+ ];
+ // The index of the global/function scope
+ globalScope = 0;
+ includes(val) {
+ for(let i = this.scopes.length - 1; i >= 0; i--){
+ if (this.scopes[i].stack.includes(val)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ pushScope(global) {
+ if (global) {
+ this.globalScope = this.scopes.length;
+ }
+ const newScope = {
+ globalScope: this.globalScope,
+ stack: []
+ };
+ this.scopes.push(newScope);
+ }
+ popScope() {
+ this.scopes.pop();
+ this.globalScope = this.scopes[this.scopes.length - 1].globalScope;
+ }
+ pushBinding(val, global) {
+ if (this.scopes.length === 0) {
+ this.scopes.push({
+ globalScope: this.globalScope,
+ stack: []
+ });
+ }
+ if (global) {
+ this.scopes[this.globalScope].stack.push(val);
+ } else {
+ this.scopes[this.scopes.length - 1].stack.push(val);
+ }
+ }
+ pushPatternBinding(pattern, global) {
+ switch(pattern.type){
+ case "Identifier":
+ this.pushBinding(pattern.name, global);
+ break;
+ case "RestElement":
+ this.pushPatternBinding(pattern.argument, global);
+ break;
+ case "ArrayPattern":
+ for (const element of pattern.elements){
+ if (element) {
+ this.pushPatternBinding(element, global);
+ }
+ }
+ break;
+ case "ObjectPattern":
+ for (const prop of pattern.properties){
+ if (prop.type === "RestElement") {
+ this.pushPatternBinding(prop.argument, global);
+ } else {
+ this.pushPatternBinding(prop.value, global);
+ }
+ }
+ break;
+ case "AssignmentPattern":
+ this.pushPatternBinding(pattern.left, global);
+ break;
+ }
+ }
+ pushPatternBindings(patterns, global) {
+ for (const pattern of patterns){
+ this.pushPatternBinding(pattern, global);
+ }
+ }
+}
+export function transformTemplateCode(code, templateState) {
+ if (!code.trim()) {
+ return code;
+ }
+ let parsed;
+ try {
+ parsed = meriyah.parseScript(code, {
+ module: true
+ });
+ } catch (error) {
+ const { message, start, loc } = error;
+ // Use information from `meriyah` to annotate the part of
+ // the compiled template function that triggered the ParseError
+ const annotation = `\u001B[2m${loc.start.line}\u001B[0m ` + code.split("\n")[loc.start.line - 1] + `\n${" ".repeat(loc.start.column)}\u001B[31m^\u001B[39m`;
+ // Grab the last instance of Vento's `__pos` variable before the
+ // error was thrown. Pass this back to Vento to
+ // tie this error with problmatic template code
+ const matches = [
+ ...code.slice(0, start).matchAll(/__pos = (\d+);/g)
+ ];
+ const position = Number(matches.at(-1)?.[1]);
+ throw new TransformError(`[meriyah] ${message} while parsing compiled template function:\n\n${annotation}`, position);
+ }
+ const tracker = new ScopeTracker();
+ const exclude = [
+ templateState,
+ ...DEFAULT_EXCLUDES
+ ];
+ if (parsed.type !== "Program") {
+ throw new TransformError("[meriyah] Expected a program");
+ }
+ if (parsed.body.length === 0) {
+ throw new TransformError("[meriyah] Empty program");
+ }
+ // Transforms an identifier to a MemberExpression
+ // if it's not in the exclude list
+ //
+ // Example:
+ // Transforms {{ name }} to {{ id.name }}
+ function transformIdentifier(id) {
+ if (!INCLUDE_GLOBAL.includes(id.name) && globalThis[id.name] !== undefined || exclude.includes(id.name) || tracker.includes(id.name) || id.name.startsWith("__")) {
+ return id;
+ }
+ return {
+ type: "MemberExpression",
+ object: {
+ type: "Identifier",
+ name: templateState
+ },
+ optional: false,
+ computed: false,
+ property: id
+ };
+ }
+ walker.walk(parsed, {
+ enter (node) {
+ switch(node.type){
+ // Track variable declarations
+ case "VariableDeclaration":
+ // "var" declarations are scoped to the function/global scope.
+ tracker.pushPatternBindings(node.declarations.map((d)=>d.id), node.kind === "var");
+ break;
+ // Track function declarations, and
+ // function parameters.
+ // Also track the scope.
+ case "FunctionDeclaration":
+ case "FunctionExpression":
+ if (node.id) {
+ tracker.pushBinding(node.id.name);
+ }
+ tracker.pushScope(true);
+ tracker.pushPatternBindings(node.params);
+ break;
+ case "ArrowFunctionExpression":
+ tracker.pushScope();
+ tracker.pushPatternBindings(node.params);
+ break;
+ case "Property":
+ // Value is implicitly the same as the key if it's just an
+ // identifier, so we only transform the value (not the key)
+ if (node.shorthand && node.value.type === "Identifier") {
+ this.replace({
+ type: "Property",
+ key: node.key,
+ value: transformIdentifier(node.value),
+ kind: "init",
+ computed: false,
+ method: false,
+ shorthand: false
+ });
+ }
+ break;
+ }
+ },
+ leave (node, parent) {
+ switch(node.type){
+ // Pop the scope when leaving a function
+ case "FunctionDeclaration":
+ case "FunctionExpression":
+ case "ArrowFunctionExpression":
+ tracker.popScope();
+ break;
+ case "Identifier":
+ // Don't transform identifiers that aren't at the start of a MemberExpression
+ // ie. don't transform `bar` or `baz` in `foo.bar.baz`
+ // MemberExpression nodes can also take on a computed property
+ // which means it is an array-like access, so we do transform those.
+ if (parent?.type === "MemberExpression" && parent.property === node && parent.computed === false) {
+ return;
+ }
+ // Don't transform identifiers that are keys in an object
+ if (parent?.type === "Property" && parent.key === node) {
+ return;
+ }
+ this.replace(transformIdentifier(node));
+ break;
+ }
+ }
+ });
+ const generated = astring.generate(parsed);
+ return generated;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9zcmMvdHJhbnNmb3JtZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXN0cmluZywgRVNUcmVlLCBtZXJpeWFoLCB3YWxrZXIgfSBmcm9tIFwiLi4vZGVwcy50c1wiO1xuaW1wb3J0IHsgVHJhbnNmb3JtRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMudHNcIjtcblxuLy8gRGVjbGFyZSBtZXJpeWFoJ3MgUGFyc2VFcnJvciBzaW5jZSBpdCBpc24ndCBleHBvcnRlZFxuaW50ZXJmYWNlIFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICByYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgbG9jOiBSZWNvcmQ8XCJzdGFydFwiIHwgXCJlbmRcIiwgUmVjb3JkPFwibGluZVwiIHwgXCJjb2x1bW5cIiwgbnVtYmVyPj47XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8vIExpc3Qgb2YgaWRlbnRpZmllcnMgdGhhdCBhcmUgaW4gZ2xvYmFsVGhpc1xuLy8gYnV0IHNob3VsZCBiZSBhY2Nlc3NlZCBhcyB0ZW1wbGF0ZVN0YXRlLmlkZW50aWZpZXJcbmNvbnN0IElOQ0xVREVfR0xPQkFMID0gW1xuICBcIm5hbWVcIixcbl07XG5cbi8vIExpc3Qgb2YgaWRlbnRpZmllcnMgdGhhdCBzaG91bGQgYmUgaWdub3JlZFxuLy8gd2hlbiB0cmFuc2Zvcm1pbmcgdGhlIGNvZGVcbmNvbnN0IERFRkFVTFRfRVhDTFVERVMgPSBbXG4gIFwiZ2xvYmFsVGhpc1wiLFxuICBcInNlbGZcIixcbiAgXCJ0aGlzXCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwibnVsbFwiLFxuXTtcblxudHlwZSBTY29wZSA9IHtcbiAgZ2xvYmFsU2NvcGU6IG51bWJlcjtcbiAgc3RhY2s6IHN0cmluZ1tdO1xufTtcblxuLy8gVHJhY2tzIHRoZSBzY29wZSBvZiB0aGUgY29kZVxuLy8gYW5kIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgYmUgaWdub3JlZFxuY2xhc3MgU2NvcGVUcmFja2VyIHtcbiAgcHJpdmF0ZSBzY29wZXM6IFNjb3BlW10gPSBbeyBnbG9iYWxTY29wZTogMCwgc3RhY2s6IFtdIH1dO1xuXG4gIC8vIFRoZSBpbmRleCBvZiB0aGUgZ2xvYmFsL2Z1bmN0aW9uIHNjb3BlXG4gIHByaXZhdGUgZ2xvYmFsU2NvcGUgPSAwO1xuXG4gIGluY2x1ZGVzKHZhbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuc2NvcGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5zY29wZXNbaV0uc3RhY2suaW5jbHVkZXModmFsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdXNoU2NvcGUoZ2xvYmFsPzogYm9vbGVhbikge1xuICAgIGlmIChnbG9iYWwpIHtcbiAgICAgIHRoaXMuZ2xvYmFsU2NvcGUgPSB0aGlzLnNjb3Blcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2NvcGU6IFNjb3BlID0ge1xuICAgICAgZ2xvYmFsU2NvcGU6IHRoaXMuZ2xvYmFsU2NvcGUsXG4gICAgICBzdGFjazogW10sXG4gICAgfTtcblxuICAgIHRoaXMuc2NvcGVzLnB1c2gobmV3U2NvcGUpO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZXMucG9wKCk7XG4gICAgdGhpcy5nbG9iYWxTY29wZSA9IHRoaXMuc2NvcGVzW3RoaXMuc2NvcGVzLmxlbmd0aCAtIDFdLmdsb2JhbFNjb3BlO1xuICB9XG5cbiAgcHVzaEJpbmRpbmcodmFsOiBzdHJpbmcsIGdsb2JhbD86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zY29wZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNjb3Blcy5wdXNoKHsgZ2xvYmFsU2NvcGU6IHRoaXMuZ2xvYmFsU2NvcGUsIHN0YWNrOiBbXSB9KTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICB0aGlzLnNjb3Blc1t0aGlzLmdsb2JhbFNjb3BlXS5zdGFjay5wdXNoKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NvcGVzW3RoaXMuc2NvcGVzLmxlbmd0aCAtIDFdLnN0YWNrLnB1c2godmFsKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUGF0dGVybkJpbmRpbmcocGF0dGVybjogRVNUcmVlLlBhdHRlcm4sIGdsb2JhbD86IGJvb2xlYW4pIHtcbiAgICBzd2l0Y2ggKHBhdHRlcm4udHlwZSkge1xuICAgICAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICAgICAgdGhpcy5wdXNoQmluZGluZyhwYXR0ZXJuLm5hbWUsIGdsb2JhbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiUmVzdEVsZW1lbnRcIjpcbiAgICAgICAgdGhpcy5wdXNoUGF0dGVybkJpbmRpbmcocGF0dGVybi5hcmd1bWVudCwgZ2xvYmFsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJBcnJheVBhdHRlcm5cIjpcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHBhdHRlcm4uZWxlbWVudHMpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5wdXNoUGF0dGVybkJpbmRpbmcoZWxlbWVudCwgZ2xvYmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJPYmplY3RQYXR0ZXJuXCI6XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICBpZiAocHJvcC50eXBlID09PSBcIlJlc3RFbGVtZW50XCIpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaFBhdHRlcm5CaW5kaW5nKHByb3AuYXJndW1lbnQsIGdsb2JhbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVzaFBhdHRlcm5CaW5kaW5nKHByb3AudmFsdWUsIGdsb2JhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjpcbiAgICAgICAgdGhpcy5wdXNoUGF0dGVybkJpbmRpbmcocGF0dGVybi5sZWZ0LCBnbG9iYWwpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdXNoUGF0dGVybkJpbmRpbmdzKHBhdHRlcm5zOiBFU1RyZWUuUGF0dGVybltdLCBnbG9iYWw/OiBib29sZWFuKSB7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICB0aGlzLnB1c2hQYXR0ZXJuQmluZGluZyhwYXR0ZXJuLCBnbG9iYWwpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtVGVtcGxhdGVDb2RlKFxuICBjb2RlOiBzdHJpbmcsXG4gIHRlbXBsYXRlU3RhdGU6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmICghY29kZS50cmltKCkpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIGxldCBwYXJzZWQ7XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gbWVyaXlhaC5wYXJzZVNjcmlwdChjb2RlLCB7IG1vZHVsZTogdHJ1ZSB9KSBhcyBFU1RyZWUuUHJvZ3JhbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YXJ0LCBsb2MgfSA9IGVycm9yIGFzIFBhcnNlRXJyb3I7XG5cbiAgICAvLyBVc2UgaW5mb3JtYXRpb24gZnJvbSBgbWVyaXlhaGAgdG8gYW5ub3RhdGUgdGhlIHBhcnQgb2ZcbiAgICAvLyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIFBhcnNlRXJyb3JcbiAgICBjb25zdCBhbm5vdGF0aW9uID0gYFxcdTAwMUJbMm0ke2xvYy5zdGFydC5saW5lfVxcdTAwMUJbMG0gYCArXG4gICAgICBjb2RlLnNwbGl0KFwiXFxuXCIpW2xvYy5zdGFydC5saW5lIC0gMV0gK1xuICAgICAgYFxcbiR7XCIgXCIucmVwZWF0KGxvYy5zdGFydC5jb2x1bW4pfVxcdTAwMUJbMzFtXlxcdTAwMUJbMzltYDtcblxuICAgIC8vIEdyYWIgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgVmVudG8ncyBgX19wb3NgIHZhcmlhYmxlIGJlZm9yZSB0aGVcbiAgICAvLyBlcnJvciB3YXMgdGhyb3duLiBQYXNzIHRoaXMgYmFjayB0byBWZW50byB0b1xuICAgIC8vIHRpZSB0aGlzIGVycm9yIHdpdGggcHJvYmxtYXRpYyB0ZW1wbGF0ZSBjb2RlXG4gICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb2RlLnNsaWNlKDAsIHN0YXJ0KS5tYXRjaEFsbCgvX19wb3MgPSAoXFxkKyk7L2cpXTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IE51bWJlcihtYXRjaGVzLmF0KC0xKT8uWzFdKTtcblxuICAgIHRocm93IG5ldyBUcmFuc2Zvcm1FcnJvcihcbiAgICAgIGBbbWVyaXlhaF0gJHttZXNzYWdlfSB3aGlsZSBwYXJzaW5nIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uOlxcblxcbiR7YW5ub3RhdGlvbn1gLFxuICAgICAgcG9zaXRpb24sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRyYWNrZXIgPSBuZXcgU2NvcGVUcmFja2VyKCk7XG5cbiAgY29uc3QgZXhjbHVkZSA9IFtcbiAgICB0ZW1wbGF0ZVN0YXRlLFxuICAgIC4uLkRFRkFVTFRfRVhDTFVERVMsXG4gIF07XG5cbiAgaWYgKHBhcnNlZC50eXBlICE9PSBcIlByb2dyYW1cIikge1xuICAgIHRocm93IG5ldyBUcmFuc2Zvcm1FcnJvcihcIlttZXJpeWFoXSBFeHBlY3RlZCBhIHByb2dyYW1cIik7XG4gIH1cblxuICBpZiAocGFyc2VkLmJvZHkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zZm9ybUVycm9yKFwiW21lcml5YWhdIEVtcHR5IHByb2dyYW1cIik7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm1zIGFuIGlkZW50aWZpZXIgdG8gYSBNZW1iZXJFeHByZXNzaW9uXG4gIC8vIGlmIGl0J3Mgbm90IGluIHRoZSBleGNsdWRlIGxpc3RcbiAgLy9cbiAgLy8gRXhhbXBsZTpcbiAgLy8gVHJhbnNmb3JtcyB7eyBuYW1lIH19IHRvIHt7IGlkLm5hbWUgfX1cbiAgZnVuY3Rpb24gdHJhbnNmb3JtSWRlbnRpZmllcihcbiAgICBpZDogRVNUcmVlLklkZW50aWZpZXIsXG4gICk6IEVTVHJlZS5NZW1iZXJFeHByZXNzaW9uIHwgRVNUcmVlLklkZW50aWZpZXIge1xuICAgIGlmIChcbiAgICAgICghSU5DTFVERV9HTE9CQUwuaW5jbHVkZXMoaWQubmFtZSkgJiZcbiAgICAgICAgZ2xvYmFsVGhpc1tpZC5uYW1lIGFzIGtleW9mIHR5cGVvZiBnbG9iYWxUaGlzXSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgZXhjbHVkZS5pbmNsdWRlcyhpZC5uYW1lKSB8fFxuICAgICAgdHJhY2tlci5pbmNsdWRlcyhpZC5uYW1lKSB8fFxuICAgICAgaWQubmFtZS5zdGFydHNXaXRoKFwiX19cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgICBvYmplY3Q6IHtcbiAgICAgICAgdHlwZTogXCJJZGVudGlmaWVyXCIsXG4gICAgICAgIG5hbWU6IHRlbXBsYXRlU3RhdGUsXG4gICAgICB9LFxuICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgcHJvcGVydHk6IGlkLFxuICAgIH07XG4gIH1cblxuICB3YWxrZXIud2FsayhwYXJzZWQsIHtcbiAgICBlbnRlcihub2RlOiBFU1RyZWUuTm9kZSkge1xuICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgLy8gVHJhY2sgdmFyaWFibGUgZGVjbGFyYXRpb25zXG4gICAgICAgIGNhc2UgXCJWYXJpYWJsZURlY2xhcmF0aW9uXCI6XG4gICAgICAgICAgLy8gXCJ2YXJcIiBkZWNsYXJhdGlvbnMgYXJlIHNjb3BlZCB0byB0aGUgZnVuY3Rpb24vZ2xvYmFsIHNjb3BlLlxuICAgICAgICAgIHRyYWNrZXIucHVzaFBhdHRlcm5CaW5kaW5ncyhcbiAgICAgICAgICAgIG5vZGUuZGVjbGFyYXRpb25zLm1hcCgoZCkgPT4gZC5pZCksXG4gICAgICAgICAgICBub2RlLmtpbmQgPT09IFwidmFyXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBUcmFjayBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGFuZFxuICAgICAgICAvLyBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICAgICAgICAvLyBBbHNvIHRyYWNrIHRoZSBzY29wZS5cbiAgICAgICAgY2FzZSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIjpcbiAgICAgICAgY2FzZSBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiOlxuICAgICAgICAgIGlmIChub2RlLmlkKSB7XG4gICAgICAgICAgICB0cmFja2VyLnB1c2hCaW5kaW5nKG5vZGUuaWQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyYWNrZXIucHVzaFNjb3BlKHRydWUpO1xuICAgICAgICAgIHRyYWNrZXIucHVzaFBhdHRlcm5CaW5kaW5ncyhub2RlLnBhcmFtcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCI6XG4gICAgICAgICAgdHJhY2tlci5wdXNoU2NvcGUoKTtcbiAgICAgICAgICB0cmFja2VyLnB1c2hQYXR0ZXJuQmluZGluZ3Mobm9kZS5wYXJhbXMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJQcm9wZXJ0eVwiOlxuICAgICAgICAgIC8vIFZhbHVlIGlzIGltcGxpY2l0bHkgdGhlIHNhbWUgYXMgdGhlIGtleSBpZiBpdCdzIGp1c3QgYW5cbiAgICAgICAgICAvLyBpZGVudGlmaWVyLCBzbyB3ZSBvbmx5IHRyYW5zZm9ybSB0aGUgdmFsdWUgKG5vdCB0aGUga2V5KVxuICAgICAgICAgIGlmIChub2RlLnNob3J0aGFuZCAmJiBub2RlLnZhbHVlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2Uoe1xuICAgICAgICAgICAgICB0eXBlOiBcIlByb3BlcnR5XCIsXG4gICAgICAgICAgICAgIGtleTogbm9kZS5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiB0cmFuc2Zvcm1JZGVudGlmaWVyKG5vZGUudmFsdWUpLFxuICAgICAgICAgICAgICBraW5kOiBcImluaXRcIixcbiAgICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXRob2Q6IGZhbHNlLFxuICAgICAgICAgICAgICBzaG9ydGhhbmQ6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgbGVhdmUobm9kZSwgcGFyZW50KSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICAvLyBQb3AgdGhlIHNjb3BlIHdoZW4gbGVhdmluZyBhIGZ1bmN0aW9uXG4gICAgICAgIGNhc2UgXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJGdW5jdGlvbkV4cHJlc3Npb25cIjpcbiAgICAgICAgY2FzZSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCI6XG4gICAgICAgICAgdHJhY2tlci5wb3BTY29wZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJJZGVudGlmaWVyXCI6XG4gICAgICAgICAgLy8gRG9uJ3QgdHJhbnNmb3JtIGlkZW50aWZpZXJzIHRoYXQgYXJlbid0IGF0IHRoZSBzdGFydCBvZiBhIE1lbWJlckV4cHJlc3Npb25cbiAgICAgICAgICAvLyBpZS4gZG9uJ3QgdHJhbnNmb3JtIGBiYXJgIG9yIGBiYXpgIGluIGBmb28uYmFyLmJhemBcbiAgICAgICAgICAvLyBNZW1iZXJFeHByZXNzaW9uIG5vZGVzIGNhbiBhbHNvIHRha2Ugb24gYSBjb21wdXRlZCBwcm9wZXJ0eVxuICAgICAgICAgIC8vIHdoaWNoIG1lYW5zIGl0IGlzIGFuIGFycmF5LWxpa2UgYWNjZXNzLCBzbyB3ZSBkbyB0cmFuc2Zvcm0gdGhvc2UuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Py50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBwYXJlbnQucHJvcGVydHkgPT09IG5vZGUgJiZcbiAgICAgICAgICAgIHBhcmVudC5jb21wdXRlZCA9PT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEb24ndCB0cmFuc2Zvcm0gaWRlbnRpZmllcnMgdGhhdCBhcmUga2V5cyBpbiBhbiBvYmplY3RcbiAgICAgICAgICBpZiAocGFyZW50Py50eXBlID09PSBcIlByb3BlcnR5XCIgJiYgcGFyZW50LmtleSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlcGxhY2UodHJhbnNmb3JtSWRlbnRpZmllcihub2RlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgZ2VuZXJhdGVkID0gYXN0cmluZy5nZW5lcmF0ZShwYXJzZWQpO1xuXG4gIHJldHVybiBnZW5lcmF0ZWQ7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLEVBQVUsT0FBTyxFQUFFLE1BQU0sUUFBUSxhQUFhO0FBQzlELFNBQVMsY0FBYyxRQUFRLGNBQWM7QUFXN0MsNkNBQTZDO0FBQzdDLHFEQUFx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
+// denoCacheMetadata=8957595283714492446,17379464375834532669 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/3ebb8b3dd4953c0b8e13fa2b6c942b15b7a4aa0688ebd88146f3235dee6eb931.js b/vendor/gen/https/deno.land/3ebb8b3dd4953c0b8e13fa2b6c942b15b7a4aa0688ebd88146f3235dee6eb931.js
new file mode 100644
index 0000000..fe68448
--- /dev/null
+++ b/vendor/gen/https/deno.land/3ebb8b3dd4953c0b8e13fa2b6c942b15b7a4aa0688ebd88146f3235dee6eb931.js
@@ -0,0 +1,3 @@
+export { encode as encodeBase64 } from "https://deno.land/std@0.170.0/encoding/base64.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9kZXBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGVuY29kZSBhcyBlbmNvZGVCYXNlNjQsXG59IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNzAuMC9lbmNvZGluZy9iYXNlNjQudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLFVBQVUsWUFBWSxRQUNqQixtREFBbUQifQ==
+// denoCacheMetadata=2914352737477645551,15737061147621955521 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/410a778354e2e5a3f2277bbe986f125a437e586a79995a44806d451136d74545.js b/vendor/gen/https/deno.land/410a778354e2e5a3f2277bbe986f125a437e586a79995a44806d451136d74545.js
new file mode 100644
index 0000000..91481ac
--- /dev/null
+++ b/vendor/gen/https/deno.land/410a778354e2e5a3f2277bbe986f125a437e586a79995a44806d451136d74545.js
@@ -0,0 +1,517 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors
+// on npm.
+/**
+ * String formatters and utilities for dealing with ANSI color codes.
+ *
+ * This module is browser compatible.
+ *
+ * This module supports `NO_COLOR` environmental variable disabling any coloring
+ * if `NO_COLOR` is set.
+ *
+ * @example
+ * ```typescript
+ * import {
+ * bgBlue,
+ * bgRgb24,
+ * bgRgb8,
+ * bold,
+ * italic,
+ * red,
+ * rgb24,
+ * rgb8,
+ * } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts";
+ *
+ * console.log(bgBlue(italic(red(bold("Hello, World!")))));
+ *
+ * // also supports 8bit colors
+ *
+ * console.log(rgb8("Hello, World!", 42));
+ *
+ * console.log(bgRgb8("Hello, World!", 42));
+ *
+ * // and 24bit rgb
+ *
+ * console.log(rgb24("Hello, World!", {
+ * r: 41,
+ * g: 42,
+ * b: 43,
+ * }));
+ *
+ * console.log(bgRgb24("Hello, World!", {
+ * r: 41,
+ * g: 42,
+ * b: 43,
+ * }));
+ * ```
+ *
+ * @module
+ */ // deno-lint-ignore no-explicit-any
+const { Deno } = globalThis;
+const noColor = typeof Deno?.noColor === "boolean" ? Deno.noColor : true;
+let enabled = !noColor;
+/**
+ * Set changing text color to enabled or disabled
+ * @param value
+ */ export function setColorEnabled(value) {
+ if (noColor) {
+ return;
+ }
+ enabled = value;
+}
+/** Get whether text color change is enabled or disabled. */ export function getColorEnabled() {
+ return enabled;
+}
+/**
+ * Builds color code
+ * @param open
+ * @param close
+ */ function code(open, close) {
+ return {
+ open: `\x1b[${open.join(";")}m`,
+ close: `\x1b[${close}m`,
+ regexp: new RegExp(`\\x1b\\[${close}m`, "g")
+ };
+}
+/**
+ * Applies color and background based on color code and its associated text
+ * @param str text to apply color settings to
+ * @param code color code to apply
+ */ function run(str, code) {
+ return enabled ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` : str;
+}
+/**
+ * Reset the text modified
+ * @param str text to reset
+ */ export function reset(str) {
+ return run(str, code([
+ 0
+ ], 0));
+}
+/**
+ * Make the text bold.
+ * @param str text to make bold
+ */ export function bold(str) {
+ return run(str, code([
+ 1
+ ], 22));
+}
+/**
+ * The text emits only a small amount of light.
+ * @param str text to dim
+ */ export function dim(str) {
+ return run(str, code([
+ 2
+ ], 22));
+}
+/**
+ * Make the text italic.
+ * @param str text to make italic
+ */ export function italic(str) {
+ return run(str, code([
+ 3
+ ], 23));
+}
+/**
+ * Make the text underline.
+ * @param str text to underline
+ */ export function underline(str) {
+ return run(str, code([
+ 4
+ ], 24));
+}
+/**
+ * Invert background color and text color.
+ * @param str text to invert its color
+ */ export function inverse(str) {
+ return run(str, code([
+ 7
+ ], 27));
+}
+/**
+ * Make the text hidden.
+ * @param str text to hide
+ */ export function hidden(str) {
+ return run(str, code([
+ 8
+ ], 28));
+}
+/**
+ * Put horizontal line through the center of the text.
+ * @param str text to strike through
+ */ export function strikethrough(str) {
+ return run(str, code([
+ 9
+ ], 29));
+}
+/**
+ * Set text color to black.
+ * @param str text to make black
+ */ export function black(str) {
+ return run(str, code([
+ 30
+ ], 39));
+}
+/**
+ * Set text color to red.
+ * @param str text to make red
+ */ export function red(str) {
+ return run(str, code([
+ 31
+ ], 39));
+}
+/**
+ * Set text color to green.
+ * @param str text to make green
+ */ export function green(str) {
+ return run(str, code([
+ 32
+ ], 39));
+}
+/**
+ * Set text color to yellow.
+ * @param str text to make yellow
+ */ export function yellow(str) {
+ return run(str, code([
+ 33
+ ], 39));
+}
+/**
+ * Set text color to blue.
+ * @param str text to make blue
+ */ export function blue(str) {
+ return run(str, code([
+ 34
+ ], 39));
+}
+/**
+ * Set text color to magenta.
+ * @param str text to make magenta
+ */ export function magenta(str) {
+ return run(str, code([
+ 35
+ ], 39));
+}
+/**
+ * Set text color to cyan.
+ * @param str text to make cyan
+ */ export function cyan(str) {
+ return run(str, code([
+ 36
+ ], 39));
+}
+/**
+ * Set text color to white.
+ * @param str text to make white
+ */ export function white(str) {
+ return run(str, code([
+ 37
+ ], 39));
+}
+/**
+ * Set text color to gray.
+ * @param str text to make gray
+ */ export function gray(str) {
+ return brightBlack(str);
+}
+/**
+ * Set text color to bright black.
+ * @param str text to make bright-black
+ */ export function brightBlack(str) {
+ return run(str, code([
+ 90
+ ], 39));
+}
+/**
+ * Set text color to bright red.
+ * @param str text to make bright-red
+ */ export function brightRed(str) {
+ return run(str, code([
+ 91
+ ], 39));
+}
+/**
+ * Set text color to bright green.
+ * @param str text to make bright-green
+ */ export function brightGreen(str) {
+ return run(str, code([
+ 92
+ ], 39));
+}
+/**
+ * Set text color to bright yellow.
+ * @param str text to make bright-yellow
+ */ export function brightYellow(str) {
+ return run(str, code([
+ 93
+ ], 39));
+}
+/**
+ * Set text color to bright blue.
+ * @param str text to make bright-blue
+ */ export function brightBlue(str) {
+ return run(str, code([
+ 94
+ ], 39));
+}
+/**
+ * Set text color to bright magenta.
+ * @param str text to make bright-magenta
+ */ export function brightMagenta(str) {
+ return run(str, code([
+ 95
+ ], 39));
+}
+/**
+ * Set text color to bright cyan.
+ * @param str text to make bright-cyan
+ */ export function brightCyan(str) {
+ return run(str, code([
+ 96
+ ], 39));
+}
+/**
+ * Set text color to bright white.
+ * @param str text to make bright-white
+ */ export function brightWhite(str) {
+ return run(str, code([
+ 97
+ ], 39));
+}
+/**
+ * Set background color to black.
+ * @param str text to make its background black
+ */ export function bgBlack(str) {
+ return run(str, code([
+ 40
+ ], 49));
+}
+/**
+ * Set background color to red.
+ * @param str text to make its background red
+ */ export function bgRed(str) {
+ return run(str, code([
+ 41
+ ], 49));
+}
+/**
+ * Set background color to green.
+ * @param str text to make its background green
+ */ export function bgGreen(str) {
+ return run(str, code([
+ 42
+ ], 49));
+}
+/**
+ * Set background color to yellow.
+ * @param str text to make its background yellow
+ */ export function bgYellow(str) {
+ return run(str, code([
+ 43
+ ], 49));
+}
+/**
+ * Set background color to blue.
+ * @param str text to make its background blue
+ */ export function bgBlue(str) {
+ return run(str, code([
+ 44
+ ], 49));
+}
+/**
+ * Set background color to magenta.
+ * @param str text to make its background magenta
+ */ export function bgMagenta(str) {
+ return run(str, code([
+ 45
+ ], 49));
+}
+/**
+ * Set background color to cyan.
+ * @param str text to make its background cyan
+ */ export function bgCyan(str) {
+ return run(str, code([
+ 46
+ ], 49));
+}
+/**
+ * Set background color to white.
+ * @param str text to make its background white
+ */ export function bgWhite(str) {
+ return run(str, code([
+ 47
+ ], 49));
+}
+/**
+ * Set background color to bright black.
+ * @param str text to make its background bright-black
+ */ export function bgBrightBlack(str) {
+ return run(str, code([
+ 100
+ ], 49));
+}
+/**
+ * Set background color to bright red.
+ * @param str text to make its background bright-red
+ */ export function bgBrightRed(str) {
+ return run(str, code([
+ 101
+ ], 49));
+}
+/**
+ * Set background color to bright green.
+ * @param str text to make its background bright-green
+ */ export function bgBrightGreen(str) {
+ return run(str, code([
+ 102
+ ], 49));
+}
+/**
+ * Set background color to bright yellow.
+ * @param str text to make its background bright-yellow
+ */ export function bgBrightYellow(str) {
+ return run(str, code([
+ 103
+ ], 49));
+}
+/**
+ * Set background color to bright blue.
+ * @param str text to make its background bright-blue
+ */ export function bgBrightBlue(str) {
+ return run(str, code([
+ 104
+ ], 49));
+}
+/**
+ * Set background color to bright magenta.
+ * @param str text to make its background bright-magenta
+ */ export function bgBrightMagenta(str) {
+ return run(str, code([
+ 105
+ ], 49));
+}
+/**
+ * Set background color to bright cyan.
+ * @param str text to make its background bright-cyan
+ */ export function bgBrightCyan(str) {
+ return run(str, code([
+ 106
+ ], 49));
+}
+/**
+ * Set background color to bright white.
+ * @param str text to make its background bright-white
+ */ export function bgBrightWhite(str) {
+ return run(str, code([
+ 107
+ ], 49));
+}
+/* Special Color Sequences */ /**
+ * Clam and truncate color codes
+ * @param n
+ * @param max number to truncate to
+ * @param min number to truncate from
+ */ function clampAndTruncate(n, max = 255, min = 0) {
+ return Math.trunc(Math.max(Math.min(n, max), min));
+}
+/**
+ * Set text color using paletted 8bit colors.
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
+ * @param str text color to apply paletted 8bit colors to
+ * @param color code
+ */ export function rgb8(str, color) {
+ return run(str, code([
+ 38,
+ 5,
+ clampAndTruncate(color)
+ ], 39));
+}
+/**
+ * Set background color using paletted 8bit colors.
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
+ * @param str text color to apply paletted 8bit background colors to
+ * @param color code
+ */ export function bgRgb8(str, color) {
+ return run(str, code([
+ 48,
+ 5,
+ clampAndTruncate(color)
+ ], 49));
+}
+/**
+ * Set text color using 24bit rgb.
+ * `color` can be a number in range `0x000000` to `0xffffff` or
+ * an `Rgb`.
+ *
+ * To produce the color magenta:
+ *
+ * ```ts
+ * import { rgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts";
+ * rgb24("foo", 0xff00ff);
+ * rgb24("foo", {r: 255, g: 0, b: 255});
+ * ```
+ * @param str text color to apply 24bit rgb to
+ * @param color code
+ */ export function rgb24(str, color) {
+ if (typeof color === "number") {
+ return run(str, code([
+ 38,
+ 2,
+ color >> 16 & 0xff,
+ color >> 8 & 0xff,
+ color & 0xff
+ ], 39));
+ }
+ return run(str, code([
+ 38,
+ 2,
+ clampAndTruncate(color.r),
+ clampAndTruncate(color.g),
+ clampAndTruncate(color.b)
+ ], 39));
+}
+/**
+ * Set background color using 24bit rgb.
+ * `color` can be a number in range `0x000000` to `0xffffff` or
+ * an `Rgb`.
+ *
+ * To produce the color magenta:
+ *
+ * ```ts
+ * import { bgRgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts";
+ * bgRgb24("foo", 0xff00ff);
+ * bgRgb24("foo", {r: 255, g: 0, b: 255});
+ * ```
+ * @param str text color to apply 24bit rgb to
+ * @param color code
+ */ export function bgRgb24(str, color) {
+ if (typeof color === "number") {
+ return run(str, code([
+ 48,
+ 2,
+ color >> 16 & 0xff,
+ color >> 8 & 0xff,
+ color & 0xff
+ ], 49));
+ }
+ return run(str, code([
+ 48,
+ 2,
+ clampAndTruncate(color.r),
+ clampAndTruncate(color.g),
+ clampAndTruncate(color.b)
+ ], 49));
+}
+// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js
+const ANSI_PATTERN = new RegExp([
+ "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
+ "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"
+].join("|"), "g");
+/**
+ * Remove ANSI escape codes from the string.
+ * @param string to remove ANSI escape codes from
+ */ export function stripColor(string) {
+ return string.replace(ANSI_PATTERN, "");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL2ZtdC9jb2xvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIEEgbW9kdWxlIHRvIHByaW50IEFOU0kgdGVybWluYWwgY29sb3JzLiBJbnNwaXJlZCBieSBjaGFsaywga2xldXIsIGFuZCBjb2xvcnNcbi8vIG9uIG5wbS5cblxuLyoqXG4gKiBTdHJpbmcgZm9ybWF0dGVycyBhbmQgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4gKlxuICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgYE5PX0NPTE9SYCBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGRpc2FibGluZyBhbnkgY29sb3JpbmdcbiAqIGlmIGBOT19DT0xPUmAgaXMgc2V0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQge1xuICogICBiZ0JsdWUsXG4gKiAgIGJnUmdiMjQsXG4gKiAgIGJnUmdiOCxcbiAqICAgYm9sZCxcbiAqICAgaXRhbGljLFxuICogICByZWQsXG4gKiAgIHJnYjI0LFxuICogICByZ2I4LFxuICogfSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQCRTVERfVkVSU0lPTi9mbXQvY29sb3JzLnRzXCI7XG4gKlxuICogY29uc29sZS5sb2coYmdCbHVlKGl0YWxpYyhyZWQoYm9sZChcIkhlbGxvLCBXb3JsZCFcIikpKSkpO1xuICpcbiAqIC8vIGFsc28gc3VwcG9ydHMgOGJpdCBjb2xvcnNcbiAqXG4gKiBjb25zb2xlLmxvZyhyZ2I4KFwiSGVsbG8sIFdvcmxkIVwiLCA0MikpO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnUmdiOChcIkhlbGxvLCBXb3JsZCFcIiwgNDIpKTtcbiAqXG4gKiAvLyBhbmQgMjRiaXQgcmdiXG4gKlxuICogY29uc29sZS5sb2cocmdiMjQoXCJIZWxsbywgV29ybGQhXCIsIHtcbiAqICAgcjogNDEsXG4gKiAgIGc6IDQyLFxuICogICBiOiA0MyxcbiAqIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhiZ1JnYjI0KFwiSGVsbG8sIFdvcmxkIVwiLCB7XG4gKiAgIHI6IDQxLFxuICogICBnOiA0MixcbiAqICAgYjogNDMsXG4gKiB9KSk7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbmNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG5jb25zdCBub0NvbG9yID0gdHlwZW9mIERlbm8/Lm5vQ29sb3IgPT09IFwiYm9vbGVhblwiXG4gID8gRGVuby5ub0NvbG9yIGFzIGJvb2xlYW5cbiAgOiB0cnVlO1xuXG5pbnRlcmZhY2UgQ29kZSB7XG4gIG9wZW46IHN0cmluZztcbiAgY2xvc2U6IHN0cmluZztcbiAgcmVnZXhwOiBSZWdFeHA7XG59XG5cbi8qKiBSR0IgOC1iaXRzIHBlciBjaGFubmVsLiBFYWNoIGluIHJhbmdlIGAwLT4yNTVgIG9yIGAweDAwLT4weGZmYCAqL1xuaW50ZXJmYWNlIFJnYiB7XG4gIHI6IG51bWJlcjtcbiAgZzogbnVtYmVyO1xuICBiOiBudW1iZXI7XG59XG5cbmxldCBlbmFibGVkID0gIW5vQ29sb3I7XG5cbi8qKlxuICogU2V0IGNoYW5naW5nIHRleHQgY29sb3IgdG8gZW5hYmxlZCBvciBkaXNhYmxlZFxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2xvckVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgaWYgKG5vQ29sb3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbmFibGVkID0gdmFsdWU7XG59XG5cbi8qKiBHZXQgd2hldGhlciB0ZXh0IGNvbG9yIGNoYW5nZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVuYWJsZWQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGNvbG9yIGNvZGVcbiAqIEBwYXJhbSBvcGVuXG4gKiBAcGFyYW0gY2xvc2VcbiAqL1xuZnVuY3Rpb24gY29kZShvcGVuOiBudW1iZXJbXSwgY2xvc2U6IG51bWJlcik6IENvZGUge1xuICByZXR1cm4ge1xuICAgIG9wZW46IGBcXHgxYlske29wZW4uam9pbihcIjtcIil9bWAsXG4gICAgY2xvc2U6IGBcXHgxYlske2Nsb3NlfW1gLFxuICAgIHJlZ2V4cDogbmV3IFJlZ0V4cChgXFxcXHgxYlxcXFxbJHtjbG9zZX1tYCwgXCJnXCIpLFxuICB9O1xufVxuXG4vKipcbiAqIEFwcGxpZXMgY29sb3IgYW5kIGJhY2tncm91bmQgYmFzZWQgb24gY29sb3IgY29kZSBhbmQgaXRzIGFzc29jaWF0ZWQgdGV4dFxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIGFwcGx5IGNvbG9yIHNldHRpbmdzIHRvXG4gKiBAcGFyYW0gY29kZSBjb2xvciBjb2RlIHRvIGFwcGx5XG4gKi9cbmZ1bmN0aW9uIHJ1bihzdHI6IHN0cmluZywgY29kZTogQ29kZSk6IHN0cmluZyB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBgJHtjb2RlLm9wZW59JHtzdHIucmVwbGFjZShjb2RlLnJlZ2V4cCwgY29kZS5vcGVuKX0ke2NvZGUuY2xvc2V9YFxuICAgIDogc3RyO1xufVxuXG4vKipcbiAqIFJlc2V0IHRoZSB0ZXh0IG1vZGlmaWVkXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gcmVzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzBdLCAwKSk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgdGV4dCBib2xkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYm9sZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9sZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxXSwgMjIpKTtcbn1cblxuLyoqXG4gKiBUaGUgdGV4dCBlbWl0cyBvbmx5IGEgc21hbGwgYW1vdW50IG9mIGxpZ2h0LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIGRpbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGltKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzJdLCAyMikpO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIHRleHQgaXRhbGljLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRhbGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpdGFsaWMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbM10sIDIzKSk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgdGV4dCB1bmRlcmxpbmUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gdW5kZXJsaW5lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcmxpbmUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNF0sIDI0KSk7XG59XG5cbi8qKlxuICogSW52ZXJ0IGJhY2tncm91bmQgY29sb3IgYW5kIHRleHQgY29sb3IuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gaW52ZXJ0IGl0cyBjb2xvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs3XSwgMjcpKTtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGhpZGRlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBoaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRkZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOF0sIDI4KSk7XG59XG5cbi8qKlxuICogUHV0IGhvcml6b250YWwgbGluZSB0aHJvdWdoIHRoZSBjZW50ZXIgb2YgdGhlIHRleHQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gc3RyaWtlIHRocm91Z2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlrZXRocm91Z2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOV0sIDI5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBibGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzBdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHJlZC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMxXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszMl0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8geWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgeWVsbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB5ZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzNdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsdWUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM0XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszNV0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGN5YW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzZdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHdoaXRlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2Ugd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM3XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBncmF5LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgZ3JheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JheShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBicmlnaHRCbGFjayhzdHIpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBibGFjay5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1ibGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0QmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTBdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRSZWQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTFdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1ncmVlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0R3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTJdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCB5ZWxsb3cuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQteWVsbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTNdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWJsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEJsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTRdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LW1hZ2VudGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodE1hZ2VudGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTVdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBjeWFuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWN5YW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTZdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC13aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0V2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTddLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDBdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIHJlZC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIHJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdSZWQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDFdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnR3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDJdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIHllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDNdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJsdWUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDRdLCA0OSkpO1xufVxuXG4vKipcbiAqICBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ1XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBjeWFuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgY3lhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ2XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIHdoaXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1doaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ3XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0QmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAwXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgcmVkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRSZWQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAxXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgZ3JlZW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0R3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAyXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LXllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAzXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgYmx1ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1ibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEJsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA0XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgbWFnZW50YS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1tYWdlbnRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodE1hZ2VudGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA1XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1jeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA2XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0V2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA3XSwgNDkpKTtcbn1cblxuLyogU3BlY2lhbCBDb2xvciBTZXF1ZW5jZXMgKi9cblxuLyoqXG4gKiBDbGFtIGFuZCB0cnVuY2F0ZSBjb2xvciBjb2Rlc1xuICogQHBhcmFtIG5cbiAqIEBwYXJhbSBtYXggbnVtYmVyIHRvIHRydW5jYXRlIHRvXG4gKiBAcGFyYW0gbWluIG51bWJlciB0byB0cnVuY2F0ZSBmcm9tXG4gKi9cbmZ1bmN0aW9uIGNsYW1wQW5kVHJ1bmNhdGUobjogbnVtYmVyLCBtYXggPSAyNTUsIG1pbiA9IDApOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC50cnVuYyhNYXRoLm1heChNYXRoLm1pbihuLCBtYXgpLCBtaW4pKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB1c2luZyBwYWxldHRlZCA4Yml0IGNvbG9ycy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjOC1iaXRcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSBwYWxldHRlZCA4Yml0IGNvbG9ycyB0b1xuICogQHBhcmFtIGNvbG9yIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJnYjgoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzgsIDUsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IpXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB1c2luZyBwYWxldHRlZCA4Yml0IGNvbG9ycy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjOC1iaXRcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSBwYWxldHRlZCA4Yml0IGJhY2tncm91bmQgY29sb3JzIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdSZ2I4KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ4LCA1LCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yKV0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdXNpbmcgMjRiaXQgcmdiLlxuICogYGNvbG9yYCBjYW4gYmUgYSBudW1iZXIgaW4gcmFuZ2UgYDB4MDAwMDAwYCB0byBgMHhmZmZmZmZgIG9yXG4gKiBhbiBgUmdiYC5cbiAqXG4gKiBUbyBwcm9kdWNlIHRoZSBjb2xvciBtYWdlbnRhOlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IHJnYjI0IH0gZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAkU1REX1ZFUlNJT04vZm10L2NvbG9ycy50c1wiO1xuICogICAgICByZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIHJnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgMjRiaXQgcmdiIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmdiMjQoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIgfCBSZ2IpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHJ1bihcbiAgICAgIHN0cixcbiAgICAgIGNvZGUoXG4gICAgICAgIFszOCwgMiwgKGNvbG9yID4+IDE2KSAmIDB4ZmYsIChjb2xvciA+PiA4KSAmIDB4ZmYsIGNvbG9yICYgMHhmZl0sXG4gICAgICAgIDM5LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBydW4oXG4gICAgc3RyLFxuICAgIGNvZGUoXG4gICAgICBbXG4gICAgICAgIDM4LFxuICAgICAgICAyLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpLFxuICAgICAgXSxcbiAgICAgIDM5LFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgMjRiaXQgcmdiLlxuICogYGNvbG9yYCBjYW4gYmUgYSBudW1iZXIgaW4gcmFuZ2UgYDB4MDAwMDAwYCB0byBgMHhmZmZmZmZgIG9yXG4gKiBhbiBgUmdiYC5cbiAqXG4gKiBUbyBwcm9kdWNlIHRoZSBjb2xvciBtYWdlbnRhOlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IGJnUmdiMjQgfSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQCRTVERfVkVSU0lPTi9mbXQvY29sb3JzLnRzXCI7XG4gKiAgICAgIGJnUmdiMjQoXCJmb29cIiwgMHhmZjAwZmYpO1xuICogICAgICBiZ1JnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgMjRiaXQgcmdiIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdSZ2IyNChzdHI6IHN0cmluZywgY29sb3I6IG51bWJlciB8IFJnYik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgY29sb3IgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gcnVuKFxuICAgICAgc3RyLFxuICAgICAgY29kZShcbiAgICAgICAgWzQ4LCAyLCAoY29sb3IgPj4gMTYpICYgMHhmZiwgKGNvbG9yID4+IDgpICYgMHhmZiwgY29sb3IgJiAweGZmXSxcbiAgICAgICAgNDksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJ1bihcbiAgICBzdHIsXG4gICAgY29kZShcbiAgICAgIFtcbiAgICAgICAgNDgsXG4gICAgICAgIDIsXG4gICAgICAgIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuciksXG4gICAgICAgIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuZyksXG4gICAgICAgIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuYiksXG4gICAgICBdLFxuICAgICAgNDksXG4gICAgKSxcbiAgKTtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktcmVnZXgvYmxvYi8wMmZhODkzZDYxOWQzZGE4NTQxMWFjYzhmZDRlMmVlYTBlOTVhOWQ5L2luZGV4LmpzXG5jb25zdCBBTlNJX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICBbXG4gICAgXCJbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpXCIsXG4gICAgXCIoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW5xLXV5PT48fl0pKVwiLFxuICBdLmpvaW4oXCJ8XCIpLFxuICBcImdcIixcbik7XG5cbi8qKlxuICogUmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGZyb20gdGhlIHN0cmluZy5cbiAqIEBwYXJhbSBzdHJpbmcgdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGZyb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29sb3Ioc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoQU5TSV9QQVRURVJOLCBcIlwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUsK0VBQStFO0FBQy9FLFVBQVU7QUFFVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkNDLEdBRUQsbUNBQW1DO0FBQ25DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNqQixNQUFNLFVBQVUsT0FBTyxNQUFNLFlBQVksWUFDckMsS0FBSyxPQUFPLEdBQ1o7QUFlSixJQUFJLFVBQVUsQ0FBQztBQUVmOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxnQkFBZ0IsS0FBYztFQUM1QyxJQUFJLFNBQVM7SUFDWDtFQUNGO0VBRUEsVUFBVTtBQUNaO0FBRUEsMERBQTBELEdBQzFELE9BQU8sU0FBUztFQUNkLE9BQU87QUFDVDtBQUVBOzs7O0NBSUMsR0FDRCxTQUFTLEtBQUssSUFBYyxFQUFFLEtBQWE7RUFDekMsT0FBTztJQUNMLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQzFDO0FBQ0Y7QUFFQTs7OztDQUlDLEdBQ0QsU0FBUyxJQUFJLEdBQVcsRUFBRSxJQUFVO0VBQ2xDLE9BQU8sVUFDSCxHQUFHLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEdBQ2pFO0FBQ047QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsSUFBSSxHQUFXO0VBQzdCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsVUFBVSxHQUFXO0VBQ25DLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFXO0VBQ2pDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsY0FBYyxHQUFXO0VBQ3ZDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsSUFBSSxHQUFXO0VBQzdCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFXO0VBQ2pDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sWUFBWTtBQUNyQjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQVc7RUFDckMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxVQUFVLEdBQVc7RUFDbkMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQVc7RUFDckMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxhQUFhLEdBQVc7RUFDdEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxXQUFXLEdBQVc7RUFDcEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxjQUFjLEdBQVc7RUFDdkMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxXQUFXLEdBQVc7RUFDcEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQVc7RUFDckMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxRQUFRLEdBQVc7RUFDakMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxNQUFNLEdBQVc7RUFDL0IsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxRQUFRLEdBQVc7RUFDakMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3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
+// denoCacheMetadata=11124773769095373732,15212621031060936035 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/44544b175b294b2446e49829a3c1c2e1aae0058858ba6f9e5c40c56cd16a62db.js b/vendor/gen/https/deno.land/44544b175b294b2446e49829a3c1c2e1aae0058858ba6f9e5c40c56cd16a62db.js
new file mode 100644
index 0000000..49aa75d
--- /dev/null
+++ b/vendor/gen/https/deno.land/44544b175b294b2446e49829a3c1c2e1aae0058858ba6f9e5c40c56cd16a62db.js
@@ -0,0 +1,45 @@
+/**
+ * Class to manage the event listeners
+ * and dispatch events
+ */ export default class Events {
+ listeners = new Map();
+ /** Assign a listener to an event */ addEventListener(type, listenerFn, options) {
+ const listeners = this.listeners.get(type) || new Set();
+ const listener = [
+ listenerFn,
+ options
+ ];
+ listeners.add(listener);
+ this.listeners.set(type, listeners);
+ // Remove on abort
+ if (options?.signal) {
+ options.signal.addEventListener("abort", ()=>{
+ listeners.delete(listener);
+ });
+ }
+ return this;
+ }
+ /** Dispatch an event */ async dispatchEvent(event) {
+ const { type } = event;
+ const listeners = this.listeners.get(type);
+ if (listeners) {
+ for (const listener of listeners){
+ const [listenerFn, listenerOptions] = listener;
+ // Remove the listener if it's a once listener
+ if (listenerOptions?.once) {
+ listeners.delete(listener);
+ }
+ if (await listenerFn(event) === false) {
+ return false;
+ }
+ }
+ }
+ const customEvent = new CustomEvent(`lume:${type}`, {
+ cancelable: true,
+ detail: event
+ });
+ return dispatchEvent(customEvent);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9ldmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsidHlwZSBMaXN0ZW5lcjxFIGV4dGVuZHMgRXZlbnQ+ID0gW0V2ZW50TGlzdGVuZXI8RT4sIEV2ZW50T3B0aW9ucyB8IHVuZGVmaW5lZF07XG5cbi8qKlxuICogQ2xhc3MgdG8gbWFuYWdlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAqIGFuZCBkaXNwYXRjaCBldmVudHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRzPEUgZXh0ZW5kcyBFdmVudD4ge1xuICBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgU2V0PExpc3RlbmVyPEU+Pj4oKTtcblxuICAvKiogQXNzaWduIGEgbGlzdGVuZXIgdG8gYW4gZXZlbnQgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbGlzdGVuZXJGbjogRXZlbnRMaXN0ZW5lcjxFPixcbiAgICBvcHRpb25zPzogRXZlbnRPcHRpb25zLFxuICApIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycy5nZXQodHlwZSkgfHwgbmV3IFNldCgpO1xuICAgIGNvbnN0IGxpc3RlbmVyOiBMaXN0ZW5lcjxFPiA9IFtsaXN0ZW5lckZuLCBvcHRpb25zXTtcblxuICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHRoaXMubGlzdGVuZXJzLnNldCh0eXBlLCBsaXN0ZW5lcnMpO1xuXG4gICAgLy8gUmVtb3ZlIG9uIGFib3J0XG4gICAgaWYgKG9wdGlvbnM/LnNpZ25hbCkge1xuICAgICAgb3B0aW9ucy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaCBhbiBldmVudCAqL1xuICBhc3luYyBkaXNwYXRjaEV2ZW50KGV2ZW50OiBFKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBldmVudDtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycy5nZXQodHlwZSk7XG5cbiAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICBjb25zdCBbbGlzdGVuZXJGbiwgbGlzdGVuZXJPcHRpb25zXSA9IGxpc3RlbmVyO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbGlzdGVuZXIgaWYgaXQncyBhIG9uY2UgbGlzdGVuZXJcbiAgICAgICAgaWYgKGxpc3RlbmVyT3B0aW9ucz8ub25jZSkge1xuICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF3YWl0IGxpc3RlbmVyRm4oZXZlbnQpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGBsdW1lOiR7dHlwZX1gLCB7XG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgZGV0YWlsOiBldmVudCxcbiAgICB9KTtcblxuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcbiAgfVxufVxuXG4vKiogQW4gZXZlbnQgb2JqZWN0ICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50IHtcbiAgLyoqIFRoZSBldmVudCB0eXBlICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqIEV2ZW50IGxpc3RlbmVyICovXG5leHBvcnQgdHlwZSBFdmVudExpc3RlbmVyPEUgZXh0ZW5kcyBFdmVudD4gPSAoZXZlbnQ6IEUpID0+IHVua25vd247XG5cbi8qKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIGV2ZW50cyAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudE9wdGlvbnMge1xuICAvKipcbiAgICogVG8gaW5kaWNhdGUgdGhhdCB0aGUgbGlzdGVuZXIgc2hvdWxkIGJlIGludm9rZWQgYXQgbW9zdCBvbmNlXG4gICAqIGFmdGVyIGJlaW5nIGFkZGVkXG4gICAqL1xuICBvbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxpc3RlbmVyIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiB3aGVuIHRoZSBnaXZlbiBBYm9ydFNpZ25hbCBvYmplY3QncyBhYm9ydCgpIG1ldGhvZCBpcyBjYWxsZWRcbiAgICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Q0FHQyxHQUNELGVBQWUsTUFBTTtFQUNuQixZQUFZLElBQUksTUFBZ0M7RUFFaEQsa0NBQWtDLEdBQ2xDLGlCQUNFLElBQVksRUFDWixVQUE0QixFQUM1QixPQUFzQixFQUN0QjtJQUNBLE1BQU0sWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUk7SUFDbEQsTUFBTSxXQUF3QjtNQUFDO01BQVk7S0FBUTtJQUVuRCxVQUFVLEdBQUcsQ0FBQztJQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU07SUFFekIsa0JBQWtCO0lBQ2xCLElBQUksU0FBUyxRQUFRO01BQ25CLFFBQVEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVM7UUFDdkMsVUFBVSxNQUFNLENBQUM7TUFDbkI7SUFDRjtJQUVBLE9BQU8sSUFBSTtFQUNiO0VBRUEsc0JBQXNCLEdBQ3RCLE1BQU0sY0FBYyxLQUFRLEVBQUU7SUFDNUIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHO0lBQ2pCLE1BQU0sWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUVyQyxJQUFJLFdBQVc7TUFDYixLQUFLLE1BQU0sWUFBWSxVQUFXO1FBQ2hDLE1BQU0sQ0FBQyxZQUFZLGdCQUFnQixHQUFHO1FBRXRDLDhDQUE4QztRQUM5QyxJQUFJLGlCQUFpQixNQUFNO1VBQ3pCLFVBQVUsTUFBTSxDQUFDO1FBQ25CO1FBRUEsSUFBSSxNQUFNLFdBQVcsV0FBVyxPQUFPO1VBQ3JDLE9BQU87UUFDVDtNQUNGO0lBQ0Y7SUFFQSxNQUFNLGNBQWMsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtNQUNsRCxZQUFZO01BQ1osUUFBUTtJQUNWO0lBRUEsT0FBTyxjQUFjO0VBQ3ZCO0FBQ0YifQ==
+// denoCacheMetadata=455609061968039064,5814435458953356410 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/451b8255dcd8b53272e619ade6aa66c644bb730d1e66d1ee63f6442fe4046402.js b/vendor/gen/https/deno.land/451b8255dcd8b53272e619ade6aa66c644bb730d1e66d1ee63f6442fe4046402.js
new file mode 100644
index 0000000..22c6a99
--- /dev/null
+++ b/vendor/gen/https/deno.land/451b8255dcd8b53272e619ade6aa66c644bb730d1e66d1ee63f6442fe4046402.js
@@ -0,0 +1,124 @@
+import { getDescription } from "../_utils.ts";
+import { FileType } from "../types/file.ts";
+/** Fish completions generator. */ export class FishCompletionsGenerator {
+ cmd;
+ /** Generates fish completions script for given command. */ static generate(cmd) {
+ return new FishCompletionsGenerator(cmd).generate();
+ }
+ constructor(cmd){
+ this.cmd = cmd;
+ }
+ /** Generates fish completions script. */ generate() {
+ const path = this.cmd.getPath();
+ const version = this.cmd.getVersion() ? ` v${this.cmd.getVersion()}` : "";
+ return `#!/usr/bin/env fish
+# fish completion support for ${path}${version}
+
+function __fish_${replaceSpecialChars(this.cmd.getName())}_using_command
+ set -l cmds ${getCommandFnNames(this.cmd).join(" ")}
+ set -l words (commandline -opc)
+ set -l cmd "_"
+ for word in $words
+ switch $word
+ case '-*'
+ continue
+ case '*'
+ set word (string replace -r -a '\\W' '_' $word)
+ set -l cmd_tmp $cmd"_$word"
+ if contains $cmd_tmp $cmds
+ set cmd $cmd_tmp
+ end
+ end
+ end
+ if test "$cmd" = "$argv[1]"
+ return 0
+ end
+ return 1
+end
+
+${this.generateCompletions(this.cmd).trim()}`;
+ }
+ generateCompletions(command) {
+ const parent = command.getParent();
+ let result = ``;
+ if (parent) {
+ // command
+ result += "\n" + this.complete(parent, {
+ description: command.getShortDescription(),
+ arguments: command.getName()
+ });
+ }
+ // arguments
+ const commandArgs = command.getArguments();
+ if (commandArgs.length) {
+ result += "\n" + this.complete(command, {
+ arguments: commandArgs.length ? this.getCompletionCommand(command, commandArgs[0]) : undefined
+ });
+ }
+ // options
+ for (const option of command.getOptions(false)){
+ result += "\n" + this.completeOption(command, option);
+ }
+ for (const subCommand of command.getCommands(false)){
+ result += this.generateCompletions(subCommand);
+ }
+ return result;
+ }
+ completeOption(command, option) {
+ const shortOption = option.flags.find((flag)=>flag.length === 2)?.replace(/^(-)+/, "");
+ const longOption = option.flags.find((flag)=>flag.length > 2)?.replace(/^(-)+/, "");
+ return this.complete(command, {
+ description: getDescription(option.description),
+ shortOption: shortOption,
+ longOption: longOption,
+ // required: option.requiredValue,
+ required: true,
+ standalone: option.standalone,
+ arguments: option.args.length ? this.getCompletionCommand(command, option.args[0]) : undefined
+ });
+ }
+ complete(command, options) {
+ const cmd = [
+ "complete"
+ ];
+ cmd.push("-c", this.cmd.getName());
+ cmd.push("-n", `'__fish_${replaceSpecialChars(this.cmd.getName())}_using_command __${replaceSpecialChars(command.getPath())}'`);
+ options.shortOption && cmd.push("-s", options.shortOption);
+ options.longOption && cmd.push("-l", options.longOption);
+ options.standalone && cmd.push("-x");
+ cmd.push("-k");
+ cmd.push("-f");
+ if (options.arguments) {
+ options.required && cmd.push("-r");
+ cmd.push("-a", options.arguments);
+ }
+ if (options.description) {
+ const description = getDescription(options.description, true)// escape single quotes
+ .replace(/'/g, "\\'");
+ cmd.push("-d", `'${description}'`);
+ }
+ return cmd.join(" ");
+ }
+ getCompletionCommand(cmd, arg) {
+ const type = cmd.getType(arg.type);
+ if (type && type.handler instanceof FileType) {
+ return `'(__fish_complete_path)'`;
+ }
+ return `'(${this.cmd.getName()} completions complete ${arg.action + " " + getCompletionsPath(cmd)})'`;
+ }
+}
+function getCommandFnNames(cmd, cmds = []) {
+ cmds.push(`__${replaceSpecialChars(cmd.getPath())}`);
+ cmd.getCommands(false).forEach((command)=>{
+ getCommandFnNames(command, cmds);
+ });
+ return cmds;
+}
+function getCompletionsPath(command) {
+ return command.getPath().split(" ").slice(1).join(" ");
+}
+function replaceSpecialChars(str) {
+ return str.replace(/[^a-zA-Z0-9]/g, "_");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9fZmlzaF9jb21wbGV0aW9uc19nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RGVzY3JpcHRpb24gfSBmcm9tIFwiLi4vX3V0aWxzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZC50c1wiO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudCwgT3B0aW9uIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBGaWxlVHlwZSB9IGZyb20gXCIuLi90eXBlcy9maWxlLnRzXCI7XG5cbi8qKiBHZW5lcmF0ZXMgZmlzaCBjb21wbGV0aW9ucyBzY3JpcHQuICovXG5pbnRlcmZhY2UgQ29tcGxldGVPcHRpb25zIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNob3J0T3B0aW9uPzogc3RyaW5nO1xuICBsb25nT3B0aW9uPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHN0YW5kYWxvbmU/OiBib29sZWFuO1xuICBhcmd1bWVudHM/OiBzdHJpbmc7XG59XG5cbi8qKiBGaXNoIGNvbXBsZXRpb25zIGdlbmVyYXRvci4gKi9cbmV4cG9ydCBjbGFzcyBGaXNoQ29tcGxldGlvbnNHZW5lcmF0b3Ige1xuICAvKiogR2VuZXJhdGVzIGZpc2ggY29tcGxldGlvbnMgc2NyaXB0IGZvciBnaXZlbiBjb21tYW5kLiAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlKGNtZDogQ29tbWFuZCkge1xuICAgIHJldHVybiBuZXcgRmlzaENvbXBsZXRpb25zR2VuZXJhdG9yKGNtZCkuZ2VuZXJhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvdGVjdGVkIGNtZDogQ29tbWFuZCkge31cblxuICAvKiogR2VuZXJhdGVzIGZpc2ggY29tcGxldGlvbnMgc2NyaXB0LiAqL1xuICBwcml2YXRlIGdlbmVyYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY21kLmdldFBhdGgoKTtcbiAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNtZC5nZXRWZXJzaW9uKClcbiAgICAgID8gYCB2JHt0aGlzLmNtZC5nZXRWZXJzaW9uKCl9YFxuICAgICAgOiBcIlwiO1xuXG4gICAgcmV0dXJuIGAjIS91c3IvYmluL2VudiBmaXNoXG4jIGZpc2ggY29tcGxldGlvbiBzdXBwb3J0IGZvciAke3BhdGh9JHt2ZXJzaW9ufVxuXG5mdW5jdGlvbiBfX2Zpc2hfJHtyZXBsYWNlU3BlY2lhbENoYXJzKHRoaXMuY21kLmdldE5hbWUoKSl9X3VzaW5nX2NvbW1hbmRcbiAgc2V0IC1sIGNtZHMgJHtnZXRDb21tYW5kRm5OYW1lcyh0aGlzLmNtZCkuam9pbihcIiBcIil9XG4gIHNldCAtbCB3b3JkcyAoY29tbWFuZGxpbmUgLW9wYylcbiAgc2V0IC1sIGNtZCBcIl9cIlxuICBmb3Igd29yZCBpbiAkd29yZHNcbiAgICBzd2l0Y2ggJHdvcmRcbiAgICAgIGNhc2UgJy0qJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgY2FzZSAnKidcbiAgICAgICAgc2V0IHdvcmQgKHN0cmluZyByZXBsYWNlIC1yIC1hICdcXFxcVycgJ18nICR3b3JkKVxuICAgICAgICBzZXQgLWwgY21kX3RtcCAkY21kXCJfJHdvcmRcIlxuICAgICAgICBpZiBjb250YWlucyAkY21kX3RtcCAkY21kc1xuICAgICAgICAgIHNldCBjbWQgJGNtZF90bXBcbiAgICAgICAgZW5kXG4gICAgZW5kXG4gIGVuZFxuICBpZiB0ZXN0IFwiJGNtZFwiID0gXCIkYXJndlsxXVwiXG4gICAgcmV0dXJuIDBcbiAgZW5kXG4gIHJldHVybiAxXG5lbmRcblxuJHt0aGlzLmdlbmVyYXRlQ29tcGxldGlvbnModGhpcy5jbWQpLnRyaW0oKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbXBsZXRpb25zKGNvbW1hbmQ6IENvbW1hbmQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmVudDogQ29tbWFuZCB8IHVuZGVmaW5lZCA9IGNvbW1hbmQuZ2V0UGFyZW50KCk7XG4gICAgbGV0IHJlc3VsdCA9IGBgO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgLy8gY29tbWFuZFxuICAgICAgcmVzdWx0ICs9IFwiXFxuXCIgKyB0aGlzLmNvbXBsZXRlKHBhcmVudCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogY29tbWFuZC5nZXRTaG9ydERlc2NyaXB0aW9uKCksXG4gICAgICAgIGFyZ3VtZW50czogY29tbWFuZC5nZXROYW1lKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhcmd1bWVudHNcbiAgICBjb25zdCBjb21tYW5kQXJncyA9IGNvbW1hbmQuZ2V0QXJndW1lbnRzKCk7XG4gICAgaWYgKGNvbW1hbmRBcmdzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ICs9IFwiXFxuXCIgKyB0aGlzLmNvbXBsZXRlKGNvbW1hbmQsIHtcbiAgICAgICAgYXJndW1lbnRzOiBjb21tYW5kQXJncy5sZW5ndGhcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29tcGxldGlvbkNvbW1hbmQoY29tbWFuZCwgY29tbWFuZEFyZ3NbMF0pXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgY29tbWFuZC5nZXRPcHRpb25zKGZhbHNlKSkge1xuICAgICAgcmVzdWx0ICs9IFwiXFxuXCIgKyB0aGlzLmNvbXBsZXRlT3B0aW9uKGNvbW1hbmQsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWJDb21tYW5kIG9mIGNvbW1hbmQuZ2V0Q29tbWFuZHMoZmFsc2UpKSB7XG4gICAgICByZXN1bHQgKz0gdGhpcy5nZW5lcmF0ZUNvbXBsZXRpb25zKHN1YkNvbW1hbmQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXBsZXRlT3B0aW9uKGNvbW1hbmQ6IENvbW1hbmQsIG9wdGlvbjogT3B0aW9uKSB7XG4gICAgY29uc3Qgc2hvcnRPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbi5mbGFnc1xuICAgICAgLmZpbmQoKGZsYWcpID0+IGZsYWcubGVuZ3RoID09PSAyKVxuICAgICAgPy5yZXBsYWNlKC9eKC0pKy8sIFwiXCIpO1xuICAgIGNvbnN0IGxvbmdPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbi5mbGFnc1xuICAgICAgLmZpbmQoKGZsYWcpID0+IGZsYWcubGVuZ3RoID4gMilcbiAgICAgID8ucmVwbGFjZSgvXigtKSsvLCBcIlwiKTtcblxuICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKGNvbW1hbmQsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbihvcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgc2hvcnRPcHRpb246IHNob3J0T3B0aW9uLFxuICAgICAgbG9uZ09wdGlvbjogbG9uZ09wdGlvbixcbiAgICAgIC8vIHJlcXVpcmVkOiBvcHRpb24ucmVxdWlyZWRWYWx1ZSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgc3RhbmRhbG9uZTogb3B0aW9uLnN0YW5kYWxvbmUsXG4gICAgICBhcmd1bWVudHM6IG9wdGlvbi5hcmdzLmxlbmd0aFxuICAgICAgICA/IHRoaXMuZ2V0Q29tcGxldGlvbkNvbW1hbmQoY29tbWFuZCwgb3B0aW9uLmFyZ3NbMF0pXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wbGV0ZShjb21tYW5kOiBDb21tYW5kLCBvcHRpb25zOiBDb21wbGV0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBjbWQgPSBbXCJjb21wbGV0ZVwiXTtcbiAgICBjbWQucHVzaChcIi1jXCIsIHRoaXMuY21kLmdldE5hbWUoKSk7XG4gICAgY21kLnB1c2goXG4gICAgICBcIi1uXCIsXG4gICAgICBgJ19fZmlzaF8ke3JlcGxhY2VTcGVjaWFsQ2hhcnModGhpcy5jbWQuZ2V0TmFtZSgpKX1fdXNpbmdfY29tbWFuZCBfXyR7XG4gICAgICAgIHJlcGxhY2VTcGVjaWFsQ2hhcnMoY29tbWFuZC5nZXRQYXRoKCkpXG4gICAgICB9J2AsXG4gICAgKTtcbiAgICBvcHRpb25zLnNob3J0T3B0aW9uICYmIGNtZC5wdXNoKFwiLXNcIiwgb3B0aW9ucy5zaG9ydE9wdGlvbik7XG4gICAgb3B0aW9ucy5sb25nT3B0aW9uICYmIGNtZC5wdXNoKFwiLWxcIiwgb3B0aW9ucy5sb25nT3B0aW9uKTtcbiAgICBvcHRpb25zLnN0YW5kYWxvbmUgJiYgY21kLnB1c2goXCIteFwiKTtcbiAgICBjbWQucHVzaChcIi1rXCIpO1xuICAgIGNtZC5wdXNoKFwiLWZcIik7XG5cbiAgICBpZiAob3B0aW9ucy5hcmd1bWVudHMpIHtcbiAgICAgIG9wdGlvbnMucmVxdWlyZWQgJiYgY21kLnB1c2goXCItclwiKTtcbiAgICAgIGNtZC5wdXNoKFwiLWFcIiwgb3B0aW9ucy5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbjogc3RyaW5nID0gZ2V0RGVzY3JpcHRpb24ob3B0aW9ucy5kZXNjcmlwdGlvbiwgdHJ1ZSlcbiAgICAgICAgLy8gZXNjYXBlIHNpbmdsZSBxdW90ZXNcbiAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKTtcblxuICAgICAgY21kLnB1c2goXCItZFwiLCBgJyR7ZGVzY3JpcHRpb259J2ApO1xuICAgIH1cblxuICAgIHJldHVybiBjbWQuam9pbihcIiBcIik7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBsZXRpb25Db21tYW5kKGNtZDogQ29tbWFuZCwgYXJnOiBBcmd1bWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZSA9IGNtZC5nZXRUeXBlKGFyZy50eXBlKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLmhhbmRsZXIgaW5zdGFuY2VvZiBGaWxlVHlwZSkge1xuICAgICAgcmV0dXJuIGAnKF9fZmlzaF9jb21wbGV0ZV9wYXRoKSdgO1xuICAgIH1cbiAgICByZXR1cm4gYCcoJHt0aGlzLmNtZC5nZXROYW1lKCl9IGNvbXBsZXRpb25zIGNvbXBsZXRlICR7XG4gICAgICBhcmcuYWN0aW9uICsgXCIgXCIgKyBnZXRDb21wbGV0aW9uc1BhdGgoY21kKVxuICAgIH0pJ2A7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29tbWFuZEZuTmFtZXMoXG4gIGNtZDogQ29tbWFuZCxcbiAgY21kczogQXJyYXk8c3RyaW5nPiA9IFtdLFxuKTogQXJyYXk8c3RyaW5nPiB7XG4gIGNtZHMucHVzaChgX18ke3JlcGxhY2VTcGVjaWFsQ2hhcnMoY21kLmdldFBhdGgoKSl9YCk7XG4gIGNtZC5nZXRDb21tYW5kcyhmYWxzZSkuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xuICAgIGdldENvbW1hbmRGbk5hbWVzKGNvbW1hbmQsIGNtZHMpO1xuICB9KTtcbiAgcmV0dXJuIGNtZHM7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBsZXRpb25zUGF0aChjb21tYW5kOiBDb21tYW5kKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbW1hbmQuZ2V0UGF0aCgpXG4gICAgLnNwbGl0KFwiIFwiKVxuICAgIC5zbGljZSgxKVxuICAgIC5qb2luKFwiIFwiKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxDaGFycyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiX1wiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGNBQWMsUUFBUSxlQUFlO0FBRzlDLFNBQVMsUUFBUSxRQUFRLG1CQUFtQjtBQVk1QyxnQ0FBZ0MsR0FDaEMsT0FBTyxNQUFNOztFQUNYLHlEQUF5RCxHQUN6RCxPQUFjLFNBQVMsR0FBWSxFQUFFO0lBQ25DLE9BQU8sSUFB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
+// denoCacheMetadata=16444499270145208952,2329141495092338438 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/454be91687a6cdd906bf292893d80849f0b0308b0c7e5faa7c2fe2cb753ce9e0.js b/vendor/gen/https/deno.land/454be91687a6cdd906bf292893d80849f0b0308b0c7e5faa7c2fe2cb753ce9e0.js
new file mode 100644
index 0000000..1b6f52c
--- /dev/null
+++ b/vendor/gen/https/deno.land/454be91687a6cdd906bf292893d80849f0b0308b0c7e5faa7c2fe2cb753ce9e0.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/encoding@1.0.10/base64";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9iYXNlNjQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImpzcjpAc3RkL2VuY29kaW5nQDEuMC4xMC9iYXNlNjRcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyJ9
+// denoCacheMetadata=9700212516848836825,17896347374022825388 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/45d8062aed7e7539fcdaa85061650e6cd731b275e44ef70a3b8e5badd871205d.js b/vendor/gen/https/deno.land/45d8062aed7e7539fcdaa85061650e6cd731b275e44ef70a3b8e5badd871205d.js
new file mode 100644
index 0000000..e7ad4b7
--- /dev/null
+++ b/vendor/gen/https/deno.land/45d8062aed7e7539fcdaa85061650e6cd731b275e44ef70a3b8e5badd871205d.js
@@ -0,0 +1,109 @@
+import { isPlainObject } from "./object.ts";
+/** Merge the cascade data */ export function mergeData(...datas) {
+ return datas.reduce((previous, current)=>{
+ const data = {
+ ...previous,
+ ...current
+ };
+ // Merge special keys
+ const mergedKeys = {
+ ...previous.mergedKeys,
+ ...current.mergedKeys
+ };
+ for (const [key, type] of Object.entries(mergedKeys)){
+ switch(type){
+ case "stringArray":
+ data[key] = mergeStringArray(previous[key], current[key]);
+ break;
+ case "array":
+ data[key] = mergeArray(previous[key], current[key]);
+ break;
+ case "object":
+ data[key] = mergeObject(previous[key], current[key]);
+ break;
+ case "data":
+ if (current[key] && previous[key]) {
+ const merged = mergeData({
+ mergedKeys
+ }, previous[key], current[key]);
+ data[key] = merged;
+ }
+ break;
+ }
+ }
+ return data;
+ });
+}
+/** Override some data recursively */ export function overrideData(data, override) {
+ if (!override) {
+ return;
+ }
+ // Merge special keys
+ const mergedKeys = {
+ ...data.mergedKeys,
+ ...override.mergedKeys
+ };
+ for (const [key, value] of Object.entries(override)){
+ switch(mergedKeys[key]){
+ case "stringArray":
+ data[key] = mergeStringArray(data[key], value);
+ break;
+ case "array":
+ data[key] = mergeArray(data[key], value);
+ break;
+ case "object":
+ data[key] = mergeObject(data[key], value);
+ break;
+ default:
+ if (isPlainObject(data[key]) && isPlainObject(value)) {
+ data[key] = mergeRecursiveObjects(data[key], value);
+ break;
+ }
+ if (value !== undefined) {
+ data[key] = value;
+ break;
+ }
+ }
+ }
+}
+function toArray(value) {
+ return Array.isArray(value) ? value : value === undefined || value === null ? [] : [
+ value
+ ];
+}
+function mergeArray(previous, current) {
+ return [
+ ...new Set([
+ ...toArray(previous),
+ ...toArray(current)
+ ])
+ ];
+}
+function mergeStringArray(previous, current) {
+ return [
+ ...new Set(mergeArray(previous, current).map(String))
+ ];
+}
+function mergeObject(previous, current) {
+ return {
+ ...previous ?? {},
+ ...current ?? {}
+ };
+}
+export function mergeRecursiveObjects(target, override) {
+ const merged = {
+ ...target
+ };
+ for (const [key, value] of Object.entries(override)){
+ if (isPlainObject(target[key]) && isPlainObject(value)) {
+ merged[key] = mergeRecursiveObjects(target[key], value);
+ continue;
+ }
+ if (value !== undefined) {
+ merged[key] = value;
+ }
+ }
+ return merged;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9tZXJnZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcbmltcG9ydCB7IERhdGEgfSBmcm9tIFwiLi4vZmlsZS50c1wiO1xuXG5leHBvcnQgdHlwZSBNZXJnZVN0cmF0ZWd5ID1cbiAgfCBcImFycmF5XCJcbiAgfCBcInN0cmluZ0FycmF5XCJcbiAgfCBcIm9iamVjdFwiXG4gIHwgXCJkYXRhXCJcbiAgfCBcIm5vbmVcIjtcblxuaW50ZXJmYWNlIERhdGFUb01lcmdlIHtcbiAgbWVyZ2VkS2V5cz86IFJlY29yZDxzdHJpbmcsIE1lcmdlU3RyYXRlZ3k+O1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKiogTWVyZ2UgdGhlIGNhc2NhZGUgZGF0YSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YSguLi5kYXRhczogRGF0YVRvTWVyZ2VbXSk6IERhdGFUb01lcmdlIHtcbiAgcmV0dXJuIGRhdGFzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICBjb25zdCBkYXRhOiBEYXRhVG9NZXJnZSA9IHsgLi4ucHJldmlvdXMsIC4uLmN1cnJlbnQgfTtcblxuICAgIC8vIE1lcmdlIHNwZWNpYWwga2V5c1xuICAgIGNvbnN0IG1lcmdlZEtleXMgPSB7XG4gICAgICAuLi5wcmV2aW91cy5tZXJnZWRLZXlzLFxuICAgICAgLi4uY3VycmVudC5tZXJnZWRLZXlzLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlZEtleXMpKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ0FycmF5XCI6XG4gICAgICAgICAgZGF0YVtrZXldID0gbWVyZ2VTdHJpbmdBcnJheShwcmV2aW91c1trZXldLCBjdXJyZW50W2tleV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICBkYXRhW2tleV0gPSBtZXJnZUFycmF5KHByZXZpb3VzW2tleV0sIGN1cnJlbnRba2V5XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBkYXRhW2tleV0gPSBtZXJnZU9iamVjdChwcmV2aW91c1trZXldLCBjdXJyZW50W2tleV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICAgIGlmIChjdXJyZW50W2tleV0gJiYgcHJldmlvdXNba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VEYXRhKFxuICAgICAgICAgICAgICB7IG1lcmdlZEtleXMgfSxcbiAgICAgICAgICAgICAgcHJldmlvdXNba2V5XSBhcyBEYXRhVG9NZXJnZSxcbiAgICAgICAgICAgICAgY3VycmVudFtrZXldIGFzIERhdGFUb01lcmdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IG1lcmdlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH0pO1xufVxuXG4vKiogT3ZlcnJpZGUgc29tZSBkYXRhIHJlY3Vyc2l2ZWx5ICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcnJpZGVEYXRhKGRhdGE6IERhdGEsIG92ZXJyaWRlOiBEYXRhKTogdm9pZCB7XG4gIGlmICghb3ZlcnJpZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBNZXJnZSBzcGVjaWFsIGtleXNcbiAgY29uc3QgbWVyZ2VkS2V5cyA9IHtcbiAgICAuLi5kYXRhLm1lcmdlZEtleXMsXG4gICAgLi4ub3ZlcnJpZGUubWVyZ2VkS2V5cyxcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZSkpIHtcbiAgICBzd2l0Y2ggKG1lcmdlZEtleXNba2V5XSkge1xuICAgICAgY2FzZSBcInN0cmluZ0FycmF5XCI6XG4gICAgICAgIGRhdGFba2V5XSA9IG1lcmdlU3RyaW5nQXJyYXkoZGF0YVtrZXldLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgIGRhdGFba2V5XSA9IG1lcmdlQXJyYXkoZGF0YVtrZXldLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBkYXRhW2tleV0gPSBtZXJnZU9iamVjdChkYXRhW2tleV0sIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChkYXRhW2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gbWVyZ2VSZWN1cnNpdmVPYmplY3RzKGRhdGFba2V5XSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZTogdW5rbm93bik6IHVua25vd25bXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6ICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKVxuICAgID8gW11cbiAgICA6IFt2YWx1ZV07XG59XG5cbmZ1bmN0aW9uIG1lcmdlQXJyYXkocHJldmlvdXM6IHVua25vd24sIGN1cnJlbnQ6IHVua25vd24pOiB1bmtub3duW10ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLnRvQXJyYXkocHJldmlvdXMpLCAuLi50b0FycmF5KGN1cnJlbnQpXSldO1xufVxuXG5mdW5jdGlvbiBtZXJnZVN0cmluZ0FycmF5KHByZXZpb3VzOiB1bmtub3duLCBjdXJyZW50OiB1bmtub3duKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQobWVyZ2VBcnJheShwcmV2aW91cywgY3VycmVudCkubWFwKFN0cmluZykpXTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VPYmplY3QoXG4gIHByZXZpb3VzOiB1bmtub3duLFxuICBjdXJyZW50OiB1bmtub3duLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4geyAuLi5wcmV2aW91cyA/PyB7fSwgLi4uY3VycmVudCA/PyB7fSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZWN1cnNpdmVPYmplY3RzKFxuICB0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvdmVycmlkZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4udGFyZ2V0IH07XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGUpKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QodGFyZ2V0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICBtZXJnZWRba2V5XSA9IG1lcmdlUmVjdXJzaXZlT2JqZWN0cyh0YXJnZXRba2V5XSwgdmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlZFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGFBQWEsUUFBUSxjQUFjO0FBZTVDLDJCQUEyQixHQUMzQixPQUFPLFNBQVMsVUFBVSxHQUFHLEtBQW9CO0VBQy9DLE9BQU8sTUFBTSxNQUFNLENBQUMsQ0FBQyxVQUFVO0lBQzdCLE1BQU0sT0FBb0I7TUFBRSxHQUFHLFFBQVE7TUFBRSxHQUFHLE9BQU87SUFBQztJQUVwRCxxQkFBcUI7SUFDckIsTUFBTSxhQUFhO01BQ2pCLEdBQUcsU0FBUyxVQUFVO01BQ3RCLEdBQUcsUUFBUSxVQUFVO0lBQ3ZCO0lBRUEsS0FBSyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksT0FBTyxPQUFPLENBQUMsWUFBYTtNQUNwRCxPQUFRO1FBQ04sS0FBSztVQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7VUFDeEQ7UUFDRixLQUFLO1VBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7VUFDbEQ7UUFDRixLQUFLO1VBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7VUFDbkQ7UUFDRixLQUFLO1VBQ0gsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDakMsTUFBTSxTQUFTLFVBQ2I7Y0FBRTtZQUFXLEdBQ2IsUUFBUSxDQUFDLElBQUksRUFDYixPQUFPLENBQUMsSUFBSTtZQUVkLElBQUksQ0FBQyxJQUFJLEdBQUc7VUFDZDtVQUNBO01BQ0o7SUFDRjtJQUVBLE9BQU87RUFDVDtBQUNGO0FBRUEsbUNBQW1DLEdBQ25DLE9BQU8sU0FBUyxhQUFhLElBQVUsRUFBRSxRQUFjO0VBQ3JELElBQUksQ0FBQyxVQUFVO0lBQ2I7RUFDRjtFQUVBLHFCQUFxQjtFQUNyQixNQUFNLGFBQWE7SUFDakIsR0FBRyxLQUFLLFVBQVU7SUFDbEIsR0FBRyxTQUFTLFVBQVU7RUFDeEI7RUFFQSxLQUFLLE1BQU0sQ0FBQyxLQUFLLE1BQU0sSUFBSSxPQUFPLE9BQU8sQ0FBQyxVQUFXO0lBQ25ELE9BQVEsVUFBVSxDQUFDLElBQUk7TUFDckIsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDeEM7TUFDRixLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDbEM7TUFDRixLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDbkM7TUFDRjtRQUNFLElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsUUFBUTtVQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixJQUFJLENBQUMsSUFBSSxFQUFFO1VBQzdDO1FBQ0Y7UUFDQSxJQUFJLFVBQVUsV0FBVztVQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHO1VBQ1o7UUFDRjtJQUNKO0VBQ0Y7QUFDRjtBQUVBLFNBQVMsUUFBUSxLQUFjO0VBQzdCLE9BQU8sTUFBTSxPQUFPLENBQUMsU0FDakIsUUFDQSxBQUFDLFVBQVUsYUFBYSxVQUFVLE9BQ2xDLEVBQUUsR0FDRjtJQUFDO0dBQU07QUFDYjtBQUVBLFNBQVMsV0FBVyxRQUFpQixFQUFFLE9BQWdCO0VBQ3JELE9BQU87T0FBSSxJQUFJLElBQUk7U0FBSSxRQUFRO1NBQWMsUUFBUTtLQUFTO0dBQUU7QUFDbEU7QUFFQSxTQUFTLGlCQUFpQixRQUFpQixFQUFFLE9BQWdCO0VBQzNELE9BQU87T0FBSSxJQUFJLElBQUksV0FBVyxVQUFVLFNBQVMsR0FBRyxDQUFDO0dBQVM7QUFDaEU7QUFFQSxTQUFTLFlBQ1AsUUFBaUIsRUFDakIsT0FBZ0I7RUFFaEIsT0FBTztJQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO0VBQUM7QUFDL0M7QUFFQSxPQUFPLFNBQVMsc0JBQ2QsTUFBK0IsRUFDL0IsUUFBaUM7RUFFakMsTUFBTSxTQUFTO0lBQUUsR0FBRyxNQUFNO0VBQUM7RUFFM0IsS0FBSyxNQUFNLENBQUMsS0FBSyxNQUFNLElBQUksT0FBTyxPQUFPLENBQUMsVUFBVztJQUNuRCxJQUFJLGNBQWMsTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLFFBQVE7TUFDdEQsTUFBTSxDQUFDLElBQUksR0FBRyxzQkFBc0IsTUFBTSxDQUFDLElBQUksRUFBRTtNQUNqRDtJQUNGO0lBRUEsSUFBSSxVQUFVLFdBQVc7TUFDdkIsTUFBTSxDQUFDLElBQUksR0FBRztJQUNoQjtFQUNGO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=2699479451449470292,8832777312800071912 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/466d17d163946adf94be4279e8491bfbcdacd7455a305c759f3d212dffa3ed2e.js b/vendor/gen/https/deno.land/466d17d163946adf94be4279e8491bfbcdacd7455a305c759f3d212dffa3ed2e.js
new file mode 100644
index 0000000..07ac57f
--- /dev/null
+++ b/vendor/gen/https/deno.land/466d17d163946adf94be4279e8491bfbcdacd7455a305c759f3d212dffa3ed2e.js
@@ -0,0 +1,13 @@
+import { StringType } from "./string.ts";
+// export interface FileTypeOptions {
+// dirsOnly?: boolean;
+// pattern?: string;
+// ignore?: Array<string>;
+// }
+/** Integer type. */ export class FileType extends StringType {
+ constructor(){
+ super();
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0cmluZ1R5cGUgfSBmcm9tIFwiLi9zdHJpbmcudHNcIjtcblxuLy8gZXhwb3J0IGludGVyZmFjZSBGaWxlVHlwZU9wdGlvbnMge1xuLy8gICBkaXJzT25seT86IGJvb2xlYW47XG4vLyAgIHBhdHRlcm4/OiBzdHJpbmc7XG4vLyAgIGlnbm9yZT86IEFycmF5PHN0cmluZz47XG4vLyB9XG5cbi8qKiBJbnRlZ2VyIHR5cGUuICovXG5leHBvcnQgY2xhc3MgRmlsZVR5cGUgZXh0ZW5kcyBTdHJpbmdUeXBlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8vIGdldE9wdGlvbnMoKTogRmlsZVR5cGVPcHRpb25zIHtcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRzO1xuICAvLyB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxVQUFVLFFBQVEsY0FBYztBQUV6QyxxQ0FBcUM7QUFDckMsd0JBQXdCO0FBQ3hCLHNCQUFzQjtBQUN0Qiw0QkFBNEI7QUFDNUIsSUFBSTtBQUVKLGtCQUFrQixHQUNsQixPQUFPLE1BQU0saUJBQWlCO0VBQzVCLGFBQWM7SUFDWixLQUFLO0VBQ1A7QUFLRiJ9
+// denoCacheMetadata=4856156551876021161,6318137504007572926 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4717b2fafbd4bc99c447f6bba6715da806a78f1510f64879572eada428cb4da8.js b/vendor/gen/https/deno.land/4717b2fafbd4bc99c447f6bba6715da806a78f1510f64879572eada428cb4da8.js
new file mode 100644
index 0000000..3a0a044
--- /dev/null
+++ b/vendor/gen/https/deno.land/4717b2fafbd4bc99c447f6bba6715da806a78f1510f64879572eada428cb4da8.js
@@ -0,0 +1,19 @@
+export * from "./types.ts";
+export * from "./command.ts";
+export * from "./completions/mod.ts";
+export * from "./help/mod.ts";
+export * from "./upgrade/mod.ts";
+export * from "./types/action_list.ts";
+export * from "./types/boolean.ts";
+export * from "./types/child_command.ts";
+export * from "./types/command.ts";
+export * from "./types/enum.ts";
+export * from "./types/file.ts";
+export * from "./types/integer.ts";
+export * from "./types/number.ts";
+export * from "./types/string.ts";
+export * from "./type.ts";
+export { ValidationError } from "./_errors.ts";
+export * from "./deprecated.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbW1hbmQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBsZXRpb25zL21vZC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscC9tb2QudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3VwZ3JhZGUvbW9kLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9hY3Rpb25fbGlzdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvYm9vbGVhbi50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvY2hpbGRfY29tbWFuZC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvY29tbWFuZC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvZW51bS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvZmlsZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvaW50ZWdlci50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvbnVtYmVyLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9zdHJpbmcudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGUudHNcIjtcbmV4cG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL19lcnJvcnMudHNcIjtcbmV4cG9ydCB7IHR5cGUgVmFsaWRhdGlvbkVycm9yT3B0aW9ucyB9IGZyb20gXCIuL19lcnJvcnMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlcHJlY2F0ZWQudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWE7QUFDM0IsY0FBYyxlQUFlO0FBQzdCLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMseUJBQXlCO0FBQ3ZDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsMkJBQTJCO0FBQ3pDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsWUFBWTtBQUMxQixTQUFTLGVBQWUsUUFBUSxlQUFlO0FBRS9DLGNBQWMsa0JBQWtCIn0=
+// denoCacheMetadata=8526359793277529907,9468903767449678803 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/48671f07ca6e9f20af82f7009faf390f972515c1b4e03316efba2615e2aaa243.js b/vendor/gen/https/deno.land/48671f07ca6e9f20af82f7009faf390f972515c1b4e03316efba2615e2aaa243.js
new file mode 100644
index 0000000..3ece358
--- /dev/null
+++ b/vendor/gen/https/deno.land/48671f07ca6e9f20af82f7009faf390f972515c1b4e03316efba2615e2aaa243.js
@@ -0,0 +1,124 @@
+import { env } from "./env.ts";
+import { bold, brightGreen, cyan, gray, italic, red, strikethrough, yellow } from "../../deps/colors.ts";
+const severity = {
+ TRACE: 1,
+ DEBUG: 5,
+ INFO: 9,
+ WARN: 13,
+ ERROR: 17,
+ FATAL: 21
+};
+// Get the log level from the environment variable LUME_LOGS
+const level = env("LUME_LOGS")?.toUpperCase() ?? "INFO";
+const COLOR_TAG_REG = /<(\w+)>([^<]+)<\/\1>/g;
+const logFormats = {
+ cyan,
+ Cyan: (str)=>bold(cyan(str)),
+ red,
+ Red: (str)=>bold(red(str)),
+ gray,
+ code: gray,
+ Gray: (str)=>bold(gray(str)),
+ green: brightGreen,
+ Green: (str)=>bold(brightGreen(str)),
+ yellow: yellow,
+ Yellow: (str)=>bold(yellow(str)),
+ del: (str)=>strikethrough(gray(str)),
+ em: italic,
+ strong: bold
+};
+/**
+ * This is the default logger. It will output color coded log messages to the
+ * console via `console.log()`.
+ */ class Logger {
+ #level;
+ #collection;
+ constructor(level){
+ this.#level = severity[level];
+ }
+ set collection(collection) {
+ this.#collection = collection;
+ }
+ get level() {
+ return this.#level;
+ }
+ #log(msg, level) {
+ if (level >= severity.FATAL) {
+ msg = `<Red>FATAL</Red> ${msg}`;
+ } else if (level >= severity.ERROR) {
+ msg = `<red>ERROR</red> ${msg}`;
+ } else if (level >= severity.WARN) {
+ msg = `<yellow>WARN</yellow> ${msg}`;
+ }
+ msg = msg.replaceAll(COLOR_TAG_REG, (all, name, content)=>logFormats[name]?.(content) ?? all);
+ if (level >= severity.ERROR) {
+ return console.error(msg);
+ }
+ if (level >= severity.WARN) {
+ return console.warn(msg);
+ }
+ console.log(msg);
+ }
+ fatal(msg, items) {
+ this.#bar(msg, "fatal", items);
+ this.#log(msg, severity.FATAL);
+ }
+ error(msg, items) {
+ if (this.#level < severity.FATAL) {
+ this.#bar(msg, "error", items);
+ this.#log(msg, severity.ERROR);
+ }
+ }
+ warn(msg, items) {
+ if (this.#level < severity.ERROR) {
+ this.#bar(msg, "warn", items);
+ this.#log(msg, severity.WARN);
+ }
+ }
+ info(msg) {
+ if (this.#level < severity.WARN) {
+ this.#log(msg, severity.INFO);
+ }
+ }
+ debug(msg) {
+ if (this.#level < severity.INFO) {
+ this.#log(msg, severity.DEBUG);
+ }
+ }
+ trace(msg) {
+ if (this.#level < severity.DEBUG) {
+ this.#log(msg, severity.TRACE);
+ }
+ }
+ #bar(title, context, items) {
+ const collection = this.#collection;
+ if (collection) {
+ collection.items.push({
+ context,
+ title,
+ items: items?.map((item)=>typeof item === "string" ? {
+ title: item
+ } : item)
+ });
+ }
+ }
+}
+export const log = new Logger(level);
+const withValue = new Set();
+/**
+ * Log a message only while the condition is false.
+ * This is useful to avoid logging an error message in a update
+ * where the number of pages to process may be reduced.
+ */ export function warnUntil(message, condition) {
+ if (withValue.has(message)) {
+ return !!condition;
+ }
+ if (condition) {
+ withValue.add(message);
+ return true;
+ }
+ log.warn(message);
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9sb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4vZW52LnRzXCI7XG5pbXBvcnQge1xuICBib2xkLFxuICBicmlnaHRHcmVlbixcbiAgY3lhbixcbiAgZ3JheSxcbiAgaXRhbGljLFxuICByZWQsXG4gIHN0cmlrZXRocm91Z2gsXG4gIHllbGxvdyxcbn0gZnJvbSBcIi4uLy4uL2RlcHMvY29sb3JzLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbiwgSXRlbSB9IGZyb20gXCIuLi8uLi9kZXBzL2RlYnVnYmFyLnRzXCI7XG5cbmNvbnN0IHNldmVyaXR5ID0ge1xuICBUUkFDRTogMSxcbiAgREVCVUc6IDUsXG4gIElORk86IDksXG4gIFdBUk46IDEzLFxuICBFUlJPUjogMTcsXG4gIEZBVEFMOiAyMSxcbn07XG5cbnR5cGUgTGV2ZWxOYW1lID0ga2V5b2YgdHlwZW9mIHNldmVyaXR5O1xuXG4vLyBHZXQgdGhlIGxvZyBsZXZlbCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVU1FX0xPR1NcbmNvbnN0IGxldmVsID0gZW52PExldmVsTmFtZT4oXCJMVU1FX0xPR1NcIik/LnRvVXBwZXJDYXNlKCkgYXNcbiAgfCBMZXZlbE5hbWVcbiAgfCB1bmRlZmluZWQgPz8gXCJJTkZPXCI7XG5cbmNvbnN0IENPTE9SX1RBR19SRUcgPSAvPChcXHcrKT4oW148XSspPFxcL1xcMT4vZztcblxuY29uc3QgbG9nRm9ybWF0czogUmVjb3JkPHN0cmluZywgKHN0cjogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICBjeWFuLFxuICBDeWFuOiAoc3RyOiBzdHJpbmcpID0+IGJvbGQoY3lhbihzdHIpKSxcbiAgcmVkLFxuICBSZWQ6IChzdHI6IHN0cmluZykgPT4gYm9sZChyZWQoc3RyKSksXG4gIGdyYXksXG4gIGNvZGU6IGdyYXksXG4gIEdyYXk6IChzdHI6IHN0cmluZykgPT4gYm9sZChncmF5KHN0cikpLFxuICBncmVlbjogYnJpZ2h0R3JlZW4sXG4gIEdyZWVuOiAoc3RyOiBzdHJpbmcpID0+IGJvbGQoYnJpZ2h0R3JlZW4oc3RyKSksXG4gIHllbGxvdzogeWVsbG93LFxuICBZZWxsb3c6IChzdHI6IHN0cmluZykgPT4gYm9sZCh5ZWxsb3coc3RyKSksXG4gIGRlbDogKHN0cjogc3RyaW5nKSA9PiBzdHJpa2V0aHJvdWdoKGdyYXkoc3RyKSksXG4gIGVtOiBpdGFsaWMsXG4gIHN0cm9uZzogYm9sZCxcbn07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgZGVmYXVsdCBsb2dnZXIuIEl0IHdpbGwgb3V0cHV0IGNvbG9yIGNvZGVkIGxvZyBtZXNzYWdlcyB0byB0aGVcbiAqIGNvbnNvbGUgdmlhIGBjb25zb2xlLmxvZygpYC5cbiAqL1xuY2xhc3MgTG9nZ2VyIHtcbiAgI2xldmVsOiBudW1iZXI7XG4gICNjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGxldmVsOiBMZXZlbE5hbWUpIHtcbiAgICB0aGlzLiNsZXZlbCA9IHNldmVyaXR5W2xldmVsXTtcbiAgfVxuXG4gIHNldCBjb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbGxlY3Rpb24pIHtcbiAgICB0aGlzLiNjb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgfVxuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNsZXZlbDtcbiAgfVxuXG4gICNsb2cobXNnOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobGV2ZWwgPj0gc2V2ZXJpdHkuRkFUQUwpIHtcbiAgICAgIG1zZyA9IGA8UmVkPkZBVEFMPC9SZWQ+ICR7bXNnfWA7XG4gICAgfSBlbHNlIGlmIChsZXZlbCA+PSBzZXZlcml0eS5FUlJPUikge1xuICAgICAgbXNnID0gYDxyZWQ+RVJST1I8L3JlZD4gJHttc2d9YDtcbiAgICB9IGVsc2UgaWYgKGxldmVsID49IHNldmVyaXR5LldBUk4pIHtcbiAgICAgIG1zZyA9IGA8eWVsbG93PldBUk48L3llbGxvdz4gJHttc2d9YDtcbiAgICB9XG5cbiAgICBtc2cgPSBtc2cucmVwbGFjZUFsbChcbiAgICAgIENPTE9SX1RBR19SRUcsXG4gICAgICAoYWxsLCBuYW1lLCBjb250ZW50KSA9PiBsb2dGb3JtYXRzW25hbWVdPy4oY29udGVudCkgPz8gYWxsLFxuICAgICk7XG5cbiAgICBpZiAobGV2ZWwgPj0gc2V2ZXJpdHkuRVJST1IpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgfVxuXG4gICAgaWYgKGxldmVsID49IHNldmVyaXR5LldBUk4pIHtcbiAgICAgIHJldHVybiBjb25zb2xlLndhcm4obXNnKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhtc2cpO1xuICB9XG5cbiAgZmF0YWwobXNnOiBzdHJpbmcsIGl0ZW1zPzogc3RyaW5nW10gfCBJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLiNiYXIobXNnLCBcImZhdGFsXCIsIGl0ZW1zKTtcbiAgICB0aGlzLiNsb2cobXNnLCBzZXZlcml0eS5GQVRBTCk7XG4gIH1cblxuICBlcnJvcihtc2c6IHN0cmluZywgaXRlbXM/OiBzdHJpbmdbXSB8IEl0ZW1bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNsZXZlbCA8IHNldmVyaXR5LkZBVEFMKSB7XG4gICAgICB0aGlzLiNiYXIobXNnLCBcImVycm9yXCIsIGl0ZW1zKTtcbiAgICAgIHRoaXMuI2xvZyhtc2csIHNldmVyaXR5LkVSUk9SKTtcbiAgICB9XG4gIH1cblxuICB3YXJuKG1zZzogc3RyaW5nLCBpdGVtcz86IHN0cmluZ1tdIHwgSXRlbVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2xldmVsIDwgc2V2ZXJpdHkuRVJST1IpIHtcbiAgICAgIHRoaXMuI2Jhcihtc2csIFwid2FyblwiLCBpdGVtcyk7XG4gICAgICB0aGlzLiNsb2cobXNnLCBzZXZlcml0eS5XQVJOKTtcbiAgICB9XG4gIH1cblxuICBpbmZvKG1zZzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2xldmVsIDwgc2V2ZXJpdHkuV0FSTikge1xuICAgICAgdGhpcy4jbG9nKG1zZywgc2V2ZXJpdHkuSU5GTyk7XG4gICAgfVxuICB9XG5cbiAgZGVidWcobXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbGV2ZWwgPCBzZXZlcml0eS5JTkZPKSB7XG4gICAgICB0aGlzLiNsb2cobXNnLCBzZXZlcml0eS5ERUJVRyk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2UobXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbGV2ZWwgPCBzZXZlcml0eS5ERUJVRykge1xuICAgICAgdGhpcy4jbG9nKG1zZywgc2V2ZXJpdHkuVFJBQ0UpO1xuICAgIH1cbiAgfVxuXG4gICNiYXIodGl0bGU6IHN0cmluZywgY29udGV4dD86IHN0cmluZywgaXRlbXM/OiBzdHJpbmdbXSB8IEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLiNjb2xsZWN0aW9uO1xuXG4gICAgaWYgKGNvbGxlY3Rpb24pIHtcbiAgICAgIGNvbGxlY3Rpb24uaXRlbXMucHVzaCh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBpdGVtczogaXRlbXM/Lm1hcCgoaXRlbSkgPT5cbiAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IHsgdGl0bGU6IGl0ZW0gfSA6IGl0ZW1cbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9nID0gbmV3IExvZ2dlcihsZXZlbCk7XG5cbmNvbnN0IHdpdGhWYWx1ZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuLyoqXG4gKiBMb2cgYSBtZXNzYWdlIG9ubHkgd2hpbGUgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZS5cbiAqIFRoaXMgaXMgdXNlZnVsIHRvIGF2b2lkIGxvZ2dpbmcgYW4gZXJyb3IgbWVzc2FnZSBpbiBhIHVwZGF0ZVxuICogd2hlcmUgdGhlIG51bWJlciBvZiBwYWdlcyB0byBwcm9jZXNzIG1heSBiZSByZWR1Y2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FyblVudGlsKG1lc3NhZ2U6IHN0cmluZywgY29uZGl0aW9uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh3aXRoVmFsdWUuaGFzKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuICEhY29uZGl0aW9uO1xuICB9XG4gIGlmIChjb25kaXRpb24pIHtcbiAgICB3aXRoVmFsdWUuYWRkKG1lc3NhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxvZy53YXJuKG1lc3NhZ2UpO1xuICByZXR1cm4gZmFsc2U7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxHQUFHLFFBQVEsV0FBVztBQUMvQixTQUNFLElBQUksRUFDSixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sR0FBRyxFQUNILGFBQWEsRUFDYixNQUFNLFFBQ0QsdUJBQXVCO0FBSTlCLE1BQU0sV0FBVztFQUNmLE9BQU87RUFDUCxPQUFPO0VBQ1AsTUFBTTtFQUNOLE1BQU07RUFDTixPQUFPO0VBQ1AsT0FBTztBQUNUO0FBSUEsNERBQTREO0FBQzVELE1BQU0sUUFBUSxJQUFlLGNBQWMsaUJBRTFCO0FBRWpCLE1BQU0sZ0JBQWdCO0FBRXRCLE1BQU0sYUFBc0Q7RUFDMUQ7RUFDQSxNQUFNLENBQUMsTUFBZ0IsS0FBSyxLQUFLO0VBQ2pDO0VBQ0EsS0FBSyxDQUFDLE1BQWdCLEtBQUssSUFBSTtFQUMvQjtFQUNBLE1BQU07RUFDTixNQUFNLENBQUMsTUFBZ0IsS0FBSyxLQUFLO0VBQ2pDLE9BQU87RUFDUCxPQUFPLENBQUMsTUFBZ0IsS0FBSyxZQUFZO0VBQ3pDLFFBQVE7RUFDUixRQUFRLENBQUMsTUFBZ0IsS0FBSyxPQUFPO0VBQ3JDLEtBQUssQ0FBQyxNQUFnQixjQUFjLEtBQUs7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
+// denoCacheMetadata=14134521812167614820,3398897685729295947 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4be9cb631cde86b7757ecc3603b33f01eae85c5790148f8e7d302170a8953848.js b/vendor/gen/https/deno.land/4be9cb631cde86b7757ecc3603b33f01eae85c5790148f8e7d302170a8953848.js
new file mode 100644
index 0000000..ca8ba19
--- /dev/null
+++ b/vendor/gen/https/deno.land/4be9cb631cde86b7757ecc3603b33f01eae85c5790148f8e7d302170a8953848.js
@@ -0,0 +1,26 @@
+import yamlLoader from "../core/loaders/yaml.ts";
+import { merge } from "../core/utils/object.ts";
+// Default options
+export const defaults = {
+ extensions: [
+ ".yaml",
+ ".yml"
+ ]
+};
+/**
+ * A plugin to load YAML data files and pages
+ * Installed by default
+ * @see https://lume.land/plugins/yaml/
+ */ export function yaml(userOptions) {
+ const options = merge(defaults, userOptions);
+ return (site)=>{
+ site.loadData(options.extensions, yamlLoader);
+ site.loadPages(options.extensions, {
+ loader: yamlLoader,
+ pageSubExtension: options.pageSubExtension
+ });
+ };
+}
+export default yaml;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy95YW1sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB5YW1sTG9hZGVyIGZyb20gXCIuLi9jb3JlL2xvYWRlcnMveWFtbC50c1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi4vY29yZS91dGlscy9vYmplY3QudHNcIjtcblxuaW1wb3J0IHR5cGUgU2l0ZSBmcm9tIFwiLi4vY29yZS9zaXRlLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBGaWxlIGV4dGVuc2lvbnMgdG8gbG9hZCAqL1xuICBleHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIE9wdGlvbmFsIHN1Yi1leHRlbnNpb24gZm9yIHBhZ2UgZmlsZXMgKi9cbiAgcGFnZVN1YkV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuLy8gRGVmYXVsdCBvcHRpb25zXG5leHBvcnQgY29uc3QgZGVmYXVsdHM6IE9wdGlvbnMgPSB7XG4gIGV4dGVuc2lvbnM6IFtcIi55YW1sXCIsIFwiLnltbFwiXSxcbn07XG5cbi8qKlxuICogQSBwbHVnaW4gdG8gbG9hZCBZQU1MIGRhdGEgZmlsZXMgYW5kIHBhZ2VzXG4gKiBJbnN0YWxsZWQgYnkgZGVmYXVsdFxuICogQHNlZSBodHRwczovL2x1bWUubGFuZC9wbHVnaW5zL3lhbWwvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB5YW1sKHVzZXJPcHRpb25zPzogT3B0aW9ucykge1xuICBjb25zdCBvcHRpb25zID0gbWVyZ2UoZGVmYXVsdHMsIHVzZXJPcHRpb25zKTtcblxuICByZXR1cm4gKHNpdGU6IFNpdGUpID0+IHtcbiAgICBzaXRlLmxvYWREYXRhKG9wdGlvbnMuZXh0ZW5zaW9ucywgeWFtbExvYWRlcik7XG4gICAgc2l0ZS5sb2FkUGFnZXMob3B0aW9ucy5leHRlbnNpb25zLCB7XG4gICAgICBsb2FkZXI6IHlhbWxMb2FkZXIsXG4gICAgICBwYWdlU3ViRXh0ZW5zaW9uOiBvcHRpb25zLnBhZ2VTdWJFeHRlbnNpb24sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHlhbWw7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQkFBZ0IsMEJBQTBCO0FBQ2pELFNBQVMsS0FBSyxRQUFRLDBCQUEwQjtBQVloRCxrQkFBa0I7QUFDbEIsT0FBTyxNQUFNLFdBQW9CO0VBQy9CLFlBQVk7SUFBQztJQUFTO0dBQU87QUFDL0IsRUFBRTtBQUVGOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVMsS0FBSyxXQUFxQjtFQUN4QyxNQUFNLFVBQVUsTUFBTSxVQUFVO0VBRWhDLE9BQU8sQ0FBQztJQUNOLEtBQUssUUFBUSxDQUFDLFFBQVEsVUFBVSxFQUFFO0lBQ2xDLEtBQUssU0FBUyxDQUFDLFFBQVEsVUFBVSxFQUFFO01BQ2pDLFFBQVE7TUFDUixrQkFBa0IsUUFBUSxnQkFBZ0I7SUFDNUM7RUFDRjtBQUNGO0FBRUEsZUFBZSxLQUFLIn0=
+// denoCacheMetadata=6763049573503005894,8846007188765936040 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4c3a319d1ee41f5d5c8b2641ebb010f5317ef20a6302108732d7ce6cc5b20bbe.js b/vendor/gen/https/deno.land/4c3a319d1ee41f5d5c8b2641ebb010f5317ef20a6302108732d7ce6cc5b20bbe.js
new file mode 100644
index 0000000..93d511d
--- /dev/null
+++ b/vendor/gen/https/deno.land/4c3a319d1ee41f5d5c8b2641ebb010f5317ef20a6302108732d7ce6cc5b20bbe.js
@@ -0,0 +1,130 @@
+import { GenericPrompt } from "./_generic_prompt.ts";
+import { GenericSuggestions } from "./_generic_suggestions.ts";
+import { brightBlue, dim, normalize, underline, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+/** List prompt representation. */ export class List extends GenericSuggestions {
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ if (typeof options === "string") {
+ options = {
+ message: options
+ };
+ }
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ listPointer: brightBlue(Figures.POINTER),
+ maxRows: 8,
+ separator: ",",
+ minLength: 0,
+ maxLength: Infinity,
+ minTags: 0,
+ maxTags: Infinity,
+ ...options
+ }).prompt();
+ }
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ input() {
+ const oldInput = this.inputValue;
+ const tags = this.getTags(oldInput);
+ const separator = this.settings.separator + " ";
+ if (this.settings.files && tags.length > 1) {
+ tags[tags.length - 2] = normalize(tags[tags.length - 2]);
+ }
+ this.inputValue = tags.join(separator);
+ const diff = oldInput.length - this.inputValue.length;
+ this.inputIndex -= diff;
+ this.cursor.x -= diff;
+ return tags.map((val)=>underline(val)).join(separator) + dim(this.getSuggestion());
+ }
+ getTags(value = this.inputValue) {
+ return value.trim().split(this.regexp());
+ }
+ /** Create list regex.*/ regexp() {
+ return new RegExp(this.settings.separator === " " ? ` +` : ` *${this.settings.separator} *`);
+ }
+ success(value) {
+ this.saveSuggestions(...value);
+ return super.success(value);
+ }
+ /** Get input value. */ getValue() {
+ // Remove trailing comma and spaces.
+ const input = this.inputValue.replace(/,+\s*$/, "");
+ if (!this.settings.files) {
+ return input;
+ }
+ return this.getTags(input).map(normalize).join(this.settings.separator + " ");
+ }
+ getCurrentInputValue() {
+ return this.getTags().pop() ?? "";
+ }
+ /** Add char. */ addChar(char) {
+ switch(char){
+ case this.settings.separator:
+ if (this.inputValue.length && this.inputValue.trim().slice(-1) !== this.settings.separator) {
+ super.addChar(char);
+ }
+ this.suggestionsIndex = -1;
+ this.suggestionsOffset = 0;
+ break;
+ default:
+ super.addChar(char);
+ }
+ }
+ /** Delete char left. */ deleteChar() {
+ if (this.inputValue[this.inputIndex - 1] === " ") {
+ super.deleteChar();
+ }
+ super.deleteChar();
+ }
+ async complete() {
+ const tags = this.getTags().slice(0, -1);
+ tags.push(await super.complete());
+ return tags.join(this.settings.separator + " ");
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ if (typeof value !== "string") {
+ return false;
+ }
+ const values = this.transform(value);
+ for (const val of values){
+ if (val.length < this.settings.minLength) {
+ return `Value must be longer than ${this.settings.minLength} but has a length of ${val.length}.`;
+ }
+ if (val.length > this.settings.maxLength) {
+ return `Value can't be longer than ${this.settings.maxLength} but has a length of ${val.length}.`;
+ }
+ }
+ if (values.length < this.settings.minTags) {
+ return `The minimum number of tags is ${this.settings.minTags} but got ${values.length}.`;
+ }
+ if (values.length > this.settings.maxTags) {
+ return `The maximum number of tags is ${this.settings.maxTags} but got ${values.length}.`;
+ }
+ return true;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ return this.getTags(value).filter((val)=>val !== "");
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return value.join(`, `);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L2xpc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJpY1Byb21wdCB9IGZyb20gXCIuL19nZW5lcmljX3Byb21wdC50c1wiO1xuaW1wb3J0IHtcbiAgR2VuZXJpY1N1Z2dlc3Rpb25zLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNLZXlzLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNPcHRpb25zLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNTZXR0aW5ncyxcbn0gZnJvbSBcIi4vX2dlbmVyaWNfc3VnZ2VzdGlvbnMudHNcIjtcbmltcG9ydCB7IGJyaWdodEJsdWUsIGRpbSwgbm9ybWFsaXplLCB1bmRlcmxpbmUsIHllbGxvdyB9IGZyb20gXCIuL2RlcHMudHNcIjtcbmltcG9ydCB7IEZpZ3VyZXMgfSBmcm9tIFwiLi9maWd1cmVzLnRzXCI7XG5cbi8qKiBMaXN0IGtleSBvcHRpb25zLiAqL1xuZXhwb3J0IHR5cGUgTGlzdEtleXMgPSBHZW5lcmljU3VnZ2VzdGlvbnNLZXlzO1xuXG4vKiogTGlzdCBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE9wdGlvbnNcbiAgZXh0ZW5kcyBHZW5lcmljU3VnZ2VzdGlvbnNPcHRpb25zPHN0cmluZ1tdLCBzdHJpbmc+IHtcbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluVGFncz86IG51bWJlcjtcbiAgbWF4VGFncz86IG51bWJlcjtcbiAga2V5cz86IExpc3RLZXlzO1xufVxuXG4vKiogTGlzdCBwcm9tcHQgc2V0dGluZ3MuICovXG5pbnRlcmZhY2UgTGlzdFNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY1N1Z2dlc3Rpb25zU2V0dGluZ3M8c3RyaW5nW10sIHN0cmluZz4ge1xuICBzZXBhcmF0b3I6IHN0cmluZztcbiAgbWluTGVuZ3RoOiBudW1iZXI7XG4gIG1heExlbmd0aDogbnVtYmVyO1xuICBtaW5UYWdzOiBudW1iZXI7XG4gIG1heFRhZ3M6IG51bWJlcjtcbiAga2V5cz86IExpc3RLZXlzO1xufVxuXG4vKiogTGlzdCBwcm9tcHQgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIEdlbmVyaWNTdWdnZXN0aW9uczxzdHJpbmdbXSwgc3RyaW5nLCBMaXN0U2V0dGluZ3M+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHByb21wdCBhbmQgc2hvdyBjdXJzb3Igb24gZW5kLiAqL1xuICBwdWJsaWMgc3RhdGljIHByb21wdChvcHRpb25zOiBzdHJpbmcgfCBMaXN0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB7IG1lc3NhZ2U6IG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgcG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVJfU01BTEwpLFxuICAgICAgcHJlZml4OiB5ZWxsb3coXCI/IFwiKSxcbiAgICAgIGluZGVudDogXCIgXCIsXG4gICAgICBsaXN0UG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVIpLFxuICAgICAgbWF4Um93czogOCxcbiAgICAgIHNlcGFyYXRvcjogXCIsXCIsXG4gICAgICBtaW5MZW5ndGg6IDAsXG4gICAgICBtYXhMZW5ndGg6IEluZmluaXR5LFxuICAgICAgbWluVGFnczogMCxcbiAgICAgIG1heFRhZ3M6IEluZmluaXR5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KS5wcm9tcHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3QgcHJvbXB0IHZhbHVlLiBDYW4gYmUgdXNlZCBmb3IgdW5pdCB0ZXN0cyBvciBwcmUgc2VsZWN0aW9ucy5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbmplY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIEdlbmVyaWNQcm9tcHQuaW5qZWN0KHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnB1dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9sZElucHV0OiBzdHJpbmcgPSB0aGlzLmlucHV0VmFsdWU7XG4gICAgY29uc3QgdGFnczogc3RyaW5nW10gPSB0aGlzLmdldFRhZ3Mob2xkSW5wdXQpO1xuICAgIGNvbnN0IHNlcGFyYXRvcjogc3RyaW5nID0gdGhpcy5zZXR0aW5ncy5zZXBhcmF0b3IgKyBcIiBcIjtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmZpbGVzICYmIHRhZ3MubGVuZ3RoID4gMSkge1xuICAgICAgdGFnc1t0YWdzLmxlbmd0aCAtIDJdID0gbm9ybWFsaXplKHRhZ3NbdGFncy5sZW5ndGggLSAyXSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGFncy5qb2luKHNlcGFyYXRvcik7XG5cbiAgICBjb25zdCBkaWZmID0gb2xkSW5wdXQubGVuZ3RoIC0gdGhpcy5pbnB1dFZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLmlucHV0SW5kZXggLT0gZGlmZjtcbiAgICB0aGlzLmN1cnNvci54IC09IGRpZmY7XG5cbiAgICByZXR1cm4gdGFnc1xuICAgICAgLm1hcCgodmFsOiBzdHJpbmcpID0+IHVuZGVybGluZSh2YWwpKVxuICAgICAgLmpvaW4oc2VwYXJhdG9yKSArXG4gICAgICBkaW0odGhpcy5nZXRTdWdnZXN0aW9uKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRhZ3ModmFsdWU6IHN0cmluZyA9IHRoaXMuaW5wdXRWYWx1ZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB2YWx1ZS50cmltKCkuc3BsaXQodGhpcy5yZWdleHAoKSk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGxpc3QgcmVnZXguKi9cbiAgcHJvdGVjdGVkIHJlZ2V4cCgpOiBSZWdFeHAge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgdGhpcy5zZXR0aW5ncy5zZXBhcmF0b3IgPT09IFwiIFwiID8gYCArYCA6IGAgKiR7dGhpcy5zZXR0aW5ncy5zZXBhcmF0b3J9ICpgLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VjY2Vzcyh2YWx1ZTogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHRoaXMuc2F2ZVN1Z2dlc3Rpb25zKC4uLnZhbHVlKTtcbiAgICByZXR1cm4gc3VwZXIuc3VjY2Vzcyh2YWx1ZSk7XG4gIH1cblxuICAvKiogR2V0IGlucHV0IHZhbHVlLiAqL1xuICBwcm90ZWN0ZWQgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlcy5cbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRWYWx1ZS5yZXBsYWNlKC8sK1xccyokLywgXCJcIik7XG5cbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZmlsZXMpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUYWdzKGlucHV0KVxuICAgICAgLm1hcChub3JtYWxpemUpXG4gICAgICAuam9pbih0aGlzLnNldHRpbmdzLnNlcGFyYXRvciArIFwiIFwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDdXJyZW50SW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRhZ3MoKS5wb3AoKSA/PyBcIlwiO1xuICB9XG5cbiAgLyoqIEFkZCBjaGFyLiAqL1xuICBwcm90ZWN0ZWQgYWRkQ2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgIGNhc2UgdGhpcy5zZXR0aW5ncy5zZXBhcmF0b3I6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUubGVuZ3RoICYmXG4gICAgICAgICAgdGhpcy5pbnB1dFZhbHVlLnRyaW0oKS5zbGljZSgtMSkgIT09IHRoaXMuc2V0dGluZ3Muc2VwYXJhdG9yXG4gICAgICAgICkge1xuICAgICAgICAgIHN1cGVyLmFkZENoYXIoY2hhcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0luZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQgPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHN1cGVyLmFkZENoYXIoY2hhcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGV0ZSBjaGFyIGxlZnQuICovXG4gIHByb3RlY3RlZCBkZWxldGVDaGFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWVbdGhpcy5pbnB1dEluZGV4IC0gMV0gPT09IFwiIFwiKSB7XG4gICAgICBzdXBlci5kZWxldGVDaGFyKCk7XG4gICAgfVxuICAgIHN1cGVyLmRlbGV0ZUNoYXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wbGV0ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldFRhZ3MoKS5zbGljZSgwLCAtMSk7XG4gICAgdGFncy5wdXNoKGF3YWl0IHN1cGVyLmNvbXBsZXRlKCkpO1xuICAgIHJldHVybiB0YWdzLmpvaW4odGhpcy5zZXR0aW5ncy5zZXBhcmF0b3IgKyBcIiBcIik7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgaW5wdXQgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBVc2VyIGlucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3IgZXJyb3IgbWVzc2FnZSBvbiBlcnJvci5cbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB8IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudHJhbnNmb3JtKHZhbHVlKTtcblxuICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbC5sZW5ndGggPCB0aGlzLnNldHRpbmdzLm1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYFZhbHVlIG11c3QgYmUgbG9uZ2VyIHRoYW4gJHt0aGlzLnNldHRpbmdzLm1pbkxlbmd0aH0gYnV0IGhhcyBhIGxlbmd0aCBvZiAke3ZhbC5sZW5ndGh9LmA7XG4gICAgICB9XG4gICAgICBpZiAodmFsLmxlbmd0aCA+IHRoaXMuc2V0dGluZ3MubWF4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBgVmFsdWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gJHt0aGlzLnNldHRpbmdzLm1heExlbmd0aH0gYnV0IGhhcyBhIGxlbmd0aCBvZiAke3ZhbC5sZW5ndGh9LmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPCB0aGlzLnNldHRpbmdzLm1pblRhZ3MpIHtcbiAgICAgIHJldHVybiBgVGhlIG1pbmltdW0gbnVtYmVyIG9mIHRhZ3MgaXMgJHt0aGlzLnNldHRpbmdzLm1pblRhZ3N9IGJ1dCBnb3QgJHt2YWx1ZXMubGVuZ3RofS5gO1xuICAgIH1cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IHRoaXMuc2V0dGluZ3MubWF4VGFncykge1xuICAgICAgcmV0dXJuIGBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFncyBpcyAke3RoaXMuc2V0dGluZ3MubWF4VGFnc30gYnV0IGdvdCAke3ZhbHVlcy5sZW5ndGh9LmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGlucHV0IHZhbHVlIHRvIG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUYWdzKHZhbHVlKS5maWx0ZXIoKHZhbCkgPT4gdmFsICE9PSBcIlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdCh2YWx1ZTogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS5qb2luKGAsIGApO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxhQUFhLFFBQVEsdUJBQXVCO0FBQ3JELFNBQ0Usa0JBQWtCLFFBSWIsNEJBQTRCO0FBQ25DLFNBQVMsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxZQUFZO0FBQzFFLFNBQVMsT0FBTyxRQUFRLGVBQWU7QUEwQnZDLGdDQUFnQyxHQUNoQyxPQUFPLE1BQU0sYUFBYTtFQUN4QiwrQ0FBK0MsR0FDL0MsT0FBYyxPQUFPLE9BQTZCLEVBQXFCO0lBQ3JFLElBQUksT0FBTyxZQUFZLFVBQVU7TUFDL0IsVUFBVTtRQUFFLFNBQVM7TUFBUTtJQUMvQjtJQUVBLE9BQU8sSUFBSSxJQUFJLENBQUM7TUFDZCxTQUFTLFdBQVcsUUFBUSxhQUFhO01BQ3pDLFFBQVEsT0FBTztNQUNmLFFBQVE7TUFDUixhQUFhLFdBQVcsUUFBUSxPQUFPO01BQ3ZDLFNBQVM7TUFDVCxXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7TUFDWCxTQUFTO01BQ1QsU0FBUztNQUNULEdBQUcsT0FBTztJQUNaLEdBQUcsTUFBTTtFQUNYO0VBRUE7OztHQUdDLEdBQ0QsT0FBYyxPQUFPLEtBQWEsRUFBUTtJQUN4QyxjQUFjLE1BQU0sQ0FBQztFQUN2QjtFQUVVLFFBQWdCO0lBQ3hCLE1BQU0sV0FBbUIsSUFBSSxDQUFDLFVBQVU7SUFDeEMsTUFBTSxPQUFpQixJQUFJLENBQUMsT0FB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
+// denoCacheMetadata=7590328350737927492,14813455011803553111 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4c9f25e769e1a9c9f2f8c94b39029dcc87c86a632b003d42777b479230b4a94b.js b/vendor/gen/https/deno.land/4c9f25e769e1a9c9f2f8c94b39029dcc87c86a632b003d42777b479230b4a94b.js
new file mode 100644
index 0000000..858384b
--- /dev/null
+++ b/vendor/gen/https/deno.land/4c9f25e769e1a9c9f2f8c94b39029dcc87c86a632b003d42777b479230b4a94b.js
@@ -0,0 +1,233 @@
+import { Node, nodesAndTextNodes, NodeType } from "./node.ts";
+import UtilTypes from "./utils-types.ts";
+export const upperCaseCharRe = /[A-Z]/;
+export const lowerCaseCharRe = /[a-z]/;
+/**
+ * Convert JS property name to dataset attribute name without
+ * validation
+ */ export function getDatasetHtmlAttrName(name) {
+ let attributeName = "data-";
+ for (const char of name){
+ if (upperCaseCharRe.test(char)) {
+ attributeName += "-" + char.toLowerCase();
+ } else {
+ attributeName += char;
+ }
+ }
+ return attributeName;
+}
+export function getDatasetJavascriptName(name) {
+ let javascriptName = "";
+ let prevChar = "";
+ for (const char of name.slice("data-".length)){
+ if (prevChar === "-" && lowerCaseCharRe.test(char)) {
+ javascriptName += char.toUpperCase();
+ prevChar = "";
+ } else {
+ javascriptName += prevChar;
+ prevChar = char;
+ }
+ }
+ return javascriptName + prevChar;
+}
+export function getElementsByClassName(element, classNames, search) {
+ for (const child of element.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ let matchesCount = 0;
+ for (const singleClassName of classNames){
+ if (child.classList.contains(singleClassName)) {
+ matchesCount++;
+ }
+ }
+ // ensure that all class names are present
+ if (matchesCount === classNames.length) {
+ search.push(child);
+ }
+ getElementsByClassName(child, classNames, search);
+ }
+ }
+ return search;
+}
+function getOuterHTMLOpeningTag(parentElement) {
+ return "<" + parentElement.localName + getElementAttributesString(parentElement) + ">";
+}
+const voidElements = new Set([
+ "area",
+ "base",
+ "br",
+ "col",
+ "embed",
+ "hr",
+ "img",
+ "input",
+ "link",
+ "meta",
+ "param",
+ "source",
+ "track",
+ "wbr"
+]);
+/**
+ * .innerHTML/.outerHTML implementation without recursion to avoid stack
+ * overflows
+ */ export function getOuterOrInnerHtml(parentElement, asOuterHtml) {
+ let outerHTMLOpeningTag = "";
+ let outerHTMLClosingTag = "";
+ let innerHTML = "";
+ if (asOuterHtml) {
+ outerHTMLOpeningTag = getOuterHTMLOpeningTag(parentElement);
+ outerHTMLClosingTag = `</${parentElement.localName}>`;
+ if (voidElements.has(parentElement.localName)) {
+ return outerHTMLOpeningTag;
+ }
+ }
+ const initialChildNodes = parentElement.localName === "template" ? parentElement.content.childNodes : parentElement.childNodes;
+ const childNodeDepth = [
+ initialChildNodes
+ ];
+ const indexDepth = [
+ 0
+ ];
+ const closingTagDepth = [
+ outerHTMLClosingTag
+ ];
+ let depth = 0;
+ depthLoop: while(depth > -1){
+ const child = childNodeDepth[depth][indexDepth[depth]];
+ if (child) {
+ switch(child.nodeType){
+ case NodeType.ELEMENT_NODE:
+ {
+ innerHTML += getOuterHTMLOpeningTag(child);
+ const childLocalName = child.localName;
+ // Void elements don't have a closing tag nor print innerHTML
+ if (!voidElements.has(childLocalName)) {
+ if (childLocalName === "template") {
+ childNodeDepth.push(child.content.childNodes);
+ } else {
+ childNodeDepth.push(child.childNodes);
+ }
+ indexDepth.push(0);
+ closingTagDepth.push(`</${childLocalName}>`);
+ depth++;
+ continue depthLoop;
+ }
+ break;
+ }
+ case NodeType.COMMENT_NODE:
+ innerHTML += `<!--${child.data}-->`;
+ break;
+ case NodeType.TEXT_NODE:
+ // Special handling for rawtext-like elements.
+ switch(child.parentNode.localName){
+ case "style":
+ case "script":
+ case "xmp":
+ case "iframe":
+ case "noembed":
+ case "noframes":
+ case "plaintext":
+ {
+ innerHTML += child.data;
+ break;
+ }
+ case "noscript":
+ {
+ innerHTML += child.data;
+ break;
+ }
+ default:
+ {
+ // escaping: https://html.spec.whatwg.org/multipage/parsing.html#escapingString
+ innerHTML += child.data.replace(/&/g, "&amp;").replace(/\xA0/g, "&nbsp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
+ break;
+ }
+ }
+ break;
+ }
+ } else {
+ depth--;
+ indexDepth.pop();
+ childNodeDepth.pop();
+ innerHTML += closingTagDepth.pop();
+ }
+ // Go to next child
+ indexDepth[depth]++;
+ }
+ // If innerHTML is requested then the opening tag should be an empty string
+ return outerHTMLOpeningTag + innerHTML;
+}
+export function getElementAttributesString(element) {
+ let out = "";
+ for (const attribute of element.getAttributeNames()){
+ // attribute names should already all be lower-case
+ out += ` ${attribute}`;
+ // escaping: https://html.spec.whatwg.org/multipage/parsing.html#escapingString
+ out += `="${element.getAttribute(attribute).replace(/&/g, "&amp;").replace(/\xA0/g, "&nbsp;").replace(/"/g, "&quot;")}"`;
+ }
+ return out;
+}
+export function insertBeforeAfter(node, nodes, before) {
+ const parentNode = node.parentNode;
+ const mutator = parentNode._getChildNodesMutator();
+ // Find the previous/next sibling to `node` that isn't in `nodes` before the
+ // nodes in `nodes` are removed from their parents.
+ let viablePrevNextSibling = null;
+ {
+ const difference = before ? -1 : +1;
+ for(let i = mutator.indexOf(node) + difference; 0 <= i && i < parentNode.childNodes.length; i += difference){
+ if (!nodes.includes(parentNode.childNodes[i])) {
+ viablePrevNextSibling = parentNode.childNodes[i];
+ break;
+ }
+ }
+ }
+ nodes = nodesAndTextNodes(nodes, parentNode);
+ let index;
+ if (viablePrevNextSibling) {
+ index = mutator.indexOf(viablePrevNextSibling) + (before ? 1 : 0);
+ } else {
+ index = before ? 0 : parentNode.childNodes.length;
+ }
+ mutator.splice(index, 0, ...nodes);
+}
+export function isDocumentFragment(node) {
+ let obj = node;
+ if (!(obj && typeof obj === "object")) {
+ return false;
+ }
+ while(true){
+ switch(obj.constructor){
+ case UtilTypes.DocumentFragment:
+ return true;
+ case Node:
+ case UtilTypes.Element:
+ return false;
+ // FIXME: We should probably throw here?
+ case Object:
+ case null:
+ case undefined:
+ return false;
+ default:
+ obj = Reflect.getPrototypeOf(obj);
+ }
+ }
+}
+/**
+ * Sets the new parent for the children via _setParent() on all
+ * the child nodes and removes them from the DocumentFragment's
+ * childNode list.
+ *
+ * A helper function for appendChild, etc. It should be called
+ * _after_ the children are already pushed onto the new parent's
+ * childNodes.
+ */ export function moveDocumentFragmentChildren(fragment, newParent) {
+ const childCount = fragment.childNodes.length;
+ for (const child of fragment.childNodes){
+ child._setParent(newParent);
+ }
+ const mutator = fragment._getChildNodesMutator();
+ mutator.splice(0, childCount);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1lbnQsIE5vZGUsIG5vZGVzQW5kVGV4dE5vZGVzLCBOb2RlVHlwZSwgVGV4dCB9IGZyb20gXCIuL25vZGUudHNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZS1saXN0LnRzXCI7XG5pbXBvcnQgVXRpbFR5cGVzIGZyb20gXCIuL3V0aWxzLXR5cGVzLnRzXCI7XG5pbXBvcnQgeyBnZXRMb3dlckNhc2UgfSBmcm9tIFwiLi9zdHJpbmctY2FjaGUudHNcIjtcbmltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgSFRNTFRlbXBsYXRlRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2h0bWwtdGVtcGxhdGUtZWxlbWVudC50c1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudEZyYWdtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZnJhZ21lbnQudHNcIjtcblxuZXhwb3J0IGNvbnN0IHVwcGVyQ2FzZUNoYXJSZSA9IC9bQS1aXS87XG5leHBvcnQgY29uc3QgbG93ZXJDYXNlQ2hhclJlID0gL1thLXpdLztcbi8qKlxuICogQ29udmVydCBKUyBwcm9wZXJ0eSBuYW1lIHRvIGRhdGFzZXQgYXR0cmlidXRlIG5hbWUgd2l0aG91dFxuICogdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YXNldEh0bWxBdHRyTmFtZShuYW1lOiBzdHJpbmcpOiBgZGF0YS0ke3N0cmluZ31gIHtcbiAgbGV0IGF0dHJpYnV0ZU5hbWU6IGBkYXRhLSR7c3RyaW5nfWAgPSBcImRhdGEtXCI7XG4gIGZvciAoY29uc3QgY2hhciBvZiBuYW1lKSB7XG4gICAgaWYgKHVwcGVyQ2FzZUNoYXJSZS50ZXN0KGNoYXIpKSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lICs9IFwiLVwiICsgY2hhci50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lICs9IGNoYXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhc2V0SmF2YXNjcmlwdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGphdmFzY3JpcHROYW1lID0gXCJcIjtcbiAgbGV0IHByZXZDaGFyID0gXCJcIjtcbiAgZm9yIChjb25zdCBjaGFyIG9mIG5hbWUuc2xpY2UoXCJkYXRhLVwiLmxlbmd0aCkpIHtcbiAgICBpZiAocHJldkNoYXIgPT09IFwiLVwiICYmIGxvd2VyQ2FzZUNoYXJSZS50ZXN0KGNoYXIpKSB7XG4gICAgICBqYXZhc2NyaXB0TmFtZSArPSBjaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICBwcmV2Q2hhciA9IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGphdmFzY3JpcHROYW1lICs9IHByZXZDaGFyO1xuICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBqYXZhc2NyaXB0TmFtZSArIHByZXZDaGFyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgZWxlbWVudDogYW55LFxuICBjbGFzc05hbWVzOiBzdHJpbmdbXSxcbiAgc2VhcmNoOiBOb2RlW10sXG4pOiBOb2RlW10ge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGROb2Rlcykge1xuICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBsZXQgbWF0Y2hlc0NvdW50ID0gMDtcblxuICAgICAgZm9yIChjb25zdCBzaW5nbGVDbGFzc05hbWUgb2YgY2xhc3NOYW1lcykge1xuICAgICAgICBpZiAoKGNoaWxkIGFzIEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhzaW5nbGVDbGFzc05hbWUpKSB7XG4gICAgICAgICAgbWF0Y2hlc0NvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZW5zdXJlIHRoYXQgYWxsIGNsYXNzIG5hbWVzIGFyZSBwcmVzZW50XG4gICAgICBpZiAobWF0Y2hlc0NvdW50ID09PSBjbGFzc05hbWVzLmxlbmd0aCkge1xuICAgICAgICBzZWFyY2gucHVzaChjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2hpbGQgYXMgRWxlbWVudCwgY2xhc3NOYW1lcywgc2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VhcmNoO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRlckhUTUxPcGVuaW5nVGFnKHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgcmV0dXJuIFwiPFwiICsgcGFyZW50RWxlbWVudC5sb2NhbE5hbWUgK1xuICAgIGdldEVsZW1lbnRBdHRyaWJ1dGVzU3RyaW5nKHBhcmVudEVsZW1lbnQpICsgXCI+XCI7XG59XG5cbmNvbnN0IHZvaWRFbGVtZW50cyA9IG5ldyBTZXQoW1xuICBcImFyZWFcIixcbiAgXCJiYXNlXCIsXG4gIFwiYnJcIixcbiAgXCJjb2xcIixcbiAgXCJlbWJlZFwiLFxuICBcImhyXCIsXG4gIFwiaW1nXCIsXG4gIFwiaW5wdXRcIixcbiAgXCJsaW5rXCIsXG4gIFwibWV0YVwiLFxuICBcInBhcmFtXCIsXG4gIFwic291cmNlXCIsXG4gIFwidHJhY2tcIixcbiAgXCJ3YnJcIixcbl0pO1xuXG4vKipcbiAqIC5pbm5lckhUTUwvLm91dGVySFRNTCBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJlY3Vyc2lvbiB0byBhdm9pZCBzdGFja1xuICogb3ZlcmZsb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRlck9ySW5uZXJIdG1sKFxuICBwYXJlbnRFbGVtZW50OiBFbGVtZW50LFxuICBhc091dGVySHRtbDogYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIGxldCBvdXRlckhUTUxPcGVuaW5nVGFnID0gXCJcIjtcbiAgbGV0IG91dGVySFRNTENsb3NpbmdUYWcgPSBcIlwiO1xuICBsZXQgaW5uZXJIVE1MID0gXCJcIjtcblxuICBpZiAoYXNPdXRlckh0bWwpIHtcbiAgICBvdXRlckhUTUxPcGVuaW5nVGFnID0gZ2V0T3V0ZXJIVE1MT3BlbmluZ1RhZyhwYXJlbnRFbGVtZW50KTtcbiAgICBvdXRlckhUTUxDbG9zaW5nVGFnID0gYDwvJHtwYXJlbnRFbGVtZW50LmxvY2FsTmFtZX0+YDtcblxuICAgIGlmICh2b2lkRWxlbWVudHMuaGFzKHBhcmVudEVsZW1lbnQubG9jYWxOYW1lKSkge1xuICAgICAgcmV0dXJuIG91dGVySFRNTE9wZW5pbmdUYWc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW5pdGlhbENoaWxkTm9kZXMgPSBwYXJlbnRFbGVtZW50LmxvY2FsTmFtZSA9PT0gXCJ0ZW1wbGF0ZVwiXG4gICAgPyAocGFyZW50RWxlbWVudCBhcyBIVE1MVGVtcGxhdGVFbGVtZW50KS5jb250ZW50LmNoaWxkTm9kZXNcbiAgICA6IHBhcmVudEVsZW1lbnQuY2hpbGROb2RlcztcbiAgY29uc3QgY2hpbGROb2RlRGVwdGggPSBbaW5pdGlhbENoaWxkTm9kZXNdO1xuICBjb25zdCBpbmRleERlcHRoID0gWzBdO1xuICBjb25zdCBjbG9zaW5nVGFnRGVwdGggPSBbb3V0ZXJIVE1MQ2xvc2luZ1RhZ107XG4gIGxldCBkZXB0aCA9IDA7XG5cbiAgZGVwdGhMb29wOlxuICB3aGlsZSAoZGVwdGggPiAtMSkge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGROb2RlRGVwdGhbZGVwdGhdW2luZGV4RGVwdGhbZGVwdGhdXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgc3dpdGNoIChjaGlsZC5ub2RlVHlwZSkge1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICAgIGlubmVySFRNTCArPSBnZXRPdXRlckhUTUxPcGVuaW5nVGFnKGNoaWxkIGFzIEVsZW1lbnQpO1xuICAgICAgICAgIGNvbnN0IGNoaWxkTG9jYWxOYW1lID0gKGNoaWxkIGFzIEVsZW1lbnQpLmxvY2FsTmFtZTtcblxuICAgICAgICAgIC8vIFZvaWQgZWxlbWVudHMgZG9uJ3QgaGF2ZSBhIGNsb3NpbmcgdGFnIG5vciBwcmludCBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoIXZvaWRFbGVtZW50cy5oYXMoY2hpbGRMb2NhbE5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRMb2NhbE5hbWUgPT09IFwidGVtcGxhdGVcIikge1xuICAgICAgICAgICAgICBjaGlsZE5vZGVEZXB0aC5wdXNoKFxuICAgICAgICAgICAgICAgIChjaGlsZCBhcyBIVE1MVGVtcGxhdGVFbGVtZW50KS5jb250ZW50LmNoaWxkTm9kZXMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZE5vZGVEZXB0aC5wdXNoKGNoaWxkLmNoaWxkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXhEZXB0aC5wdXNoKDApO1xuICAgICAgICAgICAgY2xvc2luZ1RhZ0RlcHRoLnB1c2goYDwvJHtjaGlsZExvY2FsTmFtZX0+YCk7XG4gICAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICAgICAgY29udGludWUgZGVwdGhMb29wO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgTm9kZVR5cGUuQ09NTUVOVF9OT0RFOlxuICAgICAgICAgIGlubmVySFRNTCArPSBgPCEtLSR7KGNoaWxkIGFzIENvbW1lbnQpLmRhdGF9LS0+YDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE5vZGVUeXBlLlRFWFRfTk9ERTpcbiAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciByYXd0ZXh0LWxpa2UgZWxlbWVudHMuXG4gICAgICAgICAgc3dpdGNoICgoY2hpbGQucGFyZW50Tm9kZSEgYXMgRWxlbWVudCkubG9jYWxOYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ4bXBcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpZnJhbWVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJub2VtYmVkXCI6XG4gICAgICAgICAgICBjYXNlIFwibm9mcmFtZXNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwbGFpbnRleHRcIjoge1xuICAgICAgICAgICAgICBpbm5lckhUTUwgKz0gKGNoaWxkIGFzIFRleHQpLmRhdGE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFwibm9zY3JpcHRcIjoge1xuICAgICAgICAgICAgICBpbm5lckhUTUwgKz0gKGNoaWxkIGFzIFRleHQpLmRhdGE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgIC8vIGVzY2FwaW5nOiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZXNjYXBpbmdTdHJpbmdcbiAgICAgICAgICAgICAgaW5uZXJIVE1MICs9IChjaGlsZCBhcyBUZXh0KS5kYXRhXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHhBMC9nLCBcIiZuYnNwO1wiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXB0aC0tO1xuXG4gICAgICBpbmRleERlcHRoLnBvcCgpO1xuICAgICAgY2hpbGROb2RlRGVwdGgucG9wKCk7XG4gICAgICBpbm5lckhUTUwgKz0gY2xvc2luZ1RhZ0RlcHRoLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIEdvIHRvIG5leHQgY2hpbGRcbiAgICBpbmRleERlcHRoW2RlcHRoXSsrO1xuICB9XG5cbiAgLy8gSWYgaW5uZXJIVE1MIGlzIHJlcXVlc3RlZCB0aGVuIHRoZSBvcGVuaW5nIHRhZyBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nXG4gIHJldHVybiBvdXRlckhUTUxPcGVuaW5nVGFnICsgaW5uZXJIVE1MO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEF0dHJpYnV0ZXNTdHJpbmcoXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4pOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcbiAgICAvLyBhdHRyaWJ1dGUgbmFtZXMgc2hvdWxkIGFscmVhZHkgYWxsIGJlIGxvd2VyLWNhc2VcbiAgICBvdXQgKz0gYCAke2F0dHJpYnV0ZX1gO1xuXG4gICAgLy8gZXNjYXBpbmc6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNlc2NhcGluZ1N0cmluZ1xuICAgIG91dCArPSBgPVwiJHtcbiAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkhXG4gICAgICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAgICAgLnJlcGxhY2UoL1xceEEwL2csIFwiJm5ic3A7XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuICAgIH1cImA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlQWZ0ZXIoXG4gIG5vZGU6IE5vZGUsXG4gIG5vZGVzOiAoTm9kZSB8IHN0cmluZylbXSxcbiAgYmVmb3JlOiBib29sZWFuLFxuKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICBjb25zdCBtdXRhdG9yID0gcGFyZW50Tm9kZS5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgLy8gRmluZCB0aGUgcHJldmlvdXMvbmV4dCBzaWJsaW5nIHRvIGBub2RlYCB0aGF0IGlzbid0IGluIGBub2Rlc2AgYmVmb3JlIHRoZVxuICAvLyBub2RlcyBpbiBgbm9kZXNgIGFyZSByZW1vdmVkIGZyb20gdGhlaXIgcGFyZW50cy5cbiAgbGV0IHZpYWJsZVByZXZOZXh0U2libGluZzogTm9kZSB8IG51bGwgPSBudWxsO1xuICB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IGJlZm9yZSA/IC0xIDogKzE7XG4gICAgZm9yIChcbiAgICAgIGxldCBpID0gbXV0YXRvci5pbmRleE9mKG5vZGUpICsgZGlmZmVyZW5jZTtcbiAgICAgIDAgPD0gaSAmJiBpIDwgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIGkgKz0gZGlmZmVyZW5jZVxuICAgICkge1xuICAgICAgaWYgKCFub2Rlcy5pbmNsdWRlcyhwYXJlbnROb2RlLmNoaWxkTm9kZXNbaV0pKSB7XG4gICAgICAgIHZpYWJsZVByZXZOZXh0U2libGluZyA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5vZGVzID0gbm9kZXNBbmRUZXh0Tm9kZXMobm9kZXMsIHBhcmVudE5vZGUpO1xuXG4gIGxldCBpbmRleDtcbiAgaWYgKHZpYWJsZVByZXZOZXh0U2libGluZykge1xuICAgIGluZGV4ID0gbXV0YXRvci5pbmRleE9mKHZpYWJsZVByZXZOZXh0U2libGluZykgKyAoYmVmb3JlID8gMSA6IDApO1xuICB9IGVsc2Uge1xuICAgIGluZGV4ID0gYmVmb3JlID8gMCA6IHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7XG4gIH1cbiAgbXV0YXRvci5zcGxpY2UoaW5kZXgsIDAsIC4uLig8Tm9kZVtdPiBub2RlcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEb2N1bWVudEZyYWdtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIERvY3VtZW50RnJhZ21lbnQge1xuICBsZXQgb2JqOiBhbnkgPSBub2RlO1xuXG4gIGlmICghKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChvYmouY29uc3RydWN0b3IpIHtcbiAgICAgIGNhc2UgVXRpbFR5cGVzLkRvY3VtZW50RnJhZ21lbnQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBjYXNlIE5vZGU6XG4gICAgICBjYXNlIFV0aWxUeXBlcy5FbGVtZW50OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGhyb3cgaGVyZT9cblxuICAgICAgY2FzZSBPYmplY3Q6XG4gICAgICBjYXNlIG51bGw6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvYmogPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmV3IHBhcmVudCBmb3IgdGhlIGNoaWxkcmVuIHZpYSBfc2V0UGFyZW50KCkgb24gYWxsXG4gKiB0aGUgY2hpbGQgbm9kZXMgYW5kIHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBEb2N1bWVudEZyYWdtZW50J3NcbiAqIGNoaWxkTm9kZSBsaXN0LlxuICpcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhcHBlbmRDaGlsZCwgZXRjLiBJdCBzaG91bGQgYmUgY2FsbGVkXG4gKiBfYWZ0ZXJfIHRoZSBjaGlsZHJlbiBhcmUgYWxyZWFkeSBwdXNoZWQgb250byB0aGUgbmV3IHBhcmVudCdzXG4gKiBjaGlsZE5vZGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW92ZURvY3VtZW50RnJhZ21lbnRDaGlsZHJlbihcbiAgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gIG5ld1BhcmVudDogTm9kZSxcbikge1xuICBjb25zdCBjaGlsZENvdW50ID0gZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBmcmFnbWVudC5jaGlsZE5vZGVzKSB7XG4gICAgY2hpbGQuX3NldFBhcmVudChuZXdQYXJlbnQpO1xuICB9XG5cbiAgY29uc3QgbXV0YXRvciA9IGZyYWdtZW50Ll9nZXRDaGlsZE5vZGVzTXV0YXRvcigpO1xuICBtdXRhdG9yLnNwbGljZSgwLCBjaGlsZENvdW50KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFrQixJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxRQUFjLFlBQVk7QUFFN0UsT0FBTyxlQUFlLG1CQUFtQjtBQU16QyxPQUFPLE1BQU0sa0JBQWtCLFFBQVE7QUFDdkMsT0FBTyxNQUFNLGtCQUFrQixRQUFRO0FBQ3ZDOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyx1QkFBdUIsSUFBWTtFQUNqRCxJQUFJLGdCQUFrQztFQUN0QyxLQUFLLE1BQU0sUUFBUSxLQUFNO0lBQ3ZCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxPQUFPO01BQzlCLGlCQUFpQixNQUFNLEtBQUssV0FBVztJQUN6QyxPQUFPO01BQ0wsaUJBQWlCO0lBQ25CO0VBQ0Y7RUFFQSxPQUFPO0FBQ1Q7QUFFQSxPQUFPLFNBQVMseUJBQXlCLElBQVk7RUFDbkQsSUFBSSxpQkFBaUI7RUFDckIsSUFBSSxXQUFXO0VBQ2YsS0FBSyxNQUFNLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUSxNQUFNLEVBQUc7SUFDN0MsSUFBSSxhQUFhLE9BQU8sZ0JBQWdCLElBQUksQ0FBQyxPQUFP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
+// denoCacheMetadata=13786385388212573301,450115791470798199 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4d466d8e167bcb9dca15d78611336dacdd6d5f90f914312c29129b67b170cbe4.js b/vendor/gen/https/deno.land/4d466d8e167bcb9dca15d78611336dacdd6d5f90f914312c29129b67b170cbe4.js
new file mode 100644
index 0000000..6015f48
--- /dev/null
+++ b/vendor/gen/https/deno.land/4d466d8e167bcb9dca15d78611336dacdd6d5f90f914312c29129b67b170cbe4.js
@@ -0,0 +1,247 @@
+import { bundleAsync } from "../deps/lightningcss.ts";
+import { build, stop } from "../deps/esbuild.ts";
+import textLoader from "./loaders/text.ts";
+import { posix } from "../deps/path.ts";
+import { log } from "./utils/log.ts";
+/**
+ * Class to load components from the _components folder.
+ */ export class ComponentLoader {
+ /** List of loaders and engines used by extensions */ formats;
+ constructor(options){
+ this.formats = options.formats;
+ }
+ /** Load a directory of components */ async load(dirEntry, data, components) {
+ if (!components) {
+ components = new Map();
+ }
+ for await (const entry of dirEntry.children.values()){
+ if (entry.name.startsWith(".") || entry.name.startsWith("_")) {
+ continue;
+ }
+ if (entry.type === "directory") {
+ const component = await this.#loadComponentFolder(entry, data);
+ if (component) {
+ components.set(component.name.toLowerCase(), component);
+ continue;
+ }
+ const name = entry.name.toLowerCase();
+ const subComponents = components.get(name) || new Map();
+ components.set(name, subComponents);
+ await this.load(entry, data, subComponents);
+ continue;
+ }
+ const component = await this.#loadComponent(entry, data);
+ if (component) {
+ components.set(component.name.toLowerCase(), component);
+ }
+ }
+ return components;
+ }
+ /** Load a component folder (a folder with a comp.* file) */ async #loadComponentFolder(entry, data) {
+ const compEntry = findChild(entry, (entry)=>entry.name.startsWith("comp."));
+ if (!compEntry) {
+ return;
+ }
+ const component = await this.#loadComponent(compEntry, data, entry.name);
+ if (!component) {
+ return;
+ }
+ const assets = new Map();
+ const entryPoints = new Set([
+ "style.css",
+ "script.js",
+ "script.ts"
+ ]);
+ // Find extra files
+ for (const child of entry.children.values()){
+ if (child === compEntry) {
+ continue;
+ }
+ // Load CSS/JS/TS file
+ if (child.type === "file" && entryPoints.has(child.name)) {
+ assets.set(child.path, child);
+ }
+ }
+ for (const [path, content] of assets){
+ component.assets.set(path, content);
+ }
+ return component;
+ }
+ /** Load a component file */ async #loadComponent(entry, dirData, defaultName) {
+ const format = this.formats.search(entry.name);
+ if (!format) {
+ return;
+ }
+ const { loader, engines, ext } = format;
+ if (!loader || !engines || !engines.length) {
+ return;
+ }
+ const rawComponent = await entry.getContent(loader);
+ const { css, js, inheritData, content, ...data } = rawComponent;
+ const name = defaultName ?? entry.name.slice(0, -ext.length);
+ const render = async (props)=>{
+ const currData = inheritData !== false ? {
+ ...dirData,
+ ...data,
+ ...props
+ } : {
+ ...data,
+ ...props
+ };
+ // Unify children and content for interopeability between JSX and other engines
+ currData.children = currData.content = props?.children ?? props?.content;
+ let result = content;
+ for (const engine of engines){
+ result = await engine.render(content, currData, entry.path);
+ }
+ return result;
+ };
+ const assets = new Map();
+ if (css) {
+ assets.set(entry.path + ".css", css);
+ }
+ if (js) {
+ assets.set(entry.path + ".js", js);
+ }
+ return {
+ name,
+ render,
+ assets
+ };
+ }
+}
+function findChild(entry, filter) {
+ for (const child of entry.children.values()){
+ if (child.type === "file" && filter(child)) {
+ return child;
+ }
+ }
+}
+export async function compileCSS(filename, imports, entries) {
+ const mainCode = Array.from(imports.keys()).map((path)=>`@import "${path}";`).join("\n");
+ const { code } = await bundleAsync({
+ filename,
+ sourceMap: false,
+ resolver: {
+ resolve (id, importer) {
+ if (id.startsWith(".")) {
+ id = posix.join(posix.dirname(importer), id);
+ }
+ return id;
+ },
+ async read (filePath) {
+ if (filePath === filename) {
+ return mainCode;
+ }
+ const content = await getEntryContent(imports.get(filePath) || entries.get(filePath));
+ if (!content) {
+ log.error(`[components] File "${filePath}" not found or is empty`);
+ }
+ return content;
+ }
+ }
+ });
+ const decoder = new TextDecoder();
+ return decoder.decode(code);
+}
+export async function compileJS(filename, imports, entries) {
+ const mainCode = Array.from(imports.keys()).map((path)=>`import "${path}";`).join("\n");
+ const { outputFiles } = await build({
+ bundle: true,
+ entryPoints: [
+ filename
+ ],
+ write: false,
+ format: "esm",
+ minify: false,
+ target: "esnext",
+ outfile: filename,
+ plugins: [
+ {
+ name: "components-resolver",
+ setup (build) {
+ build.onResolve({
+ filter: /.*/
+ }, ({ path, importer })=>{
+ if (path.startsWith(".")) {
+ path = posix.join(posix.dirname(importer), path);
+ }
+ if (path === filename || imports.has(path) || entries.has(path)) {
+ return {
+ path,
+ namespace: "fs"
+ };
+ }
+ return {
+ path,
+ external: true
+ };
+ });
+ build.onLoad({
+ filter: /.*/,
+ namespace: "fs"
+ }, async ({ path })=>{
+ const contents = path === filename ? mainCode : await getEntryContent(imports.get(path) || entries.get(path));
+ if (!contents) {
+ log.error(`[components] File "${path}" not found or is empty`);
+ }
+ return {
+ contents,
+ loader: path.endsWith(".ts") ? "ts" : "js"
+ };
+ });
+ }
+ }
+ ]
+ });
+ await stop();
+ const decoder = new TextDecoder();
+ return decoder.decode(outputFiles[0].contents);
+}
+async function getEntryContent(entry) {
+ if (typeof entry === "string") {
+ return entry;
+ }
+ if (entry) {
+ const { content } = await entry.getContent(textLoader);
+ return content || "";
+ }
+ return "";
+}
+/**
+ * Create and returns a proxy to use the components
+ * as comp.name() instead of components.get("name").render()
+ */ export function toProxy(components, extraCode) {
+ const node = {
+ _components: components,
+ _proxies: new Map()
+ };
+ return new Proxy(node, {
+ get: (target, name)=>{
+ if (typeof name !== "string" || name in target) {
+ return;
+ }
+ const key = name.toLowerCase();
+ if (target._proxies.has(key)) {
+ return target._proxies.get(key);
+ }
+ const component = target._components.get(key);
+ if (!component) {
+ throw new Error(`Component "${name}" not found`);
+ }
+ if (component instanceof Map) {
+ const proxy = toProxy(component, extraCode);
+ target._proxies.set(key, proxy);
+ return proxy;
+ }
+ // Save component assets
+ for (const [key, value] of component.assets){
+ extraCode.set(key, value);
+ }
+ // Return the function to render the component
+ return (props)=>component.render(props);
+ }
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9jb21wb25lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudHJ5IH0gZnJvbSBcIi4vZnMudHNcIjtcbmltcG9ydCB7IGJ1bmRsZUFzeW5jIH0gZnJvbSBcIi4uL2RlcHMvbGlnaHRuaW5nY3NzLnRzXCI7XG5pbXBvcnQgeyBidWlsZCwgc3RvcCB9IGZyb20gXCIuLi9kZXBzL2VzYnVpbGQudHNcIjtcbmltcG9ydCB0ZXh0TG9hZGVyIGZyb20gXCIuL2xvYWRlcnMvdGV4dC50c1wiO1xuaW1wb3J0IHsgcG9zaXggfSBmcm9tIFwiLi4vZGVwcy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi91dGlscy9sb2cudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRhIH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgRm9ybWF0cyBmcm9tIFwiLi9mb3JtYXRzLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBUaGUgcmVnaXN0ZXJlZCBmaWxlIGZvcm1hdHMgKi9cbiAgZm9ybWF0czogRm9ybWF0cztcbn1cblxuLyoqXG4gKiBDbGFzcyB0byBsb2FkIGNvbXBvbmVudHMgZnJvbSB0aGUgX2NvbXBvbmVudHMgZm9sZGVyLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50TG9hZGVyIHtcbiAgLyoqIExpc3Qgb2YgbG9hZGVycyBhbmQgZW5naW5lcyB1c2VkIGJ5IGV4dGVuc2lvbnMgKi9cbiAgZm9ybWF0czogRm9ybWF0cztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5mb3JtYXRzID0gb3B0aW9ucy5mb3JtYXRzO1xuICB9XG5cbiAgLyoqIExvYWQgYSBkaXJlY3Rvcnkgb2YgY29tcG9uZW50cyAqL1xuICBhc3luYyBsb2FkKFxuICAgIGRpckVudHJ5OiBFbnRyeSxcbiAgICBkYXRhOiBQYXJ0aWFsPERhdGE+LFxuICAgIGNvbXBvbmVudHM/OiBDb21wb25lbnRzLFxuICApOiBQcm9taXNlPENvbXBvbmVudHM+IHtcbiAgICBpZiAoIWNvbXBvbmVudHMpIHtcbiAgICAgIGNvbXBvbmVudHMgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBkaXJFbnRyeS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgaWYgKGVudHJ5Lm5hbWUuc3RhcnRzV2l0aChcIi5cIikgfHwgZW50cnkubmFtZS5zdGFydHNXaXRoKFwiX1wiKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy4jbG9hZENvbXBvbmVudEZvbGRlcihlbnRyeSwgZGF0YSk7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnNldChjb21wb25lbnQubmFtZS50b0xvd2VyQ2FzZSgpLCBjb21wb25lbnQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGVudHJ5Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgc3ViQ29tcG9uZW50cyA9IChjb21wb25lbnRzLmdldChuYW1lKSB8fCBuZXcgTWFwKCkpIGFzIENvbXBvbmVudHM7XG4gICAgICAgIGNvbXBvbmVudHMuc2V0KG5hbWUsIHN1YkNvbXBvbmVudHMpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZChlbnRyeSwgZGF0YSwgc3ViQ29tcG9uZW50cyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBhd2FpdCB0aGlzLiNsb2FkQ29tcG9uZW50KGVudHJ5LCBkYXRhKTtcblxuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnRzLnNldChjb21wb25lbnQubmFtZS50b0xvd2VyQ2FzZSgpLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnRzO1xuICB9XG5cbiAgLyoqIExvYWQgYSBjb21wb25lbnQgZm9sZGVyIChhIGZvbGRlciB3aXRoIGEgY29tcC4qIGZpbGUpICovXG4gIGFzeW5jICNsb2FkQ29tcG9uZW50Rm9sZGVyKFxuICAgIGVudHJ5OiBFbnRyeSxcbiAgICBkYXRhOiBQYXJ0aWFsPERhdGE+LFxuICApOiBQcm9taXNlPENvbXBvbmVudCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGNvbXBFbnRyeSA9IGZpbmRDaGlsZChcbiAgICAgIGVudHJ5LFxuICAgICAgKGVudHJ5KSA9PiBlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoXCJjb21wLlwiKSxcbiAgICApO1xuXG4gICAgaWYgKCFjb21wRW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBhd2FpdCB0aGlzLiNsb2FkQ29tcG9uZW50KGNvbXBFbnRyeSwgZGF0YSwgZW50cnkubmFtZSk7XG5cbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCBFbnRyeT4oKTtcbiAgICBjb25zdCBlbnRyeVBvaW50cyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICBcInN0eWxlLmNzc1wiLFxuICAgICAgXCJzY3JpcHQuanNcIixcbiAgICAgIFwic2NyaXB0LnRzXCIsXG4gICAgXSk7XG5cbiAgICAvLyBGaW5kIGV4dHJhIGZpbGVzXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbnRyeS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgaWYgKGNoaWxkID09PSBjb21wRW50cnkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgQ1NTL0pTL1RTIGZpbGVcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcImZpbGVcIiAmJiBlbnRyeVBvaW50cy5oYXMoY2hpbGQubmFtZSkpIHtcbiAgICAgICAgYXNzZXRzLnNldChjaGlsZC5wYXRoLCBjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgY29udGVudF0gb2YgYXNzZXRzKSB7XG4gICAgICBjb21wb25lbnQuYXNzZXRzLnNldChwYXRoLCBjb250ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqIExvYWQgYSBjb21wb25lbnQgZmlsZSAqL1xuICBhc3luYyAjbG9hZENvbXBvbmVudChcbiAgICBlbnRyeTogRW50cnksXG4gICAgZGlyRGF0YTogUGFydGlhbDxEYXRhPixcbiAgICBkZWZhdWx0TmFtZT86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDb21wb25lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmZvcm1hdHMuc2VhcmNoKGVudHJ5Lm5hbWUpO1xuXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxvYWRlciwgZW5naW5lcywgZXh0IH0gPSBmb3JtYXQ7XG5cbiAgICBpZiAoIWxvYWRlciB8fCAhZW5naW5lcyB8fCAhZW5naW5lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXdDb21wb25lbnQgPSBhd2FpdCBlbnRyeS5nZXRDb250ZW50KGxvYWRlcikgYXMgQ29tcG9uZW50RmlsZTtcbiAgICBjb25zdCB7IGNzcywganMsIGluaGVyaXREYXRhLCBjb250ZW50LCAuLi5kYXRhIH0gPSByYXdDb21wb25lbnQ7XG4gICAgY29uc3QgbmFtZSA9IGRlZmF1bHROYW1lID8/IGVudHJ5Lm5hbWUuc2xpY2UoMCwgLWV4dC5sZW5ndGgpO1xuXG4gICAgY29uc3QgcmVuZGVyID0gYXN5bmMgKHByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgY29uc3QgY3VyckRhdGEgPSBpbmhlcml0RGF0YSAhPT0gZmFsc2VcbiAgICAgICAgPyB7IC4uLmRpckRhdGEsIC4uLmRhdGEsIC4uLnByb3BzIH1cbiAgICAgICAgOiB7IC4uLmRhdGEsIC4uLnByb3BzIH07XG5cbiAgICAgIC8vIFVuaWZ5IGNoaWxkcmVuIGFuZCBjb250ZW50IGZvciBpbnRlcm9wZWFiaWxpdHkgYmV0d2VlbiBKU1ggYW5kIG90aGVyIGVuZ2luZXNcbiAgICAgIGN1cnJEYXRhLmNoaWxkcmVuID0gY3VyckRhdGEuY29udGVudCA9IHByb3BzPy5jaGlsZHJlbiA/PyBwcm9wcz8uY29udGVudDtcblxuICAgICAgbGV0IHJlc3VsdCA9IGNvbnRlbnQ7XG4gICAgICBmb3IgKGNvbnN0IGVuZ2luZSBvZiBlbmdpbmVzKSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGVuZ2luZS5yZW5kZXIoY29udGVudCwgY3VyckRhdGEsIGVudHJ5LnBhdGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIHN0cmluZztcbiAgICB9O1xuXG4gICAgY29uc3QgYXNzZXRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIGlmIChjc3MpIHtcbiAgICAgIGFzc2V0cy5zZXQoZW50cnkucGF0aCArIFwiLmNzc1wiLCBjc3MpO1xuICAgIH1cbiAgICBpZiAoanMpIHtcbiAgICAgIGFzc2V0cy5zZXQoZW50cnkucGF0aCArIFwiLmpzXCIsIGpzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHJlbmRlcixcbiAgICAgIGFzc2V0cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudHMgPSBNYXA8c3RyaW5nLCBDb21wb25lbnQgfCBDb21wb25lbnRzPjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnQge1xuICAvKiogTmFtZSBvZiB0aGUgY29tcG9uZW50ICh1c2VkIHRvIGdldCBpdCBmcm9tIHRlbXBsYXRlcykgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBUaGUgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBjb21wb25lbnQgKi9cbiAgcmVuZGVyOiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqIE9wdGlvbmFsIENTUyBhbmQgSlMgY29kZSBuZWVkZWQgdG8gc3R5bGUgdGhlIGNvbXBvbmVudCAoZ2xvYmFsLCBvbmx5IGluc2VydGVkIG9uY2UpICovXG4gIGFzc2V0czogTWFwPHN0cmluZywgc3RyaW5nIHwgRW50cnk+O1xufVxuXG4vKiogQ29tcG9uZW50IGRlZmluZWQgZGlyZWN0bHkgYnkgdGhlIHVzZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbXBvbmVudCB7XG4gIC8qKiBOYW1lIG9mIHRoZSBjb21wb25lbnQgKHVzZWQgdG8gZ2V0IGl0IGZyb20gdGVtcGxhdGVzKSAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIGNvbXBvbmVudCAqL1xuICByZW5kZXI6IChwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuICAvKiogT3B0aW9uYWwgQ1NTIGNvZGUgbmVlZGVkIHRvIHN0eWxlIHRoZSBjb21wb25lbnQgKGdsb2JhbCwgb25seSBpbnNlcnRlZCBvbmNlKSAqL1xuICBjc3M/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIEpTIGNvZGUgbmVlZGVkIGZvciB0aGUgY29tcG9uZW50IGludGVyYWN0aXZpdHkgKGdsb2JhbCwgb25seSBpbnNlcnRlZCBvbmNlKSAqL1xuICBqcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRGaWxlIHtcbiAgLyoqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQgKi9cbiAgY29udGVudDogdW5rbm93bjtcblxuICAvKiogT3B0aW9uYWwgQ1NTIGNvZGUgbmVlZGVkIHRvIHN0eWxlIHRoZSBjb21wb25lbnQgKGdsb2JhbCwgb25seSBpbnNlcnRlZCBvbmNlKSAqL1xuICBjc3M/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIEpTIGNvZGUgbmVlZGVkIGZvciB0aGUgY29tcG9uZW50IGludGVyYWN0aXZpdHkgKGdsb2JhbCwgb25seSBpbnNlcnRlZCBvbmNlKSAqL1xuICBqcz86IHN0cmluZztcblxuICAvKiogSWYgZmFsc2UsIHRoZSBkYXRhIGZyb20gdGhlIHBhcmVudCBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgaW5oZXJpdGVkICovXG4gIGluaGVyaXREYXRhPzogYm9vbGVhbjtcblxuICAvKiogRXh0cmEgZGVmYXVsdCBkYXRhIHN0b3JlZCBpbiB0aGUgY29tcG9uZW50ICovXG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZChcbiAgZW50cnk6IEVudHJ5LFxuICBmaWx0ZXI6IChlbnRyeTogRW50cnkpID0+IGJvb2xlYW4sXG4pOiBFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZW50cnkuY2hpbGRyZW4udmFsdWVzKCkpIHtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJmaWxlXCIgJiYgZmlsdGVyKGNoaWxkKSkge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGlsZUNTUyhcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgaW1wb3J0czogTWFwPHN0cmluZywgc3RyaW5nIHwgRW50cnk+LFxuICBlbnRyaWVzOiBNYXA8c3RyaW5nLCBFbnRyeT4sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBtYWluQ29kZSA9IEFycmF5LmZyb20oaW1wb3J0cy5rZXlzKCkpLm1hcCgocGF0aCkgPT5cbiAgICBgQGltcG9ydCBcIiR7cGF0aH1cIjtgXG4gICkuam9pbihcIlxcblwiKTtcblxuICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IGJ1bmRsZUFzeW5jKHtcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgIHJlc29sdmVyOiB7XG4gICAgICByZXNvbHZlKGlkLCBpbXBvcnRlcikge1xuICAgICAgICBpZiAoaWQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICBpZCA9IHBvc2l4LmpvaW4ocG9zaXguZGlybmFtZShpbXBvcnRlciksIGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9LFxuICAgICAgYXN5bmMgcmVhZChmaWxlUGF0aCkge1xuICAgICAgICBpZiAoZmlsZVBhdGggPT09IGZpbGVuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG1haW5Db2RlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBnZXRFbnRyeUNvbnRlbnQoXG4gICAgICAgICAgaW1wb3J0cy5nZXQoZmlsZVBhdGgpIHx8IGVudHJpZXMuZ2V0KGZpbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBbY29tcG9uZW50c10gRmlsZSBcIiR7ZmlsZVBhdGh9XCIgbm90IGZvdW5kIG9yIGlzIGVtcHR5YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGNvZGUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGlsZUpTKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICBpbXBvcnRzOiBNYXA8c3RyaW5nLCBzdHJpbmcgfCBFbnRyeT4sXG4gIGVudHJpZXM6IE1hcDxzdHJpbmcsIEVudHJ5Pixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG1haW5Db2RlID0gQXJyYXkuZnJvbShpbXBvcnRzLmtleXMoKSkubWFwKChwYXRoKSA9PiBgaW1wb3J0IFwiJHtwYXRofVwiO2ApXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3QgeyBvdXRwdXRGaWxlcyB9ID0gYXdhaXQgYnVpbGQoe1xuICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICBlbnRyeVBvaW50czogW2ZpbGVuYW1lXSxcbiAgICB3cml0ZTogZmFsc2UsXG4gICAgZm9ybWF0OiBcImVzbVwiLFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgdGFyZ2V0OiBcImVzbmV4dFwiLFxuICAgIG91dGZpbGU6IGZpbGVuYW1lLFxuXG4gICAgcGx1Z2luczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcImNvbXBvbmVudHMtcmVzb2x2ZXJcIixcbiAgICAgICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8gfSwgKHsgcGF0aCwgaW1wb3J0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgcGF0aCA9IHBvc2l4LmpvaW4ocG9zaXguZGlybmFtZShpbXBvcnRlciksIHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdGggPT09IGZpbGVuYW1lIHx8IGltcG9ydHMuaGFzKHBhdGgpIHx8IGVudHJpZXMuaGFzKHBhdGgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHBhdGgsIG5hbWVzcGFjZTogXCJmc1wiIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBwYXRoLCBleHRlcm5hbDogdHJ1ZSB9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnVpbGQub25Mb2FkKFxuICAgICAgICAgICAgeyBmaWx0ZXI6IC8uKi8sIG5hbWVzcGFjZTogXCJmc1wiIH0sXG4gICAgICAgICAgICBhc3luYyAoeyBwYXRoIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBwYXRoID09PSBmaWxlbmFtZVxuICAgICAgICAgICAgICAgID8gbWFpbkNvZGVcbiAgICAgICAgICAgICAgICA6IGF3YWl0IGdldEVudHJ5Q29udGVudChcbiAgICAgICAgICAgICAgICAgIGltcG9ydHMuZ2V0KHBhdGgpIHx8IGVudHJpZXMuZ2V0KHBhdGgpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghY29udGVudHMpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYFtjb21wb25lbnRzXSBGaWxlIFwiJHtwYXRofVwiIG5vdCBmb3VuZCBvciBpcyBlbXB0eWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgICAgICAgbG9hZGVyOiBwYXRoLmVuZHNXaXRoKFwiLnRzXCIpID8gXCJ0c1wiIDogXCJqc1wiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICBhd2FpdCBzdG9wKCk7XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICByZXR1cm4gZGVjb2Rlci5kZWNvZGUob3V0cHV0RmlsZXNbMF0uY29udGVudHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRFbnRyeUNvbnRlbnQoZW50cnk/OiBFbnRyeSB8IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBpZiAoZW50cnkpIHtcbiAgICBjb25zdCB7IGNvbnRlbnQgfSA9IGF3YWl0IGVudHJ5LmdldENvbnRlbnQodGV4dExvYWRlcik7XG4gICAgcmV0dXJuIChjb250ZW50IGFzIHN0cmluZykgfHwgXCJcIjtcbiAgfVxuXG4gIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5Q29tcG9uZW50cyB7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIChwcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYW55O1xuICBba2V5OiBzdHJpbmddOiBQcm94eUNvbXBvbmVudHM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm5zIGEgcHJveHkgdG8gdXNlIHRoZSBjb21wb25lbnRzXG4gKiBhcyBjb21wLm5hbWUoKSBpbnN0ZWFkIG9mIGNvbXBvbmVudHMuZ2V0KFwibmFtZVwiKS5yZW5kZXIoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Qcm94eShcbiAgY29tcG9uZW50czogQ29tcG9uZW50cyxcbiAgZXh0cmFDb2RlOiBNYXA8c3RyaW5nLCBzdHJpbmcgfCBFbnRyeT4sXG4pOiBQcm94eUNvbXBvbmVudHMge1xuICBjb25zdCBub2RlID0ge1xuICAgIF9jb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgIF9wcm94aWVzOiBuZXcgTWFwKCksXG4gIH07XG4gIHJldHVybiBuZXcgUHJveHkobm9kZSwge1xuICAgIGdldDogKHRhcmdldCwgbmFtZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiIHx8IG5hbWUgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAodGFyZ2V0Ll9wcm94aWVzLmhhcyhrZXkpKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQuX3Byb3hpZXMuZ2V0KGtleSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRhcmdldC5fY29tcG9uZW50cy5nZXQoa2V5KTtcblxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IGZvdW5kYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgY29uc3QgcHJveHkgPSB0b1Byb3h5KGNvbXBvbmVudCwgZXh0cmFDb2RlKTtcbiAgICAgICAgdGFyZ2V0Ll9wcm94aWVzLnNldChrZXksIHByb3h5KTtcbiAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIGNvbXBvbmVudCBhc3NldHNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGNvbXBvbmVudC5hc3NldHMpIHtcbiAgICAgICAgZXh0cmFDb2RlLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmV0dXJuIHRoZSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIGNvbXBvbmVudFxuICAgICAgcmV0dXJuIChwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGNvbXBvbmVudC5yZW5kZXIocHJvcHMpO1xuICAgIH0sXG4gIH0pIGFzIHVua25vd24gYXMgUHJveHlDb21wb25lbnRzO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsV0FBVyxRQUFRLDBCQUEwQjtBQUN0RCxTQUFTLEtBQUssRUFBRSxJQUFJLFFBQVEscUJBQXFCO0FBQ2pELE9BQU8sZ0JBQWdCLG9CQUFvQjtBQUMzQyxTQUFTLEtBQUssUUFBUSxrQkFBa0I7QUFDeEMsU0FBUyxHQUFHLFFBQVEsaUJBQWlCO0FBVXJDOztDQUVDLEdBQ0QsT0FBTyxNQUFNO0VBQ1gsbURBQW1ELEdBQ25ELFFBQWlCO0VBRWpCLFlBQVksT0FBZ0IsQ0FBRTtJQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsT0FBTztFQUNoQztFQUVBLG1DQUFtQyxH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
+// denoCacheMetadata=299892348635551945,936418506161586578 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4da031df864b2407ee225bbc7e019818e0738ebcd8767b934063fcffa33bffa3.js b/vendor/gen/https/deno.land/4da031df864b2407ee225bbc7e019818e0738ebcd8767b934063fcffa33bffa3.js
new file mode 100644
index 0000000..65d321c
--- /dev/null
+++ b/vendor/gen/https/deno.land/4da031df864b2407ee225bbc7e019818e0738ebcd8767b934063fcffa33bffa3.js
@@ -0,0 +1,13 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(jsTag);
+ };
+}
+function jsTag(_env, code) {
+ if (!code.startsWith(">")) {
+ return;
+ }
+ return code.replace(/^>\s+/, "");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2pzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCk6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIGVudi50YWdzLnB1c2goanNUYWcpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBqc1RhZyhcbiAgX2VudjogRW52aXJvbm1lbnQsXG4gIGNvZGU6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY29kZS5zdGFydHNXaXRoKFwiPlwiKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBjb2RlLnJlcGxhY2UoL14+XFxzKy8sIFwiXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7QUFDRjtBQUVBLFNBQVMsTUFDUCxJQUFpQixFQUNqQixJQUFZO0VBRVosSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLE1BQU07SUFDekI7RUFDRjtFQUVBLE9BQU8sS0FBSyxPQUFPLENBQUMsU0FBUztBQUMvQiJ9
+// denoCacheMetadata=24069137121345830,8384104360823363736 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4e25728eaf52b7ef4beef7844850754032e0011a1ba5996a2b9037dacd1bbde0.js b/vendor/gen/https/deno.land/4e25728eaf52b7ef4beef7844850754032e0011a1ba5996a2b9037dacd1bbde0.js
new file mode 100644
index 0000000..97b7cde
--- /dev/null
+++ b/vendor/gen/https/deno.land/4e25728eaf52b7ef4beef7844850754032e0011a1ba5996a2b9037dacd1bbde0.js
@@ -0,0 +1,65 @@
+/** Class to store loaders, engines and other stuff related with different formats */ export default class Formats {
+ entries = new Map();
+ get size() {
+ return this.entries.size;
+ }
+ /** Assign a value to a extension */ set(format, override = true) {
+ format.ext = format.ext.toLowerCase();
+ const ext = format.ext;
+ const existing = this.entries.get(ext);
+ if (existing) {
+ if (override) {
+ this.entries.set(ext, {
+ ...existing,
+ ...format
+ });
+ } else {
+ this.entries.set(ext, {
+ ...format,
+ ...existing
+ });
+ }
+ return;
+ }
+ // Simple extension (.ts, .js, .json)
+ if (ext.match(/^\.\w+$/)) {
+ this.entries.set(ext, format);
+ return;
+ }
+ // Chained extension (.tmpl.js) goes first
+ if (ext.match(/^\.\w+\.\w+$/)) {
+ const entries = Array.from(this.entries.entries());
+ entries.unshift([
+ ext,
+ format
+ ]);
+ this.entries = new Map(entries);
+ return;
+ }
+ throw new Error(`Invalid file extension: "${ext}". It must start with '.'`);
+ }
+ /** Returns a format by extension */ get(extension) {
+ return this.entries.get(extension.toLowerCase());
+ }
+ /** Delete a format */ delete(extension) {
+ this.entries.delete(extension.toLowerCase());
+ }
+ /** Returns if a format exists */ has(extension) {
+ return this.entries.has(extension.toLowerCase());
+ }
+ /** Search and return the associated format for a path */ search(path) {
+ path = path.toLowerCase();
+ for (const format of this.entries.values()){
+ if (path.endsWith(format.ext)) {
+ return format;
+ }
+ }
+ }
+ /** Delete a cached template */ deleteCache(file) {
+ for (const format of this.entries.values()){
+ format.engines?.forEach((engine)=>engine.deleteCache(file));
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9mb3JtYXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5naW5lIH0gZnJvbSBcIi4vcmVuZGVyZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgTG9hZGVyIH0gZnJvbSBcIi4vZnMudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtYXQge1xuICAvKiogVGhlIGZpbGUgZXh0ZW5zaW9uIGZvciB0aGlzIGZvcm1hdCAqL1xuICBleHQ6IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGZvcm1hdCBpcyBmb3IgcGFnZXMgKi9cbiAgaXNQYWdlPzogYm9vbGVhbjtcblxuICAvKiogVGhlIGZpbGUgbG9hZGVyIHVzZWQgZm9yIHRoaXMgZm9ybWF0ICh1c2VkIGJ5IHBhZ2VzLCBpbmNsdWRlcywgY29tcG9uZW50cywgZXRjKSAqL1xuICBsb2FkZXI/OiBMb2FkZXI7XG5cbiAgLyoqIExvYWRlciBmb3IgX2RhdGEgZmlsZXMgaW4gdGhpcyBmb3JtYXQgKi9cbiAgZGF0YUxvYWRlcj86IExvYWRlcjtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGVuZ2luZXMgdXNlZCB0byByZW5kZXIgdGhpcyBmb3JtYXRcbiAgICogVXNlZCB0byByZW5kZXIgdGhlIHBhZ2UgYW5kIGNvbXBvbmVudHNcbiAgICovXG4gIGVuZ2luZXM/OiBFbmdpbmVbXTtcbn1cblxuLyoqIENsYXNzIHRvIHN0b3JlIGxvYWRlcnMsIGVuZ2luZXMgYW5kIG90aGVyIHN0dWZmIHJlbGF0ZWQgd2l0aCBkaWZmZXJlbnQgZm9ybWF0cyAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0cyB7XG4gIGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgRm9ybWF0PigpO1xuXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5zaXplO1xuICB9XG5cbiAgLyoqIEFzc2lnbiBhIHZhbHVlIHRvIGEgZXh0ZW5zaW9uICovXG4gIHNldChmb3JtYXQ6IEZvcm1hdCwgb3ZlcnJpZGUgPSB0cnVlKTogdm9pZCB7XG4gICAgZm9ybWF0LmV4dCA9IGZvcm1hdC5leHQudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBleHQgPSBmb3JtYXQuZXh0O1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5lbnRyaWVzLmdldChleHQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChleHQsIHsgLi4uZXhpc3RpbmcsIC4uLmZvcm1hdCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5zZXQoZXh0LCB7IC4uLmZvcm1hdCwgLi4uZXhpc3RpbmcgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIGV4dGVuc2lvbiAoLnRzLCAuanMsIC5qc29uKVxuICAgIGlmIChleHQubWF0Y2goL15cXC5cXHcrJC8pKSB7XG4gICAgICB0aGlzLmVudHJpZXMuc2V0KGV4dCwgZm9ybWF0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGFpbmVkIGV4dGVuc2lvbiAoLnRtcGwuanMpIGdvZXMgZmlyc3RcbiAgICBpZiAoZXh0Lm1hdGNoKC9eXFwuXFx3K1xcLlxcdyskLykpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBBcnJheS5mcm9tKHRoaXMuZW50cmllcy5lbnRyaWVzKCkpO1xuICAgICAgZW50cmllcy51bnNoaWZ0KFtleHQsIGZvcm1hdF0pO1xuICAgICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcChlbnRyaWVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBmaWxlIGV4dGVuc2lvbjogXCIke2V4dH1cIi4gIEl0IG11c3Qgc3RhcnQgd2l0aCAnLidgLFxuICAgICk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGZvcm1hdCBieSBleHRlbnNpb24gKi9cbiAgZ2V0KGV4dGVuc2lvbjogc3RyaW5nKTogRm9ybWF0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldChleHRlbnNpb24udG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICAvKiogRGVsZXRlIGEgZm9ybWF0ICovXG4gIGRlbGV0ZShleHRlbnNpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5kZWxldGUoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgaWYgYSBmb3JtYXQgZXhpc3RzICovXG4gIGhhcyhleHRlbnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuaGFzKGV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8qKiBTZWFyY2ggYW5kIHJldHVybiB0aGUgYXNzb2NpYXRlZCBmb3JtYXQgZm9yIGEgcGF0aCAqL1xuICBzZWFyY2gocGF0aDogc3RyaW5nKTogRm9ybWF0IHwgdW5kZWZpbmVkIHtcbiAgICBwYXRoID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgZm9yIChjb25zdCBmb3JtYXQgb2YgdGhpcy5lbnRyaWVzLnZhbHVlcygpKSB7XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChmb3JtYXQuZXh0KSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEZWxldGUgYSBjYWNoZWQgdGVtcGxhdGUgKi9cbiAgZGVsZXRlQ2FjaGUoZmlsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmb3JtYXQgb2YgdGhpcy5lbnRyaWVzLnZhbHVlcygpKSB7XG4gICAgICBmb3JtYXQuZW5naW5lcz8uZm9yRWFjaCgoZW5naW5lKSA9PiBlbmdpbmUuZGVsZXRlQ2FjaGUoZmlsZSkpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQSxtRkFBbUYsR0FDbkYsZUFBZSxNQUFNO0VBQ25CLFVBQVUsSUFBSSxNQUFzQjtFQUVwQyxJQUFJLE9BQWU7SUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7RUFDMUI7RUFFQSxrQ0FBa0MsR0FDbEMsSUFBSSxNQUFjLEVBQUUsV0FBVyxJQUFJLEVBQVE7SUFDekMsT0FBTyxHQUFHLEdBQUcsT0FBTyxHQUFHLENBQUMsV0FBVztJQUNuQyxNQUFNLE1BQU0sT0FBTyxHQUFHO0lBQ3RCLE1BQU0sV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUVsQyxJQUFJLFVBQVU7TUFDWixJQUFJLFVBQVU7UUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1VBQUUsR0FBRyxRQUFRO1VBQUUsR0FBRyxNQUFNO1FBQUM7TUFDakQsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUs7VUFBRSxHQUFHLE1BQU07VUFBRSxHQUFHLFFBQVE7UUFBQztNQUNqRDtNQUNBO0lBQ0Y7SUFFQSxxQ0FBcUM7SUFDckMsSUFBSSxJQUFJLEtBQUssQ0FBQyxZQUFZO01BQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUs7TUFDdEI7SUFDRjtJQUVBLDBDQUEwQztJQUMxQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQjtNQUM3QixNQUFNLFVBQVUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO01BQy9DLFFBQVEsT0FBTyxDQUFDO1FBQUM7UUFBSztPQUFPO01BQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJO01BQ3ZCO0lBQ0Y7SUFFQSxNQUFNLElBQUksTUFDUixDQUFDLHlCQUF5QixFQUFFLElBQUksMEJBQTBCLENBQUM7RUFFL0Q7RUFFQSxrQ0FBa0MsR0FDbEMsSUFBSSxTQUFpQixFQUFzQjtJQUN6QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsV0FBVztFQUMvQztFQUVBLG9CQUFvQixHQUNwQixPQUFPLFNBQWlCLEVBQVE7SUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxXQUFXO0VBQzNDO0VBRUEsK0JBQStCLEdBQy9CLElBQUksU0FBaUIsRUFBVztJQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsV0FBVztFQUMvQztFQUVBLHVEQUF1RCxHQUN2RCxPQUFPLElBQVksRUFBc0I7SUFDdkMsT0FBTyxLQUFLLFdBQVc7SUFFdkIsS0FBSyxNQUFNLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUk7TUFDMUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRztRQUM3QixPQUFPO01BQ1Q7SUFDRjtFQUNGO0VBRUEsNkJBQTZCLEdBQzdCLFlBQVksSUFBWSxFQUFRO0lBQzlCLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFJO01BQzFDLE9BQU8sT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFXLE9BQU8sV0FBVyxDQUFDO0lBQ3pEO0VBQ0Y7QUFDRiJ9
+// denoCacheMetadata=9854688774849383936,11737632753643038664 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/4f5335c2d09065ff97ba3e6d69f5e92a5669fc492101e27ff1fa3741d6b1eeee.js b/vendor/gen/https/deno.land/4f5335c2d09065ff97ba3e6d69f5e92a5669fc492101e27ff1fa3741d6b1eeee.js
new file mode 100644
index 0000000..b753063
--- /dev/null
+++ b/vendor/gen/https/deno.land/4f5335c2d09065ff97ba3e6d69f5e92a5669fc492101e27ff1fa3741d6b1eeee.js
@@ -0,0 +1,110 @@
+import { CTOR_KEY } from "../constructor-lock.ts";
+import { NodeList, nodeListMutatorSym } from "./node-list.ts";
+import { Node, nodesAndTextNodes, NodeType } from "./node.ts";
+import { customByClassNameSym, customByTagNameSym } from "./selectors/custom-api.ts";
+import { getElementsByClassName } from "./utils.ts";
+import UtilTypes from "./utils-types.ts";
+export class DocumentFragment extends Node {
+ constructor(){
+ super("#document-fragment", NodeType.DOCUMENT_FRAGMENT_NODE, null, CTOR_KEY);
+ }
+ get childElementCount() {
+ return this._getChildNodesMutator().elementsView().length;
+ }
+ get children() {
+ return this._getChildNodesMutator().elementsView();
+ }
+ get firstElementChild() {
+ const elements = this._getChildNodesMutator().elementsView();
+ return elements[0] ?? null;
+ }
+ get lastElementChild() {
+ const elements = this._getChildNodesMutator().elementsView();
+ return elements[elements.length - 1] ?? null;
+ }
+ _shallowClone() {
+ return new DocumentFragment();
+ }
+ append(...nodes) {
+ const mutator = this._getChildNodesMutator();
+ mutator.push(...nodesAndTextNodes(nodes, this));
+ }
+ prepend(...nodes) {
+ const mutator = this._getChildNodesMutator();
+ mutator.splice(0, 0, ...nodesAndTextNodes(nodes, this));
+ }
+ replaceChildren(...nodes) {
+ const mutator = this._getChildNodesMutator();
+ // Remove all current child nodes
+ for (const child of this.childNodes){
+ child._setParent(null);
+ }
+ mutator.splice(0, this.childNodes.length);
+ // Add new children
+ mutator.splice(0, 0, ...nodesAndTextNodes(nodes, this));
+ }
+ // TODO: DRY!!!
+ getElementById(id) {
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ if (child.id === id) {
+ return child;
+ }
+ const search = child.getElementById(id);
+ if (search) {
+ return search;
+ }
+ }
+ }
+ return null;
+ }
+ querySelector(selectors) {
+ if (!this.ownerDocument) {
+ throw new Error("DocumentFragment must have an owner document");
+ }
+ return this.ownerDocument._nwapi.first(selectors, this);
+ }
+ querySelectorAll(selectors) {
+ if (!this.ownerDocument) {
+ throw new Error("DocumentFragment must have an owner document");
+ }
+ const nodeList = new NodeList();
+ const mutator = nodeList[nodeListMutatorSym]();
+ mutator.push(...this.ownerDocument._nwapi.select(selectors, this));
+ return nodeList;
+ }
+}
+UtilTypes.DocumentFragment = DocumentFragment;
+// Add required methods just for Sizzle.js selector to work on
+// DocumentFragment's
+function documentFragmentGetElementsByTagName(tagName) {
+ const search = [];
+ if (tagName === "*") {
+ return documentFragmentGetElementsByTagNameWildcard(this, search);
+ }
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ if (child.tagName === tagName) {
+ search.push(child);
+ }
+ child._getElementsByTagName(tagName, search);
+ }
+ }
+ return search;
+}
+function documentFragmentGetElementsByClassName(className) {
+ return getElementsByClassName(this, className.trim().split(/\s+/), []);
+}
+function documentFragmentGetElementsByTagNameWildcard(fragment, search) {
+ for (const child of fragment.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ search.push(child);
+ child._getElementsByTagNameWildcard(search);
+ }
+ }
+ return search;
+}
+DocumentFragment.prototype[customByTagNameSym] = documentFragmentGetElementsByTagName;
+DocumentFragment.prototype[customByClassNameSym] = documentFragmentGetElementsByClassName;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL2RvY3VtZW50LWZyYWdtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENUT1JfS0VZIH0gZnJvbSBcIi4uL2NvbnN0cnVjdG9yLWxvY2sudHNcIjtcbmltcG9ydCB7IEhUTUxDb2xsZWN0aW9uIH0gZnJvbSBcIi4vaHRtbC1jb2xsZWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBOb2RlTGlzdCwgbm9kZUxpc3RNdXRhdG9yU3ltIH0gZnJvbSBcIi4vbm9kZS1saXN0LnRzXCI7XG5pbXBvcnQgeyBOb2RlLCBub2Rlc0FuZFRleHROb2RlcywgTm9kZVR5cGUgfSBmcm9tIFwiLi9ub2RlLnRzXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC50c1wiO1xuaW1wb3J0IHtcbiAgY3VzdG9tQnlDbGFzc05hbWVTeW0sXG4gIGN1c3RvbUJ5VGFnTmFtZVN5bSxcbn0gZnJvbSBcIi4vc2VsZWN0b3JzL2N1c3RvbS1hcGkudHNcIjtcbmltcG9ydCB7IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgfSBmcm9tIFwiLi91dGlscy50c1wiO1xuaW1wb3J0IFV0aWxUeXBlcyBmcm9tIFwiLi91dGlscy10eXBlcy50c1wiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGcmFnbWVudCBleHRlbmRzIE5vZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiI2RvY3VtZW50LWZyYWdtZW50XCIsXG4gICAgICBOb2RlVHlwZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFLFxuICAgICAgbnVsbCxcbiAgICAgIENUT1JfS0VZLFxuICAgICk7XG4gIH1cblxuICBnZXQgY2hpbGRFbGVtZW50Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKS5lbGVtZW50c1ZpZXcoKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogSFRNTENvbGxlY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZE5vZGVzTXV0YXRvcigpLmVsZW1lbnRzVmlldygpO1xuICB9XG5cbiAgZ2V0IGZpcnN0RWxlbWVudENoaWxkKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuX2dldENoaWxkTm9kZXNNdXRhdG9yKCkuZWxlbWVudHNWaWV3KCk7XG4gICAgcmV0dXJuIGVsZW1lbnRzWzBdID8/IG51bGw7XG4gIH1cblxuICBnZXQgbGFzdEVsZW1lbnRDaGlsZCgpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLl9nZXRDaGlsZE5vZGVzTXV0YXRvcigpLmVsZW1lbnRzVmlldygpO1xuICAgIHJldHVybiBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXSA/PyBudWxsO1xuICB9XG5cbiAgb3ZlcnJpZGUgX3NoYWxsb3dDbG9uZSgpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gbmV3IERvY3VtZW50RnJhZ21lbnQoKTtcbiAgfVxuXG4gIGFwcGVuZCguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICBjb25zdCBtdXRhdG9yID0gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICBtdXRhdG9yLnB1c2goLi4ubm9kZXNBbmRUZXh0Tm9kZXMobm9kZXMsIHRoaXMpKTtcbiAgfVxuXG4gIHByZXBlbmQoLi4ubm9kZXM6IChOb2RlIHwgc3RyaW5nKVtdKSB7XG4gICAgY29uc3QgbXV0YXRvciA9IHRoaXMuX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG4gICAgbXV0YXRvci5zcGxpY2UoMCwgMCwgLi4ubm9kZXNBbmRUZXh0Tm9kZXMobm9kZXMsIHRoaXMpKTtcbiAgfVxuXG4gIHJlcGxhY2VDaGlsZHJlbiguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICBjb25zdCBtdXRhdG9yID0gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcblxuICAgIC8vIFJlbW92ZSBhbGwgY3VycmVudCBjaGlsZCBub2Rlc1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBjaGlsZC5fc2V0UGFyZW50KG51bGwpO1xuICAgIH1cbiAgICBtdXRhdG9yLnNwbGljZSgwLCB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoKTtcblxuICAgIC8vIEFkZCBuZXcgY2hpbGRyZW5cbiAgICBtdXRhdG9yLnNwbGljZSgwLCAwLCAuLi5ub2Rlc0FuZFRleHROb2Rlcyhub2RlcywgdGhpcykpO1xuICB9XG5cbiAgLy8gVE9ETzogRFJZISEhXG4gIGdldEVsZW1lbnRCeUlkKGlkOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGlmICgoPEVsZW1lbnQ+IGNoaWxkKS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICByZXR1cm4gPEVsZW1lbnQ+IGNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gKDxFbGVtZW50PiBjaGlsZCkuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgcmV0dXJuIHNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcXVlcnlTZWxlY3RvcihzZWxlY3RvcnM6IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMub3duZXJEb2N1bWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnRGcmFnbWVudCBtdXN0IGhhdmUgYW4gb3duZXIgZG9jdW1lbnRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudCEuX253YXBpLmZpcnN0KHNlbGVjdG9ycywgdGhpcyBhcyBhbnkgYXMgRWxlbWVudCk7XG4gIH1cblxuICBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yczogc3RyaW5nKTogTm9kZUxpc3Qge1xuICAgIGlmICghdGhpcy5vd25lckRvY3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudEZyYWdtZW50IG11c3QgaGF2ZSBhbiBvd25lciBkb2N1bWVudFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuICAgIGNvbnN0IG11dGF0b3IgPSBub2RlTGlzdFtub2RlTGlzdE11dGF0b3JTeW1dKCk7XG4gICAgbXV0YXRvci5wdXNoKFxuICAgICAgLi4udGhpcy5vd25lckRvY3VtZW50IS5fbndhcGkuc2VsZWN0KHNlbGVjdG9ycywgdGhpcyBhcyBhbnkgYXMgRWxlbWVudCksXG4gICAgKTtcblxuICAgIHJldHVybiBub2RlTGlzdDtcbiAgfVxufVxuXG5VdGlsVHlwZXMuRG9jdW1lbnRGcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ7XG5cbi8vIEFkZCByZXF1aXJlZCBtZXRob2RzIGp1c3QgZm9yIFNpenpsZS5qcyBzZWxlY3RvciB0byB3b3JrIG9uXG4vLyBEb2N1bWVudEZyYWdtZW50J3NcbmZ1bmN0aW9uIGRvY3VtZW50RnJhZ21lbnRHZXRFbGVtZW50c0J5VGFnTmFtZShcbiAgdGhpczogRG9jdW1lbnRGcmFnbWVudCxcbiAgdGFnTmFtZTogc3RyaW5nLFxuKTogTm9kZVtdIHtcbiAgY29uc3Qgc2VhcmNoOiBOb2RlW10gPSBbXTtcblxuICBpZiAodGFnTmFtZSA9PT0gXCIqXCIpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudEdldEVsZW1lbnRzQnlUYWdOYW1lV2lsZGNhcmQodGhpcywgc2VhcmNoKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGlmICgoPEVsZW1lbnQ+IGNoaWxkKS50YWdOYW1lID09PSB0YWdOYW1lKSB7XG4gICAgICAgIHNlYXJjaC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgKDxFbGVtZW50PiBjaGlsZCkuX2dldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUsIHNlYXJjaCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlYXJjaDtcbn1cblxuZnVuY3Rpb24gZG9jdW1lbnRGcmFnbWVudEdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gIHRoaXM6IERvY3VtZW50RnJhZ21lbnQsXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuKSB7XG4gIHJldHVybiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMsIGNsYXNzTmFtZS50cmltKCkuc3BsaXQoL1xccysvKSwgW10pO1xufVxuXG5mdW5jdGlvbiBkb2N1bWVudEZyYWdtZW50R2V0RWxlbWVudHNCeVRhZ05hbWVXaWxkY2FyZChcbiAgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gIHNlYXJjaDogTm9kZVtdLFxuKTogTm9kZVtdIHtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBmcmFnbWVudC5jaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIHNlYXJjaC5wdXNoKGNoaWxkKTtcbiAgICAgICg8RWxlbWVudD4gY2hpbGQpLl9nZXRFbGVtZW50c0J5VGFnTmFtZVdpbGRjYXJkKHNlYXJjaCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlYXJjaDtcbn1cblxuKERvY3VtZW50RnJhZ21lbnQgYXMgYW55KS5wcm90b3R5cGVbY3VzdG9tQnlUYWdOYW1lU3ltXSA9XG4gIGRvY3VtZW50RnJhZ21lbnRHZXRFbGVtZW50c0J5VGFnTmFtZTtcbihEb2N1bWVudEZyYWdtZW50IGFzIGFueSkucHJvdG90eXBlW2N1c3RvbUJ5Q2xhc3NOYW1lU3ltXSA9XG4gIGRvY3VtZW50RnJhZ21lbnRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsUUFBUSxRQUFRLHlCQUF5QjtBQUVsRCxTQUFTLFFBQVEsRUFBRSxrQkFBa0IsUUFBUSxpQkFBaUI7QUFDOUQsU0FBUyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxRQUFRLFlBQVk7QUFFOUQsU0FDRSxvQkFBb0IsRUFDcEIsa0JBQWtCLFFBQ2IsNEJBQTRCO0FBQ25DLFNBQVMsc0JBQXNCLFFBQVEsYUFBYTtBQUNwRCxPQUFPLGVBQWUsbUJBQW1CO0FBRXpDLE9BQU8sTUFBTSx5QkFBeUI7RUFDcEMsYUFBYztJQUNaLEtBQUssQ0FDSCxzQkFDQSxTQUFTLHNCQUFzQixFQUMvQixNQUNBO0VBRUo7RUFFQSxJQUFJLG9CQUE0QjtJQUM5QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLEdBQUcsTUFBTTtFQUMzRDtFQUVBLElBQUksV0FBMkI7SUFDN0IsT0FBTyxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWTtFQUNsRDtFQUVBLElBQUksb0JBQW9DO0lBQ3RDLE1BQU0sV0FBVyxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWTtJQUMxRCxPQUFPLFFBQVEsQ0FBQyxFQUFFLElBQUk7RUFDeEI7RUFFQSxJQUFJLG1CQUFtQztJQUNyQyxNQUFNLFdBQVcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFlBQVk7SUFDMUQsT0FBTyxRQUFRLENBQUMsU0FBUyxNQUFNLEdBQUcsRUFBRSxJQUFJO0VBQzFDO0VBRVMsZ0JBQWtDO0lBQ3pDLE9BQU8sSUFBSTtFQUNiO0VBRUEsT0FBTyxHQUFHLEtBQXdCLEVBQUU7SUFDbEMsTUFBTSxVQUFVLElBQUksQ0FBQyxxQkFBcUI7SUFDMUMsUUFBUSxJQUFJLElBQUksa0JBQWtCLE9BQU8sSUFBSTtFQUMvQztFQUVBLFFBQVEsR0FBRyxLQUF3QixFQUFF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
+// denoCacheMetadata=1528098926956525668,12731734340740206619 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/54e73a4a75987340e842ebdfa887a096948e028928d30002d16fe0938ec00bd4.js b/vendor/gen/https/deno.land/54e73a4a75987340e842ebdfa887a096948e028928d30002d16fe0938ec00bd4.js
new file mode 100644
index 0000000..ff34a8e
--- /dev/null
+++ b/vendor/gen/https/deno.land/54e73a4a75987340e842ebdfa887a096948e028928d30002d16fe0938ec00bd4.js
@@ -0,0 +1,4 @@
+export { bold, brightBlue, dim, green, italic, red, stripColor, underline, yellow } from "https://deno.land/std@0.170.0/fmt/colors.ts";
+export { dirname, join, normalize } from "https://deno.land/std@0.170.0/path/mod.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L2RlcHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgYm9sZCxcbiAgYnJpZ2h0Qmx1ZSxcbiAgZGltLFxuICBncmVlbixcbiAgaXRhbGljLFxuICByZWQsXG4gIHN0cmlwQ29sb3IsXG4gIHVuZGVybGluZSxcbiAgeWVsbG93LFxufSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTcwLjAvZm10L2NvbG9ycy50c1wiO1xuZXhwb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplLFxufSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTcwLjAvcGF0aC9tb2QudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLElBQUksRUFDSixVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxRQUNELDhDQUE4QztBQUNyRCxTQUNFLE9BQU8sRUFDUCxJQUFJLEVBQ0osU0FBUyxRQUNKLDRDQUE0QyJ9
+// denoCacheMetadata=16272068494412669583,5172286019227518564 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/563f031a66eba38ffe1953bc4baf77ef05145e3c109d0059188c64a030ea79b7.js b/vendor/gen/https/deno.land/563f031a66eba38ffe1953bc4baf77ef05145e3c109d0059188c64a030ea79b7.js
new file mode 100644
index 0000000..f311786
--- /dev/null
+++ b/vendor/gen/https/deno.land/563f031a66eba38ffe1953bc4baf77ef05145e3c109d0059188c64a030ea79b7.js
@@ -0,0 +1,446 @@
+import { Cell } from "./cell.ts";
+import { Row } from "./row.ts";
+import { consumeWords, longest, strLength } from "./utils.ts";
+/** Table layout renderer. */ export class TableLayout {
+ table;
+ options;
+ /**
+ * Table layout constructor.
+ * @param table Table instance.
+ * @param options Render options.
+ */ constructor(table, options){
+ this.table = table;
+ this.options = options;
+ }
+ /** Generate table string. */ toString() {
+ const opts = this.createLayout();
+ return opts.rows.length ? this.renderRows(opts) : "";
+ }
+ /**
+ * Generates table layout including row and col span, converts all none
+ * Cell/Row values to Cells and Rows and returns the layout rendering
+ * settings.
+ */ createLayout() {
+ Object.keys(this.options.chars).forEach((key)=>{
+ if (typeof this.options.chars[key] !== "string") {
+ this.options.chars[key] = "";
+ }
+ });
+ const hasBodyBorder = this.table.getBorder() || this.table.hasBodyBorder();
+ const hasHeaderBorder = this.table.hasHeaderBorder();
+ const hasBorder = hasHeaderBorder || hasBodyBorder;
+ const rows = this.#getRows();
+ const columns = Math.max(...rows.map((row)=>row.length));
+ for (const row of rows){
+ const length = row.length;
+ if (length < columns) {
+ const diff = columns - length;
+ for(let i = 0; i < diff; i++){
+ row.push(this.createCell(null, row));
+ }
+ }
+ }
+ const padding = [];
+ const width = [];
+ for(let colIndex = 0; colIndex < columns; colIndex++){
+ const minColWidth = Array.isArray(this.options.minColWidth) ? this.options.minColWidth[colIndex] : this.options.minColWidth;
+ const maxColWidth = Array.isArray(this.options.maxColWidth) ? this.options.maxColWidth[colIndex] : this.options.maxColWidth;
+ const colWidth = longest(colIndex, rows, maxColWidth);
+ width[colIndex] = Math.min(maxColWidth, Math.max(minColWidth, colWidth));
+ padding[colIndex] = Array.isArray(this.options.padding) ? this.options.padding[colIndex] : this.options.padding;
+ }
+ return {
+ padding,
+ width,
+ rows,
+ columns,
+ hasBorder,
+ hasBodyBorder,
+ hasHeaderBorder
+ };
+ }
+ #getRows() {
+ const header = this.table.getHeader();
+ const rows = header ? [
+ header,
+ ...this.table
+ ] : this.table.slice();
+ const hasSpan = rows.some((row)=>row.some((cell)=>cell instanceof Cell && (cell.getColSpan() > 1 || cell.getRowSpan() > 1)));
+ if (hasSpan) {
+ return this.spanRows(rows);
+ }
+ return rows.map((row)=>{
+ const newRow = this.createRow(row);
+ for(let i = 0; i < row.length; i++){
+ newRow[i] = this.createCell(row[i], newRow);
+ }
+ return newRow;
+ });
+ }
+ /**
+ * Fills rows and cols by specified row/col span with a reference of the
+ * original cell.
+ */ spanRows(rows) {
+ const rowSpan = [];
+ let colSpan = 1;
+ let rowIndex = -1;
+ while(true){
+ rowIndex++;
+ if (rowIndex === rows.length && rowSpan.every((span)=>span === 1)) {
+ break;
+ }
+ const row = rows[rowIndex] = this.createRow(rows[rowIndex] || []);
+ let colIndex = -1;
+ while(true){
+ colIndex++;
+ if (colIndex === row.length && colIndex === rowSpan.length && colSpan === 1) {
+ break;
+ }
+ if (colSpan > 1) {
+ colSpan--;
+ rowSpan[colIndex] = rowSpan[colIndex - 1];
+ row.splice(colIndex, this.getDeleteCount(rows, rowIndex, colIndex), row[colIndex - 1]);
+ continue;
+ }
+ if (rowSpan[colIndex] > 1) {
+ rowSpan[colIndex]--;
+ rows[rowIndex].splice(colIndex, this.getDeleteCount(rows, rowIndex, colIndex), rows[rowIndex - 1][colIndex]);
+ continue;
+ }
+ const cell = row[colIndex] = this.createCell(row[colIndex] || null, row);
+ colSpan = cell.getColSpan();
+ rowSpan[colIndex] = cell.getRowSpan();
+ }
+ }
+ return rows;
+ }
+ getDeleteCount(rows, rowIndex, colIndex) {
+ return colIndex <= rows[rowIndex].length - 1 && typeof rows[rowIndex][colIndex] === "undefined" ? 1 : 0;
+ }
+ /**
+ * Create a new row from existing row or cell array.
+ * @param row Original row.
+ */ createRow(row) {
+ return Row.from(row).border(this.table.getBorder(), false).align(this.table.getAlign(), false);
+ }
+ /**
+ * Create a new cell from existing cell or cell value.
+ * @param cell Original cell.
+ * @param row Parent row.
+ */ createCell(cell, row) {
+ return Cell.from(cell ?? "").border(row.getBorder(), false).align(row.getAlign(), false);
+ }
+ /**
+ * Render table layout.
+ * @param opts Render options.
+ */ renderRows(opts) {
+ let result = "";
+ const rowSpan = new Array(opts.columns).fill(1);
+ for(let rowIndex = 0; rowIndex < opts.rows.length; rowIndex++){
+ result += this.renderRow(rowSpan, rowIndex, opts);
+ }
+ return result.slice(0, -1);
+ }
+ /**
+ * Render row.
+ * @param rowSpan Current row span.
+ * @param rowIndex Current row index.
+ * @param opts Render options.
+ * @param isMultiline Is multiline row.
+ */ renderRow(rowSpan, rowIndex, opts, isMultiline) {
+ const row = opts.rows[rowIndex];
+ const prevRow = opts.rows[rowIndex - 1];
+ const nextRow = opts.rows[rowIndex + 1];
+ let result = "";
+ let colSpan = 1;
+ // border top row
+ if (!isMultiline && rowIndex === 0 && row.hasBorder()) {
+ result += this.renderBorderRow(undefined, row, rowSpan, opts);
+ }
+ let isMultilineRow = false;
+ result += " ".repeat(this.options.indent || 0);
+ for(let colIndex = 0; colIndex < opts.columns; colIndex++){
+ if (colSpan > 1) {
+ colSpan--;
+ rowSpan[colIndex] = rowSpan[colIndex - 1];
+ continue;
+ }
+ result += this.renderCell(colIndex, row, opts);
+ if (rowSpan[colIndex] > 1) {
+ if (!isMultiline) {
+ rowSpan[colIndex]--;
+ }
+ } else if (!prevRow || prevRow[colIndex] !== row[colIndex]) {
+ rowSpan[colIndex] = row[colIndex].getRowSpan();
+ }
+ colSpan = row[colIndex].getColSpan();
+ if (rowSpan[colIndex] === 1 && row[colIndex].length) {
+ isMultilineRow = true;
+ }
+ }
+ if (opts.columns > 0) {
+ if (row[opts.columns - 1].getBorder()) {
+ result += this.options.chars.right;
+ } else if (opts.hasBorder) {
+ result += " ";
+ }
+ }
+ result += "\n";
+ if (isMultilineRow) {
+ return result + this.renderRow(rowSpan, rowIndex, opts, isMultilineRow);
+ }
+ // border mid row
+ if (rowIndex === 0 && opts.hasHeaderBorder || rowIndex < opts.rows.length - 1 && opts.hasBodyBorder) {
+ result += this.renderBorderRow(row, nextRow, rowSpan, opts);
+ }
+ // border bottom row
+ if (rowIndex === opts.rows.length - 1 && row.hasBorder()) {
+ result += this.renderBorderRow(row, undefined, rowSpan, opts);
+ }
+ return result;
+ }
+ /**
+ * Render cell.
+ * @param colIndex Current col index.
+ * @param row Current row.
+ * @param opts Render options.
+ * @param noBorder Disable border.
+ */ renderCell(colIndex, row, opts, noBorder) {
+ let result = "";
+ const prevCell = row[colIndex - 1];
+ const cell = row[colIndex];
+ if (!noBorder) {
+ if (colIndex === 0) {
+ if (cell.getBorder()) {
+ result += this.options.chars.left;
+ } else if (opts.hasBorder) {
+ result += " ";
+ }
+ } else {
+ if (cell.getBorder() || prevCell?.getBorder()) {
+ result += this.options.chars.middle;
+ } else if (opts.hasBorder) {
+ result += " ";
+ }
+ }
+ }
+ let maxLength = opts.width[colIndex];
+ const colSpan = cell.getColSpan();
+ if (colSpan > 1) {
+ for(let o = 1; o < colSpan; o++){
+ // add padding and with of next cell
+ maxLength += opts.width[colIndex + o] + opts.padding[colIndex + o];
+ if (opts.hasBorder) {
+ // add padding again and border with
+ maxLength += opts.padding[colIndex + o] + 1;
+ }
+ }
+ }
+ const { current, next } = this.renderCellValue(cell, maxLength);
+ row[colIndex].setValue(next);
+ if (opts.hasBorder) {
+ result += " ".repeat(opts.padding[colIndex]);
+ }
+ result += current;
+ if (opts.hasBorder || colIndex < opts.columns - 1) {
+ result += " ".repeat(opts.padding[colIndex]);
+ }
+ return result;
+ }
+ /**
+ * Render specified length of cell. Returns the rendered value and a new cell
+ * with the rest value.
+ * @param cell Cell to render.
+ * @param maxLength Max length of content to render.
+ */ renderCellValue(cell, maxLength) {
+ const length = Math.min(maxLength, strLength(cell.toString()));
+ let words = consumeWords(length, cell.toString());
+ // break word if word is longer than max length
+ const breakWord = strLength(words) > length;
+ if (breakWord) {
+ words = words.slice(0, length);
+ }
+ // get next content and remove leading space if breakWord is not true
+ const next = cell.toString().slice(words.length + (breakWord ? 0 : 1));
+ const fillLength = maxLength - strLength(words);
+ // Align content
+ const align = cell.getAlign();
+ let current;
+ if (fillLength === 0) {
+ current = words;
+ } else if (align === "left") {
+ current = words + " ".repeat(fillLength);
+ } else if (align === "center") {
+ current = " ".repeat(Math.floor(fillLength / 2)) + words + " ".repeat(Math.ceil(fillLength / 2));
+ } else if (align === "right") {
+ current = " ".repeat(fillLength) + words;
+ } else {
+ throw new Error("Unknown direction: " + align);
+ }
+ return {
+ current,
+ next: cell.clone(next)
+ };
+ }
+ /**
+ * Render border row.
+ * @param prevRow Previous row.
+ * @param nextRow Next row.
+ * @param rowSpan Current row span.
+ * @param opts Render options.
+ */ renderBorderRow(prevRow, nextRow, rowSpan, opts) {
+ let result = "";
+ let colSpan = 1;
+ for(let colIndex = 0; colIndex < opts.columns; colIndex++){
+ if (rowSpan[colIndex] > 1) {
+ if (!nextRow) {
+ throw new Error("invalid layout");
+ }
+ if (colSpan > 1) {
+ colSpan--;
+ continue;
+ }
+ }
+ result += this.renderBorderCell(colIndex, prevRow, nextRow, rowSpan, opts);
+ colSpan = nextRow?.[colIndex].getColSpan() ?? 1;
+ }
+ return result.length ? " ".repeat(this.options.indent) + result + "\n" : "";
+ }
+ /**
+ * Render border cell.
+ * @param colIndex Current index.
+ * @param prevRow Previous row.
+ * @param nextRow Next row.
+ * @param rowSpan Current row span.
+ * @param opts Render options.
+ */ renderBorderCell(colIndex, prevRow, nextRow, rowSpan, opts) {
+ // a1 | b1
+ // -------
+ // a2 | b2
+ const a1 = prevRow?.[colIndex - 1];
+ const a2 = nextRow?.[colIndex - 1];
+ const b1 = prevRow?.[colIndex];
+ const b2 = nextRow?.[colIndex];
+ const a1Border = !!a1?.getBorder();
+ const a2Border = !!a2?.getBorder();
+ const b1Border = !!b1?.getBorder();
+ const b2Border = !!b2?.getBorder();
+ const hasColSpan = (cell)=>(cell?.getColSpan() ?? 1) > 1;
+ const hasRowSpan = (cell)=>(cell?.getRowSpan() ?? 1) > 1;
+ let result = "";
+ if (colIndex === 0) {
+ if (rowSpan[colIndex] > 1) {
+ if (b1Border) {
+ result += this.options.chars.left;
+ } else {
+ result += " ";
+ }
+ } else if (b1Border && b2Border) {
+ result += this.options.chars.leftMid;
+ } else if (b1Border) {
+ result += this.options.chars.bottomLeft;
+ } else if (b2Border) {
+ result += this.options.chars.topLeft;
+ } else {
+ result += " ";
+ }
+ } else if (colIndex < opts.columns) {
+ if (a1Border && b2Border || b1Border && a2Border) {
+ const a1ColSpan = hasColSpan(a1);
+ const a2ColSpan = hasColSpan(a2);
+ const b1ColSpan = hasColSpan(b1);
+ const b2ColSpan = hasColSpan(b2);
+ const a1RowSpan = hasRowSpan(a1);
+ const a2RowSpan = hasRowSpan(a2);
+ const b1RowSpan = hasRowSpan(b1);
+ const b2RowSpan = hasRowSpan(b2);
+ const hasAllBorder = a1Border && b2Border && b1Border && a2Border;
+ const hasAllRowSpan = a1RowSpan && b1RowSpan && a2RowSpan && b2RowSpan;
+ const hasAllColSpan = a1ColSpan && b1ColSpan && a2ColSpan && b2ColSpan;
+ if (hasAllRowSpan && hasAllBorder) {
+ result += this.options.chars.middle;
+ } else if (hasAllColSpan && hasAllBorder && a1 === b1 && a2 === b2) {
+ result += this.options.chars.mid;
+ } else if (a1ColSpan && b1ColSpan && a1 === b1) {
+ result += this.options.chars.topMid;
+ } else if (a2ColSpan && b2ColSpan && a2 === b2) {
+ result += this.options.chars.bottomMid;
+ } else if (a1RowSpan && a2RowSpan && a1 === a2) {
+ result += this.options.chars.leftMid;
+ } else if (b1RowSpan && b2RowSpan && b1 === b2) {
+ result += this.options.chars.rightMid;
+ } else {
+ result += this.options.chars.midMid;
+ }
+ } else if (a1Border && b1Border) {
+ if (hasColSpan(a1) && hasColSpan(b1) && a1 === b1) {
+ result += this.options.chars.bottom;
+ } else {
+ result += this.options.chars.bottomMid;
+ }
+ } else if (b1Border && b2Border) {
+ if (rowSpan[colIndex] > 1) {
+ result += this.options.chars.left;
+ } else {
+ result += this.options.chars.leftMid;
+ }
+ } else if (b2Border && a2Border) {
+ if (hasColSpan(a2) && hasColSpan(b2) && a2 === b2) {
+ result += this.options.chars.top;
+ } else {
+ result += this.options.chars.topMid;
+ }
+ } else if (a1Border && a2Border) {
+ if (hasRowSpan(a1) && a1 === a2) {
+ result += this.options.chars.right;
+ } else {
+ result += this.options.chars.rightMid;
+ }
+ } else if (a1Border) {
+ result += this.options.chars.bottomRight;
+ } else if (b1Border) {
+ result += this.options.chars.bottomLeft;
+ } else if (a2Border) {
+ result += this.options.chars.topRight;
+ } else if (b2Border) {
+ result += this.options.chars.topLeft;
+ } else {
+ result += " ";
+ }
+ }
+ const length = opts.padding[colIndex] + opts.width[colIndex] + opts.padding[colIndex];
+ if (rowSpan[colIndex] > 1 && nextRow) {
+ result += this.renderCell(colIndex, nextRow, opts, true);
+ if (nextRow[colIndex] === nextRow[nextRow.length - 1]) {
+ if (b1Border) {
+ result += this.options.chars.right;
+ } else {
+ result += " ";
+ }
+ return result;
+ }
+ } else if (b1Border && b2Border) {
+ result += this.options.chars.mid.repeat(length);
+ } else if (b1Border) {
+ result += this.options.chars.bottom.repeat(length);
+ } else if (b2Border) {
+ result += this.options.chars.top.repeat(length);
+ } else {
+ result += " ".repeat(length);
+ }
+ if (colIndex === opts.columns - 1) {
+ if (b1Border && b2Border) {
+ result += this.options.chars.rightMid;
+ } else if (b1Border) {
+ result += this.options.chars.bottomRight;
+ } else if (b2Border) {
+ result += this.options.chars.topRight;
+ } else {
+ result += " ";
+ }
+ }
+ return result;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvbGF5b3V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENlbGwsIERpcmVjdGlvbiwgSUNlbGwgfSBmcm9tIFwiLi9jZWxsLnRzXCI7XG5pbXBvcnQgeyBJUm93LCBSb3cgfSBmcm9tIFwiLi9yb3cudHNcIjtcbmltcG9ydCB0eXBlIHsgSUJvcmRlck9wdGlvbnMsIElUYWJsZVNldHRpbmdzLCBUYWJsZSB9IGZyb20gXCIuL3RhYmxlLnRzXCI7XG5pbXBvcnQgeyBjb25zdW1lV29yZHMsIGxvbmdlc3QsIHN0ckxlbmd0aCB9IGZyb20gXCIuL3V0aWxzLnRzXCI7XG5cbi8qKiBMYXlvdXQgcmVuZGVyIHNldHRpbmdzLiAqL1xuaW50ZXJmYWNlIElSZW5kZXJTZXR0aW5ncyB7XG4gIHBhZGRpbmc6IG51bWJlcltdO1xuICB3aWR0aDogbnVtYmVyW107XG4gIGNvbHVtbnM6IG51bWJlcjtcbiAgaGFzQm9yZGVyOiBib29sZWFuO1xuICBoYXNIZWFkZXJCb3JkZXI6IGJvb2xlYW47XG4gIGhhc0JvZHlCb3JkZXI6IGJvb2xlYW47XG4gIHJvd3M6IFJvdzxDZWxsPltdO1xufVxuXG4vKiogVGFibGUgbGF5b3V0IHJlbmRlcmVyLiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlTGF5b3V0IHtcbiAgLyoqXG4gICAqIFRhYmxlIGxheW91dCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHRhYmxlICAgVGFibGUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIFJlbmRlciBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFibGU6IFRhYmxlLFxuICAgIHByaXZhdGUgb3B0aW9uczogSVRhYmxlU2V0dGluZ3MsXG4gICkge31cblxuICAvKiogR2VuZXJhdGUgdGFibGUgc3RyaW5nLiAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcHRzOiBJUmVuZGVyU2V0dGluZ3MgPSB0aGlzLmNyZWF0ZUxheW91dCgpO1xuICAgIHJldHVybiBvcHRzLnJvd3MubGVuZ3RoID8gdGhpcy5yZW5kZXJSb3dzKG9wdHMpIDogXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGFibGUgbGF5b3V0IGluY2x1ZGluZyByb3cgYW5kIGNvbCBzcGFuLCBjb252ZXJ0cyBhbGwgbm9uZVxuICAgKiBDZWxsL1JvdyB2YWx1ZXMgdG8gQ2VsbHMgYW5kIFJvd3MgYW5kIHJldHVybnMgdGhlIGxheW91dCByZW5kZXJpbmdcbiAgICogc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlTGF5b3V0KCk6IElSZW5kZXJTZXR0aW5ncyB7XG4gICAgT2JqZWN0LmtleXModGhpcy5vcHRpb25zLmNoYXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY2hhcnNba2V5IGFzIGtleW9mIElCb3JkZXJPcHRpb25zXSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuY2hhcnNba2V5IGFzIGtleW9mIElCb3JkZXJPcHRpb25zXSA9IFwiXCI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNCb2R5Qm9yZGVyOiBib29sZWFuID0gdGhpcy50YWJsZS5nZXRCb3JkZXIoKSB8fFxuICAgICAgdGhpcy50YWJsZS5oYXNCb2R5Qm9yZGVyKCk7XG4gICAgY29uc3QgaGFzSGVhZGVyQm9yZGVyOiBib29sZWFuID0gdGhpcy50YWJsZS5oYXNIZWFkZXJCb3JkZXIoKTtcbiAgICBjb25zdCBoYXNCb3JkZXI6IGJvb2xlYW4gPSBoYXNIZWFkZXJCb3JkZXIgfHwgaGFzQm9keUJvcmRlcjtcblxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLiNnZXRSb3dzKCk7XG5cbiAgICBjb25zdCBjb2x1bW5zOiBudW1iZXIgPSBNYXRoLm1heCguLi5yb3dzLm1hcCgocm93KSA9PiByb3cubGVuZ3RoKSk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgY29uc3QgbGVuZ3RoOiBudW1iZXIgPSByb3cubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IGNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IGNvbHVtbnMgLSBsZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZjsgaSsrKSB7XG4gICAgICAgICAgcm93LnB1c2godGhpcy5jcmVhdGVDZWxsKG51bGwsIHJvdykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFkZGluZzogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCB3aWR0aDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY29sdW1uczsgY29sSW5kZXgrKykge1xuICAgICAgY29uc3QgbWluQ29sV2lkdGg6IG51bWJlciA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLm1pbkNvbFdpZHRoKVxuICAgICAgICA/IHRoaXMub3B0aW9ucy5taW5Db2xXaWR0aFtjb2xJbmRleF1cbiAgICAgICAgOiB0aGlzLm9wdGlvbnMubWluQ29sV2lkdGg7XG4gICAgICBjb25zdCBtYXhDb2xXaWR0aDogbnVtYmVyID0gQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMubWF4Q29sV2lkdGgpXG4gICAgICAgID8gdGhpcy5vcHRpb25zLm1heENvbFdpZHRoW2NvbEluZGV4XVxuICAgICAgICA6IHRoaXMub3B0aW9ucy5tYXhDb2xXaWR0aDtcbiAgICAgIGNvbnN0IGNvbFdpZHRoOiBudW1iZXIgPSBsb25nZXN0KGNvbEluZGV4LCByb3dzLCBtYXhDb2xXaWR0aCk7XG4gICAgICB3aWR0aFtjb2xJbmRleF0gPSBNYXRoLm1pbihtYXhDb2xXaWR0aCwgTWF0aC5tYXgobWluQ29sV2lkdGgsIGNvbFdpZHRoKSk7XG4gICAgICBwYWRkaW5nW2NvbEluZGV4XSA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnBhZGRpbmcpXG4gICAgICAgID8gdGhpcy5vcHRpb25zLnBhZGRpbmdbY29sSW5kZXhdXG4gICAgICAgIDogdGhpcy5vcHRpb25zLnBhZGRpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZGRpbmcsXG4gICAgICB3aWR0aCxcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5zLFxuICAgICAgaGFzQm9yZGVyLFxuICAgICAgaGFzQm9keUJvcmRlcixcbiAgICAgIGhhc0hlYWRlckJvcmRlcixcbiAgICB9O1xuICB9XG5cbiAgI2dldFJvd3MoKTogQXJyYXk8Um93PENlbGw+PiB7XG4gICAgY29uc3QgaGVhZGVyOiBSb3cgfCB1bmRlZmluZWQgPSB0aGlzLnRhYmxlLmdldEhlYWRlcigpO1xuICAgIGNvbnN0IHJvd3MgPSBoZWFkZXIgPyBbaGVhZGVyLCAuLi50aGlzLnRhYmxlXSA6IHRoaXMudGFibGUuc2xpY2UoKTtcbiAgICBjb25zdCBoYXNTcGFuID0gcm93cy5zb21lKChyb3cpID0+XG4gICAgICByb3cuc29tZSgoY2VsbCkgPT5cbiAgICAgICAgY2VsbCBpbnN0YW5jZW9mIENlbGwgJiYgKGNlbGwuZ2V0Q29sU3BhbigpID4gMSB8fCBjZWxsLmdldFJvd1NwYW4oKSA+IDEpXG4gICAgICApXG4gICAgKTtcblxuICAgIGlmIChoYXNTcGFuKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGFuUm93cyhyb3dzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3QgbmV3Um93ID0gdGhpcy5jcmVhdGVSb3cocm93KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld1Jvd1tpXSA9IHRoaXMuY3JlYXRlQ2VsbChyb3dbaV0sIG5ld1Jvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3Um93O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbGxzIHJvd3MgYW5kIGNvbHMgYnkgc3BlY2lmaWVkIHJvdy9jb2wgc3BhbiB3aXRoIGEgcmVmZXJlbmNlIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBjZWxsLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNwYW5Sb3dzKHJvd3M6IEFycmF5PElSb3c+KSB7XG4gICAgY29uc3Qgcm93U3BhbjogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgIGxldCBjb2xTcGFuID0gMTtcbiAgICBsZXQgcm93SW5kZXggPSAtMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICByb3dJbmRleCsrO1xuICAgICAgaWYgKHJvd0luZGV4ID09PSByb3dzLmxlbmd0aCAmJiByb3dTcGFuLmV2ZXJ5KChzcGFuKSA9PiBzcGFuID09PSAxKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvdyA9IHJvd3Nbcm93SW5kZXhdID0gdGhpcy5jcmVhdGVSb3cocm93c1tyb3dJbmRleF0gfHwgW10pO1xuICAgICAgbGV0IGNvbEluZGV4ID0gLTE7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xJbmRleCA9PT0gcm93Lmxlbmd0aCAmJlxuICAgICAgICAgIGNvbEluZGV4ID09PSByb3dTcGFuLmxlbmd0aCAmJiBjb2xTcGFuID09PSAxXG4gICAgICAgICkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbFNwYW4gPiAxKSB7XG4gICAgICAgICAgY29sU3Bhbi0tO1xuICAgICAgICAgIHJvd1NwYW5bY29sSW5kZXhdID0gcm93U3Bhbltjb2xJbmRleCAtIDFdO1xuICAgICAgICAgIHJvdy5zcGxpY2UoXG4gICAgICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgICAgIHRoaXMuZ2V0RGVsZXRlQ291bnQocm93cywgcm93SW5kZXgsIGNvbEluZGV4KSxcbiAgICAgICAgICAgIHJvd1tjb2xJbmRleCAtIDFdLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3dTcGFuW2NvbEluZGV4XSA+IDEpIHtcbiAgICAgICAgICByb3dTcGFuW2NvbEluZGV4XS0tO1xuICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnNwbGljZShcbiAgICAgICAgICAgIGNvbEluZGV4LFxuICAgICAgICAgICAgdGhpcy5nZXREZWxldGVDb3VudChyb3dzLCByb3dJbmRleCwgY29sSW5kZXgpLFxuICAgICAgICAgICAgcm93c1tyb3dJbmRleCAtIDFdW2NvbEluZGV4XSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbEluZGV4XSA9IHRoaXMuY3JlYXRlQ2VsbChcbiAgICAgICAgICByb3dbY29sSW5kZXhdIHx8IG51bGwsXG4gICAgICAgICAgcm93LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbFNwYW4gPSBjZWxsLmdldENvbFNwYW4oKTtcbiAgICAgICAgcm93U3Bhbltjb2xJbmRleF0gPSBjZWxsLmdldFJvd1NwYW4oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm93cyBhcyBBcnJheTxSb3c8Q2VsbD4+O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERlbGV0ZUNvdW50KFxuICAgIHJvd3M6IEFycmF5PEFycmF5PHVua25vd24+PixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICkge1xuICAgIHJldHVybiBjb2xJbmRleCA8PSByb3dzW3Jvd0luZGV4XS5sZW5ndGggLSAxICYmXG4gICAgICAgIHR5cGVvZiByb3dzW3Jvd0luZGV4XVtjb2xJbmRleF0gPT09IFwidW5kZWZpbmVkXCJcbiAgICAgID8gMVxuICAgICAgOiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyByb3cgZnJvbSBleGlzdGluZyByb3cgb3IgY2VsbCBhcnJheS5cbiAgICogQHBhcmFtIHJvdyBPcmlnaW5hbCByb3cuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogSVJvdyk6IFJvdzxDZWxsPiB7XG4gICAgcmV0dXJuIFJvdy5mcm9tKHJvdylcbiAgICAgIC5ib3JkZXIodGhpcy50YWJsZS5nZXRCb3JkZXIoKSwgZmFsc2UpXG4gICAgICAuYWxpZ24odGhpcy50YWJsZS5nZXRBbGlnbigpLCBmYWxzZSkgYXMgUm93PENlbGw+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBjZWxsIGZyb20gZXhpc3RpbmcgY2VsbCBvciBjZWxsIHZhbHVlLlxuICAgKiBAcGFyYW0gY2VsbCAgT3JpZ2luYWwgY2VsbC5cbiAgICogQHBhcmFtIHJvdyAgIFBhcmVudCByb3cuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjZWxsOiBJQ2VsbCB8IG51bGwgfCB1bmRlZmluZWQsIHJvdzogUm93KTogQ2VsbCB7XG4gICAgcmV0dXJuIENlbGwuZnJvbShjZWxsID8/IFwiXCIpXG4gICAgICAuYm9yZGVyKHJvdy5nZXRCb3JkZXIoKSwgZmFsc2UpXG4gICAgICAuYWxpZ24ocm93LmdldEFsaWduKCksIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGFibGUgbGF5b3V0LlxuICAgKiBAcGFyYW0gb3B0cyBSZW5kZXIgb3B0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKG9wdHM6IElSZW5kZXJTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgY29uc3Qgcm93U3BhbjogbnVtYmVyW10gPSBuZXcgQXJyYXkob3B0cy5jb2x1bW5zKS5maWxsKDEpO1xuXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IG9wdHMucm93cy5sZW5ndGg7IHJvd0luZGV4KyspIHtcbiAgICAgIHJlc3VsdCArPSB0aGlzLnJlbmRlclJvdyhyb3dTcGFuLCByb3dJbmRleCwgb3B0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHJvdy5cbiAgICogQHBhcmFtIHJvd1NwYW4gICAgIEN1cnJlbnQgcm93IHNwYW4uXG4gICAqIEBwYXJhbSByb3dJbmRleCAgICBDdXJyZW50IHJvdyBpbmRleC5cbiAgICogQHBhcmFtIG9wdHMgICAgICAgIFJlbmRlciBvcHRpb25zLlxuICAgKiBAcGFyYW0gaXNNdWx0aWxpbmUgSXMgbXVsdGlsaW5lIHJvdy5cbiAgICovXG4gIHByb3RlY3RlZCByZW5kZXJSb3coXG4gICAgcm93U3BhbjogbnVtYmVyW10sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBvcHRzOiBJUmVuZGVyU2V0dGluZ3MsXG4gICAgaXNNdWx0aWxpbmU/OiBib29sZWFuLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvdzogUm93PENlbGw+ID0gb3B0cy5yb3dzW3Jvd0luZGV4XTtcbiAgICBjb25zdCBwcmV2Um93OiBSb3c8Q2VsbD4gfCB1bmRlZmluZWQgPSBvcHRzLnJvd3Nbcm93SW5kZXggLSAxXTtcbiAgICBjb25zdCBuZXh0Um93OiBSb3c8Q2VsbD4gfCB1bmRlZmluZWQgPSBvcHRzLnJvd3Nbcm93SW5kZXggKyAxXTtcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcblxuICAgIGxldCBjb2xTcGFuID0gMTtcblxuICAgIC8vIGJvcmRlciB0b3Agcm93XG4gICAgaWYgKCFpc011bHRpbGluZSAmJiByb3dJbmRleCA9PT0gMCAmJiByb3cuaGFzQm9yZGVyKCkpIHtcbiAgICAgIHJlc3VsdCArPSB0aGlzLnJlbmRlckJvcmRlclJvdyh1bmRlZmluZWQsIHJvdywgcm93U3Bhbiwgb3B0cyk7XG4gICAgfVxuXG4gICAgbGV0IGlzTXVsdGlsaW5lUm93ID0gZmFsc2U7XG5cbiAgICByZXN1bHQgKz0gXCIgXCIucmVwZWF0KHRoaXMub3B0aW9ucy5pbmRlbnQgfHwgMCk7XG5cbiAgICBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgb3B0cy5jb2x1bW5zOyBjb2xJbmRleCsrKSB7XG4gICAgICBpZiAoY29sU3BhbiA+IDEpIHtcbiAgICAgICAgY29sU3Bhbi0tO1xuICAgICAgICByb3dTcGFuW2NvbEluZGV4XSA9IHJvd1NwYW5bY29sSW5kZXggLSAxXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSB0aGlzLnJlbmRlckNlbGwoY29sSW5kZXgsIHJvdywgb3B0cyk7XG5cbiAgICAgIGlmIChyb3dTcGFuW2NvbEluZGV4XSA+IDEpIHtcbiAgICAgICAgaWYgKCFpc011bHRpbGluZSkge1xuICAgICAgICAgIHJvd1NwYW5bY29sSW5kZXhdLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXByZXZSb3cgfHwgcHJldlJvd1tjb2xJbmRleF0gIT09IHJvd1tjb2xJbmRleF0pIHtcbiAgICAgICAgcm93U3Bhbltjb2xJbmRleF0gPSByb3dbY29sSW5kZXhdLmdldFJvd1NwYW4oKTtcbiAgICAgIH1cblxuICAgICAgY29sU3BhbiA9IHJvd1tjb2xJbmRleF0uZ2V0Q29sU3BhbigpO1xuXG4gICAgICBpZiAocm93U3Bhbltjb2xJbmRleF0gPT09IDEgJiYgcm93W2NvbEluZGV4XS5sZW5ndGgpIHtcbiAgICAgICAgaXNNdWx0aWxpbmVSb3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRzLmNvbHVtbnMgPiAwKSB7XG4gICAgICBpZiAocm93W29wdHMuY29sdW1ucyAtIDFdLmdldEJvcmRlcigpKSB7XG4gICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMucmlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKG9wdHMuaGFzQm9yZGVyKSB7XG4gICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgKz0gXCJcXG5cIjtcblxuICAgIGlmIChpc011bHRpbGluZVJvdykgeyAvLyBza2lwIGJvcmRlclxuICAgICAgcmV0dXJuIHJlc3VsdCArIHRoaXMucmVuZGVyUm93KHJvd1NwYW4sIHJvd0luZGV4LCBvcHRzLCBpc011bHRpbGluZVJvdyk7XG4gICAgfVxuXG4gICAgLy8gYm9yZGVyIG1pZCByb3dcbiAgICBpZiAoXG4gICAgICAocm93SW5kZXggPT09IDAgJiYgb3B0cy5oYXNIZWFkZXJCb3JkZXIpIHx8XG4gICAgICAocm93SW5kZXggPCBvcHRzLnJvd3MubGVuZ3RoIC0gMSAmJiBvcHRzLmhhc0JvZHlCb3JkZXIpXG4gICAgKSB7XG4gICAgICByZXN1bHQgKz0gdGhpcy5yZW5kZXJCb3JkZXJSb3cocm93LCBuZXh0Um93LCByb3dTcGFuLCBvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBib3JkZXIgYm90dG9tIHJvd1xuICAgIGlmIChyb3dJbmRleCA9PT0gb3B0cy5yb3dzLmxlbmd0aCAtIDEgJiYgcm93Lmhhc0JvcmRlcigpKSB7XG4gICAgICByZXN1bHQgKz0gdGhpcy5yZW5kZXJCb3JkZXJSb3cocm93LCB1bmRlZmluZWQsIHJvd1NwYW4sIG9wdHMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGNlbGwuXG4gICAqIEBwYXJhbSBjb2xJbmRleCAgQ3VycmVudCBjb2wgaW5kZXguXG4gICAqIEBwYXJhbSByb3cgICAgICAgQ3VycmVudCByb3cuXG4gICAqIEBwYXJhbSBvcHRzICAgICAgUmVuZGVyIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBub0JvcmRlciAgRGlzYWJsZSBib3JkZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyQ2VsbChcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHJvdzogUm93PENlbGw+LFxuICAgIG9wdHM6IElSZW5kZXJTZXR0aW5ncyxcbiAgICBub0JvcmRlcj86IGJvb2xlYW4sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgY29uc3QgcHJldkNlbGw6IENlbGwgfCB1bmRlZmluZWQgPSByb3dbY29sSW5kZXggLSAxXTtcblxuICAgIGNvbnN0IGNlbGw6IENlbGwgPSByb3dbY29sSW5kZXhdO1xuXG4gICAgaWYgKCFub0JvcmRlcikge1xuICAgICAgaWYgKGNvbEluZGV4ID09PSAwKSB7XG4gICAgICAgIGlmIChjZWxsLmdldEJvcmRlcigpKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5sZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG9wdHMuaGFzQm9yZGVyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2VsbC5nZXRCb3JkZXIoKSB8fCBwcmV2Q2VsbD8uZ2V0Qm9yZGVyKCkpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLm1pZGRsZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRzLmhhc0JvcmRlcikge1xuICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBtYXhMZW5ndGg6IG51bWJlciA9IG9wdHMud2lkdGhbY29sSW5kZXhdO1xuXG4gICAgY29uc3QgY29sU3BhbjogbnVtYmVyID0gY2VsbC5nZXRDb2xTcGFuKCk7XG4gICAgaWYgKGNvbFNwYW4gPiAxKSB7XG4gICAgICBmb3IgKGxldCBvID0gMTsgbyA8IGNvbFNwYW47IG8rKykge1xuICAgICAgICAvLyBhZGQgcGFkZGluZyBhbmQgd2l0aCBvZiBuZXh0IGNlbGxcbiAgICAgICAgbWF4TGVuZ3RoICs9IG9wdHMud2lkdGhbY29sSW5kZXggKyBvXSArIG9wdHMucGFkZGluZ1tjb2xJbmRleCArIG9dO1xuICAgICAgICBpZiAob3B0cy5oYXNCb3JkZXIpIHtcbiAgICAgICAgICAvLyBhZGQgcGFkZGluZyBhZ2FpbiBhbmQgYm9yZGVyIHdpdGhcbiAgICAgICAgICBtYXhMZW5ndGggKz0gb3B0cy5wYWRkaW5nW2NvbEluZGV4ICsgb10gKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBjdXJyZW50LCBuZXh0IH0gPSB0aGlzLnJlbmRlckNlbGxWYWx1ZShjZWxsLCBtYXhMZW5ndGgpO1xuXG4gICAgcm93W2NvbEluZGV4XS5zZXRWYWx1ZShuZXh0KTtcblxuICAgIGlmIChvcHRzLmhhc0JvcmRlcikge1xuICAgICAgcmVzdWx0ICs9IFwiIFwiLnJlcGVhdChvcHRzLnBhZGRpbmdbY29sSW5kZXhdKTtcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gY3VycmVudDtcblxuICAgIGlmIChvcHRzLmhhc0JvcmRlciB8fCBjb2xJbmRleCA8IG9wdHMuY29sdW1ucyAtIDEpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIi5yZXBlYXQob3B0cy5wYWRkaW5nW2NvbEluZGV4XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgc3BlY2lmaWVkIGxlbmd0aCBvZiBjZWxsLiBSZXR1cm5zIHRoZSByZW5kZXJlZCB2YWx1ZSBhbmQgYSBuZXcgY2VsbFxuICAgKiB3aXRoIHRoZSByZXN0IHZhbHVlLlxuICAgKiBAcGFyYW0gY2VsbCAgICAgIENlbGwgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0gbWF4TGVuZ3RoIE1heCBsZW5ndGggb2YgY29udGVudCB0byByZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyQ2VsbFZhbHVlKFxuICAgIGNlbGw6IENlbGwsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICk6IHsgY3VycmVudDogc3RyaW5nOyBuZXh0OiBDZWxsIH0ge1xuICAgIGNvbnN0IGxlbmd0aDogbnVtYmVyID0gTWF0aC5taW4oXG4gICAgICBtYXhMZW5ndGgsXG4gICAgICBzdHJMZW5ndGgoY2VsbC50b1N0cmluZygpKSxcbiAgICApO1xuICAgIGxldCB3b3Jkczogc3RyaW5nID0gY29uc3VtZVdvcmRzKGxlbmd0aCwgY2VsbC50b1N0cmluZygpKTtcblxuICAgIC8vIGJyZWFrIHdvcmQgaWYgd29yZCBpcyBsb25nZXIgdGhhbiBtYXggbGVuZ3RoXG4gICAgY29uc3QgYnJlYWtXb3JkID0gc3RyTGVuZ3RoKHdvcmRzKSA+IGxlbmd0aDtcbiAgICBpZiAoYnJlYWtXb3JkKSB7XG4gICAgICB3b3JkcyA9IHdvcmRzLnNsaWNlKDAsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IG5leHQgY29udGVudCBhbmQgcmVtb3ZlIGxlYWRpbmcgc3BhY2UgaWYgYnJlYWtXb3JkIGlzIG5vdCB0cnVlXG4gICAgY29uc3QgbmV4dCA9IGNlbGwudG9TdHJpbmcoKS5zbGljZSh3b3Jkcy5sZW5ndGggKyAoYnJlYWtXb3JkID8gMCA6IDEpKTtcbiAgICBjb25zdCBmaWxsTGVuZ3RoID0gbWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKHdvcmRzKTtcblxuICAgIC8vIEFsaWduIGNvbnRlbnRcbiAgICBjb25zdCBhbGlnbjogRGlyZWN0aW9uID0gY2VsbC5nZXRBbGlnbigpO1xuICAgIGxldCBjdXJyZW50OiBzdHJpbmc7XG4gICAgaWYgKGZpbGxMZW5ndGggPT09IDApIHtcbiAgICAgIGN1cnJlbnQgPSB3b3JkcztcbiAgICB9IGVsc2UgaWYgKGFsaWduID09PSBcImxlZnRcIikge1xuICAgICAgY3VycmVudCA9IHdvcmRzICsgXCIgXCIucmVwZWF0KGZpbGxMZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICAgIGN1cnJlbnQgPSBcIiBcIi5yZXBlYXQoTWF0aC5mbG9vcihmaWxsTGVuZ3RoIC8gMikpICsgd29yZHMgK1xuICAgICAgICBcIiBcIi5yZXBlYXQoTWF0aC5jZWlsKGZpbGxMZW5ndGggLyAyKSk7XG4gICAgfSBlbHNlIGlmIChhbGlnbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICBjdXJyZW50ID0gXCIgXCIucmVwZWF0KGZpbGxMZW5ndGgpICsgd29yZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGlyZWN0aW9uOiBcIiArIGFsaWduKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudCxcbiAgICAgIG5leHQ6IGNlbGwuY2xvbmUobmV4dCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYm9yZGVyIHJvdy5cbiAgICogQHBhcmFtIHByZXZSb3cgUHJldmlvdXMgcm93LlxuICAgKiBAcGFyYW0gbmV4dFJvdyBOZXh0IHJvdy5cbiAgICogQHBhcmFtIHJvd1NwYW4gQ3VycmVudCByb3cgc3Bhbi5cbiAgICogQHBhcmFtIG9wdHMgICAgUmVuZGVyIG9wdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyQm9yZGVyUm93KFxuICAgIHByZXZSb3c6IFJvdzxDZWxsPiB8IHVuZGVmaW5lZCxcbiAgICBuZXh0Um93OiBSb3c8Q2VsbD4gfCB1bmRlZmluZWQsXG4gICAgcm93U3BhbjogbnVtYmVyW10sXG4gICAgb3B0czogSVJlbmRlclNldHRpbmdzLFxuICApOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuXG4gICAgbGV0IGNvbFNwYW4gPSAxO1xuICAgIGZvciAobGV0IGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCBvcHRzLmNvbHVtbnM7IGNvbEluZGV4KyspIHtcbiAgICAgIGlmIChyb3dTcGFuW2NvbEluZGV4XSA+IDEpIHtcbiAgICAgICAgaWYgKCFuZXh0Um93KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBsYXlvdXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbFNwYW4gPiAxKSB7XG4gICAgICAgICAgY29sU3Bhbi0tO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gdGhpcy5yZW5kZXJCb3JkZXJDZWxsKFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgcHJldlJvdyxcbiAgICAgICAgbmV4dFJvdyxcbiAgICAgICAgcm93U3BhbixcbiAgICAgICAgb3B0cyxcbiAgICAgICk7XG4gICAgICBjb2xTcGFuID0gbmV4dFJvdz8uW2NvbEluZGV4XS5nZXRDb2xTcGFuKCkgPz8gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA/IFwiIFwiLnJlcGVhdCh0aGlzLm9wdGlvbnMuaW5kZW50KSArIHJlc3VsdCArIFwiXFxuXCIgOiBcIlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBib3JkZXIgY2VsbC5cbiAgICogQHBhcmFtIGNvbEluZGV4ICBDdXJyZW50IGluZGV4LlxuICAgKiBAcGFyYW0gcHJldlJvdyAgIFByZXZpb3VzIHJvdy5cbiAgICogQHBhcmFtIG5leHRSb3cgICBOZXh0IHJvdy5cbiAgICogQHBhcmFtIHJvd1NwYW4gICBDdXJyZW50IHJvdyBzcGFuLlxuICAgKiBAcGFyYW0gb3B0cyAgICAgIFJlbmRlciBvcHRpb25zLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbmRlckJvcmRlckNlbGwoXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBwcmV2Um93OiBSb3c8Q2VsbD4gfCB1bmRlZmluZWQsXG4gICAgbmV4dFJvdzogUm93PENlbGw+IHwgdW5kZWZpbmVkLFxuICAgIHJvd1NwYW46IG51bWJlcltdLFxuICAgIG9wdHM6IElSZW5kZXJTZXR0aW5ncyxcbiAgKTogc3RyaW5nIHtcbiAgICAvLyBhMSB8IGIxXG4gICAgLy8gLS0tLS0tLVxuICAgIC8vIGEyIHwgYjJcblxuICAgIGNvbnN0IGExOiBDZWxsIHwgdW5kZWZpbmVkID0gcHJldlJvdz8uW2NvbEluZGV4IC0gMV07XG4gICAgY29uc3QgYTI6IENlbGwgfCB1bmRlZmluZWQgPSBuZXh0Um93Py5bY29sSW5kZXggLSAxXTtcbiAgICBjb25zdCBiMTogQ2VsbCB8IHVuZGVmaW5lZCA9IHByZXZSb3c/Lltjb2xJbmRleF07XG4gICAgY29uc3QgYjI6IENlbGwgfCB1bmRlZmluZWQgPSBuZXh0Um93Py5bY29sSW5kZXhdO1xuXG4gICAgY29uc3QgYTFCb3JkZXIgPSAhIWExPy5nZXRCb3JkZXIoKTtcbiAgICBjb25zdCBhMkJvcmRlciA9ICEhYTI/LmdldEJvcmRlcigpO1xuICAgIGNvbnN0IGIxQm9yZGVyID0gISFiMT8uZ2V0Qm9yZGVyKCk7XG4gICAgY29uc3QgYjJCb3JkZXIgPSAhIWIyPy5nZXRCb3JkZXIoKTtcblxuICAgIGNvbnN0IGhhc0NvbFNwYW4gPSAoY2VsbDogQ2VsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgICAgIChjZWxsPy5nZXRDb2xTcGFuKCkgPz8gMSkgPiAxO1xuICAgIGNvbnN0IGhhc1Jvd1NwYW4gPSAoY2VsbDogQ2VsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgICAgIChjZWxsPy5nZXRSb3dTcGFuKCkgPz8gMSkgPiAxO1xuXG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG5cbiAgICBpZiAoY29sSW5kZXggPT09IDApIHtcbiAgICAgIGlmIChyb3dTcGFuW2NvbEluZGV4XSA+IDEpIHtcbiAgICAgICAgaWYgKGIxQm9yZGVyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5sZWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChiMUJvcmRlciAmJiBiMkJvcmRlcikge1xuICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLmxlZnRNaWQ7XG4gICAgICB9IGVsc2UgaWYgKGIxQm9yZGVyKSB7XG4gICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMuYm90dG9tTGVmdDtcbiAgICAgIH0gZWxzZSBpZiAoYjJCb3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy50b3BMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sSW5kZXggPCBvcHRzLmNvbHVtbnMpIHtcbiAgICAgIGlmICgoYTFCb3JkZXIgJiYgYjJCb3JkZXIpIHx8IChiMUJvcmRlciAmJiBhMkJvcmRlcikpIHtcbiAgICAgICAgY29uc3QgYTFDb2xTcGFuOiBib29sZWFuID0gaGFzQ29sU3BhbihhMSk7XG4gICAgICAgIGNvbnN0IGEyQ29sU3BhbjogYm9vbGVhbiA9IGhhc0NvbFNwYW4oYTIpO1xuICAgICAgICBjb25zdCBiMUNvbFNwYW46IGJvb2xlYW4gPSBoYXNDb2xTcGFuKGIxKTtcbiAgICAgICAgY29uc3QgYjJDb2xTcGFuOiBib29sZWFuID0gaGFzQ29sU3BhbihiMik7XG5cbiAgICAgICAgY29uc3QgYTFSb3dTcGFuOiBib29sZWFuID0gaGFzUm93U3BhbihhMSk7XG4gICAgICAgIGNvbnN0IGEyUm93U3BhbjogYm9vbGVhbiA9IGhhc1Jvd1NwYW4oYTIpO1xuICAgICAgICBjb25zdCBiMVJvd1NwYW46IGJvb2xlYW4gPSBoYXNSb3dTcGFuKGIxKTtcbiAgICAgICAgY29uc3QgYjJSb3dTcGFuOiBib29sZWFuID0gaGFzUm93U3BhbihiMik7XG5cbiAgICAgICAgY29uc3QgaGFzQWxsQm9yZGVyID0gYTFCb3JkZXIgJiYgYjJCb3JkZXIgJiYgYjFCb3JkZXIgJiYgYTJCb3JkZXI7XG4gICAgICAgIGNvbnN0IGhhc0FsbFJvd1NwYW4gPSBhMVJvd1NwYW4gJiYgYjFSb3dTcGFuICYmIGEyUm93U3BhbiAmJiBiMlJvd1NwYW47XG4gICAgICAgIGNvbnN0IGhhc0FsbENvbFNwYW4gPSBhMUNvbFNwYW4gJiYgYjFDb2xTcGFuICYmIGEyQ29sU3BhbiAmJiBiMkNvbFNwYW47XG5cbiAgICAgICAgaWYgKGhhc0FsbFJvd1NwYW4gJiYgaGFzQWxsQm9yZGVyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5taWRkbGU7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzQWxsQ29sU3BhbiAmJiBoYXNBbGxCb3JkZXIgJiYgYTEgPT09IGIxICYmIGEyID09PSBiMikge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMubWlkO1xuICAgICAgICB9IGVsc2UgaWYgKGExQ29sU3BhbiAmJiBiMUNvbFNwYW4gJiYgYTEgPT09IGIxKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy50b3BNaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoYTJDb2xTcGFuICYmIGIyQ29sU3BhbiAmJiBhMiA9PT0gYjIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLmJvdHRvbU1pZDtcbiAgICAgICAgfSBlbHNlIGlmIChhMVJvd1NwYW4gJiYgYTJSb3dTcGFuICYmIGExID09PSBhMikge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMubGVmdE1pZDtcbiAgICAgICAgfSBlbHNlIGlmIChiMVJvd1NwYW4gJiYgYjJSb3dTcGFuICYmIGIxID09PSBiMikge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMucmlnaHRNaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5taWRNaWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYTFCb3JkZXIgJiYgYjFCb3JkZXIpIHtcbiAgICAgICAgaWYgKGhhc0NvbFNwYW4oYTEpICYmIGhhc0NvbFNwYW4oYjEpICYmIGExID09PSBiMSkge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMuYm90dG9tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMuYm90dG9tTWlkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGIxQm9yZGVyICYmIGIyQm9yZGVyKSB7XG4gICAgICAgIGlmIChyb3dTcGFuW2NvbEluZGV4XSA+IDEpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLmxlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5sZWZ0TWlkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGIyQm9yZGVyICYmIGEyQm9yZGVyKSB7XG4gICAgICAgIGlmIChoYXNDb2xTcGFuKGEyKSAmJiBoYXNDb2xTcGFuKGIyKSAmJiBhMiA9PT0gYjIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLnRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLnRvcE1pZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhMUJvcmRlciAmJiBhMkJvcmRlcikge1xuICAgICAgICBpZiAoaGFzUm93U3BhbihhMSkgJiYgYTEgPT09IGEyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5yaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLnJpZ2h0TWlkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGExQm9yZGVyKSB7XG4gICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMuYm90dG9tUmlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKGIxQm9yZGVyKSB7XG4gICAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMuYm90dG9tTGVmdDtcbiAgICAgIH0gZWxzZSBpZiAoYTJCb3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy50b3BSaWdodDtcbiAgICAgIH0gZWxzZSBpZiAoYjJCb3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy50b3BMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IG9wdHMucGFkZGluZ1tjb2xJbmRleF0gKyBvcHRzLndpZHRoW2NvbEluZGV4XSArXG4gICAgICBvcHRzLnBhZGRpbmdbY29sSW5kZXhdO1xuXG4gICAgaWYgKHJvd1NwYW5bY29sSW5kZXhdID4gMSAmJiBuZXh0Um93KSB7XG4gICAgICByZXN1bHQgKz0gdGhpcy5yZW5kZXJDZWxsKFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgbmV4dFJvdyxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBpZiAobmV4dFJvd1tjb2xJbmRleF0gPT09IG5leHRSb3dbbmV4dFJvdy5sZW5ndGggLSAxXSkge1xuICAgICAgICBpZiAoYjFCb3JkZXIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5vcHRpb25zLmNoYXJzLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYjFCb3JkZXIgJiYgYjJCb3JkZXIpIHtcbiAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMubWlkLnJlcGVhdChsZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYjFCb3JkZXIpIHtcbiAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMuYm90dG9tLnJlcGVhdChsZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYjJCb3JkZXIpIHtcbiAgICAgIHJlc3VsdCArPSB0aGlzLm9wdGlvbnMuY2hhcnMudG9wLnJlcGVhdChsZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIucmVwZWF0KGxlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbEluZGV4ID09PSBvcHRzLmNvbHVtbnMgLSAxKSB7XG4gICAgICBpZiAoYjFCb3JkZXIgJiYgYjJCb3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5yaWdodE1pZDtcbiAgICAgIH0gZWxzZSBpZiAoYjFCb3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy5ib3R0b21SaWdodDtcbiAgICAgIH0gZWxzZSBpZiAoYjJCb3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMub3B0aW9ucy5jaGFycy50b3BSaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxJQUFJLFFBQTBCLFlBQVk7QUFDbkQsU0FBZSxHQUFHLFFBQVEsV0FBVztBQUVyQyxTQUFTLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxRQUFRLGFBQWE7QUFhOUQsMkJBQTJCLEdBQzNCLE9BQU8sTUFBTTs7O0VBQ1g7Ozs7R0FJQyxHQUNELFlBQ0UsQUFBUSxLQUFZLEVBQ3BCLEFBQVEsT0FBdUIsQ0FDL0I7U0FGUSxRQUFBO1NBQ0EsVUFBQTtFQUNQO0VBRUgsMkJBQTJCLEdBQzNCLEFBQU8sV0FBbUI7SUFDeEIsTUFBTSxPQUF3QixJQUFJLENBQUMsWUFBWTtJQUMvQyxPQUFPLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7RUFDcEQ7RUFFQTs7OztHQUlDLEdBQ0QsQUFBVSxlQUFnQztJQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztNQUN2QyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFL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
+// denoCacheMetadata=8038561412818060895,3966861733942881635 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5779c67789adb09e546f79f1878945b92e09269f0b16f320148de168e98a8226.js b/vendor/gen/https/deno.land/5779c67789adb09e546f79f1878945b92e09269f0b16f320148de168e98a8226.js
new file mode 100644
index 0000000..090a505
--- /dev/null
+++ b/vendor/gen/https/deno.land/5779c67789adb09e546f79f1878945b92e09269f0b16f320148de168e98a8226.js
@@ -0,0 +1,106 @@
+import { brightBlue, dim, underline, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+import { GenericPrompt } from "./_generic_prompt.ts";
+/** Toggle prompt representation. */ export class Toggle extends GenericPrompt {
+ status = typeof this.settings.default !== "undefined" ? this.format(this.settings.default) : "";
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ if (typeof options === "string") {
+ options = {
+ message: options
+ };
+ }
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ active: "Yes",
+ inactive: "No",
+ ...options,
+ keys: {
+ active: [
+ "right",
+ "y",
+ "j",
+ "s",
+ "o"
+ ],
+ inactive: [
+ "left",
+ "n"
+ ],
+ ...options.keys ?? {}
+ }
+ }).prompt();
+ }
+ message() {
+ let message = super.message() + " " + this.settings.pointer + " ";
+ if (this.status === this.settings.active) {
+ message += dim(this.settings.inactive + " / ") + underline(this.settings.active);
+ } else if (this.status === this.settings.inactive) {
+ message += underline(this.settings.inactive) + dim(" / " + this.settings.active);
+ } else {
+ message += dim(this.settings.inactive + " / " + this.settings.active);
+ }
+ return message;
+ }
+ /** Read user input from stdin, handle events and validate user input. */ read() {
+ this.tty.cursorHide();
+ return super.read();
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case event.sequence === this.settings.inactive[0].toLowerCase():
+ case this.isKey(this.settings.keys, "inactive", event):
+ this.selectInactive();
+ break;
+ case event.sequence === this.settings.active[0].toLowerCase():
+ case this.isKey(this.settings.keys, "active", event):
+ this.selectActive();
+ break;
+ default:
+ await super.handleEvent(event);
+ }
+ }
+ /** Set active. */ selectActive() {
+ this.status = this.settings.active;
+ }
+ /** Set inactive. */ selectInactive() {
+ this.status = this.settings.inactive;
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ return [
+ this.settings.active,
+ this.settings.inactive
+ ].indexOf(value) !== -1;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ switch(value){
+ case this.settings.active:
+ return true;
+ case this.settings.inactive:
+ return false;
+ }
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return value ? this.settings.active : this.settings.inactive;
+ }
+ /** Get input value. */ getValue() {
+ return this.status;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L3RvZ2dsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEtleUNvZGUgfSBmcm9tIFwiLi4va2V5Y29kZS9rZXlfY29kZS50c1wiO1xuaW1wb3J0IHsgYnJpZ2h0Qmx1ZSwgZGltLCB1bmRlcmxpbmUsIHllbGxvdyB9IGZyb20gXCIuL2RlcHMudHNcIjtcbmltcG9ydCB7IEZpZ3VyZXMgfSBmcm9tIFwiLi9maWd1cmVzLnRzXCI7XG5pbXBvcnQge1xuICBHZW5lcmljUHJvbXB0LFxuICBHZW5lcmljUHJvbXB0S2V5cyxcbiAgR2VuZXJpY1Byb21wdE9wdGlvbnMsXG4gIEdlbmVyaWNQcm9tcHRTZXR0aW5ncyxcbn0gZnJvbSBcIi4vX2dlbmVyaWNfcHJvbXB0LnRzXCI7XG5cbi8qKiBUb2dnbGUga2V5IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvZ2dsZUtleXMgZXh0ZW5kcyBHZW5lcmljUHJvbXB0S2V5cyB7XG4gIGFjdGl2ZT86IHN0cmluZ1tdO1xuICBpbmFjdGl2ZT86IHN0cmluZ1tdO1xufVxuXG4vKiogR2VuZXJpYyBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9nZ2xlT3B0aW9ucyBleHRlbmRzIEdlbmVyaWNQcm9tcHRPcHRpb25zPGJvb2xlYW4sIHN0cmluZz4ge1xuICBhY3RpdmU/OiBzdHJpbmc7XG4gIGluYWN0aXZlPzogc3RyaW5nO1xuICBrZXlzPzogVG9nZ2xlS2V5cztcbn1cblxuLyoqIFRvZ2dsZSBwcm9tcHQgc2V0dGluZ3MuICovXG5pbnRlcmZhY2UgVG9nZ2xlU2V0dGluZ3MgZXh0ZW5kcyBHZW5lcmljUHJvbXB0U2V0dGluZ3M8Ym9vbGVhbiwgc3RyaW5nPiB7XG4gIGFjdGl2ZTogc3RyaW5nO1xuICBpbmFjdGl2ZTogc3RyaW5nO1xuICBrZXlzOiBUb2dnbGVLZXlzO1xufVxuXG4vKiogVG9nZ2xlIHByb21wdCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBUb2dnbGUgZXh0ZW5kcyBHZW5lcmljUHJvbXB0PGJvb2xlYW4sIHN0cmluZywgVG9nZ2xlU2V0dGluZ3M+IHtcbiAgcHJvdGVjdGVkIHN0YXR1czogc3RyaW5nID0gdHlwZW9mIHRoaXMuc2V0dGluZ3MuZGVmYXVsdCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gdGhpcy5mb3JtYXQodGhpcy5zZXR0aW5ncy5kZWZhdWx0KVxuICAgIDogXCJcIjtcblxuICAvKiogRXhlY3V0ZSB0aGUgcHJvbXB0IGFuZCBzaG93IGN1cnNvciBvbiBlbmQuICovXG4gIHB1YmxpYyBzdGF0aWMgcHJvbXB0KFxuICAgIG9wdGlvbnM6IHN0cmluZyB8IFRvZ2dsZU9wdGlvbnMsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgb3B0aW9ucyA9IHsgbWVzc2FnZTogb3B0aW9ucyB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgdGhpcyh7XG4gICAgICBwb2ludGVyOiBicmlnaHRCbHVlKEZpZ3VyZXMuUE9JTlRFUl9TTUFMTCksXG4gICAgICBwcmVmaXg6IHllbGxvdyhcIj8gXCIpLFxuICAgICAgaW5kZW50OiBcIiBcIixcbiAgICAgIGFjdGl2ZTogXCJZZXNcIixcbiAgICAgIGluYWN0aXZlOiBcIk5vXCIsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAga2V5czoge1xuICAgICAgICBhY3RpdmU6IFtcInJpZ2h0XCIsIFwieVwiLCBcImpcIiwgXCJzXCIsIFwib1wiXSxcbiAgICAgICAgaW5hY3RpdmU6IFtcImxlZnRcIiwgXCJuXCJdLFxuICAgICAgICAuLi4ob3B0aW9ucy5rZXlzID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfSkucHJvbXB0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGxldCBtZXNzYWdlID0gc3VwZXIubWVzc2FnZSgpICsgXCIgXCIgKyB0aGlzLnNldHRpbmdzLnBvaW50ZXIgKyBcIiBcIjtcblxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gdGhpcy5zZXR0aW5ncy5hY3RpdmUpIHtcbiAgICAgIG1lc3NhZ2UgKz0gZGltKHRoaXMuc2V0dGluZ3MuaW5hY3RpdmUgKyBcIiAvIFwiKSArXG4gICAgICAgIHVuZGVybGluZSh0aGlzLnNldHRpbmdzLmFjdGl2ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gdGhpcy5zZXR0aW5ncy5pbmFjdGl2ZSkge1xuICAgICAgbWVzc2FnZSArPSB1bmRlcmxpbmUodGhpcy5zZXR0aW5ncy5pbmFjdGl2ZSkgK1xuICAgICAgICBkaW0oXCIgLyBcIiArIHRoaXMuc2V0dGluZ3MuYWN0aXZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSBkaW0odGhpcy5zZXR0aW5ncy5pbmFjdGl2ZSArIFwiIC8gXCIgKyB0aGlzLnNldHRpbmdzLmFjdGl2ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKiogUmVhZCB1c2VyIGlucHV0IGZyb20gc3RkaW4sIGhhbmRsZSBldmVudHMgYW5kIHZhbGlkYXRlIHVzZXIgaW5wdXQuICovXG4gIHByb3RlY3RlZCByZWFkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHR5LmN1cnNvckhpZGUoKTtcbiAgICByZXR1cm4gc3VwZXIucmVhZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB1c2VyIGlucHV0IGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgS2V5IGV2ZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUV2ZW50KGV2ZW50OiBLZXlDb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGV2ZW50LnNlcXVlbmNlID09PSB0aGlzLnNldHRpbmdzLmluYWN0aXZlWzBdLnRvTG93ZXJDYXNlKCk6XG4gICAgICBjYXNlIHRoaXMuaXNLZXkodGhpcy5zZXR0aW5ncy5rZXlzLCBcImluYWN0aXZlXCIsIGV2ZW50KTpcbiAgICAgICAgdGhpcy5zZWxlY3RJbmFjdGl2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZXZlbnQuc2VxdWVuY2UgPT09IHRoaXMuc2V0dGluZ3MuYWN0aXZlWzBdLnRvTG93ZXJDYXNlKCk6XG4gICAgICBjYXNlIHRoaXMuaXNLZXkodGhpcy5zZXR0aW5ncy5rZXlzLCBcImFjdGl2ZVwiLCBldmVudCk6XG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXdhaXQgc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXQgYWN0aXZlLiAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0QWN0aXZlKCkge1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy5zZXR0aW5ncy5hY3RpdmU7XG4gIH1cblxuICAvKiogU2V0IGluYWN0aXZlLiAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0SW5hY3RpdmUoKSB7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLnNldHRpbmdzLmluYWN0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlucHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVXNlciBpbnB1dCB2YWx1ZS5cbiAgICogQHJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9yIGVycm9yIG1lc3NhZ2Ugb24gZXJyb3IuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gfCBzdHJpbmcge1xuICAgIHJldHVybiBbdGhpcy5zZXR0aW5ncy5hY3RpdmUsIHRoaXMuc2V0dGluZ3MuaW5hY3RpdmVdLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgaW5wdXQgdmFsdWUgdG8gb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUuXG4gICAqIEByZXR1cm4gT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSB0aGlzLnNldHRpbmdzLmFjdGl2ZTpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIHRoaXMuc2V0dGluZ3MuaW5hY3RpdmU6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCBmb3JtYXQodmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuc2V0dGluZ3MuYWN0aXZlIDogdGhpcy5zZXR0aW5ncy5pbmFjdGl2ZTtcbiAgfVxuXG4gIC8qKiBHZXQgaW5wdXQgdmFsdWUuICovXG4gIHByb3RlY3RlZCBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cztcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLFlBQVk7QUFDL0QsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUNFLGFBQWEsUUFJUix1QkFBdUI7QUFzQjlCLGtDQUFrQyxHQUNsQyxPQUFPLE1BQU0sZUFBZTtFQUNoQixTQUFpQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLGNBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQ2pDLEdBQUc7RUFFUCwrQ0FBK0MsR0FDL0MsT0FBYyxPQUNaLE9BQStCLEVBQ2I7SUFD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
+// denoCacheMetadata=5219360132839952258,11511038125273424712 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5b428de6e3bbbea28f55a17efc24bdd837e6d4965d3340b81a2c99bc78318b66.js b/vendor/gen/https/deno.land/5b428de6e3bbbea28f55a17efc24bdd837e6d4965d3340b81a2c99bc78318b66.js
new file mode 100644
index 0000000..d91a75c
--- /dev/null
+++ b/vendor/gen/https/deno.land/5b428de6e3bbbea28f55a17efc24bdd837e6d4965d3340b81a2c99bc78318b66.js
@@ -0,0 +1,23 @@
+import { Command } from "../command.ts";
+import { dim, italic } from "../deps.ts";
+import { BashCompletionsGenerator } from "./_bash_completions_generator.ts";
+/** Generates bash completions script. */ export class BashCompletionsCommand extends Command {
+ #cmd;
+ constructor(cmd){
+ super();
+ this.#cmd = cmd;
+ return this.description(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ return `Generate shell completions for bash.
+
+To enable bash completions for this program add following line to your ${dim(italic("~/.bashrc"))}:
+
+ ${dim(italic(`source <(${baseCmd.getPath()} completions bash)`))}`;
+ }).noGlobals().action(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ console.log(BashCompletionsGenerator.generate(baseCmd));
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9iYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZC50c1wiO1xuaW1wb3J0IHsgZGltLCBpdGFsaWMgfSBmcm9tIFwiLi4vZGVwcy50c1wiO1xuaW1wb3J0IHsgQmFzaENvbXBsZXRpb25zR2VuZXJhdG9yIH0gZnJvbSBcIi4vX2Jhc2hfY29tcGxldGlvbnNfZ2VuZXJhdG9yLnRzXCI7XG5cbi8qKiBHZW5lcmF0ZXMgYmFzaCBjb21wbGV0aW9ucyBzY3JpcHQuICovXG5leHBvcnQgY2xhc3MgQmFzaENvbXBsZXRpb25zQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAjY21kPzogQ29tbWFuZDtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGNtZD86IENvbW1hbmQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI2NtZCA9IGNtZDtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmRlc2NyaXB0aW9uKCgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZUNtZCA9IHRoaXMuI2NtZCB8fCB0aGlzLmdldE1haW5Db21tYW5kKCk7XG4gICAgICAgIHJldHVybiBgR2VuZXJhdGUgc2hlbGwgY29tcGxldGlvbnMgZm9yIGJhc2guXG5cblRvIGVuYWJsZSBiYXNoIGNvbXBsZXRpb25zIGZvciB0aGlzIHByb2dyYW0gYWRkIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgJHtcbiAgICAgICAgICBkaW0oaXRhbGljKFwifi8uYmFzaHJjXCIpKVxuICAgICAgICB9OlxuXG4gICAgJHtkaW0oaXRhbGljKGBzb3VyY2UgPCgke2Jhc2VDbWQuZ2V0UGF0aCgpfSBjb21wbGV0aW9ucyBiYXNoKWApKX1gO1xuICAgICAgfSlcbiAgICAgIC5ub0dsb2JhbHMoKVxuICAgICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VDbWQgPSB0aGlzLiNjbWQgfHwgdGhpcy5nZXRNYWluQ29tbWFuZCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhCYXNoQ29tcGxldGlvbnNHZW5lcmF0b3IuZ2VuZXJhdGUoYmFzZUNtZCkpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLE9BQU8sUUFBUSxnQkFBZ0I7QUFDeEMsU0FBUyxHQUFHLEVBQUUsTUFBTSxRQUFRLGFBQWE7QUFDekMsU0FBUyx3QkFBd0IsUUFBUSxtQ0FBbUM7QUFFNUUsdUNBQXVDLEdBQ3ZDLE9BQU8sTUFBTSwrQkFBK0I7RUFDMUMsQ0FBQSxHQUFJLENBQVc7RUFDZixZQUFtQixHQUFhLENBQUU7SUFDaEMsS0FBSztJQUNMLElBQUksQ0FBQyxDQUFBLEdBQUksR0FBRztJQUNaLE9BQU8sSUFBSSxDQUNSLFdBQVcsQ0FBQztNQUNYLE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBQSxHQUFJLElBQUksSUFBSSxDQUFDLGNBQWM7TUFDaEQsT0FBTyxDQUFDOzt1RUFFdUQsRUFDN0QsSUFBSSxPQUFPLGNBQ1o7O0lBRUwsRUFBRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsSUFBSTtJQUNoRSxHQUNDLFNBQVMsR0FDVCxNQUFNLENBQUM7TUFDTixNQUFNLFVBQVUsSUFBSSxDQUFDLENBQUEsR0FBSSxJQUFJLElBQUksQ0FBQyxjQUFjO01BQ2hELFFBQVEsR0FBRyxDQUFDLHlCQUF5QixRQUFRLENBQUM7SUFDaEQ7RUFDSjtBQUNGIn0=
+// denoCacheMetadata=17880395243876625327,16064736319297981818 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5c5e6f23fc0fe5fd3624e053ce89fb815c0099343be1d7baddfd5cafeb0df6b7.js b/vendor/gen/https/deno.land/5c5e6f23fc0fe5fd3624e053ce89fb815c0099343be1d7baddfd5cafeb0df6b7.js
new file mode 100644
index 0000000..b8b6a14
--- /dev/null
+++ b/vendor/gen/https/deno.land/5c5e6f23fc0fe5fd3624e053ce89fb815c0099343be1d7baddfd5cafeb0df6b7.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/fs@1.0.17";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9mcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwianNyOkBzdGQvZnNAMS4wLjE3XCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIifQ==
+// denoCacheMetadata=6152266355417798437,7094576751012025521 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5c99d6eab6b2a302e3804cdb8da75892b986a62ca77652d6695c51f7865cd1b2.js b/vendor/gen/https/deno.land/5c99d6eab6b2a302e3804cdb8da75892b986a62ca77652d6695c51f7865cd1b2.js
new file mode 100644
index 0000000..ad78003
--- /dev/null
+++ b/vendor/gen/https/deno.land/5c99d6eab6b2a302e3804cdb8da75892b986a62ca77652d6695c51f7865cd1b2.js
@@ -0,0 +1,84 @@
+const HTMLCollectionFakeClass = (()=>{
+ var _computedKey;
+ _computedKey = Symbol.hasInstance;
+ return class HTMLCollection {
+ constructor(){
+ throw new TypeError("Illegal constructor");
+ }
+ static [_computedKey](value) {
+ return value.constructor === HTMLCollectionClass;
+ }
+ };
+})();
+export const HTMLCollectionMutatorSym = Symbol("HTMLCollectionMutatorSym");
+// We define the `HTMLCollection` inside a closure to ensure that its
+// `.name === "HTMLCollection"` property stays intact, as we need to manipulate
+// its prototype and completely change its TypeScript-recognized type.
+const HTMLCollectionClass = (()=>{
+ // @ts-ignore
+ class HTMLCollection extends Array {
+ forEach(cb, thisArg) {
+ super.forEach(cb, thisArg);
+ }
+ item(index) {
+ return this[index] ?? null;
+ }
+ [HTMLCollectionMutatorSym]() {
+ return {
+ push: Array.prototype.push.bind(this),
+ splice: Array.prototype.splice.bind(this),
+ indexOf: Array.prototype.indexOf.bind(this)
+ };
+ }
+ toString() {
+ return "[object HTMLCollection]";
+ }
+ }
+ return HTMLCollection;
+})();
+for (const staticMethod of [
+ "from",
+ "isArray",
+ "of"
+]){
+ HTMLCollectionClass[staticMethod] = undefined;
+}
+for (const instanceMethod of [
+ "concat",
+ "copyWithin",
+ "every",
+ "fill",
+ "filter",
+ "find",
+ "findIndex",
+ "flat",
+ "flatMap",
+ "includes",
+ "indexOf",
+ "join",
+ "lastIndexOf",
+ "map",
+ "pop",
+ "push",
+ "reduce",
+ "reduceRight",
+ "reverse",
+ "shift",
+ "slice",
+ "some",
+ "sort",
+ "splice",
+ "toLocaleString",
+ "unshift",
+ // Unlike NodeList, HTMLCollection also doesn't implement these
+ "entries",
+ "forEach",
+ "keys",
+ "values"
+]){
+ HTMLCollectionClass.prototype[instanceMethod] = undefined;
+}
+export const HTMLCollection = HTMLCollectionClass;
+export const HTMLCollectionPublic = HTMLCollectionFakeClass;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL2h0bWwtY29sbGVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LnRzXCI7XG5cbmNvbnN0IEhUTUxDb2xsZWN0aW9uRmFrZUNsYXNzOiBhbnkgPSAoKCkgPT4ge1xuICByZXR1cm4gY2xhc3MgSFRNTENvbGxlY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHZhbHVlOiBhbnkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gSFRNTENvbGxlY3Rpb25DbGFzcztcbiAgICB9XG4gIH07XG59KSgpO1xuXG5leHBvcnQgY29uc3QgSFRNTENvbGxlY3Rpb25NdXRhdG9yU3ltID0gU3ltYm9sKFwiSFRNTENvbGxlY3Rpb25NdXRhdG9yU3ltXCIpO1xuXG4vLyBXZSBkZWZpbmUgdGhlIGBIVE1MQ29sbGVjdGlvbmAgaW5zaWRlIGEgY2xvc3VyZSB0byBlbnN1cmUgdGhhdCBpdHNcbi8vIGAubmFtZSA9PT0gXCJIVE1MQ29sbGVjdGlvblwiYCBwcm9wZXJ0eSBzdGF5cyBpbnRhY3QsIGFzIHdlIG5lZWQgdG8gbWFuaXB1bGF0ZVxuLy8gaXRzIHByb3RvdHlwZSBhbmQgY29tcGxldGVseSBjaGFuZ2UgaXRzIFR5cGVTY3JpcHQtcmVjb2duaXplZCB0eXBlLlxuY29uc3QgSFRNTENvbGxlY3Rpb25DbGFzczogYW55ID0gKCgpID0+IHtcbiAgLy8gQHRzLWlnbm9yZVxuICBjbGFzcyBIVE1MQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PEVsZW1lbnQ+IHtcbiAgICBvdmVycmlkZSBmb3JFYWNoKFxuICAgICAgY2I6IChub2RlOiBFbGVtZW50LCBpbmRleDogbnVtYmVyLCBub2RlTGlzdDogRWxlbWVudFtdKSA9PiB2b2lkLFxuICAgICAgdGhpc0FyZz86IHVua25vd24sXG4gICAgKSB7XG4gICAgICBzdXBlci5mb3JFYWNoKGNiLCB0aGlzQXJnKTtcbiAgICB9XG5cbiAgICBpdGVtKGluZGV4OiBudW1iZXIpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICByZXR1cm4gdGhpc1tpbmRleF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBbSFRNTENvbGxlY3Rpb25NdXRhdG9yU3ltXSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHB1c2g6IEFycmF5LnByb3RvdHlwZS5wdXNoLmJpbmQodGhpcyksXG5cbiAgICAgICAgc3BsaWNlOiBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmJpbmQodGhpcyksXG5cbiAgICAgICAgaW5kZXhPZjogQXJyYXkucHJvdG90eXBlLmluZGV4T2YuYmluZCh0aGlzKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXVwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBIVE1MQ29sbGVjdGlvbjtcbn0pKCk7XG5cbmZvciAoXG4gIGNvbnN0IHN0YXRpY01ldGhvZCBvZiBbXG4gICAgXCJmcm9tXCIsXG4gICAgXCJpc0FycmF5XCIsXG4gICAgXCJvZlwiLFxuICBdXG4pIHtcbiAgSFRNTENvbGxlY3Rpb25DbGFzc1tzdGF0aWNNZXRob2RdID0gdW5kZWZpbmVkO1xufVxuXG5mb3IgKFxuICBjb25zdCBpbnN0YW5jZU1ldGhvZCBvZiBbXG4gICAgXCJjb25jYXRcIixcbiAgICBcImNvcHlXaXRoaW5cIixcbiAgICBcImV2ZXJ5XCIsXG4gICAgXCJmaWxsXCIsXG4gICAgXCJmaWx0ZXJcIixcbiAgICBcImZpbmRcIixcbiAgICBcImZpbmRJbmRleFwiLFxuICAgIFwiZmxhdFwiLFxuICAgIFwiZmxhdE1hcFwiLFxuICAgIFwiaW5jbHVkZXNcIixcbiAgICBcImluZGV4T2ZcIixcbiAgICBcImpvaW5cIixcbiAgICBcImxhc3RJbmRleE9mXCIsXG4gICAgXCJtYXBcIixcbiAgICBcInBvcFwiLFxuICAgIFwicHVzaFwiLFxuICAgIFwicmVkdWNlXCIsXG4gICAgXCJyZWR1Y2VSaWdodFwiLFxuICAgIFwicmV2ZXJzZVwiLFxuICAgIFwic2hpZnRcIixcbiAgICBcInNsaWNlXCIsXG4gICAgXCJzb21lXCIsXG4gICAgXCJzb3J0XCIsXG4gICAgXCJzcGxpY2VcIixcbiAgICBcInRvTG9jYWxlU3RyaW5nXCIsXG4gICAgXCJ1bnNoaWZ0XCIsXG5cbiAgICAvLyBVbmxpa2UgTm9kZUxpc3QsIEhUTUxDb2xsZWN0aW9uIGFsc28gZG9lc24ndCBpbXBsZW1lbnQgdGhlc2VcbiAgICBcImVudHJpZXNcIixcbiAgICBcImZvckVhY2hcIixcbiAgICBcImtleXNcIixcbiAgICBcInZhbHVlc1wiLFxuICBdXG4pIHtcbiAgSFRNTENvbGxlY3Rpb25DbGFzcy5wcm90b3R5cGVbaW5zdGFuY2VNZXRob2RdID0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhUTUxDb2xsZWN0aW9uIHtcbiAgbmV3ICgpOiBIVE1MQ29sbGVjdGlvbjtcbiAgcmVhZG9ubHkgW2luZGV4OiBudW1iZXJdOiBFbGVtZW50O1xuICByZWFkb25seSBsZW5ndGg6IG51bWJlcjtcbiAgW1N5bWJvbC5pdGVyYXRvcl0oKTogR2VuZXJhdG9yPEVsZW1lbnQ+O1xuXG4gIGl0ZW0oaW5kZXg6IG51bWJlcik6IEVsZW1lbnQ7XG4gIFtIVE1MQ29sbGVjdGlvbk11dGF0b3JTeW1dKCk6IEhUTUxDb2xsZWN0aW9uTXV0YXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQ29sbGVjdGlvblB1YmxpYyBleHRlbmRzIEhUTUxDb2xsZWN0aW9uIHtcbiAgW0hUTUxDb2xsZWN0aW9uTXV0YXRvclN5bV06IG5ldmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhUTUxDb2xsZWN0aW9uTXV0YXRvciB7XG4gIHB1c2goLi4uZWxlbWVudHM6IEVsZW1lbnRbXSk6IG51bWJlcjtcbiAgc3BsaWNlKHN0YXJ0OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogRWxlbWVudFtdKTogRWxlbWVudFtdO1xuICBpbmRleE9mKGVsZW1lbnQ6IEVsZW1lbnQsIGZyb21JbmRleD86IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEhUTUxDb2xsZWN0aW9uID0gPEhUTUxDb2xsZWN0aW9uPiBIVE1MQ29sbGVjdGlvbkNsYXNzO1xuZXhwb3J0IGNvbnN0IEhUTUxDb2xsZWN0aW9uUHVibGljID1cbiAgPEhUTUxDb2xsZWN0aW9uUHVibGljPiBIVE1MQ29sbGVjdGlvbkZha2VDbGFzcztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLDBCQUErQixDQUFDOztpQkFNMUIsT0FBTyxXQUFXO0VBTDVCLE9BQU8sTUFBTTtJQUNYLGFBQWM7TUFDWixNQUFNLElBQUksVUFBVTtJQUN0QjtJQUVBLHNCQUE0QixLQUFVLEVBQUU7TUFDdEMsT0FBTyxNQUFNLFdBQVcsS0FBSztJQUMvQjtFQUNGO0FBQ0YsQ0FBQztBQUVELE9BQU8sTUFBTSwyQkFBMkIsT0FBTyw0QkFBNEI7QUFFM0UscUVBQXFFO0FBQ3JFLCtFQUErRTtBQUMvRSxzRUFBc0U7QUFDdEUsTUFBTSxzQkFBMkIsQ0FBQztFQUNoQyxhQUFhO0VBQ2IsTUFBTSx1QkFBdUI7SUFDbEIsUUFDUCxFQUErRCxFQUMvRCxPQUFpQixFQUNqQjtNQUNBLEtBQUssQ0FBQyxRQUFRLElBQUk7SUFDcEI7SUFFQSxLQUFLLEtBQWEsRUFBa0I7TUFDbEMsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJO0lBQ3hCO0lBRUEsQ0FBQyx5QkFBeUIsR0FBRztNQUMzQixPQUFPO1FBQ0wsTUFBTSxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7UUFFcEMsUUFBUSxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7UUFFeEMsU0FBUyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7TUFDNUM7SUFDRjtJQUVTLFdBQVc7TUFDbEIsT0FBTztJQUNUO0VBQ0Y7RUFFQSxPQUFPO0FBQ1QsQ0FBQztBQUVELEtBQ0UsTUFBTSxnQkFBZ0I7RUFDcEI7RUFDQTtFQUNBO0NBQ0QsQ0FDRDtFQUNBLG1CQUFtQixDQUFDLGFBQWEsR0FBRztBQUN0QztBQUVBLEtBQ0UsTUFBTSxrQkFBa0I7RUFDdEI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBLCtEQUErRDtFQUMvRDtFQUNBO0VBQ0E7RUFDQTtDQUNELENBQ0Q7RUFDQSxvQkFBb0IsU0FBUyxDQUFDLGVBQWUsR0FBRztBQUNsRDtBQXNCQSxPQUFPLE1BQU0saUJBQWtDLG9CQUFvQjtBQUNuRSxPQUFPLE1BQU0sdUJBQ1ksd0JBQXdCIn0=
+// denoCacheMetadata=5666268327733017674,7027544850563545714 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5cf59b83b4328f5b9c4b3ac6b0494b532ac14b94623be56005e9736f1c3a229e.js b/vendor/gen/https/deno.land/5cf59b83b4328f5b9c4b3ac6b0494b532ac14b94623be56005e9736f1c3a229e.js
new file mode 100644
index 0000000..2067f34
--- /dev/null
+++ b/vendor/gen/https/deno.land/5cf59b83b4328f5b9c4b3ac6b0494b532ac14b94623be56005e9736f1c3a229e.js
@@ -0,0 +1,46 @@
+import { buildSite } from "./utils.ts";
+/** Build the website and optionally watch changes and serve the site */ export function build(config, serve, watch) {
+ if (!serve && !watch) {
+ buildSite(config);
+ return;
+ }
+ const workerUrl = import.meta.resolve("./build_worker.ts");
+ let worker;
+ function init() {
+ let type = "build";
+ if (worker) {
+ type = "rebuild";
+ worker.terminate();
+ }
+ worker = new Worker(workerUrl, {
+ type: "module"
+ });
+ worker.postMessage({
+ type: "localStorage",
+ data: {
+ ...localStorage
+ }
+ });
+ worker.postMessage({
+ type,
+ config,
+ serve
+ });
+ worker.onmessage = (event)=>{
+ switch(event.data.type){
+ case "reload":
+ init();
+ break;
+ case "localStorage":
+ {
+ const { method, args } = event.data;
+ localStorage[method](...args);
+ break;
+ }
+ }
+ };
+ }
+ init();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY2xpL2J1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkU2l0ZSB9IGZyb20gXCIuL3V0aWxzLnRzXCI7XG5cbi8qKiBCdWlsZCB0aGUgd2Vic2l0ZSBhbmQgb3B0aW9uYWxseSB3YXRjaCBjaGFuZ2VzIGFuZCBzZXJ2ZSB0aGUgc2l0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkKFxuICBjb25maWc6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc2VydmU/OiBib29sZWFuLFxuICB3YXRjaD86IGJvb2xlYW4sXG4pIHtcbiAgaWYgKCFzZXJ2ZSAmJiAhd2F0Y2gpIHtcbiAgICBidWlsZFNpdGUoY29uZmlnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3b3JrZXJVcmwgPSBpbXBvcnQubWV0YS5yZXNvbHZlKFwiLi9idWlsZF93b3JrZXIudHNcIik7XG4gIGxldCB3b3JrZXI6IFdvcmtlcjtcblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIGxldCB0eXBlID0gXCJidWlsZFwiO1xuXG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgdHlwZSA9IFwicmVidWlsZFwiO1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgIH1cblxuICAgIHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgIHR5cGU6IFwibG9jYWxTdG9yYWdlXCIsXG4gICAgICBkYXRhOiB7IC4uLmxvY2FsU3RvcmFnZSB9LFxuICAgIH0pO1xuXG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWcsXG4gICAgICBzZXJ2ZSxcbiAgICB9KTtcblxuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJyZWxvYWRcIjpcbiAgICAgICAgICBpbml0KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImxvY2FsU3RvcmFnZVwiOiB7XG4gICAgICAgICAgY29uc3QgeyBtZXRob2QsIGFyZ3MgfSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlW21ldGhvZF0oLi4uYXJncyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaW5pdCgpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsU0FBUyxRQUFRLGFBQWE7QUFFdkMsc0VBQXNFLEdBQ3RFLE9BQU8sU0FBUyxNQUNkLE1BQTBCLEVBQzFCLEtBQWUsRUFDZixLQUFlO0VBRWYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO0lBQ3BCLFVBQVU7SUFDVjtFQUNGO0VBRUEsTUFBTSxZQUFZLFlBQVksT0FBTyxDQUFDO0VBQ3RDLElBQUk7RUFFSixTQUFTO0lBQ1AsSUFBSSxPQUFPO0lBRVgsSUFBSSxRQUFRO01BQ1YsT0FBTztNQUNQLE9BQU8sU0FBUztJQUNsQjtJQUVBLFNBQVMsSUFBSSxPQUFPLFdBQVc7TUFBRSxNQUFNO0lBQVM7SUFDaEQsT0FBTyxXQUFXLENBQUM7TUFDakIsTUFBTTtNQUNOLE1BQU07UUFBRSxHQUFHLFlBQVk7TUFBQztJQUMxQjtJQUVBLE9BQU8sV0FBVyxDQUFDO01BQ2pCO01BQ0E7TUFDQTtJQUNGO0lBRUEsT0FBTyxTQUFTLEdBQUcsQ0FBQztNQUNsQixPQUFRLE1BQU0sSUFBSSxDQUFDLElBQUk7UUFDckIsS0FBSztVQUNIO1VBQ0E7UUFFRixLQUFLO1VBQWdCO1lBQ25CLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJO1lBQ25DLFlBQVksQ0FBQyxPQUFPLElBQUk7WUFDeEI7VUFDRjtNQUNGO0lBQ0Y7RUFDRjtFQUVBO0FBQ0YifQ==
+// denoCacheMetadata=17856252909624266890,704078317729229561 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5d7b7fa47314ea06dc93b7ed12a6fa7c29132c1808186406439d10c1e96d5919.js b/vendor/gen/https/deno.land/5d7b7fa47314ea06dc93b7ed12a6fa7c29132c1808186406439d10c1e96d5919.js
new file mode 100644
index 0000000..ca935a3
--- /dev/null
+++ b/vendor/gen/https/deno.land/5d7b7fa47314ea06dc93b7ed12a6fa7c29132c1808186406439d10c1e96d5919.js
@@ -0,0 +1,31 @@
+import analyze from "../src/js.ts";
+export default function() {
+ return (env)=>{
+ env.tags.push(includeTag);
+ };
+}
+function includeTag(env, code, output, tokens) {
+ if (!code.startsWith("include ")) {
+ return;
+ }
+ const tagCode = code.substring(7).trim();
+ let index = undefined;
+ analyze(tagCode, (type, i)=>{
+ if (type === "open-bracket") {
+ index = i - 1;
+ return false;
+ }
+ });
+ const file = index === undefined ? tagCode.trim() : tagCode.slice(0, index).trim();
+ const data = index === undefined ? "" : tagCode.slice(index).trim();
+ const { dataVarname } = env.options;
+ return `{
+ const __tmp = await __env.run(${file},
+ {...${dataVarname}${data ? `, ...${data}` : ""}},
+ __file
+ );
+ ${output} += ${env.compileFilters(tokens, "__tmp.content")};
+ }`;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2luY2x1ZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFuYWx5emUgZnJvbSBcIi4uL3NyYy9qcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuLi9zcmMvdG9rZW5pemVyLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50LCBQbHVnaW4gfSBmcm9tIFwiLi4vc3JjL2Vudmlyb25tZW50LnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBQbHVnaW4ge1xuICByZXR1cm4gKGVudjogRW52aXJvbm1lbnQpID0+IHtcbiAgICBlbnYudGFncy5wdXNoKGluY2x1ZGVUYWcpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlVGFnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjb2RlOiBzdHJpbmcsXG4gIG91dHB1dDogc3RyaW5nLFxuICB0b2tlbnM6IFRva2VuW10sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWNvZGUuc3RhcnRzV2l0aChcImluY2x1ZGUgXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdGFnQ29kZSA9IGNvZGUuc3Vic3RyaW5nKDcpLnRyaW0oKTtcbiAgbGV0IGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGFuYWx5emUodGFnQ29kZSwgKHR5cGUsIGkpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gXCJvcGVuLWJyYWNrZXRcIikge1xuICAgICAgaW5kZXggPSBpIC0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGZpbGUgPSBpbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgPyB0YWdDb2RlLnRyaW0oKVxuICAgIDogdGFnQ29kZS5zbGljZSgwLCBpbmRleCkudHJpbSgpO1xuICBjb25zdCBkYXRhID0gaW5kZXggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB0YWdDb2RlLnNsaWNlKGluZGV4KS50cmltKCk7XG4gIGNvbnN0IHsgZGF0YVZhcm5hbWUgfSA9IGVudi5vcHRpb25zO1xuICByZXR1cm4gYHtcbiAgICBjb25zdCBfX3RtcCA9IGF3YWl0IF9fZW52LnJ1bigke2ZpbGV9LFxuICAgICAgey4uLiR7ZGF0YVZhcm5hbWV9JHtkYXRhID8gYCwgLi4uJHtkYXRhfWAgOiBcIlwifX0sXG4gICAgICBfX2ZpbGVcbiAgICApO1xuICAgICR7b3V0cHV0fSArPSAke2Vudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIFwiX190bXAuY29udGVudFwiKX07XG4gIH1gO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSxlQUFlO0FBSW5DLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7QUFDRjtBQUVBLFNBQVMsV0FDUCxHQUFnQixFQUNoQixJQUFZLEVBQ1osTUFBYyxFQUNkLE1BQWU7RUFFZixJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsYUFBYTtJQUNoQztFQUNGO0VBRUEsTUFBTSxVQUFVLEtBQUssU0FBUyxDQUFDLEdBQUcsSUFBSTtFQUN0QyxJQUFJLFFBQTRCO0VBQ2hDLFFBQVEsU0FBUyxDQUFDLE1BQU07SUFDdEIsSUFBSSxTQUFTLGdCQUFnQjtNQUMzQixRQUFRLElBQUk7TUFDWixPQUFPO0lBQ1Q7RUFDRjtFQUVBLE1BQU0sT0FBTyxVQUFVLFlBQ25CLFFBQVEsSUFBSSxLQUNaLFFBQVEsS0FBSyxDQUFDLEdBQUcsT0FBTyxJQUFJO0VBQ2hDLE1BQU0sT0FBTyxVQUFVLFlBQVksS0FBSyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUk7RUFDakUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksT0FBTztFQUNuQyxPQUFPLENBQUM7a0NBQ3dCLEVBQUUsS0FBSztVQUMvQixFQUFFLGNBQWMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRzs7O0lBR2pELEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxjQUFjLENBQUMsUUFBUSxpQkFBaUI7R0FDNUQsQ0FBQztBQUNKIn0=
+// denoCacheMetadata=17965002445848566112,8970169969830990164 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/5f898e73824d4d9d5537fdd0382fb53ab3f27451cd351eb4ca9c5ef39294d020.js b/vendor/gen/https/deno.land/5f898e73824d4d9d5537fdd0382fb53ab3f27451cd351eb4ca9c5ef39294d020.js
new file mode 100644
index 0000000..d0a0325
--- /dev/null
+++ b/vendor/gen/https/deno.land/5f898e73824d4d9d5537fdd0382fb53ab3f27451cd351eb4ca9c5ef39294d020.js
@@ -0,0 +1,10 @@
+/** Add a header to prevent CORS errors (used in development) */ export function noCors() {
+ return async (request, next)=>{
+ const response = await next(request);
+ response.headers.set("access-control-allow-origin", "*");
+ return response;
+ };
+}
+export default noCors;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvbWlkZGxld2FyZXMvbm9fY29ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vY29yZS9zZXJ2ZXIudHNcIjtcblxuLyoqIEFkZCBhIGhlYWRlciB0byBwcmV2ZW50IENPUlMgZXJyb3JzICh1c2VkIGluIGRldmVsb3BtZW50KSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vQ29ycygpOiBNaWRkbGV3YXJlIHtcbiAgcmV0dXJuIGFzeW5jIChyZXF1ZXN0LCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCIsIFwiKlwiKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbm9Db3JzO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLDhEQUE4RCxHQUM5RCxPQUFPLFNBQVM7RUFDZCxPQUFPLE9BQU8sU0FBUztJQUNyQixNQUFNLFdBQVcsTUFBTSxLQUFLO0lBQzVCLFNBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0I7SUFFcEQsT0FBTztFQUNUO0FBQ0Y7QUFFQSxlQUFlLE9BQU8ifQ==
+// denoCacheMetadata=15615845805327988936,11140548136144068879 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/60080fb447981c47ec60891798c3c8b0b7d5e32272bf01020b18f565b5229795.js b/vendor/gen/https/deno.land/60080fb447981c47ec60891798c3c8b0b7d5e32272bf01020b18f565b5229795.js
new file mode 100644
index 0000000..7500798
--- /dev/null
+++ b/vendor/gen/https/deno.land/60080fb447981c47ec60891798c3c8b0b7d5e32272bf01020b18f565b5229795.js
@@ -0,0 +1,233 @@
+import { tty } from "../ansi/tty.ts";
+import { parse } from "../keycode/key_code.ts";
+import { bold, brightBlue, dim, green, italic, red, stripColor } from "./deps.ts";
+import { Figures } from "./figures.ts";
+/** Generic prompt representation. */ export class GenericPrompt {
+ static injectedValue;
+ settings;
+ tty = tty;
+ indent;
+ cursor = {
+ x: 0,
+ y: 0
+ };
+ #value;
+ #lastError;
+ #isFirstRun = true;
+ #encoder = new TextEncoder();
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.injectedValue = value;
+ }
+ constructor(settings){
+ this.settings = {
+ ...settings,
+ keys: {
+ submit: [
+ "enter",
+ "return"
+ ],
+ ...settings.keys ?? {}
+ }
+ };
+ this.indent = this.settings.indent ?? " ";
+ }
+ /** Execute the prompt and show cursor on end. */ async prompt() {
+ try {
+ return await this.#execute();
+ } finally{
+ this.tty.cursorShow();
+ }
+ }
+ /** Clear prompt output. */ clear() {
+ this.tty.cursorLeft.eraseDown();
+ }
+ /** Execute the prompt. */ #execute = async ()=>{
+ // Throw errors on unit tests.
+ if (typeof GenericPrompt.injectedValue !== "undefined" && this.#lastError) {
+ throw new Error(this.error());
+ }
+ await this.render();
+ this.#lastError = undefined;
+ if (!await this.read()) {
+ return this.#execute();
+ }
+ if (typeof this.#value === "undefined") {
+ throw new Error("internal error: failed to read value");
+ }
+ this.clear();
+ const successMessage = this.success(this.#value);
+ if (successMessage) {
+ console.log(successMessage);
+ }
+ GenericPrompt.injectedValue = undefined;
+ this.tty.cursorShow();
+ return this.#value;
+ };
+ /** Render prompt. */ async render() {
+ const result = await Promise.all([
+ this.message(),
+ this.body?.(),
+ this.footer()
+ ]);
+ const content = result.filter(Boolean).join("\n");
+ const lines = content.split("\n");
+ const columns = getColumns();
+ const linesCount = columns ? lines.reduce((prev, next)=>{
+ const length = stripColor(next).length;
+ return prev + (length > columns ? Math.ceil(length / columns) : 1);
+ }, 0) : content.split("\n").length;
+ const y = linesCount - this.cursor.y - 1;
+ if (!this.#isFirstRun || this.#lastError) {
+ this.clear();
+ }
+ this.#isFirstRun = false;
+ if (Deno.build.os === "windows") {
+ console.log(content);
+ this.tty.cursorUp();
+ } else {
+ Deno.stdout.writeSync(this.#encoder.encode(content));
+ }
+ if (y) {
+ this.tty.cursorUp(y);
+ }
+ this.tty.cursorTo(this.cursor.x);
+ }
+ /** Read user input from stdin, handle events and validate user input. */ async read() {
+ if (typeof GenericPrompt.injectedValue !== "undefined") {
+ const value = GenericPrompt.injectedValue;
+ await this.#validateValue(value);
+ } else {
+ const events = await this.#readKey();
+ if (!events.length) {
+ return false;
+ }
+ for (const event of events){
+ await this.handleEvent(event);
+ }
+ }
+ return typeof this.#value !== "undefined";
+ }
+ submit() {
+ return this.#validateValue(this.getValue());
+ }
+ message() {
+ return `${this.settings.indent}${this.settings.prefix}` + bold(this.settings.message) + this.defaults();
+ }
+ defaults() {
+ let defaultMessage = "";
+ if (typeof this.settings.default !== "undefined" && !this.settings.hideDefault) {
+ defaultMessage += dim(` (${this.format(this.settings.default)})`);
+ }
+ return defaultMessage;
+ }
+ /** Get prompt success message. */ success(value) {
+ return `${this.settings.indent}${this.settings.prefix}` + bold(this.settings.message) + this.defaults() + " " + this.settings.pointer + " " + green(this.format(value));
+ }
+ footer() {
+ return this.error() ?? this.hint();
+ }
+ error() {
+ return this.#lastError ? this.settings.indent + red(bold(`${Figures.CROSS} `) + this.#lastError) : undefined;
+ }
+ hint() {
+ return this.settings.hint ? this.settings.indent + italic(brightBlue(dim(`${Figures.POINTER} `) + this.settings.hint)) : undefined;
+ }
+ setErrorMessage(message) {
+ this.#lastError = message;
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case event.name === "c" && event.ctrl:
+ this.clear();
+ this.tty.cursorShow();
+ Deno.exit(130);
+ return;
+ case this.isKey(this.settings.keys, "submit", event):
+ await this.submit();
+ break;
+ }
+ }
+ /** Read user input from stdin and pars ansi codes. */ #readKey = async ()=>{
+ const data = await this.#readChar();
+ return data.length ? parse(data) : [];
+ };
+ /** Read user input from stdin. */ #readChar = async ()=>{
+ const buffer = new Uint8Array(8);
+ const isTty = Deno.isatty(Deno.stdin.rid);
+ if (isTty) {
+ // cbreak is only supported on deno >= 1.6.0, suppress ts-error.
+ Deno.stdin.setRaw(true, {
+ cbreak: this.settings.cbreak === true
+ });
+ }
+ const nread = await Deno.stdin.read(buffer);
+ if (isTty) {
+ Deno.stdin.setRaw(false);
+ }
+ if (nread === null) {
+ return buffer;
+ }
+ return buffer.subarray(0, nread);
+ };
+ /**
+ * Map input value to output value. If a custom transform handler ist set, the
+ * custom handler will be executed, otherwise the default transform handler
+ * from the prompt will be executed.
+ * @param value The value to transform.
+ */ #transformValue = (value)=>{
+ return this.settings.transform ? this.settings.transform(value) : this.transform(value);
+ };
+ /**
+ * Validate input value. Set error message if validation fails and transform
+ * output value on success.
+ * If a default value is set, the default will be used as value without any
+ * validation.
+ * If a custom validation handler ist set, the custom handler will
+ * be executed, otherwise a prompt specific default validation handler will be
+ * executed.
+ * @param value The value to validate.
+ */ #validateValue = async (value)=>{
+ if (!value && typeof this.settings.default !== "undefined") {
+ this.#value = this.settings.default;
+ return;
+ }
+ this.#value = undefined;
+ this.#lastError = undefined;
+ const validation = await (this.settings.validate ? this.settings.validate(value) : this.validate(value));
+ if (validation === false) {
+ this.#lastError = `Invalid answer.`;
+ } else if (typeof validation === "string") {
+ this.#lastError = validation;
+ } else {
+ this.#value = this.#transformValue(value);
+ }
+ };
+ /**
+ * Check if key event has given name or sequence.
+ * @param keys Key map.
+ * @param name Key name.
+ * @param event Key event.
+ */ isKey(keys, name, event) {
+ // deno-lint-ignore no-explicit-any
+ const keyNames = keys?.[name];
+ return typeof keyNames !== "undefined" && (typeof event.name !== "undefined" && keyNames.indexOf(event.name) !== -1 || typeof event.sequence !== "undefined" && keyNames.indexOf(event.sequence) !== -1);
+ }
+}
+function getColumns() {
+ try {
+ // Catch error in none tty mode: Inappropriate ioctl for device (os error 25)
+ // And keep backwards compatibility for deno < 1.27.0.
+ // deno-lint-ignore no-explicit-any
+ return Deno.consoleSize(Deno.stdout.rid).columns;
+ } catch (_error) {
+ return null;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L19nZW5lcmljX3Byb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEN1cnNvciB9IGZyb20gXCIuLi9hbnNpL2N1cnNvcl9wb3NpdGlvbi50c1wiO1xuaW1wb3J0IHsgdHR5IH0gZnJvbSBcIi4uL2Fuc2kvdHR5LnRzXCI7XG5pbXBvcnQgeyBLZXlDb2RlLCBwYXJzZSB9IGZyb20gXCIuLi9rZXljb2RlL2tleV9jb2RlLnRzXCI7XG5pbXBvcnQge1xuICBib2xkLFxuICBicmlnaHRCbHVlLFxuICBkaW0sXG4gIGdyZWVuLFxuICBpdGFsaWMsXG4gIHJlZCxcbiAgc3RyaXBDb2xvcixcbn0gZnJvbSBcIi4vZGVwcy50c1wiO1xuaW1wb3J0IHsgRmlndXJlcyB9IGZyb20gXCIuL2ZpZ3VyZXMudHNcIjtcblxuLyoqIFByb21wdCB2YWxpZGF0aW9uIHJldHVybiB0YXBlLiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVSZXN1bHQgPSBzdHJpbmcgfCBib29sZWFuIHwgUHJvbWlzZTxzdHJpbmcgfCBib29sZWFuPjtcblxuLyoqIElucHV0IGtleXMgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1Byb21wdEtleXMge1xuICBzdWJtaXQ/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKiogR2VuZXJpYyBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1Byb21wdE9wdGlvbnM8VFZhbHVlLCBUUmF3VmFsdWU+IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZWZhdWx0PzogVFZhbHVlO1xuICBoaWRlRGVmYXVsdD86IGJvb2xlYW47XG4gIHZhbGlkYXRlPzogKHZhbHVlOiBUUmF3VmFsdWUpID0+IFZhbGlkYXRlUmVzdWx0O1xuICB0cmFuc2Zvcm0/OiAodmFsdWU6IFRSYXdWYWx1ZSkgPT4gVFZhbHVlIHwgdW5kZWZpbmVkO1xuICBoaW50Pzogc3RyaW5nO1xuICBwb2ludGVyPzogc3RyaW5nO1xuICBpbmRlbnQ/OiBzdHJpbmc7XG4gIGtleXM/OiBHZW5lcmljUHJvbXB0S2V5cztcbiAgY2JyZWFrPzogYm9vbGVhbjtcbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKiogR2VuZXJpYyBwcm9tcHQgc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNQcm9tcHRTZXR0aW5nczxUVmFsdWUsIFRSYXdWYWx1ZT5cbiAgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxUVmFsdWUsIFRSYXdWYWx1ZT4ge1xuICBwb2ludGVyOiBzdHJpbmc7XG4gIGluZGVudDogc3RyaW5nO1xuICBwcmVmaXg6IHN0cmluZztcbn1cblxuLyoqIFN0YXRpYyBnZW5lcmljIHByb21wdCBpbnRlcmZhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0dlbmVyaWNQcm9tcHQ8XG4gIFRWYWx1ZSxcbiAgVFJhd1ZhbHVlLFxuICBUT3B0aW9ucyBleHRlbmRzIEdlbmVyaWNQcm9tcHRPcHRpb25zPFRWYWx1ZSwgVFJhd1ZhbHVlPixcbiAgVFNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY1Byb21wdFNldHRpbmdzPFRWYWx1ZSwgVFJhd1ZhbHVlPixcbiAgVFByb21wdCBleHRlbmRzIEdlbmVyaWNQcm9tcHQ8VFZhbHVlLCBUUmF3VmFsdWUsIFRTZXR0aW5ncz4sXG4+IHtcbiAgaW5qZWN0Pyh2YWx1ZTogVFZhbHVlKTogdm9pZDtcblxuICBwcm9tcHQob3B0aW9uczogVE9wdGlvbnMpOiBQcm9taXNlPFRWYWx1ZT47XG59XG5cbi8qKiBHZW5lcmljIHByb21wdCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljUHJvbXB0PFxuICBUVmFsdWUsXG4gIFRSYXdWYWx1ZSxcbiAgVFNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY1Byb21wdFNldHRpbmdzPFRWYWx1ZSwgVFJhd1ZhbHVlPixcbj4ge1xuICBwcm90ZWN0ZWQgc3RhdGljIGluamVjdGVkVmFsdWU6IHVua25vd24gfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nczogVFNldHRpbmdzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHR5ID0gdHR5O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5kZW50OiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBjdXJzb3I6IEN1cnNvciA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG4gICN2YWx1ZTogVFZhbHVlIHwgdW5kZWZpbmVkO1xuICAjbGFzdEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNpc0ZpcnN0UnVuID0gdHJ1ZTtcbiAgI2VuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcblxuICAvKipcbiAgICogSW5qZWN0IHByb21wdCB2YWx1ZS4gQ2FuIGJlIHVzZWQgZm9yIHVuaXQgdGVzdHMgb3IgcHJlIHNlbGVjdGlvbnMuXG4gICAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW5qZWN0KHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgR2VuZXJpY1Byb21wdC5pbmplY3RlZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc2V0dGluZ3M6IFRTZXR0aW5ncykge1xuICAgIHRoaXMuc2V0dGluZ3MgPSB7XG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICAgIGtleXM6IHtcbiAgICAgICAgc3VibWl0OiBbXCJlbnRlclwiLCBcInJldHVyblwiXSxcbiAgICAgICAgLi4uKHNldHRpbmdzLmtleXMgPz8ge30pLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW5kZW50ID0gdGhpcy5zZXR0aW5ncy5pbmRlbnQgPz8gXCIgXCI7XG4gIH1cblxuICAvKiogRXhlY3V0ZSB0aGUgcHJvbXB0IGFuZCBzaG93IGN1cnNvciBvbiBlbmQuICovXG4gIHB1YmxpYyBhc3luYyBwcm9tcHQoKTogUHJvbWlzZTxUVmFsdWU+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuI2V4ZWN1dGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50dHkuY3Vyc29yU2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhciBwcm9tcHQgb3V0cHV0LiAqL1xuICBwcm90ZWN0ZWQgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy50dHkuY3Vyc29yTGVmdC5lcmFzZURvd24oKTtcbiAgfVxuXG4gIC8qKiBFeGVjdXRlIHRoZSBwcm9tcHQuICovXG4gICNleGVjdXRlID0gYXN5bmMgKCk6IFByb21pc2U8VFZhbHVlPiA9PiB7XG4gICAgLy8gVGhyb3cgZXJyb3JzIG9uIHVuaXQgdGVzdHMuXG4gICAgaWYgKHR5cGVvZiBHZW5lcmljUHJvbXB0LmluamVjdGVkVmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdGhpcy4jbGFzdEVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5lcnJvcigpKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMuI2xhc3RFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIGlmICghYXdhaXQgdGhpcy5yZWFkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNleGVjdXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLiN2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW50ZXJuYWwgZXJyb3I6IGZhaWxlZCB0byByZWFkIHZhbHVlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBjb25zdCBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5zdWNjZXNzKFxuICAgICAgdGhpcy4jdmFsdWUsXG4gICAgKTtcbiAgICBpZiAoc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKHN1Y2Nlc3NNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBHZW5lcmljUHJvbXB0LmluamVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50dHkuY3Vyc29yU2hvdygpO1xuXG4gICAgcmV0dXJuIHRoaXMuI3ZhbHVlO1xuICB9O1xuXG4gIC8qKiBSZW5kZXIgcHJvbXB0LiAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdDogW3N0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWRdID1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5tZXNzYWdlKCksXG4gICAgICAgIHRoaXMuYm9keT8uKCksXG4gICAgICAgIHRoaXMuZm9vdGVyKCksXG4gICAgICBdKTtcblxuICAgIGNvbnN0IGNvbnRlbnQ6IHN0cmluZyA9IHJlc3VsdC5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucygpO1xuICAgIGNvbnN0IGxpbmVzQ291bnQ6IG51bWJlciA9IGNvbHVtbnNcbiAgICAgID8gbGluZXMucmVkdWNlKChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0cmlwQ29sb3IobmV4dCkubGVuZ3RoO1xuICAgICAgICByZXR1cm4gcHJldiArIChsZW5ndGggPiBjb2x1bW5zID8gTWF0aC5jZWlsKGxlbmd0aCAvIGNvbHVtbnMpIDogMSk7XG4gICAgICB9LCAwKVxuICAgICAgOiBjb250ZW50LnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcblxuICAgIGNvbnN0IHk6IG51bWJlciA9IGxpbmVzQ291bnQgLSB0aGlzLmN1cnNvci55IC0gMTtcblxuICAgIGlmICghdGhpcy4jaXNGaXJzdFJ1biB8fCB0aGlzLiNsYXN0RXJyb3IpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy4jaXNGaXJzdFJ1biA9IGZhbHNlO1xuXG4gICAgaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gICAgICBjb25zb2xlLmxvZyhjb250ZW50KTtcbiAgICAgIHRoaXMudHR5LmN1cnNvclVwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIERlbm8uc3Rkb3V0LndyaXRlU3luYyh0aGlzLiNlbmNvZGVyLmVuY29kZShjb250ZW50KSk7XG4gICAgfVxuXG4gICAgaWYgKHkpIHtcbiAgICAgIHRoaXMudHR5LmN1cnNvclVwKHkpO1xuICAgIH1cbiAgICB0aGlzLnR0eS5jdXJzb3JUbyh0aGlzLmN1cnNvci54KTtcbiAgfVxuXG4gIC8qKiBSZWFkIHVzZXIgaW5wdXQgZnJvbSBzdGRpbiwgaGFuZGxlIGV2ZW50cyBhbmQgdmFsaWRhdGUgdXNlciBpbnB1dC4gKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiBHZW5lcmljUHJvbXB0LmluamVjdGVkVmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHZhbHVlOiBUUmF3VmFsdWUgPSBHZW5lcmljUHJvbXB0LmluamVjdGVkVmFsdWUgYXMgVFJhd1ZhbHVlO1xuICAgICAgYXdhaXQgdGhpcy4jdmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV2ZW50czogQXJyYXk8S2V5Q29kZT4gPSBhd2FpdCB0aGlzLiNyZWFkS2V5KCk7XG5cbiAgICAgIGlmICghZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2YgdGhpcy4jdmFsdWUgIT09IFwidW5kZWZpbmVkXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VibWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiN2YWxpZGF0ZVZhbHVlKHRoaXMuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnNldHRpbmdzLmluZGVudH0ke3RoaXMuc2V0dGluZ3MucHJlZml4fWAgK1xuICAgICAgYm9sZCh0aGlzLnNldHRpbmdzLm1lc3NhZ2UpICsgdGhpcy5kZWZhdWx0cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRzKCk6IHN0cmluZyB7XG4gICAgbGV0IGRlZmF1bHRNZXNzYWdlID0gXCJcIjtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5zZXR0aW5ncy5kZWZhdWx0ICE9PSBcInVuZGVmaW5lZFwiICYmICF0aGlzLnNldHRpbmdzLmhpZGVEZWZhdWx0XG4gICAgKSB7XG4gICAgICBkZWZhdWx0TWVzc2FnZSArPSBkaW0oYCAoJHt0aGlzLmZvcm1hdCh0aGlzLnNldHRpbmdzLmRlZmF1bHQpfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRNZXNzYWdlO1xuICB9XG5cbiAgLyoqIEdldCBwcm9tcHQgc3VjY2VzcyBtZXNzYWdlLiAqL1xuICBwcm90ZWN0ZWQgc3VjY2Vzcyh2YWx1ZTogVFZhbHVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zZXR0aW5ncy5pbmRlbnR9JHt0aGlzLnNldHRpbmdzLnByZWZpeH1gICtcbiAgICAgIGJvbGQodGhpcy5zZXR0aW5ncy5tZXNzYWdlKSArIHRoaXMuZGVmYXVsdHMoKSArXG4gICAgICBcIiBcIiArIHRoaXMuc2V0dGluZ3MucG9pbnRlciArXG4gICAgICBcIiBcIiArIGdyZWVuKHRoaXMuZm9ybWF0KHZhbHVlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYm9keT8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gIHByb3RlY3RlZCBmb290ZXIoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcigpID8/IHRoaXMuaGludCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVycm9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2xhc3RFcnJvclxuICAgICAgPyB0aGlzLnNldHRpbmdzLmluZGVudCArIHJlZChib2xkKGAke0ZpZ3VyZXMuQ1JPU1N9IGApICsgdGhpcy4jbGFzdEVycm9yKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGludCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmhpbnRcbiAgICAgID8gdGhpcy5zZXR0aW5ncy5pbmRlbnQgK1xuICAgICAgICBpdGFsaWMoYnJpZ2h0Qmx1ZShkaW0oYCR7RmlndXJlcy5QT0lOVEVSfSBgKSArIHRoaXMuc2V0dGluZ3MuaGludCkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRFcnJvck1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jbGFzdEVycm9yID0gbWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdXNlciBpbnB1dCBldmVudC5cbiAgICogQHBhcmFtIGV2ZW50IEtleSBldmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVFdmVudChldmVudDogS2V5Q29kZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSBldmVudC5uYW1lID09PSBcImNcIiAmJiBldmVudC5jdHJsOlxuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMudHR5LmN1cnNvclNob3coKTtcbiAgICAgICAgRGVuby5leGl0KDEzMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwic3VibWl0XCIsIGV2ZW50KTpcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBpbnB1dCB2YWx1ZSB0byBvdXRwdXQgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZS5cbiAgICogQHJldHVybiBPdXRwdXQgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdHJhbnNmb3JtKHZhbHVlOiBUUmF3VmFsdWUpOiBUVmFsdWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlucHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVXNlciBpbnB1dCB2YWx1ZS5cbiAgICogQHJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9yIGVycm9yIG1lc3NhZ2Ugb24gZXJyb3IuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmFsaWRhdGUodmFsdWU6IFRSYXdWYWx1ZSk6IFZhbGlkYXRlUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBGb3JtYXQgb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGZvcm1hdCh2YWx1ZTogVFZhbHVlKTogc3RyaW5nO1xuXG4gIC8qKiBHZXQgaW5wdXQgdmFsdWUuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRWYWx1ZSgpOiBUUmF3VmFsdWU7XG5cbiAgLyoqIFJlYWQgdXNlciBpbnB1dCBmcm9tIHN0ZGluIGFuZCBwYXJzIGFuc2kgY29kZXMuICovXG4gICNyZWFkS2V5ID0gYXN5bmMgKCk6IFByb21pc2U8QXJyYXk8S2V5Q29kZT4+ID0+IHtcbiAgICBjb25zdCBkYXRhOiBVaW50OEFycmF5ID0gYXdhaXQgdGhpcy4jcmVhZENoYXIoKTtcblxuICAgIHJldHVybiBkYXRhLmxlbmd0aCA/IHBhcnNlKGRhdGEpIDogW107XG4gIH07XG5cbiAgLyoqIFJlYWQgdXNlciBpbnB1dCBmcm9tIHN0ZGluLiAqL1xuICAjcmVhZENoYXIgPSBhc3luYyAoKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgY29uc3QgaXNUdHkgPSBEZW5vLmlzYXR0eShEZW5vLnN0ZGluLnJpZCk7XG5cbiAgICBpZiAoaXNUdHkpIHtcbiAgICAgIC8vIGNicmVhayBpcyBvbmx5IHN1cHBvcnRlZCBvbiBkZW5vID49IDEuNi4wLCBzdXBwcmVzcyB0cy1lcnJvci5cbiAgICAgIChEZW5vLnN0ZGluLnNldFJhdyBhcyBzZXRSYXcpKFxuICAgICAgICB0cnVlLFxuICAgICAgICB7IGNicmVhazogdGhpcy5zZXR0aW5ncy5jYnJlYWsgPT09IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG5yZWFkOiBudW1iZXIgfCBudWxsID0gYXdhaXQgRGVuby5zdGRpbi5yZWFkKGJ1ZmZlcik7XG5cbiAgICBpZiAoaXNUdHkpIHtcbiAgICAgIERlbm8uc3RkaW4uc2V0UmF3KGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAobnJlYWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheSgwLCBucmVhZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcCBpbnB1dCB2YWx1ZSB0byBvdXRwdXQgdmFsdWUuIElmIGEgY3VzdG9tIHRyYW5zZm9ybSBoYW5kbGVyIGlzdCBzZXQsIHRoZVxuICAgKiBjdXN0b20gaGFuZGxlciB3aWxsIGJlIGV4ZWN1dGVkLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgdHJhbnNmb3JtIGhhbmRsZXJcbiAgICogZnJvbSB0aGUgcHJvbXB0IHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHJhbnNmb3JtLlxuICAgKi9cbiAgI3RyYW5zZm9ybVZhbHVlID0gKHZhbHVlOiBUUmF3VmFsdWUpOiBUVmFsdWUgfCB1bmRlZmluZWQgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnRyYW5zZm9ybVxuICAgICAgPyB0aGlzLnNldHRpbmdzLnRyYW5zZm9ybSh2YWx1ZSlcbiAgICAgIDogdGhpcy50cmFuc2Zvcm0odmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpbnB1dCB2YWx1ZS4gU2V0IGVycm9yIG1lc3NhZ2UgaWYgdmFsaWRhdGlvbiBmYWlscyBhbmQgdHJhbnNmb3JtXG4gICAqIG91dHB1dCB2YWx1ZSBvbiBzdWNjZXNzLlxuICAgKiBJZiBhIGRlZmF1bHQgdmFsdWUgaXMgc2V0LCB0aGUgZGVmYXVsdCB3aWxsIGJlIHVzZWQgYXMgdmFsdWUgd2l0aG91dCBhbnlcbiAgICogdmFsaWRhdGlvbi5cbiAgICogSWYgYSBjdXN0b20gdmFsaWRhdGlvbiBoYW5kbGVyIGlzdCBzZXQsIHRoZSBjdXN0b20gaGFuZGxlciB3aWxsXG4gICAqIGJlIGV4ZWN1dGVkLCBvdGhlcndpc2UgYSBwcm9tcHQgc3BlY2lmaWMgZGVmYXVsdCB2YWxpZGF0aW9uIGhhbmRsZXIgd2lsbCBiZVxuICAgKiBleGVjdXRlZC5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAgICovXG4gICN2YWxpZGF0ZVZhbHVlID0gYXN5bmMgKHZhbHVlOiBUUmF3VmFsdWUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXZhbHVlICYmIHR5cGVvZiB0aGlzLnNldHRpbmdzLmRlZmF1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuI3ZhbHVlID0gdGhpcy5zZXR0aW5ncy5kZWZhdWx0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI2xhc3RFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPVxuICAgICAgYXdhaXQgKHRoaXMuc2V0dGluZ3MudmFsaWRhdGVcbiAgICAgICAgPyB0aGlzLnNldHRpbmdzLnZhbGlkYXRlKHZhbHVlKVxuICAgICAgICA6IHRoaXMudmFsaWRhdGUodmFsdWUpKTtcblxuICAgIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy4jbGFzdEVycm9yID0gYEludmFsaWQgYW5zd2VyLmA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsaWRhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy4jbGFzdEVycm9yID0gdmFsaWRhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jdmFsdWUgPSB0aGlzLiN0cmFuc2Zvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXkgZXZlbnQgaGFzIGdpdmVuIG5hbWUgb3Igc2VxdWVuY2UuXG4gICAqIEBwYXJhbSBrZXlzICBLZXkgbWFwLlxuICAgKiBAcGFyYW0gbmFtZSAgS2V5IG5hbWUuXG4gICAqIEBwYXJhbSBldmVudCBLZXkgZXZlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNLZXk8VEtleSBleHRlbmRzIHVua25vd24sIFROYW1lIGV4dGVuZHMga2V5b2YgVEtleT4oXG4gICAga2V5czogVEtleSB8IHVuZGVmaW5lZCxcbiAgICBuYW1lOiBUTmFtZSxcbiAgICBldmVudDogS2V5Q29kZSxcbiAgKTogYm9vbGVhbiB7XG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBrZXlOYW1lczogQXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQgPSBrZXlzPy5bbmFtZV0gYXMgYW55O1xuICAgIHJldHVybiB0eXBlb2Yga2V5TmFtZXMgIT09IFwidW5kZWZpbmVkXCIgJiYgKFxuICAgICAgKHR5cGVvZiBldmVudC5uYW1lICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIGtleU5hbWVzLmluZGV4T2YoZXZlbnQubmFtZSkgIT09IC0xKSB8fFxuICAgICAgKHR5cGVvZiBldmVudC5zZXF1ZW5jZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICBrZXlOYW1lcy5pbmRleE9mKGV2ZW50LnNlcXVlbmNlKSAhPT0gLTEpXG4gICAgKTtcbiAgfVxufVxuXG50eXBlIHNldFJhdyA9IChcbiAgbW9kZTogYm9vbGVhbixcbiAgb3B0aW9ucz86IHsgY2JyZWFrPzogYm9vbGVhbiB9LFxuKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBnZXRDb2x1bW5zKCk6IG51bWJlciB8IG51bGwge1xuICB0cnkge1xuICAgIC8vIENhdGNoIGVycm9yIGluIG5vbmUgdHR5IG1vZGU6IEluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZSAob3MgZXJyb3IgMjUpXG4gICAgLy8gQW5kIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGRlbm8gPCAxLjI3LjAuXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gKERlbm8gYXMgYW55KS5jb25zb2xlU2l6ZShEZW5vLnN0ZG91dC5yaWQpLmNvbHVtbnM7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxHQUFHLFFBQVEsaUJBQWlCO0FBQ3JDLFNBQWtCLEtBQUssUUFBUSx5QkFBeUI7QUFDeEQsU0FDRSxJQUFJLEVBQ0osVUFBVSxFQUNWLEdBQUcsRUFDSCxLQUFLLEVBQ0wsTUFBTSxFQUNOLEdBQUcsRUFDSCxVQUFVLFFBQ0wsWUFBWTtBQUNuQixTQUFTLE9BQU8sUUFBUSxlQUFlO0FBOEN2QyxtQ0FBbUMsR0FDbkMsT0FBTyxNQUFlO0VBS3BCLE9BQWlCLGNBQW1DO0VBQ2pDLFNBQW9CO0VBQ3BCLE1BQU0sSUFBSTtFQUNW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
+// denoCacheMetadata=1805170670186394464,16769360247032719706 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/61954d66cc5603c402b5f92094c57fbed77a7a37baa05ffdcc3602f5c801d499.js b/vendor/gen/https/deno.land/61954d66cc5603c402b5f92094c57fbed77a7a37baa05ffdcc3602f5c801d499.js
new file mode 100644
index 0000000..94b658b
--- /dev/null
+++ b/vendor/gen/https/deno.land/61954d66cc5603c402b5f92094c57fbed77a7a37baa05ffdcc3602f5c801d499.js
@@ -0,0 +1,10 @@
+export * from "./ansi/mod.ts";
+export * from "./command/mod.ts";
+export { boolean, number, // Already exported by command module.
+// ValidationError,
+OptionType, parseFlags, string } from "./flags/mod.ts";
+export * from "./keycode/mod.ts";
+export * from "./prompt/mod.ts";
+export * from "./table/mod.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Fuc2kvbW9kLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21tYW5kL21vZC50c1wiO1xuZXhwb3J0IHtcbiAgYm9vbGVhbixcbiAgbnVtYmVyLFxuICAvLyBBbHJlYWR5IGV4cG9ydGVkIGJ5IGNvbW1hbmQgbW9kdWxlLlxuICAvLyBWYWxpZGF0aW9uRXJyb3IsXG4gIE9wdGlvblR5cGUsXG4gIHBhcnNlRmxhZ3MsXG4gIHN0cmluZyxcbn0gZnJvbSBcIi4vZmxhZ3MvbW9kLnRzXCI7XG5leHBvcnQgdHlwZSB7XG4gIEFyZ3VtZW50T3B0aW9ucyxcbiAgQXJndW1lbnRWYWx1ZSxcbiAgRGVmYXVsdFZhbHVlLFxuICBGbGFnT3B0aW9ucyxcbiAgUGFyc2VGbGFnc0NvbnRleHQsXG4gIFBhcnNlRmxhZ3NPcHRpb25zLFxuICBUeXBlSGFuZGxlcixcbiAgVmFsdWVIYW5kbGVyLFxufSBmcm9tIFwiLi9mbGFncy9tb2QudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2tleWNvZGUvbW9kLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm9tcHQvbW9kLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YWJsZS9tb2QudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQjtBQUM5QixjQUFjLG1CQUFtQjtBQUNqQyxTQUNFLE9BQU8sRUFDUCxNQUFNLEVBQ04sc0NBQXNDO0FBQ3RDLG1CQUFtQjtBQUNuQixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sUUFDRCxpQkFBaUI7QUFXeEIsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxpQkFBaUIifQ==
+// denoCacheMetadata=18142889848861094792,2045106735280524748 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/624eb29f6fb28d3d56325f2c07de764adfbaaf9ff862a2cddea6301d71eaea50.js b/vendor/gen/https/deno.land/624eb29f6fb28d3d56325f2c07de764adfbaaf9ff862a2cddea6301d71eaea50.js
new file mode 100644
index 0000000..6ac8140
--- /dev/null
+++ b/vendor/gen/https/deno.land/624eb29f6fb28d3d56325f2c07de764adfbaaf9ff862a2cddea6301d71eaea50.js
@@ -0,0 +1,19 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+export const osType = (()=>{
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (typeof Deno?.build?.os === "string") {
+ return Deno.build.os;
+ }
+ // deno-lint-ignore no-explicit-any
+ const { navigator } = globalThis;
+ if (navigator?.appVersion?.includes?.("Win")) {
+ return "windows";
+ }
+ return "linux";
+})();
+export const isWindows = osType === "windows";
+export const isLinux = osType === "linux";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL191dGlsL29zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmV4cG9ydCB0eXBlIE9TVHlwZSA9IFwid2luZG93c1wiIHwgXCJsaW51eFwiIHwgXCJkYXJ3aW5cIiB8IFwiZnJlZWJzZFwiO1xuXG5leHBvcnQgY29uc3Qgb3NUeXBlOiBPU1R5cGUgPSAoKCkgPT4ge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBjb25zdCB7IERlbm8gfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICBpZiAodHlwZW9mIERlbm8/LmJ1aWxkPy5vcyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBEZW5vLmJ1aWxkLm9zO1xuICB9XG5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgY29uc3QgeyBuYXZpZ2F0b3IgfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICBpZiAobmF2aWdhdG9yPy5hcHBWZXJzaW9uPy5pbmNsdWRlcz8uKFwiV2luXCIpKSB7XG4gICAgcmV0dXJuIFwid2luZG93c1wiO1xuICB9XG5cbiAgcmV0dXJuIFwibGludXhcIjtcbn0pKCk7XG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSBvc1R5cGUgPT09IFwid2luZG93c1wiO1xuZXhwb3J0IGNvbnN0IGlzTGludXggPSBvc1R5cGUgPT09IFwibGludXhcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBSXJDLE9BQU8sTUFBTSxTQUFpQixDQUFDO0VBQzdCLG1DQUFtQztFQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUc7RUFDakIsSUFBSSxPQUFPLE1BQU0sT0FBTyxPQUFPLFVBQVU7SUFDdkMsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQ3RCO0VBRUEsbUNBQW1DO0VBQ25DLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRztFQUN0QixJQUFJLFdBQVcsWUFBWSxXQUFXLFFBQVE7SUFDNUMsT0FBTztFQUNUO0VBRUEsT0FBTztBQUNULENBQUMsSUFBSTtBQUVMLE9BQU8sTUFBTSxZQUFZLFdBQVcsVUFBVTtBQUM5QyxPQUFPLE1BQU0sVUFBVSxXQUFXLFFBQVEifQ==
+// denoCacheMetadata=10970489789479612928,11783395380312678503 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/631e349030535d78d335e67712cf905a87c75b9f80e8bc940e2a3276eb05c770.js b/vendor/gen/https/deno.land/631e349030535d78d335e67712cf905a87c75b9f80e8bc940e2a3276eb05c770.js
new file mode 100644
index 0000000..8f7f6e1
--- /dev/null
+++ b/vendor/gen/https/deno.land/631e349030535d78d335e67712cf905a87c75b9f80e8bc940e2a3276eb05c770.js
@@ -0,0 +1,73 @@
+import * as ansiEscapes from "./ansi_escapes.ts";
+/**
+ * Chainable ansi escape sequences.
+ * If invoked as method, a new Ansi instance will be returned.
+ * ```
+ * await Deno.stdout.write(
+ * new TextEncoder().encode(
+ * ansi.cursorTo(0, 0).eraseScreen(),
+ * ),
+ * );
+ * ```
+ * Or shorter:
+ * ```
+ * await Deno.stdout.write(
+ * ansi.cursorTo(0, 0).eraseScreen.toBuffer(),
+ * );
+ * ```
+ */ export const ansi = factory();
+function factory() {
+ let result = [];
+ let stack = [];
+ const ansi = function(...args) {
+ if (this) {
+ if (args.length) {
+ update(args);
+ return this;
+ }
+ return this.toString();
+ }
+ return factory();
+ };
+ ansi.text = function(text) {
+ stack.push([
+ text,
+ []
+ ]);
+ return this;
+ };
+ ansi.toString = function() {
+ update();
+ const str = result.join("");
+ result = [];
+ return str;
+ };
+ ansi.toBuffer = function() {
+ return new TextEncoder().encode(this.toString());
+ };
+ const methodList = Object.entries(ansiEscapes);
+ for (const [name, method] of methodList){
+ Object.defineProperty(ansi, name, {
+ get () {
+ stack.push([
+ method,
+ []
+ ]);
+ return this;
+ }
+ });
+ }
+ return ansi;
+ function update(args) {
+ if (!stack.length) {
+ return;
+ }
+ if (args) {
+ stack[stack.length - 1][1] = args;
+ }
+ result.push(...stack.map(([prop, args])=>typeof prop === "string" ? prop : prop.call(ansi, ...args)));
+ stack = [];
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9hbnNpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFuc2lFc2NhcGVzIGZyb20gXCIuL2Fuc2lfZXNjYXBlcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBDaGFpbiB9IGZyb20gXCIuL2NoYWluLnRzXCI7XG5cbnR5cGUgQXJncyA9IEFycmF5PHVua25vd24+O1xudHlwZSBFeGVjdXRvciA9ICh0aGlzOiBBbnNpQ2hhaW4sIC4uLmFyZ3M6IEFyZ3MpID0+IHN0cmluZztcbnR5cGUgUHJvcGVydHkgPSBzdHJpbmcgfCBFeGVjdXRvcjtcbnR5cGUgUHJvcGVydHlOYW1lcyA9IGtleW9mIENoYWluPEFuc2lDaGFpbj47XG5cbi8qKiBBbnNpIGluc3RhbmNlIHJldHVybmVkIGJ5IGFsbCBhbnNpIGVzY2FwZSBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbnNpQ2hhaW4gZXh0ZW5kcyBDaGFpbjxBbnNpQ2hhaW4+IHtcbiAgLyoqIEdldCBhbnNpIGVzY2FwZSBzZXF1ZW5jZS4gKi9cbiAgKCk6IHN0cmluZztcbiAgLyoqIEdldCBhbnNpIGVzY2FwZSBzZXF1ZW5jZS4gKi9cbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAvKiogR2V0IGFuc2kgZXNjYXBlIHNlcXVlbmNlIGFzIFVpbnQ4QXJyYXkuICovXG4gIHRvQnVmZmVyKCk6IFVpbnQ4QXJyYXk7XG59XG5cbi8qKiBDcmVhdGUgbmV3IGBBbnNpYCBpbnN0YW5jZS4gKi9cbmV4cG9ydCB0eXBlIEFuc2lGYWN0b3J5ID0gKCkgPT4gQW5zaTtcblxuLyoqXG4gKiBDaGFpbmFibGUgYW5zaSBlc2NhcGUgc2VxdWVuY2VzLlxuICogSWYgaW52b2tlZCBhcyBtZXRob2QsIGEgbmV3IEFuc2kgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IHR5cGUgQW5zaSA9IEFuc2lGYWN0b3J5ICYgQW5zaUNoYWluO1xuXG4vKipcbiAqIENoYWluYWJsZSBhbnNpIGVzY2FwZSBzZXF1ZW5jZXMuXG4gKiBJZiBpbnZva2VkIGFzIG1ldGhvZCwgYSBuZXcgQW5zaSBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkLlxuICogYGBgXG4gKiBhd2FpdCBEZW5vLnN0ZG91dC53cml0ZShcbiAqICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFxuICogICAgIGFuc2kuY3Vyc29yVG8oMCwgMCkuZXJhc2VTY3JlZW4oKSxcbiAqICAgKSxcbiAqICk7XG4gKiBgYGBcbiAqIE9yIHNob3J0ZXI6XG4gKiBgYGBcbiAqIGF3YWl0IERlbm8uc3Rkb3V0LndyaXRlKFxuICogICBhbnNpLmN1cnNvclRvKDAsIDApLmVyYXNlU2NyZWVuLnRvQnVmZmVyKCksXG4gKiApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBhbnNpOiBBbnNpID0gZmFjdG9yeSgpO1xuXG5mdW5jdGlvbiBmYWN0b3J5KCk6IEFuc2kge1xuICBsZXQgcmVzdWx0OiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGxldCBzdGFjazogQXJyYXk8W1Byb3BlcnR5LCBBcmdzXT4gPSBbXTtcblxuICBjb25zdCBhbnNpOiBBbnNpID0gZnVuY3Rpb24gKFxuICAgIHRoaXM6IEFuc2lDaGFpbiB8IHVuZGVmaW5lZCxcbiAgICAuLi5hcmdzOiBBcmdzXG4gICk6IHN0cmluZyB8IEFuc2lDaGFpbiB7XG4gICAgaWYgKHRoaXMpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgICB1cGRhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkoKTtcbiAgfSBhcyBBbnNpO1xuXG4gIGFuc2kudGV4dCA9IGZ1bmN0aW9uICh0ZXh0OiBzdHJpbmcpOiBBbnNpQ2hhaW4ge1xuICAgIHN0YWNrLnB1c2goW3RleHQsIFtdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgYW5zaS50b1N0cmluZyA9IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuICAgIHVwZGF0ZSgpO1xuICAgIGNvbnN0IHN0cjogc3RyaW5nID0gcmVzdWx0LmpvaW4oXCJcIik7XG4gICAgcmVzdWx0ID0gW107XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICBhbnNpLnRvQnVmZmVyID0gZnVuY3Rpb24gKCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodGhpcy50b1N0cmluZygpKTtcbiAgfTtcblxuICBjb25zdCBtZXRob2RMaXN0OiBBcnJheTxbUHJvcGVydHlOYW1lcywgUHJvcGVydHldPiA9IE9iamVjdC5lbnRyaWVzKFxuICAgIGFuc2lFc2NhcGVzLFxuICApIGFzIEFycmF5PFtQcm9wZXJ0eU5hbWVzLCBQcm9wZXJ0eV0+O1xuXG4gIGZvciAoY29uc3QgW25hbWUsIG1ldGhvZF0gb2YgbWV0aG9kTGlzdCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhbnNpLCBuYW1lLCB7XG4gICAgICBnZXQodGhpczogQW5zaUNoYWluKSB7XG4gICAgICAgIHN0YWNrLnB1c2goW21ldGhvZCwgW11dKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFuc2k7XG5cbiAgZnVuY3Rpb24gdXBkYXRlKGFyZ3M/OiBBcmdzKSB7XG4gICAgaWYgKCFzdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdWzFdID0gYXJncztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goXG4gICAgICAuLi5zdGFjay5tYXAoKFtwcm9wLCBhcmdzXTogW1Byb3BlcnR5LCBBcmdzXSkgPT5cbiAgICAgICAgdHlwZW9mIHByb3AgPT09IFwic3RyaW5nXCIgPyBwcm9wIDogcHJvcC5jYWxsKGFuc2ksIC4uLmFyZ3MpXG4gICAgICApLFxuICAgICk7XG4gICAgc3RhY2sgPSBbXTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksaUJBQWlCLG9CQUFvQjtBQTJCakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLE1BQU0sT0FBYSxVQUFVO0FBRXBDLFNBQVM7RUFDUCxJQUFJLFNBQXdCLEVBQUU7RUFDOUIsSUFBSSxRQUFpQyxFQUFFO0VBRXZDLE1BQU0sT0FBYSxTQUVqQixHQUFHLElBQVU7SUFFYixJQUFJLElBQUksRUFBRTtNQUNSLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDZixPQUFPO1FBQ1AsT0FBTyxJQUFJO01BQ2I7TUFDQSxPQUFPLElBQUksQ0FBQyxRQUFRO0lBQ3RCO0lBQ0EsT0FBTztFQUNUO0VBRUEsS0FBSyxJQUFJLEdBQUcsU0FBVSxJQUFZO0lBQ2hDLE1BQU0sSUFBSSxDQUFDO01BQUM7TUFBTSxFQUFFO0tBQUM7SUFDckIsT0FBTyxJQUFJO0VBQ2I7RUFFQSxLQUFLLFFBQVEsR0FBRztJQUNkO0lBQ0EsTUFBTSxNQUFjLE9BQU8sSUFBSSxDQUFDO0lBQ2hDLFNBQVMsRUFBRTtJQUNYLE9BQU87RUFDVDtFQUVBLEtBQUssUUFBUSxHQUFHO0lBQ2QsT0FBTyxJQUFJLGNBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRO0VBQy9DO0VBRUEsTUFBTSxhQUErQyxPQUFPLE9BQU8sQ0FDakU7RUFHRixLQUFLLE1BQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSSxXQUFZO0lBQ3ZDLE9BQU8sY0FBYyxDQUFDLE1BQU0sTUFBTTtNQUNoQztRQUNFLE1BQU0sSUFBSSxDQUFDO1VBQUM7VUFBUSxFQUFFO1NBQUM7UUFDdkIsT0FBTyxJQUFJO01BQ2I7SUFDRjtFQUNGO0VBRUEsT0FBTztFQUVQLFNBQVMsT0FBTyxJQUFXO0lBQ3pCLElBQUksQ0FBQyxNQUFNLE1BQU0sRUFBRTtNQUNqQjtJQUNGO0lBQ0EsSUFBSSxNQUFNO01BQ1IsS0FBSyxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUc7SUFDL0I7SUFDQSxPQUFPLElBQUksSUFDTixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUF1QixHQUMxQyxPQUFPLFNBQVMsV0FBVyxPQUFPLEtBQUssSUFBSSxDQUFDLFNBQVM7SUFHekQsUUFBUSxFQUFFO0VBQ1o7QUFDRiJ9
+// denoCacheMetadata=3568779273317170435,18105478215457022207 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/64b187f10eca491f2de5bad67338eba7d10700ca5867bda5fdfc5e06bef001ec.js b/vendor/gen/https/deno.land/64b187f10eca491f2de5bad67338eba7d10700ca5867bda5fdfc5e06bef001ec.js
new file mode 100644
index 0000000..c3a9cbd
--- /dev/null
+++ b/vendor/gen/https/deno.land/64b187f10eca491f2de5bad67338eba7d10700ca5867bda5fdfc5e06bef001ec.js
@@ -0,0 +1,145 @@
+import { didYouMeanCommand } from "./_utils.ts";
+import { getFlag } from "../flags/_utils.ts";
+export class CommandError extends Error {
+ constructor(message){
+ super(message);
+ Object.setPrototypeOf(this, CommandError.prototype);
+ }
+}
+export class ValidationError extends CommandError {
+ exitCode;
+ cmd;
+ constructor(message, { exitCode } = {}){
+ super(message);
+ Object.setPrototypeOf(this, ValidationError.prototype);
+ this.exitCode = exitCode ?? 1;
+ }
+}
+export class DuplicateOptionNameError extends CommandError {
+ constructor(name){
+ super(`Option with name "${getFlag(name)}" already exists.`);
+ Object.setPrototypeOf(this, DuplicateOptionNameError.prototype);
+ }
+}
+export class MissingCommandNameError extends CommandError {
+ constructor(){
+ super("Missing command name.");
+ Object.setPrototypeOf(this, MissingCommandNameError.prototype);
+ }
+}
+export class DuplicateCommandNameError extends CommandError {
+ constructor(name){
+ super(`Duplicate command name "${name}".`);
+ Object.setPrototypeOf(this, DuplicateCommandNameError.prototype);
+ }
+}
+export class DuplicateCommandAliasError extends CommandError {
+ constructor(alias){
+ super(`Duplicate command alias "${alias}".`);
+ Object.setPrototypeOf(this, DuplicateCommandAliasError.prototype);
+ }
+}
+export class CommandNotFoundError extends CommandError {
+ constructor(name, commands, excluded){
+ super(`Unknown command "${name}".${didYouMeanCommand(name, commands, excluded)}`);
+ Object.setPrototypeOf(this, CommandNotFoundError.prototype);
+ }
+}
+export class DuplicateTypeError extends CommandError {
+ constructor(name){
+ super(`Type with name "${name}" already exists.`);
+ Object.setPrototypeOf(this, DuplicateTypeError.prototype);
+ }
+}
+export class DuplicateCompletionError extends CommandError {
+ constructor(name){
+ super(`Completion with name "${name}" already exists.`);
+ Object.setPrototypeOf(this, DuplicateCompletionError.prototype);
+ }
+}
+export class DuplicateExampleError extends CommandError {
+ constructor(name){
+ super(`Example with name "${name}" already exists.`);
+ Object.setPrototypeOf(this, DuplicateExampleError.prototype);
+ }
+}
+export class DuplicateEnvVarError extends CommandError {
+ constructor(name){
+ super(`Environment variable with name "${name}" already exists.`);
+ Object.setPrototypeOf(this, DuplicateEnvVarError.prototype);
+ }
+}
+export class MissingRequiredEnvVarError extends ValidationError {
+ constructor(envVar){
+ super(`Missing required environment variable "${envVar.names[0]}".`);
+ Object.setPrototypeOf(this, MissingRequiredEnvVarError.prototype);
+ }
+}
+export class TooManyEnvVarValuesError extends CommandError {
+ constructor(name){
+ super(`An environment variable can only have one value, but "${name}" has more than one.`);
+ Object.setPrototypeOf(this, TooManyEnvVarValuesError.prototype);
+ }
+}
+export class UnexpectedOptionalEnvVarValueError extends CommandError {
+ constructor(name){
+ super(`An environment variable cannot have an optional value, but "${name}" is defined as optional.`);
+ Object.setPrototypeOf(this, UnexpectedOptionalEnvVarValueError.prototype);
+ }
+}
+export class UnexpectedVariadicEnvVarValueError extends CommandError {
+ constructor(name){
+ super(`An environment variable cannot have an variadic value, but "${name}" is defined as variadic.`);
+ Object.setPrototypeOf(this, UnexpectedVariadicEnvVarValueError.prototype);
+ }
+}
+export class DefaultCommandNotFoundError extends CommandError {
+ constructor(name, commands){
+ super(`Default command "${name}" not found.${didYouMeanCommand(name, commands)}`);
+ Object.setPrototypeOf(this, DefaultCommandNotFoundError.prototype);
+ }
+}
+export class CommandExecutableNotFoundError extends CommandError {
+ constructor(name){
+ super(`Command executable not found: ${name}`);
+ Object.setPrototypeOf(this, CommandExecutableNotFoundError.prototype);
+ }
+}
+export class UnknownCompletionCommandError extends CommandError {
+ constructor(name, commands){
+ super(`Auto-completion failed. Unknown command "${name}".${didYouMeanCommand(name, commands)}`);
+ Object.setPrototypeOf(this, UnknownCompletionCommandError.prototype);
+ }
+}
+/* Validation errors. */ export class UnknownCommandError extends ValidationError {
+ constructor(name, commands, excluded){
+ super(`Unknown command "${name}".${didYouMeanCommand(name, commands, excluded)}`);
+ Object.setPrototypeOf(this, UnknownCommandError.prototype);
+ }
+}
+export class NoArgumentsAllowedError extends ValidationError {
+ constructor(name){
+ super(`No arguments allowed for command "${name}".`);
+ Object.setPrototypeOf(this, NoArgumentsAllowedError.prototype);
+ }
+}
+export class MissingArgumentsError extends ValidationError {
+ constructor(names){
+ super(`Missing argument(s): ${names.join(", ")}`);
+ Object.setPrototypeOf(this, MissingArgumentsError.prototype);
+ }
+}
+export class MissingArgumentError extends ValidationError {
+ constructor(name){
+ super(`Missing argument: ${name}`);
+ Object.setPrototypeOf(this, MissingArgumentError.prototype);
+ }
+}
+export class TooManyArgumentsError extends ValidationError {
+ constructor(args){
+ super(`Too many arguments: ${args.join(" ")}`);
+ Object.setPrototypeOf(this, TooManyArgumentsError.prototype);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9fZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpZFlvdU1lYW5Db21tYW5kIH0gZnJvbSBcIi4vX3V0aWxzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBnZXRGbGFnIH0gZnJvbSBcIi4uL2ZsYWdzL191dGlscy50c1wiO1xuaW1wb3J0IHsgRW52VmFyIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIENvbW1hbmRFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yT3B0aW9ucyB7XG4gIGV4aXRDb2RlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQ29tbWFuZEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHB1YmxpYyBjbWQ/OiBDb21tYW5kO1xuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgeyBleGl0Q29kZSB9OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVmFsaWRhdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gICAgdGhpcy5leGl0Q29kZSA9IGV4aXRDb2RlID8/IDE7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER1cGxpY2F0ZU9wdGlvbk5hbWVFcnJvciBleHRlbmRzIENvbW1hbmRFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGBPcHRpb24gd2l0aCBuYW1lIFwiJHtnZXRGbGFnKG5hbWUpfVwiIGFscmVhZHkgZXhpc3RzLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBEdXBsaWNhdGVPcHRpb25OYW1lRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0NvbW1hbmROYW1lRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIk1pc3NpbmcgY29tbWFuZCBuYW1lLlwiKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlzc2luZ0NvbW1hbmROYW1lRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlQ29tbWFuZE5hbWVFcnJvciBleHRlbmRzIENvbW1hbmRFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGBEdXBsaWNhdGUgY29tbWFuZCBuYW1lIFwiJHtuYW1lfVwiLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBEdXBsaWNhdGVDb21tYW5kTmFtZUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER1cGxpY2F0ZUNvbW1hbmRBbGlhc0Vycm9yIGV4dGVuZHMgQ29tbWFuZEVycm9yIHtcbiAgY29uc3RydWN0b3IoYWxpYXM6IHN0cmluZykge1xuICAgIHN1cGVyKGBEdXBsaWNhdGUgY29tbWFuZCBhbGlhcyBcIiR7YWxpYXN9XCIuYCk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIER1cGxpY2F0ZUNvbW1hbmRBbGlhc0Vycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1hbmROb3RGb3VuZEVycm9yIGV4dGVuZHMgQ29tbWFuZEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbW1hbmRzOiBBcnJheTxDb21tYW5kPixcbiAgICBleGNsdWRlZD86IEFycmF5PHN0cmluZz4sXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgYFVua25vd24gY29tbWFuZCBcIiR7bmFtZX1cIi4ke1xuICAgICAgICBkaWRZb3VNZWFuQ29tbWFuZChuYW1lLCBjb21tYW5kcywgZXhjbHVkZWQpXG4gICAgICB9YCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBDb21tYW5kTm90Rm91bmRFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVUeXBlRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgVHlwZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIER1cGxpY2F0ZVR5cGVFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVDb21wbGV0aW9uRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgQ29tcGxldGlvbiB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIER1cGxpY2F0ZUNvbXBsZXRpb25FcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVFeGFtcGxlRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgRXhhbXBsZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIER1cGxpY2F0ZUV4YW1wbGVFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVFbnZWYXJFcnJvciBleHRlbmRzIENvbW1hbmRFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGBFbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIER1cGxpY2F0ZUVudlZhckVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pc3NpbmdSZXF1aXJlZEVudlZhckVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoZW52VmFyOiBFbnZWYXIpIHtcbiAgICBzdXBlcihgTWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBcIiR7ZW52VmFyLm5hbWVzWzBdfVwiLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaXNzaW5nUmVxdWlyZWRFbnZWYXJFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUb29NYW55RW52VmFyVmFsdWVzRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gb25seSBoYXZlIG9uZSB2YWx1ZSwgYnV0IFwiJHtuYW1lfVwiIGhhcyBtb3JlIHRoYW4gb25lLmAsXG4gICAgKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVG9vTWFueUVudlZhclZhbHVlc0Vycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRPcHRpb25hbEVudlZhclZhbHVlRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW5ub3QgaGF2ZSBhbiBvcHRpb25hbCB2YWx1ZSwgYnV0IFwiJHtuYW1lfVwiIGlzIGRlZmluZWQgYXMgb3B0aW9uYWwuYCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBVbmV4cGVjdGVkT3B0aW9uYWxFbnZWYXJWYWx1ZUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRWYXJpYWRpY0VudlZhclZhbHVlRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW5ub3QgaGF2ZSBhbiB2YXJpYWRpYyB2YWx1ZSwgYnV0IFwiJHtuYW1lfVwiIGlzIGRlZmluZWQgYXMgdmFyaWFkaWMuYCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBVbmV4cGVjdGVkVmFyaWFkaWNFbnZWYXJWYWx1ZUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHRDb21tYW5kTm90Rm91bmRFcnJvciBleHRlbmRzIENvbW1hbmRFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgY29tbWFuZHM6IEFycmF5PENvbW1hbmQ+KSB7XG4gICAgc3VwZXIoXG4gICAgICBgRGVmYXVsdCBjb21tYW5kIFwiJHtuYW1lfVwiIG5vdCBmb3VuZC4ke1xuICAgICAgICBkaWRZb3VNZWFuQ29tbWFuZChuYW1lLCBjb21tYW5kcylcbiAgICAgIH1gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIERlZmF1bHRDb21tYW5kTm90Rm91bmRFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kRXhlY3V0YWJsZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBDb21tYW5kIGV4ZWN1dGFibGUgbm90IGZvdW5kOiAke25hbWV9YCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBDb21tYW5kRXhlY3V0YWJsZU5vdEZvdW5kRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkNvbXBsZXRpb25Db21tYW5kRXJyb3IgZXh0ZW5kcyBDb21tYW5kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGNvbW1hbmRzOiBBcnJheTxDb21tYW5kPikge1xuICAgIHN1cGVyKFxuICAgICAgYEF1dG8tY29tcGxldGlvbiBmYWlsZWQuIFVua25vd24gY29tbWFuZCBcIiR7bmFtZX1cIi4ke1xuICAgICAgICBkaWRZb3VNZWFuQ29tbWFuZChuYW1lLCBjb21tYW5kcylcbiAgICAgIH1gLFxuICAgICk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFVua25vd25Db21wbGV0aW9uQ29tbWFuZEVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuLyogVmFsaWRhdGlvbiBlcnJvcnMuICovXG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29tbWFuZEVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbW1hbmRzOiBBcnJheTxDb21tYW5kPixcbiAgICBleGNsdWRlZD86IEFycmF5PHN0cmluZz4sXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgYFVua25vd24gY29tbWFuZCBcIiR7bmFtZX1cIi4ke1xuICAgICAgICBkaWRZb3VNZWFuQ29tbWFuZChuYW1lLCBjb21tYW5kcywgZXhjbHVkZWQpXG4gICAgICB9YCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBVbmtub3duQ29tbWFuZEVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vQXJndW1lbnRzQWxsb3dlZEVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYE5vIGFyZ3VtZW50cyBhbGxvd2VkIGZvciBjb21tYW5kIFwiJHtuYW1lfVwiLmApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBOb0FyZ3VtZW50c0FsbG93ZWRFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nQXJndW1lbnRzRXJyb3IgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyKGBNaXNzaW5nIGFyZ3VtZW50KHMpOiAke25hbWVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlzc2luZ0FyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pc3NpbmdBcmd1bWVudEVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYE1pc3NpbmcgYXJndW1lbnQ6ICR7bmFtZX1gKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlzc2luZ0FyZ3VtZW50RXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVG9vTWFueUFyZ3VtZW50c0Vycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoYXJnczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyKGBUb28gbWFueSBhcmd1bWVudHM6ICR7YXJncy5qb2luKFwiIFwiKX1gKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVG9vTWFueUFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGlCQUFpQixRQUFRLGNBQWM7QUFFaEQsU0FBUyxPQUFPLFFBQVEscUJBQXFCO0FBRzdDLE9BQU8sTUFBTSxxQkFBcUI7RUFDaEMsWUFBWSxPQUFlLENBQUU7SUFDM0IsS0FBSyxDQUFDO0lBQ04sT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLGFBQWEsU0FBUztFQUNwRDtBQUNGO0FBTUEsT0FBTyxNQUFNLHdCQUF3QjtFQUNuQixTQUFpQjtFQUMxQixJQUFjO0VBRXJCLFlBQVksT0FBZSxFQUFFLEVBQUUsUUFBUSxFQUEwQixHQUFHLENBQUMsQ0FBQyxDQUFFO0lBQ3RFLEtBQUssQ0FBQztJQUNOLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsU0FBUztJQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVk7RUFDOUI7QUFDRjtBQUVBLE9BQU8sTUFBTSxpQ0FBaUM7RUFDNUMsWUFBWSxJQUFZLENBQUU7SUFDeEIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxNQUFNLGlCQUFpQixDQUFDO0lBQzNELE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSx5QkFBeUIsU0FBUztFQUNoRTtBQUNGO0FBRUEsT0FBTyxNQUFNLGdDQUFnQztFQUMzQyxhQUFjO0lBQ1osS0FBSyxDQUFDO0lBQ04sT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLHdCQUF3QixTQUFTO0VBQy9EO0FBQ0Y7QUFFQSxPQUFPLE1BQU0sa0NBQWtDO0VBQzdDLFlBQVksSUFBWSxDQUFFO0lBQ3hCLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pDLE9BQU8sY0FBYyxDQUFDLElB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
+// denoCacheMetadata=5330571164636848954,4647063369634617273 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/653a9124b6c7f2524a1e24c4414d26cf65abdfb71ad6df5710e2e43e106bf5d9.js b/vendor/gen/https/deno.land/653a9124b6c7f2524a1e24c4414d26cf65abdfb71ad6df5710e2e43e106bf5d9.js
new file mode 100644
index 0000000..84cfbd2
--- /dev/null
+++ b/vendor/gen/https/deno.land/653a9124b6c7f2524a1e24c4414d26cf65abdfb71ad6df5710e2e43e106bf5d9.js
@@ -0,0 +1,85 @@
+import { Provider } from "../provider.ts";
+import { bold, brightBlue } from "../../deps.ts";
+export class GithubProvider extends Provider {
+ name = "github";
+ repositoryUrl = "https://github.com/";
+ registryUrl = "https://raw.githubusercontent.com/";
+ apiUrl = "https://api.github.com/repos/";
+ repositoryName;
+ listBranches;
+ githubToken;
+ constructor({ repository, branches = true, token }){
+ super();
+ this.repositoryName = repository;
+ this.listBranches = branches;
+ this.githubToken = token;
+ }
+ async getVersions(_name) {
+ const [tags, branches] = await Promise.all([
+ this.gitFetch("git/refs/tags"),
+ this.gitFetch("branches")
+ ]);
+ const tagNames = tags.map((tag)=>tag.ref.replace(/^refs\/tags\//, "")).reverse();
+ const branchNames = branches.sort((a, b)=>a.protected === b.protected ? 0 : a.protected ? 1 : -1).map((tag)=>`${tag.name} ${tag.protected ? `(${bold("Protected")})` : ""}`).reverse();
+ return {
+ versions: [
+ ...tagNames,
+ ...branchNames
+ ],
+ latest: tagNames[0],
+ tags: tagNames,
+ branches: branchNames
+ };
+ }
+ getRepositoryUrl(_name) {
+ return new URL(`${this.repositoryName}/`, this.repositoryUrl).href;
+ }
+ getRegistryUrl(_name, version) {
+ return new URL(`${this.repositoryName}/${version}/`, this.registryUrl).href;
+ }
+ async listVersions(name, currentVersion) {
+ const { tags, branches } = await this.getVersions(name);
+ const showBranches = !!this.listBranches && branches.length > 0;
+ const indent = showBranches ? 2 : 0;
+ if (showBranches) {
+ console.log("\n" + " ".repeat(indent) + bold(brightBlue("Tags:\n")));
+ }
+ super.printVersions(tags, currentVersion, {
+ indent
+ });
+ if (showBranches) {
+ console.log("\n" + " ".repeat(indent) + bold(brightBlue("Branches:\n")));
+ super.printVersions(branches, currentVersion, {
+ maxCols: 5,
+ indent
+ });
+ console.log();
+ }
+ }
+ getApiUrl(endpoint) {
+ return new URL(`${this.repositoryName}/${endpoint}`, this.apiUrl).href;
+ }
+ async gitFetch(endpoint) {
+ const headers = new Headers({
+ "Content-Type": "application/json"
+ });
+ if (this.githubToken) {
+ headers.set("Authorization", this.githubToken ? `token ${this.githubToken}` : "");
+ }
+ const response = await fetch(this.getApiUrl(endpoint), {
+ method: "GET",
+ cache: "default",
+ headers
+ });
+ if (!response.status) {
+ throw new Error("couldn't fetch versions - try again after sometime");
+ }
+ const data = await response.json();
+ if (typeof data === "object" && "message" in data && "documentation_url" in data) {
+ throw new Error(data.message + " " + data.documentation_url);
+ }
+ return data;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC91cGdyYWRlL3Byb3ZpZGVyL2dpdGh1Yi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgVmVyc2lvbnMgfSBmcm9tIFwiLi4vcHJvdmlkZXIudHNcIjtcbmltcG9ydCB7IGJvbGQsIGJyaWdodEJsdWUgfSBmcm9tIFwiLi4vLi4vZGVwcy50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdGh1YlByb3ZpZGVyT3B0aW9ucyB7XG4gIHJlcG9zaXRvcnk6IHN0cmluZztcbiAgYnJhbmNoZXM/OiBib29sZWFuO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHaXRodWJWZXJzaW9ucyBleHRlbmRzIFZlcnNpb25zIHtcbiAgdGFnczogQXJyYXk8c3RyaW5nPjtcbiAgYnJhbmNoZXM6IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRodWJQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyIHtcbiAgbmFtZSA9IFwiZ2l0aHViXCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb3NpdG9yeVVybCA9IFwiaHR0cHM6Ly9naXRodWIuY29tL1wiO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5VXJsID0gXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vXCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsID0gXCJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL1wiO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdEJyYW5jaGVzPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBnaXRodWJUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih7IHJlcG9zaXRvcnksIGJyYW5jaGVzID0gdHJ1ZSwgdG9rZW4gfTogR2l0aHViUHJvdmlkZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlcG9zaXRvcnlOYW1lID0gcmVwb3NpdG9yeTtcbiAgICB0aGlzLmxpc3RCcmFuY2hlcyA9IGJyYW5jaGVzO1xuICAgIHRoaXMuZ2l0aHViVG9rZW4gPSB0b2tlbjtcbiAgfVxuXG4gIGFzeW5jIGdldFZlcnNpb25zKFxuICAgIF9uYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8R2l0aHViVmVyc2lvbnM+IHtcbiAgICBjb25zdCBbdGFncywgYnJhbmNoZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5naXRGZXRjaDxBcnJheTx7IHJlZjogc3RyaW5nIH0+PihcImdpdC9yZWZzL3RhZ3NcIiksXG4gICAgICB0aGlzLmdpdEZldGNoPEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm90ZWN0ZWQ6IGJvb2xlYW4gfT4+KFwiYnJhbmNoZXNcIiksXG4gICAgXSk7XG5cbiAgICBjb25zdCB0YWdOYW1lcyA9IHRhZ3NcbiAgICAgIC5tYXAoKHRhZykgPT4gdGFnLnJlZi5yZXBsYWNlKC9ecmVmc1xcL3RhZ3NcXC8vLCBcIlwiKSlcbiAgICAgIC5yZXZlcnNlKCk7XG5cbiAgICBjb25zdCBicmFuY2hOYW1lcyA9IGJyYW5jaGVzXG4gICAgICAuc29ydCgoYSwgYikgPT5cbiAgICAgICAgKGEucHJvdGVjdGVkID09PSBiLnByb3RlY3RlZCkgPyAwIDogKGEucHJvdGVjdGVkID8gMSA6IC0xKVxuICAgICAgKVxuICAgICAgLm1hcCgodGFnKSA9PlxuICAgICAgICBgJHt0YWcubmFtZX0gJHt0YWcucHJvdGVjdGVkID8gYCgke2JvbGQoXCJQcm90ZWN0ZWRcIil9KWAgOiBcIlwifWBcbiAgICAgIClcbiAgICAgIC5yZXZlcnNlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbnM6IFtcbiAgICAgICAgLi4udGFnTmFtZXMsXG4gICAgICAgIC4uLmJyYW5jaE5hbWVzLFxuICAgICAgXSxcbiAgICAgIGxhdGVzdDogdGFnTmFtZXNbMF0sXG4gICAgICB0YWdzOiB0YWdOYW1lcyxcbiAgICAgIGJyYW5jaGVzOiBicmFuY2hOYW1lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeVVybChfbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFVSTChgJHt0aGlzLnJlcG9zaXRvcnlOYW1lfS9gLCB0aGlzLnJlcG9zaXRvcnlVcmwpLmhyZWY7XG4gIH1cblxuICBnZXRSZWdpc3RyeVVybChfbmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVVJMKGAke3RoaXMucmVwb3NpdG9yeU5hbWV9LyR7dmVyc2lvbn0vYCwgdGhpcy5yZWdpc3RyeVVybCkuaHJlZjtcbiAgfVxuXG4gIGFzeW5jIGxpc3RWZXJzaW9ucyhuYW1lOiBzdHJpbmcsIGN1cnJlbnRWZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0YWdzLCBicmFuY2hlcyB9ID0gYXdhaXQgdGhpcy5nZXRWZXJzaW9ucyhuYW1lKTtcbiAgICBjb25zdCBzaG93QnJhbmNoZXM6IGJvb2xlYW4gPSAhIXRoaXMubGlzdEJyYW5jaGVzICYmIGJyYW5jaGVzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaW5kZW50ID0gc2hvd0JyYW5jaGVzID8gMiA6IDA7XG4gICAgaWYgKHNob3dCcmFuY2hlcykge1xuICAgICAgY29uc29sZS5sb2coXCJcXG5cIiArIFwiIFwiLnJlcGVhdChpbmRlbnQpICsgYm9sZChicmlnaHRCbHVlKFwiVGFnczpcXG5cIikpKTtcbiAgICB9XG4gICAgc3VwZXIucHJpbnRWZXJzaW9ucyh0YWdzLCBjdXJyZW50VmVyc2lvbiwgeyBpbmRlbnQgfSk7XG4gICAgaWYgKHNob3dCcmFuY2hlcykge1xuICAgICAgY29uc29sZS5sb2coXCJcXG5cIiArIFwiIFwiLnJlcGVhdChpbmRlbnQpICsgYm9sZChicmlnaHRCbHVlKFwiQnJhbmNoZXM6XFxuXCIpKSk7XG4gICAgICBzdXBlci5wcmludFZlcnNpb25zKGJyYW5jaGVzLCBjdXJyZW50VmVyc2lvbiwgeyBtYXhDb2xzOiA1LCBpbmRlbnQgfSk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBpVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVVJMKGAke3RoaXMucmVwb3NpdG9yeU5hbWV9LyR7ZW5kcG9pbnR9YCwgdGhpcy5hcGlVcmwpLmhyZWY7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdpdEZldGNoPFQ+KGVuZHBvaW50OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KTtcbiAgICBpZiAodGhpcy5naXRodWJUb2tlbikge1xuICAgICAgaGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICB0aGlzLmdpdGh1YlRva2VuID8gYHRva2VuICR7dGhpcy5naXRodWJUb2tlbn1gIDogXCJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICB0aGlzLmdldEFwaVVybChlbmRwb2ludCksXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgY2FjaGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjb3VsZG4ndCBmZXRjaCB2ZXJzaW9ucyAtIHRyeSBhZ2FpbiBhZnRlciBzb21ldGltZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhOiBHaXRodWJSZXNwb25zZSAmIFQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcIm1lc3NhZ2VcIiBpbiBkYXRhICYmXG4gICAgICBcImRvY3VtZW50YXRpb25fdXJsXCIgaW4gZGF0YVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEubWVzc2FnZSArIFwiIFwiICsgZGF0YS5kb2N1bWVudGF0aW9uX3VybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEdpdGh1YlJlc3BvbnNlIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuICBkb2N1bWVudGF0aW9uX3VybDogc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsUUFBUSxRQUFrQixpQkFBaUI7QUFDcEQsU0FBUyxJQUFJLEVBQUUsVUFBVSxRQUFRLGdCQUFnQjtBQWFqRCxPQUFPLE1BQU0sdUJBQXVCO0VBQ2xDLE9BQU8sU0FBUztFQUNDLGdCQUFnQixzQkFBc0I7RUFDdEMsY0FBYyxxQ0FBcUM7RUFDbkQsU0FBUyxnQ0FBZ0M7RUFDekMsZUFBdUI7RUFDdkIsYUFBdUI7RUFDdkIsWUFBcUI7RUFFdEMsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXLElBQUksRUFBRSxLQUFLLEVBQXlCLENBQUU7SUFDekUsS0FBSztJQUNMLElBQUksQ0FBQyxjQUFjLEdBQUc7SUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRztJQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHO0VBQ3JCO0VBRUEsTUFBTSxZQUNKLEtBQWEsRUFDWTtJQUN6QixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQztNQUN6QyxJQUFJLENBQUMsUUFBUSxDQUF5QjtNQUN0QyxJQUFJLENBQUMsUUFBUSxDQUE4QztLQUM1RDtJQUVELE1BQU0sV0FBVyxLQUNk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
+// denoCacheMetadata=3918168443235015597,917453446495057520 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/683b7dddf0f9dec790e257c3356353924573d9830d6da5e65cbaeb13542e62bc.js b/vendor/gen/https/deno.land/683b7dddf0f9dec790e257c3356353924573d9830d6da5e65cbaeb13542e62bc.js
new file mode 100644
index 0000000..91371a2
--- /dev/null
+++ b/vendor/gen/https/deno.land/683b7dddf0f9dec790e257c3356353924573d9830d6da5e65cbaeb13542e62bc.js
@@ -0,0 +1,25 @@
+import { cursorPosition } from "./ansi_escapes.ts";
+/**
+ * Get cursor position.
+ * @param options Options.
+ * ```
+ * const cursor: Cursor = getCursorPosition();
+ * console.log(cursor); // { x: 0, y: 14}
+ * ```
+ */ export function getCursorPosition({ stdin = Deno.stdin, stdout = Deno.stdout } = {}) {
+ const data = new Uint8Array(8);
+ Deno.stdin.setRaw(true);
+ stdout.writeSync(new TextEncoder().encode(cursorPosition));
+ stdin.readSync(data);
+ Deno.stdin.setRaw(false);
+ const [y, x] = new TextDecoder().decode(data).match(/\[(\d+);(\d+)R/)?.slice(1, 3).map(Number) ?? [
+ 0,
+ 0
+ ];
+ return {
+ x,
+ y
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9jdXJzb3JfcG9zaXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3Vyc29yUG9zaXRpb24gfSBmcm9tIFwiLi9hbnNpX2VzY2FwZXMudHNcIjtcblxuLyoqIEN1cnNvciBwb3NpdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Vyc29yIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5cbi8qKiBDdXJzb3IgcG9zaXRpb24gb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Vyc29yUG9zaXRpb25PcHRpb25zIHtcbiAgc3Rkb3V0PzogRGVuby5Xcml0ZXJTeW5jO1xuICBzdGRpbj86IERlbm8uUmVhZGVyU3luYyAmIHsgcmlkOiBudW1iZXIgfTtcbn1cblxuLyoqXG4gKiBHZXQgY3Vyc29yIHBvc2l0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMgIE9wdGlvbnMuXG4gKiBgYGBcbiAqIGNvbnN0IGN1cnNvcjogQ3Vyc29yID0gZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAqIGNvbnNvbGUubG9nKGN1cnNvcik7IC8vIHsgeDogMCwgeTogMTR9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnNvclBvc2l0aW9uKFxuICB7XG4gICAgc3RkaW4gPSBEZW5vLnN0ZGluLFxuICAgIHN0ZG91dCA9IERlbm8uc3Rkb3V0LFxuICB9OiBDdXJzb3JQb3NpdGlvbk9wdGlvbnMgPSB7fSxcbik6IEN1cnNvciB7XG4gIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheSg4KTtcblxuICBEZW5vLnN0ZGluLnNldFJhdyh0cnVlKTtcbiAgc3Rkb3V0LndyaXRlU3luYyhuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY3Vyc29yUG9zaXRpb24pKTtcbiAgc3RkaW4ucmVhZFN5bmMoZGF0YSk7XG4gIERlbm8uc3RkaW4uc2V0UmF3KGZhbHNlKTtcblxuICBjb25zdCBbeSwgeF0gPSBuZXcgVGV4dERlY29kZXIoKVxuICAgIC5kZWNvZGUoZGF0YSlcbiAgICAubWF0Y2goL1xcWyhcXGQrKTsoXFxkKylSLylcbiAgICA/LnNsaWNlKDEsIDMpXG4gICAgLm1hcChOdW1iZXIpID8/IFswLCAwXTtcblxuICByZXR1cm4geyB4LCB5IH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxjQUFjLFFBQVEsb0JBQW9CO0FBY25EOzs7Ozs7O0NBT0MsR0FDRCxPQUFPLFNBQVMsa0JBQ2QsRUFDRSxRQUFRLEtBQUssS0FBSyxFQUNsQixTQUFTLEtBQUssTUFBTSxFQUNFLEdBQUcsQ0FBQyxDQUFDO0VBRTdCLE1BQU0sT0FBTyxJQUFJLFdBQVc7RUFFNUIsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ2xCLE9BQU8sU0FBUyxDQUFDLElBQUksY0FBYyxNQUFNLENBQUM7RUFDMUMsTUFBTSxRQUFRLENBQUM7RUFDZixLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFFbEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksY0FDaEIsTUFBTSxDQUFDLE1BQ1AsS0FBSyxDQUFDLG1CQUNMLE1BQU0sR0FBRyxHQUNWLElBQUksV0FBVztJQUFDO0lBQUc7R0FBRTtFQUV4QixPQUFPO0lBQUU7SUFBRztFQUFFO0FBQ2hCIn0=
+// denoCacheMetadata=2920269944407932150,8303823756177200673 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/691762d8ecff814dc5b66d198c595a2ee1b134ce9785ee1888950aa7ba00f189.js b/vendor/gen/https/deno.land/691762d8ecff814dc5b66d198c595a2ee1b134ce9785ee1888950aa7ba00f189.js
new file mode 100644
index 0000000..7c3a2b7
--- /dev/null
+++ b/vendor/gen/https/deno.land/691762d8ecff814dc5b66d198c595a2ee1b134ce9785ee1888950aa7ba00f189.js
@@ -0,0 +1,436 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./_constants.ts";
+import { _format, assertPath, encodeWhitespace, isPosixPathSeparator, normalizeString } from "./_util.ts";
+export const sep = "/";
+export const delimiter = ":";
+// path.resolve([from ...], to)
+/**
+ * Resolves `pathSegments` into an absolute path.
+ * @param pathSegments an array of path segments
+ */ export function resolve(...pathSegments) {
+ let resolvedPath = "";
+ let resolvedAbsolute = false;
+ for(let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--){
+ let path;
+ if (i >= 0) path = pathSegments[i];
+ else {
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a relative path without a CWD.");
+ }
+ path = Deno.cwd();
+ }
+ assertPath(path);
+ // Skip empty entries
+ if (path.length === 0) {
+ continue;
+ }
+ resolvedPath = `${path}/${resolvedPath}`;
+ resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
+ }
+ // At this point the path should be resolved to a full absolute path, but
+ // handle relative paths to be safe (might happen when process.cwd() fails)
+ // Normalize the path
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
+ if (resolvedAbsolute) {
+ if (resolvedPath.length > 0) return `/${resolvedPath}`;
+ else return "/";
+ } else if (resolvedPath.length > 0) return resolvedPath;
+ else return ".";
+}
+/**
+ * Normalize the `path`, resolving `'..'` and `'.'` segments.
+ * Note that resolving these segments does not necessarily mean that all will be eliminated.
+ * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
+ * @param path to be normalized
+ */ export function normalize(path) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+ const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
+ const trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;
+ // Normalize the path
+ path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator);
+ if (path.length === 0 && !isAbsolute) path = ".";
+ if (path.length > 0 && trailingSeparator) path += "/";
+ if (isAbsolute) return `/${path}`;
+ return path;
+}
+/**
+ * Verifies whether provided path is absolute
+ * @param path to be verified as absolute
+ */ export function isAbsolute(path) {
+ assertPath(path);
+ return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;
+}
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ * @param paths to be joined and normalized
+ */ export function join(...paths) {
+ if (paths.length === 0) return ".";
+ let joined;
+ for(let i = 0, len = paths.length; i < len; ++i){
+ const path = paths[i];
+ assertPath(path);
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `/${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalize(joined);
+}
+/**
+ * Return the relative path from `from` to `to` based on current working directory.
+ * @param from path in current working directory
+ * @param to path in current working directory
+ */ export function relative(from, to) {
+ assertPath(from);
+ assertPath(to);
+ if (from === to) return "";
+ from = resolve(from);
+ to = resolve(to);
+ if (from === to) return "";
+ // Trim any leading backslashes
+ let fromStart = 1;
+ const fromEnd = from.length;
+ for(; fromStart < fromEnd; ++fromStart){
+ if (from.charCodeAt(fromStart) !== CHAR_FORWARD_SLASH) break;
+ }
+ const fromLen = fromEnd - fromStart;
+ // Trim any leading backslashes
+ let toStart = 1;
+ const toEnd = to.length;
+ for(; toStart < toEnd; ++toStart){
+ if (to.charCodeAt(toStart) !== CHAR_FORWARD_SLASH) break;
+ }
+ const toLen = toEnd - toStart;
+ // Compare paths to find the longest common path from root
+ const length = fromLen < toLen ? fromLen : toLen;
+ let lastCommonSep = -1;
+ let i = 0;
+ for(; i <= length; ++i){
+ if (i === length) {
+ if (toLen > length) {
+ if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) {
+ // We get here if `from` is the exact base path for `to`.
+ // For example: from='/foo/bar'; to='/foo/bar/baz'
+ return to.slice(toStart + i + 1);
+ } else if (i === 0) {
+ // We get here if `from` is the root
+ // For example: from='/'; to='/foo'
+ return to.slice(toStart + i);
+ }
+ } else if (fromLen > length) {
+ if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='/foo/bar/baz'; to='/foo/bar'
+ lastCommonSep = i;
+ } else if (i === 0) {
+ // We get here if `to` is the root.
+ // For example: from='/foo'; to='/'
+ lastCommonSep = 0;
+ }
+ }
+ break;
+ }
+ const fromCode = from.charCodeAt(fromStart + i);
+ const toCode = to.charCodeAt(toStart + i);
+ if (fromCode !== toCode) break;
+ else if (fromCode === CHAR_FORWARD_SLASH) lastCommonSep = i;
+ }
+ let out = "";
+ // Generate the relative path based on the path difference between `to`
+ // and `from`
+ for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
+ if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {
+ if (out.length === 0) out += "..";
+ else out += "/..";
+ }
+ }
+ // Lastly, append the rest of the destination (`to`) path that comes after
+ // the common path parts
+ if (out.length > 0) return out + to.slice(toStart + lastCommonSep);
+ else {
+ toStart += lastCommonSep;
+ if (to.charCodeAt(toStart) === CHAR_FORWARD_SLASH) ++toStart;
+ return to.slice(toStart);
+ }
+}
+/**
+ * Resolves path to a namespace path
+ * @param path to resolve to namespace
+ */ export function toNamespacedPath(path) {
+ // Non-op on posix systems
+ return path;
+}
+/**
+ * Return the directory path of a `path`.
+ * @param path to determine the directory path for
+ */ export function dirname(path) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+ const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
+ let end = -1;
+ let matchedSlash = true;
+ for(let i = path.length - 1; i >= 1; --i){
+ if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {
+ if (!matchedSlash) {
+ end = i;
+ break;
+ }
+ } else {
+ // We saw the first non-path separator
+ matchedSlash = false;
+ }
+ }
+ if (end === -1) return hasRoot ? "/" : ".";
+ if (hasRoot && end === 1) return "//";
+ return path.slice(0, end);
+}
+/**
+ * Return the last portion of a `path`. Trailing directory separators are ignored.
+ * @param path to process
+ * @param ext of path directory
+ */ export function basename(path, ext = "") {
+ if (ext !== undefined && typeof ext !== "string") {
+ throw new TypeError('"ext" argument must be a string');
+ }
+ assertPath(path);
+ let start = 0;
+ let end = -1;
+ let matchedSlash = true;
+ let i;
+ if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
+ if (ext.length === path.length && ext === path) return "";
+ let extIdx = ext.length - 1;
+ let firstNonSlashEnd = -1;
+ for(i = path.length - 1; i >= 0; --i){
+ const code = path.charCodeAt(i);
+ if (code === CHAR_FORWARD_SLASH) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ start = i + 1;
+ break;
+ }
+ } else {
+ if (firstNonSlashEnd === -1) {
+ // We saw the first non-path separator, remember this index in case
+ // we need it if the extension ends up not matching
+ matchedSlash = false;
+ firstNonSlashEnd = i + 1;
+ }
+ if (extIdx >= 0) {
+ // Try to match the explicit extension
+ if (code === ext.charCodeAt(extIdx)) {
+ if (--extIdx === -1) {
+ // We matched the extension, so mark this as the end of our path
+ // component
+ end = i;
+ }
+ } else {
+ // Extension does not match, so our result is the entire path
+ // component
+ extIdx = -1;
+ end = firstNonSlashEnd;
+ }
+ }
+ }
+ }
+ if (start === end) end = firstNonSlashEnd;
+ else if (end === -1) end = path.length;
+ return path.slice(start, end);
+ } else {
+ for(i = path.length - 1; i >= 0; --i){
+ if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ start = i + 1;
+ break;
+ }
+ } else if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // path component
+ matchedSlash = false;
+ end = i + 1;
+ }
+ }
+ if (end === -1) return "";
+ return path.slice(start, end);
+ }
+}
+/**
+ * Return the extension of the `path` with leading period.
+ * @param path with extension
+ * @returns extension (ex. for `file.ts` returns `.ts`)
+ */ export function extname(path) {
+ assertPath(path);
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ for(let i = path.length - 1; i >= 0; --i){
+ const code = path.charCodeAt(i);
+ if (code === CHAR_FORWARD_SLASH) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ return "";
+ }
+ return path.slice(startDot, end);
+}
+/**
+ * Generate a path from `FormatInputPathObject` object.
+ * @param pathObject with path
+ */ export function format(pathObject) {
+ if (pathObject === null || typeof pathObject !== "object") {
+ throw new TypeError(`The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`);
+ }
+ return _format("/", pathObject);
+}
+/**
+ * Return a `ParsedPath` object of the `path`.
+ * @param path to process
+ */ export function parse(path) {
+ assertPath(path);
+ const ret = {
+ root: "",
+ dir: "",
+ base: "",
+ ext: "",
+ name: ""
+ };
+ if (path.length === 0) return ret;
+ const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
+ let start;
+ if (isAbsolute) {
+ ret.root = "/";
+ start = 1;
+ } else {
+ start = 0;
+ }
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ let i = path.length - 1;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Get non-dir info
+ for(; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (code === CHAR_FORWARD_SLASH) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ if (end !== -1) {
+ if (startPart === 0 && isAbsolute) {
+ ret.base = ret.name = path.slice(1, end);
+ } else {
+ ret.base = ret.name = path.slice(startPart, end);
+ }
+ }
+ } else {
+ if (startPart === 0 && isAbsolute) {
+ ret.name = path.slice(1, startDot);
+ ret.base = path.slice(1, end);
+ } else {
+ ret.name = path.slice(startPart, startDot);
+ ret.base = path.slice(startPart, end);
+ }
+ ret.ext = path.slice(startDot, end);
+ }
+ if (startPart > 0) ret.dir = path.slice(0, startPart - 1);
+ else if (isAbsolute) ret.dir = "/";
+ return ret;
+}
+/**
+ * Converts a file URL to a path string.
+ *
+ * ```ts
+ * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts";
+ * fromFileUrl("file:///home/foo"); // "/home/foo"
+ * ```
+ * @param url of a file URL
+ */ export function fromFileUrl(url) {
+ url = url instanceof URL ? url : new URL(url);
+ if (url.protocol != "file:") {
+ throw new TypeError("Must be a file URL.");
+ }
+ return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
+}
+/**
+ * Converts a path string to a file URL.
+ *
+ * ```ts
+ * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts";
+ * toFileUrl("/home/foo"); // new URL("file:///home/foo")
+ * ```
+ * @param path to convert to file URL
+ */ export function toFileUrl(path) {
+ if (!isAbsolute(path)) {
+ throw new TypeError("Must be an absolute path.");
+ }
+ const url = new URL("file:///");
+ url.pathname = encodeWhitespace(path.replace(/%/g, "%25").replace(/\\/g, "%5C"));
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvcG9zaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBGb3JtYXRJbnB1dFBhdGhPYmplY3QsIFBhcnNlZFBhdGggfSBmcm9tIFwiLi9faW50ZXJmYWNlLnRzXCI7XG5pbXBvcnQgeyBDSEFSX0RPVCwgQ0hBUl9GT1JXQVJEX1NMQVNIIH0gZnJvbSBcIi4vX2NvbnN0YW50cy50c1wiO1xuXG5pbXBvcnQge1xuICBfZm9ybWF0LFxuICBhc3NlcnRQYXRoLFxuICBlbmNvZGVXaGl0ZXNwYWNlLFxuICBpc1Bvc2l4UGF0aFNlcGFyYXRvcixcbiAgbm9ybWFsaXplU3RyaW5nLFxufSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG5leHBvcnQgY29uc3Qgc2VwID0gXCIvXCI7XG5leHBvcnQgY29uc3QgZGVsaW1pdGVyID0gXCI6XCI7XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8qKlxuICogUmVzb2x2ZXMgYHBhdGhTZWdtZW50c2AgaW50byBhbiBhYnNvbHV0ZSBwYXRoLlxuICogQHBhcmFtIHBhdGhTZWdtZW50cyBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgcmVzb2x2ZWRQYXRoID0gXCJcIjtcbiAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIGxldCBwYXRoOiBzdHJpbmc7XG5cbiAgICBpZiAoaSA+PSAwKSBwYXRoID0gcGF0aFNlZ21lbnRzW2ldO1xuICAgIGVsc2Uge1xuICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gICAgICBpZiAodHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIENXRC5cIik7XG4gICAgICB9XG4gICAgICBwYXRoID0gRGVuby5jd2QoKTtcbiAgICB9XG5cbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXNvbHZlZFBhdGggPSBgJHtwYXRofS8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZVN0cmluZyhcbiAgICByZXNvbHZlZFBhdGgsXG4gICAgIXJlc29sdmVkQWJzb2x1dGUsXG4gICAgXCIvXCIsXG4gICAgaXNQb3NpeFBhdGhTZXBhcmF0b3IsXG4gICk7XG5cbiAgaWYgKHJlc29sdmVkQWJzb2x1dGUpIHtcbiAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApIHJldHVybiBgLyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgZWxzZSByZXR1cm4gXCIvXCI7XG4gIH0gZWxzZSBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlZFBhdGg7XG4gIGVsc2UgcmV0dXJuIFwiLlwiO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgYHBhdGhgLCByZXNvbHZpbmcgYCcuLidgIGFuZCBgJy4nYCBzZWdtZW50cy5cbiAqIE5vdGUgdGhhdCByZXNvbHZpbmcgdGhlc2Ugc2VnbWVudHMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGFsbCB3aWxsIGJlIGVsaW1pbmF0ZWQuXG4gKiBBIGAnLi4nYCBhdCB0aGUgdG9wLWxldmVsIHdpbGwgYmUgcHJlc2VydmVkLCBhbmQgYW4gZW1wdHkgcGF0aCBpcyBjYW5vbmljYWxseSBgJy4nYC5cbiAqIEBwYXJhbSBwYXRoIHRvIGJlIG5vcm1hbGl6ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuXG4gIGNvbnN0IGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbiAgY29uc3QgdHJhaWxpbmdTZXBhcmF0b3IgPVxuICAgIHBhdGguY2hhckNvZGVBdChwYXRoLmxlbmd0aCAtIDEpID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHBhdGggPSBub3JtYWxpemVTdHJpbmcocGF0aCwgIWlzQWJzb2x1dGUsIFwiL1wiLCBpc1Bvc2l4UGF0aFNlcGFyYXRvcik7XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwICYmICFpc0Fic29sdXRlKSBwYXRoID0gXCIuXCI7XG4gIGlmIChwYXRoLmxlbmd0aCA+IDAgJiYgdHJhaWxpbmdTZXBhcmF0b3IpIHBhdGggKz0gXCIvXCI7XG5cbiAgaWYgKGlzQWJzb2x1dGUpIHJldHVybiBgLyR7cGF0aH1gO1xuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHByb3ZpZGVkIHBhdGggaXMgYWJzb2x1dGVcbiAqIEBwYXJhbSBwYXRoIHRvIGJlIHZlcmlmaWVkIGFzIGFic29sdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICByZXR1cm4gcGF0aC5sZW5ndGggPiAwICYmIHBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xufVxuXG4vKipcbiAqIEpvaW4gYWxsIGdpdmVuIGEgc2VxdWVuY2Ugb2YgYHBhdGhzYCx0aGVuIG5vcm1hbGl6ZXMgdGhlIHJlc3VsdGluZyBwYXRoLlxuICogQHBhcmFtIHBhdGhzIHRvIGJlIGpvaW5lZCBhbmQgbm9ybWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pbiguLi5wYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSByZXR1cm4gXCIuXCI7XG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhdGhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgY29uc3QgcGF0aCA9IHBhdGhzW2ldO1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFqb2luZWQpIGpvaW5lZCA9IHBhdGg7XG4gICAgICBlbHNlIGpvaW5lZCArPSBgLyR7cGF0aH1gO1xuICAgIH1cbiAgfVxuICBpZiAoIWpvaW5lZCkgcmV0dXJuIFwiLlwiO1xuICByZXR1cm4gbm9ybWFsaXplKGpvaW5lZCk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gYGZyb21gIHRvIGB0b2AgYmFzZWQgb24gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSBmcm9tIHBhdGggaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICogQHBhcmFtIHRvIHBhdGggaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChmcm9tKTtcbiAgYXNzZXJ0UGF0aCh0byk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICBmcm9tID0gcmVzb2x2ZShmcm9tKTtcbiAgdG8gPSByZXNvbHZlKHRvKTtcblxuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBcIlwiO1xuXG4gIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgbGV0IGZyb21TdGFydCA9IDE7XG4gIGNvbnN0IGZyb21FbmQgPSBmcm9tLmxlbmd0aDtcbiAgZm9yICg7IGZyb21TdGFydCA8IGZyb21FbmQ7ICsrZnJvbVN0YXJ0KSB7XG4gICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSBDSEFSX0ZPUldBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgbGV0IHRvU3RhcnQgPSAxO1xuICBjb25zdCB0b0VuZCA9IHRvLmxlbmd0aDtcbiAgZm9yICg7IHRvU3RhcnQgPCB0b0VuZDsgKyt0b1N0YXJ0KSB7XG4gICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgIT09IENIQVJfRk9SV0FSRF9TTEFTSCkgYnJlYWs7XG4gIH1cbiAgY29uc3QgdG9MZW4gPSB0b0VuZCAtIHRvU3RhcnQ7XG5cbiAgLy8gQ29tcGFyZSBwYXRocyB0byBmaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBwYXRoIGZyb20gcm9vdFxuICBjb25zdCBsZW5ndGggPSBmcm9tTGVuIDwgdG9MZW4gPyBmcm9tTGVuIDogdG9MZW47XG4gIGxldCBsYXN0Q29tbW9uU2VwID0gLTE7XG4gIGxldCBpID0gMDtcbiAgZm9yICg7IGkgPD0gbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaSA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAodG9MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYHRvYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6J1xuICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3RcbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nLyc7IHRvPScvZm9vJ1xuICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZnJvbUxlbiA+IGxlbmd0aCkge1xuICAgICAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGBmcm9tYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXIvYmF6JzsgdG89Jy9mb28vYmFyJ1xuICAgICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSByb290LlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vJzsgdG89Jy8nXG4gICAgICAgICAgbGFzdENvbW1vblNlcCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBmcm9tQ29kZSA9IGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKTtcbiAgICBjb25zdCB0b0NvZGUgPSB0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKTtcbiAgICBpZiAoZnJvbUNvZGUgIT09IHRvQ29kZSkgYnJlYWs7XG4gICAgZWxzZSBpZiAoZnJvbUNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkgbGFzdENvbW1vblNlcCA9IGk7XG4gIH1cblxuICBsZXQgb3V0ID0gXCJcIjtcbiAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2BcbiAgLy8gYW5kIGBmcm9tYFxuICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApIG91dCArPSBcIi4uXCI7XG4gICAgICBlbHNlIG91dCArPSBcIi8uLlwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhc3RseSwgYXBwZW5kIHRoZSByZXN0IG9mIHRoZSBkZXN0aW5hdGlvbiAoYHRvYCkgcGF0aCB0aGF0IGNvbWVzIGFmdGVyXG4gIC8vIHRoZSBjb21tb24gcGF0aCBwYXJ0c1xuICBpZiAob3V0Lmxlbmd0aCA+IDApIHJldHVybiBvdXQgKyB0by5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCk7XG4gIGVsc2Uge1xuICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSArK3RvU3RhcnQ7XG4gICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQpO1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGF0aCB0byBhIG5hbWVzcGFjZSBwYXRoXG4gKiBAcGFyYW0gcGF0aCB0byByZXNvbHZlIHRvIG5hbWVzcGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYW1lc3BhY2VkUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBOb24tb3Agb24gcG9zaXggc3lzdGVtc1xuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGRpcmVjdG9yeSBwYXRoIG9mIGEgYHBhdGhgLlxuICogQHBhcmFtIHBhdGggdG8gZGV0ZXJtaW5lIHRoZSBkaXJlY3RvcnkgcGF0aCBmb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCIuXCI7XG4gIGNvbnN0IGhhc1Jvb3QgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyAtLWkpIHtcbiAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgIGVuZCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBoYXNSb290ID8gXCIvXCIgOiBcIi5cIjtcbiAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSByZXR1cm4gXCIvL1wiO1xuICByZXR1cm4gcGF0aC5zbGljZSgwLCBlbmQpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBwb3J0aW9uIG9mIGEgYHBhdGhgLiBUcmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgaWdub3JlZC5cbiAqIEBwYXJhbSBwYXRoIHRvIHByb2Nlc3NcbiAqIEBwYXJhbSBleHQgb2YgcGF0aCBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2VuYW1lKHBhdGg6IHN0cmluZywgZXh0ID0gXCJcIik6IHN0cmluZyB7XG4gIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZXh0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICBsZXQgaTogbnVtYmVyO1xuXG4gIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGgubGVuZ3RoKSB7XG4gICAgaWYgKGV4dC5sZW5ndGggPT09IHBhdGgubGVuZ3RoICYmIGV4dCA9PT0gcGF0aCkgcmV0dXJuIFwiXCI7XG4gICAgbGV0IGV4dElkeCA9IGV4dC5sZW5ndGggLSAxO1xuICAgIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7XG4gICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPT09IC0xKSB7XG4gICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIHJlbWVtYmVyIHRoaXMgaW5kZXggaW4gY2FzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgaXQgaWYgdGhlIGV4dGVuc2lvbiBlbmRzIHVwIG5vdCBtYXRjaGluZ1xuICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0SWR4ID49IDApIHtcbiAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggdGhlIGV4cGxpY2l0IGV4dGVuc2lvblxuICAgICAgICAgIGlmIChjb2RlID09PSBleHQuY2hhckNvZGVBdChleHRJZHgpKSB7XG4gICAgICAgICAgICBpZiAoLS1leHRJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIGV4dGVuc2lvbiwgc28gbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyIHBhdGhcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEV4dGVuc2lvbiBkb2VzIG5vdCBtYXRjaCwgc28gb3VyIHJlc3VsdCBpcyB0aGUgZW50aXJlIHBhdGhcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgZXh0SWR4ID0gLTE7XG4gICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFydCA9PT0gZW5kKSBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO1xuICAgIGVsc2UgaWYgKGVuZCA9PT0gLTEpIGVuZCA9IHBhdGgubGVuZ3RoO1xuICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoaSkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBwYXRoIGNvbXBvbmVudFxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHRlbnNpb24gb2YgdGhlIGBwYXRoYCB3aXRoIGxlYWRpbmcgcGVyaW9kLlxuICogQHBhcmFtIHBhdGggd2l0aCBleHRlbnNpb25cbiAqIEByZXR1cm5zIGV4dGVuc2lvbiAoZXguIGZvciBgZmlsZS50c2AgcmV0dXJucyBgLnRzYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dG5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgbGV0IHN0YXJ0RG90ID0gLTE7XG4gIGxldCBzdGFydFBhcnQgPSAwO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gIGxldCBwcmVEb3RTdGF0ZSA9IDA7XG4gIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHBhdGggZnJvbSBgRm9ybWF0SW5wdXRQYXRoT2JqZWN0YCBvYmplY3QuXG4gKiBAcGFyYW0gcGF0aE9iamVjdCB3aXRoIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0OiBGb3JtYXRJbnB1dFBhdGhPYmplY3QpOiBzdHJpbmcge1xuICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgcGF0aE9iamVjdH1gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIF9mb3JtYXQoXCIvXCIsIHBhdGhPYmplY3QpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGBQYXJzZWRQYXRoYCBvYmplY3Qgb2YgdGhlIGBwYXRoYC5cbiAqIEBwYXJhbSBwYXRoIHRvIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHJldDogUGFyc2VkUGF0aCA9IHsgcm9vdDogXCJcIiwgZGlyOiBcIlwiLCBiYXNlOiBcIlwiLCBleHQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuICBjb25zdCBpc0Fic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7XG4gIGxldCBzdGFydDogbnVtYmVyO1xuICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgIHJldC5yb290ID0gXCIvXCI7XG4gICAgc3RhcnQgPSAxO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBpID0gcGF0aC5sZW5ndGggLSAxO1xuXG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcblxuICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gIGZvciAoOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgLy8gZXh0ZW5zaW9uXG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkgc3RhcnREb3QgPSBpO1xuICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHByZURvdFN0YXRlID0gMTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICBwcmVEb3RTdGF0ZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICBzdGFydERvdCA9PT0gLTEgfHxcbiAgICBlbmQgPT09IC0xIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAocHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpXG4gICkge1xuICAgIGlmIChlbmQgIT09IC0xKSB7XG4gICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHtcbiAgICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSB7XG4gICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKDEsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgfVxuICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICB9XG5cbiAgaWYgKHN0YXJ0UGFydCA+IDApIHJldC5kaXIgPSBwYXRoLnNsaWNlKDAsIHN0YXJ0UGFydCAtIDEpO1xuICBlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gXCIvXCI7XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpbGUgVVJMIHRvIGEgcGF0aCBzdHJpbmcuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgZnJvbUZpbGVVcmwgfSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQCRTVERfVkVSU0lPTi9wYXRoL3Bvc2l4LnRzXCI7XG4gKiAgICAgIGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKTsgLy8gXCIvaG9tZS9mb29cIlxuICogYGBgXG4gKiBAcGFyYW0gdXJsIG9mIGEgZmlsZSBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21GaWxlVXJsKHVybDogc3RyaW5nIHwgVVJMKTogc3RyaW5nIHtcbiAgdXJsID0gdXJsIGluc3RhbmNlb2YgVVJMID8gdXJsIDogbmV3IFVSTCh1cmwpO1xuICBpZiAodXJsLnByb3RvY29sICE9IFwiZmlsZTpcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO1xuICB9XG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoLyUoPyFbMC05QS1GYS1mXXsyfSkvZywgXCIlMjVcIiksXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXRoIHN0cmluZyB0byBhIGZpbGUgVVJMLlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC9zdGRAJFNURF9WRVJTSU9OL3BhdGgvcG9zaXgudHNcIjtcbiAqICAgICAgdG9GaWxlVXJsKFwiL2hvbWUvZm9vXCIpOyAvLyBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2Zvb1wiKVxuICogYGBgXG4gKiBAcGFyYW0gcGF0aCB0byBjb252ZXJ0IHRvIGZpbGUgVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpbGVVcmwocGF0aDogc3RyaW5nKTogVVJMIHtcbiAgaWYgKCFpc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5cIik7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChcImZpbGU6Ly8vXCIpO1xuICB1cmwucGF0aG5hbWUgPSBlbmNvZGVXaGl0ZXNwYWNlKFxuICAgIHBhdGgucmVwbGFjZSgvJS9nLCBcIiUyNVwiKS5yZXBsYWNlKC9cXFxcL2csIFwiJTVDXCIpLFxuICApO1xuICByZXR1cm4gdXJsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUdyQyxTQUFTLFFBQVEsRUFBRSxrQkFBa0IsUUFBUSxrQkFBa0I7QUFFL0QsU0FDRSxPQUFPLEVBQ1AsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsZUFBZSxRQUNWLGFBQWE7QUFFcEIsT0FBTyxNQUFNLE1BQU0sSUFBSTtB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
+// denoCacheMetadata=15495549800798984198,17305895827774113173 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/6bd2e3f5843f0a5debff31a300e1d6176f32f60a59fad82367571366ca5e83ab.js b/vendor/gen/https/deno.land/6bd2e3f5843f0a5debff31a300e1d6176f32f60a59fad82367571366ca5e83ab.js
new file mode 100644
index 0000000..694e4ee
--- /dev/null
+++ b/vendor/gen/https/deno.land/6bd2e3f5843f0a5debff31a300e1d6176f32f60a59fad82367571366ca5e83ab.js
@@ -0,0 +1,58 @@
+import { posix } from "../deps/path.ts";
+import { isPlainObject } from "./utils/object.ts";
+/**
+ * Class to load data files.
+ */ export default class DataLoader {
+ /** List of extensions to load data files and the loader used */ formats;
+ constructor(options){
+ this.formats = options.formats;
+ }
+ load(entry) {
+ if (entry.type === "directory") {
+ return this.#loadDirectory(entry);
+ }
+ return this.#loadFile(entry);
+ }
+ /** Load a _data.* file */ async #loadFile(entry) {
+ const format = this.formats.search(entry.path);
+ if (!format?.dataLoader) {
+ return;
+ }
+ return await entry.getContent(format.dataLoader);
+ }
+ /** Load a _data directory */ async #loadDirectory(entry) {
+ const data = {};
+ for await (const child of entry.children.values()){
+ await this.loadEntry(child, data);
+ }
+ return data;
+ }
+ /**
+ * Load a data entry inside a _data directory
+ * and append the data to the data object
+ */ async loadEntry(entry, data) {
+ if (entry.name.startsWith(".") || entry.name.startsWith("_")) {
+ return;
+ }
+ if (entry.type === "file") {
+ const name = posix.basename(entry.name, posix.extname(entry.name));
+ const fileData = await this.#loadFile(entry) || {};
+ if (fileData.content && Object.keys(fileData).length === 1) {
+ data[name] = fileData.content;
+ } else {
+ const target = data[name];
+ if (isPlainObject(fileData) || target) {
+ data[name] = Object.assign(target || {}, fileData);
+ } else {
+ data[name] = fileData;
+ }
+ }
+ return;
+ }
+ if (entry.type === "directory") {
+ data[entry.name] = await this.#loadDirectory(entry);
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9kYXRhX2xvYWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCB9IGZyb20gXCIuLi9kZXBzL3BhdGgudHNcIjtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiLi91dGlscy9vYmplY3QudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRyeSB9IGZyb20gXCIuL2ZzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJhd0RhdGEgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5pbXBvcnQgdHlwZSBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqIFRoZSByZWdpc3RlcmVkIGZpbGUgZm9ybWF0cyAqL1xuICBmb3JtYXRzOiBGb3JtYXRzO1xufVxuXG4vKipcbiAqIENsYXNzIHRvIGxvYWQgZGF0YSBmaWxlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YUxvYWRlciB7XG4gIC8qKiBMaXN0IG9mIGV4dGVuc2lvbnMgdG8gbG9hZCBkYXRhIGZpbGVzIGFuZCB0aGUgbG9hZGVyIHVzZWQgKi9cbiAgZm9ybWF0czogRm9ybWF0cztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5mb3JtYXRzID0gb3B0aW9ucy5mb3JtYXRzO1xuICB9XG5cbiAgbG9hZChlbnRyeTogRW50cnkpOiBQcm9taXNlPFJhd0RhdGEgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJkaXJlY3RvcnlcIikge1xuICAgICAgcmV0dXJuIHRoaXMuI2xvYWREaXJlY3RvcnkoZW50cnkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNsb2FkRmlsZShlbnRyeSk7XG4gIH1cblxuICAvKiogTG9hZCBhIF9kYXRhLiogZmlsZSAqL1xuICBhc3luYyAjbG9hZEZpbGUoZW50cnk6IEVudHJ5KTogUHJvbWlzZTxSYXdEYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb3JtYXRzLnNlYXJjaChlbnRyeS5wYXRoKTtcblxuICAgIGlmICghZm9ybWF0Py5kYXRhTG9hZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGVudHJ5LmdldENvbnRlbnQoZm9ybWF0LmRhdGFMb2FkZXIpO1xuICB9XG5cbiAgLyoqIExvYWQgYSBfZGF0YSBkaXJlY3RvcnkgKi9cbiAgYXN5bmMgI2xvYWREaXJlY3RvcnkoZW50cnk6IEVudHJ5KTogUHJvbWlzZTxSYXdEYXRhPiB7XG4gICAgY29uc3QgZGF0YTogUmF3RGF0YSA9IHt9O1xuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaGlsZCBvZiBlbnRyeS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRW50cnkoY2hpbGQsIGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBkYXRhIGVudHJ5IGluc2lkZSBhIF9kYXRhIGRpcmVjdG9yeVxuICAgKiBhbmQgYXBwZW5kIHRoZSBkYXRhIHRvIHRoZSBkYXRhIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgbG9hZEVudHJ5KGVudHJ5OiBFbnRyeSwgZGF0YTogUmF3RGF0YSkge1xuICAgIGlmIChlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoXCIuXCIpIHx8IGVudHJ5Lm5hbWUuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwb3NpeC5iYXNlbmFtZShlbnRyeS5uYW1lLCBwb3NpeC5leHRuYW1lKGVudHJ5Lm5hbWUpKTtcbiAgICAgIGNvbnN0IGZpbGVEYXRhID0gYXdhaXQgdGhpcy4jbG9hZEZpbGUoZW50cnkpIHx8IHt9O1xuXG4gICAgICBpZiAoZmlsZURhdGEuY29udGVudCAmJiBPYmplY3Qua2V5cyhmaWxlRGF0YSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGRhdGFbbmFtZV0gPSBmaWxlRGF0YS5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZGF0YVtuYW1lXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZmlsZURhdGEpIHx8IHRhcmdldCkge1xuICAgICAgICAgIGRhdGFbbmFtZV0gPSBPYmplY3QuYXNzaWduKHRhcmdldCB8fCB7fSwgZmlsZURhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFbbmFtZV0gPSBmaWxlRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgIGRhdGFbZW50cnkubmFtZV0gPSBhd2FpdCB0aGlzLiNsb2FkRGlyZWN0b3J5KGVudHJ5KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQUssUUFBUSxrQkFBa0I7QUFDeEMsU0FBUyxhQUFhLFFBQVEsb0JBQW9CO0FBV2xEOztDQUVDLEdBQ0QsZUFBZSxNQUFNO0VBQ25CLDhEQUE4RCxHQUM5RCxRQUFpQjtFQUVqQixZQUFZLE9BQWdCLENBQUU7SUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLE9BQU87RUFDaEM7RUFFQSxLQUFLLEtBQVksRUFBZ0M7SUFDL0MsSUFBSSxNQUFNLElBQUksS0FBSyxhQUFhO01BQzlCLE9BQU8sSUFBSSxDQUFDLENBQUEsYUFBYyxDQUFDO0lBQzdCO0lBRUEsT0FBTyxJQUFJLENBQUMsQ0FBQSxRQUFTLENBQUM7RUFDeEI7RUFFQSx3QkFBd0IsR0FDeEIsTUFBTSxDQUFBLFFBQVMsQ0FBQyxLQUFZO0lBQzFCLE1BQU0sU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUk7SUFFN0MsSUFBSSxDQUFDLFFBQVEsWUFBWTtNQUN2QjtJQUNGO0lBRUEsT0FBTyxNQUFNLE1BQU0sVUFBVSxDQUFDLE9BQU8sVUFBVTtFQUNqRDtFQUVBLDJCQUEyQixHQUMzQixNQUFNLENBQUEsYUFBYyxDQUFDLEtBQVk7SUFDL0IsTUFBTSxPQUFnQixDQUFDO0lBRXZCLFdBQVcsTUFBTSxTQUFTLE1BQU0sUUFBUSxDQUFDLE1BQU0sR0FBSTtNQUNqRCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztJQUM5QjtJQUVBLE9BQU87RUFDVDtFQUVBOzs7R0FHQyxHQUNELE1BQU0sVUFBVSxLQUFZLEVBQUUsSUFBYSxFQUFFO0lBQzNDLElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07TUFDNUQ7SUFDRjtJQUVBLElBQUksTUFBTSxJQUFJLEtBQUssUUFBUTtNQUN6QixNQUFNLE9BQU8sTUFBTSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUMsTUFBTSxJQUFJO01BQ2hFLE1BQU0sV0FBVyxNQUFNLElBQUksQ0FBQyxDQUFBLFFBQVMsQ0FBQyxVQUFVLENBQUM7TUFFakQsSUFBSSxTQUFTLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLE1BQU0sS0FBSyxHQUFHO1FBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxPQUFPO01BQy9CLE9BQU87UUFDTCxNQUFNLFNBQVMsSUFBSSxDQUFDLEtBQUs7UUFDekIsSUFBSSxjQUFjLGFBQWEsUUFBUTtVQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHO1FBQzNDLE9BQU87VUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHO1FBQ2Y7TUFDRjtNQUVBO0lBQ0Y7SUFFQSxJQUFJLE1BQU0sSUFBSSxLQUFLLGFBQWE7TUFDOUIsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQSxhQUFjLENBQUM7SUFDL0M7RUFDRjtBQUNGIn0=
+// denoCacheMetadata=6971484380980684596,6618598997769985257 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/6d20ec93492b438ce20abd5a6993bfc0ef988c47aa87241085a98b21d8e85c47.js b/vendor/gen/https/deno.land/6d20ec93492b438ce20abd5a6993bfc0ef988c47aa87241085a98b21d8e85c47.js
new file mode 100644
index 0000000..1c5f918
--- /dev/null
+++ b/vendor/gen/https/deno.land/6d20ec93492b438ce20abd5a6993bfc0ef988c47aa87241085a98b21d8e85c47.js
@@ -0,0 +1,35 @@
+import { getGitDate, parseDate } from "./date.ts";
+/** Returns the Date instance of a file */ export function getPageDate(page) {
+ const data = page.data;
+ const { date } = data;
+ if (date instanceof Date) {
+ return date;
+ }
+ if (typeof date === "number") {
+ return new Date(date);
+ }
+ const { entry } = page.src;
+ const info = entry?.getInfo();
+ if (typeof date === "string") {
+ if (entry && info) {
+ switch(date.toLowerCase()){
+ case "git last modified":
+ return getGitDate("modified", entry.src) || info.mtime || new Date();
+ case "git created":
+ // getGitDate("created", ...) uses `git log --diff-filter=A`
+ // which returns nothing for files where the latest commit had a merge conflict.
+ // Therefore we fallback to last modified time from git history,
+ // which is more reliable than file system creation time under most CI environments.
+ return getGitDate("created", entry.src) || getGitDate("modified", entry.src) || info.birthtime || new Date();
+ }
+ }
+ try {
+ return parseDate(date);
+ } catch {
+ throw new Error(`Invalid date: ${date} (${entry?.src})`);
+ }
+ }
+ return info?.birthtime || info?.mtime || new Date();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9wYWdlX2RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0R2l0RGF0ZSwgcGFyc2VEYXRlIH0gZnJvbSBcIi4vZGF0ZS50c1wiO1xuXG5pbXBvcnQgdHlwZSB7IFBhZ2UsIFJhd0RhdGEgfSBmcm9tIFwiLi4vZmlsZS50c1wiO1xuXG4vKiogUmV0dXJucyB0aGUgRGF0ZSBpbnN0YW5jZSBvZiBhIGZpbGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlRGF0ZShwYWdlOiBQYWdlKTogRGF0ZSB7XG4gIGNvbnN0IGRhdGEgPSBwYWdlLmRhdGEgYXMgUmF3RGF0YTtcbiAgY29uc3QgeyBkYXRlIH0gPSBkYXRhO1xuXG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xuICB9XG5cbiAgY29uc3QgeyBlbnRyeSB9ID0gcGFnZS5zcmM7XG4gIGNvbnN0IGluZm8gPSBlbnRyeT8uZ2V0SW5mbygpO1xuXG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChlbnRyeSAmJiBpbmZvKSB7XG4gICAgICBzd2l0Y2ggKGRhdGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiZ2l0IGxhc3QgbW9kaWZpZWRcIjpcbiAgICAgICAgICByZXR1cm4gZ2V0R2l0RGF0ZShcIm1vZGlmaWVkXCIsIGVudHJ5LnNyYykgfHwgaW5mby5tdGltZSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICBjYXNlIFwiZ2l0IGNyZWF0ZWRcIjpcbiAgICAgICAgICAvLyBnZXRHaXREYXRlKFwiY3JlYXRlZFwiLCAuLi4pIHVzZXMgYGdpdCBsb2cgLS1kaWZmLWZpbHRlcj1BYFxuICAgICAgICAgIC8vIHdoaWNoIHJldHVybnMgbm90aGluZyBmb3IgZmlsZXMgd2hlcmUgdGhlIGxhdGVzdCBjb21taXQgaGFkIGEgbWVyZ2UgY29uZmxpY3QuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIGZhbGxiYWNrIHRvIGxhc3QgbW9kaWZpZWQgdGltZSBmcm9tIGdpdCBoaXN0b3J5LFxuICAgICAgICAgIC8vIHdoaWNoIGlzIG1vcmUgcmVsaWFibGUgdGhhbiBmaWxlIHN5c3RlbSBjcmVhdGlvbiB0aW1lIHVuZGVyIG1vc3QgQ0kgZW52aXJvbm1lbnRzLlxuICAgICAgICAgIHJldHVybiBnZXRHaXREYXRlKFwiY3JlYXRlZFwiLCBlbnRyeS5zcmMpIHx8XG4gICAgICAgICAgICBnZXRHaXREYXRlKFwibW9kaWZpZWRcIiwgZW50cnkuc3JjKSB8fCBpbmZvLmJpcnRodGltZSB8fFxuICAgICAgICAgICAgbmV3IERhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhcnNlRGF0ZShkYXRlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkYXRlOiAke2RhdGV9ICgke2VudHJ5Py5zcmN9KWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvPy5iaXJ0aHRpbWUgfHwgaW5mbz8ubXRpbWUgfHwgbmV3IERhdGUoKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFVBQVUsRUFBRSxTQUFTLFFBQVEsWUFBWTtBQUlsRCx3Q0FBd0MsR0FDeEMsT0FBTyxTQUFTLFlBQVksSUFBVTtFQUNwQyxNQUFNLE9BQU8sS0FBSyxJQUFJO0VBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRztFQUVqQixJQUFJLGdCQUFnQixNQUFNO0lBQ3hCLE9BQU87RUFDVDtFQUVBLElBQUksT0FBTyxTQUFTLFVBQVU7SUFDNUIsT0FBTyxJQUFJLEtBQUs7RUFDbEI7RUFFQSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxHQUFHO0VBQzFCLE1BQU0sT0FBTyxPQUFPO0VBRXBCLElBQUksT0FBTyxTQUFTLFVBQVU7SUFDNUIsSUFBSSxTQUFTLE1BQU07TUFDakIsT0FBUSxLQUFLLFdBQVc7UUFDdEIsS0FBSztVQUNILE9BQU8sV0FBVyxZQUFZLE1BQU0sR0FBRyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUk7UUFDaEUsS0FBSztVQUNILDREQUE0RDtVQUM1RCxnRkFBZ0Y7VUFDaEYsZ0VBQWdFO1VBQ2hFLG9GQUFvRjtVQUNwRixPQUFPLFdBQVcsV0FBVyxNQUFNLEdBQUcsS0FDcEMsV0FBVyxZQUFZLE1BQU0sR0FBRyxLQUFLLEtBQUssU0FBUyxJQUNuRCxJQUFJO01BQ1Y7SUFDRjtJQUVBLElBQUk7TUFDRixPQUFPLFVBQVU7SUFDbkIsRUFBRSxPQUFNO01BQ04sTUFBTSxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUN6RDtFQUNGO0VBRUEsT0FBTyxNQUFNLGFBQWEsTUFBTSxTQUFTLElBQUk7QUFDL0MifQ==
+// denoCacheMetadata=3689659258240074819,1139563876999991959 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/6faca7611ce04828ee0a49c74e2fe5341a8e81432d9532a5219ac424cf65574d.js b/vendor/gen/https/deno.land/6faca7611ce04828ee0a49c74e2fe5341a8e81432d9532a5219ac424cf65574d.js
new file mode 100644
index 0000000..6d30fde
--- /dev/null
+++ b/vendor/gen/https/deno.land/6faca7611ce04828ee0a49c74e2fe5341a8e81432d9532a5219ac424cf65574d.js
@@ -0,0 +1,3 @@
+export { stripColor } from "https://deno.land/std@0.170.0/fmt/colors.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvZGVwcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBzdHJpcENvbG9yIH0gZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL2ZtdC9jb2xvcnMudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFVBQVUsUUFBUSw4Q0FBOEMifQ==
+// denoCacheMetadata=3544978036911627497,5277836342203700471 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/6fba7f50b35cc56498d23c59daba2d639e5b8041606078234ee006699d921a00.js b/vendor/gen/https/deno.land/6fba7f50b35cc56498d23c59daba2d639e5b8041606078234ee006699d921a00.js
new file mode 100644
index 0000000..ee88a3b
--- /dev/null
+++ b/vendor/gen/https/deno.land/6fba7f50b35cc56498d23c59daba2d639e5b8041606078234ee006699d921a00.js
@@ -0,0 +1,3 @@
+/** Chainable ansi escape sequences. */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9jaGFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ2hhaW5hYmxlIGFuc2kgZXNjYXBlIHNlcXVlbmNlcy4gKi9cbmltcG9ydCB0eXBlIHsgSW1hZ2VPcHRpb25zIH0gZnJvbSBcIi4vYW5zaV9lc2NhcGVzLnRzXCI7XG5cbi8qKiBDaGFpbmFibGUgYW5zaSBlc2NhcGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhaW48VCBleHRlbmRzIENoYWluPFQ+PiB7XG4gIC8qKiBBZGQgdGV4dC4gKi9cbiAgdGV4dDogKHRleHQ6IHN0cmluZykgPT4gVDtcbiAgLyoqIFJpbmcgYXVkaW8gYmVsbDogYFxcdTAwMDdgICovXG4gIGJlbDogVDtcbiAgLyoqIEdldCBjdXJzb3IgcG9zaXRpb24uICovXG4gIGN1cnNvclBvc2l0aW9uOiBUO1xuICAvKipcbiAgICogTW92ZSBjdXJzb3IgdG8geCwgeSwgY291bnRpbmcgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyLlxuICAgKiBAcGFyYW0geCBQb3NpdGlvbiBsZWZ0LlxuICAgKiBAcGFyYW0geSBQb3NpdGlvbiB0b3AuXG4gICAqL1xuICBjdXJzb3JUbzogKHg6IG51bWJlciwgeT86IG51bWJlcikgPT4gVDtcbiAgLyoqXG4gICAqIE1vdmUgY3Vyc29yIGJ5IG9mZnNldC5cbiAgICogQHBhcmFtIHggT2Zmc2V0IGxlZnQuXG4gICAqIEBwYXJhbSB5IE9mZnNldCB0b3AuXG4gICAqL1xuICBjdXJzb3JNb3ZlOiAoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IFQ7XG4gIC8qKlxuICAgKiBNb3ZlIGN1cnNvciB1cCBieSBuIGxpbmVzLlxuICAgKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGxpbmVzLlxuICAgKi9cbiAgY3Vyc29yVXA6IFQgJiAoKGNvdW50OiBudW1iZXIpID0+IFQpO1xuICAvKipcbiAgICogTW92ZSBjdXJzb3IgZG93biBieSBuIGxpbmVzLlxuICAgKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGxpbmVzLlxuICAgKi9cbiAgY3Vyc29yRG93bjogVCAmICgoY291bnQ6IG51bWJlcikgPT4gVCk7XG4gIC8qKlxuICAgKiBNb3ZlIGN1cnNvciBmb3J3YXJkIGJ5IG4gbGluZXMuXG4gICAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gICAqL1xuICBjdXJzb3JGb3J3YXJkOiBUICYgKChjb3VudDogbnVtYmVyKSA9PiBUKTtcbiAgLyoqXG4gICAqIE1vdmUgY3Vyc29yIGJhY2t3YXJkIGJ5IG4gbGluZXMuXG4gICAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gICAqL1xuICBjdXJzb3JCYWNrd2FyZDogVCAmICgoY291bnQ6IG51bWJlcikgPT4gVCk7XG4gIC8qKlxuICAgKiBNb3ZlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIG4gbGluZXMgZG93bi5cbiAgICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAgICovXG4gIGN1cnNvck5leHRMaW5lOiBUICYgKChjb3VudDogbnVtYmVyKSA9PiBUKTtcbiAgLyoqXG4gICAqIE1vdmUgY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgbiBsaW5lcyB1cC5cbiAgICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAgICovXG4gIGN1cnNvclByZXZMaW5lOiBUICYgKChjb3VudDogbnVtYmVyKSA9PiBUKTtcbiAgLyoqIE1vdmUgY3Vyc29yIHRvIGZpcnN0IGNvbHVtbiBvZiBjdXJyZW50IHJvdy4gKi9cbiAgY3Vyc29yTGVmdDogVDtcbiAgLyoqIEhpZGUgY3Vyc29yLiAqL1xuICBjdXJzb3JIaWRlOiBUO1xuICAvKiogU2hvdyBjdXJzb3IuICovXG4gIGN1cnNvclNob3c6IFQ7XG4gIC8qKiBTYXZlIGN1cnNvci4gKi9cbiAgY3Vyc29yU2F2ZTogVDtcbiAgLyoqIFJlc3RvcmUgY3Vyc29yLiAqL1xuICBjdXJzb3JSZXN0b3JlOiBUO1xuICAvKipcbiAgICogU2Nyb2xsIHdpbmRvdyB1cCBieSBuIGxpbmVzLlxuICAgKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGxpbmVzLlxuICAgKi9cbiAgc2Nyb2xsVXA6IFQgJiAoKGNvdW50OiBudW1iZXIpID0+IFQpO1xuICAvKipcbiAgICogU2Nyb2xsIHdpbmRvdyBkb3duIGJ5IG4gbGluZXMuXG4gICAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gICAqL1xuICBzY3JvbGxEb3duOiBUICYgKChjb3VudDogbnVtYmVyKSA9PiBUKTtcbiAgLyoqIENsZWFyIHNjcmVlbi4gKi9cbiAgZXJhc2VTY3JlZW46IFQ7XG4gIC8qKlxuICAgKiBDbGVhciBzY3JlZW4gdXAgYnkgbiBsaW5lcy5cbiAgICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAgICovXG4gIGVyYXNlVXA6IFQgJiAoKGNvdW50OiBudW1iZXIpID0+IFQpO1xuICAvKipcbiAgICogQ2xlYXIgc2NyZWVuIGRvd24gYnkgbiBsaW5lcy5cbiAgICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAgICovXG4gIGVyYXNlRG93bjogVCAmICgoY291bnQ6IG51bWJlcikgPT4gVCk7XG4gIC8qKiBDbGVhciBjdXJyZW50IGxpbmUuICovXG4gIGVyYXNlTGluZTogVDtcbiAgLyoqIENsZWFyIHRvIGxpbmUgZW5kLiAqL1xuICBlcmFzZUxpbmVFbmQ6IFQ7XG4gIC8qKiBDbGVhciB0byBsaW5lIHN0YXJ0LiAqL1xuICBlcmFzZUxpbmVTdGFydDogVDtcbiAgLyoqXG4gICAqIENsZWFyIHNjcmVlbiBhbmQgbW92ZSBjdXJzb3IgYnkgbiBsaW5lcyB1cCBhbmQgbW92ZSBjdXJzb3IgdG8gZmlyc3QgY29sdW1uLlxuICAgKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGxpbmVzLlxuICAgKi9cbiAgZXJhc2VMaW5lczogKGNvdW50OiBudW1iZXIpID0+IFQ7XG4gIC8qKiBDbGVhciB0aGUgdGVybWluYWwgc2NyZWVuLiAoVmlld3BvcnQpICovXG4gIGNsZWFyU2NyZWVuOiBUO1xuICAvKipcbiAgICogQ2xlYXIgdGhlIHdob2xlIHRlcm1pbmFsLCBpbmNsdWRpbmcgc2Nyb2xsYmFjayBidWZmZXIuXG4gICAqIChOb3QganVzdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIGl0KS5cbiAgICovXG4gIGNsZWFyVGVybWluYWw6IFQ7XG4gIC8qKlxuICAgKiBDcmVhdGUgbGluay5cbiAgICogQHBhcmFtIHRleHQgTGluayB0ZXh0LlxuICAgKiBAcGFyYW0gdXJsIExpbmsgdXJsLlxuICAgKiBgYGBcbiAgICogY29uc29sZS5sb2coXG4gICAqICAgYW5zaS5saW5rKFwiQ2xpY2sgbWUuXCIsIFwiaHR0cHM6Ly9kZW5vLmxhbmRcIiksXG4gICAqICk7XG4gICAqIGBgYFxuICAgKi9cbiAgbGluazogKHRleHQ6IHN0cmluZywgdXJsOiBzdHJpbmcpID0+IFQ7XG4gIC8qKlxuICAgKiBDcmVhdGUgaW1hZ2UuXG4gICAqIEBwYXJhbSBidWZmZXIgIEltYWdlIGJ1ZmZlci5cbiAgICogQHBhcmFtIG9wdGlvbnMgSW1hZ2Ugb3B0aW9ucy5cbiAgICogYGBgXG4gICAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL2Rlbm8ubGFuZC9pbWFnZXMvaGFzaHJvY2tfc2ltcGxlLnBuZ1wiKTtcbiAgICogY29uc3QgaW1hZ2VCdWZmZXI6IEFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICogY29uc29sZS5sb2coXG4gICAqICAgYW5zaS5pbWFnZShpbWFnZUJ1ZmZlciksXG4gICAqICk7XG4gICAqIGBgYFxuICAgKi9cbiAgaW1hZ2U6IChidWZmZXI6IHN0cmluZyB8IEFycmF5QnVmZmVyLCBvcHRpb25zPzogSW1hZ2VPcHRpb25zKSA9PiBUO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQyxHQUNyQyJ9
+// denoCacheMetadata=13115710456915605990,12008965792953318417 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/7005829e4cbf864e811a7ecbea3a35b461c60b8ee370c7bf29ee85b72247875f.js b/vendor/gen/https/deno.land/7005829e4cbf864e811a7ecbea3a35b461c60b8ee370c7bf29ee85b72247875f.js
new file mode 100644
index 0000000..cae0938
--- /dev/null
+++ b/vendor/gen/https/deno.land/7005829e4cbf864e811a7ecbea3a35b461c60b8ee370c7bf29ee85b72247875f.js
@@ -0,0 +1,78 @@
+import { Element } from "../element.ts";
+import { DocumentFragment } from "../document-fragment.ts";
+import { getElementAttributesString, getOuterOrInnerHtml } from "../utils.ts";
+import { fragmentNodesFromString } from "../../deserialize.ts";
+import { CTOR_KEY } from "../../constructor-lock.ts";
+export class HTMLTemplateElement extends Element {
+ /**
+ * This blocks access to the .#contents property when the
+ * super() constructor is running which invokes (our
+ * overridden) _setParent() method. Without it, we get
+ * the following error thrown:
+ *
+ * TypeError: Cannot read private member #content from
+ * an object whose class did not declare it
+ *
+ * FIXME: Maybe find a cleaner way to do this
+ */ __contentIsSet = false;
+ #content = null;
+ constructor(parentNode, attributes, key, content){
+ super("TEMPLATE", parentNode, attributes, key);
+ this.#content = content;
+ this.__contentIsSet = true;
+ }
+ get content() {
+ return this.#content;
+ }
+ _setOwnerDocument(document) {
+ super._setOwnerDocument(document);
+ if (this.__contentIsSet) {
+ this.content._setOwnerDocument(document);
+ }
+ }
+ _shallowClone() {
+ const frag = new DocumentFragment();
+ const attributes = this.getAttributeNames().map((name)=>[
+ name,
+ this.getAttribute(name)
+ ]);
+ return new HTMLTemplateElement(null, attributes, CTOR_KEY, frag);
+ }
+ cloneNode(deep = false) {
+ const newNode = super.cloneNode(deep);
+ if (deep) {
+ const destContent = newNode.content;
+ for (const child of this.content.childNodes){
+ destContent.appendChild(child.cloneNode(deep));
+ }
+ }
+ return newNode;
+ }
+ get innerHTML() {
+ return getOuterOrInnerHtml(this, false);
+ }
+ // Replace children in the `.content`
+ set innerHTML(html) {
+ const content = this.content;
+ // Remove all children
+ for (const child of content.childNodes){
+ child._setParent(null);
+ }
+ const mutator = content._getChildNodesMutator();
+ mutator.splice(0, content.childNodes.length);
+ // Parse HTML into new children
+ if (html.length) {
+ const parsed = fragmentNodesFromString(html, this.localName);
+ mutator.push(...parsed.childNodes[0].childNodes);
+ for (const child of content.childNodes){
+ child._setParent(content);
+ child._setOwnerDocument(content.ownerDocument);
+ }
+ }
+ }
+ get outerHTML() {
+ return `<template${getElementAttributesString(this)}>${this.innerHTML}</template>`;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL2VsZW1lbnRzL2h0bWwtdGVtcGxhdGUtZWxlbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4uL25vZGUudHNcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC50c1wiO1xuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9jdW1lbnQudHNcIjtcbmltcG9ydCB7IERvY3VtZW50RnJhZ21lbnQgfSBmcm9tIFwiLi4vZG9jdW1lbnQtZnJhZ21lbnQudHNcIjtcbmltcG9ydCB7IGdldEVsZW1lbnRBdHRyaWJ1dGVzU3RyaW5nLCBnZXRPdXRlck9ySW5uZXJIdG1sIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBmcmFnbWVudE5vZGVzRnJvbVN0cmluZyB9IGZyb20gXCIuLi8uLi9kZXNlcmlhbGl6ZS50c1wiO1xuaW1wb3J0IHsgQ1RPUl9LRVkgfSBmcm9tIFwiLi4vLi4vY29uc3RydWN0b3ItbG9jay50c1wiO1xuXG5leHBvcnQgY2xhc3MgSFRNTFRlbXBsYXRlRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAvKipcbiAgICogVGhpcyBibG9ja3MgYWNjZXNzIHRvIHRoZSAuI2NvbnRlbnRzIHByb3BlcnR5IHdoZW4gdGhlXG4gICAqIHN1cGVyKCkgY29uc3RydWN0b3IgaXMgcnVubmluZyB3aGljaCBpbnZva2VzIChvdXJcbiAgICogb3ZlcnJpZGRlbikgX3NldFBhcmVudCgpIG1ldGhvZC4gV2l0aG91dCBpdCwgd2UgZ2V0XG4gICAqIHRoZSBmb2xsb3dpbmcgZXJyb3IgdGhyb3duOlxuICAgKlxuICAgKiAgIFR5cGVFcnJvcjogQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgI2NvbnRlbnQgZnJvbVxuICAgKiAgIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcbiAgICpcbiAgICogRklYTUU6IE1heWJlIGZpbmQgYSBjbGVhbmVyIHdheSB0byBkbyB0aGlzXG4gICAqL1xuICBwcml2YXRlIF9fY29udGVudElzU2V0ID0gZmFsc2U7XG4gICNjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50Tm9kZTogTm9kZSB8IG51bGwsXG4gICAgYXR0cmlidXRlczogW3N0cmluZywgc3RyaW5nXVtdLFxuICAgIGtleTogdHlwZW9mIENUT1JfS0VZLFxuICAgIGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgXCJURU1QTEFURVwiLFxuICAgICAgcGFyZW50Tm9kZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBrZXksXG4gICAgKTtcblxuICAgIHRoaXMuI2NvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuX19jb250ZW50SXNTZXQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI2NvbnRlbnQhO1xuICB9XG5cbiAgb3ZlcnJpZGUgX3NldE93bmVyRG9jdW1lbnQoZG9jdW1lbnQ6IERvY3VtZW50IHwgbnVsbCkge1xuICAgIHN1cGVyLl9zZXRPd25lckRvY3VtZW50KGRvY3VtZW50KTtcblxuICAgIGlmICh0aGlzLl9fY29udGVudElzU2V0KSB7XG4gICAgICB0aGlzLmNvbnRlbnQuX3NldE93bmVyRG9jdW1lbnQoZG9jdW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIF9zaGFsbG93Q2xvbmUoKTogSFRNTFRlbXBsYXRlRWxlbWVudCB7XG4gICAgY29uc3QgZnJhZyA9IG5ldyBEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXNcbiAgICAgIC5nZXRBdHRyaWJ1dGVOYW1lcygpXG4gICAgICAubWFwKChuYW1lKSA9PiBbbmFtZSwgdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSkhXSBhcyBbc3RyaW5nLCBzdHJpbmddKTtcbiAgICByZXR1cm4gbmV3IEhUTUxUZW1wbGF0ZUVsZW1lbnQobnVsbCwgYXR0cmlidXRlcywgQ1RPUl9LRVksIGZyYWcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xvbmVOb2RlKGRlZXAgPSBmYWxzZSk6IEhUTUxUZW1wbGF0ZUVsZW1lbnQge1xuICAgIGNvbnN0IG5ld05vZGUgPSBzdXBlci5jbG9uZU5vZGUoZGVlcCkgYXMgSFRNTFRlbXBsYXRlRWxlbWVudDtcblxuICAgIGlmIChkZWVwKSB7XG4gICAgICBjb25zdCBkZXN0Q29udGVudCA9IG5ld05vZGUuY29udGVudDtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jb250ZW50LmNoaWxkTm9kZXMpIHtcbiAgICAgICAgZGVzdENvbnRlbnQuYXBwZW5kQ2hpbGQoY2hpbGQuY2xvbmVOb2RlKGRlZXApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBpbm5lckhUTUwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0T3V0ZXJPcklubmVySHRtbCh0aGlzLCBmYWxzZSk7XG4gIH1cblxuICAvLyBSZXBsYWNlIGNoaWxkcmVuIGluIHRoZSBgLmNvbnRlbnRgXG4gIG92ZXJyaWRlIHNldCBpbm5lckhUTUwoaHRtbDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudDtcblxuICAgIC8vIFJlbW92ZSBhbGwgY2hpbGRyZW5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnRlbnQuY2hpbGROb2Rlcykge1xuICAgICAgY2hpbGQuX3NldFBhcmVudChudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBtdXRhdG9yID0gY29udGVudC5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICBtdXRhdG9yLnNwbGljZSgwLCBjb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoKTtcblxuICAgIC8vIFBhcnNlIEhUTUwgaW50byBuZXcgY2hpbGRyZW5cbiAgICBpZiAoaHRtbC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGZyYWdtZW50Tm9kZXNGcm9tU3RyaW5nKGh0bWwsIHRoaXMubG9jYWxOYW1lKTtcbiAgICAgIG11dGF0b3IucHVzaCguLi5wYXJzZWQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzKTtcblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjb250ZW50LmNoaWxkTm9kZXMpIHtcbiAgICAgICAgY2hpbGQuX3NldFBhcmVudChjb250ZW50KTtcbiAgICAgICAgY2hpbGQuX3NldE93bmVyRG9jdW1lbnQoY29udGVudC5vd25lckRvY3VtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBnZXQgb3V0ZXJIVE1MKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGA8dGVtcGxhdGUke1xuICAgICAgZ2V0RWxlbWVudEF0dHJpYnV0ZXNTdHJpbmcodGhpcylcbiAgICB9PiR7dGhpcy5pbm5lckhUTUx9PC90ZW1wbGF0ZT5gO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxPQUFPLFFBQVEsZ0JBQWdCO0FBRXhDLFNBQVMsZ0JBQWdCLFFBQVEsMEJBQTBCO0FBQzNELFNBQVMsMEJBQTBCLEVBQUUsbUJBQW1CLFFBQVEsY0FBYztBQUM5RSxTQUFTLHVCQUF1QixRQUFRLHVCQUF1QjtBQUMvRCxTQUFTLFFBQVEsUUFBUSw0QkFBNEI7QUFFckQsT0FBTyxNQUFNLDRCQUE0QjtFQUN2Qzs7Ozs7Ozs7OztHQVVDLEdBQ0QsQUFBUSxpQkFBaUIsTUFBTTtFQUMvQixDQUFBLE9BQVEsR0FBNEIsS0FBSztFQUV6QyxZQUNFLFVBQXVCLEVBQ3ZCLFVBQThCLEVBQzlCLEdBQW9CLEVBQ3BCLE9BQXlCLENBQ3pCO0lBQ0EsS0FBSyxDQUNILFlBQ0EsWUFDQSxZQUNBO0lBR0YsSUFBSSxDQUFDLENBQUEsT0FBUSxHQUFHO0lBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUc7RUFDeEI7RUFFQSxJQUFJLFVBQTRCO0lBQzlCLE9BQU8sSUFBSSxDQUFDLENBQUEsT0FBUTtFQUN0QjtFQUVTLGtCQUFrQixRQUF5QixFQUFFO0lBQ3BELEtBQUssQ0FBQyxrQkFBa0I7SUFFeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO01BQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDakM7RUFDRjtFQUVTLGdCQUFxQztJQUM1QyxNQUFNLE9BQU8sSUFBSTtJQUNqQixNQUFNLGFBQWEsSUFBSSxDQUNwQixpQkFBaUIsR0FDakIsR0FBRyxDQUFDLENBQUMsT0FBUztRQUFDO1FBQU0sSUFBSSxDQUFDLFlBQVksQ0FBQztPQUFPO0lBQ2pELE9BQU8sSUFBSSxvQkFBb0IsTUFBTSxZQUFZLFVBQVU7RUFDN0Q7RUFFUyxVQUFVLE9BQU8sS0FBSyxFQUF1QjtJQUNwRCxNQUFNLFVBQVUsS0FBSyxDQUFDLFVBQVU7SUFFaEMsSUFBSSxNQUFNO01BQ1IsTUFBTSxjQUFjLFFBQVEsT0FBTztNQUNuQyxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBRTtRQUMzQyxZQUFZLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQztNQUMxQztJQUNGO0lBRUEsT0FBTztFQUNUO0VBRUEsSUFBYSxZQUFvQjtJQUMvQixPQUFPLG9CQUFvQixJQUFJLEVBQUU7RUFDbkM7RUFFQSxxQ0FBcUM7RUFDckMsSUFBYSxVQUFVLElBQVksRUFBRTtJQUNuQyxNQUFNLFVBQVUsSUFBSSxDQUFDLE9BQU87SUFFNUIsc0JBQXNCO0lBQ3RCLEtBQUssTUFBTSxTQUFTLFFBQVEsVUFBVSxDQUFFO01BQ3RDLE1BQU0sVUFBVSxDQUFDO0lBQ25CO0lBRUEsTUFBTSxVQUFVLFFBQVEscUJBQXFCO0lBQzdDLFFBQVEsTUFBTSxDQUFDLEdBQUcsUUFBUSxVQUFVLENBQUMsTUFBTTtJQUUzQywrQkFBK0I7SUFDL0IsSUFBSSxLQUFLLE1BQU0sRUFBRTtNQUNmLE1BQU0sU0FBUyx3QkFBd0IsTUFBTSxJQUFJLENBQUMsU0FBUztNQUMzRCxRQUFRLElBQUksSUFBSSxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVTtNQUUvQyxLQUFLLE1BQU0sU0FBUyxRQUFRLFVBQVUsQ0FBRTtRQUN0QyxNQUFNLFVBQVUsQ0FBQztRQUNqQixNQUFNLGlCQUFpQixDQUFDLFFBQVEsYUFBYTtNQUMvQztJQUNGO0VBQ0Y7RUFFQSxJQUFhLFlBQW9CO0lBQy9CLE9BQU8sQ0FBQyxTQUFTLEVBQ2YsMkJBQTJCLElBQUksRUFDaEMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0VBQ2pDO0FBQ0YifQ==
+// denoCacheMetadata=8105336677246190984,8235274781419548263 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/715a1d94fe72f48bab4e27fc1fe672cf872e98017b5847ccc3c684c836c5d947.js b/vendor/gen/https/deno.land/715a1d94fe72f48bab4e27fc1fe672cf872e98017b5847ccc3c684c836c5d947.js
new file mode 100644
index 0000000..0ee0ac9
--- /dev/null
+++ b/vendor/gen/https/deno.land/715a1d94fe72f48bab4e27fc1fe672cf872e98017b5847ccc3c684c836c5d947.js
@@ -0,0 +1,26 @@
+import { isUrl } from "../utils/path.ts";
+import { isPlainObject } from "../utils/object.ts";
+import { env } from "../utils/env.ts";
+/** Load a JavaScript/TypeScript file. Use a random hash to prevent caching */ export default async function module(path) {
+ const url = isUrl(path) ? path : `file://${path}`;
+ const specifier = env("LUME_LIVE_RELOAD") ? `${url}#${Date.now()}` : url;
+ const mod = await import(specifier);
+ return toData(mod);
+}
+/** Transform the imported module to RawData */ export function toData(mod) {
+ const data = {};
+ for (const [name, value] of Object.entries(mod)){
+ if (name === "default") {
+ if (isPlainObject(value)) {
+ Object.assign(data, value);
+ } else {
+ data.content = value;
+ }
+ continue;
+ }
+ data[name] = value;
+ }
+ return data;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9sb2FkZXJzL21vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1VybCB9IGZyb20gXCIuLi91dGlscy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIi4uL3V0aWxzL29iamVjdC50c1wiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4uL3V0aWxzL2Vudi50c1wiO1xuXG5pbXBvcnQgdHlwZSB7IFJhd0RhdGEgfSBmcm9tIFwiLi4vZmlsZS50c1wiO1xuXG4vKiogTG9hZCBhIEphdmFTY3JpcHQvVHlwZVNjcmlwdCBmaWxlLiBVc2UgYSByYW5kb20gaGFzaCB0byBwcmV2ZW50IGNhY2hpbmcgKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIG1vZHVsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJhd0RhdGE+IHtcbiAgY29uc3QgdXJsID0gaXNVcmwocGF0aCkgPyBwYXRoIDogYGZpbGU6Ly8ke3BhdGh9YDtcbiAgY29uc3Qgc3BlY2lmaWVyID0gZW52PGJvb2xlYW4+KFwiTFVNRV9MSVZFX1JFTE9BRFwiKVxuICAgID8gYCR7dXJsfSMke0RhdGUubm93KCl9YFxuICAgIDogdXJsO1xuXG4gIGNvbnN0IG1vZCA9IGF3YWl0IGltcG9ydChzcGVjaWZpZXIpO1xuICByZXR1cm4gdG9EYXRhKG1vZCk7XG59XG5cbi8qKiBUcmFuc2Zvcm0gdGhlIGltcG9ydGVkIG1vZHVsZSB0byBSYXdEYXRhICovXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRhKG1vZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSYXdEYXRhIHtcbiAgY29uc3QgZGF0YTogUmF3RGF0YSA9IHt9O1xuXG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtb2QpKSB7XG4gICAgaWYgKG5hbWUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLmNvbnRlbnQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGRhdGFbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxTQUFTLGFBQWEsUUFBUSxxQkFBcUI7QUFDbkQsU0FBUyxHQUFHLFFBQVEsa0JBQWtCO0FBSXRDLDRFQUE0RSxHQUM1RSxlQUFlLGVBQWUsT0FBTyxJQUFZO0VBQy9DLE1BQU0sTUFBTSxNQUFNLFFBQVEsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNO0VBQ2pELE1BQU0sWUFBWSxJQUFhLHNCQUMzQixHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQ3RCO0VBRUosTUFBTSxNQUFNLE1BQU0sTUFBTSxDQUFDO0VBQ3pCLE9BQU8sT0FBTztBQUNoQjtBQUVBLDZDQUE2QyxHQUM3QyxPQUFPLFNBQVMsT0FBTyxHQUE0QjtFQUNqRCxNQUFNLE9BQWdCLENBQUM7RUFFdkIsS0FBSyxNQUFNLENBQUMsTUFBTSxNQUFNLElBQUksT0FBTyxPQUFPLENBQUMsS0FBTTtJQUMvQyxJQUFJLFNBQVMsV0FBVztNQUN0QixJQUFJLGNBQWMsUUFBUTtRQUN4QixPQUFPLE1BQU0sQ0FBQyxNQUFNO01BQ3RCLE9BQU87UUFDTCxLQUFLLE9BQU8sR0FBRztNQUNqQjtNQUNBO0lBQ0Y7SUFFQSxJQUFJLENBQUMsS0FBSyxHQUFHO0VBQ2Y7RUFFQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=10488986337401749731,6009840498768875983 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/716503e16f57dca602e9fd35df4afbf0123ef5fb24e5fb214ebbe3bc765aa27a.js b/vendor/gen/https/deno.land/716503e16f57dca602e9fd35df4afbf0123ef5fb24e5fb214ebbe3bc765aa27a.js
new file mode 100644
index 0000000..7063c11
--- /dev/null
+++ b/vendor/gen/https/deno.land/716503e16f57dca602e9fd35df4afbf0123ef5fb24e5fb214ebbe3bc765aa27a.js
@@ -0,0 +1,27 @@
+import { DOM as NWAPI } from "./nwsapi-types.ts";
+import { DOM as Sizzle } from "./sizzle-types.ts";
+let codeGenerationAllowed = null;
+export function getSelectorEngine() {
+ if (codeGenerationAllowed === null) {
+ try {
+ new Function("");
+ codeGenerationAllowed = true;
+ } catch (e) {
+ codeGenerationAllowed = false;
+ }
+ }
+ if (codeGenerationAllowed) {
+ return NWAPI;
+ } else {
+ return Sizzle;
+ }
+}
+/**
+ * Explicitly disable querySelector/All code generation with the `Function`
+ * constructor forcing the Sizzle engine. Enables those APIs on platforms
+ * like Deno Deploy that don't allow code generation.
+ */ export function disableCodeGeneration() {
+ codeGenerationAllowed = false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3NlbGVjdG9ycy9zZWxlY3RvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9NIGFzIE5XQVBJIH0gZnJvbSBcIi4vbndzYXBpLXR5cGVzLnRzXCI7XG5pbXBvcnQgeyBET00gYXMgU2l6emxlIH0gZnJvbSBcIi4vc2l6emxlLXR5cGVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC50c1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCIuLi9kb2N1bWVudC50c1wiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RvciA9IChkb2M6IERvY3VtZW50KSA9PiB7XG4gIGZpcnN0KFxuICAgIHNlbGVjdG9yOiBzdHJpbmcsXG4gICAgY29udGV4dDogRWxlbWVudCB8IERvY3VtZW50LFxuICAgIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHZvaWQsXG4gICk6IEVsZW1lbnQgfCBudWxsO1xuICBtYXRjaChcbiAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgIGNvbnRleHQ6IEVsZW1lbnQgfCBEb2N1bWVudCxcbiAgICBjYWxsYmFjaz86IChlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkLFxuICApOiBib29sZWFuO1xuICBzZWxlY3QoXG4gICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICBjb250ZXh0OiBFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgY2FsbGJhY2s/OiAoZWxlbWVudDogRWxlbWVudCkgPT4gdm9pZCxcbiAgKTogRWxlbWVudFtdO1xufTtcbmV4cG9ydCB0eXBlIFNlbGVjdG9yQXBpID0gUmV0dXJuVHlwZTxTZWxlY3Rvcj47XG5cbmxldCBjb2RlR2VuZXJhdGlvbkFsbG93ZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdG9yRW5naW5lKCk6IFNlbGVjdG9yIHtcbiAgaWYgKGNvZGVHZW5lcmF0aW9uQWxsb3dlZCA9PT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgICBjb2RlR2VuZXJhdGlvbkFsbG93ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvZGVHZW5lcmF0aW9uQWxsb3dlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb2RlR2VuZXJhdGlvbkFsbG93ZWQpIHtcbiAgICByZXR1cm4gTldBUEk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFNpenpsZTtcbiAgfVxufVxuXG4vKipcbiAqIEV4cGxpY2l0bHkgZGlzYWJsZSBxdWVyeVNlbGVjdG9yL0FsbCBjb2RlIGdlbmVyYXRpb24gd2l0aCB0aGUgYEZ1bmN0aW9uYFxuICogY29uc3RydWN0b3IgZm9yY2luZyB0aGUgU2l6emxlIGVuZ2luZS4gRW5hYmxlcyB0aG9zZSBBUElzIG9uIHBsYXRmb3Jtc1xuICogbGlrZSBEZW5vIERlcGxveSB0aGF0IGRvbid0IGFsbG93IGNvZGUgZ2VuZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVDb2RlR2VuZXJhdGlvbigpIHtcbiAgY29kZUdlbmVyYXRpb25BbGxvd2VkID0gZmFsc2U7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLEtBQUssUUFBUSxvQkFBb0I7QUFDakQsU0FBUyxPQUFPLE1BQU0sUUFBUSxvQkFBb0I7QUF1QmxELElBQUksd0JBQXdDO0FBRTVDLE9BQU8sU0FBUztFQUNkLElBQUksMEJBQTBCLE1BQU07SUFDbEMsSUFBSTtNQUNGLElBQUksU0FBUztNQUNiLHdCQUF3QjtJQUMxQixFQUFFLE9BQU8sR0FBRztNQUNWLHdCQUF3QjtJQUMxQjtFQUNGO0VBRUEsSUFBSSx1QkFBdUI7SUFDekIsT0FBTztFQUNULE9BQU87SUFDTCxPQUFPO0VBQ1Q7QUFDRjtBQUVBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVM7RUFDZCx3QkFBd0I7QUFDMUIifQ==
+// denoCacheMetadata=15371282116319597363,12552597277077397552 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/721bb4290fe85bb4d19eb3947d3a05e8429f2005b9d9974c99116cfe44df50c2.js b/vendor/gen/https/deno.land/721bb4290fe85bb4d19eb3947d3a05e8429f2005b9d9974c99116cfe44df50c2.js
new file mode 100644
index 0000000..00539bf
--- /dev/null
+++ b/vendor/gen/https/deno.land/721bb4290fe85bb4d19eb3947d3a05e8429f2005b9d9974c99116cfe44df50c2.js
@@ -0,0 +1,3 @@
+// deno-lint-ignore-file no-explicit-any
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9kZXByZWNhdGVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZSBuby1leHBsaWNpdC1hbnlcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiO1xuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUge1xuICBBY3Rpb25IYW5kbGVyLFxuICBBcmd1bWVudCxcbiAgQ29tbWFuZFJlc3VsdCxcbiAgQ29tcGxldGVIYW5kbGVyLFxuICBDb21wbGV0ZU9wdGlvbnMsXG4gIENvbXBsZXRpb24sXG4gIERlc2NyaXB0aW9uLFxuICBFbnZWYXIsXG4gIEVudlZhck9wdGlvbnMsXG4gIEVudlZhclZhbHVlSGFuZGxlcixcbiAgRXhhbXBsZSxcbiAgR2xvYmFsRW52VmFyT3B0aW9ucyxcbiAgR2xvYmFsT3B0aW9uT3B0aW9ucyxcbiAgSGVscEhhbmRsZXIsXG4gIE9wdGlvbixcbiAgT3B0aW9uT3B0aW9ucyxcbiAgT3B0aW9uVmFsdWVIYW5kbGVyLFxuICBUeXBlRGVmLFxuICBUeXBlT3B0aW9ucyxcbiAgVmVyc2lvbkhhbmRsZXIsXG59IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEFyZ3VtZW50YCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSUFyZ3VtZW50ID0gQXJndW1lbnQ7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEdsb2JhbE9wdGlvbk9wdGlvbnNgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJQ29tbWFuZEdsb2JhbE9wdGlvbjxcbiAgTyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gYW55LFxuICBBIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQRyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIENUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgR1QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFAgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdW5kZWZpbmVkLFxuPiA9IEdsb2JhbE9wdGlvbk9wdGlvbnM8TywgQSwgRywgUEcsIENULCBHVCwgUFQsIFA+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBPcHRpb25PcHRpb25zYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSUNvbW1hbmRPcHRpb248XG4gIE8gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgQSBleHRlbmRzIEFycmF5PHVua25vd24+ID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBDVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIEdUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHVuZGVmaW5lZCxcbj4gPSBPcHRpb25PcHRpb25zPE8sIEEsIEcsIFBHLCBDVCwgR1QsIFBULCBQPjtcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgQ29tcGxldGVPcHRpb25zYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSUNvbXBsZXRlT3B0aW9ucyA9IENvbXBsZXRlT3B0aW9ucztcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgQ29tcGxldGlvbmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElDb21wbGV0aW9uPFxuICBPIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIEEgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgRyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgQ1QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBHVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB1bmRlZmluZWQsXG4+ID0gQ29tcGxldGlvbjxPLCBBLCBHLCBQRywgQ1QsIEdULCBQVCwgUD47XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEVudlZhcmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElFbnZWYXIgPSBFbnZWYXI7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEVudlZhck9wdGlvbnNgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJRW52VmFyT3B0aW9ucyA9IEVudlZhck9wdGlvbnM7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEV4YW1wbGVgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJRXhhbXBsZSA9IEV4YW1wbGU7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEdsb2JhbEVudlZhck9wdGlvbnNgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJR2xvYmFsRW52VmFyT3B0aW9ucyA9IEdsb2JhbEVudlZhck9wdGlvbnM7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYE9wdGlvbmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElPcHRpb248XG4gIE8gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgQSBleHRlbmRzIEFycmF5PHVua25vd24+ID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBDVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIEdUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHVuZGVmaW5lZCxcbj4gPSBPcHRpb248TywgQSwgRywgUEcsIENULCBHVCwgUFQsIFA+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBDb21tYW5kUmVzdWx0YCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSVBhcnNlUmVzdWx0PFxuICBPIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIEEgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgRyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgQ1QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBHVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB1bmRlZmluZWQsXG4+ID0gQ29tbWFuZFJlc3VsdDxPLCBBLCBHLCBQRywgQ1QsIEdULCBQVCwgUD47XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYFR5cGVEZWZgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJVHlwZSA9IFR5cGVEZWY7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYFR5cGVPcHRpb25zYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSVR5cGVPcHRpb25zID0gVHlwZU9wdGlvbnM7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEFjdGlvbkhhbmRsZXJgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJQWN0aW9uPFxuICBPIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIEEgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgRyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgQ1QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBHVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB1bmRlZmluZWQsXG4+ID0gQWN0aW9uSGFuZGxlcjxPLCBBLCBHLCBQRywgQ1QsIEdULCBQVCwgUD47XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYENvbXBsZXRlSGFuZGxlcmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElDb21wbGV0ZUhhbmRsZXI8XG4gIE8gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgQSBleHRlbmRzIEFycmF5PHVua25vd24+ID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBDVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIEdUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHVuZGVmaW5lZCxcbj4gPSBDb21wbGV0ZUhhbmRsZXI8TywgQSwgRywgUEcsIENULCBHVCwgUFQsIFA+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBEZXNjcmlwdGlvbmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElEZXNjcmlwdGlvbjxcbiAgTyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gYW55LFxuICBBIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQRyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIENUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgR1QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFAgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdW5kZWZpbmVkLFxuPiA9IERlc2NyaXB0aW9uPE8sIEEsIEcsIFBHLCBDVCwgR1QsIFBULCBQPjtcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgRW52VmFyVmFsdWVIYW5kbGVyYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSUVudlZhclZhbHVlSGFuZGxlcjxUVmFsdWUgPSBhbnksIFRSZXR1cm4gPSBUVmFsdWU+ID1cbiAgRW52VmFyVmFsdWVIYW5kbGVyPFRWYWx1ZSwgVFJldHVybj47XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYE9wdGlvblZhbHVlSGFuZGxlcmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElGbGFnVmFsdWVIYW5kbGVyPFRWYWx1ZSA9IGFueSwgVFJldHVybiA9IFRWYWx1ZT4gPVxuICBPcHRpb25WYWx1ZUhhbmRsZXI8VFZhbHVlLCBUUmV0dXJuPjtcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgSGVscEhhbmRsZXJgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBJSGVscEhhbmRsZXI8XG4gIE8gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgQSBleHRlbmRzIEFycmF5PHVua25vd24+ID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBHIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBDVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIEdUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgUFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHVuZGVmaW5lZCxcbiAgQyBleHRlbmRzIENvbW1hbmQ8UEcsIFBULCBPLCBBLCBHLCBDVCwgR1QsIFA+ID0gQ29tbWFuZDxcbiAgICBQRyxcbiAgICBQVCxcbiAgICBPLFxuICAgIEEsXG4gICAgRyxcbiAgICBDVCxcbiAgICBHVCxcbiAgICBQXG4gID4sXG4+ID0gSGVscEhhbmRsZXI8TywgQSwgRywgUEcsIENULCBHVCwgUFQsIFA+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBWZXJzaW9uSGFuZGxlcmAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElWZXJzaW9uSGFuZGxlcjxcbiAgTyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gYW55LFxuICBBIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIEcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQRyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIENUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgR1QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IE8gZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiB2b2lkLFxuICBQVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gTyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFAgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPSBPIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdW5kZWZpbmVkLFxuICBDIGV4dGVuZHMgQ29tbWFuZDxQRywgUFQsIE8sIEEsIEcsIENULCBHVCwgUD4gPSBDb21tYW5kPFxuICAgIFBHLFxuICAgIFBULFxuICAgIE8sXG4gICAgQSxcbiAgICBHLFxuICAgIENULFxuICAgIEdULFxuICAgIFBcbiAgPixcbj4gPSBWZXJzaW9uSGFuZGxlcjxPLCBBLCBHLCBQRywgQ1QsIEdULCBQVCwgUD47XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYFR5cGUuaW5mZXJgIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBUeXBlVmFsdWU8VFR5cGUsIFREZWZhdWx0ID0gVFR5cGU+ID0gVHlwZS5pbmZlcjxUVHlwZSwgVERlZmF1bHQ+O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QyJ9
+// denoCacheMetadata=7068101644300130909,3868981483654809315 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/73f8e40cdfb2f7106d82269a0774d7824e2f8630ac33479a521255866f3e7f0d.js b/vendor/gen/https/deno.land/73f8e40cdfb2f7106d82269a0774d7824e2f8630ac33479a521255866f3e7f0d.js
new file mode 100644
index 0000000..c1936b3
--- /dev/null
+++ b/vendor/gen/https/deno.land/73f8e40cdfb2f7106d82269a0774d7824e2f8630ac33479a521255866f3e7f0d.js
@@ -0,0 +1,94 @@
+import { bold, brightBlue, cyan, green, red, yellow } from "../deps.ts";
+import { ValidationError } from "../_errors.ts";
+import { Table } from "../../table/table.ts";
+export class Provider {
+ maxListSize = 25;
+ maxCols = 8;
+ async isOutdated(name, currentVersion, targetVersion) {
+ const { latest, versions } = await this.getVersions(name);
+ if (targetVersion === "latest") {
+ targetVersion = latest;
+ }
+ // Check if requested version exists.
+ if (targetVersion && !versions.includes(targetVersion)) {
+ throw new ValidationError(`The provided version ${bold(red(targetVersion))} is not found.\n\n ${cyan(`Visit ${brightBlue(this.getRepositoryUrl(name))} for available releases or run again with the ${yellow("-l")} or ${yellow("--list-versions")} command.`)}`);
+ }
+ // Check if requested version is already the latest available version.
+ if (latest && latest === currentVersion && latest === targetVersion) {
+ console.warn(yellow(`You're already using the latest available version ${currentVersion} of ${name}.`));
+ return false;
+ }
+ // Check if requested version is already installed.
+ if (targetVersion && currentVersion === targetVersion) {
+ console.warn(yellow(`You're already using version ${currentVersion} of ${name}.`));
+ return false;
+ }
+ return true;
+ }
+ async upgrade({ name, from, to, importMap, main = `${name}.ts`, args = [] }) {
+ if (to === "latest") {
+ const { latest } = await this.getVersions(name);
+ to = latest;
+ }
+ const registry = new URL(main, this.getRegistryUrl(name, to)).href;
+ const cmd = [
+ Deno.execPath(),
+ "install"
+ ];
+ if (importMap) {
+ const importJson = new URL(importMap, this.getRegistryUrl(name, to)).href;
+ cmd.push("--import-map", importJson);
+ }
+ if (args.length) {
+ cmd.push(...args, "--force", "--name", name, registry);
+ } else {
+ cmd.push("--no-check", "--quiet", "--force", "--name", name, registry);
+ }
+ const process = Deno.run({
+ cmd,
+ stdout: "piped",
+ stderr: "piped"
+ });
+ const [status, stderr] = await Promise.all([
+ process.status(),
+ process.stderrOutput(),
+ process.output()
+ ]);
+ if (!status.success) {
+ process.close();
+ await Deno.stderr.write(stderr);
+ throw new Error(`Failed to upgrade ${name} from ${from} to version ${to}!`);
+ }
+ process.close();
+ console.info(`Successfully upgraded ${name} from ${from} to version ${to}! (${this.getRegistryUrl(name, to)})`);
+ }
+ async listVersions(name, currentVersion) {
+ const { versions } = await this.getVersions(name);
+ this.printVersions(versions, currentVersion);
+ }
+ printVersions(versions, currentVersion, { maxCols = this.maxCols, indent = 0 } = {}) {
+ versions = versions.slice();
+ if (versions?.length) {
+ versions = versions.map((version)=>currentVersion && currentVersion === version ? green(`* ${version}`) : ` ${version}`);
+ if (versions.length > this.maxListSize) {
+ const table = new Table().indent(indent);
+ const rowSize = Math.ceil(versions.length / maxCols);
+ const colSize = Math.min(versions.length, maxCols);
+ let versionIndex = 0;
+ for(let colIndex = 0; colIndex < colSize; colIndex++){
+ for(let rowIndex = 0; rowIndex < rowSize; rowIndex++){
+ if (!table[rowIndex]) {
+ table[rowIndex] = [];
+ }
+ table[rowIndex][colIndex] = versions[versionIndex++];
+ }
+ }
+ console.log(table.toString());
+ } else {
+ console.log(versions.map((version)=>" ".repeat(indent) + version).join("\n"));
+ }
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC91cGdyYWRlL3Byb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvbGQsIGJyaWdodEJsdWUsIGN5YW4sIGdyZWVuLCByZWQsIHllbGxvdyB9IGZyb20gXCIuLi9kZXBzLnRzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vX2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwiLi4vLi4vdGFibGUvdGFibGUudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9ucyB7XG4gIGxhdGVzdDogc3RyaW5nO1xuICB2ZXJzaW9uczogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGdyYWRlT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgZnJvbT86IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgYXJncz86IEFycmF5PHN0cmluZz47XG4gIG1haW4/OiBzdHJpbmc7XG4gIGltcG9ydE1hcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb3ZpZGVyIHtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4TGlzdFNpemU6IG51bWJlciA9IDI1O1xuICBwcml2YXRlIG1heENvbHMgPSA4O1xuXG4gIGFic3RyYWN0IGdldFZlcnNpb25zKG5hbWU6IHN0cmluZyk6IFByb21pc2U8VmVyc2lvbnM+O1xuXG4gIGFic3RyYWN0IGdldFJlcG9zaXRvcnlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldFJlZ2lzdHJ5VXJsKG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogc3RyaW5nO1xuXG4gIGFzeW5jIGlzT3V0ZGF0ZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmcsXG4gICAgdGFyZ2V0VmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGxhdGVzdCwgdmVyc2lvbnMgfSA9IGF3YWl0IHRoaXMuZ2V0VmVyc2lvbnMobmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0VmVyc2lvbiA9PT0gXCJsYXRlc3RcIikge1xuICAgICAgdGFyZ2V0VmVyc2lvbiA9IGxhdGVzdDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiByZXF1ZXN0ZWQgdmVyc2lvbiBleGlzdHMuXG4gICAgaWYgKHRhcmdldFZlcnNpb24gJiYgIXZlcnNpb25zLmluY2x1ZGVzKHRhcmdldFZlcnNpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgVGhlIHByb3ZpZGVkIHZlcnNpb24gJHtcbiAgICAgICAgICBib2xkKHJlZCh0YXJnZXRWZXJzaW9uKSlcbiAgICAgICAgfSBpcyBub3QgZm91bmQuXFxuXFxuICAgICR7XG4gICAgICAgICAgY3lhbihcbiAgICAgICAgICAgIGBWaXNpdCAke1xuICAgICAgICAgICAgICBicmlnaHRCbHVlKHRoaXMuZ2V0UmVwb3NpdG9yeVVybChuYW1lKSlcbiAgICAgICAgICAgIH0gZm9yIGF2YWlsYWJsZSByZWxlYXNlcyBvciBydW4gYWdhaW4gd2l0aCB0aGUgJHsoeWVsbG93KFxuICAgICAgICAgICAgICBcIi1sXCIsXG4gICAgICAgICAgICApKX0gb3IgJHsoeWVsbG93KFwiLS1saXN0LXZlcnNpb25zXCIpKX0gY29tbWFuZC5gLFxuICAgICAgICAgIClcbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGFscmVhZHkgdGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbi5cbiAgICBpZiAobGF0ZXN0ICYmIGxhdGVzdCA9PT0gY3VycmVudFZlcnNpb24gJiYgbGF0ZXN0ID09PSB0YXJnZXRWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIHllbGxvdyhcbiAgICAgICAgICBgWW91J3JlIGFscmVhZHkgdXNpbmcgdGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiAke2N1cnJlbnRWZXJzaW9ufSBvZiAke25hbWV9LmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgIGlmICh0YXJnZXRWZXJzaW9uICYmIGN1cnJlbnRWZXJzaW9uID09PSB0YXJnZXRWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIHllbGxvdyhgWW91J3JlIGFscmVhZHkgdXNpbmcgdmVyc2lvbiAke2N1cnJlbnRWZXJzaW9ufSBvZiAke25hbWV9LmApLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGUoXG4gICAgeyBuYW1lLCBmcm9tLCB0bywgaW1wb3J0TWFwLCBtYWluID0gYCR7bmFtZX0udHNgLCBhcmdzID0gW10gfTpcbiAgICAgIFVwZ3JhZGVPcHRpb25zLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodG8gPT09IFwibGF0ZXN0XCIpIHtcbiAgICAgIGNvbnN0IHsgbGF0ZXN0IH0gPSBhd2FpdCB0aGlzLmdldFZlcnNpb25zKG5hbWUpO1xuICAgICAgdG8gPSBsYXRlc3Q7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lzdHJ5OiBzdHJpbmcgPSBuZXcgVVJMKG1haW4sIHRoaXMuZ2V0UmVnaXN0cnlVcmwobmFtZSwgdG8pKS5ocmVmO1xuXG4gICAgY29uc3QgY21kID0gW0Rlbm8uZXhlY1BhdGgoKSwgXCJpbnN0YWxsXCJdO1xuXG4gICAgaWYgKGltcG9ydE1hcCkge1xuICAgICAgY29uc3QgaW1wb3J0SnNvbjogc3RyaW5nID1cbiAgICAgICAgbmV3IFVSTChpbXBvcnRNYXAsIHRoaXMuZ2V0UmVnaXN0cnlVcmwobmFtZSwgdG8pKS5ocmVmO1xuXG4gICAgICBjbWQucHVzaChcIi0taW1wb3J0LW1hcFwiLCBpbXBvcnRKc29uKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNtZC5wdXNoKC4uLmFyZ3MsIFwiLS1mb3JjZVwiLCBcIi0tbmFtZVwiLCBuYW1lLCByZWdpc3RyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNtZC5wdXNoKFwiLS1uby1jaGVja1wiLCBcIi0tcXVpZXRcIiwgXCItLWZvcmNlXCIsIFwiLS1uYW1lXCIsIG5hbWUsIHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9jZXNzID0gRGVuby5ydW4oeyBjbWQsIHN0ZG91dDogXCJwaXBlZFwiLCBzdGRlcnI6IFwicGlwZWRcIiB9KTtcblxuICAgIGNvbnN0IFtzdGF0dXMsIHN0ZGVycl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBwcm9jZXNzLnN0YXR1cygpLFxuICAgICAgcHJvY2Vzcy5zdGRlcnJPdXRwdXQoKSxcbiAgICAgIHByb2Nlc3Mub3V0cHV0KCksXG4gICAgXSk7XG5cbiAgICBpZiAoIXN0YXR1cy5zdWNjZXNzKSB7XG4gICAgICBwcm9jZXNzLmNsb3NlKCk7XG4gICAgICBhd2FpdCBEZW5vLnN0ZGVyci53cml0ZShzdGRlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHVwZ3JhZGUgJHtuYW1lfSBmcm9tICR7ZnJvbX0gdG8gdmVyc2lvbiAke3RvfSFgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5jbG9zZSgpO1xuXG4gICAgY29uc29sZS5pbmZvKFxuICAgICAgYFN1Y2Nlc3NmdWxseSB1cGdyYWRlZCAke25hbWV9IGZyb20gJHtmcm9tfSB0byB2ZXJzaW9uICR7dG99ISAoJHtcbiAgICAgICAgdGhpcy5nZXRSZWdpc3RyeVVybChuYW1lLCB0bylcbiAgICAgIH0pYCxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RWZXJzaW9ucyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY3VycmVudFZlcnNpb24/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbnMgfSA9IGF3YWl0IHRoaXMuZ2V0VmVyc2lvbnMobmFtZSk7XG4gICAgdGhpcy5wcmludFZlcnNpb25zKHZlcnNpb25zLCBjdXJyZW50VmVyc2lvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJpbnRWZXJzaW9ucyhcbiAgICB2ZXJzaW9uczogQXJyYXk8c3RyaW5nPixcbiAgICBjdXJyZW50VmVyc2lvbj86IHN0cmluZyxcbiAgICB7IG1heENvbHMgPSB0aGlzLm1heENvbHMsIGluZGVudCA9IDAgfToge1xuICAgICAgbWF4Q29scz86IG51bWJlcjtcbiAgICAgIGluZGVudD86IG51bWJlcjtcbiAgICB9ID0ge30sXG4gICk6IHZvaWQge1xuICAgIHZlcnNpb25zID0gdmVyc2lvbnMuc2xpY2UoKTtcbiAgICBpZiAodmVyc2lvbnM/Lmxlbmd0aCkge1xuICAgICAgdmVyc2lvbnMgPSB2ZXJzaW9ucy5tYXAoKHZlcnNpb246IHN0cmluZykgPT5cbiAgICAgICAgY3VycmVudFZlcnNpb24gJiYgY3VycmVudFZlcnNpb24gPT09IHZlcnNpb25cbiAgICAgICAgICA/IGdyZWVuKGAqICR7dmVyc2lvbn1gKVxuICAgICAgICAgIDogYCAgJHt2ZXJzaW9ufWBcbiAgICAgICk7XG5cbiAgICAgIGlmICh2ZXJzaW9ucy5sZW5ndGggPiB0aGlzLm1heExpc3RTaXplKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKCkuaW5kZW50KGluZGVudCk7XG4gICAgICAgIGNvbnN0IHJvd1NpemUgPSBNYXRoLmNlaWwodmVyc2lvbnMubGVuZ3RoIC8gbWF4Q29scyk7XG4gICAgICAgIGNvbnN0IGNvbFNpemUgPSBNYXRoLm1pbih2ZXJzaW9ucy5sZW5ndGgsIG1heENvbHMpO1xuICAgICAgICBsZXQgdmVyc2lvbkluZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNvbFNpemU7IGNvbEluZGV4KyspIHtcbiAgICAgICAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93U2l6ZTsgcm93SW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKCF0YWJsZVtyb3dJbmRleF0pIHtcbiAgICAgICAgICAgICAgdGFibGVbcm93SW5kZXhdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZVtyb3dJbmRleF1bY29sSW5kZXhdID0gdmVyc2lvbnNbdmVyc2lvbkluZGV4KytdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyh0YWJsZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIHZlcnNpb25zLm1hcCgodmVyc2lvbikgPT4gXCIgXCIucmVwZWF0KGluZGVudCkgKyB2ZXJzaW9uKS5qb2luKFwiXFxuXCIpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsYUFBYTtBQUN4RSxTQUFTLGVBQWUsUUFBUSxnQkFBZ0I7QUFDaEQsU0FBUyxLQUFLLFFBQVEsdUJBQXVCO0FBZ0I3QyxPQUFPLE1BQWU7RUFFRCxjQUFzQixHQUFHO0VBQ3BDLFVBQVUsRUFBRTtFQVFwQixNQUFNLFdBQ0osSUFBWSxFQUNaLGNBQXNCLEVBQ3RCLGFBQXFCLEVBQ0g7SUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFX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
+// denoCacheMetadata=14051251275348798095,4992053083864636675 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/74b01b574b3f43138835e07df185a4ec6a7b7703dd41b0a4946fef7d4dd1a83e.js b/vendor/gen/https/deno.land/74b01b574b3f43138835e07df185a4ec6a7b7703dd41b0a4946fef7d4dd1a83e.js
new file mode 100644
index 0000000..f86fe85
--- /dev/null
+++ b/vendor/gen/https/deno.land/74b01b574b3f43138835e07df185a4ec6a7b7703dd41b0a4946fef7d4dd1a83e.js
@@ -0,0 +1,294 @@
+import { CTOR_KEY } from "../constructor-lock.ts";
+import { Comment, Node, NodeType, Text } from "./node.ts";
+import { NodeList, nodeListMutatorSym } from "./node-list.ts";
+import { Element } from "./element.ts";
+import { DocumentFragment } from "./document-fragment.ts";
+import { HTMLTemplateElement } from "./elements/html-template-element.ts";
+import { getSelectorEngine } from "./selectors/selectors.ts";
+import { getElementsByClassName } from "./utils.ts";
+import UtilTypes from "./utils-types.ts";
+import { getUpperCase } from "./string-cache.ts";
+export class DOMImplementation {
+ constructor(key){
+ if (key !== CTOR_KEY) {
+ throw new TypeError("Illegal constructor.");
+ }
+ }
+ createDocument() {
+ throw new Error("Unimplemented"); // TODO
+ }
+ createHTMLDocument(titleStr) {
+ titleStr += "";
+ const doc = new HTMLDocument(CTOR_KEY);
+ const docType = new DocumentType("html", "", "", CTOR_KEY);
+ doc.appendChild(docType);
+ const html = new Element("html", doc, [], CTOR_KEY);
+ html._setOwnerDocument(doc);
+ const head = new Element("head", html, [], CTOR_KEY);
+ const body = new Element("body", html, [], CTOR_KEY);
+ const title = new Element("title", head, [], CTOR_KEY);
+ const titleText = new Text(titleStr);
+ title.appendChild(titleText);
+ doc.head = head;
+ doc.body = body;
+ return doc;
+ }
+ createDocumentType(qualifiedName, publicId, systemId) {
+ const doctype = new DocumentType(qualifiedName, publicId, systemId, CTOR_KEY);
+ return doctype;
+ }
+}
+export class DocumentType extends Node {
+ #qualifiedName = "";
+ #publicId = "";
+ #systemId = "";
+ constructor(name, publicId, systemId, key){
+ super("html", NodeType.DOCUMENT_TYPE_NODE, null, key);
+ this.#qualifiedName = name;
+ this.#publicId = publicId;
+ this.#systemId = systemId;
+ }
+ get name() {
+ return this.#qualifiedName;
+ }
+ get publicId() {
+ return this.#publicId;
+ }
+ get systemId() {
+ return this.#systemId;
+ }
+ _shallowClone() {
+ return new DocumentType(this.#qualifiedName, this.#publicId, this.#systemId, CTOR_KEY);
+ }
+}
+export class Document extends Node {
+ head = null;
+ body = null;
+ implementation;
+ #documentURI = "about:blank";
+ #nwapi = null;
+ constructor(){
+ super("#document", NodeType.DOCUMENT_NODE, null, CTOR_KEY);
+ this.implementation = new DOMImplementation(CTOR_KEY);
+ }
+ _shallowClone() {
+ return new Document();
+ }
+ // Expose the document's NWAPI for Element's access to
+ // querySelector/querySelectorAll
+ get _nwapi() {
+ return this.#nwapi || (this.#nwapi = getSelectorEngine()(this));
+ }
+ get documentURI() {
+ return this.#documentURI;
+ }
+ get title() {
+ return this.querySelector("title")?.textContent || "";
+ }
+ set title(value) {
+ let titleElement = this.querySelector("title");
+ if (!titleElement) {
+ const { head } = this;
+ if (!head) return;
+ titleElement = this.createElement("title");
+ head.appendChild(titleElement);
+ }
+ titleElement.textContent = value;
+ }
+ get cookie() {
+ return ""; // TODO
+ }
+ set cookie(newCookie) {
+ // TODO
+ }
+ get visibilityState() {
+ return "visible";
+ }
+ get hidden() {
+ return false;
+ }
+ get compatMode() {
+ return "CSS1Compat";
+ }
+ get documentElement() {
+ for (const node of this.childNodes){
+ if (node.nodeType === NodeType.ELEMENT_NODE) {
+ return node;
+ }
+ }
+ return null;
+ }
+ get doctype() {
+ for (const node of this.childNodes){
+ if (node.nodeType === NodeType.DOCUMENT_TYPE_NODE) {
+ return node;
+ }
+ }
+ return null;
+ }
+ get childElementCount() {
+ let count = 0;
+ for (const { nodeType } of this.childNodes){
+ if (nodeType === NodeType.ELEMENT_NODE) {
+ count++;
+ }
+ }
+ return count;
+ }
+ appendChild(child) {
+ super.appendChild(child);
+ child._setOwnerDocument(this);
+ return child;
+ }
+ createElement(tagName, options) {
+ tagName = getUpperCase(tagName);
+ switch(tagName){
+ case "TEMPLATE":
+ {
+ const frag = new DocumentFragment();
+ const elm = new HTMLTemplateElement(null, [], CTOR_KEY, frag);
+ elm._setOwnerDocument(this);
+ return elm;
+ }
+ default:
+ {
+ const elm = new Element(tagName, null, [], CTOR_KEY);
+ elm._setOwnerDocument(this);
+ return elm;
+ }
+ }
+ }
+ createElementNS(namespace, qualifiedName, options) {
+ if (namespace === "http://www.w3.org/1999/xhtml") {
+ return this.createElement(qualifiedName, options);
+ } else {
+ throw new Error(`createElementNS: "${namespace}" namespace unimplemented`); // TODO
+ }
+ }
+ createTextNode(data) {
+ return new Text(data);
+ }
+ createComment(data) {
+ return new Comment(data);
+ }
+ createDocumentFragment() {
+ const fragment = new DocumentFragment();
+ fragment._setOwnerDocument(this);
+ return fragment;
+ }
+ importNode(node, deep = false) {
+ const copy = node.cloneNode(deep);
+ copy._setOwnerDocument(this);
+ return copy;
+ }
+ adoptNode(node) {
+ if (node instanceof Document) {
+ throw new DOMException("Adopting a Document node is not supported.", "NotSupportedError");
+ }
+ node._setParent(null);
+ node._setOwnerDocument(this);
+ return node;
+ }
+ // FIXME: This is a bad solution. The correct solution
+ // would be to make `.body` and `.head` dynamic getters,
+ // but that would be a breaking change since `.body`
+ // and `.head` would need to be typed as `Element | null`.
+ // Currently they're typed as `Element` which is incorrect...
+ cloneNode(deep) {
+ const doc = super.cloneNode(deep);
+ for (const child of doc.documentElement?.childNodes || []){
+ switch(child.nodeName){
+ case "BODY":
+ {
+ doc.body = child;
+ break;
+ }
+ case "HEAD":
+ {
+ doc.head = child;
+ break;
+ }
+ }
+ }
+ return doc;
+ }
+ querySelector(selectors) {
+ return this._nwapi.first(selectors, this);
+ }
+ querySelectorAll(selectors) {
+ const nodeList = new NodeList();
+ const mutator = nodeList[nodeListMutatorSym]();
+ for (const match of this._nwapi.select(selectors, this)){
+ mutator.push(match);
+ }
+ return nodeList;
+ }
+ // TODO: DRY!!!
+ getElementById(id) {
+ if (!this._hasInitializedChildNodes()) {
+ return null;
+ }
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ if (child.id === id) {
+ return child;
+ }
+ const search = child.getElementById(id);
+ if (search) {
+ return search;
+ }
+ }
+ }
+ return null;
+ }
+ getElementsByTagName(tagName) {
+ if (tagName === "*") {
+ return this.documentElement ? this._getElementsByTagNameWildcard(this.documentElement, []) : [];
+ } else {
+ return this._getElementsByTagName(getUpperCase(tagName), []);
+ }
+ }
+ _getElementsByTagNameWildcard(node, search) {
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ search.push(child);
+ child._getElementsByTagNameWildcard(search);
+ }
+ }
+ return search;
+ }
+ _getElementsByTagName(tagName, search) {
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ if (child.tagName === tagName) {
+ search.push(child);
+ }
+ child._getElementsByTagName(tagName, search);
+ }
+ }
+ return search;
+ }
+ getElementsByTagNameNS(_namespace, localName) {
+ return this.getElementsByTagName(localName);
+ }
+ getElementsByClassName(className) {
+ return getElementsByClassName(this, className.trim().split(/\s+/), []);
+ }
+ hasFocus() {
+ return true;
+ }
+}
+export class HTMLDocument extends Document {
+ constructor(key){
+ if (key !== CTOR_KEY) {
+ throw new TypeError("Illegal constructor.");
+ }
+ super();
+ }
+ _shallowClone() {
+ return new HTMLDocument(CTOR_KEY);
+ }
+}
+UtilTypes.Document = Document;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL2RvY3VtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENUT1JfS0VZIH0gZnJvbSBcIi4uL2NvbnN0cnVjdG9yLWxvY2sudHNcIjtcbmltcG9ydCB7IENvbW1lbnQsIE5vZGUsIE5vZGVUeXBlLCBUZXh0IH0gZnJvbSBcIi4vbm9kZS50c1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QsIG5vZGVMaXN0TXV0YXRvclN5bSB9IGZyb20gXCIuL25vZGUtbGlzdC50c1wiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQudHNcIjtcbmltcG9ydCB7IERvY3VtZW50RnJhZ21lbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1mcmFnbWVudC50c1wiO1xuaW1wb3J0IHsgSFRNTFRlbXBsYXRlRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2h0bWwtdGVtcGxhdGUtZWxlbWVudC50c1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0b3JFbmdpbmUsIFNlbGVjdG9yQXBpIH0gZnJvbSBcIi4vc2VsZWN0b3JzL3NlbGVjdG9ycy50c1wiO1xuaW1wb3J0IHsgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB9IGZyb20gXCIuL3V0aWxzLnRzXCI7XG5pbXBvcnQgVXRpbFR5cGVzIGZyb20gXCIuL3V0aWxzLXR5cGVzLnRzXCI7XG5pbXBvcnQgeyBnZXRVcHBlckNhc2UgfSBmcm9tIFwiLi9zdHJpbmctY2FjaGUudHNcIjtcblxuZXhwb3J0IGNsYXNzIERPTUltcGxlbWVudGF0aW9uIHtcbiAgY29uc3RydWN0b3Ioa2V5OiB0eXBlb2YgQ1RPUl9LRVkpIHtcbiAgICBpZiAoa2V5ICE9PSBDVE9SX0tFWSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3IuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZURvY3VtZW50KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWRcIik7IC8vIFRPRE9cbiAgfVxuXG4gIGNyZWF0ZUhUTUxEb2N1bWVudCh0aXRsZVN0cj86IHN0cmluZyk6IEhUTUxEb2N1bWVudCB7XG4gICAgdGl0bGVTdHIgKz0gXCJcIjtcblxuICAgIGNvbnN0IGRvYyA9IG5ldyBIVE1MRG9jdW1lbnQoQ1RPUl9LRVkpO1xuXG4gICAgY29uc3QgZG9jVHlwZSA9IG5ldyBEb2N1bWVudFR5cGUoXCJodG1sXCIsIFwiXCIsIFwiXCIsIENUT1JfS0VZKTtcbiAgICBkb2MuYXBwZW5kQ2hpbGQoZG9jVHlwZSk7XG5cbiAgICBjb25zdCBodG1sID0gbmV3IEVsZW1lbnQoXCJodG1sXCIsIGRvYywgW10sIENUT1JfS0VZKTtcbiAgICBodG1sLl9zZXRPd25lckRvY3VtZW50KGRvYyk7XG5cbiAgICBjb25zdCBoZWFkID0gbmV3IEVsZW1lbnQoXCJoZWFkXCIsIGh0bWwsIFtdLCBDVE9SX0tFWSk7XG4gICAgY29uc3QgYm9keSA9IG5ldyBFbGVtZW50KFwiYm9keVwiLCBodG1sLCBbXSwgQ1RPUl9LRVkpO1xuXG4gICAgY29uc3QgdGl0bGUgPSBuZXcgRWxlbWVudChcInRpdGxlXCIsIGhlYWQsIFtdLCBDVE9SX0tFWSk7XG4gICAgY29uc3QgdGl0bGVUZXh0ID0gbmV3IFRleHQodGl0bGVTdHIpO1xuICAgIHRpdGxlLmFwcGVuZENoaWxkKHRpdGxlVGV4dCk7XG5cbiAgICBkb2MuaGVhZCA9IGhlYWQ7XG4gICAgZG9jLmJvZHkgPSBib2R5O1xuXG4gICAgcmV0dXJuIGRvYztcbiAgfVxuXG4gIGNyZWF0ZURvY3VtZW50VHlwZShcbiAgICBxdWFsaWZpZWROYW1lOiBzdHJpbmcsXG4gICAgcHVibGljSWQ6IHN0cmluZyxcbiAgICBzeXN0ZW1JZDogc3RyaW5nLFxuICApOiBEb2N1bWVudFR5cGUge1xuICAgIGNvbnN0IGRvY3R5cGUgPSBuZXcgRG9jdW1lbnRUeXBlKFxuICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgIHB1YmxpY0lkLFxuICAgICAgc3lzdGVtSWQsXG4gICAgICBDVE9SX0tFWSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGRvY3R5cGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50VHlwZSBleHRlbmRzIE5vZGUge1xuICAjcXVhbGlmaWVkTmFtZSA9IFwiXCI7XG4gICNwdWJsaWNJZCA9IFwiXCI7XG4gICNzeXN0ZW1JZCA9IFwiXCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHB1YmxpY0lkOiBzdHJpbmcsXG4gICAgc3lzdGVtSWQ6IHN0cmluZyxcbiAgICBrZXk6IHR5cGVvZiBDVE9SX0tFWSxcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBcImh0bWxcIixcbiAgICAgIE5vZGVUeXBlLkRPQ1VNRU5UX1RZUEVfTk9ERSxcbiAgICAgIG51bGwsXG4gICAgICBrZXksXG4gICAgKTtcblxuICAgIHRoaXMuI3F1YWxpZmllZE5hbWUgPSBuYW1lO1xuICAgIHRoaXMuI3B1YmxpY0lkID0gcHVibGljSWQ7XG4gICAgdGhpcy4jc3lzdGVtSWQgPSBzeXN0ZW1JZDtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI3F1YWxpZmllZE5hbWU7XG4gIH1cblxuICBnZXQgcHVibGljSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jcHVibGljSWQ7XG4gIH1cblxuICBnZXQgc3lzdGVtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jc3lzdGVtSWQ7XG4gIH1cblxuICBvdmVycmlkZSBfc2hhbGxvd0Nsb25lKCk6IE5vZGUge1xuICAgIHJldHVybiBuZXcgRG9jdW1lbnRUeXBlKFxuICAgICAgdGhpcy4jcXVhbGlmaWVkTmFtZSxcbiAgICAgIHRoaXMuI3B1YmxpY0lkLFxuICAgICAgdGhpcy4jc3lzdGVtSWQsXG4gICAgICBDVE9SX0tFWSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudENyZWF0aW9uT3B0aW9ucyB7XG4gIGlzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFZpc2liaWxpdHlTdGF0ZSA9IFwidmlzaWJsZVwiIHwgXCJoaWRkZW5cIiB8IFwicHJlcmVuZGVyXCI7XG5leHBvcnQgdHlwZSBOYW1lc3BhY2VVUkkgPVxuICB8IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gIHwgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gIHwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudCBleHRlbmRzIE5vZGUge1xuICBwdWJsaWMgaGVhZDogRWxlbWVudCA9IDxFbGVtZW50PiA8dW5rbm93bj4gbnVsbDtcbiAgcHVibGljIGJvZHk6IEVsZW1lbnQgPSA8RWxlbWVudD4gPHVua25vd24+IG51bGw7XG4gIHB1YmxpYyBpbXBsZW1lbnRhdGlvbjogRE9NSW1wbGVtZW50YXRpb247XG5cbiAgI2RvY3VtZW50VVJJID0gXCJhYm91dDpibGFua1wiOyAvLyBUT0RPXG4gICNud2FwaTogU2VsZWN0b3JBcGkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiI2RvY3VtZW50XCIsXG4gICAgICBOb2RlVHlwZS5ET0NVTUVOVF9OT0RFLFxuICAgICAgbnVsbCxcbiAgICAgIENUT1JfS0VZLFxuICAgICk7XG5cbiAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gbmV3IERPTUltcGxlbWVudGF0aW9uKENUT1JfS0VZKTtcbiAgfVxuXG4gIG92ZXJyaWRlIF9zaGFsbG93Q2xvbmUoKTogTm9kZSB7XG4gICAgcmV0dXJuIG5ldyBEb2N1bWVudCgpO1xuICB9XG5cbiAgLy8gRXhwb3NlIHRoZSBkb2N1bWVudCdzIE5XQVBJIGZvciBFbGVtZW50J3MgYWNjZXNzIHRvXG4gIC8vIHF1ZXJ5U2VsZWN0b3IvcXVlcnlTZWxlY3RvckFsbFxuICBnZXQgX253YXBpKCk6IFNlbGVjdG9yQXBpIHtcbiAgICByZXR1cm4gdGhpcy4jbndhcGkgfHwgKHRoaXMuI253YXBpID0gZ2V0U2VsZWN0b3JFbmdpbmUoKSh0aGlzKSk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRVUkkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZG9jdW1lbnRVUkk7XG4gIH1cblxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKFwidGl0bGVcIik/LnRleHRDb250ZW50IHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGl0bGVFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidGl0bGVcIik7XG4gICAgaWYgKCF0aXRsZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHsgaGVhZCB9ID0gdGhpcztcbiAgICAgIGlmICghaGVhZCkgcmV0dXJuO1xuXG4gICAgICB0aXRsZUVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJ0aXRsZVwiKTtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjb29raWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjsgLy8gVE9ET1xuICB9XG5cbiAgc2V0IGNvb2tpZShuZXdDb29raWU6IHN0cmluZykge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIGdldCB2aXNpYmlsaXR5U3RhdGUoKTogVmlzaWJpbGl0eVN0YXRlIHtcbiAgICByZXR1cm4gXCJ2aXNpYmxlXCI7XG4gIH1cblxuICBnZXQgaGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBjb21wYXRNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiQ1NTMUNvbXBhdFwiO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50RWxlbWVudCgpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGVUeXBlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICByZXR1cm4gPEVsZW1lbnQ+IG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgZG9jdHlwZSgpOiBEb2N1bWVudFR5cGUgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRE9DVU1FTlRfVFlQRV9OT0RFKSB7XG4gICAgICAgIHJldHVybiA8RG9jdW1lbnRUeXBlPiBub2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGNoaWxkRWxlbWVudENvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IHsgbm9kZVR5cGUgfSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgIGlmIChub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFwcGVuZENoaWxkKGNoaWxkOiBOb2RlKTogTm9kZSB7XG4gICAgc3VwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgIGNoaWxkLl9zZXRPd25lckRvY3VtZW50KHRoaXMpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnQodGFnTmFtZTogc3RyaW5nLCBvcHRpb25zPzogRWxlbWVudENyZWF0aW9uT3B0aW9ucyk6IEVsZW1lbnQge1xuICAgIHRhZ05hbWUgPSBnZXRVcHBlckNhc2UodGFnTmFtZSk7XG5cbiAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAgIGNhc2UgXCJURU1QTEFURVwiOiB7XG4gICAgICAgIGNvbnN0IGZyYWcgPSBuZXcgRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCBlbG0gPSBuZXcgSFRNTFRlbXBsYXRlRWxlbWVudChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIFtdLFxuICAgICAgICAgIENUT1JfS0VZLFxuICAgICAgICAgIGZyYWcsXG4gICAgICAgICk7XG4gICAgICAgIGVsbS5fc2V0T3duZXJEb2N1bWVudCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGVsbTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBlbG0gPSBuZXcgRWxlbWVudCh0YWdOYW1lLCBudWxsLCBbXSwgQ1RPUl9LRVkpO1xuICAgICAgICBlbG0uX3NldE93bmVyRG9jdW1lbnQodGhpcyk7XG4gICAgICAgIHJldHVybiBlbG07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRWxlbWVudE5TKFxuICAgIG5hbWVzcGFjZTogTmFtZXNwYWNlVVJJLFxuICAgIHF1YWxpZmllZE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogRWxlbWVudENyZWF0aW9uT3B0aW9ucyxcbiAgKTogRWxlbWVudCB7XG4gICAgaWYgKG5hbWVzcGFjZSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnQocXVhbGlmaWVkTmFtZSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNyZWF0ZUVsZW1lbnROUzogXCIke25hbWVzcGFjZX1cIiBuYW1lc3BhY2UgdW5pbXBsZW1lbnRlZGAsXG4gICAgICApOyAvLyBUT0RPXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlVGV4dE5vZGUoZGF0YT86IHN0cmluZyk6IFRleHQge1xuICAgIHJldHVybiBuZXcgVGV4dChkYXRhKTtcbiAgfVxuXG4gIGNyZWF0ZUNvbW1lbnQoZGF0YT86IHN0cmluZyk6IENvbW1lbnQge1xuICAgIHJldHVybiBuZXcgQ29tbWVudChkYXRhKTtcbiAgfVxuXG4gIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGZyYWdtZW50Ll9zZXRPd25lckRvY3VtZW50KHRoaXMpO1xuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIGltcG9ydE5vZGUobm9kZTogTm9kZSwgZGVlcDogYm9vbGVhbiA9IGZhbHNlKTogTm9kZSB7XG4gICAgY29uc3QgY29weSA9IG5vZGUuY2xvbmVOb2RlKGRlZXApO1xuXG4gICAgY29weS5fc2V0T3duZXJEb2N1bWVudCh0aGlzKTtcblxuICAgIHJldHVybiBjb3B5O1xuICB9XG5cbiAgYWRvcHROb2RlKG5vZGU6IE5vZGUpOiBOb2RlIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIERvY3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBcIkFkb3B0aW5nIGEgRG9jdW1lbnQgbm9kZSBpcyBub3Qgc3VwcG9ydGVkLlwiLFxuICAgICAgICBcIk5vdFN1cHBvcnRlZEVycm9yXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBub2RlLl9zZXRQYXJlbnQobnVsbCk7XG4gICAgbm9kZS5fc2V0T3duZXJEb2N1bWVudCh0aGlzKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLy8gRklYTUU6IFRoaXMgaXMgYSBiYWQgc29sdXRpb24uIFRoZSBjb3JyZWN0IHNvbHV0aW9uXG4gIC8vIHdvdWxkIGJlIHRvIG1ha2UgYC5ib2R5YCBhbmQgYC5oZWFkYCBkeW5hbWljIGdldHRlcnMsXG4gIC8vIGJ1dCB0aGF0IHdvdWxkIGJlIGEgYnJlYWtpbmcgY2hhbmdlIHNpbmNlIGAuYm9keWBcbiAgLy8gYW5kIGAuaGVhZGAgd291bGQgbmVlZCB0byBiZSB0eXBlZCBhcyBgRWxlbWVudCB8IG51bGxgLlxuICAvLyBDdXJyZW50bHkgdGhleSdyZSB0eXBlZCBhcyBgRWxlbWVudGAgd2hpY2ggaXMgaW5jb3JyZWN0Li4uXG4gIG92ZXJyaWRlIGNsb25lTm9kZShkZWVwPzogYm9vbGVhbik6IERvY3VtZW50IHtcbiAgICBjb25zdCBkb2MgPSBzdXBlci5jbG9uZU5vZGUoZGVlcCkgYXMgRG9jdW1lbnQ7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvYy5kb2N1bWVudEVsZW1lbnQ/LmNoaWxkTm9kZXMgfHwgW10pIHtcbiAgICAgIHN3aXRjaCAoY2hpbGQubm9kZU5hbWUpIHtcbiAgICAgICAgY2FzZSBcIkJPRFlcIjoge1xuICAgICAgICAgIGRvYy5ib2R5ID0gY2hpbGQgYXMgRWxlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJIRUFEXCI6IHtcbiAgICAgICAgICBkb2MuaGVhZCA9IGNoaWxkIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jO1xuICB9XG5cbiAgcXVlcnlTZWxlY3RvcjxUID0gRWxlbWVudD4oc2VsZWN0b3JzOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX253YXBpLmZpcnN0KHNlbGVjdG9ycywgdGhpcykgYXMgVDtcbiAgfVxuXG4gIHF1ZXJ5U2VsZWN0b3JBbGw8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PihcbiAgICBzZWxlY3RvcnM6IHN0cmluZyxcbiAgKTogTm9kZUxpc3Q8VD4ge1xuICAgIGNvbnN0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG4gICAgY29uc3QgbXV0YXRvciA9IG5vZGVMaXN0W25vZGVMaXN0TXV0YXRvclN5bV0oKTtcblxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgdGhpcy5fbndhcGkuc2VsZWN0KHNlbGVjdG9ycywgdGhpcykpIHtcbiAgICAgIG11dGF0b3IucHVzaChtYXRjaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVMaXN0IGFzIE5vZGVMaXN0PFQ+O1xuICB9XG5cbiAgLy8gVE9ETzogRFJZISEhXG4gIGdldEVsZW1lbnRCeUlkKGlkOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGlmICgoPEVsZW1lbnQ+IGNoaWxkKS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICByZXR1cm4gPEVsZW1lbnQ+IGNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gKDxFbGVtZW50PiBjaGlsZCkuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgcmV0dXJuIHNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZTogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgICBpZiAodGFnTmFtZSA9PT0gXCIqXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50RWxlbWVudFxuICAgICAgICA/IDxFbGVtZW50W10+IHRoaXMuX2dldEVsZW1lbnRzQnlUYWdOYW1lV2lsZGNhcmQoXG4gICAgICAgICAgdGhpcy5kb2N1bWVudEVsZW1lbnQsXG4gICAgICAgICAgW10sXG4gICAgICAgIClcbiAgICAgICAgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxFbGVtZW50W10+IHRoaXMuX2dldEVsZW1lbnRzQnlUYWdOYW1lKGdldFVwcGVyQ2FzZSh0YWdOYW1lKSwgW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEVsZW1lbnRzQnlUYWdOYW1lV2lsZGNhcmQobm9kZTogTm9kZSwgc2VhcmNoOiBOb2RlW10pOiBOb2RlW10ge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5vZGVUeXBlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBzZWFyY2gucHVzaChjaGlsZCk7XG4gICAgICAgICg8YW55PiBjaGlsZCkuX2dldEVsZW1lbnRzQnlUYWdOYW1lV2lsZGNhcmQoc2VhcmNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZTogc3RyaW5nLCBzZWFyY2g6IE5vZGVbXSk6IE5vZGVbXSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGlmICgoPEVsZW1lbnQ+IGNoaWxkKS50YWdOYW1lID09PSB0YWdOYW1lKSB7XG4gICAgICAgICAgc2VhcmNoLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKDxhbnk+IGNoaWxkKS5fZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSwgc2VhcmNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoO1xuICB9XG5cbiAgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhfbmFtZXNwYWNlOiBzdHJpbmcsIGxvY2FsTmFtZTogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShsb2NhbE5hbWUpO1xuICB9XG5cbiAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICB0aGlzLFxuICAgICAgY2xhc3NOYW1lLnRyaW0oKS5zcGxpdCgvXFxzKy8pLFxuICAgICAgW10sXG4gICAgKSBhcyBFbGVtZW50W107XG4gIH1cblxuICBoYXNGb2N1cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSFRNTERvY3VtZW50IGV4dGVuZHMgRG9jdW1lbnQge1xuICBjb25zdHJ1Y3RvcihrZXk6IHR5cGVvZiBDVE9SX0tFWSkge1xuICAgIGlmIChrZXkgIT09IENUT1JfS0VZKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3Rvci5cIik7XG4gICAgfVxuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBfc2hhbGxvd0Nsb25lKCk6IE5vZGUge1xuICAgIHJldHVybiBuZXcgSFRNTERvY3VtZW50KENUT1JfS0VZKTtcbiAgfVxufVxuXG5VdGlsVHlwZXMuRG9jdW1lbnQgPSBEb2N1bWVudDtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFFBQVEsUUFBUSx5QkFBeUI7QUFDbEQsU0FBUyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLFFBQVEsWUFBWTtBQUMxRCxTQUFTLFFBQVEsRUFBRSxrQkFBa0IsUUFBUSxpQkFBaUI7QUFDOUQsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTLGdCQUFnQixRQUFRLHlCQUF5QjtBQUMxRCxTQUFTLG1CQUFtQixRQUFRLHNDQUFzQztBQUMxRSxTQUFTLGlCQUFpQixRQUFxQiwyQkFBMkI7QUFDMUUsU0FBUyxzQkFBc0IsUUFBUSxhQUFhO0FBQ3BELE9BQU8sZUFBZSxtQkFBbUI7QUFDekMsU0FBUyxZQUFZLFFBQVEs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
+// denoCacheMetadata=2532538961165157685,4861072343100437016 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/74f8f850392a8719021d136a3167defffc0a0de3c943f5f3d44b3a5d882dc70b.js b/vendor/gen/https/deno.land/74f8f850392a8719021d136a3167defffc0a0de3c943f5f3d44b3a5d882dc70b.js
new file mode 100644
index 0000000..ae38433
--- /dev/null
+++ b/vendor/gen/https/deno.land/74f8f850392a8719021d136a3167defffc0a0de3c943f5f3d44b3a5d882dc70b.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/jsonc@1.0.2";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9qc29uYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwianNyOkBzdGQvanNvbmNAMS4wLjJcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QiJ9
+// denoCacheMetadata=6140751609095041619,5505528500483124483 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/750a0e6ae5b5ce579002ffa2a4ba9a12fd10d2e29d70392b60b03aa1a4e37ca9.js b/vendor/gen/https/deno.land/750a0e6ae5b5ce579002ffa2a4ba9a12fd10d2e29d70392b60b03aa1a4e37ca9.js
new file mode 100644
index 0000000..c4d2d99
--- /dev/null
+++ b/vendor/gen/https/deno.land/750a0e6ae5b5ce579002ffa2a4ba9a12fd10d2e29d70392b60b03aa1a4e37ca9.js
@@ -0,0 +1,63 @@
+import { Command } from "../command.ts";
+import { ValidationError } from "../../flags/_errors.ts";
+import { EnumType } from "../types/enum.ts";
+export class UpgradeCommand extends Command {
+ providers;
+ constructor({ provider, main, args, importMap }){
+ super();
+ this.providers = Array.isArray(provider) ? provider : [
+ provider
+ ];
+ if (!this.providers.length) {
+ throw new Error(`No upgrade provider defined!`);
+ }
+ this.description(()=>`Upgrade ${this.getMainCommand().getName()} executable to latest or given version.`).noGlobals().type("provider", new EnumType(this.getProviderNames())).option("-r, --registry <name:provider>", `The registry name from which to upgrade.`, {
+ default: this.getProvider().name,
+ hidden: this.providers.length < 2,
+ value: (registry)=>this.getProvider(registry)
+ }).option("-l, --list-versions", "Show available versions.", {
+ action: async ({ registry })=>{
+ await registry.listVersions(this.getMainCommand().getName(), this.getVersion());
+ Deno.exit(0);
+ }
+ }).option("--version <version:string:version>", "The version to upgrade to.", {
+ default: "latest"
+ }).option("-f, --force", "Replace current installation even if not out-of-date.").complete("version", ()=>this.getAllVersions()).action(async ({ registry, version: targetVersion, force })=>{
+ const name = this.getMainCommand().getName();
+ const currentVersion = this.getVersion();
+ if (force || !currentVersion || await registry.isOutdated(name, currentVersion, targetVersion)) {
+ await registry.upgrade({
+ name,
+ main,
+ importMap,
+ from: currentVersion,
+ to: targetVersion,
+ args
+ });
+ }
+ });
+ }
+ async getAllVersions() {
+ const { versions } = await this.getVersions();
+ return versions;
+ }
+ async getLatestVersion() {
+ const { latest } = await this.getVersions();
+ return latest;
+ }
+ getVersions() {
+ return this.getProvider().getVersions(this.getMainCommand().getName());
+ }
+ getProvider(name) {
+ const provider = name ? this.providers.find((provider)=>provider.name === name) : this.providers[0];
+ if (!provider) {
+ throw new ValidationError(`Unknown provider "${name}"`);
+ }
+ return provider;
+ }
+ getProviderNames() {
+ return this.providers.map((provider)=>provider.name);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC91cGdyYWRlL3VwZ3JhZGVfY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmQudHNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi9mbGFncy9fZXJyb3JzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3ZpZGVyLCBWZXJzaW9ucyB9IGZyb20gXCIuL3Byb3ZpZGVyLnRzXCI7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gXCIuLi90eXBlcy9lbnVtLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBncmFkZUNvbW1hbmRPcHRpb25zPFxuICBUUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlciA9IFByb3ZpZGVyLFxuICBUUHJvdmlkZXJzIGV4dGVuZHMgVFByb3ZpZGVyIHwgQXJyYXk8VFByb3ZpZGVyPiA9XG4gICAgfCBUUHJvdmlkZXJcbiAgICB8IEFycmF5PFRQcm92aWRlcj4sXG4+IHtcbiAgcHJvdmlkZXI6IFRQcm92aWRlcnM7XG4gIG1haW4/OiBzdHJpbmc7XG4gIGltcG9ydE1hcD86IHN0cmluZztcbiAgYXJncz86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBVcGdyYWRlQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyczogUmVhZG9ubHlBcnJheTxQcm92aWRlcj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgeyBwcm92aWRlciwgbWFpbiwgYXJncywgaW1wb3J0TWFwIH06IFVwZ3JhZGVDb21tYW5kT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnByb3ZpZGVycyA9IEFycmF5LmlzQXJyYXkocHJvdmlkZXIpID8gcHJvdmlkZXIgOiBbcHJvdmlkZXJdO1xuICAgIGlmICghdGhpcy5wcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHVwZ3JhZGUgcHJvdmlkZXIgZGVmaW5lZCFgKTtcbiAgICB9XG4gICAgdGhpc1xuICAgICAgLmRlc2NyaXB0aW9uKCgpID0+XG4gICAgICAgIGBVcGdyYWRlICR7dGhpcy5nZXRNYWluQ29tbWFuZCgpLmdldE5hbWUoKX0gZXhlY3V0YWJsZSB0byBsYXRlc3Qgb3IgZ2l2ZW4gdmVyc2lvbi5gXG4gICAgICApXG4gICAgICAubm9HbG9iYWxzKClcbiAgICAgIC50eXBlKFwicHJvdmlkZXJcIiwgbmV3IEVudW1UeXBlKHRoaXMuZ2V0UHJvdmlkZXJOYW1lcygpKSlcbiAgICAgIC5vcHRpb24oXG4gICAgICAgIFwiLXIsIC0tcmVnaXN0cnkgPG5hbWU6cHJvdmlkZXI+XCIsXG4gICAgICAgIGBUaGUgcmVnaXN0cnkgbmFtZSBmcm9tIHdoaWNoIHRvIHVwZ3JhZGUuYCxcbiAgICAgICAge1xuICAgICAgICAgIGRlZmF1bHQ6IHRoaXMuZ2V0UHJvdmlkZXIoKS5uYW1lLFxuICAgICAgICAgIGhpZGRlbjogdGhpcy5wcm92aWRlcnMubGVuZ3RoIDwgMixcbiAgICAgICAgICB2YWx1ZTogKHJlZ2lzdHJ5KSA9PiB0aGlzLmdldFByb3ZpZGVyKHJlZ2lzdHJ5KSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIC5vcHRpb24oXG4gICAgICAgIFwiLWwsIC0tbGlzdC12ZXJzaW9uc1wiLFxuICAgICAgICBcIlNob3cgYXZhaWxhYmxlIHZlcnNpb25zLlwiLFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiBhc3luYyAoeyByZWdpc3RyeSB9KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZWdpc3RyeS5saXN0VmVyc2lvbnMoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TWFpbkNvbW1hbmQoKS5nZXROYW1lKCksXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmVyc2lvbigpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIERlbm8uZXhpdCgwKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgLm9wdGlvbihcbiAgICAgICAgXCItLXZlcnNpb24gPHZlcnNpb246c3RyaW5nOnZlcnNpb24+XCIsXG4gICAgICAgIFwiVGhlIHZlcnNpb24gdG8gdXBncmFkZSB0by5cIixcbiAgICAgICAgeyBkZWZhdWx0OiBcImxhdGVzdFwiIH0sXG4gICAgICApXG4gICAgICAub3B0aW9uKFxuICAgICAgICBcIi1mLCAtLWZvcmNlXCIsXG4gICAgICAgIFwiUmVwbGFjZSBjdXJyZW50IGluc3RhbGxhdGlvbiBldmVuIGlmIG5vdCBvdXQtb2YtZGF0ZS5cIixcbiAgICAgIClcbiAgICAgIC5jb21wbGV0ZShcInZlcnNpb25cIiwgKCkgPT4gdGhpcy5nZXRBbGxWZXJzaW9ucygpKVxuICAgICAgLmFjdGlvbihhc3luYyAoeyByZWdpc3RyeSwgdmVyc2lvbjogdGFyZ2V0VmVyc2lvbiwgZm9yY2UgfSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSB0aGlzLmdldE1haW5Db21tYW5kKCkuZ2V0TmFtZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5nZXRWZXJzaW9uKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcmNlIHx8ICFjdXJyZW50VmVyc2lvbiB8fFxuICAgICAgICAgIGF3YWl0IHJlZ2lzdHJ5LmlzT3V0ZGF0ZWQobmFtZSwgY3VycmVudFZlcnNpb24sIHRhcmdldFZlcnNpb24pXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IHJlZ2lzdHJ5LnVwZ3JhZGUoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIG1haW4sXG4gICAgICAgICAgICBpbXBvcnRNYXAsXG4gICAgICAgICAgICBmcm9tOiBjdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgIHRvOiB0YXJnZXRWZXJzaW9uLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsVmVyc2lvbnMoKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9ucyB9ID0gYXdhaXQgdGhpcy5nZXRWZXJzaW9ucygpO1xuICAgIHJldHVybiB2ZXJzaW9ucztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMYXRlc3RWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBsYXRlc3QgfSA9IGF3YWl0IHRoaXMuZ2V0VmVyc2lvbnMoKTtcbiAgICByZXR1cm4gbGF0ZXN0O1xuICB9XG5cbiAgcHVibGljIGdldFZlcnNpb25zKCk6IFByb21pc2U8VmVyc2lvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlcigpLmdldFZlcnNpb25zKFxuICAgICAgdGhpcy5nZXRNYWluQ29tbWFuZCgpLmdldE5hbWUoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlcihuYW1lPzogc3RyaW5nKTogUHJvdmlkZXIge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmFtZVxuICAgICAgPyB0aGlzLnByb3ZpZGVycy5maW5kKChwcm92aWRlcikgPT4gcHJvdmlkZXIubmFtZSA9PT0gbmFtZSlcbiAgICAgIDogdGhpcy5wcm92aWRlcnNbMF07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVW5rbm93biBwcm92aWRlciBcIiR7bmFtZX1cImApO1xuICAgIH1cbiAgICByZXR1cm4gcHJvdmlkZXI7XG4gIH1cblxuICBwcml2YXRlIGdldFByb3ZpZGVyTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLm1hcCgocHJvdmlkZXIpID0+IHByb3ZpZGVyLm5hbWUpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJt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
+// denoCacheMetadata=4417398848693435519,14697220363769450959 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/7524db45790c0421867b75620bad578c3cad442c86708f875bb8abe9295a742a.js b/vendor/gen/https/deno.land/7524db45790c0421867b75620bad578c3cad442c86708f875bb8abe9295a742a.js
new file mode 100644
index 0000000..5bff5fc
--- /dev/null
+++ b/vendor/gen/https/deno.land/7524db45790c0421867b75620bad578c3cad442c86708f875bb8abe9295a742a.js
@@ -0,0 +1,83 @@
+import { parseArgs } from "../../deps/cli.ts";
+export function getOptionsFromCli(options) {
+ const cli = parseArgs(Deno.args, {
+ string: [
+ "src",
+ "dest",
+ "location",
+ "port",
+ "hostname"
+ ],
+ boolean: [
+ "serve",
+ "open"
+ ],
+ alias: {
+ serve: "s",
+ port: "p",
+ open: "o"
+ },
+ ["--"]: true
+ });
+ if (cli.src) {
+ options.src = cli.src;
+ }
+ if (cli.dest) {
+ options.dest = cli.dest;
+ }
+ const serveMode = cli.serve || cli._[0] === "cms";
+ // Detect location, hostname and port
+ let port;
+ let hostname;
+ let location;
+ if (serveMode) {
+ location = cli.location ? new URL(cli.location) : new URL("http://localhost");
+ if (cli.port) {
+ port = parseInt(cli.port);
+ location.port = port.toString();
+ } else if (location.port) {
+ port = parseInt(location.port);
+ } else if (options.server?.port) {
+ port = options.server.port;
+ location.port = port.toString();
+ } else {
+ port = location.protocol === "https:" ? 443 : 3000;
+ location.port = port.toString();
+ }
+ if (cli.hostname) {
+ hostname = cli.hostname;
+ location.hostname = hostname;
+ } else if (options.server?.hostname && !cli.location) {
+ hostname = options.server.hostname;
+ location.hostname = hostname;
+ } else {
+ hostname = location.hostname;
+ }
+ } else {
+ location = cli.location ? new URL(cli.location) : options.location || new URL("http://localhost");
+ if (cli.port) {
+ port = parseInt(cli.port);
+ location.port = port.toString();
+ } else if (location.port) {
+ port = parseInt(location.port);
+ } else {
+ port = location.protocol === "https:" ? 443 : 80;
+ }
+ if (cli.hostname) {
+ hostname = cli.hostname;
+ location.hostname = hostname;
+ } else {
+ hostname = location.hostname;
+ }
+ }
+ options.location = location;
+ options.server ||= {};
+ options.server.port = port;
+ options.server.hostname = hostname;
+ if (cli.open) {
+ options.server.open = cli.open;
+ }
+ return options;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9jbGlfb3B0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiLi4vLi4vZGVwcy9jbGkudHNcIjtcbmltcG9ydCB0eXBlIHsgRGVlcFBhcnRpYWwgfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcbmltcG9ydCB0eXBlIHsgU2l0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vc2l0ZS50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21DbGkoXG4gIG9wdGlvbnM6IERlZXBQYXJ0aWFsPFNpdGVPcHRpb25zPixcbik6IERlZXBQYXJ0aWFsPFNpdGVPcHRpb25zPiB7XG4gIGNvbnN0IGNsaSA9IHBhcnNlQXJncyhEZW5vLmFyZ3MsIHtcbiAgICBzdHJpbmc6IFtcInNyY1wiLCBcImRlc3RcIiwgXCJsb2NhdGlvblwiLCBcInBvcnRcIiwgXCJob3N0bmFtZVwiXSxcbiAgICBib29sZWFuOiBbXCJzZXJ2ZVwiLCBcIm9wZW5cIl0sXG4gICAgYWxpYXM6IHsgc2VydmU6IFwic1wiLCBwb3J0OiBcInBcIiwgb3BlbjogXCJvXCIgfSxcbiAgICBbXCItLVwiXTogdHJ1ZSxcbiAgfSk7XG5cbiAgaWYgKGNsaS5zcmMpIHtcbiAgICBvcHRpb25zLnNyYyA9IGNsaS5zcmM7XG4gIH1cblxuICBpZiAoY2xpLmRlc3QpIHtcbiAgICBvcHRpb25zLmRlc3QgPSBjbGkuZGVzdDtcbiAgfVxuXG4gIGNvbnN0IHNlcnZlTW9kZSA9IGNsaS5zZXJ2ZSB8fCBjbGkuX1swXSA9PT0gXCJjbXNcIjtcblxuICAvLyBEZXRlY3QgbG9jYXRpb24sIGhvc3RuYW1lIGFuZCBwb3J0XG4gIGxldCBwb3J0OiBudW1iZXI7XG4gIGxldCBob3N0bmFtZTogc3RyaW5nO1xuICBsZXQgbG9jYXRpb246IFVSTDtcblxuICBpZiAoc2VydmVNb2RlKSB7XG4gICAgbG9jYXRpb24gPSBjbGkubG9jYXRpb25cbiAgICAgID8gbmV3IFVSTChjbGkubG9jYXRpb24pXG4gICAgICA6IG5ldyBVUkwoXCJodHRwOi8vbG9jYWxob3N0XCIpO1xuXG4gICAgaWYgKGNsaS5wb3J0KSB7XG4gICAgICBwb3J0ID0gcGFyc2VJbnQoY2xpLnBvcnQpO1xuICAgICAgbG9jYXRpb24ucG9ydCA9IHBvcnQudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBvcnQpIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChsb2NhdGlvbi5wb3J0KTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc2VydmVyPy5wb3J0KSB7XG4gICAgICBwb3J0ID0gb3B0aW9ucy5zZXJ2ZXIucG9ydDtcbiAgICAgIGxvY2F0aW9uLnBvcnQgPSBwb3J0LnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBsb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IDQ0MyA6IDMwMDA7XG4gICAgICBsb2NhdGlvbi5wb3J0ID0gcG9ydC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChjbGkuaG9zdG5hbWUpIHtcbiAgICAgIGhvc3RuYW1lID0gY2xpLmhvc3RuYW1lO1xuICAgICAgbG9jYXRpb24uaG9zdG5hbWUgPSBob3N0bmFtZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc2VydmVyPy5ob3N0bmFtZSAmJiAhY2xpLmxvY2F0aW9uKSB7XG4gICAgICBob3N0bmFtZSA9IG9wdGlvbnMuc2VydmVyLmhvc3RuYW1lO1xuICAgICAgbG9jYXRpb24uaG9zdG5hbWUgPSBob3N0bmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9zdG5hbWUgPSBsb2NhdGlvbi5ob3N0bmFtZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9jYXRpb24gPSBjbGkubG9jYXRpb25cbiAgICAgID8gbmV3IFVSTChjbGkubG9jYXRpb24pXG4gICAgICA6IChvcHRpb25zLmxvY2F0aW9uIGFzIFVSTCB8IHVuZGVmaW5lZCkgfHwgbmV3IFVSTChcImh0dHA6Ly9sb2NhbGhvc3RcIik7XG5cbiAgICBpZiAoY2xpLnBvcnQpIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChjbGkucG9ydCk7XG4gICAgICBsb2NhdGlvbi5wb3J0ID0gcG9ydC50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAobG9jYXRpb24ucG9ydCkge1xuICAgICAgcG9ydCA9IHBhcnNlSW50KGxvY2F0aW9uLnBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3J0ID0gbG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIgPyA0NDMgOiA4MDtcbiAgICB9XG5cbiAgICBpZiAoY2xpLmhvc3RuYW1lKSB7XG4gICAgICBob3N0bmFtZSA9IGNsaS5ob3N0bmFtZTtcbiAgICAgIGxvY2F0aW9uLmhvc3RuYW1lID0gaG9zdG5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvc3RuYW1lID0gbG9jYXRpb24uaG9zdG5hbWU7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9ucy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICBvcHRpb25zLnNlcnZlciB8fD0ge307XG4gIG9wdGlvbnMuc2VydmVyLnBvcnQgPSBwb3J0O1xuICBvcHRpb25zLnNlcnZlci5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuXG4gIGlmIChjbGkub3Blbikge1xuICAgIG9wdGlvbnMuc2VydmVyLm9wZW4gPSBjbGkub3BlbjtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsU0FBUyxRQUFRLG9CQUFvQjtBQUk5QyxPQUFPLFNBQVMsa0JBQ2QsT0FBaUM7RUFFakMsTUFBTSxNQUFNLFVBQVUsS0FBSyxJQUFJLEVBQUU7SUFDL0IsUUFBUTtNQUFDO01BQU87TUFBUTtNQUFZO01BQVE7S0FBVztJQUN2RCxTQUFTO01BQUM7TUFBUztLQUFPO0lBQzFCLE9BQU87TUFBRSxPQUFPO01BQUssTUFBTTtNQUFLLE1BQU07SUFBSTtJQUMxQyxDQUFDLEtBQUssRUFBRTtFQUNWO0VBRUEsSUFBSSxJQUFJLEdBQUcsRUFBRTtJQUNYLFFBQVEsR0FBRyxHQUFHLElBQUksR0FBRztFQUN2QjtFQUVBLElBQUksSUFBSSxJQUFJLEVBQUU7SUFDWixRQUFRLElBQUksR0FBRyxJQUFJLElBQUk7RUFDekI7RUFFQSxNQUFNLFlBQVksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLO0VBRTVDLHFDQUFxQztFQUNyQyxJQUFJO0VBQ0osSUFBSTtFQUNKLElBQUk7RUFFSixJQUFJLFdBQVc7SUFDYixXQUFXLElBQUksUUFBUSxHQUNuQixJQUFJLElBQUksSUFBSSxRQUFRLElBQ3BCLElBQUksSUFBSTtJQUVaLElBQUksSUFBSSxJQUFJLEVBQUU7TUFDWixPQUFPLFNBQVMsSUFBSSxJQUFJO01BQ3hCLFNBQVMsSUFBSSxHQUFHLEtBQUssUUFBUTtJQUMvQixPQUFPLElBQUksU0FBUyxJQUFJLEVBQUU7TUFDeEIsT0FBTyxTQUFTLFNBQVMsSUFBSTtJQUMvQixPQUFPLElBQUksUUFBUSxNQUFNLEVBQUUsTUFBTTtNQUMvQixPQUFPLFFBQVEsTUFBTSxDQUFDLElBQUk7TUFDMUIsU0FBUyxJQUFJLEdBQUcsS0FBSyxRQUFRO0lBQy9CLE9BQU87TUFDTCxPQUFPLFNBQVMsUUFBUSxLQUFLLFdBQVcsTUFBTTtNQUM5QyxTQUFTLElBQUksR0FBRyxLQUFLLFFBQVE7SUFDL0I7SUFFQSxJQUFJLElBQUksUUFBUSxFQUFFO01BQ2hCLFdBQVcsSUFBSSxRQUFRO01BQ3ZCLFNBQVMsUUFBUSxHQUFHO0lBQ3RCLE9BQU8sSUFBSSxRQUFRLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxRQUFRLEVBQUU7TUFDcEQsV0FBVyxRQUFRLE1BQU0sQ0FBQyxRQUFRO01BQ2xDLFNBQVMsUUFBUSxHQUFHO0lBQ3RCLE9BQU87TUFDTCxXQUFXLFNBQVMsUUFBUTtJQUM5QjtFQUNGLE9BQU87SUFDTCxXQUFXLElBQUksUUFBUSxHQUNuQixJQUFJLElBQUksSUFBSSxRQUFRLElBQ3BCLEFBQUMsUUFBUSxRQUFRLElBQXdCLElBQUksSUFBSTtJQUVyRCxJQUFJLElBQUksSUFBSSxFQUFFO01BQ1osT0FBTyxTQUFTLElBQUksSUFBSTtNQUN4QixTQUFTLElBQUksR0FBRyxLQUFLLFFBQVE7SUFDL0IsT0FBTyxJQUFJLFNBQVMsSUFBSSxFQUFFO01BQ3hCLE9BQU8sU0FBUyxTQUFTLElBQUk7SUFDL0IsT0FBTztNQUNMLE9BQU8sU0FBUyxRQUFRLEtBQUssV0FBVyxNQUFNO0lBQ2hEO0lBRUEsSUFBSSxJQUFJLFFBQVEsRUFBRTtNQUNoQixXQUFXLElBQUksUUFBUTtNQUN2QixTQUFTLFFBQVEsR0FBRztJQUN0QixPQUFPO01BQ0wsV0FBVyxTQUFTLFFBQVE7SUFDOUI7RUFDRjtFQUVBLFFBQVEsUUFBUSxHQUFHO0VBQ25CLFFBQVEsTUFBTSxLQUFLLENBQUM7RUFDcEIsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHO0VBQ3RCLFFBQVEsTUFBTSxDQUFDLFFBQVEsR0FBRztFQUUxQixJQUFJLElBQUksSUFBSSxFQUFFO0lBQ1osUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSTtFQUNoQztFQUVBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=15327241141236472936,12591596969686544022 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/75258a5685194b619b66f09dfe484bdffafe772adff2680dac5f664130deb066.js b/vendor/gen/https/deno.land/75258a5685194b619b66f09dfe484bdffafe772adff2680dac5f664130deb066.js
new file mode 100644
index 0000000..3117d24
--- /dev/null
+++ b/vendor/gen/https/deno.land/75258a5685194b619b66f09dfe484bdffafe772adff2680dac5f664130deb066.js
@@ -0,0 +1,141 @@
+import { join, posix } from "../deps/path.ts";
+import { merge } from "../core/utils/object.ts";
+export const defaults = {
+ root: `${Deno.cwd()}/_site`,
+ page404: "/404.html",
+ directoryIndex: false
+};
+/** Show a 404 page */ export function notFound(userOptions) {
+ const options = merge(defaults, userOptions);
+ let { root, page404, directoryIndex } = options;
+ if (page404.endsWith("/")) {
+ page404 += "index.html";
+ }
+ return async (request, next)=>{
+ const response = await next(request);
+ if (response.status === 404) {
+ const { headers, status } = response;
+ headers.set("content-type", "text/html; charset=utf-8");
+ try {
+ const body = await Deno.readFile(join(root, page404));
+ return new Response(body, {
+ status,
+ headers
+ });
+ } catch {
+ if (directoryIndex) {
+ const { pathname } = new URL(request.url);
+ const body = await getDirectoryIndex(root, pathname);
+ return new Response(body, {
+ status,
+ headers
+ });
+ }
+ }
+ }
+ return response;
+ };
+}
+/** Generate the default body for a 404 response */ async function getDirectoryIndex(root, file) {
+ const folders = [];
+ const files = [];
+ const folderIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256"><use xlink:href="#icon-folder"></use></svg>`;
+ const fileIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256"><use xlink:href="#icon-file"></use></svg>`;
+ try {
+ for await (const info of Deno.readDir(join(root, file))){
+ info.isDirectory ? folders.push([
+ `${info.name}/`,
+ `${folderIcon} ${info.name}/`
+ ]) : files.push([
+ info.name === "index.html" ? "./" : info.name,
+ `${fileIcon} ${info.name}`
+ ]);
+ }
+ } catch {
+ // It's not a directory, so scan the parent directory
+ try {
+ const base = posix.dirname(file);
+ for await (const info of Deno.readDir(join(root, base))){
+ info.isDirectory ? folders.push([
+ posix.join(base, `${info.name}/`),
+ `${folderIcon} ${info.name}/`
+ ]) : files.push([
+ posix.join(base, info.name === "index.html" ? "./" : info.name),
+ `${fileIcon} ${info.name}`
+ ]);
+ }
+ } catch {
+ // Ignore
+ }
+ }
+ const content = folders.concat(files);
+ if (file.match(/.+\/.+/)) {
+ content.unshift([
+ "../",
+ ".."
+ ]);
+ }
+ return `
+ <!DOCTYPE html>
+ <html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>404 - Not found</title>
+ <style>
+ html {
+ color-scheme: light dark;
+ }
+ body {
+ font-family: sans-serif;
+ max-width: 40em;
+ margin: auto;
+ padding: 2em;
+ line-height: 1.5;
+ }
+ h1 {
+ margin-bottom: 0;
+ }
+ ul {
+ margin: 2em 0;
+ padding: 0;
+ list-style-type: "";
+ }
+ li a {
+ display: flex;
+ align-items: center;
+ column-gap: 0.5em;
+ text-decoration: none;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ </style>
+ </head>
+ <body>
+ <svg display="none">
+ <defs>
+ <g id="icon-file">
+ <path d="M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Z"/>
+ </g>
+ <g id="icon-folder">
+ <path d="M232,88V200.89A15.13,15.13,0,0,1,216.89,216H40a16,16,0,0,1-16-16V64A16,16,0,0,1,40,48H93.33a16.12,16.12,0,0,1,9.6,3.2L130.67,72H216A16,16,0,0,1,232,88Z"></path>
+ </g>
+ </defs>
+ </svg>
+ <h1>404 - Not found</h1>
+ <p>The URL <code>${file}</code> does not exist</p>
+ <ul>
+ ${content.map(([url, name])=>`
+ <li>
+ <a href="${url}">
+ ${name}
+ </a>
+ </li>`).join("\n")}
+ </ul>
+ </body>
+ </html>`;
+}
+export default notFound;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvbWlkZGxld2FyZXMvbm90X2ZvdW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHBvc2l4IH0gZnJvbSBcIi4uL2RlcHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi4vY29yZS91dGlscy9vYmplY3QudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL2NvcmUvc2VydmVyLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBUaGUgcm9vdCBmb2xkZXIgdG8gbG9vayBmb3IgdGhlIDQwNCBwYWdlICovXG4gIHJvb3Q6IHN0cmluZztcbiAgLyoqIFRoZSBwYXRoIHRvIHRoZSA0MDQgcGFnZSAqL1xuICBwYWdlNDA0OiBzdHJpbmc7XG4gIC8qKiBTaG93IHRoZSBkaXJlY3RvcnkgaW5kZXggaWYgdGhlIHBhZ2U0MDQgaXMgbm90IGZvdW5kICovXG4gIGRpcmVjdG9yeUluZGV4PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzOiBPcHRpb25zID0ge1xuICByb290OiBgJHtEZW5vLmN3ZCgpfS9fc2l0ZWAsXG4gIHBhZ2U0MDQ6IFwiLzQwNC5odG1sXCIsXG4gIGRpcmVjdG9yeUluZGV4OiBmYWxzZSxcbn07XG5cbi8qKiBTaG93IGEgNDA0IHBhZ2UgKi9cbmV4cG9ydCBmdW5jdGlvbiBub3RGb3VuZCh1c2VyT3B0aW9ucz86IFBhcnRpYWw8T3B0aW9ucz4pOiBNaWRkbGV3YXJlIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlKGRlZmF1bHRzLCB1c2VyT3B0aW9ucyk7XG4gIGxldCB7IHJvb3QsIHBhZ2U0MDQsIGRpcmVjdG9yeUluZGV4IH0gPSBvcHRpb25zO1xuXG4gIGlmIChwYWdlNDA0LmVuZHNXaXRoKFwiL1wiKSkge1xuICAgIHBhZ2U0MDQgKz0gXCJpbmRleC5odG1sXCI7XG4gIH1cblxuICByZXR1cm4gYXN5bmMgKHJlcXVlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIGNvbnN0IHsgaGVhZGVycywgc3RhdHVzIH0gPSByZXNwb25zZTtcbiAgICAgIGhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsIFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgRGVuby5yZWFkRmlsZShqb2luKHJvb3QsIHBhZ2U0MDQpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShib2R5LCB7IHN0YXR1cywgaGVhZGVycyB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBpZiAoZGlyZWN0b3J5SW5kZXgpIHtcbiAgICAgICAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgZ2V0RGlyZWN0b3J5SW5kZXgocm9vdCwgcGF0aG5hbWUpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSwgeyBzdGF0dXMsIGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH07XG59XG5cbi8qKiBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBib2R5IGZvciBhIDQwNCByZXNwb25zZSAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RGlyZWN0b3J5SW5kZXgocm9vdDogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmb2xkZXJzOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXTtcbiAgY29uc3QgZmlsZXM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICBjb25zdCBmb2xkZXJJY29uID1cbiAgICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjU2IDI1NlwiPjx1c2UgeGxpbms6aHJlZj1cIiNpY29uLWZvbGRlclwiPjwvdXNlPjwvc3ZnPmA7XG4gIGNvbnN0IGZpbGVJY29uID1cbiAgICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjU2IDI1NlwiPjx1c2UgeGxpbms6aHJlZj1cIiNpY29uLWZpbGVcIj48L3VzZT48L3N2Zz5gO1xuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBpbmZvIG9mIERlbm8ucmVhZERpcihqb2luKHJvb3QsIGZpbGUpKSkge1xuICAgICAgaW5mby5pc0RpcmVjdG9yeVxuICAgICAgICA/IGZvbGRlcnMucHVzaChbYCR7aW5mby5uYW1lfS9gLCBgJHtmb2xkZXJJY29ufSAke2luZm8ubmFtZX0vYF0pXG4gICAgICAgIDogZmlsZXMucHVzaChbXG4gICAgICAgICAgaW5mby5uYW1lID09PSBcImluZGV4Lmh0bWxcIiA/IFwiLi9cIiA6IGluZm8ubmFtZSxcbiAgICAgICAgICBgJHtmaWxlSWNvbn0gJHtpbmZvLm5hbWV9YCxcbiAgICAgICAgXSk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJdCdzIG5vdCBhIGRpcmVjdG9yeSwgc28gc2NhbiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlID0gcG9zaXguZGlybmFtZShmaWxlKTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgaW5mbyBvZiBEZW5vLnJlYWREaXIoam9pbihyb290LCBiYXNlKSkpIHtcbiAgICAgICAgaW5mby5pc0RpcmVjdG9yeVxuICAgICAgICAgID8gZm9sZGVycy5wdXNoKFtcbiAgICAgICAgICAgIHBvc2l4LmpvaW4oYmFzZSwgYCR7aW5mby5uYW1lfS9gKSxcbiAgICAgICAgICAgIGAke2ZvbGRlckljb259ICR7aW5mby5uYW1lfS9gLFxuICAgICAgICAgIF0pXG4gICAgICAgICAgOiBmaWxlcy5wdXNoKFtcbiAgICAgICAgICAgIHBvc2l4LmpvaW4oYmFzZSwgaW5mby5uYW1lID09PSBcImluZGV4Lmh0bWxcIiA/IFwiLi9cIiA6IGluZm8ubmFtZSksXG4gICAgICAgICAgICBgJHtmaWxlSWNvbn0gJHtpbmZvLm5hbWV9YCxcbiAgICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBmb2xkZXJzLmNvbmNhdChmaWxlcyk7XG5cbiAgaWYgKGZpbGUubWF0Y2goLy4rXFwvLisvKSkge1xuICAgIGNvbnRlbnQudW5zaGlmdChbXCIuLi9cIiwgXCIuLlwiXSk7XG4gIH1cblxuICByZXR1cm4gYFxuICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIj5cbiAgICA8aGVhZD5cbiAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIj5cbiAgICAgIDx0aXRsZT40MDQgLSBOb3QgZm91bmQ8L3RpdGxlPlxuICAgICAgPHN0eWxlPlxuICAgICAgICBodG1sIHtcbiAgICAgICAgICBjb2xvci1zY2hlbWU6IGxpZ2h0IGRhcms7XG4gICAgICAgIH1cbiAgICAgICAgYm9keSB7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XG4gICAgICAgICAgbWF4LXdpZHRoOiA0MGVtO1xuICAgICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgICBwYWRkaW5nOiAyZW07XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgfVxuICAgICAgICBoMSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgICB1bCB7XG4gICAgICAgICAgbWFyZ2luOiAyZW0gMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBsaSBhIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgY29sdW1uLWdhcDogMC41ZW07XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L3N0eWxlPlxuICAgIDwvaGVhZD5cbiAgICA8Ym9keT5cbiAgICAgIDxzdmcgZGlzcGxheT1cIm5vbmVcIj5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgPGcgaWQ9XCJpY29uLWZpbGVcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEzLjY2LDgyLjM0bC01Ni01NkE4LDgsMCwwLDAsMTUyLDI0SDU2QTE2LDE2LDAsMCwwLDQwLDQwVjIxNmExNiwxNiwwLDAsMCwxNiwxNkgyMDBhMTYsMTYsMCwwLDAsMTYtMTZWODhBOCw4LDAsMCwwLDIxMy42Niw4Mi4zNFpNMTYwLDUxLjMxLDE4OC42OSw4MEgxNjBaTTIwMCwyMTZINTZWNDBoODhWODhhOCw4LDAsMCwwLDgsOGg0OFYyMTZaXCIvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8ZyBpZD1cImljb24tZm9sZGVyXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTIzMiw4OFYyMDAuODlBMTUuMTMsMTUuMTMsMCwwLDEsMjE2Ljg5LDIxNkg0MGExNiwxNiwwLDAsMS0xNi0xNlY2NEExNiwxNiwwLDAsMSw0MCw0OEg5My4zM2ExNi4xMiwxNi4xMiwwLDAsMSw5LjYsMy4yTDEzMC42Nyw3MkgyMTZBMTYsMTYsMCwwLDEsMjMyLDg4WlwiPjwvcGF0aD5cbiAgICAgICAgICA8L2c+XG4gICAgICAgIDwvZGVmcz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPGgxPjQwNCAtIE5vdCBmb3VuZDwvaDE+XG4gICAgICA8cD5UaGUgVVJMIDxjb2RlPiR7ZmlsZX08L2NvZGU+IGRvZXMgbm90IGV4aXN0PC9wPlxuICAgICAgPHVsPlxuICAgICR7XG4gICAgY29udGVudC5tYXAoKFt1cmwsIG5hbWVdKSA9PiBgXG4gICAgICA8bGk+XG4gICAgICAgIDxhIGhyZWY9XCIke3VybH1cIj5cbiAgICAgICAgICAke25hbWV9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+YCkuam9pbihcIlxcblwiKVxuICB9XG4gICAgICA8L3VsPlxuICAgIDwvYm9keT5cbiAgPC9odG1sPmA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5vdEZvdW5kO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxFQUFFLEtBQUssUUFBUSxrQkFBa0I7QUFDOUMsU0FBUyxLQUFLLFFBQVEsMEJBQTBCO0FBYWhELE9BQU8sTUFBTSxXQUFvQjtFQUMvQixNQUFNLEdBQUcsS0FBSyxHQUFHLEdBQUcsTUFBTSxDQUFDO0VBQzNCLFNBQVM7RUFDVCxnQkFBZ0I7QUFDbEIsRUFBRTtBQUVGLG9CQUFvQixHQUNwQixPQUFPLFNBQVMsU0FBUyxXQUE4QjtFQUNyRCxNQUFNLFVBQVUsTUFBTSxVQUFVO0VBQ2hDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHO0VBRXhDLElBQUksUUFBUSxRQUFRLENBQUMsTUFBTTtJQUN6QixXQUFXO0VBQ2I7RUFFQSxPQUFPLE9BQU8sU0FBUztJQUNyQixNQUFNLFdBQVcsTUFBTSxLQUFLO0lBRTVCLElBQUksU0FBUyxNQUFNLEtBQUss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
+// denoCacheMetadata=14186788085705756082,16761110511965394174 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/75298f0eb6c3938cc21df5890715ade25acf246723868d17d393552917f2471d.js b/vendor/gen/https/deno.land/75298f0eb6c3938cc21df5890715ade25acf246723868d17d393552917f2471d.js
new file mode 100644
index 0000000..0c9dc6e
--- /dev/null
+++ b/vendor/gen/https/deno.land/75298f0eb6c3938cc21df5890715ade25acf246723868d17d393552917f2471d.js
@@ -0,0 +1,134 @@
+import { posix } from "../deps/path.ts";
+import { emptyDir, ensureDir } from "../deps/fs.ts";
+import { concurrent } from "./utils/concurrent.ts";
+import { sha1 } from "./utils/digest.ts";
+import { log } from "./utils/log.ts";
+import binaryLoader from "./loaders/binary.ts";
+/**
+ * Class to write the generated pages and static files
+ * in the dest folder.
+ */ export class FSWriter {
+ dest;
+ caseSensitiveUrls;
+ #outputs = new Map();
+ #saveCount = 0;
+ constructor(options){
+ this.dest = options.dest;
+ this.caseSensitiveUrls = options.caseSensitiveUrls;
+ }
+ /**
+ * Save the pages in the dest folder
+ * Returns an array of pages that have been saved
+ */ async savePages(pages) {
+ const savedPages = [];
+ ++this.#saveCount;
+ await concurrent(pages, async (page)=>{
+ if (await this.savePage(page)) {
+ savedPages.push(page);
+ }
+ });
+ return savedPages;
+ }
+ /**
+ * Save a page in the dest folder
+ * Returns a boolean indicating if the page has saved
+ */ async savePage(page) {
+ const { sourcePath, outputPath, content } = page;
+ // Ignore empty pages
+ if (!content) {
+ log.warn(`[Lume] <cyan>Skipped page</cyan> ${page.data.url} (file content is empty)`);
+ return false;
+ }
+ const filename = posix.join(this.dest, outputPath);
+ const id = this.caseSensitiveUrls ? filename : filename.toLowerCase();
+ const hash = await sha1(content);
+ const previous = this.#outputs.get(id);
+ this.#outputs.set(id, [
+ this.#saveCount,
+ sourcePath,
+ hash
+ ]);
+ if (previous) {
+ const [previousCount, previousSourcePath, previousHash] = previous;
+ if (previousCount === this.#saveCount) {
+ throw new Error(`The pages ${sourcePath} and ${previousSourcePath} have the same output path "${outputPath}". Use distinct 'url' values to resolve the conflict.`);
+ }
+ // The page content didn't change
+ if (previousHash === hash) {
+ return false;
+ }
+ }
+ log.info(`🔥 ${page.data.url} <- <gray>${sourcePath}</gray>`);
+ await ensureDir(posix.dirname(filename));
+ content instanceof Uint8Array ? await Deno.writeFile(filename, content) : await Deno.writeTextFile(filename, content);
+ return true;
+ }
+ /**
+ * Copy the static files in the dest folder
+ */ async copyFiles(files) {
+ const copyFiles = [];
+ await concurrent(files, async (file)=>{
+ if (await this.copyFile(file)) {
+ copyFiles.push(file);
+ }
+ });
+ return copyFiles;
+ }
+ /**
+ * Copy a static file in the dest folder
+ * Returns a boolean indicating if the file has saved
+ */ async copyFile(file) {
+ const { entry } = file.src;
+ if (entry.flags.has("saved")) {
+ return false;
+ }
+ entry.flags.add("saved");
+ const pathTo = posix.join(this.dest, file.outputPath);
+ try {
+ await ensureDir(posix.dirname(pathTo));
+ if (entry.flags.has("remote")) {
+ await Deno.writeFile(pathTo, (await entry.getContent(binaryLoader)).content);
+ } else {
+ // Copy file https://github.com/denoland/deno/issues/19425
+ Deno.writeFileSync(pathTo, Deno.readFileSync(entry.src));
+ }
+ log.info(`🔥 ${file.outputPath} <- <gray>${entry.flags.has("remote") ? entry.src : entry.path}</gray>`);
+ return true;
+ } catch (error) {
+ log.error(// deno-lint-ignore no-explicit-any
+ `Failed to copy file: ${file.outputPath}: ${error.message}`);
+ }
+ return false;
+ }
+ /** Empty the dest folder */ async clear() {
+ await emptyDir(this.dest);
+ this.#outputs.clear();
+ }
+ async removeFiles(files) {
+ await concurrent(files, async (file)=>{
+ try {
+ const outputPath = posix.join(this.dest, file);
+ this.#outputs.delete(outputPath.toLowerCase());
+ await Deno.remove(outputPath);
+ // Remove empty directories
+ removeEmptyDirectory(outputPath, this.dest);
+ } catch {
+ // Ignored
+ }
+ });
+ }
+}
+function removeEmptyDirectory(path, base) {
+ const dir = posix.dirname(path);
+ try {
+ if (dir !== base) {
+ Deno.removeSync(dir);
+ // Check if the parent directory is also empty
+ removeEmptyDirectory(dir, base);
+ }
+ } catch {
+ // Ignored
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS93cml0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcG9zaXggfSBmcm9tIFwiLi4vZGVwcy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBlbXB0eURpciwgZW5zdXJlRGlyIH0gZnJvbSBcIi4uL2RlcHMvZnMudHNcIjtcbmltcG9ydCB7IGNvbmN1cnJlbnQgfSBmcm9tIFwiLi91dGlscy9jb25jdXJyZW50LnRzXCI7XG5pbXBvcnQgeyBzaGExIH0gZnJvbSBcIi4vdXRpbHMvZGlnZXN0LnRzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi91dGlscy9sb2cudHNcIjtcbmltcG9ydCBiaW5hcnlMb2FkZXIgZnJvbSBcIi4vbG9hZGVycy9iaW5hcnkudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBQYWdlLCBTdGF0aWNGaWxlIH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBkZXN0OiBzdHJpbmc7XG4gIGNhc2VTZW5zaXRpdmVVcmxzOiBib29sZWFuO1xufVxuXG4vKiogR2VuZXJpYyBpbnRlcmZhY2UgZm9yIFdyaXRlciAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZXIge1xuICBzYXZlUGFnZXMocGFnZXM6IFBhZ2VbXSk6IFByb21pc2U8UGFnZVtdPjtcbiAgY29weUZpbGVzKGZpbGVzOiBTdGF0aWNGaWxlW10pOiBQcm9taXNlPFN0YXRpY0ZpbGVbXT47XG4gIGNsZWFyKCk6IFByb21pc2U8dm9pZD47XG4gIHJlbW92ZUZpbGVzKGZpbGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2xhc3MgdG8gd3JpdGUgdGhlIGdlbmVyYXRlZCBwYWdlcyBhbmQgc3RhdGljIGZpbGVzXG4gKiBpbiB0aGUgZGVzdCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBGU1dyaXRlciBpbXBsZW1lbnRzIFdyaXRlciB7XG4gIGRlc3Q6IHN0cmluZztcbiAgY2FzZVNlbnNpdGl2ZVVybHM6IGJvb2xlYW47XG5cbiAgI291dHB1dHMgPSBuZXcgTWFwPHN0cmluZywgW251bWJlciwgc3RyaW5nLCBzdHJpbmddPigpO1xuICAjc2F2ZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5kZXN0ID0gb3B0aW9ucy5kZXN0O1xuICAgIHRoaXMuY2FzZVNlbnNpdGl2ZVVybHMgPSBvcHRpb25zLmNhc2VTZW5zaXRpdmVVcmxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHBhZ2VzIGluIHRoZSBkZXN0IGZvbGRlclxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkXG4gICAqL1xuICBhc3luYyBzYXZlUGFnZXMocGFnZXM6IFBhZ2VbXSk6IFByb21pc2U8UGFnZVtdPiB7XG4gICAgY29uc3Qgc2F2ZWRQYWdlczogUGFnZVtdID0gW107XG4gICAgKyt0aGlzLiNzYXZlQ291bnQ7XG5cbiAgICBhd2FpdCBjb25jdXJyZW50KFxuICAgICAgcGFnZXMsXG4gICAgICBhc3luYyAocGFnZSkgPT4ge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5zYXZlUGFnZShwYWdlKSkge1xuICAgICAgICAgIHNhdmVkUGFnZXMucHVzaChwYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNhdmVkUGFnZXM7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIHBhZ2UgaW4gdGhlIGRlc3QgZm9sZGVyXG4gICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHBhZ2UgaGFzIHNhdmVkXG4gICAqL1xuICBhc3luYyBzYXZlUGFnZShwYWdlOiBQYWdlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBzb3VyY2VQYXRoLCBvdXRwdXRQYXRoLCBjb250ZW50IH0gPSBwYWdlO1xuICAgIC8vIElnbm9yZSBlbXB0eSBwYWdlc1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBbTHVtZV0gPGN5YW4+U2tpcHBlZCBwYWdlPC9jeWFuPiAke3BhZ2UuZGF0YS51cmx9IChmaWxlIGNvbnRlbnQgaXMgZW1wdHkpYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZW5hbWUgPSBwb3NpeC5qb2luKHRoaXMuZGVzdCwgb3V0cHV0UGF0aCk7XG4gICAgY29uc3QgaWQgPSB0aGlzLmNhc2VTZW5zaXRpdmVVcmxzID8gZmlsZW5hbWUgOiBmaWxlbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBzaGExKGNvbnRlbnQpO1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy4jb3V0cHV0cy5nZXQoaWQpO1xuICAgIHRoaXMuI291dHB1dHMuc2V0KGlkLCBbdGhpcy4jc2F2ZUNvdW50LCBzb3VyY2VQYXRoLCBoYXNoXSk7XG5cbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIGNvbnN0IFtwcmV2aW91c0NvdW50LCBwcmV2aW91c1NvdXJjZVBhdGgsIHByZXZpb3VzSGFzaF0gPSBwcmV2aW91cztcblxuICAgICAgaWYgKHByZXZpb3VzQ291bnQgPT09IHRoaXMuI3NhdmVDb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZSBwYWdlcyAke3NvdXJjZVBhdGh9IGFuZCAke3ByZXZpb3VzU291cmNlUGF0aH0gaGF2ZSB0aGUgc2FtZSBvdXRwdXQgcGF0aCBcIiR7b3V0cHV0UGF0aH1cIi4gVXNlIGRpc3RpbmN0ICd1cmwnIHZhbHVlcyB0byByZXNvbHZlIHRoZSBjb25mbGljdC5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcGFnZSBjb250ZW50IGRpZG4ndCBjaGFuZ2VcbiAgICAgIGlmIChwcmV2aW91c0hhc2ggPT09IGhhc2gpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZy5pbmZvKGDwn5SlICR7cGFnZS5kYXRhLnVybH0gPC0gPGdyYXk+JHtzb3VyY2VQYXRofTwvZ3JheT5gKTtcblxuICAgIGF3YWl0IGVuc3VyZURpcihwb3NpeC5kaXJuYW1lKGZpbGVuYW1lKSk7XG5cbiAgICBjb250ZW50IGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBhd2FpdCBEZW5vLndyaXRlRmlsZShmaWxlbmFtZSwgY29udGVudClcbiAgICAgIDogYXdhaXQgRGVuby53cml0ZVRleHRGaWxlKGZpbGVuYW1lLCBjb250ZW50KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgdGhlIHN0YXRpYyBmaWxlcyBpbiB0aGUgZGVzdCBmb2xkZXJcbiAgICovXG4gIGFzeW5jIGNvcHlGaWxlcyhmaWxlczogU3RhdGljRmlsZVtdKTogUHJvbWlzZTxTdGF0aWNGaWxlW10+IHtcbiAgICBjb25zdCBjb3B5RmlsZXM6IFN0YXRpY0ZpbGVbXSA9IFtdO1xuXG4gICAgYXdhaXQgY29uY3VycmVudChcbiAgICAgIGZpbGVzLFxuICAgICAgYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuY29weUZpbGUoZmlsZSkpIHtcbiAgICAgICAgICBjb3B5RmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvcHlGaWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGEgc3RhdGljIGZpbGUgaW4gdGhlIGRlc3QgZm9sZGVyXG4gICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGZpbGUgaGFzIHNhdmVkXG4gICAqL1xuICBhc3luYyBjb3B5RmlsZShmaWxlOiBTdGF0aWNGaWxlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbnRyeSB9ID0gZmlsZS5zcmM7XG5cbiAgICBpZiAoZW50cnkuZmxhZ3MuaGFzKFwic2F2ZWRcIikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBlbnRyeS5mbGFncy5hZGQoXCJzYXZlZFwiKTtcbiAgICBjb25zdCBwYXRoVG8gPSBwb3NpeC5qb2luKHRoaXMuZGVzdCwgZmlsZS5vdXRwdXRQYXRoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnN1cmVEaXIocG9zaXguZGlybmFtZShwYXRoVG8pKTtcblxuICAgICAgaWYgKGVudHJ5LmZsYWdzLmhhcyhcInJlbW90ZVwiKSkge1xuICAgICAgICBhd2FpdCBEZW5vLndyaXRlRmlsZShcbiAgICAgICAgICBwYXRoVG8sXG4gICAgICAgICAgKGF3YWl0IGVudHJ5LmdldENvbnRlbnQoYmluYXJ5TG9hZGVyKSkuY29udGVudCBhcyBVaW50OEFycmF5LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29weSBmaWxlIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2lzc3Vlcy8xOTQyNVxuICAgICAgICBEZW5vLndyaXRlRmlsZVN5bmMocGF0aFRvLCBEZW5vLnJlYWRGaWxlU3luYyhlbnRyeS5zcmMpKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBg8J+UpSAke2ZpbGUub3V0cHV0UGF0aH0gPC0gPGdyYXk+JHtcbiAgICAgICAgICBlbnRyeS5mbGFncy5oYXMoXCJyZW1vdGVcIikgPyBlbnRyeS5zcmMgOiBlbnRyeS5wYXRoXG4gICAgICAgIH08L2dyYXk+YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nLmVycm9yKFxuICAgICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgICAgICBgRmFpbGVkIHRvIGNvcHkgZmlsZTogJHtmaWxlLm91dHB1dFBhdGh9OiAkeyhlcnJvciBhcyBhbnkpLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEVtcHR5IHRoZSBkZXN0IGZvbGRlciAqL1xuICBhc3luYyBjbGVhcigpIHtcbiAgICBhd2FpdCBlbXB0eURpcih0aGlzLmRlc3QpO1xuICAgIHRoaXMuI291dHB1dHMuY2xlYXIoKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZUZpbGVzKGZpbGVzOiBzdHJpbmdbXSkge1xuICAgIGF3YWl0IGNvbmN1cnJlbnQoXG4gICAgICBmaWxlcyxcbiAgICAgIGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBvc2l4LmpvaW4odGhpcy5kZXN0LCBmaWxlKTtcbiAgICAgICAgICB0aGlzLiNvdXRwdXRzLmRlbGV0ZShvdXRwdXRQYXRoLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGF3YWl0IERlbm8ucmVtb3ZlKG91dHB1dFBhdGgpO1xuXG4gICAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzXG4gICAgICAgICAgcmVtb3ZlRW1wdHlEaXJlY3Rvcnkob3V0cHV0UGF0aCwgdGhpcy5kZXN0KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlZFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRW1wdHlEaXJlY3RvcnkocGF0aDogc3RyaW5nLCBiYXNlOiBzdHJpbmcpIHtcbiAgY29uc3QgZGlyID0gcG9zaXguZGlybmFtZShwYXRoKTtcblxuICB0cnkge1xuICAgIGlmIChkaXIgIT09IGJhc2UpIHtcbiAgICAgIERlbm8ucmVtb3ZlU3luYyhkaXIpO1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgYWxzbyBlbXB0eVxuICAgICAgcmVtb3ZlRW1wdHlEaXJlY3RvcnkoZGlyLCBiYXNlKTtcbiAgICB9XG4g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
+// denoCacheMetadata=7223173372891883969,4489208043429476027 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/757dde3b17685721d57978fb10850726d14635e5c21bf97348221d6fabb62d75.js b/vendor/gen/https/deno.land/757dde3b17685721d57978fb10850726d14635e5c21bf97348221d6fabb62d75.js
new file mode 100644
index 0000000..3d0b5c1
--- /dev/null
+++ b/vendor/gen/https/deno.land/757dde3b17685721d57978fb10850726d14635e5c21bf97348221d6fabb62d75.js
@@ -0,0 +1,7 @@
+export * from "./provider/deno_land.ts";
+export * from "./provider/github.ts";
+export * from "./provider/nest_land.ts";
+export * from "./provider.ts";
+export * from "./upgrade_command.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC91cGdyYWRlL21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlci9kZW5vX2xhbmQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyL2dpdGh1Yi50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXIvbmVzdF9sYW5kLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlci50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXBncmFkZV9jb21tYW5kLnRzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyx1QkFBdUI7QUFDckMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyx1QkFBdUIifQ==
+// denoCacheMetadata=9509665385609094328,17491684540228973707 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/76f33d277005d03aa28ed94886ccb3f481034101758f3169e677969b99b95b2f.js b/vendor/gen/https/deno.land/76f33d277005d03aa28ed94886ccb3f481034101758f3169e677969b99b95b2f.js
new file mode 100644
index 0000000..86b3d8a
--- /dev/null
+++ b/vendor/gen/https/deno.land/76f33d277005d03aa28ed94886ccb3f481034101758f3169e677969b99b95b2f.js
@@ -0,0 +1,18 @@
+import { DOMParser } from "../../deps/dom.ts";
+const parser = new DOMParser();
+/** Convert an Document instance to a string */ export function documentToString(document) {
+ const { doctype, documentElement } = document;
+ if (!doctype) {
+ return documentElement?.outerHTML || "";
+ }
+ return `<!DOCTYPE ${doctype.name}` + (doctype.publicId ? ` PUBLIC "${doctype.publicId}"` : "") + (!doctype.publicId && doctype.systemId ? " SYSTEM" : "") + (doctype.systemId ? ` "${doctype.systemId}"` : "") + `>\n${documentElement?.outerHTML}`;
+}
+/** Parse a string with HTML code and return a Document */ export function stringToDocument(string) {
+ const document = parser.parseFromString(string, "text/html");
+ if (!document) {
+ throw new Error("Unable to parse the HTML code");
+ }
+ return document;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9kb20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2RlcHMvZG9tLnRzXCI7XG5cbmNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcblxuLyoqIENvbnZlcnQgYW4gRG9jdW1lbnQgaW5zdGFuY2UgdG8gYSBzdHJpbmcgKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2N1bWVudFRvU3RyaW5nKGRvY3VtZW50OiBEb2N1bWVudCkge1xuICBjb25zdCB7IGRvY3R5cGUsIGRvY3VtZW50RWxlbWVudCB9ID0gZG9jdW1lbnQ7XG5cbiAgaWYgKCFkb2N0eXBlKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudD8ub3V0ZXJIVE1MIHx8IFwiXCI7XG4gIH1cblxuICByZXR1cm4gYDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX1gICtcbiAgICAoZG9jdHlwZS5wdWJsaWNJZCA/IGAgUFVCTElDIFwiJHtkb2N0eXBlLnB1YmxpY0lkfVwiYCA6IFwiXCIpICtcbiAgICAoIWRvY3R5cGUucHVibGljSWQgJiYgZG9jdHlwZS5zeXN0ZW1JZCA/IFwiIFNZU1RFTVwiIDogXCJcIikgK1xuICAgIChkb2N0eXBlLnN5c3RlbUlkID8gYCBcIiR7ZG9jdHlwZS5zeXN0ZW1JZH1cImAgOiBcIlwiKSArXG4gICAgYD5cXG4ke2RvY3VtZW50RWxlbWVudD8ub3V0ZXJIVE1MfWA7XG59XG5cbi8qKiBQYXJzZSBhIHN0cmluZyB3aXRoIEhUTUwgY29kZSBhbmQgcmV0dXJuIGEgRG9jdW1lbnQgKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0RvY3VtZW50KHN0cmluZzogc3RyaW5nKTogRG9jdW1lbnQge1xuICBjb25zdCBkb2N1bWVudCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3RyaW5nLCBcInRleHQvaHRtbFwiKTtcblxuICBpZiAoIWRvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIHRoZSBIVE1MIGNvZGVcIik7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQgYXMgdW5rbm93biBhcyBEb2N1bWVudDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFNBQVMsUUFBUSxvQkFBb0I7QUFFOUMsTUFBTSxTQUFTLElBQUk7QUFFbkIsNkNBQTZDLEdBQzdDLE9BQU8sU0FBUyxpQkFBaUIsUUFBa0I7RUFDakQsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRztFQUVyQyxJQUFJLENBQUMsU0FBUztJQUNaLE9BQU8saUJBQWlCLGFBQWE7RUFDdkM7RUFFQSxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsSUFBSSxFQUFFLEdBQ2hDLENBQUMsUUFBUSxRQUFRLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUN4RCxDQUFDLENBQUMsUUFBUSxRQUFRLElBQUksUUFBUSxRQUFRLEdBQUcsWUFBWSxFQUFFLElBQ3ZELENBQUMsUUFBUSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUNqRCxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsV0FBVztBQUN0QztBQUVBLHdEQUF3RCxHQUN4RCxPQUFPLFNBQVMsaUJBQWlCLE1BQWM7RUFDN0MsTUFBTSxXQUFXLE9BQU8sZUFBZSxDQUFDLFFBQVE7RUFFaEQsSUFBSSxDQUFDLFVBQVU7SUFDYixNQUFNLElBQUksTUFBTTtFQUNsQjtFQUVBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=11009235347339197355,14357328422860843711 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/77a10369b2b0a22d56de43ff92b44031d71e5d1caa09255872fb602353b86143.js b/vendor/gen/https/deno.land/77a10369b2b0a22d56de43ff92b44031d71e5d1caa09255872fb602353b86143.js
new file mode 100644
index 0000000..b82afd4
--- /dev/null
+++ b/vendor/gen/https/deno.land/77a10369b2b0a22d56de43ff92b44031d71e5d1caa09255872fb602353b86143.js
@@ -0,0 +1,15 @@
+import { boolean } from "../../flags/types/boolean.ts";
+import { Type } from "../type.ts";
+/** Boolean type with auto completion. Allows `true`, `false`, `0` and `1`. */ export class BooleanType extends Type {
+ /** Parse boolean type. */ parse(type) {
+ return boolean(type);
+ }
+ /** Complete boolean type. */ complete() {
+ return [
+ "true",
+ "false"
+ ];
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9ib29sZWFuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW4gfSBmcm9tIFwiLi4vLi4vZmxhZ3MvdHlwZXMvYm9vbGVhbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudFZhbHVlIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcblxuLyoqIEJvb2xlYW4gdHlwZSB3aXRoIGF1dG8gY29tcGxldGlvbi4gQWxsb3dzIGB0cnVlYCwgYGZhbHNlYCwgYDBgIGFuZCBgMWAuICovXG5leHBvcnQgY2xhc3MgQm9vbGVhblR5cGUgZXh0ZW5kcyBUeXBlPGJvb2xlYW4+IHtcbiAgLyoqIFBhcnNlIGJvb2xlYW4gdHlwZS4gKi9cbiAgcHVibGljIHBhcnNlKHR5cGU6IEFyZ3VtZW50VmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYm9vbGVhbih0eXBlKTtcbiAgfVxuXG4gIC8qKiBDb21wbGV0ZSBib29sZWFuIHR5cGUuICovXG4gIHB1YmxpYyBjb21wbGV0ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInRydWVcIiwgXCJmYWxzZVwiXTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsT0FBTyxRQUFRLCtCQUErQjtBQUV2RCxTQUFTLElBQUksUUFBUSxhQUFhO0FBRWxDLDRFQUE0RSxHQUM1RSxPQUFPLE1BQU0sb0JBQW9CO0VBQy9CLHdCQUF3QixHQUN4QixBQUFPLE1BQU0sSUFBbUIsRUFBVztJQUN6QyxPQUFPLFFBQVE7RUFDakI7RUFFQSwyQkFBMkIsR0FDM0IsQUFBTyxXQUFxQjtJQUMxQixPQUFPO01BQUM7TUFBUTtLQUFRO0VBQzFCO0FBQ0YifQ==
+// denoCacheMetadata=12531781918539376646,7136942147879199042 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/78e773d9faefe298ca9933405ae4d8e6e3a855c0a706e96031a535c172bf99bf.js b/vendor/gen/https/deno.land/78e773d9faefe298ca9933405ae4d8e6e3a855c0a706e96031a535c172bf99bf.js
new file mode 100644
index 0000000..c68cc0e
--- /dev/null
+++ b/vendor/gen/https/deno.land/78e773d9faefe298ca9933405ae4d8e6e3a855c0a706e96031a535c172bf99bf.js
@@ -0,0 +1,5 @@
+export { default as markdownIt } from "npm:markdown-it@14.1.0";
+export { default as markdownItAttrs } from "npm:markdown-it-attrs@4.3.1";
+export { default as markdownItDeflist } from "npm:markdown-it-deflist@3.0.0";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9tYXJrZG93bl9pdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIG1hcmtkb3duSXQgfSBmcm9tIFwibnBtOm1hcmtkb3duLWl0QDE0LjEuMFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXJrZG93bkl0QXR0cnMgfSBmcm9tIFwibnBtOm1hcmtkb3duLWl0LWF0dHJzQDQuMy4xXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1hcmtkb3duSXREZWZsaXN0IH0gZnJvbSBcIm5wbTptYXJrZG93bi1pdC1kZWZsaXN0QDMuMC4wXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2Rvd25JdE9wdGlvbnMge1xuICAvKiogU2V0IGB0cnVlYCB0byBlbmFibGUgSFRNTCB0YWdzIGluIHNvdXJjZSAqL1xuICBodG1sPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIGAvYCB0byBjbG9zZSBzaW5nbGUgdGFncyAoYDxiciAvPmApLlxuICAgKiBUaGlzIGlzIG9ubHkgZm9yIGZ1bGwgQ29tbW9uTWFyayBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgeGh0bWxPdXQ/OiBib29sZWFuO1xuXG4gIC8qKiBDb252ZXJ0IGBcXG5gIGluIHBhcmFncmFwaHMgaW50byBgPGJyPmAgKi9cbiAgYnJlYWtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ1NTIGxhbmd1YWdlIHByZWZpeCBmb3IgZmVuY2VkIGJsb2Nrcy5cbiAgICogQ2FuIGJlIHVzZWZ1bCBmb3IgZXh0ZXJuYWwgaGlnaGxpZ2h0ZXJzLlxuICAgKi9cbiAgbGFuZ1ByZWZpeD86IHN0cmluZztcblxuICAvKiogQXV0b2NvbnZlcnQgVVJMLWxpa2UgdGV4dCB0byBsaW5rcyAqL1xuICBsaW5raWZ5PzogYm9vbGVhbjtcblxuICAvKiogRW5hYmxlIHNvbWUgbGFuZ3VhZ2UtbmV1dHJhbCByZXBsYWNlbWVudCArIHF1b3RlcyBiZWF1dGlmaWNhdGlvbiAqL1xuICB0eXBvZ3JhcGhlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvdWJsZSArIHNpbmdsZSBxdW90ZXMgcmVwbGFjZW1lbnQgcGFpcnMsIHdoZW4gdHlwb2dyYXBoZXIgZW5hYmxlZCxcbiAgICogYW5kIHNtYXJ0cXVvdGVzIG9uLiBDb3VsZCBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYW4gQXJyYXkuXG4gICAqIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBgwqvCu+KAnuKAnGAgZm9yIFJ1c3NpYW4sIGDigJ7igJzigJrigJhgIGZvciBHZXJtYW4sXG4gICAqIGFuZCBgWyfCq1xceEEwJywgJ1xceEEwwrsnLCAn4oC5XFx4QTAnLCAnXFx4QTDigLonXWAgZm9yIEZyZW5jaCAoaW5jbHVkaW5nIG5ic3ApLlxuICAgKi9cbiAgcXVvdGVzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEhpZ2hsaWdodGVyIGZ1bmN0aW9uLiBTaG91bGQgcmV0dXJuIGVzY2FwZWQgSFRNTCxcbiAgICogb3IgJycgaWYgdGhlIHNvdXJjZSBzdHJpbmcgaXMgbm90IGNoYW5nZWQgYW5kIHNob3VsZCBiZSBlc2NhcGVkIGV4dGVybmFsbHkuXG4gICAqIElmIHJlc3VsdCBzdGFydHMgd2l0aCA8cHJlLi4uIGludGVybmFsIHdyYXBwZXIgaXMgc2tpcHBlZC5cbiAgICovXG4gIGhpZ2hsaWdodD86IChzdHI6IHN0cmluZywgbGFuZzogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsV0FBVyxVQUFVLFFBQVEseUJBQXlCO0FBQy9ELFNBQVMsV0FBVyxlQUFlLFFBQVEsOEJBQThCO0FBQ3pFLFNBQVMsV0FBVyxpQkFBaUIsUUFBUSxnQ0FBZ0MifQ==
+// denoCacheMetadata=2838351079861158289,5254002557100192889 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/79823bbc13d776f85eda5718d2492219a14637000246daff1355fe1dbbb279ce.js b/vendor/gen/https/deno.land/79823bbc13d776f85eda5718d2492219a14637000246daff1355fe1dbbb279ce.js
new file mode 100644
index 0000000..6cdaad4
--- /dev/null
+++ b/vendor/gen/https/deno.land/79823bbc13d776f85eda5718d2492219a14637000246daff1355fe1dbbb279ce.js
@@ -0,0 +1,80 @@
+import { markdownIt, markdownItAttrs, markdownItDeflist } from "../deps/markdown_it.ts";
+import loader from "../core/loaders/text.ts";
+import { merge } from "../core/utils/object.ts";
+// Default options
+export const defaults = {
+ extensions: [
+ ".md",
+ ".markdown"
+ ],
+ options: {
+ html: true
+ },
+ plugins: [],
+ rules: {},
+ useDefaultPlugins: true
+};
+const defaultPlugins = [
+ markdownItAttrs,
+ markdownItDeflist
+];
+/** Template engine to render Markdown files */ export class MarkdownEngine {
+ engine;
+ constructor(engine){
+ this.engine = engine;
+ }
+ deleteCache() {}
+ render(content, data, filename) {
+ if (typeof content !== "string") {
+ content = String(content);
+ }
+ return this.engine.render(content, {
+ filename,
+ data
+ });
+ }
+ addHelper() {}
+}
+/**
+ * A plugin to render Markdown files using markdown-it
+ * Installed by default
+ * @see https://lume.land/plugins/markdown
+ */ export function markdown(userOptions) {
+ const options = merge(defaults, userOptions);
+ if (options.useDefaultPlugins) {
+ options.plugins.unshift(...defaultPlugins);
+ }
+ return function(site) {
+ const engine = markdownIt(options.options);
+ // Disable indented code blocks by default
+ engine.disable("code");
+ // Register markdown-it plugins
+ options.plugins.forEach((plugin)=>Array.isArray(plugin) ? engine.use(...plugin) : engine.use(plugin));
+ // Hook to add markdown-it plugins
+ site.hooks.addMarkdownItPlugin = (plugin, ...options)=>{
+ engine.use(plugin, ...options);
+ };
+ // Register custom rules
+ for (const [name, rule] of Object.entries(options.rules)){
+ engine.renderer.rules[name] = rule;
+ }
+ // Hook to add custom rules
+ site.hooks.addMarkdownItRule = (name, rule)=>{
+ engine.renderer.rules[name] = rule;
+ };
+ site.hooks.markdownIt = (callback)=>callback(engine);
+ // Load the pages
+ site.loadPages(options.extensions, {
+ loader,
+ engine: new MarkdownEngine(engine)
+ });
+ // Register the md filter
+ site.filter("md", filter);
+ function filter(string, inline = false) {
+ return inline ? engine.renderInline(string?.toString() || "").trim() : engine.render(string?.toString() || "").trim();
+ }
+ };
+}
+export default markdown;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy9tYXJrZG93bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBtYXJrZG93bkl0LFxuICBtYXJrZG93bkl0QXR0cnMsXG4gIG1hcmtkb3duSXREZWZsaXN0LFxuICBNYXJrZG93bkl0T3B0aW9ucyxcbn0gZnJvbSBcIi4uL2RlcHMvbWFya2Rvd25faXQudHNcIjtcbmltcG9ydCBsb2FkZXIgZnJvbSBcIi4uL2NvcmUvbG9hZGVycy90ZXh0LnRzXCI7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gXCIuLi9jb3JlL3V0aWxzL29iamVjdC50c1wiO1xuXG5pbXBvcnQgdHlwZSBTaXRlIGZyb20gXCIuLi9jb3JlL3NpdGUudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5naW5lIH0gZnJvbSBcIi4uL2NvcmUvcmVuZGVyZXIudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqIEZpbGUgZXh0ZW5zaW9ucyB0byBsb2FkICovXG4gIGV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKiogT3B0aW9ucyBwYXNzZWQgdG8gbWFya2Rvd24taXQgbGlicmFyeSAqL1xuICBvcHRpb25zPzogTWFya2Rvd25JdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIG1hcmtkb3duLWl0IHBsdWdpbnMgdG8gdXNlXG4gICAqIEBkZWZhdWx0IGBbbWFya2Rvd25JdEF0dHJzLCBtYXJrZG93bkl0RGVmbGlzdF1gXG4gICAqL1xuICBwbHVnaW5zPzogdW5rbm93bltdO1xuXG4gIC8qKiBUbyBtb2RpZnkgZXhpc3RpbmcgcnVsZXMgb3IgbmV3IGN1c3RvbSBydWxlcyAqL1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBydWxlcz86IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PjtcblxuICAvKiogU2V0IGBmYWxzZWAgdG8gcmVtb3ZlIHRoZSBkZWZhdWx0IHBsdWdpbnMgKi9cbiAgdXNlRGVmYXVsdFBsdWdpbnM/OiBib29sZWFuO1xufVxuXG4vLyBEZWZhdWx0IG9wdGlvbnNcbmV4cG9ydCBjb25zdCBkZWZhdWx0czogT3B0aW9ucyA9IHtcbiAgZXh0ZW5zaW9uczogW1wiLm1kXCIsIFwiLm1hcmtkb3duXCJdLFxuICBvcHRpb25zOiB7XG4gICAgaHRtbDogdHJ1ZSxcbiAgfSxcbiAgcGx1Z2luczogW10sXG4gIHJ1bGVzOiB7fSxcbiAgdXNlRGVmYXVsdFBsdWdpbnM6IHRydWUsXG59O1xuXG5jb25zdCBkZWZhdWx0UGx1Z2lucyA9IFtcbiAgbWFya2Rvd25JdEF0dHJzLFxuICBtYXJrZG93bkl0RGVmbGlzdCxcbl07XG5cbmludGVyZmFjZSBNYXJrZG93bkl0RW5naW5lIHtcbiAgcmVuZGVyOiAoaW5wdXQ6IHN0cmluZywgZW52PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHN0cmluZztcbn1cblxuLyoqIFRlbXBsYXRlIGVuZ2luZSB0byByZW5kZXIgTWFya2Rvd24gZmlsZXMgKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkVuZ2luZSBpbXBsZW1lbnRzIEVuZ2luZSB7XG4gIGVuZ2luZTogTWFya2Rvd25JdEVuZ2luZTtcblxuICBjb25zdHJ1Y3RvcihlbmdpbmU6IE1hcmtkb3duSXRFbmdpbmUpIHtcbiAgICB0aGlzLmVuZ2luZSA9IGVuZ2luZTtcbiAgfVxuXG4gIGRlbGV0ZUNhY2hlKCkge31cblxuICByZW5kZXIoXG4gICAgY29udGVudDogdW5rbm93bixcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb250ZW50ID0gU3RyaW5nKGNvbnRlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbmdpbmUucmVuZGVyKGNvbnRlbnQgYXMgc3RyaW5nLCB7IGZpbGVuYW1lLCBkYXRhIH0pO1xuICB9XG5cbiAgYWRkSGVscGVyKCkge31cbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0byByZW5kZXIgTWFya2Rvd24gZmlsZXMgdXNpbmcgbWFya2Rvd24taXRcbiAqIEluc3RhbGxlZCBieSBkZWZhdWx0XG4gKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvbWFya2Rvd25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duKHVzZXJPcHRpb25zPzogT3B0aW9ucykge1xuICBjb25zdCBvcHRpb25zID0gbWVyZ2UoZGVmYXVsdHMsIHVzZXJPcHRpb25zKTtcblxuICBpZiAob3B0aW9ucy51c2VEZWZhdWx0UGx1Z2lucykge1xuICAgIG9wdGlvbnMucGx1Z2lucy51bnNoaWZ0KC4uLmRlZmF1bHRQbHVnaW5zKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoc2l0ZTogU2l0ZSkge1xuICAgIGNvbnN0IGVuZ2luZSA9IG1hcmtkb3duSXQob3B0aW9ucy5vcHRpb25zKTtcblxuICAgIC8vIERpc2FibGUgaW5kZW50ZWQgY29kZSBibG9ja3MgYnkgZGVmYXVsdFxuICAgIGVuZ2luZS5kaXNhYmxlKFwiY29kZVwiKTtcblxuICAgIC8vIFJlZ2lzdGVyIG1hcmtkb3duLWl0IHBsdWdpbnNcbiAgICBvcHRpb25zLnBsdWdpbnMuZm9yRWFjaCgocGx1Z2luKSA9PlxuICAgICAgQXJyYXkuaXNBcnJheShwbHVnaW4pID8gZW5naW5lLnVzZSguLi5wbHVnaW4pIDogZW5naW5lLnVzZShwbHVnaW4pXG4gICAgKTtcblxuICAgIC8vIEhvb2sgdG8gYWRkIG1hcmtkb3duLWl0IHBsdWdpbnNcbiAgICBzaXRlLmhvb2tzLmFkZE1hcmtkb3duSXRQbHVnaW4gPSAocGx1Z2luLCAuLi5vcHRpb25zKSA9PiB7XG4gICAgICBlbmdpbmUudXNlKHBsdWdpbiwgLi4ub3B0aW9ucyk7XG4gICAgfTtcblxuICAgIC8vIFJlZ2lzdGVyIGN1c3RvbSBydWxlc1xuICAgIGZvciAoY29uc3QgW25hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMucnVsZXMpKSB7XG4gICAgICBlbmdpbmUucmVuZGVyZXIucnVsZXNbbmFtZV0gPSBydWxlO1xuICAgIH1cblxuICAgIC8vIEhvb2sgdG8gYWRkIGN1c3RvbSBydWxlc1xuICAgIHNpdGUuaG9va3MuYWRkTWFya2Rvd25JdFJ1bGUgPSAobmFtZSwgcnVsZSkgPT4ge1xuICAgICAgZW5naW5lLnJlbmRlcmVyLnJ1bGVzW25hbWVdID0gcnVsZTtcbiAgICB9O1xuXG4gICAgc2l0ZS5ob29rcy5tYXJrZG93bkl0ID0gKGNhbGxiYWNrKSA9PiBjYWxsYmFjayhlbmdpbmUpO1xuXG4gICAgLy8gTG9hZCB0aGUgcGFnZXNcbiAgICBzaXRlLmxvYWRQYWdlcyhvcHRpb25zLmV4dGVuc2lvbnMsIHtcbiAgICAgIGxvYWRlcixcbiAgICAgIGVuZ2luZTogbmV3IE1hcmtkb3duRW5naW5lKGVuZ2luZSksXG4gICAgfSk7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgbWQgZmlsdGVyXG4gICAgc2l0ZS5maWx0ZXIoXCJtZFwiLCBmaWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gZmlsdGVyKHN0cmluZzogc3RyaW5nLCBpbmxpbmUgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gaW5saW5lXG4gICAgICAgID8gZW5naW5lLnJlbmRlcklubGluZShzdHJpbmc/LnRvU3RyaW5nKCkgfHwgXCJcIikudHJpbSgpXG4gICAgICAgIDogZW5naW5lLnJlbmRlcihzdHJpbmc/LnRvU3RyaW5nKCkgfHwgXCJcIikudHJpbSgpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFya2Rvd247XG5cbi8qKiBFeHRlbmRzIEhlbHBlcnMgaW50ZXJmYWNlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBMdW1lIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbHBlcnMge1xuICAgICAgLyoqIEBzZWUgaHR0cHM6Ly9sdW1lLmxhbmQvcGx1Z2lucy9tYXJrZG93bi8gKi9cbiAgICAgIG1kOiAoc3RyaW5nOiBzdHJpbmcsIGlubGluZT86IGJvb2xlYW4pID0+IHN0cmluZztcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLFVBQVUsRUFDVixlQUFlLEVBQ2YsaUJBQWlCLFFBRVoseUJBQXlCO0FBQ2hDLE9BQU8sWUFBWSwwQkFBMEI7QUFDN0MsU0FBUyxLQUFLLFFBQVEsMEJBQTBCO0FBMEJoRCxrQkFBa0I7QUFDbEIsT0FBTyxNQUFNLFdBQW9CO0VBQy9CLFlBQVk7SUFBQztJQUFPO0dBQVk7RUFDaEMsU0FBUztJQUNQLE1BQU07RUFDUjtFQUNBLFNBQVMsRUFBRTtFQUNYLE9BQU8sQ0FBQztFQUNSLG1CQUFtQjtBQUNyQixFQUFFO0FBRUYsTUFBTSxpQkFBaUI7RUFDckI7RUFDQTtDQUNEO0FBTUQsNkNBQTZDLEdBQzdDLE9BQU8sTUFBTTtFQUNYLE9BQXlCO0VBRXpCLFlBQVksTUFBd0IsQ0FBRTtJQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHO0VBQ2hCO0VBRUEsY0FBYyxDQUFDO0VBRWYsT0FDRSxPQUFnQixFQUNoQixJQUE4QixFQUM5QixRQUFpQixFQUNUO0lBQ1IsSUFBSSxPQUFPLFlBQVksVUFBVTtNQUMvQixVQUFVLE9BQU87SUFDbkI7SUFDQSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQW1CO01BQUU7TUFBVTtJQUFLO0VBQ2hFO0VBRUEsWUFBWSxDQUFDO0FBQ2Y7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsV0FBcUI7RUFDNUMsTUFBTSxVQUFVLE1BQU0sVUFBVTtFQUVoQyxJQUFJLFFBQVEsaUJBQWlCLEVBQUU7SUFDN0IsUUFBUSxPQUFPLENBQUMsT0FBTyxJQUFJO0VBQzdCO0VBRUEsT0FBTyxTQUFVLElBQVU7SUFDekIsTUFBTSxTQUFTLFdBQVcsUUFBUSxPQUFPO0lBRXpDLDBDQUEwQztJQUMxQyxPQUFPLE9BQU8sQ0FBQztJQUVmLCtCQUErQjtJQUMvQixRQUFRLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUN2QixNQUFNLE9BQU8sQ0FBQyxVQUFVLE9BQU8sR0FBRyxJQUFJLFVBQVUsT0FBTyxHQUFHLENBQUM7SUFHN0Qsa0NBQWtDO0lBQ2xDLEtBQUssS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsUUFBUSxHQUFHO01BQzNDLE9BQU8sR0FBRyxDQUFDLFdBQVc7SUFDeEI7SUFFQSx3QkFBd0I7SUFDeEIsS0FBSyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUc7TUFDeEQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRztJQUNoQztJQUVBLDJCQUEyQjtJQUMzQixLQUFLLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLE1BQU07TUFDcEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRztJQUNoQztJQUVBLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLFdBQWEsU0FBUztJQUUvQyxpQkFBaUI7SUFDakIsS0FBSyxTQUFTLENBQUMsUUFBUSxVQUFVLEVBQUU7TUFDakM7TUFDQSxRQUFRLElBQUksZUFBZTtJQUM3QjtJQUVBLHlCQUF5QjtJQUN6QixLQUFLLE1BQU0sQ0FBQyxNQUFNO0lBRWxCLFNBQVMsT0FBTyxNQUFjLEVBQUUsU0FBUyxLQUFLO01BQzVDLE9BQU8sU0FDSCxPQUFPLFlBQVksQ0FBQyxRQUFRLGNBQWMsSUFBSSxJQUFJLEtBQ2xELE9BQU8sTUFBTSxDQUFDLFFBQVEsY0FBYyxJQUFJLElBQUk7SUFDbEQ7RUFDRjtBQUNGO0FBRUEsZUFBZSxTQUFTIn0=
+// denoCacheMetadata=15556366944876663143,9871773237858387856 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/79a8ce76a2188c42fb91f9c354664324230fb7b89458d73d5b6606b45972dfdb.js b/vendor/gen/https/deno.land/79a8ce76a2188c42fb91f9c354664324230fb7b89458d73d5b6606b45972dfdb.js
new file mode 100644
index 0000000..e91f678
--- /dev/null
+++ b/vendor/gen/https/deno.land/79a8ce76a2188c42fb91f9c354664324230fb7b89458d73d5b6606b45972dfdb.js
@@ -0,0 +1,4 @@
+import NWDom from "./nwsapi.js";
+export const DOM = NWDom;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3NlbGVjdG9ycy9ud3NhcGktdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE5XRG9tIGZyb20gXCIuL253c2FwaS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9jdW1lbnQudHNcIjtcblxuZXhwb3J0IGNvbnN0IERPTTogKGRvYzogRG9jdW1lbnQpID0+IHtcbiAgYW5jZXN0b3IoXG4gICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICBjb250ZXh0OiBFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgY2FsbGJhY2s/OiAoZWxlbWVudDogRWxlbWVudCkgPT4gdm9pZCxcbiAgKTogRWxlbWVudCB8IG51bGw7XG4gIGZpcnN0KFxuICAgIHNlbGVjdG9yOiBzdHJpbmcsXG4gICAgY29udGV4dDogRWxlbWVudCB8IERvY3VtZW50LFxuICAgIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHZvaWQsXG4gICk6IEVsZW1lbnQgfCBudWxsO1xuICBtYXRjaChcbiAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgIGNvbnRleHQ6IEVsZW1lbnQgfCBEb2N1bWVudCxcbiAgICBjYWxsYmFjaz86IChlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkLFxuICApOiBib29sZWFuO1xuICBzZWxlY3QoXG4gICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICBjb250ZXh0OiBFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgY2FsbGJhY2s/OiAoZWxlbWVudDogRWxlbWVudCkgPT4gdm9pZCxcbiAgKTogRWxlbWVudFtdO1xuICBieUlkKGlkOiBzdHJpbmcsIGZyb206IEVsZW1lbnQgfCBEb2N1bWVudCk6IEVsZW1lbnRbXTtcbiAgYnlUYWcodGFnOiBzdHJpbmcsIGZyb206IEVsZW1lbnQgfCBEb2N1bWVudCk6IEVsZW1lbnRbXTtcbiAgYnlDbGFzcyh0YWc6IHN0cmluZywgZnJvbTogRWxlbWVudCB8IERvY3VtZW50KTogRWxlbWVudFtdO1xufSA9IE5XRG9tIGFzIGFueTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsY0FBYztBQUloQyxPQUFPLE1BQU0sTUF3QlQsTUFBYSJ9
+// denoCacheMetadata=4552639845895541984,10403187352560083199 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/7c0611e51d6da48336233c71b22977d63210b451912a648847f17cb373b5cff8.js b/vendor/gen/https/deno.land/7c0611e51d6da48336233c71b22977d63210b451912a648847f17cb373b5cff8.js
new file mode 100644
index 0000000..3533401
--- /dev/null
+++ b/vendor/gen/https/deno.land/7c0611e51d6da48336233c71b22977d63210b451912a648847f17cb373b5cff8.js
@@ -0,0 +1,23 @@
+import { Command } from "../command.ts";
+import { dim, italic } from "../deps.ts";
+import { ZshCompletionsGenerator } from "./_zsh_completions_generator.ts";
+/** Generates zsh completions script. */ export class ZshCompletionsCommand extends Command {
+ #cmd;
+ constructor(cmd){
+ super();
+ this.#cmd = cmd;
+ return this.description(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ return `Generate shell completions for zsh.
+
+To enable zsh completions for this program add following line to your ${dim(italic("~/.zshrc"))}:
+
+ ${dim(italic(`source <(${baseCmd.getPath()} completions zsh)`))}`;
+ }).noGlobals().action(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ console.log(ZshCompletionsGenerator.generate(baseCmd));
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy96c2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBkaW0sIGl0YWxpYyB9IGZyb20gXCIuLi9kZXBzLnRzXCI7XG5pbXBvcnQgeyBac2hDb21wbGV0aW9uc0dlbmVyYXRvciB9IGZyb20gXCIuL196c2hfY29tcGxldGlvbnNfZ2VuZXJhdG9yLnRzXCI7XG5cbi8qKiBHZW5lcmF0ZXMgenNoIGNvbXBsZXRpb25zIHNjcmlwdC4gKi9cbmV4cG9ydCBjbGFzcyBac2hDb21wbGV0aW9uc0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgI2NtZD86IENvbW1hbmQ7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjbWQ/OiBDb21tYW5kKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNjbWQgPSBjbWQ7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5kZXNjcmlwdGlvbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VDbWQgPSB0aGlzLiNjbWQgfHwgdGhpcy5nZXRNYWluQ29tbWFuZCgpO1xuICAgICAgICByZXR1cm4gYEdlbmVyYXRlIHNoZWxsIGNvbXBsZXRpb25zIGZvciB6c2guXG5cblRvIGVuYWJsZSB6c2ggY29tcGxldGlvbnMgZm9yIHRoaXMgcHJvZ3JhbSBhZGQgZm9sbG93aW5nIGxpbmUgdG8geW91ciAke1xuICAgICAgICAgIGRpbShpdGFsaWMoXCJ+Ly56c2hyY1wiKSlcbiAgICAgICAgfTpcblxuICAgICR7ZGltKGl0YWxpYyhgc291cmNlIDwoJHtiYXNlQ21kLmdldFBhdGgoKX0gY29tcGxldGlvbnMgenNoKWApKX1gO1xuICAgICAgfSlcbiAgICAgIC5ub0dsb2JhbHMoKVxuICAgICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VDbWQgPSB0aGlzLiNjbWQgfHwgdGhpcy5nZXRNYWluQ29tbWFuZCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhac2hDb21wbGV0aW9uc0dlbmVyYXRvci5nZW5lcmF0ZShiYXNlQ21kKSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsT0FBTyxRQUFRLGdCQUFnQjtBQUN4QyxTQUFTLEdBQUcsRUFBRSxNQUFNLFFBQVEsYUFBYTtBQUN6QyxTQUFTLHVCQUF1QixRQUFRLGtDQUFrQztBQUUxRSxzQ0FBc0MsR0FDdEMsT0FBTyxNQUFNLDhCQUE4QjtFQUN6QyxDQUFBLEdBQUksQ0FBVztFQUNmLFlBQW1CLEdBQWEsQ0FBRTtJQUNoQyxLQUFLO0lBQ0wsSUFBSSxDQUFDLENBQUEsR0FBSSxHQUFHO0lBQ1osT0FBTyxJQUFJLENBQ1IsV0FBVyxDQUFDO01BQ1gsTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFBLEdBQUksSUFBSSxJQUFJLENBQUMsY0FBYztNQUNoRCxPQUFPLENBQUM7O3NFQUVzRCxFQUM1RCxJQUFJLE9BQU8sYUFDWjs7SUFFTCxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJO0lBQy9ELEdBQ0MsU0FBUyxHQUNULE1BQU0sQ0FBQztNQUNOLE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBQSxHQUFJLElBQUksSUFBSSxDQUFDLGNBQWM7TUFDaEQsUUFBUSxHQUFHLENBQUMsd0JBQXdCLFFBQVEsQ0FBQztJQUMvQztFQUNKO0FBQ0YifQ==
+// denoCacheMetadata=11072931032986519175,10493031743680652948 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/7ef55e2ddc76480d92fc85dfd2e61f7d8911c5efc22dd2c4c0cfb25dad793fa1.js b/vendor/gen/https/deno.land/7ef55e2ddc76480d92fc85dfd2e61f7d8911c5efc22dd2c4c0cfb25dad793fa1.js
new file mode 100644
index 0000000..2eb75a0
--- /dev/null
+++ b/vendor/gen/https/deno.land/7ef55e2ddc76480d92fc85dfd2e61f7d8911c5efc22dd2c4c0cfb25dad793fa1.js
@@ -0,0 +1,18 @@
+import { parse } from "../../deps/toml.ts";
+import { isPlainObject } from "../utils/object.ts";
+import { read } from "../utils/read.ts";
+/** Load and parse a TOML file */ export default async function toml(path) {
+ const text = await read(path, false);
+ const content = parse(text);
+ if (!content) {
+ return {};
+ }
+ if (isPlainObject(content)) {
+ return content;
+ }
+ return {
+ content
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9sb2FkZXJzL3RvbWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi4vLi4vZGVwcy90b21sLnRzXCI7XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIi4uL3V0aWxzL29iamVjdC50c1wiO1xuaW1wb3J0IHsgcmVhZCB9IGZyb20gXCIuLi91dGlscy9yZWFkLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgUmF3RGF0YSB9IGZyb20gXCIuLi9maWxlLnRzXCI7XG5cbi8qKiBMb2FkIGFuZCBwYXJzZSBhIFRPTUwgZmlsZSAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gdG9tbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJhd0RhdGE+IHtcbiAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWQocGF0aCwgZmFsc2UpO1xuICBjb25zdCBjb250ZW50ID0gcGFyc2UodGV4dCk7XG5cbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QoY29udGVudCkpIHtcbiAgICByZXR1cm4gY29udGVudCBhcyBSYXdEYXRhO1xuICB9XG5cbiAgcmV0dXJuIHsgY29udGVudCB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLHFCQUFxQjtBQUMzQyxTQUFTLGFBQWEsUUFBUSxxQkFBcUI7QUFDbkQsU0FBUyxJQUFJLFFBQVEsbUJBQW1CO0FBSXhDLCtCQUErQixHQUMvQixlQUFlLGVBQWUsS0FBSyxJQUFZO0VBQzdDLE1BQU0sT0FBTyxNQUFNLEtBQUssTUFBTTtFQUM5QixNQUFNLFVBQVUsTUFBTTtFQUV0QixJQUFJLENBQUMsU0FBUztJQUNaLE9BQU8sQ0FBQztFQUNWO0VBRUEsSUFBSSxjQUFjLFVBQVU7SUFDMUIsT0FBTztFQUNUO0VBRUEsT0FBTztJQUFFO0VBQVE7QUFDbkIifQ==
+// denoCacheMetadata=8353252316730145128,11917285000152333446 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/7f25ad671ee24d9f46765b020c9bd6357c95a18d203e03070c2a8d84190167fb.js b/vendor/gen/https/deno.land/7f25ad671ee24d9f46765b020c9bd6357c95a18d203e03070c2a8d84190167fb.js
new file mode 100644
index 0000000..4336269
--- /dev/null
+++ b/vendor/gen/https/deno.land/7f25ad671ee24d9f46765b020c9bd6357c95a18d203e03070c2a8d84190167fb.js
@@ -0,0 +1,10 @@
+import { InvalidTypeError } from "../_errors.ts";
+/** Integer type handler. Excepts any integer value. */ export const integer = (type)=>{
+ const value = Number(type.value);
+ if (Number.isInteger(value)) {
+ return value;
+ }
+ throw new InvalidTypeError(type);
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvdHlwZXMvaW50ZWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFyZ3VtZW50VmFsdWUsIFR5cGVIYW5kbGVyIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBJbnZhbGlkVHlwZUVycm9yIH0gZnJvbSBcIi4uL19lcnJvcnMudHNcIjtcblxuLyoqIEludGVnZXIgdHlwZSBoYW5kbGVyLiBFeGNlcHRzIGFueSBpbnRlZ2VyIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IGludGVnZXI6IFR5cGVIYW5kbGVyPG51bWJlcj4gPSAodHlwZTogQXJndW1lbnRWYWx1ZSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHZhbHVlID0gTnVtYmVyKHR5cGUudmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0aHJvdyBuZXcgSW52YWxpZFR5cGVFcnJvcih0eXBlKTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxnQkFBZ0IsUUFBUSxnQkFBZ0I7QUFFakQscURBQXFELEdBQ3JELE9BQU8sTUFBTSxVQUErQixDQUFDO0VBQzNDLE1BQU0sUUFBUSxPQUFPLEtBQUssS0FBSztFQUMvQixJQUFJLE9BQU8sU0FBUyxDQUFDLFFBQVE7SUFDM0IsT0FBTztFQUNUO0VBRUEsTUFBTSxJQUFJLGlCQUFpQjtBQUM3QixFQUFFIn0=
+// denoCacheMetadata=3434817745291415933,13615579810935742040 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/7f28f15b14e3c857e06c06ffa44655fc3b4e308f58dea66274992b8434cc0e35.js b/vendor/gen/https/deno.land/7f28f15b14e3c857e06c06ffa44655fc3b4e308f58dea66274992b8434cc0e35.js
new file mode 100644
index 0000000..5296456
--- /dev/null
+++ b/vendor/gen/https/deno.land/7f28f15b14e3c857e06c06ffa44655fc3b4e308f58dea66274992b8434cc0e35.js
@@ -0,0 +1,13 @@
+import { StringType } from "./string.ts";
+/** String type with auto completion of child command names. */ export class ChildCommandType extends StringType {
+ #cmd;
+ constructor(cmd){
+ super();
+ this.#cmd = cmd;
+ }
+ /** Complete child command names. */ complete(cmd) {
+ return (this.#cmd ?? cmd)?.getCommands(false).map((cmd)=>cmd.getName()) || [];
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9jaGlsZF9jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBTdHJpbmdUeXBlIH0gZnJvbSBcIi4vc3RyaW5nLnRzXCI7XG5cbi8qKiBTdHJpbmcgdHlwZSB3aXRoIGF1dG8gY29tcGxldGlvbiBvZiBjaGlsZCBjb21tYW5kIG5hbWVzLiAqL1xuZXhwb3J0IGNsYXNzIENoaWxkQ29tbWFuZFR5cGUgZXh0ZW5kcyBTdHJpbmdUeXBlIHtcbiAgI2NtZD86IENvbW1hbmQ7XG5cbiAgY29uc3RydWN0b3IoY21kPzogQ29tbWFuZCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jY21kID0gY21kO1xuICB9XG5cbiAgLyoqIENvbXBsZXRlIGNoaWxkIGNvbW1hbmQgbmFtZXMuICovXG4gIHB1YmxpYyBjb21wbGV0ZShjbWQ6IENvbW1hbmQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLiNjbWQgPz8gY21kKT8uZ2V0Q29tbWFuZHMoZmFsc2UpXG4gICAgICAubWFwKChjbWQ6IENvbW1hbmQpID0+IGNtZC5nZXROYW1lKCkpIHx8IFtdO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxVQUFVLFFBQVEsY0FBYztBQUV6Qyw2REFBNkQsR0FDN0QsT0FBTyxNQUFNLHlCQUF5QjtFQUNwQyxDQUFBLEdBQUksQ0FBVztFQUVmLFlBQVksR0FBYSxDQUFFO0lBQ3pCLEtBQUs7SUFDTCxJQUFJLENBQUMsQ0FBQSxHQUFJLEdBQUc7RUFDZDtFQUVBLGtDQUFrQyxHQUNsQyxBQUFPLFNBQVMsR0FBWSxFQUFZO0lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQSxHQUFJLElBQUksR0FBRyxHQUFHLFlBQVksT0FDcEMsSUFBSSxDQUFDLE1BQWlCLElBQUksT0FBTyxPQUFPLEVBQUU7RUFDL0M7QUFDRiJ9
+// denoCacheMetadata=9861569127225403061,11990545245851704706 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/81fbc654f86552bde44b0a558f3a511492f3c807c9dbc34b63d8799fb7175175.js b/vendor/gen/https/deno.land/81fbc654f86552bde44b0a558f3a511492f3c807c9dbc34b63d8799fb7175175.js
new file mode 100644
index 0000000..d3dfb5d
--- /dev/null
+++ b/vendor/gen/https/deno.land/81fbc654f86552bde44b0a558f3a511492f3c807c9dbc34b63d8799fb7175175.js
@@ -0,0 +1,59 @@
+const main = {
+ ARROW_UP: "↑",
+ ARROW_DOWN: "↓",
+ ARROW_LEFT: "←",
+ ARROW_RIGHT: "→",
+ ARROW_UP_LEFT: "↖",
+ ARROW_UP_RIGHT: "↗",
+ ARROW_DOWN_RIGHT: "↘",
+ ARROW_DOWN_LEFT: "↙",
+ RADIO_ON: "◉",
+ RADIO_OFF: "◯",
+ TICK: "✔",
+ CROSS: "✘",
+ ELLIPSIS: "…",
+ POINTER_SMALL: "›",
+ LINE: "─",
+ POINTER: "❯",
+ INFO: "ℹ",
+ TAB_LEFT: "⇤",
+ TAB_RIGHT: "⇥",
+ ESCAPE: "⎋",
+ BACKSPACE: "⌫",
+ PAGE_UP: "⇞",
+ PAGE_DOWN: "⇟",
+ ENTER: "↵",
+ SEARCH: "⌕"
+};
+const win = {
+ ...main,
+ RADIO_ON: "(*)",
+ RADIO_OFF: "( )",
+ TICK: "√",
+ CROSS: "×",
+ POINTER_SMALL: "»"
+};
+/** Prompt icons. */ export const Figures = Deno.build.os === "windows" ? win : main;
+const keyMap = {
+ up: "ARROW_UP",
+ down: "ARROW_DOWN",
+ left: "ARROW_LEFT",
+ right: "ARROW_RIGHT",
+ pageup: "PAGE_UP",
+ pagedown: "PAGE_DOWN",
+ tab: "TAB_RIGHT",
+ enter: "ENTER",
+ return: "ENTER"
+};
+export function getFiguresByKeys(keys) {
+ const figures = [];
+ for (const key of keys){
+ const figure = Figures[keyMap[key]] ?? key;
+ if (!figures.includes(figure)) {
+ figures.push(figure);
+ }
+ }
+ return figures;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L2ZpZ3VyZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbWFpbiA9IHtcbiAgQVJST1dfVVA6IFwi4oaRXCIsXG4gIEFSUk9XX0RPV046IFwi4oaTXCIsXG4gIEFSUk9XX0xFRlQ6IFwi4oaQXCIsXG4gIEFSUk9XX1JJR0hUOiBcIuKGklwiLFxuICBBUlJPV19VUF9MRUZUOiBcIuKGllwiLFxuICBBUlJPV19VUF9SSUdIVDogXCLihpdcIixcbiAgQVJST1dfRE9XTl9SSUdIVDogXCLihphcIixcbiAgQVJST1dfRE9XTl9MRUZUOiBcIuKGmVwiLFxuICBSQURJT19PTjogXCLil4lcIixcbiAgUkFESU9fT0ZGOiBcIuKXr1wiLFxuICBUSUNLOiBcIuKclFwiLFxuICBDUk9TUzogXCLinJhcIixcbiAgRUxMSVBTSVM6IFwi4oCmXCIsXG4gIFBPSU5URVJfU01BTEw6IFwi4oC6XCIsXG4gIExJTkU6IFwi4pSAXCIsXG4gIFBPSU5URVI6IFwi4p2vXCIsXG4gIElORk86IFwi4oS5XCIsXG4gIFRBQl9MRUZUOiBcIuKHpFwiLFxuICBUQUJfUklHSFQ6IFwi4oelXCIsXG4gIEVTQ0FQRTogXCLijotcIixcbiAgQkFDS1NQQUNFOiBcIuKMq1wiLFxuICBQQUdFX1VQOiBcIuKHnlwiLFxuICBQQUdFX0RPV046IFwi4oefXCIsXG4gIEVOVEVSOiBcIuKGtVwiLFxuICBTRUFSQ0g6IFwi4oyVXCIsXG59O1xuXG5jb25zdCB3aW4gPSB7XG4gIC4uLm1haW4sXG4gIFJBRElPX09OOiBcIigqKVwiLFxuICBSQURJT19PRkY6IFwiKCApXCIsXG4gIFRJQ0s6IFwi4oiaXCIsXG4gIENST1NTOiBcIsOXXCIsXG4gIFBPSU5URVJfU01BTEw6IFwiwrtcIixcbn07XG5cbi8qKiBQcm9tcHQgaWNvbnMuICovXG5leHBvcnQgY29uc3QgRmlndXJlcyA9IERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiID8gd2luIDogbWFpbjtcblxuY29uc3Qga2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBrZXlvZiB0eXBlb2YgRmlndXJlcz4gPSB7XG4gIHVwOiBcIkFSUk9XX1VQXCIsXG4gIGRvd246IFwiQVJST1dfRE9XTlwiLFxuICBsZWZ0OiBcIkFSUk9XX0xFRlRcIixcbiAgcmlnaHQ6IFwiQVJST1dfUklHSFRcIixcbiAgcGFnZXVwOiBcIlBBR0VfVVBcIixcbiAgcGFnZWRvd246IFwiUEFHRV9ET1dOXCIsXG4gIHRhYjogXCJUQUJfUklHSFRcIixcbiAgZW50ZXI6IFwiRU5URVJcIixcbiAgcmV0dXJuOiBcIkVOVEVSXCIsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlndXJlc0J5S2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8c3RyaW5nPiB7XG4gIGNvbnN0IGZpZ3VyZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGZpZ3VyZSA9IEZpZ3VyZXNba2V5TWFwW2tleV1dID8/IGtleTtcbiAgICBpZiAoIWZpZ3VyZXMuaW5jbHVkZXMoZmlndXJlKSkge1xuICAgICAgZmlndXJlcy5wdXNoKGZpZ3VyZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWd1cmVzO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTztFQUNYLFVBQVU7RUFDVixZQUFZO0VBQ1osWUFBWTtFQUNaLGFBQWE7RUFDYixlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIsVUFBVTtFQUNWLFdBQVc7RUFDWCxNQUFNO0VBQ04sT0FBTztFQUNQLFVBQVU7RUFDVixlQUFlO0VBQ2YsTUFBTTtFQUNOLFNBQVM7RUFDVCxNQUFNO0VBQ04sVUFBVTtFQUNWLFdBQVc7RUFDWCxRQUFRO0VBQ1IsV0FBVztFQUNYLFNBQVM7RUFDVCxXQUFXO0VBQ1gsT0FBTztFQUNQLFFBQVE7QUFDVjtBQUVBLE1BQU0sTUFBTTtFQUNWLEdBQUcsSUFBSTtFQUNQLFVBQVU7RUFDVixXQUFXO0VBQ1gsTUFBTTtFQUNOLE9BQU87RUFDUCxlQUFlO0FBQ2pCO0FBRUEsa0JBQWtCLEdBQ2xCLE9BQU8sTUFBTSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsS0FBSyxZQUFZLE1BQU0sS0FBSztBQUVoRSxNQUFNLFNBQStDO0VBQ25ELElBQUk7RUFDSixNQUFNO0VBQ04sTUFBTTtFQUNOLE9BQU87RUFDUCxRQUFRO0VBQ1IsVUFBVTtFQUNWLEtBQUs7RUFDTCxPQUFPO0VBQ1AsUUFBUTtBQUNWO0FBRUEsT0FBTyxTQUFTLGlCQUFpQixJQUFtQjtFQUNsRCxNQUFNLFVBQXlCLEVBQUU7RUFDakMsS0FBSyxNQUFNLE9BQU8sS0FBTTtJQUN0QixNQUFNLFNBQVMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSTtJQUN2QyxJQUFJLENBQUMsUUFBUSxRQUFRLENBQUMsU0FBUztNQUM3QixRQUFRLElBQUksQ0FBQztJQUNmO0VBQ0Y7RUFDQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=6840573145702892211,7731457063591829147 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/823a9022143dd0e31c2040be602112921aa9567ba2b7e55126661516f8214ea5.js b/vendor/gen/https/deno.land/823a9022143dd0e31c2040be602112921aa9567ba2b7e55126661516f8214ea5.js
new file mode 100644
index 0000000..6428483
--- /dev/null
+++ b/vendor/gen/https/deno.land/823a9022143dd0e31c2040be602112921aa9567ba2b7e55126661516f8214ea5.js
@@ -0,0 +1,38 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(layoutTag);
+ };
+}
+function layoutTag(env, code, output, tokens) {
+ if (!code.startsWith("layout ")) {
+ return;
+ }
+ const match = code?.match(/^layout\s+([^{]+|`[^`]+`)+(?:\{([\s|\S]*)\})?$/);
+ if (!match) {
+ throw new Error(`Invalid wrap: ${code}`);
+ }
+ const [_, file, data] = match;
+ const varname = output.startsWith("__layout") ? output + "_layout" : "__layout";
+ const compiled = [];
+ const compiledFilters = env.compileFilters(tokens, varname);
+ compiled.push("{");
+ compiled.push(`let ${varname} = "";`);
+ compiled.push(...env.compileTokens(tokens, varname, [
+ "/layout"
+ ]));
+ if (tokens.length && (tokens[0][0] !== "tag" || tokens[0][1] !== "/layout")) {
+ throw new Error(`Missing closing tag for layout tag: ${code}`);
+ }
+ tokens.shift();
+ compiled.push(`${varname} = ${compiledFilters};`);
+ const { dataVarname } = env.options;
+ compiled.push(`const __tmp = await __env.run(${file},
+ {...${dataVarname}${data ? `, ${data}` : ""}, content: ${env.compileFilters(tokens, varname)}},
+ __file
+ );
+ ${output} += __tmp.content;`);
+ compiled.push("}");
+ return compiled.join("\n");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2xheW91dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4uL3NyYy90b2tlbml6ZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCk6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIGVudi50YWdzLnB1c2gobGF5b3V0VGFnKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbGF5b3V0VGFnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjb2RlOiBzdHJpbmcsXG4gIG91dHB1dDogc3RyaW5nLFxuICB0b2tlbnM6IFRva2VuW10sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWNvZGUuc3RhcnRzV2l0aChcImxheW91dCBcIikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGNvZGU/Lm1hdGNoKFxuICAgIC9ebGF5b3V0XFxzKyhbXntdK3xgW15gXStgKSsoPzpcXHsoW1xcc3xcXFNdKilcXH0pPyQvLFxuICApO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd3JhcDogJHtjb2RlfWApO1xuICB9XG5cbiAgY29uc3QgW18sIGZpbGUsIGRhdGFdID0gbWF0Y2g7XG5cbiAgY29uc3QgdmFybmFtZSA9IG91dHB1dC5zdGFydHNXaXRoKFwiX19sYXlvdXRcIilcbiAgICA/IG91dHB1dCArIFwiX2xheW91dFwiXG4gICAgOiBcIl9fbGF5b3V0XCI7XG5cbiAgY29uc3QgY29tcGlsZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbXBpbGVkRmlsdGVycyA9IGVudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIHZhcm5hbWUpO1xuXG4gIGNvbXBpbGVkLnB1c2goXCJ7XCIpO1xuICBjb21waWxlZC5wdXNoKGBsZXQgJHt2YXJuYW1lfSA9IFwiXCI7YCk7XG4gIGNvbXBpbGVkLnB1c2goLi4uZW52LmNvbXBpbGVUb2tlbnModG9rZW5zLCB2YXJuYW1lLCBbXCIvbGF5b3V0XCJdKSk7XG5cbiAgaWYgKHRva2Vucy5sZW5ndGggJiYgKHRva2Vuc1swXVswXSAhPT0gXCJ0YWdcIiB8fCB0b2tlbnNbMF1bMV0gIT09IFwiL2xheW91dFwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBjbG9zaW5nIHRhZyBmb3IgbGF5b3V0IHRhZzogJHtjb2RlfWApO1xuICB9XG5cbiAgdG9rZW5zLnNoaWZ0KCk7XG5cbiAgY29tcGlsZWQucHVzaChgJHt2YXJuYW1lfSA9ICR7Y29tcGlsZWRGaWx0ZXJzfTtgKTtcbiAgY29uc3QgeyBkYXRhVmFybmFtZSB9ID0gZW52Lm9wdGlvbnM7XG5cbiAgY29tcGlsZWQucHVzaChcbiAgICBgY29uc3QgX190bXAgPSBhd2FpdCBfX2Vudi5ydW4oJHtmaWxlfSxcbiAgICAgIHsuLi4ke2RhdGFWYXJuYW1lfSR7ZGF0YSA/IGAsICR7ZGF0YX1gIDogXCJcIn0sIGNvbnRlbnQ6ICR7XG4gICAgICBlbnYuY29tcGlsZUZpbHRlcnModG9rZW5zLCB2YXJuYW1lKVxuICAgIH19LFxuICAgICAgX19maWxlXG4gICAgKTtcbiAgICAke291dHB1dH0gKz0gX190bXAuY29udGVudDtgLFxuICApO1xuXG4gIGNvbXBpbGVkLnB1c2goXCJ9XCIpO1xuICByZXR1cm4gY29tcGlsZWQuam9pbihcIlxcblwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxlQUFlO0VBQ2IsT0FBTyxDQUFDO0lBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2hCO0FBQ0Y7QUFFQSxTQUFTLFVBQ1AsR0FBZ0IsRUFDaEIsSUFBWSxFQUNaLE1BQWMsRUFDZCxNQUFlO0VBRWYsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLFlBQVk7SUFDL0I7RUFDRjtFQUVBLE1BQU0sUUFBUSxNQUFNLE1BQ2xCO0VBR0YsSUFBSSxDQUFDLE9BQU87SUFDVixNQUFNLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNO0VBQ3pDO0VBRUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxLQUFLLEdBQUc7RUFFeEIsTUFBTSxVQUFVLE9BQU8sVUFBVSxDQUFDLGNBQzlCLFNBQVMsWUFDVDtFQUVKLE1BQU0sV0FBcUIsRUFBRTtFQUM3QixNQUFNLGtCQUFrQixJQUFJLGNBQWMsQ0FBQyxRQUFRO0VBRW5ELFNBQVMsSUFBSSxDQUFDO0VBQ2QsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxNQUFNLENBQUM7RUFDcEMsU0FBUyxJQUFJLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxTQUFTO0lBQUM7R0FBVTtFQUUvRCxJQUFJLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUc7SUFDM0UsTUFBTSxJQUFJLE1BQU0sQ0FBQyxvQ0FBb0MsRUFBRSxNQUFNO0VBQy9EO0VBRUEsT0FBTyxLQUFLO0VBRVosU0FBUyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ2hELE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLE9BQU87RUFFbkMsU0FBUyxJQUFJLENBQ1gsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLO1VBQ2hDLEVBQUUsY0FBYyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxHQUFHLFdBQVcsRUFDdkQsSUFBSSxjQUFjLENBQUMsUUFBUSxTQUM1Qjs7O0lBR0QsRUFBRSxPQUFPLGtCQUFrQixDQUFDO0VBRzlCLFNBQVMsSUFBSSxDQUFDO0VBQ2QsT0FBTyxTQUFTLElBQUksQ0FBQztBQUN2QiJ9
+// denoCacheMetadata=1325891884776050806,2514876098733503599 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/82be6b592ac37957d410393f36f1be296af35cb697766e1f81c60de69db56891.js b/vendor/gen/https/deno.land/82be6b592ac37957d410393f36f1be296af35cb697766e1f81c60de69db56891.js
new file mode 100644
index 0000000..a7bc1f6
--- /dev/null
+++ b/vendor/gen/https/deno.land/82be6b592ac37957d410393f36f1be296af35cb697766e1f81c60de69db56891.js
@@ -0,0 +1,29 @@
+export function distance(a, b) {
+ if (a.length == 0) {
+ return b.length;
+ }
+ if (b.length == 0) {
+ return a.length;
+ }
+ const matrix = [];
+ for(let i = 0; i <= b.length; i++){
+ matrix[i] = [
+ i
+ ];
+ }
+ for(let j = 0; j <= a.length; j++){
+ matrix[0][j] = j;
+ }
+ for(let i = 1; i <= b.length; i++){
+ for(let j = 1; j <= a.length; j++){
+ if (b.charAt(i - 1) == a.charAt(j - 1)) {
+ matrix[i][j] = matrix[i - 1][j - 1];
+ } else {
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1));
+ }
+ }
+ }
+ return matrix[b.length][a.length];
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvX3V0aWxzL2Rpc3RhbmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChhLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIGIubGVuZ3RoO1xuICB9XG4gIGlmIChiLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIGEubGVuZ3RoO1xuICB9XG4gIGNvbnN0IG1hdHJpeCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgbWF0cml4W2ldID0gW2ldO1xuICB9XG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICBtYXRyaXhbMF1bal0gPSBqO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgIG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSxcbiAgICAgICAgICBNYXRoLm1pbihtYXRyaXhbaV1baiAtIDFdICsgMSwgbWF0cml4W2kgLSAxXVtqXSArIDEpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLFNBQVMsQ0FBUyxFQUFFLENBQVM7RUFDM0MsSUFBSSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ2pCLE9BQU8sRUFBRSxNQUFNO0VBQ2pCO0VBQ0EsSUFBSSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ2pCLE9BQU8sRUFBRSxNQUFNO0VBQ2pCO0VBQ0EsTUFBTSxTQUFTLEVBQUU7RUFDakIsSUFBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUs7SUFDbEMsTUFBTSxDQUFDLEVBQUUsR0FBRztNQUFDO0tBQUU7RUFDakI7RUFDQSxJQUFLLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSztJQUNsQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztFQUNqQjtFQUNBLElBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFLO0lBQ2xDLElBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFLO01BQ2xDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSTtRQUN0QyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFO01BQ3JDLE9BQU87UUFDTCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FDckIsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEdBQ3ZCLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHO01BRXREO0lBQ0Y7RUFDRjtFQUNBLE9BQU8sTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7QUFDbkMifQ==
+// denoCacheMetadata=15586839186454948210,9092579433090902087 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8561c6478eca43443120a3e3813a65d7e221d72be0364620cc7930ce341a1319.js b/vendor/gen/https/deno.land/8561c6478eca43443120a3e3813a65d7e221d72be0364620cc7930ce341a1319.js
new file mode 100644
index 0000000..bf88381
--- /dev/null
+++ b/vendor/gen/https/deno.land/8561c6478eca43443120a3e3813a65d7e221d72be0364620cc7930ce341a1319.js
@@ -0,0 +1,213 @@
+import { KeyMap, KeyMapCtrl, KeyMapShift, SpecialKeyMap } from "./key_codes.ts";
+// https://en.wikipedia.org/wiki/ANSI_escape_code
+// https://github.com/nodejs/node/blob/v13.13.0/lib/internal/readline/utils.js
+const kUTF16SurrogateThreshold = 0x10000; // 2 ** 16
+const kEscape = "\x1b";
+/**
+ * Parse ansi escape sequence.
+ * @param data Ansi escape sequence.
+ * ```
+ * parse("\x04\x18");
+ * ```
+ * ```
+ * [
+ * KeyCode { name: "d", sequence: "\x04", ctrl: true, meta: false, shift: false },
+ * KeyCode { name: "x", sequence: "\x18", ctrl: true, meta: false, shift: false },
+ * ]
+ * ```
+ */ export function parse(data) {
+ /*
+ * Some patterns seen in terminal key escape codes, derived from combos seen
+ * at http://www.midnight-commander.org/browser/lib/tty/key.c
+ *
+ * ESC letter
+ * ESC [ letter
+ * ESC [ modifier letter
+ * ESC [ 1 ; modifier letter
+ * ESC [ num char
+ * ESC [ num ; modifier char
+ * ESC O letter
+ * ESC O modifier letter
+ * ESC O 1 ; modifier letter
+ * ESC N letter
+ * ESC [ [ num ; modifier char
+ * ESC [ [ 1 ; modifier letter
+ * ESC ESC [ num char
+ * ESC ESC O letter
+ *
+ * - char is usually ~ but $ and ^ also happen with rxvt
+ * - modifier is 1 +
+ * (shift * 1) +
+ * (left_alt * 2) +
+ * (ctrl * 4) +
+ * (right_alt * 8)
+ * - two leading ESCs apparently mean the same as one leading ESC
+ */ let index = -1;
+ const keys = [];
+ const input = data instanceof Uint8Array ? new TextDecoder().decode(data) : data;
+ const hasNext = ()=>input.length - 1 >= index + 1;
+ const next = ()=>input[++index];
+ parseNext();
+ return keys;
+ function parseNext() {
+ let ch = next();
+ let s = ch;
+ let escaped = false;
+ const key = {
+ name: undefined,
+ char: undefined,
+ sequence: undefined,
+ code: undefined,
+ ctrl: false,
+ meta: false,
+ shift: false
+ };
+ if (ch === kEscape && hasNext()) {
+ escaped = true;
+ s += ch = next();
+ if (ch === kEscape) {
+ s += ch = next();
+ }
+ }
+ if (escaped && (ch === "O" || ch === "[")) {
+ // ANSI escape sequence
+ let code = ch;
+ let modifier = 0;
+ if (ch === "O") {
+ // ESC O letter
+ // ESC O modifier letter
+ s += ch = next();
+ if (ch >= "0" && ch <= "9") {
+ modifier = (Number(ch) >> 0) - 1;
+ s += ch = next();
+ }
+ code += ch;
+ } else if (ch === "[") {
+ // ESC [ letter
+ // ESC [ modifier letter
+ // ESC [ [ modifier letter
+ // ESC [ [ num char
+ s += ch = next();
+ if (ch === "[") {
+ // \x1b[[A
+ // ^--- escape codes might have a second bracket
+ code += ch;
+ s += ch = next();
+ }
+ /*
+ * Here and later we try to buffer just enough data to get
+ * a complete ascii sequence.
+ *
+ * We have basically two classes of ascii characters to process:
+ *
+ * 1. `\x1b[24;5~` should be parsed as { code: '[24~', modifier: 5 }
+ *
+ * This particular example is featuring Ctrl+F12 in xterm.
+ *
+ * - `;5` part is optional, e.g. it could be `\x1b[24~`
+ * - first part can contain one or two digits
+ *
+ * So the generic regexp is like /^\d\d?(;\d)?[~^$]$/
+ *
+ * 2. `\x1b[1;5H` should be parsed as { code: '[H', modifier: 5 }
+ *
+ * This particular example is featuring Ctrl+Home in xterm.
+ *
+ * - `1;5` part is optional, e.g. it could be `\x1b[H`
+ * - `1;` part is optional, e.g. it could be `\x1b[5H`
+ *
+ * So the generic regexp is like /^((\d;)?\d)?[A-Za-z]$/
+ */ const cmdStart = s.length - 1;
+ // Skip one or two leading digits
+ if (ch >= "0" && ch <= "9") {
+ s += ch = next();
+ if (ch >= "0" && ch <= "9") {
+ s += ch = next();
+ }
+ }
+ // skip modifier
+ if (ch === ";") {
+ s += ch = next();
+ if (ch >= "0" && ch <= "9") {
+ s += next();
+ }
+ }
+ /*
+ * We buffered enough data, now trying to extract code
+ * and modifier from it
+ */ const cmd = s.slice(cmdStart);
+ let match;
+ if (match = cmd.match(/^(\d\d?)(;(\d))?([~^$])$/)) {
+ code += match[1] + match[4];
+ modifier = (Number(match[3]) || 1) - 1;
+ } else if (match = cmd.match(/^((\d;)?(\d))?([A-Za-z])$/)) {
+ code += match[4];
+ modifier = (Number(match[3]) || 1) - 1;
+ } else {
+ code += cmd;
+ }
+ }
+ // Parse the key modifier
+ key.ctrl = !!(modifier & 4);
+ key.meta = !!(modifier & 10);
+ key.shift = !!(modifier & 1);
+ key.code = code;
+ // Parse the key itself
+ if (code in KeyMap) {
+ key.name = KeyMap[code];
+ } else if (code in KeyMapShift) {
+ key.name = KeyMapShift[code];
+ key.shift = true;
+ } else if (code in KeyMapCtrl) {
+ key.name = KeyMapCtrl[code];
+ key.ctrl = true;
+ } else {
+ key.name = "undefined";
+ }
+ } else if (ch in SpecialKeyMap) {
+ key.name = SpecialKeyMap[ch];
+ key.meta = escaped;
+ if (key.name === "space") {
+ key.char = ch;
+ }
+ } else if (!escaped && ch <= "\x1a") {
+ // ctrl+letter
+ key.name = String.fromCharCode(ch.charCodeAt(0) + "a".charCodeAt(0) - 1);
+ key.ctrl = true;
+ key.char = key.name;
+ } else if (/^[0-9A-Za-z]$/.test(ch)) {
+ // Letter, number, shift+letter
+ key.name = ch.toLowerCase();
+ key.shift = /^[A-Z]$/.test(ch);
+ key.meta = escaped;
+ key.char = ch;
+ } else if (escaped) {
+ // Escape sequence timeout
+ key.name = ch.length ? undefined : "escape";
+ key.meta = true;
+ } else {
+ key.name = ch;
+ key.char = ch;
+ }
+ key.sequence = s;
+ if (s.length !== 0 && (key.name !== undefined || escaped) || charLengthAt(s, 0) === s.length) {
+ keys.push(key);
+ } else {
+ throw new Error("Unrecognized or broken escape sequence");
+ }
+ if (hasNext()) {
+ parseNext();
+ }
+ }
+}
+function charLengthAt(str, i) {
+ const pos = str.codePointAt(i);
+ if (typeof pos === "undefined") {
+ // Pretend to move to the right. This is necessary to autocomplete while
+ // moving to the right.
+ return 1;
+ }
+ return pos >= kUTF16SurrogateThreshold ? 2 : 1;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1Ljcva2V5Y29kZS9rZXlfY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlNYXAsIEtleU1hcEN0cmwsIEtleU1hcFNoaWZ0LCBTcGVjaWFsS2V5TWFwIH0gZnJvbSBcIi4va2V5X2NvZGVzLnRzXCI7XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMy4xMy4wL2xpYi9pbnRlcm5hbC9yZWFkbGluZS91dGlscy5qc1xuXG5jb25zdCBrVVRGMTZTdXJyb2dhdGVUaHJlc2hvbGQgPSAweDEwMDAwOyAvLyAyICoqIDE2XG5jb25zdCBrRXNjYXBlID0gXCJcXHgxYlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleUNvZGUge1xuICBuYW1lPzogc3RyaW5nO1xuICBzZXF1ZW5jZT86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgY3RybD86IGJvb2xlYW47XG4gIG1ldGE/OiBib29sZWFuO1xuICBzaGlmdD86IGJvb2xlYW47XG4gIGNoYXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgYW5zaSBlc2NhcGUgc2VxdWVuY2UuXG4gKiBAcGFyYW0gZGF0YSBBbnNpIGVzY2FwZSBzZXF1ZW5jZS5cbiAqIGBgYFxuICogcGFyc2UoXCJcXHgwNFxceDE4XCIpO1xuICogYGBgXG4gKiBgYGBcbiAqIFtcbiAqICAgS2V5Q29kZSB7IG5hbWU6IFwiZFwiLCBzZXF1ZW5jZTogXCJcXHgwNFwiLCBjdHJsOiB0cnVlLCBtZXRhOiBmYWxzZSwgc2hpZnQ6IGZhbHNlIH0sXG4gKiAgIEtleUNvZGUgeyBuYW1lOiBcInhcIiwgc2VxdWVuY2U6IFwiXFx4MThcIiwgY3RybDogdHJ1ZSwgbWV0YTogZmFsc2UsIHNoaWZ0OiBmYWxzZSB9LFxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShkYXRhOiBVaW50OEFycmF5IHwgc3RyaW5nKTogS2V5Q29kZVtdIHtcbiAgLypcbiAgICogU29tZSBwYXR0ZXJucyBzZWVuIGluIHRlcm1pbmFsIGtleSBlc2NhcGUgY29kZXMsIGRlcml2ZWQgZnJvbSBjb21ib3Mgc2VlblxuICAgKiBhdCBodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvYnJvd3Nlci9saWIvdHR5L2tleS5jXG4gICAqXG4gICAqIEVTQyBsZXR0ZXJcbiAgICogRVNDIFsgbGV0dGVyXG4gICAqIEVTQyBbIG1vZGlmaWVyIGxldHRlclxuICAgKiBFU0MgWyAxIDsgbW9kaWZpZXIgbGV0dGVyXG4gICAqIEVTQyBbIG51bSBjaGFyXG4gICAqIEVTQyBbIG51bSA7IG1vZGlmaWVyIGNoYXJcbiAgICogRVNDIE8gbGV0dGVyXG4gICAqIEVTQyBPIG1vZGlmaWVyIGxldHRlclxuICAgKiBFU0MgTyAxIDsgbW9kaWZpZXIgbGV0dGVyXG4gICAqIEVTQyBOIGxldHRlclxuICAgKiBFU0MgWyBbIG51bSA7IG1vZGlmaWVyIGNoYXJcbiAgICogRVNDIFsgWyAxIDsgbW9kaWZpZXIgbGV0dGVyXG4gICAqIEVTQyBFU0MgWyBudW0gY2hhclxuICAgKiBFU0MgRVNDIE8gbGV0dGVyXG4gICAqXG4gICAqIC0gY2hhciBpcyB1c3VhbGx5IH4gYnV0ICQgYW5kIF4gYWxzbyBoYXBwZW4gd2l0aCByeHZ0XG4gICAqIC0gbW9kaWZpZXIgaXMgMSArXG4gICAqICAgICAgICAgICAgICAgKHNoaWZ0ICAgICAqIDEpICtcbiAgICogICAgICAgICAgICAgICAobGVmdF9hbHQgICogMikgK1xuICAgKiAgICAgICAgICAgICAgIChjdHJsICAgICAgKiA0KSArXG4gICAqICAgICAgICAgICAgICAgKHJpZ2h0X2FsdCAqIDgpXG4gICAqIC0gdHdvIGxlYWRpbmcgRVNDcyBhcHBhcmVudGx5IG1lYW4gdGhlIHNhbWUgYXMgb25lIGxlYWRpbmcgRVNDXG4gICAqL1xuICBsZXQgaW5kZXggPSAtMTtcbiAgY29uc3Qga2V5czogS2V5Q29kZVtdID0gW107XG4gIGNvbnN0IGlucHV0OiBzdHJpbmcgPSBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgID8gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpXG4gICAgOiBkYXRhO1xuXG4gIGNvbnN0IGhhc05leHQgPSAoKSA9PiBpbnB1dC5sZW5ndGggLSAxID49IGluZGV4ICsgMTtcbiAgY29uc3QgbmV4dCA9ICgpID0+IGlucHV0WysraW5kZXhdO1xuXG4gIHBhcnNlTmV4dCgpO1xuXG4gIHJldHVybiBrZXlzO1xuXG4gIGZ1bmN0aW9uIHBhcnNlTmV4dCgpIHtcbiAgICBsZXQgY2g6IHN0cmluZyA9IG5leHQoKTtcbiAgICBsZXQgczogc3RyaW5nID0gY2g7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGtleTogS2V5Q29kZSA9IHtcbiAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIGNoYXI6IHVuZGVmaW5lZCxcbiAgICAgIHNlcXVlbmNlOiB1bmRlZmluZWQsXG4gICAgICBjb2RlOiB1bmRlZmluZWQsXG4gICAgICBjdHJsOiBmYWxzZSxcbiAgICAgIG1ldGE6IGZhbHNlLFxuICAgICAgc2hpZnQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBpZiAoY2ggPT09IGtFc2NhcGUgJiYgaGFzTmV4dCgpKSB7XG4gICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgIHMgKz0gY2ggPSBuZXh0KCk7XG5cbiAgICAgIGlmIChjaCA9PT0ga0VzY2FwZSkge1xuICAgICAgICBzICs9IGNoID0gbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlc2NhcGVkICYmIChjaCA9PT0gXCJPXCIgfHwgY2ggPT09IFwiW1wiKSkge1xuICAgICAgLy8gQU5TSSBlc2NhcGUgc2VxdWVuY2VcbiAgICAgIGxldCBjb2RlOiBzdHJpbmcgPSBjaDtcbiAgICAgIGxldCBtb2RpZmllciA9IDA7XG5cbiAgICAgIGlmIChjaCA9PT0gXCJPXCIpIHtcbiAgICAgICAgLy8gRVNDIE8gbGV0dGVyXG4gICAgICAgIC8vIEVTQyBPIG1vZGlmaWVyIGxldHRlclxuICAgICAgICBzICs9IGNoID0gbmV4dCgpO1xuXG4gICAgICAgIGlmIChjaCA+PSBcIjBcIiAmJiBjaCA8PSBcIjlcIikge1xuICAgICAgICAgIG1vZGlmaWVyID0gKE51bWJlcihjaCkgPj4gMCkgLSAxO1xuICAgICAgICAgIHMgKz0gY2ggPSBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlICs9IGNoO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJbXCIpIHtcbiAgICAgICAgLy8gRVNDIFsgbGV0dGVyXG4gICAgICAgIC8vIEVTQyBbIG1vZGlmaWVyIGxldHRlclxuICAgICAgICAvLyBFU0MgWyBbIG1vZGlmaWVyIGxldHRlclxuICAgICAgICAvLyBFU0MgWyBbIG51bSBjaGFyXG4gICAgICAgIHMgKz0gY2ggPSBuZXh0KCk7XG5cbiAgICAgICAgaWYgKGNoID09PSBcIltcIikge1xuICAgICAgICAgIC8vIFxceDFiW1tBXG4gICAgICAgICAgLy8gICAgICBeLS0tIGVzY2FwZSBjb2RlcyBtaWdodCBoYXZlIGEgc2Vjb25kIGJyYWNrZXRcbiAgICAgICAgICBjb2RlICs9IGNoO1xuICAgICAgICAgIHMgKz0gY2ggPSBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgKiBIZXJlIGFuZCBsYXRlciB3ZSB0cnkgdG8gYnVmZmVyIGp1c3QgZW5vdWdoIGRhdGEgdG8gZ2V0XG4gICAgICAgICAqIGEgY29tcGxldGUgYXNjaWkgc2VxdWVuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdlIGhhdmUgYmFzaWNhbGx5IHR3byBjbGFzc2VzIG9mIGFzY2lpIGNoYXJhY3RlcnMgdG8gcHJvY2VzczpcbiAgICAgICAgICpcbiAgICAgICAgICogMS4gYFxceDFiWzI0OzV+YCBzaG91bGQgYmUgcGFyc2VkIGFzIHsgY29kZTogJ1syNH4nLCBtb2RpZmllcjogNSB9XG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcGFydGljdWxhciBleGFtcGxlIGlzIGZlYXR1cmluZyBDdHJsK0YxMiBpbiB4dGVybS5cbiAgICAgICAgICpcbiAgICAgICAgICogIC0gYDs1YCBwYXJ0IGlzIG9wdGlvbmFsLCBlLmcuIGl0IGNvdWxkIGJlIGBcXHgxYlsyNH5gXG4gICAgICAgICAqICAtIGZpcnN0IHBhcnQgY2FuIGNvbnRhaW4gb25lIG9yIHR3byBkaWdpdHNcbiAgICAgICAgICpcbiAgICAgICAgICogU28gdGhlIGdlbmVyaWMgcmVnZXhwIGlzIGxpa2UgL15cXGRcXGQ/KDtcXGQpP1t+XiRdJC9cbiAgICAgICAgICpcbiAgICAgICAgICogMi4gYFxceDFiWzE7NUhgIHNob3VsZCBiZSBwYXJzZWQgYXMgeyBjb2RlOiAnW0gnLCBtb2RpZmllcjogNSB9XG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcGFydGljdWxhciBleGFtcGxlIGlzIGZlYXR1cmluZyBDdHJsK0hvbWUgaW4geHRlcm0uXG4gICAgICAgICAqXG4gICAgICAgICAqICAtIGAxOzVgIHBhcnQgaXMgb3B0aW9uYWwsIGUuZy4gaXQgY291bGQgYmUgYFxceDFiW0hgXG4gICAgICAgICAqICAtIGAxO2AgcGFydCBpcyBvcHRpb25hbCwgZS5nLiBpdCBjb3VsZCBiZSBgXFx4MWJbNUhgXG4gICAgICAgICAqXG4gICAgICAgICAqIFNvIHRoZSBnZW5lcmljIHJlZ2V4cCBpcyBsaWtlIC9eKChcXGQ7KT9cXGQpP1tBLVphLXpdJC9cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNtZFN0YXJ0OiBudW1iZXIgPSBzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgLy8gU2tpcCBvbmUgb3IgdHdvIGxlYWRpbmcgZGlnaXRzXG4gICAgICAgIGlmIChjaCA+PSBcIjBcIiAmJiBjaCA8PSBcIjlcIikge1xuICAgICAgICAgIHMgKz0gY2ggPSBuZXh0KCk7XG5cbiAgICAgICAgICBpZiAoY2ggPj0gXCIwXCIgJiYgY2ggPD0gXCI5XCIpIHtcbiAgICAgICAgICAgIHMgKz0gY2ggPSBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBtb2RpZmllclxuICAgICAgICBpZiAoY2ggPT09IFwiO1wiKSB7XG4gICAgICAgICAgcyArPSBjaCA9IG5leHQoKTtcblxuICAgICAgICAgIGlmIChjaCA+PSBcIjBcIiAmJiBjaCA8PSBcIjlcIikge1xuICAgICAgICAgICAgcyArPSBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogV2UgYnVmZmVyZWQgZW5vdWdoIGRhdGEsIG5vdyB0cnlpbmcgdG8gZXh0cmFjdCBjb2RlXG4gICAgICAgICAqIGFuZCBtb2RpZmllciBmcm9tIGl0XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBjbWQ6IHN0cmluZyA9IHMuc2xpY2UoY21kU3RhcnQpO1xuICAgICAgICBsZXQgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsO1xuXG4gICAgICAgIGlmICgobWF0Y2ggPSBjbWQubWF0Y2goL14oXFxkXFxkPykoOyhcXGQpKT8oW35eJF0pJC8pKSkge1xuICAgICAgICAgIGNvZGUgKz0gbWF0Y2hbMV0gKyBtYXRjaFs0XTtcbiAgICAgICAgICBtb2RpZmllciA9IChOdW1iZXIobWF0Y2hbM10pIHx8IDEpIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBjbWQubWF0Y2goL14oKFxcZDspPyhcXGQpKT8oW0EtWmEtel0pJC8pKSkge1xuICAgICAgICAgIGNvZGUgKz0gbWF0Y2hbNF07XG4gICAgICAgICAgbW9kaWZpZXIgPSAoTnVtYmVyKG1hdGNoWzNdKSB8fCAxKSAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSArPSBjbWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgdGhlIGtleSBtb2RpZmllclxuICAgICAga2V5LmN0cmwgPSAhIShtb2RpZmllciAmIDQpO1xuICAgICAga2V5Lm1ldGEgPSAhIShtb2RpZmllciAmIDEwKTtcbiAgICAgIGtleS5zaGlmdCA9ICEhKG1vZGlmaWVyICYgMSk7XG4gICAgICBrZXkuY29kZSA9IGNvZGU7XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBrZXkgaXRzZWxmXG4gICAgICBpZiAoY29kZSBpbiBLZXlNYXApIHtcbiAgICAgICAga2V5Lm5hbWUgPSBLZXlNYXBbY29kZV07XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgaW4gS2V5TWFwU2hpZnQpIHtcbiAgICAgICAga2V5Lm5hbWUgPSBLZXlNYXBTaGlmdFtjb2RlXTtcbiAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSBpbiBLZXlNYXBDdHJsKSB7XG4gICAgICAgIGtleS5uYW1lID0gS2V5TWFwQ3RybFtjb2RlXTtcbiAgICAgICAga2V5LmN0cmwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5Lm5hbWUgPSBcInVuZGVmaW5lZFwiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggaW4gU3BlY2lhbEtleU1hcCkge1xuICAgICAga2V5Lm5hbWUgPSBTcGVjaWFsS2V5TWFwW2NoXTtcbiAgICAgIGtleS5tZXRhID0gZXNjYXBlZDtcblxuICAgICAgaWYgKGtleS5uYW1lID09PSBcInNwYWNlXCIpIHtcbiAgICAgICAga2V5LmNoYXIgPSBjaDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFlc2NhcGVkICYmIGNoIDw9IFwiXFx4MWFcIikge1xuICAgICAgLy8gY3RybCtsZXR0ZXJcbiAgICAgIGtleS5uYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgY2guY2hhckNvZGVBdCgwKSArIFwiYVwiLmNoYXJDb2RlQXQoMCkgLSAxLFxuICAgICAgKTtcbiAgICAgIGtleS5jdHJsID0gdHJ1ZTtcblxuICAgICAga2V5LmNoYXIgPSBrZXkubmFtZTtcbiAgICB9IGVsc2UgaWYgKC9eWzAtOUEtWmEtel0kLy50ZXN0KGNoKSkge1xuICAgICAgLy8gTGV0dGVyLCBudW1iZXIsIHNoaWZ0K2xldHRlclxuICAgICAga2V5Lm5hbWUgPSBjaC50b0xvd2VyQ2FzZSgpO1xuICAgICAga2V5LnNoaWZ0ID0gL15bQS1aXSQvLnRlc3QoY2gpO1xuICAgICAga2V5Lm1ldGEgPSBlc2NhcGVkO1xuICAgICAga2V5LmNoYXIgPSBjaDtcbiAgICB9IGVsc2UgaWYgKGVzY2FwZWQpIHtcbiAgICAgIC8vIEVzY2FwZSBzZXF1ZW5jZSB0aW1lb3V0XG4gICAgICBrZXkubmFtZSA9IGNoLmxlbmd0aCA/IHVuZGVmaW5lZCA6IFwiZXNjYXBlXCI7XG4gICAgICBrZXkubWV0YSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleS5uYW1lID0gY2g7XG4gICAgICBrZXkuY2hhciA9IGNoO1xuICAgIH1cblxuICAgIGtleS5zZXF1ZW5jZSA9IHM7XG5cbiAgICBpZiAoXG4gICAgICAocy5sZW5ndGggIT09IDAgJiYgKGtleS5uYW1lICE9PSB1bmRlZmluZWQgfHwgZXNjYXBlZCkpIHx8XG4gICAgICBjaGFyTGVuZ3RoQXQocywgMCkgPT09IHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG9yIGJyb2tlbiBlc2NhcGUgc2VxdWVuY2VcIik7XG4gICAgfVxuXG4gICAgaWYgKGhhc05leHQoKSkge1xuICAgICAgcGFyc2VOZXh0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoYXJMZW5ndGhBdChzdHI6IHN0cmluZywgaTogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcG9zOiBudW1iZXIgfCB1bmRlZmluZWQgPSBzdHIuY29kZVBvaW50QXQoaSk7XG4gIGlmICh0eXBlb2YgcG9zID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gUHJldGVuZCB0byBtb3ZlIHRvIHRoZSByaWdodC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXV0b2NvbXBsZXRlIHdoaWxlXG4gICAgLy8gbW92aW5nIHRvIHRoZSByaWdodC5cbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gcG9zID49IGtVVEYxNlN1cnJvZ2F0ZVRocmVzaG9sZCA/IDIgOiAxO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxRQUFRLGlCQUFpQjtBQUVoRixpREFBaUQ7QUFDakQsOEVBQThFO0FBRTlFLE1BQU0sMkJBQTJCLFNBQVMsVUFBVTtBQUNwRCxNQUFNLFVBQVU7QUFZaEI7Ozs7Ozs7Ozs7OztDQVlDLEdBQ0QsT0FBTyxTQUFTLE1BQU0sSUFBeUI7RUFDN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJDLEdBQ0QsSUFBSSxRQUFRLENBQUM7RUFDYixNQUFNLE9BQWtCLEVBQUU7RUFDMUIsTUFBTSxRQUFnQixnQkFBZ0IsYUFDbEMsSUFBSSxjQUFjLE1BQU0sQ0FBQyxRQUN6QjtFQUVKLE1BQU0sVUFBVSxJQUFNLE1BQU0sTUFBTSxHQUFHLEtBQUssUUFBUTtFQUNsRCxNQUFNLE9BQU8sSUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNO0VBRWpDO0VBRUEsT0FBTztFQUVQLFNBQVM7SUFDUCxJQUFJLEtBQWE7SUFDakIsSUFBSSxJQUFZO0lBQ2hCLElBQUksVUFBVTtJQUVkLE1BQU0sTUFBZTtNQUNuQixNQUFNO01BQ04sTUFBTTtNQUNOLFVBQVU7TUFDVixNQUFNO01BQ04sTUFBTTtNQUNOLE1BQU07TUFDTixPQUFPO0lBQ1Q7SUFFQSxJQUFJLE9BQU8sV0FBVyxXQUFXO01BQy9CLFVBQVU7TUFDVixLQUFLLEtBQUs7TUFFVixJQUFJLE9BQU8sU0FBUztRQUNsQixLQUFLLEtBQUs7TUFDWjtJQUNGO0lBRUEsSUFBSSxXQUFXLENBQUMsT0FBTyxPQUFPLE9BQU8sR0FB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
+// denoCacheMetadata=14702111650470027656,16162461279732150427 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/86998418cd1baf272ddca9e3c8b33b508e05b30a09f7ad3ca24152a0287bc2c4.js b/vendor/gen/https/deno.land/86998418cd1baf272ddca9e3c8b33b508e05b30a09f7ad3ca24152a0287bc2c4.js
new file mode 100644
index 0000000..52873fc
--- /dev/null
+++ b/vendor/gen/https/deno.land/86998418cd1baf272ddca9e3c8b33b508e05b30a09f7ad3ca24152a0287bc2c4.js
@@ -0,0 +1,51 @@
+import { matchExtension } from "./utils/path.ts";
+/**
+ * Class to store and run the (pre)processors
+ */ export default class Processors {
+ /** Processors and the assigned extensions */ processors = new Map();
+ /** Loaded extensions cache */ loadedExtensions = new Set();
+ /** Assign a processor to some extensions */ set(extensions, processor) {
+ if (Array.isArray(extensions)) {
+ extensions.forEach((extension)=>{
+ if (extension.charAt(0) !== ".") {
+ throw new Error(`Invalid extension ${extension}. It must start with '.'`);
+ }
+ });
+ }
+ this.processors.set(processor, extensions);
+ }
+ /** Return all extensions registered by this processor */ get extensions() {
+ return new Set([
+ ...this.processors.values().filter(Array.isArray)
+ ].flat());
+ }
+ /** Apply the processors to the provided pages */ async run(pages) {
+ this.loadedExtensions.clear();
+ for (const [process, extensions] of this.processors){
+ // Process all loaded pages
+ if (extensions === "*") {
+ await process([
+ ...pages
+ ], pages);
+ continue;
+ }
+ const filtered = pages.filter((page)=>pageMatches(extensions, page));
+ await process(filtered, pages);
+ }
+ }
+}
+function pageMatches(exts, page) {
+ if (page.isCopy) {
+ return false;
+ }
+ if (exts === "*") {
+ return true;
+ }
+ if (page.src.ext && exts.includes(page.src.ext)) {
+ return true;
+ }
+ const url = page.outputPath;
+ return matchExtension(exts, url);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9wcm9jZXNzb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hdGNoRXh0ZW5zaW9uIH0gZnJvbSBcIi4vdXRpbHMvcGF0aC50c1wiO1xuXG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbnMgfSBmcm9tIFwiLi91dGlscy9wYXRoLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2UgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5cbi8qKlxuICogQ2xhc3MgdG8gc3RvcmUgYW5kIHJ1biB0aGUgKHByZSlwcm9jZXNzb3JzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2Nlc3NvcnMge1xuICAvKiogUHJvY2Vzc29ycyBhbmQgdGhlIGFzc2lnbmVkIGV4dGVuc2lvbnMgKi9cbiAgcHJvY2Vzc29ycyA9IG5ldyBNYXA8UHJvY2Vzc29yLCBFeHRlbnNpb25zPigpO1xuXG4gIC8qKiBMb2FkZWQgZXh0ZW5zaW9ucyBjYWNoZSAqL1xuICBsb2FkZWRFeHRlbnNpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqIEFzc2lnbiBhIHByb2Nlc3NvciB0byBzb21lIGV4dGVuc2lvbnMgKi9cbiAgc2V0KGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIHByb2Nlc3NvcjogUHJvY2Vzc29yKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXh0ZW5zaW9ucykpIHtcbiAgICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiB7XG4gICAgICAgIGlmIChleHRlbnNpb24uY2hhckF0KDApICE9PSBcIi5cIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0uIEl0IG11c3Qgc3RhcnQgd2l0aCAnLidgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc29ycy5zZXQocHJvY2Vzc29yLCBleHRlbnNpb25zKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gYWxsIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCBieSB0aGlzIHByb2Nlc3NvciAqL1xuICBnZXQgZXh0ZW5zaW9ucygpOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgLi4udGhpcy5wcm9jZXNzb3JzLnZhbHVlcygpXG4gICAgICAgIC5maWx0ZXIoQXJyYXkuaXNBcnJheSksXG4gICAgXS5mbGF0KCkpO1xuICB9XG5cbiAgLyoqIEFwcGx5IHRoZSBwcm9jZXNzb3JzIHRvIHRoZSBwcm92aWRlZCBwYWdlcyAqL1xuICBhc3luYyBydW4ocGFnZXM6IFBhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9hZGVkRXh0ZW5zaW9ucy5jbGVhcigpO1xuXG4gICAgZm9yIChjb25zdCBbcHJvY2VzcywgZXh0ZW5zaW9uc10gb2YgdGhpcy5wcm9jZXNzb3JzKSB7XG4gICAgICAvLyBQcm9jZXNzIGFsbCBsb2FkZWQgcGFnZXNcbiAgICAgIGlmIChleHRlbnNpb25zID09PSBcIipcIikge1xuICAgICAgICBhd2FpdCBwcm9jZXNzKFsuLi5wYWdlc10sIHBhZ2VzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gcGFnZXMuZmlsdGVyKChwYWdlKSA9PiBwYWdlTWF0Y2hlcyhleHRlbnNpb25zLCBwYWdlKSk7XG4gICAgICBhd2FpdCBwcm9jZXNzKGZpbHRlcmVkLCBwYWdlcyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc29yIGNhbGxiYWNrIGlzIHVzZWQgaW4gYm90aCAocHJlKXByb2Nlc3MgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvY2Vzc29yID0gKFxuICBmaWx0ZXJlZFBhZ2VzOiBQYWdlW10sXG4gIGFsbFBhZ2VzOiBQYWdlW10sXG4pID0+IHZvaWQgfCBmYWxzZSB8IFByb21pc2U8dm9pZCB8IGZhbHNlPjtcblxuZnVuY3Rpb24gcGFnZU1hdGNoZXMoZXh0czogRXh0ZW5zaW9ucywgcGFnZTogUGFnZSk6IGJvb2xlYW4ge1xuICBpZiAocGFnZS5pc0NvcHkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZXh0cyA9PT0gXCIqXCIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwYWdlLnNyYy5leHQgJiYgZXh0cy5pbmNsdWRlcyhwYWdlLnNyYy5leHQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB1cmwgPSBwYWdlLm91dHB1dFBhdGg7XG5cbiAgcmV0dXJuIG1hdGNoRXh0ZW5zaW9uKGV4dHMsIHVybCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxjQUFjLFFBQVEsa0JBQWtCO0FBS2pEOztDQUVDLEdBQ0QsZUFBZSxNQUFNO0VBQ25CLDJDQUEyQyxHQUMzQyxhQUFhLElBQUksTUFBNkI7RUFFOUMsNEJBQTRCLEdBQzVCLG1CQUFtQixJQUFJLE1BQWM7RUFFckMsMENBQTBDLEdBQzFDLElBQUksVUFBc0IsRUFBRSxTQUFvQixFQUFRO0lBQ3RELElBQUksTUFBTSxPQUFPLENBQUMsYUFBYTtNQUM3QixXQUFXLE9BQU8sQ0FBQyxDQUFDO1FBQ2xCLElBQUksVUFBVSxNQUFNLENBQUMsT0FBTyxLQUFLO1VBQy9CLE1BQU0sSUFBSSxNQUNSLENBQUMsa0JBQWtCLEVBQUUsVUFBVSx3QkFBd0IsQ0FBQztRQUU1RDtNQUNGO0lBQ0Y7SUFFQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXO0VBQ2pDO0VBRUEsdURBQXVELEdBQ3ZELElBQUksYUFBMEI7SUFDNUIsT0FBTyxJQUFJLElBQUk7U0FDVixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FDdEIsTUFBTSxDQUFDLE1BQU0sT0FBTztLQUN4QixDQUFDLElBQUk7RUFDUjtFQUVBLCtDQUErQyxHQUMvQyxNQUFNLElBQUksS0FBYSxFQUFpQjtJQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSztJQUUzQixLQUFLLE1BQU0sQ0FBQyxTQUFTLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFFO01BQ25ELDJCQUEyQjtNQUMzQixJQUFJLGVBQWUsS0FBSztRQUN0QixNQUFNLFFBQVE7YUFBSTtTQUFNLEVBQUU7UUFDMUI7TUFDRjtNQUVBLE1BQU0sV0FBVyxNQUFNLE1BQU0sQ0FBQyxDQUFDLE9BQVMsWUFBWSxZQUFZO01BQ2hFLE1BQU0sUUFBUSxVQUFVO0lBQzFCO0VBQ0Y7QUFDRjtBQVVBLFNBQVMsWUFBWSxJQUFnQixFQUFFLElBQVU7RUFDL0MsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUNmLE9BQU87RUFDVDtFQUVBLElBQUksU0FBUyxLQUFLO0lBQ2hCLE9BQU87RUFDVDtFQUVBLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRztJQUMvQyxPQUFPO0VBQ1Q7RUFFQSxNQUFNLE1BQU0sS0FBSyxVQUFVO0VBRTNCLE9BQU8sZUFBZSxNQUFNO0FBQzlCIn0=
+// denoCacheMetadata=9723976210445770589,12971109121961959682 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/86ed0b9408c940603c7c1969618f57babb40be15d2912e0658e4ccd0f83bad98.js b/vendor/gen/https/deno.land/86ed0b9408c940603c7c1969618f57babb40be15d2912e0658e4ccd0f83bad98.js
new file mode 100644
index 0000000..84b31d2
--- /dev/null
+++ b/vendor/gen/https/deno.land/86ed0b9408c940603c7c1969618f57babb40be15d2912e0658e4ccd0f83bad98.js
@@ -0,0 +1,43 @@
+const envVars = new Map();
+export function setEnv(name, value) {
+ // Deno Deploy doesn't support permissions.requestSync
+ // https://github.com/denoland/deploy_feedback/issues/527
+ if (Deno.permissions.querySync?.({
+ name: "env"
+ }).state === "granted") {
+ Deno.env.set(name, value);
+ } else {
+ envVars.set(name, value);
+ }
+}
+export function env(name) {
+ if (envVars.has(name)) {
+ return envVars.get(name);
+ }
+ // Deno Deploy doesn't support permissions.requestSync
+ // https://github.com/denoland/deploy_feedback/issues/527
+ const allowed = !Deno.permissions.requestSync || Deno.permissions.requestSync({
+ name: "env"
+ }).state === "granted";
+ if (!allowed) {
+ return undefined;
+ }
+ const value = envVars.has(name) ? envVars.get(name) : Deno.env.get(name);
+ if (typeof value === "undefined") {
+ return undefined;
+ }
+ switch(value.toLowerCase()){
+ case "true":
+ case "on":
+ case "1":
+ return true;
+ case "false":
+ case "off":
+ case "0":
+ return false;
+ default:
+ return value;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9lbnYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZW52VmFycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbnYobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gIC8vIERlbm8gRGVwbG95IGRvZXNuJ3Qgc3VwcG9ydCBwZXJtaXNzaW9ucy5yZXF1ZXN0U3luY1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVwbG95X2ZlZWRiYWNrL2lzc3Vlcy81MjdcbiAgaWYgKERlbm8ucGVybWlzc2lvbnMucXVlcnlTeW5jPy4oeyBuYW1lOiBcImVudlwiIH0pLnN0YXRlID09PSBcImdyYW50ZWRcIikge1xuICAgIERlbm8uZW52LnNldChuYW1lLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZW52VmFycy5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnY8VD4obmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmIChlbnZWYXJzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiBlbnZWYXJzLmdldChuYW1lKSBhcyBUO1xuICB9XG5cbiAgLy8gRGVubyBEZXBsb3kgZG9lc24ndCBzdXBwb3J0IHBlcm1pc3Npb25zLnJlcXVlc3RTeW5jXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZXBsb3lfZmVlZGJhY2svaXNzdWVzLzUyN1xuICBjb25zdCBhbGxvd2VkID0gIURlbm8ucGVybWlzc2lvbnMucmVxdWVzdFN5bmMgfHxcbiAgICBEZW5vLnBlcm1pc3Npb25zLnJlcXVlc3RTeW5jKHsgbmFtZTogXCJlbnZcIiB9KS5zdGF0ZSA9PT0gXCJncmFudGVkXCI7XG5cbiAgaWYgKCFhbGxvd2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gZW52VmFycy5oYXMobmFtZSkgPyBlbnZWYXJzLmdldChuYW1lKSA6IERlbm8uZW52LmdldChuYW1lKTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN3aXRjaCAodmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJ0cnVlXCI6XG4gICAgY2FzZSBcIm9uXCI6XG4gICAgY2FzZSBcIjFcIjpcbiAgICAgIHJldHVybiB0cnVlIGFzIFQ7XG5cbiAgICBjYXNlIFwiZmFsc2VcIjpcbiAgICBjYXNlIFwib2ZmXCI6XG4gICAgY2FzZSBcIjBcIjpcbiAgICAgIHJldHVybiBmYWxzZSBhcyBUO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBUO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLElBQUk7QUFFcEIsT0FBTyxTQUFTLE9BQU8sSUFBWSxFQUFFLEtBQWE7RUFDaEQsc0RBQXNEO0VBQ3RELHlEQUF5RDtFQUN6RCxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVMsR0FBRztJQUFFLE1BQU07RUFBTSxHQUFHLFVBQVUsV0FBVztJQUNyRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTTtFQUNyQixPQUFPO0lBQ0wsUUFBUSxHQUFHLENBQUMsTUFBTTtFQUNwQjtBQUNGO0FBRUEsT0FBTyxTQUFTLElBQU8sSUFBWTtFQUNqQyxJQUFJLFFBQVEsR0FBRyxDQUFDLE9BQU87SUFDckIsT0FBTyxRQUFRLEdBQUcsQ0FBQztFQUNyQjtFQUVBLHNEQUFzRDtFQUN0RCx5REFBeUQ7RUFDekQsTUFBTSxVQUFVLENBQUMsS0FBSyxXQUFXLENBQUMsV0FBVyxJQUMzQyxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFBRSxNQUFNO0VBQU0sR0FBRyxLQUFLLEtBQUs7RUFFMUQsSUFBSSxDQUFDLFNBQVM7SUFDWixPQUFPO0VBQ1Q7RUFFQSxNQUFNLFFBQVEsUUFBUSxHQUFHLENBQUMsUUFBUSxRQUFRLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQztFQUVuRSxJQUFJLE9BQU8sVUFBVSxhQUFhO0lBQ2hDLE9BQU87RUFDVDtFQUVBLE9BQVEsTUFBTSxXQUFXO0lBQ3ZCLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztNQUNILE9BQU87SUFFVCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7TUFDSCxPQUFPO0lBRVQ7TUFDRSxPQUFPO0VBQ1g7QUFDRiJ9
+// denoCacheMetadata=769116353004672352,10288105138484284765 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/86f94448e3ea0bddb1075c51b2fbb6c04da42ae4cdc52751ab25bcd451a85379.js b/vendor/gen/https/deno.land/86f94448e3ea0bddb1075c51b2fbb6c04da42ae4cdc52751ab25bcd451a85379.js
new file mode 100644
index 0000000..55985df
--- /dev/null
+++ b/vendor/gen/https/deno.land/86f94448e3ea0bddb1075c51b2fbb6c04da42ae4cdc52751ab25bcd451a85379.js
@@ -0,0 +1,87 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(forTag);
+ env.utils.toIterator = toIterator;
+ };
+}
+function forTag(env, code, output, tokens) {
+ if (!code.startsWith("for ")) {
+ return;
+ }
+ const compiled = [];
+ const match = code.match(/^for\s+(await\s+)?(\w+)(?:,\s*(\w+))?\s+of\s+([\s|\S]+)$/);
+ if (!match) {
+ throw new Error(`Invalid for loop: ${code}`);
+ }
+ const [_, aw, var1, var2, collection] = match;
+ if (var2) {
+ compiled.push(`for ${aw || ""}(let [${var1}, ${var2}] of __env.utils.toIterator(${env.compileFilters(tokens, collection)}, true)) {`);
+ } else {
+ compiled.push(`for ${aw || ""}(let ${var1} of __env.utils.toIterator(${env.compileFilters(tokens, collection)})) {`);
+ }
+ compiled.push(...env.compileTokens(tokens, output, [
+ "/for"
+ ]));
+ tokens.shift();
+ compiled.push("}");
+ return compiled.join("\n");
+}
+function toIterator(// deno-lint-ignore no-explicit-any
+item, withKeys = false) {
+ if (item === undefined || item === null) {
+ return [];
+ }
+ if (Array.isArray(item)) {
+ return withKeys ? item.map((value, i)=>[
+ i,
+ value
+ ]) : item;
+ }
+ if (typeof item === "function") {
+ return toIterator(item(), withKeys);
+ }
+ if (typeof item === "object" && item !== null) {
+ if (typeof item[Symbol.iterator] === "function") {
+ if (withKeys) {
+ return iterableToEntries(item);
+ }
+ return item;
+ }
+ if (typeof item[Symbol.asyncIterator] === "function") {
+ if (withKeys) {
+ return asyncIterableToEntries(item);
+ }
+ return item;
+ }
+ return withKeys ? Object.entries(item) : Object.values(item);
+ }
+ if (typeof item === "string") {
+ return toIterator(item.split(""), withKeys);
+ }
+ if (typeof item === "number") {
+ return toIterator(new Array(item).fill(0).map((_, i)=>i + 1), withKeys);
+ }
+ return toIterator([
+ item
+ ], withKeys);
+}
+function* iterableToEntries(iterator) {
+ let i = 0;
+ for (const value of iterator){
+ yield [
+ i++,
+ value
+ ];
+ }
+}
+async function* asyncIterableToEntries(iterator) {
+ let i = 0;
+ for await (const value of iterator){
+ yield [
+ i++,
+ value
+ ];
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2Zvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4uL3NyYy90b2tlbml6ZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCk6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIGVudi50YWdzLnB1c2goZm9yVGFnKTtcbiAgICBlbnYudXRpbHMudG9JdGVyYXRvciA9IHRvSXRlcmF0b3I7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZvclRhZyhcbiAgZW52OiBFbnZpcm9ubWVudCxcbiAgY29kZTogc3RyaW5nLFxuICBvdXRwdXQ6IHN0cmluZyxcbiAgdG9rZW5zOiBUb2tlbltdLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb2RlLnN0YXJ0c1dpdGgoXCJmb3IgXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29tcGlsZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG1hdGNoID0gY29kZS5tYXRjaChcbiAgICAvXmZvclxccysoYXdhaXRcXHMrKT8oXFx3KykoPzosXFxzKihcXHcrKSk/XFxzK29mXFxzKyhbXFxzfFxcU10rKSQvLFxuICApO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9yIGxvb3A6ICR7Y29kZX1gKTtcbiAgfVxuICBjb25zdCBbXywgYXcsIHZhcjEsIHZhcjIsIGNvbGxlY3Rpb25dID0gbWF0Y2g7XG5cbiAgaWYgKHZhcjIpIHtcbiAgICBjb21waWxlZC5wdXNoKFxuICAgICAgYGZvciAke2F3IHx8IFwiXCJ9KGxldCBbJHt2YXIxfSwgJHt2YXIyfV0gb2YgX19lbnYudXRpbHMudG9JdGVyYXRvcigke1xuICAgICAgICBlbnYuY29tcGlsZUZpbHRlcnModG9rZW5zLCBjb2xsZWN0aW9uKVxuICAgICAgfSwgdHJ1ZSkpIHtgLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29tcGlsZWQucHVzaChcbiAgICAgIGBmb3IgJHthdyB8fCBcIlwifShsZXQgJHt2YXIxfSBvZiBfX2Vudi51dGlscy50b0l0ZXJhdG9yKCR7XG4gICAgICAgIGVudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIGNvbGxlY3Rpb24pXG4gICAgICB9KSkge2AsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBpbGVkLnB1c2goLi4uZW52LmNvbXBpbGVUb2tlbnModG9rZW5zLCBvdXRwdXQsIFtcIi9mb3JcIl0pKTtcbiAgdG9rZW5zLnNoaWZ0KCk7XG4gIGNvbXBpbGVkLnB1c2goXCJ9XCIpO1xuXG4gIHJldHVybiBjb21waWxlZC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiB0b0l0ZXJhdG9yKFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBpdGVtOiBhbnksXG4gIHdpdGhLZXlzID0gZmFsc2UsXG4pOiBJdGVyYWJsZTx1bmtub3duPiB8IEFzeW5jSXRlcmFibGU8dW5rbm93bj4gfCBBcnJheTx1bmtub3duPiB7XG4gIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgcmV0dXJuIHdpdGhLZXlzID8gaXRlbS5tYXAoKHZhbHVlLCBpKSA9PiBbaSwgdmFsdWVdKSA6IGl0ZW07XG4gIH1cblxuICBpZiAodHlwZW9mIGl0ZW0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB0b0l0ZXJhdG9yKGl0ZW0oKSwgd2l0aEtleXMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGl0ZW1bU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAod2l0aEtleXMpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlVG9FbnRyaWVzKGl0ZW0gYXMgSXRlcmFibGU8dW5rbm93bj4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW0gYXMgSXRlcmFibGU8dW5rbm93bj47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpdGVtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAod2l0aEtleXMpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jSXRlcmFibGVUb0VudHJpZXMoaXRlbSBhcyBBc3luY0l0ZXJhYmxlPHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW0gYXMgQXN5bmNJdGVyYWJsZTx1bmtub3duPjtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEtleXMgPyBPYmplY3QuZW50cmllcyhpdGVtKSA6IE9iamVjdC52YWx1ZXMoaXRlbSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdG9JdGVyYXRvcihpdGVtLnNwbGl0KFwiXCIpLCB3aXRoS2V5cyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdG9JdGVyYXRvcihuZXcgQXJyYXkoaXRlbSkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGkgKyAxKSwgd2l0aEtleXMpO1xuICB9XG5cbiAgcmV0dXJuIHRvSXRlcmF0b3IoW2l0ZW1dLCB3aXRoS2V5cyk7XG59XG5cbmZ1bmN0aW9uKiBpdGVyYWJsZVRvRW50cmllcyhcbiAgaXRlcmF0b3I6IEl0ZXJhYmxlPHVua25vd24+LFxuKTogR2VuZXJhdG9yPFtudW1iZXIsIHVua25vd25dPiB7XG4gIGxldCBpID0gMDtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYXRvcikge1xuICAgIHlpZWxkIFtpKyssIHZhbHVlXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiogYXN5bmNJdGVyYWJsZVRvRW50cmllcyhcbiAgaXRlcmF0b3I6IEFzeW5jSXRlcmFibGU8dW5rbm93bj4sXG4pOiBBc3luY0dlbmVyYXRvcjxbbnVtYmVyLCB1bmtub3duXT4ge1xuICBsZXQgaSA9IDA7XG4gIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgaXRlcmF0b3IpIHtcbiAgICB5aWVsZCBbaSsrLCB2YWx1ZV07XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxlQUFlO0VBQ2IsT0FBTyxDQUFDO0lBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2QsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHO0VBQ3pCO0FBQ0Y7QUFFQSxTQUFTLE9BQ1AsR0FBZ0IsRUFDaEIsSUFBWSxFQUNaLE1BQWMsRUFDZCxNQUFlO0VBRWYsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLFNBQVM7SUFDNUI7RUFDRjtFQUVBLE1BQU0sV0FBcUIsRUFBRTtFQUM3QixNQUFNLFFBQVEsS0FBSyxLQUFLLENBQ3RCO0VBR0YsSUFBSSxDQUFDLE9BQU87SUFDVixNQUFNLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU07RUFDN0M7RUFDQSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sTUFBTSxXQUFXLEdBQUc7RUFFeEMsSUFBSSxNQUFNO0lBQ1IsU0FBUyxJQUFJLENBQ1gsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLDRCQUE0QixFQUNoRSxJQUFJLGNBQWMsQ0FBQyxRQUFRLFlBQzVCLFVBQVUsQ0FBQztFQUVoQixPQUFPO0lBQ0wsU0FBUyxJQUFJLENBQ1gsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxLQUFLLDJCQUEyQixFQUNyRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLFlBQzVCLElBQUksQ0FBQztFQUVWO0VBRUEsU0FBUyxJQUFJLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxRQUFRO0lBQUM7R0FBTztFQUMzRCxPQUFPLEtBQUs7RUFDWixTQUFTLElBQUksQ0FBQztFQUVkLE9BQU8sU0FBUyxJQUFJLENBQUM7QUFDdkI7QUFFQSxTQUFTLFdBQ1AsbUNBQW1DO0FBQ25DLElBQVMsRUFDVCxXQUFXLEtBQUs7RUFFaEIsSUFBSSxTQUFTLGFBQWEsU0FBUyxNQUFNO0lBQ3ZDLE9BQU8sRUFBRTtFQUNYO0VBRUEsSUFBSSxNQUFNLE9BQU8sQ0FBQyxPQUFPO0lBQ3ZCLE9BQU8sV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBTTtRQUFDO1FBQUc7T0FBTSxJQUFJO0VBQ3pEO0VBRUEsSUFBSSxPQUFPLFNBQVMsWUFBWTtJQUM5QixPQUFPLFdBQVcsUUFBUTtFQUM1QjtFQUVBLElBQUksT0FBTyxTQUFTLFlBQVksU0FBUyxNQUFNO0lBQzdDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxRQUFRLENBQUMsS0FBSyxZQUFZO01BQy9DLElBQUksVUFBVTtRQUNaLE9BQU8sa0JBQWtCO01BQzNCO01BQ0EsT0FBTztJQUNUO0lBRUEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLGFBQWEsQ0FBQyxLQUFLLFlBQVk7TUFDcEQsSUFBSSxVQUFVO1FBQ1osT0FBTyx1QkFBdUI7TUFDaEM7TUFFQSxPQUFPO0lBQ1Q7SUFFQSxPQUFPLFdBQVcsT0FBTyxPQUFPLENBQUMsUUFBUSxPQUFPLE1BQU0sQ0FBQztFQUN6RDtFQUVBLElBQUksT0FBTyxTQUFTLFVBQVU7SUFDNUIsT0FBTyxXQUFXLEtBQUssS0FBSyxDQUFDLEtBQUs7RUFDcEM7RUFFQSxJQUFJLE9BQU8sU0FBUyxVQUFVO0lBQzVCLE9BQU8sV0FBVyxJQUFJLE1BQU0sTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQU0sSUFBSSxJQUFJO0VBQ2xFO0VBRUEsT0FBTyxXQUFXO0lBQUM7R0FBSyxFQUFFO0FBQzVCO0FBRUEsVUFBVSxrQkFDUixRQUEyQjtFQUUzQixJQUFJLElBQUk7RUFDUixLQUFLLE1BQU0sU0FBUyxTQUFVO0lBQzVCLE1BQU07TUFBQztNQUFLO0tBQU07RUFDcEI7QUFDRjtBQUVBLGdCQUFnQix1QkFDZCxRQUFnQztFQUVoQyxJQUFJLElBQUk7RUFDUixXQUFXLE1BQU0sU0FBUyxTQUFVO0lBQ2xDLE1BQU07TUFBQztNQUFLO0tBQU07RUFDcEI7QUFDRiJ9
+// denoCacheMetadata=15297346194400953528,2350012000724761390 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/88610722e66f8688b2f40e480ac27de34320384d2777d1aa682424f11c083f65.js b/vendor/gen/https/deno.land/88610722e66f8688b2f40e480ac27de34320384d2777d1aa682424f11c083f65.js
new file mode 100644
index 0000000..43c5925
--- /dev/null
+++ b/vendor/gen/https/deno.land/88610722e66f8688b2f40e480ac27de34320384d2777d1aa682424f11c083f65.js
@@ -0,0 +1,37 @@
+export default function() {
+ return (env)=>{
+ env.tokenPreprocessors.push(trim);
+ };
+}
+export function trim(_, tokens) {
+ for(let i = 0; i < tokens.length; i++){
+ const previous = tokens[i - 1];
+ const token = tokens[i];
+ const next = tokens[i + 1];
+ let [type, code] = token;
+ if ([
+ "tag",
+ "comment"
+ ].includes(type) && code.startsWith("-")) {
+ previous[1] = previous[1].trimEnd();
+ code = code.slice(1);
+ }
+ if ([
+ "tag",
+ "filter",
+ "comment"
+ ].includes(type) && code.endsWith("-")) {
+ next[1] = next[1].trimStart();
+ code = code.slice(0, -1);
+ }
+ // Trim tag and filter code
+ switch(type){
+ case "tag":
+ case "filter":
+ token[1] = code.trim();
+ break;
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL3RyaW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuLi9zcmMvdG9rZW5pemVyLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50LCBQbHVnaW4gfSBmcm9tIFwiLi4vc3JjL2Vudmlyb25tZW50LnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBQbHVnaW4ge1xuICByZXR1cm4gKGVudjogRW52aXJvbm1lbnQpID0+IHtcbiAgICBlbnYudG9rZW5QcmVwcm9jZXNzb3JzLnB1c2godHJpbSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltKF86IEVudmlyb25tZW50LCB0b2tlbnM6IFRva2VuW10pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRva2Vuc1tpIC0gMV07XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgY29uc3QgbmV4dCA9IHRva2Vuc1tpICsgMV07XG5cbiAgICBsZXQgW3R5cGUsIGNvZGVdID0gdG9rZW47XG5cbiAgICBpZiAoW1widGFnXCIsIFwiY29tbWVudFwiXS5pbmNsdWRlcyh0eXBlKSAmJiBjb2RlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICBwcmV2aW91c1sxXSA9IHByZXZpb3VzWzFdLnRyaW1FbmQoKTtcbiAgICAgIGNvZGUgPSBjb2RlLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGlmIChbXCJ0YWdcIiwgXCJmaWx0ZXJcIiwgXCJjb21tZW50XCJdLmluY2x1ZGVzKHR5cGUpICYmIGNvZGUuZW5kc1dpdGgoXCItXCIpKSB7XG4gICAgICBuZXh0WzFdID0gbmV4dFsxXS50cmltU3RhcnQoKTtcbiAgICAgIGNvZGUgPSBjb2RlLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICAvLyBUcmltIHRhZyBhbmQgZmlsdGVyIGNvZGVcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJ0YWdcIjpcbiAgICAgIGNhc2UgXCJmaWx0ZXJcIjpcbiAgICAgICAgdG9rZW5bMV0gPSBjb2RlLnRyaW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsZUFBZTtFQUNiLE9BQU8sQ0FBQztJQUNOLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDO0VBQzlCO0FBQ0Y7QUFFQSxPQUFPLFNBQVMsS0FBSyxDQUFjLEVBQUUsTUFBZTtFQUNsRCxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksT0FBTyxNQUFNLEVBQUUsSUFBSztJQUN0QyxNQUFNLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRTtJQUM5QixNQUFNLFFBQVEsTUFBTSxDQUFDLEVBQUU7SUFDdkIsTUFBTSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUU7SUFFMUIsSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBRW5CLElBQUk7TUFBQztNQUFPO0tBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNO01BQzdELFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPO01BQ2pDLE9BQU8sS0FBSyxLQUFLLENBQUM7SUFDcEI7SUFFQSxJQUFJO01BQUM7TUFBTztNQUFVO0tBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxNQUFNO01BQ3JFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTO01BQzNCLE9BQU8sS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3hCO0lBRUEsMkJBQTJCO0lBQzNCLE9BQVE7TUFDTixLQUFLO01BQ0wsS0FBSztRQUNILEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJO1FBQ3BCO0lBQ0o7RUFDRjtBQUNGIn0=
+// denoCacheMetadata=13861263811631081494,17862610890699020049 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8929470cdbe8fc71aae682fb1518570b7e7e42407fbb3a640aabcdeb49331a14.js b/vendor/gen/https/deno.land/8929470cdbe8fc71aae682fb1518570b7e7e42407fbb3a640aabcdeb49331a14.js
new file mode 100644
index 0000000..165d3ca
--- /dev/null
+++ b/vendor/gen/https/deno.land/8929470cdbe8fc71aae682fb1518570b7e7e42407fbb3a640aabcdeb49331a14.js
@@ -0,0 +1,105 @@
+import { join, relative } from "../deps/path.ts";
+import { normalizePath } from "./utils/path.ts";
+import Events from "./events.ts";
+export default class FSWatcher {
+ events = new Events();
+ options;
+ constructor(options){
+ this.options = options;
+ }
+ /** Add a listener to an event */ addEventListener(type, listener, options) {
+ this.events.addEventListener(type, listener, options);
+ return this;
+ }
+ /** Dispatch an event */ dispatchEvent(event) {
+ return this.events.dispatchEvent(event);
+ }
+ /** Start the file watcher */ async start() {
+ const { root, paths, ignore, debounce } = this.options;
+ const watcher = Deno.watchFs([
+ root,
+ ...paths ?? []
+ ]);
+ const changes = new Set();
+ let timer = 0;
+ let runningCallback = false;
+ await this.dispatchEvent({
+ type: "start"
+ });
+ const callback = async ()=>{
+ runningCallback = true;
+ const files = new Set(changes);
+ changes.clear();
+ if (!files.size) {
+ runningCallback = false;
+ return;
+ }
+ try {
+ const result = await this.dispatchEvent({
+ type: "change",
+ files: files
+ });
+ if (false === result) {
+ runningCallback = false;
+ return watcher.close();
+ }
+ } catch (err) {
+ await this.dispatchEvent({
+ type: "error",
+ error: err
+ });
+ }
+ runningCallback = false;
+ // New changes detected while processing
+ if (changes.size) {
+ callback();
+ }
+ };
+ for await (const event of watcher){
+ let paths = event.paths.map((path)=>normalizePath(path));
+ // Filter ignored paths
+ paths = paths.filter((path)=>ignore ? !ignore.some((ignore)=>typeof ignore === "string" ? path.startsWith(normalizePath(join(root, ignore, "/"))) || path === normalizePath(join(root, ignore)) : ignore(path)) : true);
+ if (!paths.length) {
+ continue;
+ }
+ paths.forEach((path)=>changes.add(normalizePath(relative(root, path))));
+ // Only start if processing queue is not already running
+ if (!runningCallback) {
+ // Debounce
+ clearTimeout(timer);
+ timer = setTimeout(callback, debounce ?? 100);
+ }
+ }
+ }
+}
+export class SiteWatcher {
+ site;
+ events = new Events();
+ constructor(site){
+ this.site = site;
+ }
+ /** Add a listener to an event */ addEventListener(type, listener, options) {
+ this.events.addEventListener(type, listener, options);
+ return this;
+ }
+ /** Dispatch an event */ dispatchEvent(event) {
+ return this.events.dispatchEvent(event);
+ }
+ /** Start the watcher */ async start() {
+ await this.dispatchEvent({
+ type: "start"
+ });
+ this.site.addEventListener("afterUpdate", (event)=>{
+ const files = new Set([
+ ...event.pages.map((page)=>page.outputPath),
+ ...event.staticFiles.map((file)=>file.outputPath)
+ ]);
+ this.dispatchEvent({
+ type: "change",
+ files
+ });
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS93YXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHJlbGF0aXZlIH0gZnJvbSBcIi4uL2RlcHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gXCIuL3V0aWxzL3BhdGgudHNcIjtcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZXZlbnRzLnRzXCI7XG5cbmltcG9ydCB0eXBlIFNpdGUgZnJvbSBcIi4vc2l0ZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgRXZlbnRMaXN0ZW5lciwgRXZlbnRPcHRpb25zIH0gZnJvbSBcIi4vZXZlbnRzLnRzXCI7XG5cbi8qKiBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxvY2FsIHNlcnZlciAqL1xuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqIFRoZSBmb2xkZXIgcm9vdCB0byB3YXRjaCAqL1xuICByb290OiBzdHJpbmc7XG5cbiAgLyoqIEV4dHJhIGZpbGVzIHRvIHdhdGNoICovXG4gIHBhdGhzPzogc3RyaW5nW107XG5cbiAgLyoqIFBhdGhzIGlnbm9yZWQgYnkgdGhlIHdhdGNoZXIgKi9cbiAgaWdub3JlPzogKHN0cmluZyB8ICgocGF0aDogc3RyaW5nKSA9PiBib29sZWFuKSlbXTtcblxuICAvKiogVGhlIGRlYm91bmNlIHdhaXRpbmcgdGltZSAqL1xuICBkZWJvdW5jZT86IG51bWJlcjtcbn1cblxuLyoqIEN1c3RvbSBldmVudHMgZm9yIHNlcnZlciAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAvKiogVGhlIGV2ZW50IHR5cGUgKi9cbiAgdHlwZTogV2F0Y2hFdmVudFR5cGU7XG5cbiAgLyoqIFRoZSBsaXN0IG9mIGNoYW5nZWQgZmlsZXMgKG9ubHkgZm9yIFwiY2hhbmdlXCIgZXZlbnRzKSAqL1xuICBmaWxlcz86IFNldDxzdHJpbmc+O1xuXG4gIC8qKiBUaGUgZXJyb3Igb2JqZWN0IChvbmx5IGZvciBcImVycm9yXCIgZXZlbnRzKSAqL1xuICBlcnJvcj86IEVycm9yO1xufVxuXG4vKiogVGhlIGF2YWlsYWJsZSBldmVudCB0eXBlcyAqL1xuZXhwb3J0IHR5cGUgV2F0Y2hFdmVudFR5cGUgPVxuICB8IFwic3RhcnRcIlxuICB8IFwiY2hhbmdlXCJcbiAgfCBcImVycm9yXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hlciB7XG4gIC8qKiBBZGQgYSBsaXN0ZW5lciB0byBhbiBldmVudCAqL1xuICBhZGRFdmVudExpc3RlbmVyKFxuICAgIHR5cGU6IFdhdGNoRXZlbnRUeXBlLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyPFdhdGNoRXZlbnQ+LFxuICAgIG9wdGlvbnM/OiBFdmVudE9wdGlvbnMsXG4gICk6IHRoaXM7XG5cbiAgLyoqIERpc3BhdGNoIGFuIGV2ZW50ICovXG4gIGRpc3BhdGNoRXZlbnQoZXZlbnQ6IFdhdGNoRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKiBTdGFydCB0aGUgd2F0Y2hlciAqL1xuICBzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGU1dhdGNoZXIgaW1wbGVtZW50cyBXYXRjaGVyIHtcbiAgZXZlbnRzOiBFdmVudHM8V2F0Y2hFdmVudD4gPSBuZXcgRXZlbnRzPFdhdGNoRXZlbnQ+KCk7XG4gIG9wdGlvbnM6IE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKiogQWRkIGEgbGlzdGVuZXIgdG8gYW4gZXZlbnQgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBXYXRjaEV2ZW50VHlwZSxcbiAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lcjxXYXRjaEV2ZW50PixcbiAgICBvcHRpb25zPzogRXZlbnRPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaCBhbiBldmVudCAqL1xuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBXYXRjaEV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqIFN0YXJ0IHRoZSBmaWxlIHdhdGNoZXIgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc3QgeyByb290LCBwYXRocywgaWdub3JlLCBkZWJvdW5jZSB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHdhdGNoZXIgPSBEZW5vLndhdGNoRnMoW3Jvb3QsIC4uLnBhdGhzID8/IFtdXSk7XG4gICAgY29uc3QgY2hhbmdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGxldCB0aW1lciA9IDA7XG4gICAgbGV0IHJ1bm5pbmdDYWxsYmFjayA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJzdGFydFwiIH0pO1xuXG4gICAgY29uc3QgY2FsbGJhY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICBydW5uaW5nQ2FsbGJhY2sgPSB0cnVlO1xuXG4gICAgICBjb25zdCBmaWxlcyA9IG5ldyBTZXQoY2hhbmdlcyk7XG4gICAgICBjaGFuZ2VzLmNsZWFyKCk7XG5cbiAgICAgIGlmICghZmlsZXMuc2l6ZSkge1xuICAgICAgICBydW5uaW5nQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgIHR5cGU6IFwiY2hhbmdlXCIsXG4gICAgICAgICAgZmlsZXM6IGZpbGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZhbHNlID09PSByZXN1bHQpIHtcbiAgICAgICAgICBydW5uaW5nQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gd2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJlcnJvclwiLCBlcnJvcjogZXJyIGFzIEVycm9yIH0pO1xuICAgICAgfVxuXG4gICAgICBydW5uaW5nQ2FsbGJhY2sgPSBmYWxzZTtcblxuICAgICAgLy8gTmV3IGNoYW5nZXMgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZ1xuICAgICAgaWYgKGNoYW5nZXMuc2l6ZSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHdhdGNoZXIpIHtcbiAgICAgIGxldCBwYXRocyA9IGV2ZW50LnBhdGhzLm1hcCgocGF0aCkgPT4gbm9ybWFsaXplUGF0aChwYXRoKSk7XG5cbiAgICAgIC8vIEZpbHRlciBpZ25vcmVkIHBhdGhzXG4gICAgICBwYXRocyA9IHBhdGhzLmZpbHRlcigocGF0aCkgPT5cbiAgICAgICAgaWdub3JlXG4gICAgICAgICAgPyAhaWdub3JlLnNvbWUoKGlnbm9yZSkgPT5cbiAgICAgICAgICAgIHR5cGVvZiBpZ25vcmUgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyAocGF0aC5zdGFydHNXaXRoKG5vcm1hbGl6ZVBhdGgoam9pbihyb290LCBpZ25vcmUsIFwiL1wiKSkpIHx8XG4gICAgICAgICAgICAgICAgcGF0aCA9PT0gbm9ybWFsaXplUGF0aChqb2luKHJvb3QsIGlnbm9yZSkpKVxuICAgICAgICAgICAgICA6IGlnbm9yZShwYXRoKVxuICAgICAgICAgIClcbiAgICAgICAgICA6IHRydWVcbiAgICAgICk7XG5cbiAgICAgIGlmICghcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiBjaGFuZ2VzLmFkZChub3JtYWxpemVQYXRoKHJlbGF0aXZlKHJvb3QsIHBhdGgpKSkpO1xuXG4gICAgICAvLyBPbmx5IHN0YXJ0IGlmIHByb2Nlc3NpbmcgcXVldWUgaXMgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgaWYgKCFydW5uaW5nQ2FsbGJhY2spIHtcbiAgICAgICAgLy8gRGVib3VuY2VcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWJvdW5jZSA/PyAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2l0ZVdhdGNoZXIgaW1wbGVtZW50cyBXYXRjaGVyIHtcbiAgc2l0ZTogU2l0ZTtcbiAgZXZlbnRzOiBFdmVudHM8V2F0Y2hFdmVudD4gPSBuZXcgRXZlbnRzPFdhdGNoRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSkge1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gIH1cblxuICAvKiogQWRkIGEgbGlzdGVuZXIgdG8gYW4gZXZlbnQgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBXYXRjaEV2ZW50VHlwZSxcbiAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lcjxXYXRjaEV2ZW50PixcbiAgICBvcHRpb25zPzogRXZlbnRPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaCBhbiBldmVudCAqL1xuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBXYXRjaEV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqIFN0YXJ0IHRoZSB3YXRjaGVyICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwic3RhcnRcIiB9KTtcbiAgICB0aGlzLnNpdGUuYWRkRXZlbnRMaXN0ZW5lcihcImFmdGVyVXBkYXRlXCIsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZmlsZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgLi4uZXZlbnQucGFnZXMubWFwKChwYWdlKSA9PiBwYWdlLm91dHB1dFBhdGgpLFxuICAgICAgICAuLi5ldmVudC5zdGF0aWNGaWxlcy5tYXAoKGZpbGUpID0+IGZpbGUub3V0cHV0UGF0aCksXG4gICAgICBdKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiY2hhbmdlXCIsIGZpbGVzIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxJQUFJLEVBQUUsUUFBUSxRQUFRLGtCQUFrQjtBQUNqRCxTQUFTLGFBQWEsUUFBUSxrQkFBa0I7QUFDaEQsT0FBTyxZQUFZLGNBQWM7QUFxRGpDLGVBQWUsTUFBTTtFQUNuQixTQUE2QixJQUFJLFNBQXFCO0VBQ3RELFFBQWlCO0VBRWpCLFlBQVksT0FBZ0IsQ0FBRTtJQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHO0VBQ2pCO0VBRUEsK0JBQStCLEdBQy9CLGlCQUNFLElBQW9CLEVBQ3BCLFFBQW1DLEVBQ25DLE9BQXNCLEVBQ3RCO0lBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLFVBQVU7SUFDN0MsT0FBTyxJQUFJO0VBQ2I7RUFFQSxzQkFBc0IsR0FDdEIsY0FBYyxLQUFpQixFQUFFO0lBQy9CLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7RUFDbkM7RUFFQSwyQkFBMkIsR0FDM0IsTUFBTSxRQUFRO0lBQ1osTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxP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
+// denoCacheMetadata=5905373876817351848,1051794774580326910 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/893432f34c8af4ef278b36a3dbcc5d0deec203fc3e6749eea430c0dbd489c850.js b/vendor/gen/https/deno.land/893432f34c8af4ef278b36a3dbcc5d0deec203fc3e6749eea430c0dbd489c850.js
new file mode 100644
index 0000000..00c3b7c
--- /dev/null
+++ b/vendor/gen/https/deno.land/893432f34c8af4ef278b36a3dbcc5d0deec203fc3e6749eea430c0dbd489c850.js
@@ -0,0 +1,78 @@
+import { posix, SEPARATOR } from "../../deps/path.ts";
+/**
+ * Convert the Windows paths (that use the separator "\")
+ * to Posix paths (with the separator "/")
+ * and ensure it starts with "/".
+ */ export function normalizePath(path, rootToRemove) {
+ if (rootToRemove) {
+ path = path.replace(rootToRemove, "");
+ }
+ if (SEPARATOR !== "/") {
+ path = path.replaceAll(SEPARATOR, "/");
+ // Is absolute Windows path (C:/...)
+ if (path.includes(":/")) {
+ if (rootToRemove && path.startsWith(rootToRemove)) {
+ return posix.join("/", path.replace(rootToRemove, ""));
+ }
+ return path;
+ }
+ }
+ const absolute = posix.join("/", path);
+ return rootToRemove && absolute.startsWith(rootToRemove) ? posix.join("/", absolute.replace(rootToRemove, "")) : absolute;
+}
+/** Check if the path is an URL */ export function isUrl(path) {
+ return !!path.match(/^(https?|file):\/\//);
+}
+/** Check if the path is absolute */ export function isAbsolutePath(path) {
+ return SEPARATOR !== "/" ? /^\w:[\/\\]/.test(path) : path.startsWith("/");
+}
+/** Replace the extension of a path */ export function replaceExtension(path, ext) {
+ return path.replace(/\.\w+$/, ext);
+}
+/** Split a path to path + extension */ export function getPathAndExtension(path) {
+ const extension = getExtension(path);
+ if (!extension) {
+ return [
+ path,
+ ""
+ ];
+ }
+ const pathWithoutExtension = path.slice(0, -extension.length);
+ return [
+ pathWithoutExtension,
+ extension
+ ];
+}
+/** Get the extension of a path (this works better than std/path) */ export function getExtension(path) {
+ const match = path.match(/\.\w+$/);
+ return match ? match[0].toLowerCase() : "";
+}
+export function matchExtension(exts, path) {
+ if (exts === "*") {
+ return true;
+ }
+ return exts.some((ext)=>path.endsWith(ext));
+}
+/**
+ * Resolve the path of an included file
+ * Used in the template engines and processors
+ */ export function resolveInclude(path, includesDir, fromDir, rootToRemove) {
+ if (isUrl(path)) {
+ return path;
+ }
+ if (path.startsWith(".")) {
+ if (!fromDir) {
+ throw new Error(`Cannot load "${path}" without a base directory`);
+ }
+ return normalizePath(posix.join(fromDir, path), rootToRemove);
+ }
+ const normalized = normalizePath(path, rootToRemove);
+ return normalized.startsWith(normalizePath(posix.join(includesDir, "/"))) ? normalized : normalizePath(posix.join(includesDir, normalized));
+}
+/**
+ * decodeURI() can't decode the `%` character, as it is used in any encoded character
+ */ export function decodeURIComponentSafe(path) {
+ return decodeURIComponent(path.replace(/%(?![0-9a-fA-F]+)/g, "%25"));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBvc2l4LCBTRVBBUkFUT1IgfSBmcm9tIFwiLi4vLi4vZGVwcy9wYXRoLnRzXCI7XG5cbi8qKlxuICogQ29udmVydCB0aGUgV2luZG93cyBwYXRocyAodGhhdCB1c2UgdGhlIHNlcGFyYXRvciBcIlxcXCIpXG4gKiB0byBQb3NpeCBwYXRocyAod2l0aCB0aGUgc2VwYXJhdG9yIFwiL1wiKVxuICogYW5kIGVuc3VyZSBpdCBzdGFydHMgd2l0aCBcIi9cIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nLCByb290VG9SZW1vdmU/OiBzdHJpbmcpIHtcbiAgaWYgKHJvb3RUb1JlbW92ZSkge1xuICAgIHBhdGggPSBwYXRoLnJlcGxhY2Uocm9vdFRvUmVtb3ZlLCBcIlwiKTtcbiAgfVxuXG4gIGlmIChTRVBBUkFUT1IgIT09IFwiL1wiKSB7XG4gICAgcGF0aCA9IHBhdGgucmVwbGFjZUFsbChTRVBBUkFUT1IsIFwiL1wiKTtcblxuICAgIC8vIElzIGFic29sdXRlIFdpbmRvd3MgcGF0aCAoQzovLi4uKVxuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiOi9cIikpIHtcbiAgICAgIGlmIChyb290VG9SZW1vdmUgJiYgcGF0aC5zdGFydHNXaXRoKHJvb3RUb1JlbW92ZSkpIHtcbiAgICAgICAgcmV0dXJuIHBvc2l4LmpvaW4oXCIvXCIsIHBhdGgucmVwbGFjZShyb290VG9SZW1vdmUsIFwiXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWJzb2x1dGUgPSBwb3NpeC5qb2luKFwiL1wiLCBwYXRoKTtcbiAgcmV0dXJuIHJvb3RUb1JlbW92ZSAmJiBhYnNvbHV0ZS5zdGFydHNXaXRoKHJvb3RUb1JlbW92ZSlcbiAgICA/IHBvc2l4LmpvaW4oXCIvXCIsIGFic29sdXRlLnJlcGxhY2Uocm9vdFRvUmVtb3ZlLCBcIlwiKSlcbiAgICA6IGFic29sdXRlO1xufVxuXG4vKiogQ2hlY2sgaWYgdGhlIHBhdGggaXMgYW4gVVJMICovXG5leHBvcnQgZnVuY3Rpb24gaXNVcmwocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGgubWF0Y2goL14oaHR0cHM/fGZpbGUpOlxcL1xcLy8pO1xufVxuXG4vKiogQ2hlY2sgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFNFUEFSQVRPUiAhPT0gXCIvXCIgPyAvXlxcdzpbXFwvXFxcXF0vLnRlc3QocGF0aCkgOiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xufVxuXG4vKiogUmVwbGFjZSB0aGUgZXh0ZW5zaW9uIG9mIGEgcGF0aCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFeHRlbnNpb24oXG4gIHBhdGg6IHN0cmluZyxcbiAgZXh0OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC5cXHcrJC8sIGV4dCk7XG59XG5cbi8qKiBTcGxpdCBhIHBhdGggdG8gcGF0aCArIGV4dGVuc2lvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGhBbmRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGdldEV4dGVuc2lvbihwYXRoKTtcbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gW3BhdGgsIFwiXCJdO1xuICB9XG4gIGNvbnN0IHBhdGhXaXRob3V0RXh0ZW5zaW9uID0gcGF0aC5zbGljZSgwLCAtZXh0ZW5zaW9uLmxlbmd0aCk7XG4gIHJldHVybiBbcGF0aFdpdGhvdXRFeHRlbnNpb24sIGV4dGVuc2lvbl07XG59XG5cbi8qKiBHZXQgdGhlIGV4dGVuc2lvbiBvZiBhIHBhdGggKHRoaXMgd29ya3MgYmV0dGVyIHRoYW4gc3RkL3BhdGgpICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcGF0aC5tYXRjaCgvXFwuXFx3KyQvKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKSA6IFwiXCI7XG59XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbnMgPSBzdHJpbmdbXSB8IFwiKlwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hFeHRlbnNpb24oZXh0czogRXh0ZW5zaW9ucywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChleHRzID09PSBcIipcIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGV4dHMuc29tZSgoZXh0KSA9PiBwYXRoLmVuZHNXaXRoKGV4dCkpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHBhdGggb2YgYW4gaW5jbHVkZWQgZmlsZVxuICogVXNlZCBpbiB0aGUgdGVtcGxhdGUgZW5naW5lcyBhbmQgcHJvY2Vzc29yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluY2x1ZGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgaW5jbHVkZXNEaXI6IHN0cmluZyxcbiAgZnJvbURpcj86IHN0cmluZyxcbiAgcm9vdFRvUmVtb3ZlPzogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgaWYgKGlzVXJsKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBpZiAocGF0aC5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgIGlmICghZnJvbURpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbG9hZCBcIiR7cGF0aH1cIiB3aXRob3V0IGEgYmFzZSBkaXJlY3RvcnlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplUGF0aChwb3NpeC5qb2luKGZyb21EaXIsIHBhdGgpLCByb290VG9SZW1vdmUpO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgocGF0aCwgcm9vdFRvUmVtb3ZlKTtcblxuICByZXR1cm4gbm9ybWFsaXplZC5zdGFydHNXaXRoKG5vcm1hbGl6ZVBhdGgocG9zaXguam9pbihpbmNsdWRlc0RpciwgXCIvXCIpKSlcbiAgICA/IG5vcm1hbGl6ZWRcbiAgICA6IG5vcm1hbGl6ZVBhdGgocG9zaXguam9pbihpbmNsdWRlc0Rpciwgbm9ybWFsaXplZCkpO1xufVxuXG4vKipcbiAqIGRlY29kZVVSSSgpIGNhbid0IGRlY29kZSB0aGUgYCVgIGNoYXJhY3RlciwgYXMgaXQgaXMgdXNlZCBpbiBhbnkgZW5jb2RlZCBjaGFyYWN0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSUNvbXBvbmVudFNhZmUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRoLnJlcGxhY2UoLyUoPyFbMC05YS1mQS1GXSspL2csIFwiJTI1XCIpKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQUssRUFBRSxTQUFTLFFBQVEscUJBQXFCO0FBRXREOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVMsY0FBYyxJQUFZLEVBQUUsWUFBcUI7RUFDL0QsSUFBSSxjQUFjO0lBQ2hCLE9BQU8sS0FBSyxPQUFPLENBQUMsY0FBYztFQUNwQztFQUVBLElBQUksY0FBYyxLQUFLO0lBQ3JCLE9BQU8sS0FBSyxVQUFVLENBQUMsV0FBVztJQUVsQyxvQ0FBb0M7SUFDcEMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPO01BQ3ZCLElBQUksZ0JBQWdCLEtBQUssVUFBVSxDQUFDLGVBQWU7UUFDakQsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLGNBQWM7TUFDcEQ7TUFFQSxPQUFPO0lBQ1Q7RUFDRjtFQUVBLE1BQU0sV0FBVyxNQUFNLElBQUksQ0FBQyxLQUFLO0VBQ2pDLE9BQU8sZ0JBQWdCLFNBQVMsVUFBVSxDQUFDLGdCQUN2QyxNQUFNLElBQUksQ0FBQyxLQUFLLFNBQVMsT0FBTyxDQUFDLGNBQWMsT0FDL0M7QUFDTjtBQUVBLGdDQUFnQyxHQUNoQyxPQUFPLFNBQVMsTUFBTSxJQUFZO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3RCO0FBRUEsa0NBQWtDLEdBQ2xDLE9BQU8sU0FBUyxlQUFlLElBQVk7RUFDekMsT0FBTyxjQUFjLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztBQUN2RTtBQUVBLG9DQUFvQyxHQUNwQyxPQUFPLFNBQVMsaUJBQ2QsSUFBWSxFQUNaLEdBQVc7RUFFWCxPQUFPLEtBQUssT0FBTyxDQUFDLFVBQVU7QUFDaEM7QUFFQSxxQ0FBcUMsR0FDckMsT0FBTyxTQUFTLG9CQUFvQixJQUFZO0VBQzlDLE1BQU0sWUFBWSxhQUFhO0VBQy9CLElBQUksQ0FBQyxXQUFXO0lBQ2QsT0FBTztNQUFDO01BQU07S0FBRztFQUNuQjtFQUNBLE1BQU0sdUJBQXVCLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLE1BQU07RUFDNUQsT0FBTztJQUFDO0lBQXNCO0dBQVU7QUFDMUM7QUFFQSxrRUFBa0UsR0FDbEUsT0FBTyxTQUFTLGFBQWEsSUFBWTtFQUN2QyxNQUFNLFFBQVEsS0FBSyxLQUFLLENBQUM7RUFDekIsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLO0FBQzFDO0FBSUEsT0FBTyxTQUFTLGVBQWUsSUFBZ0IsRUFBRSxJQUFZO0VBQzNELElBQUksU0FBUyxLQUFLO0lBQ2hCLE9BQU87RUFDVDtFQUVBLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFRLEtBQUssUUFBUSxDQUFDO0FBQzFDO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLGVBQ2QsSUFBWSxFQUNaLFdBQW1CLEVBQ25CLE9BQWdCLEVBQ2hCLFlBQXFCO0VBRXJCLElBQUksTUFBTSxPQUFPO0lBQ2YsT0FBTztFQUNUO0VBRUEsSUFBSSxLQUFLLFVBQVUsQ0FBQyxNQUFNO0lBQ3hCLElBQUksQ0FBQyxTQUFTO01BQ1osTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSywwQkFBMEIsQ0FBQztJQUNsRTtJQUVBLE9BQU8sY0FBYyxNQUFNLElBQUksQ0FBQyxTQUFTLE9BQU87RUFDbEQ7RUFFQSxNQUFNLGFBQWEsY0FBYyxNQUFNO0VBRXZDLE9BQU8sV0FBVyxVQUFVLENBQUMsY0FBYyxNQUFNLElBQUksQ0FBQyxhQUFhLFNBQy9ELGFBQ0EsY0FBYyxNQUFNLElBQUksQ0FBQyxhQUFhO0FBQzVDO0FBRUE7O0NBRUMsR0FDRCxPQUFPLFNBQVMsdUJBQXVCLElBQVk7RUFDakQsT0FBTyxtQkFBbUIsS0FBSyxPQUFPLENBQUMsc0JBQXNCO0FBQy9EIn0=
+// denoCacheMetadata=17835470127055906488,3896949353918868687 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/89ad6ac51ee2a5f2898c804219dc6e99fd3e304e28a49a796a4b9fd3ce793d2f.js b/vendor/gen/https/deno.land/89ad6ac51ee2a5f2898c804219dc6e99fd3e304e28a49a796a4b9fd3ce793d2f.js
new file mode 100644
index 0000000..a4a6679
--- /dev/null
+++ b/vendor/gen/https/deno.land/89ad6ac51ee2a5f2898c804219dc6e99fd3e304e28a49a796a4b9fd3ce793d2f.js
@@ -0,0 +1,26 @@
+import { Provider } from "../provider.ts";
+export class DenoLandProvider extends Provider {
+ name = "deno.land";
+ repositoryUrl = "https://deno.land/x/";
+ registryUrl = "https://deno.land/x/";
+ moduleName;
+ constructor({ name } = {}){
+ super();
+ this.moduleName = name;
+ }
+ async getVersions(name) {
+ const response = await fetch(`https://cdn.deno.land/${this.moduleName ?? name}/meta/versions.json`);
+ if (!response.ok) {
+ throw new Error("couldn't fetch the latest version - try again after sometime");
+ }
+ return await response.json();
+ }
+ getRepositoryUrl(name) {
+ return new URL(`${this.moduleName ?? name}/`, this.repositoryUrl).href;
+ }
+ getRegistryUrl(name, version) {
+ return new URL(`${this.moduleName ?? name}@${version}/`, this.registryUrl).href;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC91cGdyYWRlL3Byb3ZpZGVyL2Rlbm9fbGFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgVmVyc2lvbnMgfSBmcm9tIFwiLi4vcHJvdmlkZXIudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZW5vTGFuZFByb3ZpZGVyT3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBEZW5vTGFuZFByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXIge1xuICBuYW1lID0gXCJkZW5vLmxhbmRcIjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3J5VXJsID0gXCJodHRwczovL2Rlbm8ubGFuZC94L1wiO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5VXJsID0gXCJodHRwczovL2Rlbm8ubGFuZC94L1wiO1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZU5hbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoeyBuYW1lIH06IERlbm9MYW5kUHJvdmlkZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubW9kdWxlTmFtZSA9IG5hbWU7XG4gIH1cblxuICBhc3luYyBnZXRWZXJzaW9ucyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8VmVyc2lvbnM+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYGh0dHBzOi8vY2RuLmRlbm8ubGFuZC8ke3RoaXMubW9kdWxlTmFtZSA/PyBuYW1lfS9tZXRhL3ZlcnNpb25zLmpzb25gLFxuICAgICk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNvdWxkbid0IGZldGNoIHRoZSBsYXRlc3QgdmVyc2lvbiAtIHRyeSBhZ2FpbiBhZnRlciBzb21ldGltZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeVVybChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVVJMKGAke3RoaXMubW9kdWxlTmFtZSA/PyBuYW1lfS9gLCB0aGlzLnJlcG9zaXRvcnlVcmwpLmhyZWY7XG4gIH1cblxuICBnZXRSZWdpc3RyeVVybChuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBVUkwoYCR7dGhpcy5tb2R1bGVOYW1lID8/IG5hbWV9QCR7dmVyc2lvbn0vYCwgdGhpcy5yZWdpc3RyeVVybClcbiAgICAgIC5ocmVmO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxRQUFRLFFBQWtCLGlCQUFpQjtBQU1wRCxPQUFPLE1BQU0seUJBQXlCO0VBQ3BDLE9BQU8sWUFBWTtFQUNGLGdCQUFnQix1QkFBdUI7RUFDdkMsY0FBYyx1QkFBdUI7RUFDckMsV0FBb0I7RUFFckMsWUFBWSxFQUFFLElBQUksRUFBMkIsR0FBRyxDQUFDLENBQUMsQ0FBRTtJQUNsRCxLQUFLO0lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRztFQUNwQjtFQUVBLE1BQU0sWUFDSixJQUFZLEVBQ087SUFDbkIsTUFBTSxXQUFXLE1BQU0sTUFDckIsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssbUJBQW1CLENBQUM7SUFFdkUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO01BQ2hCLE1BQU0sSUFBSSxNQUNSO0lBRUo7SUFFQSxPQUFPLE1BQU0sU0FBUyxJQUFJO0VBQzVCO0VBRUEsaUJBQWlCLElBQVksRUFBVTtJQUNyQyxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUk7RUFDeEU7RUFFQSxlQUFlLElBQVksRUFBRSxPQUFlLEVBQVU7SUFDcEQsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFDdEUsSUFBSTtFQUNUO0FBQ0YifQ==
+// denoCacheMetadata=7454842681798002881,16625641813352336726 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8a02dcdbb7385b814998c348f029efb817aa93be139f0be6f6fbdb009d364f72.js b/vendor/gen/https/deno.land/8a02dcdbb7385b814998c348f029efb817aa93be139f0be6f6fbdb009d364f72.js
new file mode 100644
index 0000000..9ecf95e
--- /dev/null
+++ b/vendor/gen/https/deno.land/8a02dcdbb7385b814998c348f029efb817aa93be139f0be6f6fbdb009d364f72.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/yaml@1.0.6";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy95YW1sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJqc3I6QHN0ZC95YW1sQDEuMC42XCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IifQ==
+// denoCacheMetadata=3422642981563961368,2749290080844356366 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8a1d4511b8f2b9aed2a8d06d26234b32d0b2e2fd089c56788746a84ce2b5657a.js b/vendor/gen/https/deno.land/8a1d4511b8f2b9aed2a8d06d26234b32d0b2e2fd089c56788746a84ce2b5657a.js
new file mode 100644
index 0000000..c8b2304
--- /dev/null
+++ b/vendor/gen/https/deno.land/8a1d4511b8f2b9aed2a8d06d26234b32d0b2e2fd089c56788746a84ce2b5657a.js
@@ -0,0 +1,714 @@
+import { join, posix } from "../deps/path.ts";
+import { merge } from "./utils/object.ts";
+import { isUrl, normalizePath } from "./utils/path.ts";
+import { env } from "./utils/env.ts";
+import { log } from "./utils/log.ts";
+import { filter404page } from "./utils/page_url.ts";
+import { insertContent } from "./utils/page_content.ts";
+import FS from "./fs.ts";
+import { compileCSS, compileJS, ComponentLoader } from "./components.ts";
+import DataLoader from "./data_loader.ts";
+import Source from "./source.ts";
+import Scopes from "./scopes.ts";
+import Processors from "./processors.ts";
+import Renderer from "./renderer.ts";
+import Events from "./events.ts";
+import Formats from "./formats.ts";
+import Searcher from "./searcher.ts";
+import Scripts from "./scripts.ts";
+import FSWatcher from "../core/watcher.ts";
+import { FSWriter } from "./writer.ts";
+import { filesToPages, Page } from "./file.ts";
+import textLoader from "./loaders/text.ts";
+import binaryLoader from "./loaders/binary.ts";
+import Server from "./server.ts";
+import Cache from "./cache.ts";
+import DebugBar from "./debugbar.ts";
+import notFound from "../middlewares/not_found.ts";
+/** Default options of the site */ const defaults = {
+ cwd: Deno.cwd(),
+ src: "./",
+ dest: "./_site",
+ emptyDest: true,
+ caseSensitiveUrls: false,
+ includes: "_includes",
+ cssFile: "/style.css",
+ jsFile: "/script.js",
+ fontsFolder: "/fonts",
+ location: new URL("http://localhost"),
+ prettyUrls: true,
+ server: {
+ port: 3000,
+ hostname: "localhost",
+ open: false,
+ page404: "/404.html",
+ middlewares: []
+ },
+ watcher: {
+ ignore: [],
+ debounce: 100,
+ include: []
+ },
+ components: {}
+};
+/**
+ * This is the heart of Lume,
+ * it contains everything needed to build the site
+ */ export default class Site {
+ options;
+ /** Internal data. Used to save arbitrary data by plugins and processors */ _data = {};
+ /** To read the files from the filesystem */ fs;
+ /** Info about how to handle different file formats */ formats;
+ /** To load all _data files */ dataLoader;
+ /** To load reusable components */ componentLoader;
+ /** To scan the src folder */ source;
+ /** To update pages of the same scope after any change */ scopes;
+ /** To store and run the processors */ processors;
+ /** To store and run the pre-processors */ preprocessors;
+ /** To render the pages using any template engine */ renderer;
+ /** To listen and dispatch events */ // deno-lint-ignore no-explicit-any
+ events;
+ /** To run scripts */ scripts;
+ /** To search pages */ search;
+ /** To store cached stuff in the _cache folder */ cache;
+ /** To write the generated pages in the dest folder */ writer;
+ /** Data assigned with site.data() */ scopedData = new Map([
+ [
+ "/",
+ {}
+ ]
+ ]);
+ /** Pages created with site.page() */ scopedPages = new Map();
+ /** Components created with site.component() */ scopedComponents = new Map();
+ /** Hooks installed by the plugins */ // deno-lint-ignore no-explicit-any
+ hooks = {};
+ /** The debug bar data */ debugBar;
+ /** The generated pages are stored here */ pages = [];
+ /** The static files to be copied are stored here */ files = [];
+ fetch;
+ constructor(options = {}){
+ this.options = merge(defaults, options);
+ const src = this.src();
+ const dest = this.dest();
+ const { includes, cwd, prettyUrls, components, server, caseSensitiveUrls } = this.options;
+ // To load source files
+ const fs = new FS({
+ root: src
+ });
+ const formats = new Formats();
+ const dataLoader = new DataLoader({
+ formats
+ });
+ const componentLoader = new ComponentLoader({
+ formats
+ });
+ const source = new Source({
+ fs,
+ dataLoader,
+ componentLoader,
+ formats,
+ components: {
+ cssFile: components.cssFile ?? this.options.cssFile,
+ jsFile: components.jsFile ?? this.options.jsFile
+ },
+ scopedData: this.scopedData,
+ scopedPages: this.scopedPages,
+ scopedComponents: this.scopedComponents,
+ prettyUrls,
+ basenameParsers: []
+ });
+ // To render pages
+ const scopes = new Scopes();
+ const processors = new Processors();
+ const preprocessors = new Processors();
+ const renderer = new Renderer({
+ prettyUrls,
+ preprocessors,
+ formats,
+ fs,
+ includes
+ });
+ // Other stuff
+ const events = new Events();
+ const scripts = new Scripts({
+ cwd
+ });
+ const writer = new FSWriter({
+ dest,
+ caseSensitiveUrls
+ });
+ const searcher = new Searcher({
+ pages: this.pages,
+ files: this.files,
+ sourceData: source.data,
+ filters: [
+ (data)=>data.page.outputPath.endsWith(".html") ?? false,
+ filter404page(server.page404)
+ ]
+ });
+ // Save everything in the site instance
+ this.fs = fs;
+ this.formats = formats;
+ this.componentLoader = componentLoader;
+ this.dataLoader = dataLoader;
+ this.source = source;
+ this.scopes = scopes;
+ this.processors = processors;
+ this.preprocessors = preprocessors;
+ this.renderer = renderer;
+ this.events = events;
+ this.scripts = scripts;
+ this.search = searcher;
+ this.writer = writer;
+ // Ignore the "dest" directory if it's inside src
+ if (this.dest().startsWith(this.src())) {
+ this.ignore(this.options.dest);
+ }
+ // Ignore the includes folder
+ this.ignore(this.options.includes);
+ // Normalize the ignored paths
+ this.options.watcher.ignore = this.options.watcher.ignore.map((path)=>typeof path === "string" ? normalizePath(path) : path);
+ // Ignore the dest folder by the watcher
+ this.options.watcher.ignore.push(normalizePath(this.options.dest));
+ this.fs.options.ignore = this.options.watcher.ignore;
+ // Initialize the cache if LUME_NOCACHE is not enabled
+ if (env("LUME_NOCACHE") !== true) {
+ this.cache = new Cache({
+ folder: this.root("_cache")
+ });
+ }
+ // Initialize the debug bar
+ const initDebugBar = this.options.server.debugBar ?? env("LUME_LIVE_RELOAD");
+ if (initDebugBar) {
+ const debugBar = new DebugBar({
+ url: typeof initDebugBar === "string" ? initDebugBar : undefined
+ });
+ this.addEventListener("beforeUpdate", ()=>debugBar.clear());
+ this.debugBar = debugBar;
+ log.collection = debugBar.collection("Build");
+ }
+ // Create the fetch function for `deno serve`
+ let fetchServer;
+ this.fetch = (request, info)=>{
+ if (!fetchServer) {
+ fetchServer = this.getServer();
+ }
+ return fetchServer.handle(request, info);
+ };
+ }
+ /**
+ * Returns the full path to the root directory.
+ * Use the arguments to return a subpath
+ */ root(...path) {
+ return normalizePath(join(this.options.cwd, ...path));
+ }
+ /**
+ * Returns the full path to the src directory.
+ * Use the arguments to return a subpath
+ */ src(...path) {
+ return this.root(this.options.src, ...path);
+ }
+ /**
+ * Returns the full path to the dest directory.
+ * Use the arguments to return a subpath
+ */ dest(...path) {
+ return this.root(this.options.dest, ...path);
+ }
+ /** Add a listener to an event */ addEventListener(type, listener, options) {
+ const fn = typeof listener === "string" ? ()=>this.run(listener) : listener;
+ this.events.addEventListener(type, fn, options);
+ return this;
+ }
+ /** Dispatch an event */ dispatchEvent(event) {
+ return this.events.dispatchEvent(event);
+ }
+ /** Use a plugin */ use(plugin) {
+ plugin(this);
+ return this;
+ }
+ /**
+ * Register a script or a function, so it can be executed with
+ * lume run <name>
+ */ script(name, ...scripts) {
+ this.scripts.set(name, ...scripts);
+ return this;
+ }
+ /** Runs a script or function registered previously */ async run(name) {
+ return await this.scripts.run(name);
+ }
+ /**
+ * Register a data loader for some extensions
+ */ loadData(extensions, dataLoader = textLoader) {
+ extensions.forEach((ext)=>{
+ this.formats.set({
+ ext,
+ dataLoader
+ });
+ });
+ return this;
+ }
+ /**
+ * Register a page loader for some extensions
+ */ loadPages(extensions, options = {}) {
+ if (typeof options === "function") {
+ options = {
+ loader: options
+ };
+ }
+ const { engine, pageSubExtension } = options;
+ const loader = options.loader || textLoader;
+ const engines = Array.isArray(engine) ? engine : engine ? [
+ engine
+ ] : [];
+ const pageExtensions = pageSubExtension ? extensions.map((ext)=>pageSubExtension + ext) : extensions;
+ pageExtensions.forEach((ext)=>{
+ this.formats.set({
+ ext,
+ loader,
+ isPage: true,
+ engines
+ });
+ });
+ if (pageSubExtension) {
+ extensions.forEach((ext)=>this.formats.set({
+ ext,
+ loader,
+ engines
+ }));
+ }
+ for (const [name, helper] of this.renderer.helpers){
+ engines.forEach((engine)=>engine.addHelper(name, ...helper));
+ }
+ return this;
+ }
+ preprocess(extensions, preprocessor) {
+ if (typeof extensions === "function") {
+ return this.preprocess("*", extensions);
+ }
+ this.preprocessors.set(extensions, preprocessor);
+ if (Array.isArray(extensions)) {
+ extensions.forEach((ext)=>this.formats.set({
+ ext
+ }));
+ }
+ return this;
+ }
+ process(extensions, processor) {
+ if (typeof extensions === "function") {
+ return this.process("*", extensions);
+ }
+ this.processors.set(extensions, processor);
+ if (Array.isArray(extensions)) {
+ extensions.forEach((ext)=>this.formats.set({
+ ext
+ }));
+ }
+ return this;
+ }
+ /** Register a template filter */ filter(name, filter, async = false) {
+ return this.helper(name, filter, {
+ type: "filter",
+ async
+ });
+ }
+ /** Register a template helper */ helper(name, fn, options) {
+ this.renderer.addHelper(name, fn, options);
+ return this;
+ }
+ /** Register a basename parser */ parseBasename(parser) {
+ this.source.basenameParsers.push(parser);
+ return this;
+ }
+ /** Register extra data accessible by the layouts */ data(name, value, scope = "/") {
+ const data = this.scopedData.get(scope) || {};
+ data[name] = value;
+ this.scopedData.set(scope, data);
+ return this;
+ }
+ /** Register a page */ page(data, scope = "/") {
+ const pages = this.scopedPages.get(scope) || [];
+ pages.push(data);
+ this.scopedPages.set(scope, pages);
+ return this;
+ }
+ /** Register an extra component accesible by the layouts */ component(context, component, scope = "/") {
+ const pieces = context.split(".");
+ const scopedComponents = this.scopedComponents.get(scope) || new Map();
+ let components = scopedComponents;
+ while(pieces.length){
+ const name = pieces.shift();
+ if (!components.get(name)) {
+ components.set(name, new Map());
+ }
+ components = components.get(name);
+ }
+ const assets = new Map();
+ if (component.css) {
+ assets.set(component.name + ".css", component.css);
+ }
+ if (component.js) {
+ assets.set(component.name + ".js", component.js);
+ }
+ components.set(component.name, {
+ name: component.name,
+ render: component.render,
+ assets
+ });
+ this.scopedComponents.set(scope, scopedComponents);
+ return this;
+ }
+ /** Register a merging strategy for a data key */ mergeKey(key, merge, scope = "/") {
+ const data = this.scopedData.get(scope) || {};
+ const mergedKeys = data.mergedKeys || {};
+ mergedKeys[key] = merge;
+ data.mergedKeys = mergedKeys;
+ this.scopedData.set(scope, data);
+ return this;
+ }
+ add(from, to) {
+ this.#addOrCopy(from, to, false);
+ return this;
+ }
+ copy(from, to) {
+ this.#addOrCopy(from, to, true);
+ return this;
+ }
+ /** Add or copy files or directories to the site */ #addOrCopy(from, to, copy) {
+ // File extensions
+ if (Array.isArray(from)) {
+ if (typeof to === "string") {
+ throw new Error(`add() files by extension expects a function as second argument but got a string "${to}"`);
+ }
+ const dest = typeof to === "function" ? to : (path)=>path;
+ for (const ext of from){
+ this.source.addFile(ext, dest, copy);
+ this.formats.set({
+ ext
+ });
+ }
+ return;
+ }
+ // Remote files
+ if (from.startsWith("npm:")) {
+ from = from.replace("npm:", "https://cdn.jsdelivr.net/npm/");
+ }
+ if (isUrl(from)) {
+ const url = new URL(from);
+ if (to === undefined) {
+ to = posix.basename(url.pathname) || undefined;
+ }
+ if (typeof to === "function") {
+ to = to(url.href);
+ }
+ if (to?.endsWith("/")) {
+ to = posix.join(to, posix.basename(url.pathname));
+ }
+ if (!to || to.endsWith("/")) {
+ throw new Error(`Invalid destination path: ${to}`);
+ }
+ this.remoteFile(to, url.href);
+ this.source.addFile(to, to, copy);
+ return;
+ }
+ // It's a path
+ if (from.startsWith("../")) {
+ throw new Error(`It's not possible to copy files outsite the src directory ("${from}")`);
+ }
+ this.source.addFile(normalizePath(from), to ?? ((str)=>str), copy);
+ }
+ /** Ignore one or several files or directories */ ignore(...paths) {
+ paths.forEach((path)=>{
+ if (typeof path === "string") {
+ this.source.addIgnoredPath(path);
+ } else {
+ this.source.addIgnoreFilter(path);
+ }
+ });
+ return this;
+ }
+ /** Define independent scopes to optimize the update process */ scopedUpdates(...scopes) {
+ scopes.forEach((scope)=>this.scopes.scopes.add(scope));
+ return this;
+ }
+ /** Define a remote fallback for a missing local file */ remoteFile(filename, url) {
+ this.fs.remoteFiles.set(posix.join("/", filename), url);
+ return this;
+ }
+ /** Clear the dest directory and any cache */ async clear() {
+ await this.writer.clear();
+ }
+ /** Build the entire site */ async build() {
+ if (await this.dispatchEvent({
+ type: "beforeBuild"
+ }) === false) {
+ return;
+ }
+ if (this.options.emptyDest) {
+ await this.clear();
+ }
+ performance.mark("start-loadfiles");
+ // Load source files
+ this.fs.init();
+ if (await this.dispatchEvent({
+ type: "afterLoad"
+ }) === false) {
+ return;
+ }
+ // Get the site content
+ const showDrafts = env("LUME_DRAFTS");
+ const [_pages, _staticFiles] = await this.source.build((_, page)=>!page?.data.draft || showDrafts === true);
+ performance.mark("end-loadfiles");
+ log.debug(`Pages loaded in ${(performance.measure("duration", "start-loadfiles", "end-loadfiles").duration / 1000).toFixed(2)} seconds`);
+ // Save static files into site.files
+ this.files.splice(0, this.files.length, ..._staticFiles);
+ // Stop if the build is cancelled
+ if (await this.#buildPages(_pages) === false) {
+ return;
+ }
+ // Save the pages and copy static files in the dest folder
+ const pages = await this.writer.savePages(this.pages);
+ const staticFiles = await this.writer.copyFiles(this.files);
+ await this.dispatchEvent({
+ type: "afterBuild",
+ pages,
+ staticFiles
+ });
+ }
+ /** Reload some files that might be changed */ async update(files) {
+ if (await this.dispatchEvent({
+ type: "beforeUpdate",
+ files
+ }) === false) {
+ return;
+ }
+ this.search.deleteCache();
+ // Reload the changed files
+ for (const file of files){
+ // Delete the file from the cache
+ this.formats.deleteCache(file);
+ const entry = this.fs.update(file);
+ if (!entry) {
+ continue;
+ }
+ // Remove pages or static files depending on this entry
+ const pages = this.pages.filter((page)=>pathBelongs(entry.path, page.src.entry?.path)).map((page)=>page.outputPath);
+ const files = this.files.filter((file)=>pathBelongs(entry.path, file.src.entry?.path)).map((file)=>file.outputPath);
+ await this.writer.removeFiles([
+ ...pages,
+ ...files
+ ]);
+ }
+ if (await this.dispatchEvent({
+ type: "afterLoad"
+ }) === false) {
+ return;
+ }
+ // Get the site content
+ const showDrafts = env("LUME_DRAFTS");
+ const [_pages, _staticFiles] = await this.source.build((_, page)=>!page?.data.draft || showDrafts === true, this.scopes.getFilter(files));
+ // Build the pages and save static files into site.files
+ this.files.splice(0, this.files.length, ..._staticFiles);
+ if (await this.#buildPages(_pages) === false) {
+ return;
+ }
+ // Save the pages and copy static files in the dest folder
+ const pages = await this.writer.savePages(this.pages);
+ const staticFiles = await this.writer.copyFiles(this.files);
+ await this.dispatchEvent({
+ type: "afterUpdate",
+ files,
+ pages,
+ staticFiles
+ });
+ }
+ /**
+ * Internal function to render pages
+ * The common operations of build and update
+ */ async #buildPages(pages) {
+ // Promote the files that must be preprocessed to pages
+ const preExtensions = this.preprocessors.extensions;
+ await filesToPages(this.files, pages, (file)=>!file.isCopy && preExtensions.has(file.src.ext));
+ if (await this.dispatchEvent({
+ type: "beforeRender",
+ pages
+ }) === false) {
+ return false;
+ }
+ performance.mark("start-render");
+ // Render the pages
+ this.pages.splice(0);
+ await this.renderer.renderPages(pages, this.pages);
+ // Add extra code generated by the components
+ for (const { path, entries } of this.source.getComponentsExtraCode()){
+ if (path.endsWith(".css")) {
+ const page = await this.getOrCreatePage(path);
+ page.text = insertContent(page.text, await compileCSS(path, entries, this.fs.entries), this.options.components.placeholder);
+ continue;
+ }
+ if (path.endsWith(".js")) {
+ const page = await this.getOrCreatePage(path);
+ page.text = insertContent(page.text, await compileJS(path, entries, this.fs.entries), this.options.components.placeholder);
+ }
+ }
+ // Remove empty pages
+ this.pages.splice(0, this.pages.length, ...this.pages.filter((page)=>{
+ if (!page.content) {
+ log.warn(`[Lume] <cyan>Skipped page</cyan> ${page.data.url} (file content is empty)`);
+ return false;
+ }
+ return true;
+ }));
+ performance.mark("end-render");
+ log.debug(`Pages rendered in ${(performance.measure("duration", "start-render", "end-render").duration / 1000).toFixed(2)} seconds`);
+ performance.mark("start-process");
+ if (await this.events.dispatchEvent({
+ type: "afterRender",
+ pages: this.pages
+ }) === false) {
+ return false;
+ }
+ // Promote the files that must be processed to pages
+ const extensions = this.processors.extensions;
+ await filesToPages(this.files, this.pages, (file)=>!file.isCopy && extensions.has(file.src.ext));
+ // Run the processors to the pages
+ await this.processors.run(this.pages);
+ performance.mark("end-process");
+ log.debug(`Pages processed in ${(performance.measure("duration", "start-process", "end-process").duration / 1000).toFixed(2)} seconds`);
+ return await this.dispatchEvent({
+ type: "beforeSave"
+ });
+ }
+ /** Return the URL of a path */ url(path, absolute = false) {
+ if (path.startsWith("./") || path.startsWith("../") || path.startsWith("?") || path.startsWith("#") || path.startsWith("//")) {
+ return path;
+ }
+ // It's a source file
+ if (path.startsWith("~/")) {
+ path = decodeURI(path.slice(1));
+ // Has a search query
+ const match = path.match(/^(.*)\s*\(([^)]+)\)$/);
+ const srcPath = match ? match[1] : path;
+ const pages = match ? this.search.pages(match[2]).map((data)=>data.page) : this.pages;
+ // It's a page
+ const page = pages.find((page)=>page.src.path + page.src.ext === srcPath);
+ if (page) {
+ path = page.data.url;
+ } else {
+ // It's a static file
+ const file = this.files.find((file)=>file.src.entry.path === path);
+ if (file) {
+ path = file.outputPath;
+ } else {
+ throw new Error(`Source file not found: ${path}`);
+ }
+ }
+ } else {
+ // Absolute URLs are returned as is
+ try {
+ return new URL(path).href;
+ } catch {
+ // Ignore error
+ }
+ }
+ if (!path.startsWith(this.options.location.pathname)) {
+ path = posix.join(this.options.location.pathname, path);
+ }
+ return absolute ? this.options.location.origin + path : path;
+ }
+ async getOrCreatePage(url) {
+ url = normalizePath(url);
+ // It's a page
+ const page = this.pages.find((page)=>page.data.url === url);
+ if (page) {
+ return page;
+ }
+ // It's a static file
+ const index = this.files.findIndex((f)=>f.outputPath === url);
+ if (index > -1) {
+ const file = this.files.splice(index, 1)[0];
+ const page = await file.toPage();
+ this.pages.push(page);
+ return page;
+ }
+ // Read the source files directly
+ const entry = this.fs.entries.get(url);
+ if (entry) {
+ const { content } = await entry.getContent(binaryLoader);
+ const page = Page.create({
+ url
+ }, {
+ entry
+ });
+ page.content = content;
+ this.pages.push(page);
+ return page;
+ }
+ const newPage = Page.create({
+ url
+ });
+ this.pages.push(newPage);
+ return newPage;
+ }
+ async getContent(file, binary) {
+ file = normalizePath(file);
+ const basePath = this.src();
+ if (file.startsWith(basePath)) {
+ file = normalizePath(file.slice(basePath.length));
+ }
+ file = decodeURI(file);
+ const url = encodeURI(file);
+ // It's a page
+ const page = this.pages.find((page)=>page.data.url === url);
+ if (page) {
+ return binary ? page.bytes : page.text;
+ }
+ // It's a static file
+ const staticFile = this.files.find((f)=>f.outputPath === file);
+ if (staticFile) {
+ return binary ? (await staticFile.src.entry.getContent(binaryLoader)).content : (await staticFile.src.entry.getContent(textLoader)).content;
+ }
+ // Read the source files directly
+ try {
+ const entry = this.fs.entries.get(file);
+ if (entry) {
+ return binary ? (await entry.getContent(binaryLoader)).content : (await entry.getContent(textLoader)).content;
+ }
+ } catch {
+ // Ignore error
+ }
+ }
+ /** Returns a File system watcher of the site */ getWatcher() {
+ return new FSWatcher({
+ root: this.src(),
+ paths: this.options.watcher.include,
+ ignore: this.options.watcher.ignore,
+ debounce: this.options.watcher.debounce
+ });
+ }
+ /** Returns a Web server of the site */ getServer() {
+ const { port, hostname, page404, middlewares } = this.options.server;
+ const root = this.options.server.root || this.dest();
+ const server = new Server({
+ root,
+ port,
+ hostname
+ });
+ server.use(notFound({
+ root,
+ page404,
+ directoryIndex: true
+ }));
+ if (middlewares) {
+ server.use(...middlewares);
+ }
+ return server;
+ }
+}
+function pathBelongs(base, path) {
+ if (!path) {
+ return false;
+ }
+ return base === path || path?.startsWith(base + "/");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9zaXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHBvc2l4IH0gZnJvbSBcIi4uL2RlcHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi91dGlscy9vYmplY3QudHNcIjtcbmltcG9ydCB7IGlzVXJsLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4vdXRpbHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4vdXRpbHMvZW52LnRzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi91dGlscy9sb2cudHNcIjtcbmltcG9ydCB7IGZpbHRlcjQwNHBhZ2UgfSBmcm9tIFwiLi91dGlscy9wYWdlX3VybC50c1wiO1xuaW1wb3J0IHsgaW5zZXJ0Q29udGVudCB9IGZyb20gXCIuL3V0aWxzL3BhZ2VfY29udGVudC50c1wiO1xuXG5pbXBvcnQgRlMgZnJvbSBcIi4vZnMudHNcIjtcbmltcG9ydCB7IGNvbXBpbGVDU1MsIGNvbXBpbGVKUywgQ29tcG9uZW50TG9hZGVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy50c1wiO1xuaW1wb3J0IERhdGFMb2FkZXIgZnJvbSBcIi4vZGF0YV9sb2FkZXIudHNcIjtcbmltcG9ydCBTb3VyY2UgZnJvbSBcIi4vc291cmNlLnRzXCI7XG5pbXBvcnQgU2NvcGVzIGZyb20gXCIuL3Njb3Blcy50c1wiO1xuaW1wb3J0IFByb2Nlc3NvcnMgZnJvbSBcIi4vcHJvY2Vzc29ycy50c1wiO1xuaW1wb3J0IFJlbmRlcmVyIGZyb20gXCIuL3JlbmRlcmVyLnRzXCI7XG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL2V2ZW50cy50c1wiO1xuaW1wb3J0IEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy50c1wiO1xuaW1wb3J0IFNlYXJjaGVyIGZyb20gXCIuL3NlYXJjaGVyLnRzXCI7XG5pbXBvcnQgU2NyaXB0cyBmcm9tIFwiLi9zY3JpcHRzLnRzXCI7XG5pbXBvcnQgRlNXYXRjaGVyIGZyb20gXCIuLi9jb3JlL3dhdGNoZXIudHNcIjtcbmltcG9ydCB7IEZTV3JpdGVyIH0gZnJvbSBcIi4vd3JpdGVyLnRzXCI7XG5pbXBvcnQgeyBmaWxlc1RvUGFnZXMsIFBhZ2UgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5pbXBvcnQgdGV4dExvYWRlciBmcm9tIFwiLi9sb2FkZXJzL3RleHQudHNcIjtcbmltcG9ydCBiaW5hcnlMb2FkZXIgZnJvbSBcIi4vbG9hZGVycy9iaW5hcnkudHNcIjtcbmltcG9ydCBTZXJ2ZXIgZnJvbSBcIi4vc2VydmVyLnRzXCI7XG5pbXBvcnQgQ2FjaGUgZnJvbSBcIi4vY2FjaGUudHNcIjtcbmltcG9ydCBEZWJ1Z0JhciBmcm9tIFwiLi9kZWJ1Z2Jhci50c1wiO1xuaW1wb3J0IG5vdEZvdW5kIGZyb20gXCIuLi9taWRkbGV3YXJlcy9ub3RfZm91bmQudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBMb2FkZXIgfSBmcm9tIFwiLi9mcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBCYXNlbmFtZVBhcnNlciwgRGVzdGluYXRpb24gfSBmcm9tIFwiLi9zb3VyY2UudHNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50cywgVXNlckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YSwgUmF3RGF0YSwgU3RhdGljRmlsZSB9IGZyb20gXCIuL2ZpbGUudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5naW5lLCBIZWxwZXIsIEhlbHBlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgRXZlbnRMaXN0ZW5lciwgRXZlbnRPcHRpb25zIH0gZnJvbSBcIi4vZXZlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NvciB9IGZyb20gXCIuL3Byb2Nlc3NvcnMudHNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZW5zaW9ucyB9IGZyb20gXCIuL3V0aWxzL3BhdGgudHNcIjtcbmltcG9ydCB0eXBlIHsgV3JpdGVyIH0gZnJvbSBcIi4vd3JpdGVyLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi9zZXJ2ZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgU2NvcGVGaWx0ZXIgfSBmcm9tIFwiLi9zY29wZXMudHNcIjtcbmltcG9ydCB0eXBlIHsgU2NyaXB0T3JGdW5jdGlvbiB9IGZyb20gXCIuL3NjcmlwdHMudHNcIjtcbmltcG9ydCB0eXBlIHsgV2F0Y2hlciB9IGZyb20gXCIuL3dhdGNoZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgTWVyZ2VTdHJhdGVneSB9IGZyb20gXCIuL3V0aWxzL21lcmdlX2RhdGEudHNcIjtcblxuLyoqIERlZmF1bHQgb3B0aW9ucyBvZiB0aGUgc2l0ZSAqL1xuY29uc3QgZGVmYXVsdHM6IFNpdGVPcHRpb25zID0ge1xuICBjd2Q6IERlbm8uY3dkKCksXG4gIHNyYzogXCIuL1wiLFxuICBkZXN0OiBcIi4vX3NpdGVcIixcbiAgZW1wdHlEZXN0OiB0cnVlLFxuICBjYXNlU2Vuc2l0aXZlVXJsczogZmFsc2UsXG4gIGluY2x1ZGVzOiBcIl9pbmNsdWRlc1wiLFxuICBjc3NGaWxlOiBcIi9zdHlsZS5jc3NcIixcbiAganNGaWxlOiBcIi9zY3JpcHQuanNcIixcbiAgZm9udHNGb2xkZXI6IFwiL2ZvbnRzXCIsXG4gIGxvY2F0aW9uOiBuZXcgVVJMKFwiaHR0cDovL2xvY2FsaG9zdFwiKSxcbiAgcHJldHR5VXJsczogdHJ1ZSxcbiAgc2VydmVyOiB7XG4gICAgcG9ydDogMzAwMCxcbiAgICBob3N0bmFtZTogXCJsb2NhbGhvc3RcIixcbiAgICBvcGVuOiBmYWxzZSxcbiAgICBwYWdlNDA0OiBcIi80MDQuaHRtbFwiLFxuICAgIG1pZGRsZXdhcmVzOiBbXSxcbiAgfSxcbiAgd2F0Y2hlcjoge1xuICAgIGlnbm9yZTogW10sXG4gICAgZGVib3VuY2U6IDEwMCxcbiAgICBpbmNsdWRlOiBbXSxcbiAgfSxcbiAgY29tcG9uZW50czoge30sXG59O1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIEx1bWUsXG4gKiBpdCBjb250YWlucyBldmVyeXRoaW5nIG5lZWRlZCB0byBidWlsZCB0aGUgc2l0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaXRlIHtcbiAgb3B0aW9uczogU2l0ZU9wdGlvbnM7XG5cbiAgLyoqIEludGVybmFsIGRhdGEuIFVzZWQgdG8gc2F2ZSBhcmJpdHJhcnkgZGF0YSBieSBwbHVnaW5zIGFuZCBwcm9jZXNzb3JzICovXG4gIF9kYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8qKiBUbyByZWFkIHRoZSBmaWxlcyBmcm9tIHRoZSBmaWxlc3lzdGVtICovXG4gIGZzOiBGUztcblxuICAvKiogSW5mbyBhYm91dCBob3cgdG8gaGFuZGxlIGRpZmZlcmVudCBmaWxlIGZvcm1hdHMgKi9cbiAgZm9ybWF0czogRm9ybWF0cztcblxuICAvKiogVG8gbG9hZCBhbGwgX2RhdGEgZmlsZXMgKi9cbiAgZGF0YUxvYWRlcjogRGF0YUxvYWRlcjtcblxuICAvKiogVG8gbG9hZCByZXVzYWJsZSBjb21wb25lbnRzICovXG4gIGNvbXBvbmVudExvYWRlcjogQ29tcG9uZW50TG9hZGVyO1xuXG4gIC8qKiBUbyBzY2FuIHRoZSBzcmMgZm9sZGVyICovXG4gIHNvdXJjZTogU291cmNlO1xuXG4gIC8qKiBUbyB1cGRhdGUgcGFnZXMgb2YgdGhlIHNhbWUgc2NvcGUgYWZ0ZXIgYW55IGNoYW5nZSAqL1xuICBzY29wZXM6IFNjb3BlcztcblxuICAvKiogVG8gc3RvcmUgYW5kIHJ1biB0aGUgcHJvY2Vzc29ycyAqL1xuICBwcm9jZXNzb3JzOiBQcm9jZXNzb3JzO1xuXG4gIC8qKiBUbyBzdG9yZSBhbmQgcnVuIHRoZSBwcmUtcHJvY2Vzc29ycyAqL1xuICBwcmVwcm9jZXNzb3JzOiBQcm9jZXNzb3JzO1xuXG4gIC8qKiBUbyByZW5kZXIgdGhlIHBhZ2VzIHVzaW5nIGFueSB0ZW1wbGF0ZSBlbmdpbmUgKi9cbiAgcmVuZGVyZXI6IFJlbmRlcmVyO1xuXG4gIC8qKiBUbyBsaXN0ZW4gYW5kIGRpc3BhdGNoIGV2ZW50cyAqL1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBldmVudHM6IEV2ZW50czxhbnk+O1xuXG4gIC8qKiBUbyBydW4gc2NyaXB0cyAqL1xuICBzY3JpcHRzOiBTY3JpcHRzO1xuXG4gIC8qKiBUbyBzZWFyY2ggcGFnZXMgKi9cbiAgc2VhcmNoOiBTZWFyY2hlcjtcblxuICAvKiogVG8gc3RvcmUgY2FjaGVkIHN0dWZmIGluIHRoZSBfY2FjaGUgZm9sZGVyICovXG4gIGNhY2hlOiBDYWNoZSB8IHVuZGVmaW5lZDtcblxuICAvKiogVG8gd3JpdGUgdGhlIGdlbmVyYXRlZCBwYWdlcyBpbiB0aGUgZGVzdCBmb2xkZXIgKi9cbiAgd3JpdGVyOiBXcml0ZXI7XG5cbiAgLyoqIERhdGEgYXNzaWduZWQgd2l0aCBzaXRlLmRhdGEoKSAqL1xuICBzY29wZWREYXRhID0gbmV3IE1hcDxzdHJpbmcsIFJhd0RhdGE+KFtbXCIvXCIsIHt9XV0pO1xuXG4gIC8qKiBQYWdlcyBjcmVhdGVkIHdpdGggc2l0ZS5wYWdlKCkgKi9cbiAgc2NvcGVkUGFnZXMgPSBuZXcgTWFwPHN0cmluZywgUmF3RGF0YVtdPigpO1xuXG4gIC8qKiBDb21wb25lbnRzIGNyZWF0ZWQgd2l0aCBzaXRlLmNvbXBvbmVudCgpICovXG4gIHNjb3BlZENvbXBvbmVudHMgPSBuZXcgTWFwPHN0cmluZywgQ29tcG9uZW50cz4oKTtcblxuICAvKiogSG9va3MgaW5zdGFsbGVkIGJ5IHRoZSBwbHVnaW5zICovXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGhvb2tzOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55W10pID0+IHZvaWQ+ID0ge307XG5cbiAgLyoqIFRoZSBkZWJ1ZyBiYXIgZGF0YSAqL1xuICBkZWJ1Z0Jhcj86IERlYnVnQmFyO1xuXG4gIC8qKiBUaGUgZ2VuZXJhdGVkIHBhZ2VzIGFyZSBzdG9yZWQgaGVyZSAqL1xuICByZWFkb25seSBwYWdlczogUGFnZVtdID0gW107XG5cbiAgLyoqIFRoZSBzdGF0aWMgZmlsZXMgdG8gYmUgY29waWVkIGFyZSBzdG9yZWQgaGVyZSAqL1xuICByZWFkb25seSBmaWxlczogU3RhdGljRmlsZVtdID0gW107XG5cbiAgZmV0Y2g6IERlbm8uU2VydmVIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnRpYWw8U2l0ZU9wdGlvbnM+ID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZShkZWZhdWx0cywgb3B0aW9ucyk7XG5cbiAgICBjb25zdCBzcmMgPSB0aGlzLnNyYygpO1xuICAgIGNvbnN0IGRlc3QgPSB0aGlzLmRlc3QoKTtcbiAgICBjb25zdCB7IGluY2x1ZGVzLCBjd2QsIHByZXR0eVVybHMsIGNvbXBvbmVudHMsIHNlcnZlciwgY2FzZVNlbnNpdGl2ZVVybHMgfSA9XG4gICAgICB0aGlzLm9wdGlvbnM7XG5cbiAgICAvLyBUbyBsb2FkIHNvdXJjZSBmaWxlc1xuICAgIGNvbnN0IGZzID0gbmV3IEZTKHsgcm9vdDogc3JjIH0pO1xuICAgIGNvbnN0IGZvcm1hdHMgPSBuZXcgRm9ybWF0cygpO1xuXG4gICAgY29uc3QgZGF0YUxvYWRlciA9IG5ldyBEYXRhTG9hZGVyKHsgZm9ybWF0cyB9KTtcbiAgICBjb25zdCBjb21wb25lbnRMb2FkZXIgPSBuZXcgQ29tcG9uZW50TG9hZGVyKHsgZm9ybWF0cyB9KTtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKHtcbiAgICAgIGZzLFxuICAgICAgZGF0YUxvYWRlcixcbiAgICAgIGNvbXBvbmVudExvYWRlcixcbiAgICAgIGZvcm1hdHMsXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIGNzc0ZpbGU6IGNvbXBvbmVudHMuY3NzRmlsZSA/PyB0aGlzLm9wdGlvbnMuY3NzRmlsZSxcbiAgICAgICAganNGaWxlOiBjb21wb25lbnRzLmpzRmlsZSA/PyB0aGlzLm9wdGlvbnMuanNGaWxlLFxuICAgICAgfSxcbiAgICAgIHNjb3BlZERhdGE6IHRoaXMuc2NvcGVkRGF0YSxcbiAgICAgIHNjb3BlZFBhZ2VzOiB0aGlzLnNjb3BlZFBhZ2VzLFxuICAgICAgc2NvcGVkQ29tcG9uZW50czogdGhpcy5zY29wZWRDb21wb25lbnRzLFxuICAgICAgcHJldHR5VXJscyxcbiAgICAgIGJhc2VuYW1lUGFyc2VyczogW10sXG4gICAgfSk7XG5cbiAgICAvLyBUbyByZW5kZXIgcGFnZXNcbiAgICBjb25zdCBzY29wZXMgPSBuZXcgU2NvcGVzKCk7XG4gICAgY29uc3QgcHJvY2Vzc29ycyA9IG5ldyBQcm9jZXNzb3JzKCk7XG4gICAgY29uc3QgcHJlcHJvY2Vzc29ycyA9IG5ldyBQcm9jZXNzb3JzKCk7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoe1xuICAgICAgcHJldHR5VXJscyxcbiAgICAgIHByZXByb2Nlc3NvcnMsXG4gICAgICBmb3JtYXRzLFxuICAgICAgZnMsXG4gICAgICBpbmNsdWRlcyxcbiAgICB9KTtcblxuICAgIC8vIE90aGVyIHN0dWZmXG4gICAgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50czxTaXRlRXZlbnQ+KCk7XG4gICAgY29uc3Qgc2NyaXB0cyA9IG5ldyBTY3JpcHRzKHsgY3dkIH0pO1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBGU1dyaXRlcih7IGRlc3QsIGNhc2VTZW5zaXRpdmVVcmxzIH0pO1xuXG4gICAgY29uc3Qgc2VhcmNoZXIgPSBuZXcgU2VhcmNoZXIoe1xuICAgICAgcGFnZXM6IHRoaXMucGFnZXMsXG4gICAgICBmaWxlczogdGhpcy5maWxlcyxcbiAgICAgIHNvdXJjZURhdGE6IHNvdXJjZS5kYXRhLFxuICAgICAgZmlsdGVyczogW1xuICAgICAgICAoZGF0YTogRGF0YSkgPT4gZGF0YS5wYWdlLm91dHB1dFBhdGguZW5kc1dpdGgoXCIuaHRtbFwiKSA/PyBmYWxzZSwgLy8gb25seSBodG1sIHBhZ2VzXG4gICAgICAgIGZpbHRlcjQwNHBhZ2Uoc2VydmVyLnBhZ2U0MDQpLCAvLyBub3QgdGhlIDQwNCBwYWdlXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gU2F2ZSBldmVyeXRoaW5nIGluIHRoZSBzaXRlIGluc3RhbmNlXG4gICAgdGhpcy5mcyA9IGZzO1xuICAgIHRoaXMuZm9ybWF0cyA9IGZvcm1hdHM7XG4gICAgdGhpcy5jb21wb25lbnRMb2FkZXIgPSBjb21wb25lbnRMb2FkZXI7XG4gICAgdGhpcy5kYXRhTG9hZGVyID0gZGF0YUxvYWRlcjtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLnNjb3BlcyA9IHNjb3BlcztcbiAgICB0aGlzLnByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzO1xuICAgIHRoaXMucHJlcHJvY2Vzc29ycyA9IHByZXByb2Nlc3NvcnM7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzO1xuICAgIHRoaXMuc2NyaXB0cyA9IHNjcmlwdHM7XG4gICAgdGhpcy5zZWFyY2ggPSBzZWFyY2hlcjtcbiAgICB0aGlzLndyaXRlciA9IHdyaXRlcjtcblxuICAgIC8vIElnbm9yZSB0aGUgXCJkZXN0XCIgZGlyZWN0b3J5IGlmIGl0J3MgaW5zaWRlIHNyY1xuICAgIGlmICh0aGlzLmRlc3QoKS5zdGFydHNXaXRoKHRoaXMuc3JjKCkpKSB7XG4gICAgICB0aGlzLmlnbm9yZSh0aGlzLm9wdGlvbnMuZGVzdCk7XG4gICAgfVxuXG4gICAgLy8gSWdub3JlIHRoZSBpbmNsdWRlcyBmb2xkZXJcbiAgICB0aGlzLmlnbm9yZSh0aGlzLm9wdGlvbnMuaW5jbHVkZXMpO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBpZ25vcmVkIHBhdGhzXG4gICAgdGhpcy5vcHRpb25zLndhdGNoZXIuaWdub3JlID0gdGhpcy5vcHRpb25zLndhdGNoZXIuaWdub3JlLm1hcCgocGF0aCkgPT5cbiAgICAgIHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gbm9ybWFsaXplUGF0aChwYXRoKSA6IHBhdGhcbiAgICApO1xuXG4gICAgLy8gSWdub3JlIHRoZSBkZXN0IGZvbGRlciBieSB0aGUgd2F0Y2hlclxuICAgIHRoaXMub3B0aW9ucy53YXRjaGVyLmlnbm9yZS5wdXNoKG5vcm1hbGl6ZVBhdGgodGhpcy5vcHRpb25zLmRlc3QpKTtcbiAgICB0aGlzLmZzLm9wdGlvbnMuaWdub3JlID0gdGhpcy5vcHRpb25zLndhdGNoZXIuaWdub3JlO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgY2FjaGUgaWYgTFVNRV9OT0NBQ0hFIGlzIG5vdCBlbmFibGVkXG4gICAgaWYgKGVudjxib29sZWFuPihcIkxVTUVfTk9DQUNIRVwiKSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jYWNoZSA9IG5ldyBDYWNoZSh7IGZvbGRlcjogdGhpcy5yb290KFwiX2NhY2hlXCIpIH0pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlYnVnIGJhclxuICAgIGNvbnN0IGluaXREZWJ1Z0JhciA9IHRoaXMub3B0aW9ucy5zZXJ2ZXIuZGVidWdCYXIgPz9cbiAgICAgIGVudjxib29sZWFuPihcIkxVTUVfTElWRV9SRUxPQURcIik7XG5cbiAgICBpZiAoaW5pdERlYnVnQmFyKSB7XG4gICAgICBjb25zdCBkZWJ1Z0JhciA9IG5ldyBEZWJ1Z0Jhcih7XG4gICAgICAgIHVybDogdHlwZW9mIGluaXREZWJ1Z0JhciA9PT0gXCJzdHJpbmdcIiA/IGluaXREZWJ1Z0JhciA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JlVXBkYXRlXCIsICgpID0+IGRlYnVnQmFyLmNsZWFyKCkpO1xuICAgICAgdGhpcy5kZWJ1Z0JhciA9IGRlYnVnQmFyO1xuICAgICAgbG9nLmNvbGxlY3Rpb24gPSBkZWJ1Z0Jhci5jb2xsZWN0aW9uKFwiQnVpbGRcIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBmZXRjaCBmdW5jdGlvbiBmb3IgYGRlbm8gc2VydmVgXG4gICAgbGV0IGZldGNoU2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmZldGNoID0gKHJlcXVlc3Q6IFJlcXVlc3QsIGluZm86IERlbm8uU2VydmVIYW5kbGVySW5mbykgPT4ge1xuICAgICAgaWYgKCFmZXRjaFNlcnZlcikge1xuICAgICAgICBmZXRjaFNlcnZlciA9IHRoaXMuZ2V0U2VydmVyKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmZXRjaFNlcnZlci5oYW5kbGUocmVxdWVzdCwgaW5mbyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5LlxuICAgKiBVc2UgdGhlIGFyZ3VtZW50cyB0byByZXR1cm4gYSBzdWJwYXRoXG4gICAqL1xuICByb290KC4uLnBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUGF0aChqb2luKHRoaXMub3B0aW9ucy5jd2QsIC4uLnBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHNyYyBkaXJlY3RvcnkuXG4gICAqIFVzZSB0aGUgYXJndW1lbnRzIHRvIHJldHVybiBhIHN1YnBhdGhcbiAgICovXG4gIHNyYyguLi5wYXRoOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm9vdCh0aGlzLm9wdGlvbnMuc3JjLCAuLi5wYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRlc3QgZGlyZWN0b3J5LlxuICAgKiBVc2UgdGhlIGFyZ3VtZW50cyB0byByZXR1cm4gYSBzdWJwYXRoXG4gICAqL1xuICBkZXN0KC4uLnBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb290KHRoaXMub3B0aW9ucy5kZXN0LCAuLi5wYXRoKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSBsaXN0ZW5lciB0byBhbiBldmVudCAqL1xuICBhZGRFdmVudExpc3RlbmVyPEsgZXh0ZW5kcyBTaXRlRXZlbnRUeXBlPihcbiAgICB0eXBlOiBLLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyPEV2ZW50ICYgU2l0ZUV2ZW50PEs+PiB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogRXZlbnRPcHRpb25zLFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBmbiA9IHR5cGVvZiBsaXN0ZW5lciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyAoKSA9PiB0aGlzLnJ1bihsaXN0ZW5lcilcbiAgICAgIDogbGlzdGVuZXI7XG5cbiAgICB0aGlzLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaCBhbiBldmVudCAqL1xuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBTaXRlRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxuICAvKiogVXNlIGEgcGx1Z2luICovXG4gIHVzZShwbHVnaW46IFBsdWdpbik6IHRoaXMge1xuICAgIHBsdWdpbih0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNjcmlwdCBvciBhIGZ1bmN0aW9uLCBzbyBpdCBjYW4gYmUgZXhlY3V0ZWQgd2l0aFxuICAgKiBsdW1lIHJ1biA8bmFtZT5cbiAgICovXG4gIHNjcmlwdChuYW1lOiBzdHJpbmcsIC4uLnNjcmlwdHM6IFNjcmlwdE9yRnVuY3Rpb25bXSk6IHRoaXMge1xuICAgIHRoaXMuc2NyaXB0cy5zZXQobmFtZSwgLi4uc2NyaXB0cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogUnVucyBhIHNjcmlwdCBvciBmdW5jdGlvbiByZWdpc3RlcmVkIHByZXZpb3VzbHkgKi9cbiAgYXN5bmMgcnVuKG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNjcmlwdHMucnVuKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZGF0YSBsb2FkZXIgZm9yIHNvbWUgZXh0ZW5zaW9uc1xuICAgKi9cbiAgbG9hZERhdGEoZXh0ZW5zaW9uczogc3RyaW5nW10sIGRhdGFMb2FkZXI6IExvYWRlciA9IHRleHRMb2FkZXIpOiB0aGlzIHtcbiAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dCkgPT4ge1xuICAgICAgdGhpcy5mb3JtYXRzLnNldCh7IGV4dCwgZGF0YUxvYWRlciB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcGFnZSBsb2FkZXIgZm9yIHNvbWUgZXh0ZW5zaW9uc1xuICAgKi9cbiAgbG9hZFBhZ2VzKFxuICAgIGV4dGVuc2lvbnM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IExvYWRQYWdlc09wdGlvbnMgfCBMb2FkZXIgPSB7fSxcbiAgKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB7IGxvYWRlcjogb3B0aW9ucyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5naW5lLCBwYWdlU3ViRXh0ZW5zaW9uIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvYWRlciA9IG9wdGlvbnMubG9hZGVyIHx8IHRleHRMb2FkZXI7XG4gICAgY29uc3QgZW5naW5lcyA9IEFycmF5LmlzQXJyYXkoZW5naW5lKSA/IGVuZ2luZSA6IGVuZ2luZSA/IFtlbmdpbmVdIDogW107XG5cbiAgICBjb25zdCBwYWdlRXh0ZW5zaW9ucyA9IHBhZ2VTdWJFeHRlbnNpb25cbiAgICAgID8gZXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gcGFnZVN1YkV4dGVuc2lvbiArIGV4dClcbiAgICAgIDogZXh0ZW5zaW9ucztcblxuICAgIHBhZ2VFeHRlbnNpb25zLmZvckVhY2goKGV4dCkgPT4ge1xuICAgICAgdGhpcy5mb3JtYXRzLnNldCh7XG4gICAgICAgIGV4dCxcbiAgICAgICAgbG9hZGVyLFxuICAgICAgICBpc1BhZ2U6IHRydWUsXG4gICAgICAgIGVuZ2luZXMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChwYWdlU3ViRXh0ZW5zaW9uKSB7XG4gICAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dCkgPT4gdGhpcy5mb3JtYXRzLnNldCh7IGV4dCwgbG9hZGVyLCBlbmdpbmVzIH0pKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBoZWxwZXJdIG9mIHRoaXMucmVuZGVyZXIuaGVscGVycykge1xuICAgICAgZW5naW5lcy5mb3JFYWNoKChlbmdpbmUpID0+IGVuZ2luZS5hZGRIZWxwZXIobmFtZSwgLi4uaGVscGVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogUmVnaXN0ZXIgYSBwcmVwcm9jZXNzb3IgZm9yIHNvbWUgZXh0ZW5zaW9ucyAqL1xuICBwcmVwcm9jZXNzKHByb2Nlc3NvcjogUHJvY2Vzc29yKTogdGhpcztcbiAgcHJlcHJvY2VzcyhleHRlbnNpb25zOiBFeHRlbnNpb25zLCBwcm9jZXNzb3I6IFByb2Nlc3Nvcik6IHRoaXM7XG4gIHByZXByb2Nlc3MoXG4gICAgZXh0ZW5zaW9uczogRXh0ZW5zaW9ucyB8IFByb2Nlc3NvcixcbiAgICBwcmVwcm9jZXNzb3I/OiBQcm9jZXNzb3IsXG4gICk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVwcm9jZXNzKFwiKlwiLCBleHRlbnNpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXByb2Nlc3NvcnMuc2V0KGV4dGVuc2lvbnMsIHByZXByb2Nlc3NvciEpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXh0ZW5zaW9ucykpIHtcbiAgICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0KSA9PiB0aGlzLmZvcm1hdHMuc2V0KHsgZXh0IH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIHByb2Nlc3NvciBmb3Igc29tZSBleHRlbnNpb25zICovXG4gIHByb2Nlc3MocHJvY2Vzc29yOiBQcm9jZXNzb3IpOiB0aGlzO1xuICBwcm9jZXNzKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIHByb2Nlc3NvcjogUHJvY2Vzc29yKTogdGhpcztcbiAgcHJvY2VzcyhleHRlbnNpb25zOiBFeHRlbnNpb25zIHwgUHJvY2Vzc29yLCBwcm9jZXNzb3I/OiBQcm9jZXNzb3IpOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2VzcyhcIipcIiwgZXh0ZW5zaW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzb3JzLnNldChleHRlbnNpb25zLCBwcm9jZXNzb3IhKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4dGVuc2lvbnMpKSB7XG4gICAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dCkgPT4gdGhpcy5mb3JtYXRzLnNldCh7IGV4dCB9KSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgdGVtcGxhdGUgZmlsdGVyICovXG4gIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlcjogSGVscGVyLCBhc3luYyA9IGZhbHNlKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyKG5hbWUsIGZpbHRlciwgeyB0eXBlOiBcImZpbHRlclwiLCBhc3luYyB9KTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIHRlbXBsYXRlIGhlbHBlciAqL1xuICBoZWxwZXIobmFtZTogc3RyaW5nLCBmbjogSGVscGVyLCBvcHRpb25zOiBIZWxwZXJPcHRpb25zKTogdGhpcyB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRIZWxwZXIobmFtZSwgZm4sIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgYmFzZW5hbWUgcGFyc2VyICovXG4gIHBhcnNlQmFzZW5hbWUocGFyc2VyOiBCYXNlbmFtZVBhcnNlcik6IHRoaXMge1xuICAgIHRoaXMuc291cmNlLmJhc2VuYW1lUGFyc2Vycy5wdXNoKHBhcnNlcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogUmVnaXN0ZXIgZXh0cmEgZGF0YSBhY2Nlc3NpYmxlIGJ5IHRoZSBsYXlvdXRzICovXG4gIGRhdGEobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2NvcGUgPSBcIi9cIik6IHRoaXMge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNjb3BlZERhdGEuZ2V0KHNjb3BlKSB8fCB7fTtcbiAgICBkYXRhW25hbWVdID0gdmFsdWU7XG4gICAgdGhpcy5zY29wZWREYXRhLnNldChzY29wZSwgZGF0YSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogUmVnaXN0ZXIgYSBwYWdlICovXG4gIHBhZ2UoZGF0YTogUGFydGlhbDxEYXRhPiwgc2NvcGUgPSBcIi9cIik6IHRoaXMge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5zY29wZWRQYWdlcy5nZXQoc2NvcGUpIHx8IFtdO1xuICAgIHBhZ2VzLnB1c2goZGF0YSk7XG4gICAgdGhpcy5zY29wZWRQYWdlcy5zZXQoc2NvcGUsIHBhZ2VzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhbiBleHRyYSBjb21wb25lbnQgYWNjZXNpYmxlIGJ5IHRoZSBsYXlvdXRzICovXG4gIGNvbXBvbmVudChjb250ZXh0OiBzdHJpbmcsIGNvbXBvbmVudDogVXNlckNvbXBvbmVudCwgc2NvcGUgPSBcIi9cIik6IHRoaXMge1xuICAgIGNvbnN0IHBpZWNlcyA9IGNvbnRleHQuc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHNjb3BlZENvbXBvbmVudHM6IENvbXBvbmVudHMgPSB0aGlzLnNjb3BlZENvbXBvbmVudHMuZ2V0KHNjb3BlKSB8fFxuICAgICAgbmV3IE1hcCgpO1xuICAgIGxldCBjb21wb25lbnRzOiBDb21wb25lbnRzID0gc2NvcGVkQ29tcG9uZW50cztcblxuICAgIHdoaWxlIChwaWVjZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGllY2VzLnNoaWZ0KCkhO1xuICAgICAgaWYgKCFjb21wb25lbnRzLmdldChuYW1lKSkge1xuICAgICAgICBjb21wb25lbnRzLnNldChuYW1lLCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuZ2V0KG5hbWUpIGFzIENvbXBvbmVudHM7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBpZiAoY29tcG9uZW50LmNzcykge1xuICAgICAgYXNzZXRzLnNldChjb21wb25lbnQubmFtZSArIFwiLmNzc1wiLCBjb21wb25lbnQuY3NzKTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudC5qcykge1xuICAgICAgYXNzZXRzLnNldChjb21wb25lbnQubmFtZSArIFwiLmpzXCIsIGNvbXBvbmVudC5qcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50cy5zZXQoY29tcG9uZW50Lm5hbWUsIHtcbiAgICAgIG5hbWU6IGNvbXBvbmVudC5uYW1lLFxuICAgICAgcmVuZGVyOiBjb21wb25lbnQucmVuZGVyLFxuICAgICAgYXNzZXRzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZWRDb21wb25lbnRzLnNldChzY29wZSwgc2NvcGVkQ29tcG9uZW50cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogUmVnaXN0ZXIgYSBtZXJnaW5nIHN0cmF0ZWd5IGZvciBhIGRhdGEga2V5ICovXG4gIG1lcmdlS2V5KGtleTogc3RyaW5nLCBtZXJnZTogTWVyZ2VTdHJhdGVneSwgc2NvcGUgPSBcIi9cIik6IHRoaXMge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNjb3BlZERhdGEuZ2V0KHNjb3BlKSB8fCB7fTtcbiAgICBjb25zdCBtZXJnZWRLZXlzID0gZGF0YS5tZXJnZWRLZXlzIHx8IHt9O1xuICAgIG1lcmdlZEtleXNba2V5XSA9IG1lcmdlO1xuICAgIGRhdGEubWVyZ2VkS2V5cyA9IG1lcmdlZEtleXM7XG4gICAgdGhpcy5zY29wZWREYXRhLnNldChzY29wZSwgZGF0YSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQWRkIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIHRoZSBzaXRlICovXG4gIGFkZChmcm9tOiBzdHJpbmcsIHRvPzogc3RyaW5nIHwgRGVzdGluYXRpb24pOiB0aGlzO1xuICBhZGQoZnJvbTogc3RyaW5nW10sIHRvPzogRGVzdGluYXRpb24pOiB0aGlzO1xuICBhZGQoXG4gICAgZnJvbTogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgdG8/OiBzdHJpbmcgfCBEZXN0aW5hdGlvbixcbiAgKTogdGhpcyB7XG4gICAgdGhpcy4jYWRkT3JDb3B5KGZyb20sIHRvLCBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQ29weSBmaWxlcyBvciBkaXJlY3RvcmllcyB0byB0aGUgc2l0ZSAqL1xuICBjb3B5KGZyb206IHN0cmluZywgdG8/OiBzdHJpbmcgfCBEZXN0aW5hdGlvbik6IHRoaXM7XG4gIGNvcHkoZnJvbTogc3RyaW5nW10sIHRvPzogRGVzdGluYXRpb24pOiB0aGlzO1xuICBjb3B5KFxuICAgIGZyb206IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIHRvPzogc3RyaW5nIHwgRGVzdGluYXRpb24sXG4gICk6IHRoaXMge1xuICAgIHRoaXMuI2FkZE9yQ29weShmcm9tLCB0bywgdHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQWRkIG9yIGNvcHkgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gdGhlIHNpdGUgKi9cbiAgI2FkZE9yQ29weShcbiAgICBmcm9tOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICB0bzogc3RyaW5nIHwgRGVzdGluYXRpb24gfCB1bmRlZmluZWQsXG4gICAgY29weTogYm9vbGVhbixcbiAgKTogdm9pZCB7XG4gICAgLy8gRmlsZSBleHRlbnNpb25zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZnJvbSkpIHtcbiAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBhZGQoKSBmaWxlcyBieSBleHRlbnNpb24gZXhwZWN0cyBhIGZ1bmN0aW9uIGFzIHNlY29uZCBhcmd1bWVudCBidXQgZ290IGEgc3RyaW5nIFwiJHt0b31cImAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXN0ID0gdHlwZW9mIHRvID09PSBcImZ1bmN0aW9uXCIgPyB0byA6IChwYXRoOiBzdHJpbmcpID0+IHBhdGg7XG4gICAgICBmb3IgKGNvbnN0IGV4dCBvZiBmcm9tKSB7XG4gICAgICAgIHRoaXMuc291cmNlLmFkZEZpbGUoZXh0LCBkZXN0LCBjb3B5KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzLnNldCh7IGV4dCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdGUgZmlsZXNcbiAgICBpZiAoZnJvbS5zdGFydHNXaXRoKFwibnBtOlwiKSkge1xuICAgICAgZnJvbSA9IGZyb20ucmVwbGFjZShcIm5wbTpcIiwgXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL1wiKTtcbiAgICB9XG5cbiAgICBpZiAoaXNVcmwoZnJvbSkpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZnJvbSk7XG5cbiAgICAgIGlmICh0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRvID0gcG9zaXguYmFzZW5hbWUodXJsLnBhdGhuYW1lKSB8fCB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0byA9IHRvKHVybC5ocmVmKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvPy5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgdG8gPSBwb3NpeC5qb2luKHRvLCBwb3NpeC5iYXNlbmFtZSh1cmwucGF0aG5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0byB8fCB0by5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlc3RpbmF0aW9uIHBhdGg6ICR7dG99YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVtb3RlRmlsZSh0bywgdXJsLmhyZWYpO1xuICAgICAgdGhpcy5zb3VyY2UuYWRkRmlsZSh0bywgdG8sIGNvcHkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEl0J3MgYSBwYXRoXG4gICAgaWYgKGZyb20uc3RhcnRzV2l0aChcIi4uL1wiKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSXQncyBub3QgcG9zc2libGUgdG8gY29weSBmaWxlcyBvdXRzaXRlIHRoZSBzcmMgZGlyZWN0b3J5IChcIiR7ZnJvbX1cIilgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZS5hZGRGaWxlKFxuICAgICAgbm9ybWFsaXplUGF0aChmcm9tKSxcbiAgICAgIHRvID8/ICgoc3RyOiBzdHJpbmcpID0+IHN0ciksXG4gICAgICBjb3B5LFxuICAgICk7XG4gIH1cblxuICAvKiogSWdub3JlIG9uZSBvciBzZXZlcmFsIGZpbGVzIG9yIGRpcmVjdG9yaWVzICovXG4gIGlnbm9yZSguLi5wYXRoczogKHN0cmluZyB8IFNjb3BlRmlsdGVyKVtdKTogdGhpcyB7XG4gICAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuc291cmNlLmFkZElnbm9yZWRQYXRoKHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3VyY2UuYWRkSWdub3JlRmlsdGVyKHBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIERlZmluZSBpbmRlcGVuZGVudCBzY29wZXMgdG8gb3B0aW1pemUgdGhlIHVwZGF0ZSBwcm9jZXNzICovXG4gIHNjb3BlZFVwZGF0ZXMoLi4uc2NvcGVzOiBTY29wZUZpbHRlcltdKTogdGhpcyB7XG4gICAgc2NvcGVzLmZvckVhY2goKHNjb3BlKSA9PiB0aGlzLnNjb3Blcy5zY29wZXMuYWRkKHNjb3BlKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogRGVmaW5lIGEgcmVtb3RlIGZhbGxiYWNrIGZvciBhIG1pc3NpbmcgbG9jYWwgZmlsZSAqL1xuICByZW1vdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIHVybDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5mcy5yZW1vdGVGaWxlcy5zZXQocG9zaXguam9pbihcIi9cIiwgZmlsZW5hbWUpLCB1cmwpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBkZXN0IGRpcmVjdG9yeSBhbmQgYW55IGNhY2hlICovXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMud3JpdGVyLmNsZWFyKCk7XG4gIH1cblxuICAvKiogQnVpbGQgdGhlIGVudGlyZSBzaXRlICovXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChhd2FpdCB0aGlzLmRpc3BhdGNoRXZlbnQoeyB0eXBlOiBcImJlZm9yZUJ1aWxkXCIgfSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbXB0eURlc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwZXJmb3JtYW5jZS5tYXJrKFwic3RhcnQtbG9hZGZpbGVzXCIpO1xuXG4gICAgLy8gTG9hZCBzb3VyY2UgZmlsZXNcbiAgICB0aGlzLmZzLmluaXQoKTtcblxuICAgIGlmIChhd2FpdCB0aGlzLmRpc3BhdGNoRXZlbnQoeyB0eXBlOiBcImFmdGVyTG9hZFwiIH0pID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgc2l0ZSBjb250ZW50XG4gICAgY29uc3Qgc2hvd0RyYWZ0cyA9IGVudjxib29sZWFuPihcIkxVTUVfRFJBRlRTXCIpO1xuICAgIGNvbnN0IFtfcGFnZXMsIF9zdGF0aWNGaWxlc10gPSBhd2FpdCB0aGlzLnNvdXJjZS5idWlsZChcbiAgICAgIChfLCBwYWdlKSA9PiAhcGFnZT8uZGF0YS5kcmFmdCB8fCBzaG93RHJhZnRzID09PSB0cnVlLFxuICAgICk7XG5cbiAgICBwZXJmb3JtYW5jZS5tYXJrKFwiZW5kLWxvYWRmaWxlc1wiKTtcblxuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBQYWdlcyBsb2FkZWQgaW4gJHtcbiAgICAgICAgKHBlcmZvcm1hbmNlLm1lYXN1cmUoXCJkdXJhdGlvblwiLCBcInN0YXJ0LWxvYWRmaWxlc1wiLCBcImVuZC1sb2FkZmlsZXNcIilcbiAgICAgICAgICAuZHVyYXRpb24gL1xuICAgICAgICAgIDEwMDApLnRvRml4ZWQoMilcbiAgICAgIH0gc2Vjb25kc2AsXG4gICAgKTtcblxuICAgIC8vIFNhdmUgc3RhdGljIGZpbGVzIGludG8gc2l0ZS5maWxlc1xuICAgIHRoaXMuZmlsZXMuc3BsaWNlKDAsIHRoaXMuZmlsZXMubGVuZ3RoLCAuLi5fc3RhdGljRmlsZXMpO1xuXG4gICAgLy8gU3RvcCBpZiB0aGUgYnVpbGQgaXMgY2FuY2VsbGVkXG4gICAgaWYgKGF3YWl0IHRoaXMuI2J1aWxkUGFnZXMoX3BhZ2VzKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSBwYWdlcyBhbmQgY29weSBzdGF0aWMgZmlsZXMgaW4gdGhlIGRlc3QgZm9sZGVyXG4gICAgY29uc3QgcGFnZXMgPSBhd2FpdCB0aGlzLndyaXRlci5zYXZlUGFnZXModGhpcy5wYWdlcyk7XG4gICAgY29uc3Qgc3RhdGljRmlsZXMgPSBhd2FpdCB0aGlzLndyaXRlci5jb3B5RmlsZXModGhpcy5maWxlcyk7XG5cbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoRXZlbnQoeyB0eXBlOiBcImFmdGVyQnVpbGRcIiwgcGFnZXMsIHN0YXRpY0ZpbGVzIH0pO1xuICB9XG5cbiAgLyoqIFJlbG9hZCBzb21lIGZpbGVzIHRoYXQgbWlnaHQgYmUgY2hhbmdlZCAqL1xuICBhc3luYyB1cGRhdGUoZmlsZXM6IFNldDxzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiYmVmb3JlVXBkYXRlXCIsIGZpbGVzIH0pID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoLmRlbGV0ZUNhY2hlKCk7XG5cbiAgICAvLyBSZWxvYWQgdGhlIGNoYW5nZWQgZmlsZXNcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIC8vIERlbGV0ZSB0aGUgZmlsZSBmcm9tIHRoZSBjYWNoZVxuICAgICAgdGhpcy5mb3JtYXRzLmRlbGV0ZUNhY2hlKGZpbGUpO1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmZzLnVwZGF0ZShmaWxlKTtcblxuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHBhZ2VzIG9yIHN0YXRpYyBmaWxlcyBkZXBlbmRpbmcgb24gdGhpcyBlbnRyeVxuICAgICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzXG4gICAgICAgIC5maWx0ZXIoKHBhZ2UpID0+IHBhdGhCZWxvbmdzKGVudHJ5LnBhdGgsIHBhZ2Uuc3JjLmVudHJ5Py5wYXRoKSlcbiAgICAgICAgLm1hcCgocGFnZSkgPT4gcGFnZS5vdXRwdXRQYXRoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5maWxlc1xuICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiBwYXRoQmVsb25ncyhlbnRyeS5wYXRoLCBmaWxlLnNyYy5lbnRyeT8ucGF0aCkpXG4gICAgICAgIC5tYXAoKGZpbGUpID0+IGZpbGUub3V0cHV0UGF0aCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud3JpdGVyLnJlbW92ZUZpbGVzKFsuLi5wYWdlcywgLi4uZmlsZXNdKTtcbiAgICB9XG5cbiAgICBpZiAoYXdhaXQgdGhpcy5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJhZnRlckxvYWRcIiB9KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHNpdGUgY29udGVudFxuICAgIGNvbnN0IHNob3dEcmFmdHMgPSBlbnY8Ym9vbGVhbj4oXCJMVU1FX0RSQUZUU1wiKTtcbiAgICBjb25zdCBbX3BhZ2VzLCBfc3RhdGljRmlsZXNdID0gYXdhaXQgdGhpcy5zb3VyY2UuYnVpbGQoXG4gICAgICAoXywgcGFnZSkgPT4gIXBhZ2U/LmRhdGEuZHJhZnQgfHwgc2hvd0RyYWZ0cyA9PT0gdHJ1ZSxcbiAgICAgIHRoaXMuc2NvcGVzLmdldEZpbHRlcihmaWxlcyksXG4gICAgKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBwYWdlcyBhbmQgc2F2ZSBzdGF0aWMgZmlsZXMgaW50byBzaXRlLmZpbGVzXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoMCwgdGhpcy5maWxlcy5sZW5ndGgsIC4uLl9zdGF0aWNGaWxlcyk7XG5cbiAgICBpZiAoYXdhaXQgdGhpcy4jYnVpbGRQYWdlcyhfcGFnZXMpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlIHBhZ2VzIGFuZCBjb3B5IHN0YXRpYyBmaWxlcyBpbiB0aGUgZGVzdCBmb2xkZXJcbiAgICBjb25zdCBwYWdlcyA9IGF3YWl0IHRoaXMud3JpdGVyLnNhdmVQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICBjb25zdCBzdGF0aWNGaWxlcyA9IGF3YWl0IHRoaXMud3JpdGVyLmNvcHlGaWxlcyh0aGlzLmZpbGVzKTtcblxuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hFdmVudCh7XG4gICAgICB0eXBlOiBcImFmdGVyVXBkYXRlXCIsXG4gICAgICBmaWxlcyxcbiAgICAgIHBhZ2VzLFxuICAgICAgc3RhdGljRmlsZXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVuZGVyIHBhZ2VzXG4gICAqIFRoZSBjb21tb24gb3BlcmF0aW9ucyBvZiBidWlsZCBhbmQgdXBkYXRlXG4gICAqL1xuICBhc3luYyAjYnVpbGRQYWdlcyhwYWdlczogUGFnZVtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gUHJvbW90ZSB0aGUgZmlsZXMgdGhhdCBtdXN0IGJlIHByZXByb2Nlc3NlZCB0byBwYWdlc1xuICAgIGNvbnN0IHByZUV4dGVuc2lvbnMgPSB0aGlzLnByZXByb2Nlc3NvcnMuZXh0ZW5zaW9ucztcbiAgICBhd2FpdCBmaWxlc1RvUGFnZXMoXG4gICAgICB0aGlzLmZpbGVzLFxuICAgICAgcGFnZXMsXG4gICAgICAoZmlsZSkgPT4gIWZpbGUuaXNDb3B5ICYmIHByZUV4dGVuc2lvbnMuaGFzKGZpbGUuc3JjLmV4dCksXG4gICAgKTtcblxuICAgIGlmIChhd2FpdCB0aGlzLmRpc3BhdGNoRXZlbnQoeyB0eXBlOiBcImJlZm9yZVJlbmRlclwiLCBwYWdlcyB9KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcGVyZm9ybWFuY2UubWFyayhcInN0YXJ0LXJlbmRlclwiKTtcblxuICAgIC8vIFJlbmRlciB0aGUgcGFnZXNcbiAgICB0aGlzLnBhZ2VzLnNwbGljZSgwKTtcbiAgICBhd2FpdCB0aGlzLnJlbmRlcmVyLnJlbmRlclBhZ2VzKHBhZ2VzLCB0aGlzLnBhZ2VzKTtcblxuICAgIC8vIEFkZCBleHRyYSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcG9uZW50c1xuICAgIGZvciAoY29uc3QgeyBwYXRoLCBlbnRyaWVzIH0gb2YgdGhpcy5zb3VyY2UuZ2V0Q29tcG9uZW50c0V4dHJhQ29kZSgpKSB7XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5jc3NcIikpIHtcbiAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVQYWdlKHBhdGgpO1xuICAgICAgICBwYWdlLnRleHQgPSBpbnNlcnRDb250ZW50KFxuICAgICAgICAgIHBhZ2UudGV4dCxcbiAgICAgICAgICBhd2FpdCBjb21waWxlQ1NTKHBhdGgsIGVudHJpZXMsIHRoaXMuZnMuZW50cmllcyksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbXBvbmVudHMucGxhY2Vob2xkZXIsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5qc1wiKSkge1xuICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5nZXRPckNyZWF0ZVBhZ2UocGF0aCk7XG4gICAgICAgIHBhZ2UudGV4dCA9IGluc2VydENvbnRlbnQoXG4gICAgICAgICAgcGFnZS50ZXh0LFxuICAgICAgICAgIGF3YWl0IGNvbXBpbGVKUyhwYXRoLCBlbnRyaWVzLCB0aGlzLmZzLmVudHJpZXMpLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jb21wb25lbnRzLnBsYWNlaG9sZGVyLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBlbXB0eSBwYWdlc1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMucGFnZXMubGVuZ3RoLFxuICAgICAgLi4udGhpcy5wYWdlcy5maWx0ZXIoKHBhZ2UpID0+IHtcbiAgICAgICAgaWYgKCFwYWdlLmNvbnRlbnQpIHtcbiAgICAgICAgICBsb2cud2FybihcbiAgICAgICAgICAgIGBbTHVtZV0gPGN5YW4+U2tpcHBlZCBwYWdlPC9jeWFuPiAke3BhZ2UuZGF0YS51cmx9IChmaWxlIGNvbnRlbnQgaXMgZW1wdHkpYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHBlcmZvcm1hbmNlLm1hcmsoXCJlbmQtcmVuZGVyXCIpO1xuXG4gICAgbG9nLmRlYnVnKFxuICAgICAgYFBhZ2VzIHJlbmRlcmVkIGluICR7XG4gICAgICAgIChwZXJmb3JtYW5jZS5tZWFzdXJlKFwiZHVyYXRpb25cIiwgXCJzdGFydC1yZW5kZXJcIiwgXCJlbmQtcmVuZGVyXCIpXG4gICAgICAgICAgLmR1cmF0aW9uIC9cbiAgICAgICAgICAxMDAwKS50b0ZpeGVkKDIpXG4gICAgICB9IHNlY29uZHNgLFxuICAgICk7XG5cbiAgICBwZXJmb3JtYW5jZS5tYXJrKFwic3RhcnQtcHJvY2Vzc1wiKTtcbiAgICBpZiAoXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50cy5kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgdHlwZTogXCJhZnRlclJlbmRlclwiLFxuICAgICAgICBwYWdlczogdGhpcy5wYWdlcyxcbiAgICAgIH0pID09PSBmYWxzZVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFByb21vdGUgdGhlIGZpbGVzIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgdG8gcGFnZXNcbiAgICBjb25zdCBleHRlbnNpb25zID0gdGhpcy5wcm9jZXNzb3JzLmV4dGVuc2lvbnM7XG4gICAgYXdhaXQgZmlsZXNUb1BhZ2VzKFxuICAgICAgdGhpcy5maWxlcyxcbiAgICAgIHRoaXMucGFnZXMsXG4gICAgICAoZmlsZSkgPT4gIWZpbGUuaXNDb3B5ICYmIGV4dGVuc2lvbnMuaGFzKGZpbGUuc3JjLmV4dCksXG4gICAgKTtcblxuICAgIC8vIFJ1biB0aGUgcHJvY2Vzc29ycyB0byB0aGUgcGFnZXNcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3NvcnMucnVuKHRoaXMucGFnZXMpO1xuICAgIHBlcmZvcm1hbmNlLm1hcmsoXCJlbmQtcHJvY2Vzc1wiKTtcblxuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBQYWdlcyBwcm9jZXNzZWQgaW4gJHtcbiAgICAgICAgKHBlcmZvcm1hbmNlLm1lYXN1cmUoXCJkdXJhdGlvblwiLCBcInN0YXJ0LXByb2Nlc3NcIiwgXCJlbmQtcHJvY2Vzc1wiKVxuICAgICAgICAgIC5kdXJhdGlvbiAvXG4gICAgICAgICAgMTAwMCkudG9GaXhlZCgyKVxuICAgICAgfSBzZWNvbmRzYCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiYmVmb3JlU2F2ZVwiIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgVVJMIG9mIGEgcGF0aCAqL1xuICB1cmwocGF0aDogc3RyaW5nLCBhYnNvbHV0ZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICBwYXRoLnN0YXJ0c1dpdGgoXCIuL1wiKSB8fCBwYXRoLnN0YXJ0c1dpdGgoXCIuLi9cIikgfHxcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcIj9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwiI1wiKSB8fCBwYXRoLnN0YXJ0c1dpdGgoXCIvL1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gSXQncyBhIHNvdXJjZSBmaWxlXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIn4vXCIpKSB7XG4gICAgICBwYXRoID0gZGVjb2RlVVJJKHBhdGguc2xpY2UoMSkpO1xuXG4gICAgICAvLyBIYXMgYSBzZWFyY2ggcXVlcnlcbiAgICAgIGNvbnN0IG1hdGNoID0gcGF0aC5tYXRjaCgvXiguKilcXHMqXFwoKFteKV0rKVxcKSQvKTtcbiAgICAgIGNvbnN0IHNyY1BhdGggPSBtYXRjaCA/IG1hdGNoWzFdIDogcGF0aDtcbiAgICAgIGNvbnN0IHBhZ2VzID0gbWF0Y2hcbiAgICAgICAgPyB0aGlzLnNlYXJjaC5wYWdlcyhtYXRjaFsyXSkubWFwPFBhZ2U+KChkYXRhKSA9PiBkYXRhLnBhZ2UhKVxuICAgICAgICA6IHRoaXMucGFnZXM7XG5cbiAgICAgIC8vIEl0J3MgYSBwYWdlXG4gICAgICBjb25zdCBwYWdlID0gcGFnZXMuZmluZCgocGFnZSkgPT5cbiAgICAgICAgcGFnZS5zcmMucGF0aCArIHBhZ2Uuc3JjLmV4dCA9PT0gc3JjUGF0aFxuICAgICAgKTtcblxuICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgcGF0aCA9IHBhZ2UuZGF0YS51cmw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGEgc3RhdGljIGZpbGVcbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5zcmMuZW50cnkucGF0aCA9PT0gcGF0aCk7XG5cbiAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICBwYXRoID0gZmlsZS5vdXRwdXRQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGZpbGUgbm90IGZvdW5kOiAke3BhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWJzb2x1dGUgVVJMcyBhcmUgcmV0dXJuZWQgYXMgaXNcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKHBhdGgpLmhyZWY7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgodGhpcy5vcHRpb25zLmxvY2F0aW9uLnBhdGhuYW1lKSkge1xuICAgICAgcGF0aCA9IHBvc2l4LmpvaW4odGhpcy5vcHRpb25zLmxvY2F0aW9uLnBhdGhuYW1lLCBwYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWJzb2x1dGUgPyB0aGlzLm9wdGlvbnMubG9jYXRpb24ub3JpZ2luICsgcGF0aCA6IHBhdGg7XG4gIH1cblxuICBhc3luYyBnZXRPckNyZWF0ZVBhZ2UodXJsOiBzdHJpbmcpOiBQcm9taXNlPFBhZ2U+IHtcbiAgICB1cmwgPSBub3JtYWxpemVQYXRoKHVybCk7XG5cbiAgICAvLyBJdCdzIGEgcGFnZVxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VzLmZpbmQoKHBhZ2UpID0+IHBhZ2UuZGF0YS51cmwgPT09IHVybCk7XG5cbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfVxuXG4gICAgLy8gSXQncyBhIHN0YXRpYyBmaWxlXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbGVzLmZpbmRJbmRleCgoZikgPT4gZi5vdXRwdXRQYXRoID09PSB1cmwpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgZmlsZS50b1BhZ2UoKTtcbiAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlKTtcbiAgICAgIHJldHVybiBwYWdlO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIHNvdXJjZSBmaWxlcyBkaXJlY3RseVxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5mcy5lbnRyaWVzLmdldCh1cmwpO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSBhd2FpdCBlbnRyeS5nZXRDb250ZW50KGJpbmFyeUxvYWRlcik7XG4gICAgICBjb25zdCBwYWdlID0gUGFnZS5jcmVhdGUoeyB1cmwgfSwgeyBlbnRyeSB9KTtcbiAgICAgIHBhZ2UuY29udGVudCA9IGNvbnRlbnQgYXMgVWludDhBcnJheTtcbiAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlKTtcbiAgICAgIHJldHVybiBwYWdlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1BhZ2UgPSBQYWdlLmNyZWF0ZSh7IHVybCB9KTtcbiAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgcmV0dXJuIG5ld1BhZ2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb250ZW50IG9mIGEgZmlsZS5cbiAgICogUmVzb2x2ZSB0aGUgcGF0aCBpZiBpdCdzIG5lZWRlZC5cbiAgICovXG4gIGFzeW5jIGdldENvbnRlbnQoZmlsZTogc3RyaW5nLCBiaW5hcnk6IHRydWUpOiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+O1xuICBhc3luYyBnZXRDb250ZW50KGZpbGU6IHN0cmluZywgYmluYXJ5OiBmYWxzZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgYXN5bmMgZ2V0Q29udGVudChcbiAgICBmaWxlOiBzdHJpbmcsXG4gICAgYmluYXJ5OiBib29sZWFuLFxuICApOiBQcm9taXNlPHN0cmluZyB8IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+O1xuICBhc3luYyBnZXRDb250ZW50KFxuICAgIGZpbGU6IHN0cmluZyxcbiAgICBiaW5hcnk6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8c3RyaW5nIHwgVWludDhBcnJheSB8IHVuZGVmaW5lZD4ge1xuICAgIGZpbGUgPSBub3JtYWxpemVQYXRoKGZpbGUpO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5zcmMoKTtcblxuICAgIGlmIChmaWxlLnN0YXJ0c1dpdGgoYmFzZVBhdGgpKSB7XG4gICAgICBmaWxlID0gbm9ybWFsaXplUGF0aChmaWxlLnNsaWNlKGJhc2VQYXRoLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIGZpbGUgPSBkZWNvZGVVUkkoZmlsZSk7XG4gICAgY29uc3QgdXJsID0gZW5jb2RlVVJJKGZpbGUpO1xuXG4gICAgLy8gSXQncyBhIHBhZ2VcbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlcy5maW5kKChwYWdlKSA9PiBwYWdlLmRhdGEudXJsID09PSB1cmwpO1xuXG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgIHJldHVybiBiaW5hcnkgPyBwYWdlLmJ5dGVzIDogcGFnZS50ZXh0O1xuICAgIH1cblxuICAgIC8vIEl0J3MgYSBzdGF0aWMgZmlsZVxuICAgIGNvbnN0IHN0YXRpY0ZpbGUgPSB0aGlzLmZpbGVzLmZpbmQoKGYpID0+IGYub3V0cHV0UGF0aCA9PT0gZmlsZSk7XG5cbiAgICBpZiAoc3RhdGljRmlsZSkge1xuICAgICAgcmV0dXJuIGJpbmFyeVxuICAgICAgICA/IChhd2FpdCBzdGF0aWNGaWxlLnNyYy5lbnRyeS5nZXRDb250ZW50KGJpbmFyeUxvYWRlcikpXG4gICAgICAgICAgLmNvbnRlbnQgYXMgVWludDhBcnJheVxuICAgICAgICA6IChhd2FpdCBzdGF0aWNGaWxlLnNyYy5lbnRyeS5nZXRDb250ZW50KHRleHRMb2FkZXIpKS5jb250ZW50IGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBzb3VyY2UgZmlsZXMgZGlyZWN0bHlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmZzLmVudHJpZXMuZ2V0KGZpbGUpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBiaW5hcnlcbiAgICAgICAgICA/IChhd2FpdCBlbnRyeS5nZXRDb250ZW50KGJpbmFyeUxvYWRlcikpLmNvbnRlbnQgYXMgVWludDhBcnJheVxuICAgICAgICAgIDogKGF3YWl0IGVudHJ5LmdldENvbnRlbnQodGV4dExvYWRlcikpLmNvbnRlbnQgYXMgc3RyaW5nO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybnMgYSBGaWxlIHN5c3RlbSB3YXRjaGVyIG9mIHRoZSBzaXRlICovXG4gIGdldFdhdGNoZXIoKTogV2F0Y2hlciB7XG4gICAgcmV0dXJuIG5ldyBGU1dhdGNoZXIoe1xuICAgICAgcm9vdDogdGhpcy5zcmMoKSxcbiAgICAgIHBhdGhzOiB0aGlzLm9wdGlvbnMud2F0Y2hlci5pbmNsdWRlLFxuICAgICAgaWdub3JlOiB0aGlzLm9wdGlvbnMud2F0Y2hlci5pZ25vcmUsXG4gICAgICBkZWJvdW5jZTogdGhpcy5vcHRpb25zLndhdGNoZXIuZGVib3VuY2UsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIFdlYiBzZXJ2ZXIgb2YgdGhlIHNpdGUgKi9cbiAgZ2V0U2VydmVyKCk6IFNlcnZlciB7XG4gICAgY29uc3QgeyBwb3J0LCBob3N0bmFtZSwgcGFnZTQwNCwgbWlkZGxld2FyZXMgfSA9IHRoaXMub3B0aW9ucy5zZXJ2ZXI7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMub3B0aW9ucy5zZXJ2ZXIucm9vdCB8fCB0aGlzLmRlc3QoKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHsgcm9vdCwgcG9ydCwgaG9zdG5hbWUgfSk7XG5cbiAgICBzZXJ2ZXIudXNlKG5vdEZvdW5kKHtcbiAgICAgIHJvb3QsXG4gICAgICBwYWdlNDA0LFxuICAgICAgZGlyZWN0b3J5SW5kZXg6IHRydWUsXG4gICAgfSkpO1xuXG4gICAgaWYgKG1pZGRsZXdhcmVzKSB7XG4gICAgICBzZXJ2ZXIudXNlKC4uLm1pZGRsZXdhcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG59XG5cbi8qKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHJlc29sdmUgZnVuY3Rpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZU9wdGlvbnMge1xuICAvKiogV2hldGhlciBzZWFyY2ggaW4gdGhlIGluY2x1ZGVzIGZvbGRlciBvciBub3QgKi9cbiAgaW5jbHVkZXM/OiBib29sZWFuO1xuXG4gIC8qKiBEZWZhdWx0IGxvYWRlciAqL1xuICBsb2FkZXI/OiBMb2FkZXI7XG59XG5cbi8qKiBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHNpdGUgYnVpbGQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2l0ZU9wdGlvbnMge1xuICAvKiogVGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKi9cbiAgY3dkOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBwYXRoIG9mIHRoZSBzaXRlIHNvdXJjZSAqL1xuICBzcmM6IHN0cmluZztcblxuICAvKiogVGhlIHBhdGggb2YgdGhlIGJ1aWx0IGRlc3RpbmF0aW9uICovXG4gIGRlc3Q6IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgZW1wdHkgZm9sZGVyIHNob3VsZCBiZSBlbXB0aWVkIGJlZm9yZSB0aGUgYnVpbGQgKi9cbiAgZW1wdHlEZXN0PzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgc2l0ZSBpcyBpbiBwcmV2aWV3IG1vZGUgKi9cbiAgcHJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBkZWZhdWx0IGluY2x1ZGVzIHBhdGggKi9cbiAgaW5jbHVkZXM6IHN0cmluZztcblxuICAvKiogVGhlIGRlZmF1bHQgY3NzIGZpbGUgKi9cbiAgY3NzRmlsZTogc3RyaW5nO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBqcyBmaWxlICovXG4gIGpzRmlsZTogc3RyaW5nO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBmb2xkZXIgZm9yIGZvbnRzICovXG4gIGZvbnRzRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBzaXRlIGxvY2F0aW9uICh1c2VkIHRvIGdlbmVyYXRlIGZpbmFsIHVybHMpICovXG4gIGxvY2F0aW9uOiBVUkw7XG5cbiAgLyoqIFNldCB0cnVlIHRvIGdlbmVyYXRlIHByZXR0eSB1cmxzIChgL2Fib3V0LW1lL2ApICovXG4gIHByZXR0eVVybHM6IGJvb2xlYW47XG5cbiAgLyoqIFNldCB0cnVlIHRvIGRvbid0IGNvbnNpZGVyIHR3byB1cmxzIHRoZSBlcXVhbCBpZiB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBjYXNlICovXG4gIGNhc2VTZW5zaXRpdmVVcmxzOiBib29sZWFuO1xuXG4gIC8qKiBUaGUgbG9jYWwgc2VydmVyIG9wdGlvbnMgKi9cbiAgc2VydmVyOiBTZXJ2ZXJPcHRpb25zO1xuXG4gIC8qKiBUaGUgbG9jYWwgd2F0Y2hlciBvcHRpb25zICovXG4gIHdhdGNoZXI6IFdhdGNoZXJPcHRpb25zO1xuXG4gIC8qKiBUaGUgY29tcG9uZW50cyBvcHRpb25zICovXG4gIGNvbXBvbmVudHM6IENvbXBvbmVudHNPcHRpb25zO1xufVxuXG4vKiogVGhlIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBsb2NhbCBzZXJ2ZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3RvcnkgdG8gc2VydmUuXG4gICAqIEJ5IGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgdGhlIHNpdGUgZGVzdCBmb2xkZXIuXG4gICAqL1xuICByb290Pzogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcG9ydCB0byBsaXN0ZW4gb24gKi9cbiAgcG9ydDogbnVtYmVyO1xuXG4gIC8qKiBUaGUgaG9zdG5hbWUgdG8gbGlzdGVuIG9uICovXG4gIGhvc3RuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFRvIG9wZW4gdGhlIHNlcnZlciBpbiBhIGJyb3dzZXIgKi9cbiAgb3BlbjogYm9vbGVhbjtcblxuICAvKiogVGhlIGZpbGUgdG8gc2VydmUgb24gNDA0IGVycm9yICovXG4gIHBhZ2U0MDQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgdGhlIGRlYnVnIGJhciBvciBub3RcbiAgICogVXNlIGEgc3RyaW5nIHRvIHNwZWNpZnkgYSBjdXN0b20gVVJMIG9mIHRoZSA8bHVtZS1iYXI+IHdlYiBjb21wb25lbnRcbiAgICovXG4gIGRlYnVnQmFyPzogc3RyaW5nIHwgYm9vbGVhbjtcblxuICAvKiogT3B0aW9uYWwgZm9yIHRoZSBzZXJ2ZXIgKi9cbiAgbWlkZGxld2FyZXM6IE1pZGRsZXdhcmVbXTtcbn1cblxuLyoqIFRoZSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgbG9jYWwgd2F0Y2hlciAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaGVyT3B0aW9ucyB7XG4gIC8qKiBQYXRocyB0byBpZ25vcmUgYnkgdGhlIHdhdGNoZXIgKi9cbiAgaWdub3JlOiAoc3RyaW5nIHwgKChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4pKVtdO1xuXG4gIC8qKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGZvciBjaGFuZ2VzICovXG4gIGRlYm91bmNlOiBudW1iZXI7XG5cbiAgLyoqIEV4dHJhIGZpbGVzIGFuZCBmb2xkZXJzIHRvIHdhdGNoIChvdXNpZGUgdGhlIHNyYyBmb2xkZXIpICovXG4gIGluY2x1ZGU6IHN0cmluZ1tdO1xufVxuXG4vKiogVGhlIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBjb21wb25lbnRzICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudHNPcHRpb25zIHtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNhdmUgdGhlIGNvbXBvbmVudHMgY3NzIGNvZGUgKi9cbiAgY3NzRmlsZT86IHN0cmluZztcblxuICAvKiogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gc2F2ZSB0aGUgY29tcG9uZW50cyBqYXZhc2NyaXB0IGNvZGUgKi9cbiAganNGaWxlPzogc3RyaW5nO1xuXG4gIC8qKiBBbiBvcHRpb25hbCBwbGFjZWhvbGRlciB0byBpbnNlcnQgdGhlIENTUyBhbmQgSlMgY29kZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU2l0ZUV2ZW50TWFwID0ge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICBhZnRlckxvYWQ6IHt9O1xuICBiZWZvcmVCdWlsZDoge1xuICAgIC8qKiB0aGUgbGlzdCBvZiBwYWdlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZCAqL1xuICAgIHBhZ2VzOiBQYWdlW107XG4gIH07XG4gIGFmdGVyQnVpbGQ6IHtcbiAgICAvKiogdGhlIGxpc3Qgb2YgcGFnZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQgKi9cbiAgICBwYWdlczogUGFnZVtdO1xuICAgIC8qKiBjb250YWlucyB0aGUgbGlzdCBvZiBzdGF0aWMgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29waWVkICovXG4gICAgc3RhdGljRmlsZXM6IFN0YXRpY0ZpbGVbXTtcbiAgfTtcbiAgYmVmb3JlVXBkYXRlOiB7XG4gICAgLyoqIHRoZSBmaWxlcyB0aGF0IHdlcmUgY2hhbmdlZCAqL1xuICAgIGZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgfTtcbiAgYWZ0ZXJVcGRhdGU6IHtcbiAgICAvKiogdGhlIGZpbGVzIHRoYXQgd2VyZSBjaGFuZ2VkICovXG4gICAgZmlsZXM6IFNldDxzdHJpbmc+O1xuICAgIC8qKiB0aGUgbGlzdCBvZiBwYWdlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZCAqL1xuICAgIHBhZ2VzOiBQYWdlW107XG4gICAgLyoqIGNvbnRhaW5zIHRoZSBsaXN0IG9mIHN0YXRpYyBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjb3BpZWQgKi9cbiAgICBzdGF0aWNGaWxlczogU3RhdGljRmlsZVtdO1xuICB9O1xuICBiZWZvcmVSZW5kZXI6IHtcbiAgICAvKiogdGhlIGxpc3Qgb2YgcGFnZXMgdGhhdCBhcmUgYWJvdXQgdG8gcmVuZGVyICovXG4gICAgcGFnZXM6IFBhZ2VbXTtcbiAgfTtcbiAgYWZ0ZXJSZW5kZXI6IHtcbiAgICAvKiogdGhlIGxpc3Qgb2YgcGFnZXMgdGhhdCBoYXZlIGJlZW4gcmVuZGVyZWQgKi9cbiAgICBwYWdlczogUGFnZVtdO1xuICB9O1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICBiZWZvcmVTYXZlOiB7fTtcbiAgLy8gZGVuby1saW50LWlnbm9yZSBiYW4tdHlwZXNcbiAgYWZ0ZXJTdGFydFNlcnZlcjoge307XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRQYWdlc09wdGlvbnMge1xuICBsb2FkZXI/OiBMb2FkZXI7XG4gIGVuZ2luZT86IEVuZ2luZSB8IEVuZ2luZVtdO1xuICBwYWdlU3ViRXh0ZW5zaW9uPzogc3RyaW5nO1xufVxuXG4vKiogQ3VzdG9tIGV2ZW50cyBmb3Igc2l0ZSBidWlsZCAqL1xuZXhwb3J0IHR5cGUgU2l0ZUV2ZW50PFQgZXh0ZW5kcyBTaXRlRXZlbnRUeXBlID0gU2l0ZUV2ZW50VHlwZT4gPVxuICAmIEV2ZW50XG4gICYgU2l0ZUV2ZW50TWFwW1RdXG4gICYgeyB0eXBlOiBUIH07XG5cbi8qKiBUaGUgYXZhaWxhYmxlIGV2ZW50IHR5cGVzICovXG5leHBvcnQgdHlwZSBTaXRlRXZlbnRUeXBlID0ga2V5b2YgU2l0ZUV2ZW50TWFwO1xuXG4vKiogQSBnZW5lcmljIEx1bWUgcGx1Z2luICovXG5leHBvcnQgdHlwZSBQbHVnaW4gPSAoc2l0ZTogU2l0ZSkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcGF0aEJlbG9uZ3MoYmFzZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gYmFzZSA9PT0gcGF0aCB8fCBwYXRoPy5zdGFydHNXaXRoKGJhc2UgKyBcIi9cIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxJQUFJLEVBQUUsS0FBSyxRQUFRLGtCQUFrQjtBQUM5QyxTQUFTLEtBQUssUUFBUSxvQkFBb0I7QUFDMUMsU0FBUyxLQUFLLEVBQUUsYUFBYSxRQUFRLGtCQUFrQjtBQUN2RCxTQUFTLEdBQUcsUUFBUSxpQkFBaUI7QUFDckMsU0FBUyxHQUFHLFFBQVEsaUJBQWlCO0FBQ3JDLFNBQVMsYUFBYSxRQUFRLHNCQUFzQjtBQUNwRCxTQUFTLGFBQWEsUUFBUSwwQkFBMEI7QUFFeEQsT0FBTyxRQUFRLFVBQVU7QUFDekIsU0FBUyxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsUUFBUSxrQkFBa0I7QUFDekUsT0FBTyxnQkFBZ0IsbUJBQW1CO0FBQzFDLE9BQU8sWUFBWSxjQUFjO0FBQ2pDLE9BQU8sWUFBWSxjQUFjO0FBQ2pDLE9BQU8sZ0JB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
+// denoCacheMetadata=7620427696009553412,7983631689289966972 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8a5cef7308a79d18e459106207b7b2056b670cb0d75b75d23fd5da72b9dcc6ba.js b/vendor/gen/https/deno.land/8a5cef7308a79d18e459106207b7b2056b670cb0d75b75d23fd5da72b9dcc6ba.js
new file mode 100644
index 0000000..eef6d27
--- /dev/null
+++ b/vendor/gen/https/deno.land/8a5cef7308a79d18e459106207b7b2056b670cb0d75b75d23fd5da72b9dcc6ba.js
@@ -0,0 +1,14 @@
+import { Environment } from "./src/environment.ts";
+import { FileLoader } from "./src/loader.ts";
+export default function(options = {}) {
+ const loader = typeof options.includes === "object" ? options.includes : new FileLoader(options.includes);
+ const env = new Environment({
+ loader,
+ dataVarname: options.dataVarname || "it",
+ autoescape: options.autoescape ?? false,
+ autoDataVarname: options.autoDataVarname ?? true
+ });
+ return env;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9iYXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4vc3JjL2Vudmlyb25tZW50LnRzXCI7XG5pbXBvcnQgeyBGaWxlTG9hZGVyLCB0eXBlIExvYWRlciB9IGZyb20gXCIuL3NyYy9sb2FkZXIudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgaW5jbHVkZXM/OiBzdHJpbmcgfCBMb2FkZXI7XG4gIGF1dG9EYXRhVmFybmFtZT86IGJvb2xlYW47XG4gIGRhdGFWYXJuYW1lPzogc3RyaW5nO1xuICBhdXRvZXNjYXBlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IEVudmlyb25tZW50IHtcbiAgY29uc3QgbG9hZGVyID0gdHlwZW9mIG9wdGlvbnMuaW5jbHVkZXMgPT09IFwib2JqZWN0XCJcbiAgICA/IG9wdGlvbnMuaW5jbHVkZXNcbiAgICA6IG5ldyBGaWxlTG9hZGVyKG9wdGlvbnMuaW5jbHVkZXMpO1xuXG4gIGNvbnN0IGVudiA9IG5ldyBFbnZpcm9ubWVudCh7XG4gICAgbG9hZGVyLFxuICAgIGRhdGFWYXJuYW1lOiBvcHRpb25zLmRhdGFWYXJuYW1lIHx8IFwiaXRcIixcbiAgICBhdXRvZXNjYXBlOiBvcHRpb25zLmF1dG9lc2NhcGUgPz8gZmFsc2UsXG4gICAgYXV0b0RhdGFWYXJuYW1lOiBvcHRpb25zLmF1dG9EYXRhVmFybmFtZSA/PyB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gZW52O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsV0FBVyxRQUFRLHVCQUF1QjtBQUNuRCxTQUFTLFVBQVUsUUFBcUIsa0JBQWtCO0FBUzFELGVBQWUsU0FBVSxVQUFtQixDQUFDLENBQUM7RUFDNUMsTUFBTSxTQUFTLE9BQU8sUUFBUSxRQUFRLEtBQUssV0FDdkMsUUFBUSxRQUFRLEdBQ2hCLElBQUksV0FBVyxRQUFRLFFBQVE7RUFFbkMsTUFBTSxNQUFNLElBQUksWUFBWTtJQUMxQjtJQUNBLGFBQWEsUUFBUSxXQUFXLElBQUk7SUFDcEMsWUFBWSxRQUFRLFVBQVUsSUFBSTtJQUNsQyxpQkFBaUIsUUFBUSxlQUFlLElBQUk7RUFDOUM7RUFFQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=8203972905828276494,14459579729624302761 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8b9e9160f3a0e54f0e5d702063871e91e1492c805e124a3f03472d58238d34cd.js b/vendor/gen/https/deno.land/8b9e9160f3a0e54f0e5d702063871e91e1492c805e124a3f03472d58238d34cd.js
new file mode 100644
index 0000000..9057ba2
--- /dev/null
+++ b/vendor/gen/https/deno.land/8b9e9160f3a0e54f0e5d702063871e91e1492c805e124a3f03472d58238d34cd.js
@@ -0,0 +1,61 @@
+import { Cell } from "./cell.ts";
+/**
+ * Row representation.
+ */ export class Row extends Array {
+ options = {};
+ /**
+ * Create a new row. If cells is a row, all cells and options of the row will
+ * be copied to the new row.
+ * @param cells Cells or row.
+ */ static from(cells) {
+ const row = new this(...cells);
+ if (cells instanceof Row) {
+ row.options = {
+ ...cells.options
+ };
+ }
+ return row;
+ }
+ /** Clone row recursively with all options. */ clone() {
+ const row = new Row(...this.map((cell)=>cell instanceof Cell ? cell.clone() : cell));
+ row.options = {
+ ...this.options
+ };
+ return row;
+ }
+ /**
+ * Setter:
+ */ /**
+ * Enable/disable cell border.
+ * @param enable Enable/disable cell border.
+ * @param override Override existing value.
+ */ border(enable, override = true) {
+ if (override || typeof this.options.border === "undefined") {
+ this.options.border = enable;
+ }
+ return this;
+ }
+ /**
+ * Align row content.
+ * @param direction Align direction.
+ * @param override Override existing value.
+ */ align(direction, override = true) {
+ if (override || typeof this.options.align === "undefined") {
+ this.options.align = direction;
+ }
+ return this;
+ }
+ /**
+ * Getter:
+ */ /** Check if row has border. */ getBorder() {
+ return this.options.border === true;
+ }
+ /** Check if row or any child cell has border. */ hasBorder() {
+ return this.getBorder() || this.some((cell)=>cell instanceof Cell && cell.getBorder());
+ }
+ /** Get row alignment. */ getAlign() {
+ return this.options.align ?? "left";
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvcm93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENlbGwsIERpcmVjdGlvbiwgSUNlbGwgfSBmcm9tIFwiLi9jZWxsLnRzXCI7XG5cbi8qKiBSb3cgdHlwZSAqL1xuZXhwb3J0IHR5cGUgSVJvdzxUIGV4dGVuZHMgSUNlbGwgfCB1bmRlZmluZWQgPSBJQ2VsbCB8IHVuZGVmaW5lZD4gPVxuICB8IFRbXVxuICB8IFJvdzxUPjtcbi8qKiBKc29uIHJvdy4gKi9cbmV4cG9ydCB0eXBlIElEYXRhUm93ID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcblxuLyoqIFJvdyBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm93T3B0aW9ucyB7XG4gIGluZGVudD86IG51bWJlcjtcbiAgYm9yZGVyPzogYm9vbGVhbjtcbiAgYWxpZ24/OiBEaXJlY3Rpb247XG59XG5cbi8qKlxuICogUm93IHJlcHJlc2VudGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUm93PFQgZXh0ZW5kcyBJQ2VsbCB8IHVuZGVmaW5lZCA9IElDZWxsIHwgdW5kZWZpbmVkPlxuICBleHRlbmRzIEFycmF5PFQ+IHtcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IElSb3dPcHRpb25zID0ge307XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyByb3cuIElmIGNlbGxzIGlzIGEgcm93LCBhbGwgY2VsbHMgYW5kIG9wdGlvbnMgb2YgdGhlIHJvdyB3aWxsXG4gICAqIGJlIGNvcGllZCB0byB0aGUgbmV3IHJvdy5cbiAgICogQHBhcmFtIGNlbGxzIENlbGxzIG9yIHJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbTxUIGV4dGVuZHMgSUNlbGwgfCB1bmRlZmluZWQ+KFxuICAgIGNlbGxzOiBJUm93PFQ+LFxuICApOiBSb3c8VD4ge1xuICAgIGNvbnN0IHJvdyA9IG5ldyB0aGlzKC4uLmNlbGxzKTtcbiAgICBpZiAoY2VsbHMgaW5zdGFuY2VvZiBSb3cpIHtcbiAgICAgIHJvdy5vcHRpb25zID0geyAuLi4oY2VsbHMgYXMgUm93KS5vcHRpb25zIH07XG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvKiogQ2xvbmUgcm93IHJlY3Vyc2l2ZWx5IHdpdGggYWxsIG9wdGlvbnMuICovXG4gIHB1YmxpYyBjbG9uZSgpOiBSb3cge1xuICAgIGNvbnN0IHJvdyA9IG5ldyBSb3coXG4gICAgICAuLi50aGlzLm1hcCgoY2VsbDogVCkgPT4gY2VsbCBpbnN0YW5jZW9mIENlbGwgPyBjZWxsLmNsb25lKCkgOiBjZWxsKSxcbiAgICApO1xuICAgIHJvdy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRlcjpcbiAgICovXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIGNlbGwgYm9yZGVyLlxuICAgKiBAcGFyYW0gZW5hYmxlICAgIEVuYWJsZS9kaXNhYmxlIGNlbGwgYm9yZGVyLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGJvcmRlcihlbmFibGU6IGJvb2xlYW4sIG92ZXJyaWRlID0gdHJ1ZSk6IHRoaXMge1xuICAgIGlmIChvdmVycmlkZSB8fCB0eXBlb2YgdGhpcy5vcHRpb25zLmJvcmRlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5vcHRpb25zLmJvcmRlciA9IGVuYWJsZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxpZ24gcm93IGNvbnRlbnQuXG4gICAqIEBwYXJhbSBkaXJlY3Rpb24gQWxpZ24gZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGFsaWduKGRpcmVjdGlvbjogRGlyZWN0aW9uLCBvdmVycmlkZSA9IHRydWUpOiB0aGlzIHtcbiAgICBpZiAob3ZlcnJpZGUgfHwgdHlwZW9mIHRoaXMub3B0aW9ucy5hbGlnbiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5vcHRpb25zLmFsaWduID0gZGlyZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXI6XG4gICAqL1xuXG4gIC8qKiBDaGVjayBpZiByb3cgaGFzIGJvcmRlci4gKi9cbiAgcHVibGljIGdldEJvcmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmJvcmRlciA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiByb3cgb3IgYW55IGNoaWxkIGNlbGwgaGFzIGJvcmRlci4gKi9cbiAgcHVibGljIGhhc0JvcmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb3JkZXIoKSB8fFxuICAgICAgdGhpcy5zb21lKChjZWxsKSA9PiBjZWxsIGluc3RhbmNlb2YgQ2VsbCAmJiBjZWxsLmdldEJvcmRlcigpKTtcbiAgfVxuXG4gIC8qKiBHZXQgcm93IGFsaWdubWVudC4gKi9cbiAgcHVibGljIGdldEFsaWduKCk6IERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbGlnbiA/PyBcImxlZnRcIjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxRQUEwQixZQUFZO0FBZ0JuRDs7Q0FFQyxHQUNELE9BQU8sTUFBTSxZQUNIO0VBQ0UsVUFBdUIsQ0FBQyxFQUFFO0VBRXBDOzs7O0dBSUMsR0FDRCxPQUFjLEtBQ1osS0FBYyxFQUNOO0lBQ1IsTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJO0lBQ3hCLElBQUksaUJBQWlCLEtBQUs7TUFDeEIsSUFBSSxPQUFPLEdBQUc7UUFBRSxHQUFHLEFBQUMsTUFBYyxPQUFPO01BQUM7SUFDNUM7SUFDQSxPQUFPO0VBQ1Q7RUFFQSw0Q0FBNEMsR0FDNUMsQUFBTyxRQUFhO0lBQ2xCLE1BQU0sTUFBTSxJQUFJLE9BQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksZ0JBQWdCLE9BQU8sS0FBSyxLQUFLLEtBQUs7SUFFakUsSUFBSSxPQUFPLEdBQUc7TUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPO0lBQUM7SUFDaEMsT0FBTztFQUNUO0VBRUE7O0dBRUMsR0FFRDs7OztHQUlDLEdBQ0QsQUFBTyxPQUFPLE1BQWUsRUFBRSxXQUFXLElBQUksRUFBUTtJQUNwRCxJQUFJLFlBQVksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxhQUFhO01BQzFELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHO0lBQ3hCO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQTs7OztHQUlDLEdBQ0QsQUFBTyxNQUFNLFNBQW9CLEVBQUUsV0FBVyxJQUFJLEVBQVE7SUFDeEQsSUFBSSxZQUFZLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssYUFBYTtNQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRztJQUN2QjtJQUNBLE9BQU8sSUFBSTtFQUNiO0VBRUE7O0dBRUMsR0FFRCw2QkFBNkIsR0FDN0IsQUFBTyxZQUFxQjtJQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLO0VBQ2pDO0VBRUEsK0NBQStDLEdBQy9DLEFBQU8sWUFBcUI7SUFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxNQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBUyxnQkFBZ0IsUUFBUSxLQUFLLFNBQVM7RUFDOUQ7RUFFQSx1QkFBdUIsR0FDdkIsQUFBTyxXQUFzQjtJQUMzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJO0VBQy9CO0FBQ0YifQ==
+// denoCacheMetadata=215881043658159480,10804482753889458298 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8bf0236b96f24c1623e587b7c0cf3c199557796529f434f101d5987a38f21a83.js b/vendor/gen/https/deno.land/8bf0236b96f24c1623e587b7c0cf3c199557796529f434f101d5987a38f21a83.js
new file mode 100644
index 0000000..8c77cbb
--- /dev/null
+++ b/vendor/gen/https/deno.land/8bf0236b96f24c1623e587b7c0cf3c199557796529f434f101d5987a38f21a83.js
@@ -0,0 +1,51 @@
+/**
+ * Define independent updates scopes
+ * This optimize the update process after any change
+ */ export default class Scopes {
+ scopes = new Set();
+ /** Returns a function to filter the pages that must be rebuild */ getFilter(changedFiles) {
+ // There's no any scope, so rebuild all pages
+ if (this.scopes.size === 0) {
+ return ()=>true;
+ }
+ let noScoped = false;
+ const changed = new Set();
+ for (const file of changedFiles){
+ let found = false;
+ for (const scopeFn of this.scopes){
+ if (scopeFn(file)) {
+ changed.add(scopeFn);
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ noScoped = true;
+ }
+ }
+ // Calculate scoped extensions that didn't change
+ const notChanged = [];
+ for (const scopeFn of this.scopes){
+ if (!changed.has(scopeFn)) {
+ notChanged.push(scopeFn);
+ }
+ }
+ // Generate the filter function
+ return function(entry) {
+ // Ignore directories
+ if (entry.type === "directory") {
+ return true;
+ }
+ // It matches with any scope that has changed
+ for (const scopeFn of changed){
+ if (scopeFn(entry.path)) {
+ return true;
+ }
+ }
+ // It's not scoped
+ return noScoped && notChanged.every((scopeFn)=>!scopeFn(entry.path));
+ };
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9zY29wZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRyeSB9IGZyb20gXCIuL2ZzLnRzXCI7XG5cbi8qKlxuICogRGVmaW5lIGluZGVwZW5kZW50IHVwZGF0ZXMgc2NvcGVzXG4gKiBUaGlzIG9wdGltaXplIHRoZSB1cGRhdGUgcHJvY2VzcyBhZnRlciBhbnkgY2hhbmdlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjb3BlcyB7XG4gIHNjb3BlcyA9IG5ldyBTZXQ8U2NvcGVGaWx0ZXI+KCk7XG5cbiAgLyoqIFJldHVybnMgYSBmdW5jdGlvbiB0byBmaWx0ZXIgdGhlIHBhZ2VzIHRoYXQgbXVzdCBiZSByZWJ1aWxkICovXG4gIGdldEZpbHRlcihjaGFuZ2VkRmlsZXM6IEl0ZXJhYmxlPHN0cmluZz4pOiAoZW50cnk6IEVudHJ5KSA9PiBib29sZWFuIHtcbiAgICAvLyBUaGVyZSdzIG5vIGFueSBzY29wZSwgc28gcmVidWlsZCBhbGwgcGFnZXNcbiAgICBpZiAodGhpcy5zY29wZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG5vU2NvcGVkID0gZmFsc2U7XG4gICAgY29uc3QgY2hhbmdlZCA9IG5ldyBTZXQ8U2NvcGVGaWx0ZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgY2hhbmdlZEZpbGVzKSB7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgc2NvcGVGbiBvZiB0aGlzLnNjb3Blcykge1xuICAgICAgICBpZiAoc2NvcGVGbihmaWxlKSkge1xuICAgICAgICAgIGNoYW5nZWQuYWRkKHNjb3BlRm4pO1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIG5vU2NvcGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgc2NvcGVkIGV4dGVuc2lvbnMgdGhhdCBkaWRuJ3QgY2hhbmdlXG4gICAgY29uc3Qgbm90Q2hhbmdlZDogU2NvcGVGaWx0ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzY29wZUZuIG9mIHRoaXMuc2NvcGVzKSB7XG4gICAgICBpZiAoIWNoYW5nZWQuaGFzKHNjb3BlRm4pKSB7XG4gICAgICAgIG5vdENoYW5nZWQucHVzaChzY29wZUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgLy8gSWdub3JlIGRpcmVjdG9yaWVzXG4gICAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJkaXJlY3RvcnlcIikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSXQgbWF0Y2hlcyB3aXRoIGFueSBzY29wZSB0aGF0IGhhcyBjaGFuZ2VkXG4gICAgICBmb3IgKGNvbnN0IHNjb3BlRm4gb2YgY2hhbmdlZCkge1xuICAgICAgICBpZiAoc2NvcGVGbihlbnRyeS5wYXRoKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEl0J3Mgbm90IHNjb3BlZFxuICAgICAgcmV0dXJuIG5vU2NvcGVkICYmIG5vdENoYW5nZWQuZXZlcnkoKHNjb3BlRm4pID0+ICFzY29wZUZuKGVudHJ5LnBhdGgpKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNjb3BlRmlsdGVyID0gKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0NBR0MsR0FDRCxlQUFlLE1BQU07RUFDbkIsU0FBUyxJQUFJLE1BQW1CO0VBRWhDLGdFQUFnRSxHQUNoRSxVQUFVLFlBQThCLEVBQTZCO0lBQ25FLDZDQUE2QztJQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEdBQUc7TUFDMUIsT0FBTyxJQUFNO0lBQ2Y7SUFFQSxJQUFJLFdBQVc7SUFDZixNQUFNLFVBQVUsSUFBSTtJQUVwQixLQUFLLE1BQU0sUUFBUSxhQUFjO01BQy9CLElBQUksUUFBUTtNQUNaLEtBQUssTUFBTSxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUU7UUFDakMsSUFBSSxRQUFRLE9BQU87VUFDakIsUUFBUSxHQUFHLENBQUM7VUFDWixRQUFRO1VBQ1I7UUFDRjtNQUNGO01BRUEsSUFBSSxDQUFDLE9BQU87UUFDVixXQUFXO01BQ2I7SUFDRjtJQUVBLGlEQUFpRDtJQUNqRCxNQUFNLGFBQTRCLEVBQUU7SUFFcEMsS0FBSyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBRTtNQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsVUFBVTtRQUN6QixXQUFXLElBQUksQ0FBQztNQUNsQjtJQUNGO0lBRUEsK0JBQStCO0lBQy9CLE9BQU8sU0FBVSxLQUFLO01BQ3BCLHFCQUFxQjtNQUNyQixJQUFJLE1BQU0sSUFBSSxLQUFLLGFBQWE7UUFDOUIsT0FBTztNQUNUO01BRUEsNkNBQTZDO01BQzdDLEtBQUssTUFBTSxXQUFXLFFBQVM7UUFDN0IsSUFBSSxRQUFRLE1BQU0sSUFBSSxHQUFHO1VBQ3ZCLE9BQU87UUFDVDtNQUNGO01BRUEsa0JBQWtCO01BQ2xCLE9BQU8sWUFBWSxXQUFXLEtBQUssQ0FBQyxDQUFDLFVBQVksQ0FBQyxRQUFRLE1BQU0sSUFBSTtJQUN0RTtFQUNGO0FBQ0YifQ==
+// denoCacheMetadata=7570441935273296000,1708596329057633674 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8c0b95919f52419042551a1d030a6b5807bdb565afecdc6eed51d31d0010a092.js b/vendor/gen/https/deno.land/8c0b95919f52419042551a1d030a6b5807bdb565afecdc6eed51d31d0010a092.js
new file mode 100644
index 0000000..cb61182
--- /dev/null
+++ b/vendor/gen/https/deno.land/8c0b95919f52419042551a1d030a6b5807bdb565afecdc6eed51d31d0010a092.js
@@ -0,0 +1,853 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH, CHAR_COLON, CHAR_DOT, CHAR_QUESTION_MARK } from "./_constants.ts";
+import { _format, assertPath, encodeWhitespace, isPathSeparator, isWindowsDeviceRoot, normalizeString } from "./_util.ts";
+import { assert } from "../_util/asserts.ts";
+export const sep = "\\";
+export const delimiter = ";";
+/**
+ * Resolves path segments into a `path`
+ * @param pathSegments to process to path
+ */ export function resolve(...pathSegments) {
+ let resolvedDevice = "";
+ let resolvedTail = "";
+ let resolvedAbsolute = false;
+ for(let i = pathSegments.length - 1; i >= -1; i--){
+ let path;
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (i >= 0) {
+ path = pathSegments[i];
+ } else if (!resolvedDevice) {
+ if (typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a drive-letter-less path without a CWD.");
+ }
+ path = Deno.cwd();
+ } else {
+ if (typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a relative path without a CWD.");
+ }
+ path = Deno.cwd();
+ // Verify that a cwd was found and that it actually points
+ // to our drive. If not, default to the drive's root.
+ if (path === undefined || path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
+ path = `${resolvedDevice}\\`;
+ }
+ }
+ assertPath(path);
+ const len = path.length;
+ // Skip empty entries
+ if (len === 0) continue;
+ let rootEnd = 0;
+ let device = "";
+ let isAbsolute = false;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ // If we started with a separator, we know we at least have an
+ // absolute path of some kind (UNC or otherwise)
+ isAbsolute = true;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ const firstPart = path.slice(last, j);
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ device = `\\\\${firstPart}\\${path.slice(last)}`;
+ rootEnd = j;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
+ rootEnd = j;
+ }
+ }
+ }
+ } else {
+ rootEnd = 1;
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ device = path.slice(0, 2);
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ // Treat separator following drive name as an absolute path
+ // indicator
+ isAbsolute = true;
+ rootEnd = 3;
+ }
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator
+ rootEnd = 1;
+ isAbsolute = true;
+ }
+ if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
+ continue;
+ }
+ if (resolvedDevice.length === 0 && device.length > 0) {
+ resolvedDevice = device;
+ }
+ if (!resolvedAbsolute) {
+ resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
+ resolvedAbsolute = isAbsolute;
+ }
+ if (resolvedAbsolute && resolvedDevice.length > 0) break;
+ }
+ // At this point the path should be resolved to a full absolute path,
+ // but handle relative paths to be safe (might happen when process.cwd()
+ // fails)
+ // Normalize the tail path
+ resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
+ return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
+}
+/**
+ * Normalizes a `path`
+ * @param path to normalize
+ */ export function normalize(path) {
+ assertPath(path);
+ const len = path.length;
+ if (len === 0) return ".";
+ let rootEnd = 0;
+ let device;
+ let isAbsolute = false;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ // If we started with a separator, we know we at least have an absolute
+ // path of some kind (UNC or otherwise)
+ isAbsolute = true;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ const firstPart = path.slice(last, j);
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ // Return the normalized version of the UNC root since there
+ // is nothing left to process
+ return `\\\\${firstPart}\\${path.slice(last)}\\`;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
+ rootEnd = j;
+ }
+ }
+ }
+ } else {
+ rootEnd = 1;
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ device = path.slice(0, 2);
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ // Treat separator following drive name as an absolute path
+ // indicator
+ isAbsolute = true;
+ rootEnd = 3;
+ }
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid unnecessary
+ // work
+ return "\\";
+ }
+ let tail;
+ if (rootEnd < len) {
+ tail = normalizeString(path.slice(rootEnd), !isAbsolute, "\\", isPathSeparator);
+ } else {
+ tail = "";
+ }
+ if (tail.length === 0 && !isAbsolute) tail = ".";
+ if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {
+ tail += "\\";
+ }
+ if (device === undefined) {
+ if (isAbsolute) {
+ if (tail.length > 0) return `\\${tail}`;
+ else return "\\";
+ } else if (tail.length > 0) {
+ return tail;
+ } else {
+ return "";
+ }
+ } else if (isAbsolute) {
+ if (tail.length > 0) return `${device}\\${tail}`;
+ else return `${device}\\`;
+ } else if (tail.length > 0) {
+ return device + tail;
+ } else {
+ return device;
+ }
+}
+/**
+ * Verifies whether path is absolute
+ * @param path to verify
+ */ export function isAbsolute(path) {
+ assertPath(path);
+ const len = path.length;
+ if (len === 0) return false;
+ const code = path.charCodeAt(0);
+ if (isPathSeparator(code)) {
+ return true;
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (len > 2 && path.charCodeAt(1) === CHAR_COLON) {
+ if (isPathSeparator(path.charCodeAt(2))) return true;
+ }
+ }
+ return false;
+}
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ * @param paths to be joined and normalized
+ */ export function join(...paths) {
+ const pathsCount = paths.length;
+ if (pathsCount === 0) return ".";
+ let joined;
+ let firstPart = null;
+ for(let i = 0; i < pathsCount; ++i){
+ const path = paths[i];
+ assertPath(path);
+ if (path.length > 0) {
+ if (joined === undefined) joined = firstPart = path;
+ else joined += `\\${path}`;
+ }
+ }
+ if (joined === undefined) return ".";
+ // Make sure that the joined path doesn't start with two slashes, because
+ // normalize() will mistake it for an UNC path then.
+ //
+ // This step is skipped when it is very clear that the user actually
+ // intended to point at an UNC path. This is assumed when the first
+ // non-empty string arguments starts with exactly two slashes followed by
+ // at least one more non-slash character.
+ //
+ // Note that for normalize() to treat a path as an UNC path it needs to
+ // have at least 2 components, so we don't filter for that here.
+ // This means that the user can use join to construct UNC paths from
+ // a server name and a share name; for example:
+ // path.join('//server', 'share') -> '\\\\server\\share\\')
+ let needsReplace = true;
+ let slashCount = 0;
+ assert(firstPart != null);
+ if (isPathSeparator(firstPart.charCodeAt(0))) {
+ ++slashCount;
+ const firstLen = firstPart.length;
+ if (firstLen > 1) {
+ if (isPathSeparator(firstPart.charCodeAt(1))) {
+ ++slashCount;
+ if (firstLen > 2) {
+ if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount;
+ else {
+ // We matched a UNC path in the first part
+ needsReplace = false;
+ }
+ }
+ }
+ }
+ }
+ if (needsReplace) {
+ // Find any more consecutive slashes we need to replace
+ for(; slashCount < joined.length; ++slashCount){
+ if (!isPathSeparator(joined.charCodeAt(slashCount))) break;
+ }
+ // Replace the slashes if needed
+ if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`;
+ }
+ return normalize(joined);
+}
+/**
+ * It will solve the relative path from `from` to `to`, for instance:
+ * from = 'C:\\orandea\\test\\aaa'
+ * to = 'C:\\orandea\\impl\\bbb'
+ * The output of the function should be: '..\\..\\impl\\bbb'
+ * @param from relative path
+ * @param to relative path
+ */ export function relative(from, to) {
+ assertPath(from);
+ assertPath(to);
+ if (from === to) return "";
+ const fromOrig = resolve(from);
+ const toOrig = resolve(to);
+ if (fromOrig === toOrig) return "";
+ from = fromOrig.toLowerCase();
+ to = toOrig.toLowerCase();
+ if (from === to) return "";
+ // Trim any leading backslashes
+ let fromStart = 0;
+ let fromEnd = from.length;
+ for(; fromStart < fromEnd; ++fromStart){
+ if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break;
+ }
+ // Trim trailing backslashes (applicable to UNC paths only)
+ for(; fromEnd - 1 > fromStart; --fromEnd){
+ if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break;
+ }
+ const fromLen = fromEnd - fromStart;
+ // Trim any leading backslashes
+ let toStart = 0;
+ let toEnd = to.length;
+ for(; toStart < toEnd; ++toStart){
+ if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break;
+ }
+ // Trim trailing backslashes (applicable to UNC paths only)
+ for(; toEnd - 1 > toStart; --toEnd){
+ if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break;
+ }
+ const toLen = toEnd - toStart;
+ // Compare paths to find the longest common path from root
+ const length = fromLen < toLen ? fromLen : toLen;
+ let lastCommonSep = -1;
+ let i = 0;
+ for(; i <= length; ++i){
+ if (i === length) {
+ if (toLen > length) {
+ if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
+ // We get here if `from` is the exact base path for `to`.
+ // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz'
+ return toOrig.slice(toStart + i + 1);
+ } else if (i === 2) {
+ // We get here if `from` is the device root.
+ // For example: from='C:\\'; to='C:\\foo'
+ return toOrig.slice(toStart + i);
+ }
+ }
+ if (fromLen > length) {
+ if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='C:\\foo\\bar'; to='C:\\foo'
+ lastCommonSep = i;
+ } else if (i === 2) {
+ // We get here if `to` is the device root.
+ // For example: from='C:\\foo\\bar'; to='C:\\'
+ lastCommonSep = 3;
+ }
+ }
+ break;
+ }
+ const fromCode = from.charCodeAt(fromStart + i);
+ const toCode = to.charCodeAt(toStart + i);
+ if (fromCode !== toCode) break;
+ else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i;
+ }
+ // We found a mismatch before the first common path separator was seen, so
+ // return the original `to`.
+ if (i !== length && lastCommonSep === -1) {
+ return toOrig;
+ }
+ let out = "";
+ if (lastCommonSep === -1) lastCommonSep = 0;
+ // Generate the relative path based on the path difference between `to` and
+ // `from`
+ for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
+ if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
+ if (out.length === 0) out += "..";
+ else out += "\\..";
+ }
+ }
+ // Lastly, append the rest of the destination (`to`) path that comes after
+ // the common path parts
+ if (out.length > 0) {
+ return out + toOrig.slice(toStart + lastCommonSep, toEnd);
+ } else {
+ toStart += lastCommonSep;
+ if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart;
+ return toOrig.slice(toStart, toEnd);
+ }
+}
+/**
+ * Resolves path to a namespace path
+ * @param path to resolve to namespace
+ */ export function toNamespacedPath(path) {
+ // Note: this will *probably* throw somewhere.
+ if (typeof path !== "string") return path;
+ if (path.length === 0) return "";
+ const resolvedPath = resolve(path);
+ if (resolvedPath.length >= 3) {
+ if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {
+ // Possible UNC root
+ if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {
+ const code = resolvedPath.charCodeAt(2);
+ if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {
+ // Matched non-long UNC root, convert the path to a long UNC path
+ return `\\\\?\\UNC\\${resolvedPath.slice(2)}`;
+ }
+ }
+ } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) {
+ // Possible device root
+ if (resolvedPath.charCodeAt(1) === CHAR_COLON && resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {
+ // Matched device root, convert the path to a long UNC path
+ return `\\\\?\\${resolvedPath}`;
+ }
+ }
+ }
+ return path;
+}
+/**
+ * Return the directory path of a `path`.
+ * @param path to determine the directory path for
+ */ export function dirname(path) {
+ assertPath(path);
+ const len = path.length;
+ if (len === 0) return ".";
+ let rootEnd = -1;
+ let end = -1;
+ let matchedSlash = true;
+ let offset = 0;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ rootEnd = offset = 1;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ return path;
+ }
+ if (j !== last) {
+ // We matched a UNC root with leftovers
+ // Offset by 1 to include the separator after the UNC root to
+ // treat it as a "normal root" on top of a (UNC) root
+ rootEnd = offset = j + 1;
+ }
+ }
+ }
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ rootEnd = offset = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3;
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid
+ // unnecessary work
+ return path;
+ }
+ for(let i = len - 1; i >= offset; --i){
+ if (isPathSeparator(path.charCodeAt(i))) {
+ if (!matchedSlash) {
+ end = i;
+ break;
+ }
+ } else {
+ // We saw the first non-path separator
+ matchedSlash = false;
+ }
+ }
+ if (end === -1) {
+ if (rootEnd === -1) return ".";
+ else end = rootEnd;
+ }
+ return path.slice(0, end);
+}
+/**
+ * Return the last portion of a `path`. Trailing directory separators are ignored.
+ * @param path to process
+ * @param ext of path directory
+ */ export function basename(path, ext = "") {
+ if (ext !== undefined && typeof ext !== "string") {
+ throw new TypeError('"ext" argument must be a string');
+ }
+ assertPath(path);
+ let start = 0;
+ let end = -1;
+ let matchedSlash = true;
+ let i;
+ // Check for a drive letter prefix so as not to mistake the following
+ // path separator as an extra separator at the end of the path that can be
+ // disregarded
+ if (path.length >= 2) {
+ const drive = path.charCodeAt(0);
+ if (isWindowsDeviceRoot(drive)) {
+ if (path.charCodeAt(1) === CHAR_COLON) start = 2;
+ }
+ }
+ if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
+ if (ext.length === path.length && ext === path) return "";
+ let extIdx = ext.length - 1;
+ let firstNonSlashEnd = -1;
+ for(i = path.length - 1; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ start = i + 1;
+ break;
+ }
+ } else {
+ if (firstNonSlashEnd === -1) {
+ // We saw the first non-path separator, remember this index in case
+ // we need it if the extension ends up not matching
+ matchedSlash = false;
+ firstNonSlashEnd = i + 1;
+ }
+ if (extIdx >= 0) {
+ // Try to match the explicit extension
+ if (code === ext.charCodeAt(extIdx)) {
+ if (--extIdx === -1) {
+ // We matched the extension, so mark this as the end of our path
+ // component
+ end = i;
+ }
+ } else {
+ // Extension does not match, so our result is the entire path
+ // component
+ extIdx = -1;
+ end = firstNonSlashEnd;
+ }
+ }
+ }
+ }
+ if (start === end) end = firstNonSlashEnd;
+ else if (end === -1) end = path.length;
+ return path.slice(start, end);
+ } else {
+ for(i = path.length - 1; i >= start; --i){
+ if (isPathSeparator(path.charCodeAt(i))) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ start = i + 1;
+ break;
+ }
+ } else if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // path component
+ matchedSlash = false;
+ end = i + 1;
+ }
+ }
+ if (end === -1) return "";
+ return path.slice(start, end);
+ }
+}
+/**
+ * Return the extension of the `path` with leading period.
+ * @param path with extension
+ * @returns extension (ex. for `file.ts` returns `.ts`)
+ */ export function extname(path) {
+ assertPath(path);
+ let start = 0;
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Check for a drive letter prefix so as not to mistake the following
+ // path separator as an extra separator at the end of the path that can be
+ // disregarded
+ if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) {
+ start = startPart = 2;
+ }
+ for(let i = path.length - 1; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ return "";
+ }
+ return path.slice(startDot, end);
+}
+/**
+ * Generate a path from `FormatInputPathObject` object.
+ * @param pathObject with path
+ */ export function format(pathObject) {
+ if (pathObject === null || typeof pathObject !== "object") {
+ throw new TypeError(`The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`);
+ }
+ return _format("\\", pathObject);
+}
+/**
+ * Return a `ParsedPath` object of the `path`.
+ * @param path to process
+ */ export function parse(path) {
+ assertPath(path);
+ const ret = {
+ root: "",
+ dir: "",
+ base: "",
+ ext: "",
+ name: ""
+ };
+ const len = path.length;
+ if (len === 0) return ret;
+ let rootEnd = 0;
+ let code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ rootEnd = 1;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ rootEnd = j;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ rootEnd = j + 1;
+ }
+ }
+ }
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ if (len === 3) {
+ // `path` contains just a drive root, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ return ret;
+ }
+ rootEnd = 3;
+ }
+ } else {
+ // `path` contains just a drive root, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ return ret;
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ return ret;
+ }
+ if (rootEnd > 0) ret.root = path.slice(0, rootEnd);
+ let startDot = -1;
+ let startPart = rootEnd;
+ let end = -1;
+ let matchedSlash = true;
+ let i = path.length - 1;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Get non-dir info
+ for(; i >= rootEnd; --i){
+ code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ if (end !== -1) {
+ ret.base = ret.name = path.slice(startPart, end);
+ }
+ } else {
+ ret.name = path.slice(startPart, startDot);
+ ret.base = path.slice(startPart, end);
+ ret.ext = path.slice(startDot, end);
+ }
+ // If the directory is the root, use the entire root as the `dir` including
+ // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the
+ // trailing slash (`C:\abc\def` -> `C:\abc`).
+ if (startPart > 0 && startPart !== rootEnd) {
+ ret.dir = path.slice(0, startPart - 1);
+ } else ret.dir = ret.root;
+ return ret;
+}
+/**
+ * Converts a file URL to a path string.
+ *
+ * ```ts
+ * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts";
+ * fromFileUrl("file:///home/foo"); // "\\home\\foo"
+ * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo"
+ * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo"
+ * ```
+ * @param url of a file URL
+ */ export function fromFileUrl(url) {
+ url = url instanceof URL ? url : new URL(url);
+ if (url.protocol != "file:") {
+ throw new TypeError("Must be a file URL.");
+ }
+ let path = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
+ if (url.hostname != "") {
+ // Note: The `URL` implementation guarantees that the drive letter and
+ // hostname are mutually exclusive. Otherwise it would not have been valid
+ // to append the hostname and path like this.
+ path = `\\\\${url.hostname}${path}`;
+ }
+ return path;
+}
+/**
+ * Converts a path string to a file URL.
+ *
+ * ```ts
+ * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts";
+ * toFileUrl("\\home\\foo"); // new URL("file:///home/foo")
+ * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo")
+ * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo")
+ * ```
+ * @param path to convert to file URL
+ */ export function toFileUrl(path) {
+ if (!isAbsolute(path)) {
+ throw new TypeError("Must be an absolute path.");
+ }
+ const [, hostname, pathname] = path.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
+ const url = new URL("file:///");
+ url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
+ if (hostname != null && hostname != "localhost") {
+ url.hostname = hostname;
+ if (!url.hostname) {
+ throw new TypeError("Invalid hostname.");
+ }
+ }
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvd2luMzIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBGb3JtYXRJbnB1dFBhdGhPYmplY3QsIFBhcnNlZFBhdGggfSBmcm9tIFwiLi9faW50ZXJmYWNlLnRzXCI7XG5pbXBvcnQge1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILFxuICBDSEFSX0NPTE9OLFxuICBDSEFSX0RPVCxcbiAgQ0hBUl9RVUVTVElPTl9NQVJLLFxufSBmcm9tIFwiLi9fY29uc3RhbnRzLnRzXCI7XG5cbmltcG9ydCB7XG4gIF9mb3JtYXQsXG4gIGFzc2VydFBhdGgsXG4gIGVuY29kZVdoaXRlc3BhY2UsXG4gIGlzUGF0aFNlcGFyYXRvcixcbiAgaXNXaW5kb3dzRGV2aWNlUm9vdCxcbiAgbm9ybWFsaXplU3RyaW5nLFxufSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIi4uL191dGlsL2Fzc2VydHMudHNcIjtcblxuZXhwb3J0IGNvbnN0IHNlcCA9IFwiXFxcXFwiO1xuZXhwb3J0IGNvbnN0IGRlbGltaXRlciA9IFwiO1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggc2VnbWVudHMgaW50byBhIGBwYXRoYFxuICogQHBhcmFtIHBhdGhTZWdtZW50cyB0byBwcm9jZXNzIHRvIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZERldmljZSA9IFwiXCI7XG4gIGxldCByZXNvbHZlZFRhaWwgPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMTsgaS0tKSB7XG4gICAgbGV0IHBhdGg6IHN0cmluZztcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgcGF0aCA9IHBhdGhTZWdtZW50c1tpXTtcbiAgICB9IGVsc2UgaWYgKCFyZXNvbHZlZERldmljZSkge1xuICAgICAgaWYgKHR5cGVvZiBEZW5vPy5jd2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVzb2x2ZWQgYSBkcml2ZS1sZXR0ZXItbGVzcyBwYXRoIHdpdGhvdXQgYSBDV0QuXCIpO1xuICAgICAgfVxuICAgICAgcGF0aCA9IERlbm8uY3dkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIERlbm8/LmVudj8uZ2V0ICE9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBhIGN3ZCB3YXMgZm91bmQgYW5kIHRoYXQgaXQgYWN0dWFsbHkgcG9pbnRzXG4gICAgICAvLyB0byBvdXIgZHJpdmUuIElmIG5vdCwgZGVmYXVsdCB0byB0aGUgZHJpdmUncyByb290LlxuICAgICAgaWYgKFxuICAgICAgICBwYXRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgcGF0aC5zbGljZSgwLCAzKS50b0xvd2VyQ2FzZSgpICE9PSBgJHtyZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpfVxcXFxgXG4gICAgICApIHtcbiAgICAgICAgcGF0aCA9IGAke3Jlc29sdmVkRGV2aWNlfVxcXFxgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcblxuICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgIGlmIChsZW4gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgbGV0IHJvb3RFbmQgPSAwO1xuICAgIGxldCBkZXZpY2UgPSBcIlwiO1xuICAgIGxldCBpc0Fic29sdXRlID0gZmFsc2U7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgICBpZiAobGVuID4gMSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICAgIC8vIElmIHdlIHN0YXJ0ZWQgd2l0aCBhIHNlcGFyYXRvciwgd2Uga25vdyB3ZSBhdCBsZWFzdCBoYXZlIGFuXG4gICAgICAgIC8vIGFic29sdXRlIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgICAgbGV0IGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gcGF0aC5zbGljZShsYXN0LCBqKTtcbiAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaiA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcbiAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QpfWA7XG4gICAgICAgICAgICAgICAgcm9vdEVuZCA9IGo7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgICAgZGV2aWNlID0gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0LCBqKX1gO1xuICAgICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgICAgZGV2aWNlID0gcGF0aC5zbGljZSgwLCAyKTtcbiAgICAgICAgICByb290RW5kID0gMjtcbiAgICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSB7XG4gICAgICAgICAgICAgIC8vIFRyZWF0IHNlcGFyYXRvciBmb2xsb3dpbmcgZHJpdmUgbmFtZSBhcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgcGF0aCBzZXBhcmF0b3JcbiAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIHJlc29sdmVkRGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIGRldmljZS50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHBhdGggcG9pbnRzIHRvIGFub3RoZXIgZGV2aWNlIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWREZXZpY2UubGVuZ3RoID09PSAwICYmIGRldmljZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNvbHZlZERldmljZSA9IGRldmljZTtcbiAgICB9XG4gICAgaWYgKCFyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICByZXNvbHZlZFRhaWwgPSBgJHtwYXRoLnNsaWNlKHJvb3RFbmQpfVxcXFwke3Jlc29sdmVkVGFpbH1gO1xuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGU7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkQWJzb2x1dGUgJiYgcmVzb2x2ZWREZXZpY2UubGVuZ3RoID4gMCkgYnJlYWs7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCxcbiAgLy8gYnV0IGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpXG4gIC8vIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgdGFpbCBwYXRoXG4gIHJlc29sdmVkVGFpbCA9IG5vcm1hbGl6ZVN0cmluZyhcbiAgICByZXNvbHZlZFRhaWwsXG4gICAgIXJlc29sdmVkQWJzb2x1dGUsXG4gICAgXCJcXFxcXCIsXG4gICAgaXNQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIHJldHVybiByZXNvbHZlZERldmljZSArIChyZXNvbHZlZEFic29sdXRlID8gXCJcXFxcXCIgOiBcIlwiKSArIHJlc29sdmVkVGFpbCB8fCBcIi5cIjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgYHBhdGhgXG4gKiBAcGFyYW0gcGF0aCB0byBub3JtYWxpemVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBkZXZpY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAvLyBUcnkgdG8gbWF0Y2ggYSByb290XG4gIGlmIChsZW4gPiAxKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gUG9zc2libGUgVU5DIHJvb3RcblxuICAgICAgLy8gSWYgd2Ugc3RhcnRlZCB3aXRoIGEgc2VwYXJhdG9yLCB3ZSBrbm93IHdlIGF0IGxlYXN0IGhhdmUgYW4gYWJzb2x1dGVcbiAgICAgIC8vIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG5cbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoLnNsaWNlKGxhc3QsIGopO1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgVU5DIHJvb3Qgc2luY2UgdGhlcmVcbiAgICAgICAgICAgICAgLy8gaXMgbm90aGluZyBsZWZ0IHRvIHByb2Nlc3NcblxuICAgICAgICAgICAgICByZXR1cm4gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0KX1cXFxcYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QsIGopfWA7XG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVuZCA9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGRldmljZSA9IHBhdGguc2xpY2UoMCwgMik7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgLy8gVHJlYXQgc2VwYXJhdG9yIGZvbGxvd2luZyBkcml2ZSBuYW1lIGFzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICByb290RW5kID0gMztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuICAgIC8vIHdvcmtcbiAgICByZXR1cm4gXCJcXFxcXCI7XG4gIH1cblxuICBsZXQgdGFpbDogc3RyaW5nO1xuICBpZiAocm9vdEVuZCA8IGxlbikge1xuICAgIHRhaWwgPSBub3JtYWxpemVTdHJpbmcoXG4gICAgICBwYXRoLnNsaWNlKHJvb3RFbmQpLFxuICAgICAgIWlzQWJzb2x1dGUsXG4gICAgICBcIlxcXFxcIixcbiAgICAgIGlzUGF0aFNlcGFyYXRvcixcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRhaWwgPSBcIlwiO1xuICB9XG4gIGlmICh0YWlsLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgdGFpbCA9IFwiLlwiO1xuICBpZiAodGFpbC5sZW5ndGggPiAwICYmIGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQobGVuIC0gMSkpKSB7XG4gICAgdGFpbCArPSBcIlxcXFxcIjtcbiAgfVxuICBpZiAoZGV2aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgICAgaWYgKHRhaWwubGVuZ3RoID4gMCkgcmV0dXJuIGBcXFxcJHt0YWlsfWA7XG4gICAgICBlbHNlIHJldHVybiBcIlxcXFxcIjtcbiAgICB9IGVsc2UgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRhaWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0Fic29sdXRlKSB7XG4gICAgaWYgKHRhaWwubGVuZ3RoID4gMCkgcmV0dXJuIGAke2RldmljZX1cXFxcJHt0YWlsfWA7XG4gICAgZWxzZSByZXR1cm4gYCR7ZGV2aWNlfVxcXFxgO1xuICB9IGVsc2UgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkZXZpY2UgKyB0YWlsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkZXZpY2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHBhdGggaXMgYWJzb2x1dGVcbiAqIEBwYXJhbSBwYXRoIHRvIHZlcmlmeVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkge1xuICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICBpZiAobGVuID4gMiAmJiBwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBKb2luIGFsbCBnaXZlbiBhIHNlcXVlbmNlIG9mIGBwYXRoc2AsdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgcGF0aC5cbiAqIEBwYXJhbSBwYXRocyB0byBiZSBqb2luZWQgYW5kIG5vcm1hbGl6ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aHNDb3VudCA9IHBhdGhzLmxlbmd0aDtcbiAgaWYgKHBhdGhzQ291bnQgPT09IDApIHJldHVybiBcIi5cIjtcblxuICBsZXQgam9pbmVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBmaXJzdFBhcnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzQ291bnQ7ICsraSkge1xuICAgIGNvbnN0IHBhdGggPSBwYXRoc1tpXTtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZCkgam9pbmVkID0gZmlyc3RQYXJ0ID0gcGF0aDtcbiAgICAgIGVsc2Ugam9pbmVkICs9IGBcXFxcJHtwYXRofWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCIuXCI7XG5cbiAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGpvaW5lZCBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCB0d28gc2xhc2hlcywgYmVjYXVzZVxuICAvLyBub3JtYWxpemUoKSB3aWxsIG1pc3Rha2UgaXQgZm9yIGFuIFVOQyBwYXRoIHRoZW4uXG4gIC8vXG4gIC8vIFRoaXMgc3RlcCBpcyBza2lwcGVkIHdoZW4gaXQgaXMgdmVyeSBjbGVhciB0aGF0IHRoZSB1c2VyIGFjdHVhbGx5XG4gIC8vIGludGVuZGVkIHRvIHBvaW50IGF0IGFuIFVOQyBwYXRoLiBUaGlzIGlzIGFzc3VtZWQgd2hlbiB0aGUgZmlyc3RcbiAgLy8gbm9uLWVtcHR5IHN0cmluZyBhcmd1bWVudHMgc3RhcnRzIHdpdGggZXhhY3RseSB0d28gc2xhc2hlcyBmb2xsb3dlZCBieVxuICAvLyBhdCBsZWFzdCBvbmUgbW9yZSBub24tc2xhc2ggY2hhcmFjdGVyLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgZm9yIG5vcm1hbGl6ZSgpIHRvIHRyZWF0IGEgcGF0aCBhcyBhbiBVTkMgcGF0aCBpdCBuZWVkcyB0b1xuICAvLyBoYXZlIGF0IGxlYXN0IDIgY29tcG9uZW50cywgc28gd2UgZG9uJ3QgZmlsdGVyIGZvciB0aGF0IGhlcmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdXNlciBjYW4gdXNlIGpvaW4gdG8gY29uc3RydWN0IFVOQyBwYXRocyBmcm9tXG4gIC8vIGEgc2VydmVyIG5hbWUgYW5kIGEgc2hhcmUgbmFtZTsgZm9yIGV4YW1wbGU6XG4gIC8vICAgcGF0aC5qb2luKCcvL3NlcnZlcicsICdzaGFyZScpIC0+ICdcXFxcXFxcXHNlcnZlclxcXFxzaGFyZVxcXFwnKVxuICBsZXQgbmVlZHNSZXBsYWNlID0gdHJ1ZTtcbiAgbGV0IHNsYXNoQ291bnQgPSAwO1xuICBhc3NlcnQoZmlyc3RQYXJ0ICE9IG51bGwpO1xuICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDApKSkge1xuICAgICsrc2xhc2hDb3VudDtcbiAgICBjb25zdCBmaXJzdExlbiA9IGZpcnN0UGFydC5sZW5ndGg7XG4gICAgaWYgKGZpcnN0TGVuID4gMSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihmaXJzdFBhcnQuY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgKytzbGFzaENvdW50O1xuICAgICAgICBpZiAoZmlyc3RMZW4gPiAyKSB7XG4gICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihmaXJzdFBhcnQuY2hhckNvZGVBdCgyKSkpICsrc2xhc2hDb3VudDtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcGF0aCBpbiB0aGUgZmlyc3QgcGFydFxuICAgICAgICAgICAgbmVlZHNSZXBsYWNlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuZWVkc1JlcGxhY2UpIHtcbiAgICAvLyBGaW5kIGFueSBtb3JlIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2UgbmVlZCB0byByZXBsYWNlXG4gICAgZm9yICg7IHNsYXNoQ291bnQgPCBqb2luZWQubGVuZ3RoOyArK3NsYXNoQ291bnQpIHtcbiAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKGpvaW5lZC5jaGFyQ29kZUF0KHNsYXNoQ291bnQpKSkgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSB0aGUgc2xhc2hlcyBpZiBuZWVkZWRcbiAgICBpZiAoc2xhc2hDb3VudCA+PSAyKSBqb2luZWQgPSBgXFxcXCR7am9pbmVkLnNsaWNlKHNsYXNoQ291bnQpfWA7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplKGpvaW5lZCk7XG59XG5cbi8qKlxuICogSXQgd2lsbCBzb2x2ZSB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIGBmcm9tYCB0byBgdG9gLCBmb3IgaW5zdGFuY2U6XG4gKiAgZnJvbSA9ICdDOlxcXFxvcmFuZGVhXFxcXHRlc3RcXFxcYWFhJ1xuICogIHRvID0gJ0M6XFxcXG9yYW5kZWFcXFxcaW1wbFxcXFxiYmInXG4gKiBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBzaG91bGQgYmU6ICcuLlxcXFwuLlxcXFxpbXBsXFxcXGJiYidcbiAqIEBwYXJhbSBmcm9tIHJlbGF0aXZlIHBhdGhcbiAqIEBwYXJhbSB0byByZWxhdGl2ZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKGZyb20pO1xuICBhc3NlcnRQYXRoKHRvKTtcblxuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBcIlwiO1xuXG4gIGNvbnN0IGZyb21PcmlnID0gcmVzb2x2ZShmcm9tKTtcbiAgY29uc3QgdG9PcmlnID0gcmVzb2x2ZSh0byk7XG5cbiAgaWYgKGZyb21PcmlnID09PSB0b09yaWcpIHJldHVybiBcIlwiO1xuXG4gIGZyb20gPSBmcm9tT3JpZy50b0xvd2VyQ2FzZSgpO1xuICB0byA9IHRvT3JpZy50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG5cbiAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICBsZXQgZnJvbVN0YXJ0ID0gMDtcbiAgbGV0IGZyb21FbmQgPSBmcm9tLmxlbmd0aDtcbiAgZm9yICg7IGZyb21TdGFydCA8IGZyb21FbmQ7ICsrZnJvbVN0YXJ0KSB7XG4gICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICAvLyBUcmltIHRyYWlsaW5nIGJhY2tzbGFzaGVzIChhcHBsaWNhYmxlIHRvIFVOQyBwYXRocyBvbmx5KVxuICBmb3IgKDsgZnJvbUVuZCAtIDEgPiBmcm9tU3RhcnQ7IC0tZnJvbUVuZCkge1xuICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbUVuZCAtIDEpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCB0b1N0YXJ0ID0gMDtcbiAgbGV0IHRvRW5kID0gdG8ubGVuZ3RoO1xuICBmb3IgKDsgdG9TdGFydCA8IHRvRW5kOyArK3RvU3RhcnQpIHtcbiAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgYnJlYWs7XG4gIH1cbiAgLy8gVHJpbSB0cmFpbGluZyBiYWNrc2xhc2hlcyAoYXBwbGljYWJsZSB0byBVTkMgcGF0aHMgb25seSlcbiAgZm9yICg7IHRvRW5kIC0gMSA+IHRvU3RhcnQ7IC0tdG9FbmQpIHtcbiAgICBpZiAodG8uY2hhckNvZGVBdCh0b0VuZCAtIDEpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICBjb25zdCB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDtcblxuICAvLyBDb21wYXJlIHBhdGhzIHRvIGZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHBhdGggZnJvbSByb290XG4gIGNvbnN0IGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjtcbiAgbGV0IGxhc3RDb21tb25TZXAgPSAtMTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKDsgaSA8PSBsZW5ndGg7ICsraSkge1xuICAgIGlmIChpID09PSBsZW5ndGgpIHtcbiAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYHRvYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcZm9vXFxcXGJhcic7IHRvPSdDOlxcXFxmb29cXFxcYmFyXFxcXGJheidcbiAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpICsgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZGV2aWNlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209J0M6XFxcXCc7IHRvPSdDOlxcXFxmb28nXG4gICAgICAgICAgcmV0dXJuIHRvT3JpZy5zbGljZSh0b1N0YXJ0ICsgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGBmcm9tYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcZm9vXFxcXGJhcic7IHRvPSdDOlxcXFxmb28nXG4gICAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGRldmljZSByb290LlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXCdcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKSBicmVhaztcbiAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgbGFzdENvbW1vblNlcCA9IGk7XG4gIH1cblxuICAvLyBXZSBmb3VuZCBhIG1pc21hdGNoIGJlZm9yZSB0aGUgZmlyc3QgY29tbW9uIHBhdGggc2VwYXJhdG9yIHdhcyBzZWVuLCBzb1xuICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIGB0b2AuXG4gIGlmIChpICE9PSBsZW5ndGggJiYgbGFzdENvbW1vblNlcCA9PT0gLTEpIHtcbiAgICByZXR1cm4gdG9PcmlnO1xuICB9XG5cbiAgbGV0IG91dCA9IFwiXCI7XG4gIGlmIChsYXN0Q29tbW9uU2VwID09PSAtMSkgbGFzdENvbW1vblNlcCA9IDA7XG4gIC8vIEdlbmVyYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJhc2VkIG9uIHRoZSBwYXRoIGRpZmZlcmVuY2UgYmV0d2VlbiBgdG9gIGFuZFxuICAvLyBgZnJvbWBcbiAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGZyb21FbmQgfHwgZnJvbS5jaGFyQ29kZUF0KGkpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICBpZiAob3V0Lmxlbmd0aCA9PT0gMCkgb3V0ICs9IFwiLi5cIjtcbiAgICAgIGVsc2Ugb3V0ICs9IFwiXFxcXC4uXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFzdGx5LCBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGRlc3RpbmF0aW9uIChgdG9gKSBwYXRoIHRoYXQgY29tZXMgYWZ0ZXJcbiAgLy8gdGhlIGNvbW1vbiBwYXRoIHBhcnRzXG4gIGlmIChvdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBvdXQgKyB0b09yaWcuc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXAsIHRvRW5kKTtcbiAgfSBlbHNlIHtcbiAgICB0b1N0YXJ0ICs9IGxhc3RDb21tb25TZXA7XG4gICAgaWYgKHRvT3JpZy5jaGFyQ29kZUF0KHRvU3RhcnQpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSArK3RvU3RhcnQ7XG4gICAgcmV0dXJuIHRvT3JpZy5zbGljZSh0b1N0YXJ0LCB0b0VuZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBwYXRoIHRvIGEgbmFtZXNwYWNlIHBhdGhcbiAqIEBwYXJhbSBwYXRoIHRvIHJlc29sdmUgdG8gbmFtZXNwYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vdGU6IHRoaXMgd2lsbCAqcHJvYmFibHkqIHRocm93IHNvbWV3aGVyZS5cbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSByZXR1cm4gcGF0aDtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcblxuICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgpO1xuXG4gIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID49IDMpIHtcbiAgICBpZiAocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICBjb25zdCBjb2RlID0gcmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMik7XG4gICAgICAgIGlmIChjb2RlICE9PSBDSEFSX1FVRVNUSU9OX01BUksgJiYgY29kZSAhPT0gQ0hBUl9ET1QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIG5vbi1sb25nIFVOQyByb290LCBjb252ZXJ0IHRoZSBwYXRoIHRvIGEgbG9uZyBVTkMgcGF0aFxuICAgICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXFVOQ1xcXFwke3Jlc29sdmVkUGF0aC5zbGljZSgyKX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgaWYgKFxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTiAmJlxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSFxuICAgICAgKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZGV2aWNlIHJvb3QsIGNvbnZlcnQgdGhlIHBhdGggdG8gYSBsb25nIFVOQyBwYXRoXG4gICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXCR7cmVzb2x2ZWRQYXRofWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaXJlY3RvcnkgcGF0aCBvZiBhIGBwYXRoYC5cbiAqIEBwYXJhbSBwYXRoIHRvIGRldGVybWluZSB0aGUgZGlyZWN0b3J5IHBhdGggZm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gXCIuXCI7XG4gIGxldCByb290RW5kID0gLTE7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gb2Zmc2V0ID0gMTtcblxuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMSkpKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgIGxldCBsYXN0ID0gajtcbiAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgIC8vIE9mZnNldCBieSAxIHRvIGluY2x1ZGUgdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgVU5DIHJvb3QgdG9cbiAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgYXMgYSBcIm5vcm1hbCByb290XCIgb24gdG9wIG9mIGEgKFVOQykgcm9vdFxuICAgICAgICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcm9vdEVuZCA9IG9mZnNldCA9IDM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IG9mZnNldDsgLS1pKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSB7XG4gICAgaWYgKHJvb3RFbmQgPT09IC0xKSByZXR1cm4gXCIuXCI7XG4gICAgZWxzZSBlbmQgPSByb290RW5kO1xuICB9XG4gIHJldHVybiBwYXRoLnNsaWNlKDAsIGVuZCk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuIFRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGFyZSBpZ25vcmVkLlxuICogQHBhcmFtIHBhdGggdG8gcHJvY2Vzc1xuICogQHBhcmFtIGV4dCBvZiBwYXRoIGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBleHQgPSBcIlwiKTogc3RyaW5nIHtcbiAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGk6IG51bWJlcjtcblxuICAvLyBDaGVjayBmb3IgYSBkcml2ZSBsZXR0ZXIgcHJlZml4IHNvIGFzIG5vdCB0byBtaXN0YWtlIHRoZSBmb2xsb3dpbmdcbiAgLy8gcGF0aCBzZXBhcmF0b3IgYXMgYW4gZXh0cmEgc2VwYXJhdG9yIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggdGhhdCBjYW4gYmVcbiAgLy8gZGlzcmVnYXJkZWRcbiAgaWYgKHBhdGgubGVuZ3RoID49IDIpIHtcbiAgICBjb25zdCBkcml2ZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChkcml2ZSkpIHtcbiAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHN0YXJ0ID0gMjtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoLmxlbmd0aCkge1xuICAgIGlmIChleHQubGVuZ3RoID09PSBwYXRoLmxlbmd0aCAmJiBleHQgPT09IHBhdGgpIHJldHVybiBcIlwiO1xuICAgIGxldCBleHRJZHggPSBleHQubGVuZ3RoIC0gMTtcbiAgICBsZXQgZmlyc3ROb25TbGFzaEVuZCA9IC0xO1xuICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSBzdGFydDsgLS1pKSB7XG4gICAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgcmVtZW1iZXIgdGhpcyBpbmRleCBpbiBjYXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nXG4gICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRJZHggPj0gMCkge1xuICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZXhwbGljaXQgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHtcbiAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgZXh0ZW5zaW9uLCBzbyBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIgcGF0aFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRXh0ZW5zaW9uIGRvZXMgbm90IG1hdGNoLCBzbyBvdXIgcmVzdWx0IGlzIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICBleHRJZHggPSAtMTtcbiAgICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID09PSBlbmQpIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aC5sZW5ndGg7XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBwYXRoIGNvbXBvbmVudFxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHRlbnNpb24gb2YgdGhlIGBwYXRoYCB3aXRoIGxlYWRpbmcgcGVyaW9kLlxuICogQHBhcmFtIHBhdGggd2l0aCBleHRlbnNpb25cbiAqIEByZXR1cm5zIGV4dGVuc2lvbiAoZXguIGZvciBgZmlsZS50c2AgcmV0dXJucyBgLnRzYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dG5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IHN0YXJ0RG90ID0gLTE7XG4gIGxldCBzdGFydFBhcnQgPSAwO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gIGxldCBwcmVEb3RTdGF0ZSA9IDA7XG5cbiAgLy8gQ2hlY2sgZm9yIGEgZHJpdmUgbGV0dGVyIHByZWZpeCBzbyBhcyBub3QgdG8gbWlzdGFrZSB0aGUgZm9sbG93aW5nXG4gIC8vIHBhdGggc2VwYXJhdG9yIGFzIGFuIGV4dHJhIHNlcGFyYXRvciBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIHRoYXQgY2FuIGJlXG4gIC8vIGRpc3JlZ2FyZGVkXG5cbiAgaWYgKFxuICAgIHBhdGgubGVuZ3RoID49IDIgJiZcbiAgICBwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04gJiZcbiAgICBpc1dpbmRvd3NEZXZpY2VSb290KHBhdGguY2hhckNvZGVBdCgwKSlcbiAgKSB7XG4gICAgc3RhcnQgPSBzdGFydFBhcnQgPSAyO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSBzdGFydDsgLS1pKSB7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHBhdGggZnJvbSBgRm9ybWF0SW5wdXRQYXRoT2JqZWN0YCBvYmplY3QuXG4gKiBAcGFyYW0gcGF0aE9iamVjdCB3aXRoIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0OiBGb3JtYXRJbnB1dFBhdGhPYmplY3QpOiBzdHJpbmcge1xuICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgcGF0aE9iamVjdH1gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIF9mb3JtYXQoXCJcXFxcXCIsIHBhdGhPYmplY3QpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGBQYXJzZWRQYXRoYCBvYmplY3Qgb2YgdGhlIGBwYXRoYC5cbiAqIEBwYXJhbSBwYXRoIHRvIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHJldDogUGFyc2VkUGF0aCA9IHsgcm9vdDogXCJcIiwgZGlyOiBcIlwiLCBiYXNlOiBcIlwiLCBleHQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcblxuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIHJldDtcblxuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gMTtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID09PSBsZW4pIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcblxuICAgICAgICAgICAgICByb290RW5kID0gajtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICByb290RW5kID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMykge1xuICAgICAgICAgICAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIGRyaXZlIHJvb3QsIGV4aXQgZWFybHkgdG8gYXZvaWRcbiAgICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgICAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgZHJpdmUgcm9vdCwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBpZiAocm9vdEVuZCA+IDApIHJldC5yb290ID0gcGF0aC5zbGljZSgwLCByb290RW5kKTtcblxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IHJvb3RFbmQ7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBpID0gcGF0aC5sZW5ndGggLSAxO1xuXG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcblxuICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gIGZvciAoOyBpID49IHJvb3RFbmQ7IC0taSkge1xuICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgc3RhcnREb3QpO1xuICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgcmV0LmV4dCA9IHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH1cblxuICAvLyBJZiB0aGUgZGlyZWN0b3J5IGlzIHRoZSByb290LCB1c2UgdGhlIGVudGlyZSByb290IGFzIHRoZSBgZGlyYCBpbmNsdWRpbmdcbiAgLy8gdGhlIHRyYWlsaW5nIHNsYXNoIGlmIGFueSAoYEM6XFxhYmNgIC0+IGBDOlxcYCkuIE90aGVyd2lzZSwgc3RyaXAgb3V0IHRoZVxuICAvLyB0cmFpbGluZyBzbGFzaCAoYEM6XFxhYmNcXGRlZmAgLT4gYEM6XFxhYmNgKS5cbiAgaWYgKHN0YXJ0UGFydCA+IDAgJiYgc3RhcnRQYXJ0ICE9PSByb290RW5kKSB7XG4gICAgcmV0LmRpciA9IHBhdGguc2xpY2UoMCwgc3RhcnRQYXJ0IC0gMSk7XG4gIH0gZWxzZSByZXQuZGlyID0gcmV0LnJvb3Q7XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpbGUgVVJMIHRvIGEgcGF0aCBzdHJpbmcuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgZnJvbUZpbGVVcmwgfSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQCRTVERfVkVSU0lPTi9wYXRoL3dpbjMyLnRzXCI7XG4gKiAgICAgIGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKTsgLy8gXCJcXFxcaG9tZVxcXFxmb29cIlxuICogICAgICBmcm9tRmlsZVVybChcImZpbGU6Ly8vQzovVXNlcnMvZm9vXCIpOyAvLyBcIkM6XFxcXFVzZXJzXFxcXGZvb1wiXG4gKiAgICAgIGZyb21GaWxlVXJsKFwiZmlsZTovL2xvY2FsaG9zdC9ob21lL2Zvb1wiKTsgLy8gXCJcXFxcXFxcXGxvY2FsaG9zdFxcXFxob21lXFxcXGZvb1wiXG4gKiBgYGBcbiAqIEBwYXJhbSB1cmwgb2YgYSBmaWxlIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBzdHJpbmcgfCBVUkwpOiBzdHJpbmcge1xuICB1cmwgPSB1cmwgaW5zdGFuY2VvZiBVUkwgPyB1cmwgOiBuZXcgVVJMKHVybCk7XG4gIGlmICh1cmwucHJvdG9jb2wgIT0gXCJmaWxlOlwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYSBmaWxlIFVSTC5cIik7XG4gIH1cbiAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLy9nLCBcIlxcXFxcIikucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKS5yZXBsYWNlKC9eXFxcXCooW0EtWmEtel06KShcXFxcfCQpLywgXCIkMVxcXFxcIik7XG4gIGlmICh1cmwuaG9zdG5hbWUgIT0gXCJcIikge1xuICAgIC8vIE5vdGU6IFRoZSBgVVJMYCBpbXBsZW1lbnRhdGlvbiBndWFyYW50ZWVzIHRoYXQgdGhlIGRyaXZlIGxldHRlciBhbmRcbiAgICAvLyBob3N0bmFtZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBPdGhlcndpc2UgaXQgd291bGQgbm90IGhhdmUgYmVlbiB2YWxpZFxuICAgIC8vIHRvIGFwcGVuZCB0aGUgaG9zdG5hbWUgYW5kIHBhdGggbGlrZSB0aGlzLlxuICAgIHBhdGggPSBgXFxcXFxcXFwke3VybC5ob3N0bmFtZX0ke3BhdGh9YDtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggc3RyaW5nIHRvIGEgZmlsZSBVUkwuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgdG9GaWxlVXJsIH0gZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAkU1REX1ZFUlNJT04vcGF0aC93aW4zMi50c1wiO1xuICogICAgICB0b0ZpbGVVcmwoXCJcXFxcaG9tZVxcXFxmb29cIik7IC8vIG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpXG4gKiAgICAgIHRvRmlsZVVybChcIkM6XFxcXFVzZXJzXFxcXGZvb1wiKTsgLy8gbmV3IFVSTChcImZpbGU6Ly8vQzovVXNlcnMvZm9vXCIpXG4gKiAgICAgIHRvRmlsZVVybChcIlxcXFxcXFxcMTI3LjAuMC4xXFxcXGhvbWVcXFxcZm9vXCIpOyAvLyBuZXcgVVJMKFwiZmlsZTovLzEyNy4wLjAuMS9ob21lL2Zvb1wiKVxuICogYGBgXG4gKiBAcGFyYW0gcGF0aCB0byBjb252ZXJ0IHRvIGZpbGUgVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpbGVVcmwocGF0aDogc3RyaW5nKTogVVJMIHtcbiAgaWYgKCFpc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5cIik7XG4gIH1cbiAgY29uc3QgWywgaG9zdG5hbWUsIHBhdGhuYW1lXSA9IHBhdGgubWF0Y2goXG4gICAgL14oPzpbL1xcXFxdezJ9KFteL1xcXFxdKykoPz1bL1xcXFxdKD86W14vXFxcXF18JCkpKT8oLiopLyxcbiAgKSE7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoXCJmaWxlOi8vL1wiKTtcbiAgdXJsLnBhdGhuYW1lID0gZW5jb2RlV2hpdGVzcGFjZShwYXRobmFtZS5yZXBsYWNlKC8lL2csIFwiJTI1XCIpKTtcbiAgaWYgKGhvc3RuYW1lICE9IG51bGwgJiYgaG9zdG5hbWUgIT0gXCJsb2NhbGhvc3RcIikge1xuICAgIHVybC5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuICAgIGlmICghdXJsLmhvc3RuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBob3N0bmFtZS5cIik7XG4gICAgfVxuICB9XG4gIHJldHVybiB1cmw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLGlEQUFpRDtBQUNqRCw2REFBNkQ7QUFDN0QscUNBQXFDO0FBR3JDLFNBQ0UsbUJBQW1C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
+// denoCacheMetadata=5334482375933601715,3386009256447851835 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8d1fde568a3fee9c1f33208eacfe737e03a3bfd24d84ee53a6a8b314e529a341.js b/vendor/gen/https/deno.land/8d1fde568a3fee9c1f33208eacfe737e03a3bfd24d84ee53a6a8b314e529a341.js
new file mode 100644
index 0000000..c7e1f58
--- /dev/null
+++ b/vendor/gen/https/deno.land/8d1fde568a3fee9c1f33208eacfe737e03a3bfd24d84ee53a6a8b314e529a341.js
@@ -0,0 +1,35 @@
+export function localIp() {
+ // Try/catch for https://github.com/denoland/deno/issues/25420
+ try {
+ for (const info of Deno.networkInterfaces()){
+ if (info.family !== "IPv4" || info.address.startsWith("127.")) {
+ continue;
+ }
+ return info.address;
+ }
+ } catch {
+ return undefined;
+ }
+}
+export async function openBrowser(url) {
+ const commands = {
+ darwin: "open",
+ linux: "xdg-open",
+ freebsd: "xdg-open",
+ netbsd: "xdg-open",
+ aix: "xdg-open",
+ solaris: "xdg-open",
+ illumos: "xdg-open",
+ windows: "explorer",
+ android: "xdg-open"
+ };
+ await new Deno.Command(commands[Deno.build.os], {
+ args: [
+ url
+ ],
+ stdout: "inherit",
+ stderr: "inherit"
+ }).output();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9uZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGxvY2FsSXAoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gVHJ5L2NhdGNoIGZvciBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMjU0MjBcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2YgRGVuby5uZXR3b3JrSW50ZXJmYWNlcygpKSB7XG4gICAgICBpZiAoaW5mby5mYW1pbHkgIT09IFwiSVB2NFwiIHx8IGluZm8uYWRkcmVzcy5zdGFydHNXaXRoKFwiMTI3LlwiKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZm8uYWRkcmVzcztcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Ccm93c2VyKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbW1hbmRzOiBSZWNvcmQ8dHlwZW9mIERlbm8uYnVpbGQub3MsIHN0cmluZz4gPSB7XG4gICAgZGFyd2luOiBcIm9wZW5cIixcbiAgICBsaW51eDogXCJ4ZGctb3BlblwiLFxuICAgIGZyZWVic2Q6IFwieGRnLW9wZW5cIixcbiAgICBuZXRic2Q6IFwieGRnLW9wZW5cIixcbiAgICBhaXg6IFwieGRnLW9wZW5cIixcbiAgICBzb2xhcmlzOiBcInhkZy1vcGVuXCIsXG4gICAgaWxsdW1vczogXCJ4ZGctb3BlblwiLFxuICAgIHdpbmRvd3M6IFwiZXhwbG9yZXJcIixcbiAgICBhbmRyb2lkOiBcInhkZy1vcGVuXCIsXG4gIH07XG5cbiAgYXdhaXQgbmV3IERlbm8uQ29tbWFuZChjb21tYW5kc1tEZW5vLmJ1aWxkLm9zXSwge1xuICAgIGFyZ3M6IFt1cmxdLFxuICAgIHN0ZG91dDogXCJpbmhlcml0XCIsXG4gICAgc3RkZXJyOiBcImluaGVyaXRcIixcbiAgfSkub3V0cHV0KCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTO0VBQ2QsOERBQThEO0VBQzlELElBQUk7SUFDRixLQUFLLE1BQU0sUUFBUSxLQUFLLGlCQUFpQixHQUFJO01BQzNDLElBQUksS0FBSyxNQUFNLEtBQUssVUFBVSxLQUFLLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUztRQUM3RDtNQUNGO01BRUEsT0FBTyxLQUFLLE9BQU87SUFDckI7RUFDRixFQUFFLE9BQU07SUFDTixPQUFPO0VBQ1Q7QUFDRjtBQUVBLE9BQU8sZUFBZSxZQUFZLEdBQVc7RUFDM0MsTUFBTSxXQUFpRDtJQUNyRCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsS0FBSztJQUNMLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7RUFDWDtFQUVBLE1BQU0sSUFBSSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUMsTUFBTTtNQUFDO0tBQUk7SUFDWCxRQUFRO0lBQ1IsUUFBUTtFQUNWLEdBQUcsTUFBTTtBQUNYIn0=
+// denoCacheMetadata=16256158211398553603,14260453024118385112 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8e13e56efc0ab70a1829248301d4a2d1f1cd8ed308f40336a4a4372cb31de324.js b/vendor/gen/https/deno.land/8e13e56efc0ab70a1829248301d4a2d1f1cd8ed308f40336a4a4372cb31de324.js
new file mode 100644
index 0000000..bc3ddbb
--- /dev/null
+++ b/vendor/gen/https/deno.land/8e13e56efc0ab70a1829248301d4a2d1f1cd8ed308f40336a4a4372cb31de324.js
@@ -0,0 +1,1383 @@
+// deno-lint-ignore-file no-explicit-any
+import { UnknownTypeError, ValidationError as FlagsValidationError } from "../flags/_errors.ts";
+import { MissingRequiredEnvVarError } from "./_errors.ts";
+import { parseFlags } from "../flags/flags.ts";
+import { getDescription, parseArgumentsDefinition, splitArguments } from "./_utils.ts";
+import { bold, brightBlue, red, yellow } from "./deps.ts";
+import { CommandExecutableNotFoundError, CommandNotFoundError, DefaultCommandNotFoundError, DuplicateCommandAliasError, DuplicateCommandNameError, DuplicateCompletionError, DuplicateEnvVarError, DuplicateExampleError, DuplicateOptionNameError, DuplicateTypeError, MissingArgumentError, MissingArgumentsError, MissingCommandNameError, NoArgumentsAllowedError, TooManyArgumentsError, TooManyEnvVarValuesError, UnexpectedOptionalEnvVarValueError, UnexpectedVariadicEnvVarValueError, UnknownCommandError, ValidationError } from "./_errors.ts";
+import { BooleanType } from "./types/boolean.ts";
+import { FileType } from "./types/file.ts";
+import { NumberType } from "./types/number.ts";
+import { StringType } from "./types/string.ts";
+import { Type } from "./type.ts";
+import { HelpGenerator } from "./help/_help_generator.ts";
+import { IntegerType } from "./types/integer.ts";
+import { underscoreToCamelCase } from "../flags/_utils.ts";
+export class Command {
+ types = new Map();
+ rawArgs = [];
+ literalArgs = [];
+ // @TODO: get script name: https://github.com/denoland/deno/pull/5034
+ // private name: string = location.pathname.split( '/' ).pop() as string;
+ _name = "COMMAND";
+ _parent;
+ _globalParent;
+ ver;
+ desc = "";
+ _usage;
+ fn;
+ options = [];
+ commands = new Map();
+ examples = [];
+ envVars = [];
+ aliases = [];
+ completions = new Map();
+ cmd = this;
+ argsDefinition;
+ isExecutable = false;
+ throwOnError = false;
+ _allowEmpty = false;
+ _stopEarly = false;
+ defaultCommand;
+ _useRawArgs = false;
+ args = [];
+ isHidden = false;
+ isGlobal = false;
+ hasDefaults = false;
+ _versionOptions;
+ _helpOptions;
+ _versionOption;
+ _helpOption;
+ _help;
+ _shouldExit;
+ _meta = {};
+ _groupName;
+ _noGlobals = false;
+ errorHandler;
+ versionOption(flags, desc, opts) {
+ this._versionOptions = flags === false ? flags : {
+ flags,
+ desc,
+ opts: typeof opts === "function" ? {
+ action: opts
+ } : opts
+ };
+ return this;
+ }
+ helpOption(flags, desc, opts) {
+ this._helpOptions = flags === false ? flags : {
+ flags,
+ desc,
+ opts: typeof opts === "function" ? {
+ action: opts
+ } : opts
+ };
+ return this;
+ }
+ /**
+ * Add new sub-command.
+ * @param nameAndArguments Command definition. E.g: `my-command <input-file:string> <output-file:string>`
+ * @param cmdOrDescription The description of the new child command.
+ * @param override Override existing child command.
+ */ command(nameAndArguments, cmdOrDescription, override) {
+ this.reset();
+ const result = splitArguments(nameAndArguments);
+ const name = result.flags.shift();
+ const aliases = result.flags;
+ if (!name) {
+ throw new MissingCommandNameError();
+ }
+ if (this.getBaseCommand(name, true)) {
+ if (!override) {
+ throw new DuplicateCommandNameError(name);
+ }
+ this.removeCommand(name);
+ }
+ let description;
+ let cmd;
+ if (typeof cmdOrDescription === "string") {
+ description = cmdOrDescription;
+ }
+ if (cmdOrDescription instanceof Command) {
+ cmd = cmdOrDescription.reset();
+ } else {
+ cmd = new Command();
+ }
+ cmd._name = name;
+ cmd._parent = this;
+ if (description) {
+ cmd.description(description);
+ }
+ if (result.typeDefinition) {
+ cmd.arguments(result.typeDefinition);
+ }
+ aliases.forEach((alias)=>cmd.alias(alias));
+ this.commands.set(name, cmd);
+ this.select(name);
+ return this;
+ }
+ /**
+ * Add new command alias.
+ * @param alias Tha name of the alias.
+ */ alias(alias) {
+ if (this.cmd._name === alias || this.cmd.aliases.includes(alias)) {
+ throw new DuplicateCommandAliasError(alias);
+ }
+ this.cmd.aliases.push(alias);
+ return this;
+ }
+ /** Reset internal command reference to main command. */ reset() {
+ this._groupName = undefined;
+ this.cmd = this;
+ return this;
+ }
+ /**
+ * Set internal command pointer to child command with given name.
+ * @param name The name of the command to select.
+ */ select(name) {
+ const cmd = this.getBaseCommand(name, true);
+ if (!cmd) {
+ throw new CommandNotFoundError(name, this.getBaseCommands(true));
+ }
+ this.cmd = cmd;
+ return this;
+ }
+ /*****************************************************************************
+ **** SUB HANDLER ************************************************************
+ *****************************************************************************/ /** Set command name. */ name(name) {
+ this.cmd._name = name;
+ return this;
+ }
+ /**
+ * Set command version.
+ * @param version Semantic version string string or method that returns the version string.
+ */ version(version) {
+ if (typeof version === "string") {
+ this.cmd.ver = ()=>version;
+ } else if (typeof version === "function") {
+ this.cmd.ver = version;
+ }
+ return this;
+ }
+ meta(name, value) {
+ this.cmd._meta[name] = value;
+ return this;
+ }
+ getMeta(name) {
+ return typeof name === "undefined" ? this._meta : this._meta[name];
+ }
+ /**
+ * Set command help.
+ * @param help Help string, method, or config for generator that returns the help string.
+ */ help(help) {
+ if (typeof help === "string") {
+ this.cmd._help = ()=>help;
+ } else if (typeof help === "function") {
+ this.cmd._help = help;
+ } else {
+ this.cmd._help = (cmd, options)=>HelpGenerator.generate(cmd, {
+ ...help,
+ ...options
+ });
+ }
+ return this;
+ }
+ /**
+ * Set the long command description.
+ * @param description The command description.
+ */ description(description) {
+ this.cmd.desc = description;
+ return this;
+ }
+ /**
+ * Set the command usage. Defaults to arguments.
+ * @param usage The command usage.
+ */ usage(usage) {
+ this.cmd._usage = usage;
+ return this;
+ }
+ /**
+ * Hide command from help, completions, etc.
+ */ hidden() {
+ this.cmd.isHidden = true;
+ return this;
+ }
+ /** Make command globally available. */ global() {
+ this.cmd.isGlobal = true;
+ return this;
+ }
+ /** Make command executable. */ executable() {
+ this.cmd.isExecutable = true;
+ return this;
+ }
+ /**
+ * Set command arguments:
+ *
+ * <requiredArg:string> [optionalArg: number] [...restArgs:string]
+ */ arguments(args) {
+ this.cmd.argsDefinition = args;
+ return this;
+ }
+ /**
+ * Set command callback method.
+ * @param fn Command action handler.
+ */ action(fn) {
+ this.cmd.fn = fn;
+ return this;
+ }
+ /**
+ * Don't throw an error if the command was called without arguments.
+ * @param allowEmpty Enable/disable allow empty.
+ */ // public allowEmpty<TAllowEmpty extends boolean | undefined = undefined>(
+ // allowEmpty?: TAllowEmpty,
+ // ): false extends TAllowEmpty ? this
+ // : Command<
+ // Partial<TParentCommandGlobals>,
+ // TParentCommandTypes,
+ // Partial<TCommandOptions>,
+ // TCommandArguments,
+ // TCommandGlobals,
+ // TCommandTypes,
+ // TCommandGlobalTypes,
+ // TParentCommand
+ // > {
+ // this.cmd._allowEmpty = allowEmpty !== false;
+ // return this;
+ // }
+ allowEmpty(allowEmpty) {
+ this.cmd._allowEmpty = allowEmpty !== false;
+ return this;
+ }
+ /**
+ * Enable stop early. If enabled, all arguments starting from the first non
+ * option argument will be passed as arguments with type string to the command
+ * action handler.
+ *
+ * For example:
+ * `command --debug-level warning server --port 80`
+ *
+ * Will result in:
+ * - options: `{debugLevel: 'warning'}`
+ * - args: `['server', '--port', '80']`
+ *
+ * @param stopEarly Enable/disable stop early.
+ */ stopEarly(stopEarly = true) {
+ this.cmd._stopEarly = stopEarly;
+ return this;
+ }
+ /**
+ * Disable parsing arguments. If enabled the raw arguments will be passed to
+ * the action handler. This has no effect for parent or child commands. Only
+ * for the command on which this method was called.
+ * @param useRawArgs Enable/disable raw arguments.
+ */ useRawArgs(useRawArgs = true) {
+ this.cmd._useRawArgs = useRawArgs;
+ return this;
+ }
+ /**
+ * Set default command. The default command is executed when the program
+ * was called without any argument and if no action handler is registered.
+ * @param name Name of the default command.
+ */ default(name) {
+ this.cmd.defaultCommand = name;
+ return this;
+ }
+ globalType(name, handler, options) {
+ return this.type(name, handler, {
+ ...options,
+ global: true
+ });
+ }
+ /**
+ * Register custom type.
+ * @param name The name of the type.
+ * @param handler The callback method to parse the type.
+ * @param options Type options.
+ */ type(name, handler, options) {
+ if (this.cmd.types.get(name) && !options?.override) {
+ throw new DuplicateTypeError(name);
+ }
+ this.cmd.types.set(name, {
+ ...options,
+ name,
+ handler: handler
+ });
+ if (handler instanceof Type && (typeof handler.complete !== "undefined" || typeof handler.values !== "undefined")) {
+ const completeHandler = (cmd, parent)=>handler.complete?.(cmd, parent) || [];
+ this.complete(name, completeHandler, options);
+ }
+ return this;
+ }
+ globalComplete(name, complete, options) {
+ return this.complete(name, complete, {
+ ...options,
+ global: true
+ });
+ }
+ complete(name, complete, options) {
+ if (this.cmd.completions.has(name) && !options?.override) {
+ throw new DuplicateCompletionError(name);
+ }
+ this.cmd.completions.set(name, {
+ name,
+ complete,
+ ...options
+ });
+ return this;
+ }
+ /**
+ * Throw validation errors instead of calling `Deno.exit()` to handle
+ * validation errors manually.
+ *
+ * A validation error is thrown when the command is wrongly used by the user.
+ * For example: If the user passes some invalid options or arguments to the
+ * command.
+ *
+ * This has no effect for parent commands. Only for the command on which this
+ * method was called and all child commands.
+ *
+ * **Example:**
+ *
+ * ```
+ * try {
+ * cmd.parse();
+ * } catch(error) {
+ * if (error instanceof ValidationError) {
+ * cmd.showHelp();
+ * Deno.exit(1);
+ * }
+ * throw error;
+ * }
+ * ```
+ *
+ * @see ValidationError
+ */ throwErrors() {
+ this.cmd.throwOnError = true;
+ return this;
+ }
+ error(handler) {
+ this.cmd.errorHandler = handler;
+ return this;
+ }
+ getErrorHandler() {
+ return this.errorHandler ?? this._parent?.errorHandler;
+ }
+ /**
+ * Same as `.throwErrors()` but also prevents calling `Deno.exit` after
+ * printing help or version with the --help and --version option.
+ */ noExit() {
+ this.cmd._shouldExit = false;
+ this.throwErrors();
+ return this;
+ }
+ /**
+ * Disable inheriting global commands, options and environment variables from
+ * parent commands.
+ */ noGlobals() {
+ this.cmd._noGlobals = true;
+ return this;
+ }
+ /** Check whether the command should throw errors or exit. */ shouldThrowErrors() {
+ return this.throwOnError || !!this._parent?.shouldThrowErrors();
+ }
+ /** Check whether the command should exit after printing help or version. */ shouldExit() {
+ return this._shouldExit ?? this._parent?.shouldExit() ?? true;
+ }
+ globalOption(flags, desc, opts) {
+ if (typeof opts === "function") {
+ return this.option(flags, desc, {
+ value: opts,
+ global: true
+ });
+ }
+ return this.option(flags, desc, {
+ ...opts,
+ global: true
+ });
+ }
+ /**
+ * Enable grouping of options and set the name of the group.
+ * All option which are added after calling the `.group()` method will be
+ * grouped in the help output. If the `.group()` method can be use multiple
+ * times to create more groups.
+ *
+ * @param name The name of the option group.
+ */ group(name) {
+ this.cmd._groupName = name;
+ return this;
+ }
+ option(flags, desc, opts) {
+ if (typeof opts === "function") {
+ return this.option(flags, desc, {
+ value: opts
+ });
+ }
+ const result = splitArguments(flags);
+ const args = result.typeDefinition ? parseArgumentsDefinition(result.typeDefinition) : [];
+ const option = {
+ ...opts,
+ name: "",
+ description: desc,
+ args,
+ flags: result.flags,
+ equalsSign: result.equalsSign,
+ typeDefinition: result.typeDefinition,
+ groupName: this._groupName
+ };
+ if (option.separator) {
+ for (const arg of args){
+ if (arg.list) {
+ arg.separator = option.separator;
+ }
+ }
+ }
+ for (const part of option.flags){
+ const arg = part.trim();
+ const isLong = /^--/.test(arg);
+ const name = isLong ? arg.slice(2) : arg.slice(1);
+ if (this.cmd.getBaseOption(name, true)) {
+ if (opts?.override) {
+ this.removeOption(name);
+ } else {
+ throw new DuplicateOptionNameError(name);
+ }
+ }
+ if (!option.name && isLong) {
+ option.name = name;
+ } else if (!option.aliases) {
+ option.aliases = [
+ name
+ ];
+ } else {
+ option.aliases.push(name);
+ }
+ }
+ if (option.prepend) {
+ this.cmd.options.unshift(option);
+ } else {
+ this.cmd.options.push(option);
+ }
+ return this;
+ }
+ /**
+ * Add new command example.
+ * @param name Name of the example.
+ * @param description The content of the example.
+ */ example(name, description) {
+ if (this.cmd.hasExample(name)) {
+ throw new DuplicateExampleError(name);
+ }
+ this.cmd.examples.push({
+ name,
+ description
+ });
+ return this;
+ }
+ globalEnv(name, description, options) {
+ return this.env(name, description, {
+ ...options,
+ global: true
+ });
+ }
+ env(name, description, options) {
+ const result = splitArguments(name);
+ if (!result.typeDefinition) {
+ result.typeDefinition = "<value:boolean>";
+ }
+ if (result.flags.some((envName)=>this.cmd.getBaseEnvVar(envName, true))) {
+ throw new DuplicateEnvVarError(name);
+ }
+ const details = parseArgumentsDefinition(result.typeDefinition);
+ if (details.length > 1) {
+ throw new TooManyEnvVarValuesError(name);
+ } else if (details.length && details[0].optionalValue) {
+ throw new UnexpectedOptionalEnvVarValueError(name);
+ } else if (details.length && details[0].variadic) {
+ throw new UnexpectedVariadicEnvVarValueError(name);
+ }
+ this.cmd.envVars.push({
+ name: result.flags[0],
+ names: result.flags,
+ description,
+ type: details[0].type,
+ details: details.shift(),
+ ...options
+ });
+ return this;
+ }
+ /*****************************************************************************
+ **** MAIN HANDLER ***********************************************************
+ *****************************************************************************/ /**
+ * Parse command line arguments and execute matched command.
+ * @param args Command line args to parse. Ex: `cmd.parse( Deno.args )`
+ */ parse(args = Deno.args) {
+ const ctx = {
+ unknown: args.slice(),
+ flags: {},
+ env: {},
+ literal: [],
+ stopEarly: false,
+ stopOnUnknown: false
+ };
+ return this.parseCommand(ctx);
+ }
+ async parseCommand(ctx) {
+ try {
+ this.reset();
+ this.registerDefaults();
+ this.rawArgs = ctx.unknown.slice();
+ if (this.isExecutable) {
+ await this.executeExecutable(ctx.unknown);
+ return {
+ options: {},
+ args: [],
+ cmd: this,
+ literal: []
+ };
+ } else if (this._useRawArgs) {
+ await this.parseEnvVars(ctx, this.envVars);
+ return this.execute(ctx.env, ...ctx.unknown);
+ }
+ let preParseGlobals = false;
+ let subCommand;
+ // Pre parse globals to support: cmd --global-option sub-command --option
+ if (ctx.unknown.length > 0) {
+ // Detect sub command.
+ subCommand = this.getSubCommand(ctx);
+ if (!subCommand) {
+ // Only pre parse globals if first arg ist a global option.
+ const optionName = ctx.unknown[0].replace(/^-+/, "");
+ const option = this.getOption(optionName, true);
+ if (option?.global) {
+ preParseGlobals = true;
+ await this.parseGlobalOptionsAndEnvVars(ctx);
+ }
+ }
+ }
+ if (subCommand || ctx.unknown.length > 0) {
+ subCommand ??= this.getSubCommand(ctx);
+ if (subCommand) {
+ subCommand._globalParent = this;
+ return subCommand.parseCommand(ctx);
+ }
+ }
+ // Parse rest options & env vars.
+ await this.parseOptionsAndEnvVars(ctx, preParseGlobals);
+ const options = {
+ ...ctx.env,
+ ...ctx.flags
+ };
+ const args = this.parseArguments(ctx, options);
+ this.literalArgs = ctx.literal;
+ // Execute option action.
+ if (ctx.action) {
+ await ctx.action.action.call(this, options, ...args);
+ if (ctx.action.standalone) {
+ return {
+ options,
+ args,
+ cmd: this,
+ literal: this.literalArgs
+ };
+ }
+ }
+ return await this.execute(options, ...args);
+ } catch (error) {
+ this.handleError(error);
+ }
+ }
+ getSubCommand(ctx) {
+ const subCommand = this.getCommand(ctx.unknown[0], true);
+ if (subCommand) {
+ ctx.unknown.shift();
+ }
+ return subCommand;
+ }
+ async parseGlobalOptionsAndEnvVars(ctx) {
+ const isHelpOption = this.getHelpOption()?.flags.includes(ctx.unknown[0]);
+ // Parse global env vars.
+ const envVars = [
+ ...this.envVars.filter((envVar)=>envVar.global),
+ ...this.getGlobalEnvVars(true)
+ ];
+ await this.parseEnvVars(ctx, envVars, !isHelpOption);
+ // Parse global options.
+ const options = [
+ ...this.options.filter((option)=>option.global),
+ ...this.getGlobalOptions(true)
+ ];
+ this.parseOptions(ctx, options, {
+ stopEarly: true,
+ stopOnUnknown: true,
+ dotted: false
+ });
+ }
+ async parseOptionsAndEnvVars(ctx, preParseGlobals) {
+ const helpOption = this.getHelpOption();
+ const isVersionOption = this._versionOption?.flags.includes(ctx.unknown[0]);
+ const isHelpOption = helpOption && ctx.flags?.[helpOption.name] === true;
+ // Parse env vars.
+ const envVars = preParseGlobals ? this.envVars.filter((envVar)=>!envVar.global) : this.getEnvVars(true);
+ await this.parseEnvVars(ctx, envVars, !isHelpOption && !isVersionOption);
+ // Parse options.
+ const options = this.getOptions(true);
+ this.parseOptions(ctx, options);
+ }
+ /** Register default options like `--version` and `--help`. */ registerDefaults() {
+ if (this.hasDefaults || this.getParent()) {
+ return this;
+ }
+ this.hasDefaults = true;
+ this.reset();
+ !this.types.has("string") && this.type("string", new StringType(), {
+ global: true
+ });
+ !this.types.has("number") && this.type("number", new NumberType(), {
+ global: true
+ });
+ !this.types.has("integer") && this.type("integer", new IntegerType(), {
+ global: true
+ });
+ !this.types.has("boolean") && this.type("boolean", new BooleanType(), {
+ global: true
+ });
+ !this.types.has("file") && this.type("file", new FileType(), {
+ global: true
+ });
+ if (!this._help) {
+ this.help({
+ hints: true,
+ types: false
+ });
+ }
+ if (this._versionOptions !== false && (this._versionOptions || this.ver)) {
+ this.option(this._versionOptions?.flags || "-V, --version", this._versionOptions?.desc || "Show the version number for this program.", {
+ standalone: true,
+ prepend: true,
+ action: async function() {
+ const long = this.getRawArgs().includes(`--${this._versionOption?.name}`);
+ if (long) {
+ await this.checkVersion();
+ this.showLongVersion();
+ } else {
+ this.showVersion();
+ }
+ this.exit();
+ },
+ ...this._versionOptions?.opts ?? {}
+ });
+ this._versionOption = this.options[0];
+ }
+ if (this._helpOptions !== false) {
+ this.option(this._helpOptions?.flags || "-h, --help", this._helpOptions?.desc || "Show this help.", {
+ standalone: true,
+ global: true,
+ prepend: true,
+ action: async function() {
+ const long = this.getRawArgs().includes(`--${this.getHelpOption()?.name}`);
+ await this.checkVersion();
+ this.showHelp({
+ long
+ });
+ this.exit();
+ },
+ ...this._helpOptions?.opts ?? {}
+ });
+ this._helpOption = this.options[0];
+ }
+ return this;
+ }
+ /**
+ * Execute command.
+ * @param options A map of options.
+ * @param args Command arguments.
+ */ async execute(options, ...args) {
+ if (this.fn) {
+ await this.fn(options, ...args);
+ } else if (this.defaultCommand) {
+ const cmd = this.getCommand(this.defaultCommand, true);
+ if (!cmd) {
+ throw new DefaultCommandNotFoundError(this.defaultCommand, this.getCommands());
+ }
+ cmd._globalParent = this;
+ return cmd.execute(options, ...args);
+ }
+ return {
+ options,
+ args,
+ cmd: this,
+ literal: this.literalArgs
+ };
+ }
+ /**
+ * Execute external sub-command.
+ * @param args Raw command line arguments.
+ */ async executeExecutable(args) {
+ const command = this.getPath().replace(/\s+/g, "-");
+ await Deno.permissions.request({
+ name: "run",
+ command
+ });
+ try {
+ const process = Deno.run({
+ cmd: [
+ command,
+ ...args
+ ]
+ });
+ const status = await process.status();
+ if (!status.success) {
+ Deno.exit(status.code);
+ }
+ } catch (error) {
+ if (error instanceof Deno.errors.NotFound) {
+ throw new CommandExecutableNotFoundError(command);
+ }
+ throw error;
+ }
+ }
+ /** Parse raw command line arguments. */ parseOptions(ctx, options, { stopEarly = this._stopEarly, stopOnUnknown = false, dotted = true } = {}) {
+ parseFlags(ctx, {
+ stopEarly,
+ stopOnUnknown,
+ dotted,
+ allowEmpty: this._allowEmpty,
+ flags: options,
+ ignoreDefaults: ctx.env,
+ parse: (type)=>this.parseType(type),
+ option: (option)=>{
+ if (!ctx.action && option.action) {
+ ctx.action = option;
+ }
+ }
+ });
+ }
+ /** Parse argument type. */ parseType(type) {
+ const typeSettings = this.getType(type.type);
+ if (!typeSettings) {
+ throw new UnknownTypeError(type.type, this.getTypes().map((type)=>type.name));
+ }
+ return typeSettings.handler instanceof Type ? typeSettings.handler.parse(type) : typeSettings.handler(type);
+ }
+ /**
+ * Read and validate environment variables.
+ * @param ctx Parse context.
+ * @param envVars env vars defined by the command.
+ * @param validate when true, throws an error if a required env var is missing.
+ */ async parseEnvVars(ctx, envVars, validate = true) {
+ for (const envVar of envVars){
+ const env = await this.findEnvVar(envVar.names);
+ if (env) {
+ const parseType = (value)=>{
+ return this.parseType({
+ label: "Environment variable",
+ type: envVar.type,
+ name: env.name,
+ value
+ });
+ };
+ const propertyName = underscoreToCamelCase(envVar.prefix ? envVar.names[0].replace(new RegExp(`^${envVar.prefix}`), "") : envVar.names[0]);
+ if (envVar.details.list) {
+ ctx.env[propertyName] = env.value.split(envVar.details.separator ?? ",").map(parseType);
+ } else {
+ ctx.env[propertyName] = parseType(env.value);
+ }
+ if (envVar.value && typeof ctx.env[propertyName] !== "undefined") {
+ ctx.env[propertyName] = envVar.value(ctx.env[propertyName]);
+ }
+ } else if (envVar.required && validate) {
+ throw new MissingRequiredEnvVarError(envVar);
+ }
+ }
+ }
+ async findEnvVar(names) {
+ for (const name of names){
+ const status = await Deno.permissions.query({
+ name: "env",
+ variable: name
+ });
+ if (status.state === "granted") {
+ const value = Deno.env.get(name);
+ if (value) {
+ return {
+ name,
+ value
+ };
+ }
+ }
+ }
+ return undefined;
+ }
+ /**
+ * Parse command-line arguments.
+ * @param ctx Parse context.
+ * @param options Parsed command line options.
+ */ parseArguments(ctx, options) {
+ const params = [];
+ const args = ctx.unknown.slice();
+ if (!this.hasArguments()) {
+ if (args.length) {
+ if (this.hasCommands(true)) {
+ if (this.hasCommand(args[0], true)) {
+ // e.g: command --global-foo --foo sub-command
+ throw new TooManyArgumentsError(args);
+ } else {
+ throw new UnknownCommandError(args[0], this.getCommands());
+ }
+ } else {
+ throw new NoArgumentsAllowedError(this.getPath());
+ }
+ }
+ } else {
+ if (!args.length) {
+ const required = this.getArguments().filter((expectedArg)=>!expectedArg.optionalValue).map((expectedArg)=>expectedArg.name);
+ if (required.length) {
+ const optionNames = Object.keys(options);
+ const hasStandaloneOption = !!optionNames.find((name)=>this.getOption(name, true)?.standalone);
+ if (!hasStandaloneOption) {
+ throw new MissingArgumentsError(required);
+ }
+ }
+ } else {
+ for (const expectedArg of this.getArguments()){
+ if (!args.length) {
+ if (expectedArg.optionalValue) {
+ break;
+ }
+ throw new MissingArgumentError(expectedArg.name);
+ }
+ let arg;
+ const parseArgValue = (value)=>{
+ return expectedArg.list ? value.split(",").map((value)=>parseArgType(value)) : parseArgType(value);
+ };
+ const parseArgType = (value)=>{
+ return this.parseType({
+ label: "Argument",
+ type: expectedArg.type,
+ name: expectedArg.name,
+ value
+ });
+ };
+ if (expectedArg.variadic) {
+ arg = args.splice(0, args.length).map((value)=>parseArgValue(value));
+ } else {
+ arg = parseArgValue(args.shift());
+ }
+ if (expectedArg.variadic && Array.isArray(arg)) {
+ params.push(...arg);
+ } else if (typeof arg !== "undefined") {
+ params.push(arg);
+ }
+ }
+ if (args.length) {
+ throw new TooManyArgumentsError(args);
+ }
+ }
+ }
+ return params;
+ }
+ handleError(error) {
+ this.throw(error instanceof FlagsValidationError ? new ValidationError(error.message) : error instanceof Error ? error : new Error(`[non-error-thrown] ${error}`));
+ }
+ /**
+ * Handle error. If `throwErrors` is enabled the error will be thrown,
+ * otherwise a formatted error message will be printed and `Deno.exit(1)`
+ * will be called. This will also trigger registered error handlers.
+ *
+ * @param error The error to handle.
+ */ throw(error) {
+ if (error instanceof ValidationError) {
+ error.cmd = this;
+ }
+ this.getErrorHandler()?.(error, this);
+ if (this.shouldThrowErrors() || !(error instanceof ValidationError)) {
+ throw error;
+ }
+ this.showHelp();
+ console.error(red(` ${bold("error")}: ${error.message}\n`));
+ Deno.exit(error instanceof ValidationError ? error.exitCode : 1);
+ }
+ /*****************************************************************************
+ **** GETTER *****************************************************************
+ *****************************************************************************/ /** Get command name. */ getName() {
+ return this._name;
+ }
+ /** Get parent command. */ getParent() {
+ return this._parent;
+ }
+ /**
+ * Get parent command from global executed command.
+ * Be sure, to call this method only inside an action handler. Unless this or any child command was executed,
+ * this method returns always undefined.
+ */ getGlobalParent() {
+ return this._globalParent;
+ }
+ /** Get main command. */ getMainCommand() {
+ return this._parent?.getMainCommand() ?? this;
+ }
+ /** Get command name aliases. */ getAliases() {
+ return this.aliases;
+ }
+ /** Get full command path. */ getPath() {
+ return this._parent ? this._parent.getPath() + " " + this._name : this._name;
+ }
+ /** Get arguments definition. E.g: <input-file:string> <output-file:string> */ getArgsDefinition() {
+ return this.argsDefinition;
+ }
+ /**
+ * Get argument by name.
+ * @param name Name of the argument.
+ */ getArgument(name) {
+ return this.getArguments().find((arg)=>arg.name === name);
+ }
+ /** Get arguments. */ getArguments() {
+ if (!this.args.length && this.argsDefinition) {
+ this.args = parseArgumentsDefinition(this.argsDefinition);
+ }
+ return this.args;
+ }
+ /** Check if command has arguments. */ hasArguments() {
+ return !!this.argsDefinition;
+ }
+ /** Get command version. */ getVersion() {
+ return this.getVersionHandler()?.call(this, this);
+ }
+ /** Get help handler method. */ getVersionHandler() {
+ return this.ver ?? this._parent?.getVersionHandler();
+ }
+ /** Get command description. */ getDescription() {
+ // call description method only once
+ return typeof this.desc === "function" ? this.desc = this.desc() : this.desc;
+ }
+ getUsage() {
+ return this._usage ?? this.getArgsDefinition();
+ }
+ /** Get short command description. This is the first line of the description. */ getShortDescription() {
+ return getDescription(this.getDescription(), true);
+ }
+ /** Get original command-line arguments. */ getRawArgs() {
+ return this.rawArgs;
+ }
+ /** Get all arguments defined after the double dash. */ getLiteralArgs() {
+ return this.literalArgs;
+ }
+ /** Output generated help without exiting. */ showVersion() {
+ console.log(this.getVersion());
+ }
+ /** Returns command name, version and meta data. */ getLongVersion() {
+ return `${bold(this.getMainCommand().getName())} ${brightBlue(this.getVersion() ?? "")}` + Object.entries(this.getMeta()).map(([k, v])=>`\n${bold(k)} ${brightBlue(v)}`).join("");
+ }
+ /** Outputs command name, version and meta data. */ showLongVersion() {
+ console.log(this.getLongVersion());
+ }
+ /** Output generated help without exiting. */ showHelp(options) {
+ console.log(this.getHelp(options));
+ }
+ /** Get generated help. */ getHelp(options) {
+ this.registerDefaults();
+ return this.getHelpHandler().call(this, this, options ?? {});
+ }
+ /** Get help handler method. */ getHelpHandler() {
+ return this._help ?? this._parent?.getHelpHandler();
+ }
+ exit(code = 0) {
+ if (this.shouldExit()) {
+ Deno.exit(code);
+ }
+ }
+ /** Check if new version is available and add hint to version. */ async checkVersion() {
+ const mainCommand = this.getMainCommand();
+ const upgradeCommand = mainCommand.getCommand("upgrade");
+ if (!isUpgradeCommand(upgradeCommand)) {
+ return;
+ }
+ const latestVersion = await upgradeCommand.getLatestVersion();
+ const currentVersion = mainCommand.getVersion();
+ if (currentVersion === latestVersion) {
+ return;
+ }
+ const versionHelpText = `(New version available: ${latestVersion}. Run '${mainCommand.getName()} upgrade' to upgrade to the latest version!)`;
+ mainCommand.version(`${currentVersion} ${bold(yellow(versionHelpText))}`);
+ }
+ /*****************************************************************************
+ **** Options GETTER *********************************************************
+ *****************************************************************************/ /**
+ * Checks whether the command has options or not.
+ * @param hidden Include hidden options.
+ */ hasOptions(hidden) {
+ return this.getOptions(hidden).length > 0;
+ }
+ /**
+ * Get options.
+ * @param hidden Include hidden options.
+ */ getOptions(hidden) {
+ return this.getGlobalOptions(hidden).concat(this.getBaseOptions(hidden));
+ }
+ /**
+ * Get base options.
+ * @param hidden Include hidden options.
+ */ getBaseOptions(hidden) {
+ if (!this.options.length) {
+ return [];
+ }
+ return hidden ? this.options.slice(0) : this.options.filter((opt)=>!opt.hidden);
+ }
+ /**
+ * Get global options.
+ * @param hidden Include hidden options.
+ */ getGlobalOptions(hidden) {
+ const helpOption = this.getHelpOption();
+ const getGlobals = (cmd, noGlobals, options = [], names = [])=>{
+ if (cmd.options.length) {
+ for (const option of cmd.options){
+ if (option.global && !this.options.find((opt)=>opt.name === option.name) && names.indexOf(option.name) === -1 && (hidden || !option.hidden)) {
+ if (noGlobals && option !== helpOption) {
+ continue;
+ }
+ names.push(option.name);
+ options.push(option);
+ }
+ }
+ }
+ return cmd._parent ? getGlobals(cmd._parent, noGlobals || cmd._noGlobals, options, names) : options;
+ };
+ return this._parent ? getGlobals(this._parent, this._noGlobals) : [];
+ }
+ /**
+ * Checks whether the command has an option with given name or not.
+ * @param name Name of the option. Must be in param-case.
+ * @param hidden Include hidden options.
+ */ hasOption(name, hidden) {
+ return !!this.getOption(name, hidden);
+ }
+ /**
+ * Get option by name.
+ * @param name Name of the option. Must be in param-case.
+ * @param hidden Include hidden options.
+ */ getOption(name, hidden) {
+ return this.getBaseOption(name, hidden) ?? this.getGlobalOption(name, hidden);
+ }
+ /**
+ * Get base option by name.
+ * @param name Name of the option. Must be in param-case.
+ * @param hidden Include hidden options.
+ */ getBaseOption(name, hidden) {
+ const option = this.options.find((option)=>option.name === name || option.aliases?.includes(name));
+ return option && (hidden || !option.hidden) ? option : undefined;
+ }
+ /**
+ * Get global option from parent commands by name.
+ * @param name Name of the option. Must be in param-case.
+ * @param hidden Include hidden options.
+ */ getGlobalOption(name, hidden) {
+ const helpOption = this.getHelpOption();
+ const getGlobalOption = (parent, noGlobals)=>{
+ const option = parent.getBaseOption(name, hidden);
+ if (!option?.global) {
+ return parent._parent && getGlobalOption(parent._parent, noGlobals || parent._noGlobals);
+ }
+ if (noGlobals && option !== helpOption) {
+ return;
+ }
+ return option;
+ };
+ return this._parent && getGlobalOption(this._parent, this._noGlobals);
+ }
+ /**
+ * Remove option by name.
+ * @param name Name of the option. Must be in param-case.
+ */ removeOption(name) {
+ const index = this.options.findIndex((option)=>option.name === name);
+ if (index === -1) {
+ return;
+ }
+ return this.options.splice(index, 1)[0];
+ }
+ /**
+ * Checks whether the command has sub-commands or not.
+ * @param hidden Include hidden commands.
+ */ hasCommands(hidden) {
+ return this.getCommands(hidden).length > 0;
+ }
+ /**
+ * Get commands.
+ * @param hidden Include hidden commands.
+ */ getCommands(hidden) {
+ return this.getGlobalCommands(hidden).concat(this.getBaseCommands(hidden));
+ }
+ /**
+ * Get base commands.
+ * @param hidden Include hidden commands.
+ */ getBaseCommands(hidden) {
+ const commands = Array.from(this.commands.values());
+ return hidden ? commands : commands.filter((cmd)=>!cmd.isHidden);
+ }
+ /**
+ * Get global commands.
+ * @param hidden Include hidden commands.
+ */ getGlobalCommands(hidden) {
+ const getCommands = (command, noGlobals, commands = [], names = [])=>{
+ if (command.commands.size) {
+ for (const [_, cmd] of command.commands){
+ if (cmd.isGlobal && this !== cmd && !this.commands.has(cmd._name) && names.indexOf(cmd._name) === -1 && (hidden || !cmd.isHidden)) {
+ if (noGlobals && cmd?.getName() !== "help") {
+ continue;
+ }
+ names.push(cmd._name);
+ commands.push(cmd);
+ }
+ }
+ }
+ return command._parent ? getCommands(command._parent, noGlobals || command._noGlobals, commands, names) : commands;
+ };
+ return this._parent ? getCommands(this._parent, this._noGlobals) : [];
+ }
+ /**
+ * Checks whether a child command exists by given name or alias.
+ * @param name Name or alias of the command.
+ * @param hidden Include hidden commands.
+ */ hasCommand(name, hidden) {
+ return !!this.getCommand(name, hidden);
+ }
+ /**
+ * Get command by name or alias.
+ * @param name Name or alias of the command.
+ * @param hidden Include hidden commands.
+ */ getCommand(name, hidden) {
+ return this.getBaseCommand(name, hidden) ?? this.getGlobalCommand(name, hidden);
+ }
+ /**
+ * Get base command by name or alias.
+ * @param name Name or alias of the command.
+ * @param hidden Include hidden commands.
+ */ getBaseCommand(name, hidden) {
+ for (const cmd of this.commands.values()){
+ if (cmd._name === name || cmd.aliases.includes(name)) {
+ return cmd && (hidden || !cmd.isHidden) ? cmd : undefined;
+ }
+ }
+ }
+ /**
+ * Get global command by name or alias.
+ * @param name Name or alias of the command.
+ * @param hidden Include hidden commands.
+ */ getGlobalCommand(name, hidden) {
+ const getGlobalCommand = (parent, noGlobals)=>{
+ const cmd = parent.getBaseCommand(name, hidden);
+ if (!cmd?.isGlobal) {
+ return parent._parent && getGlobalCommand(parent._parent, noGlobals || parent._noGlobals);
+ }
+ if (noGlobals && cmd.getName() !== "help") {
+ return;
+ }
+ return cmd;
+ };
+ return this._parent && getGlobalCommand(this._parent, this._noGlobals);
+ }
+ /**
+ * Remove sub-command by name or alias.
+ * @param name Name or alias of the command.
+ */ removeCommand(name) {
+ const command = this.getBaseCommand(name, true);
+ if (command) {
+ this.commands.delete(command._name);
+ }
+ return command;
+ }
+ /** Get types. */ getTypes() {
+ return this.getGlobalTypes().concat(this.getBaseTypes());
+ }
+ /** Get base types. */ getBaseTypes() {
+ return Array.from(this.types.values());
+ }
+ /** Get global types. */ getGlobalTypes() {
+ const getTypes = (cmd, types = [], names = [])=>{
+ if (cmd) {
+ if (cmd.types.size) {
+ cmd.types.forEach((type)=>{
+ if (type.global && !this.types.has(type.name) && names.indexOf(type.name) === -1) {
+ names.push(type.name);
+ types.push(type);
+ }
+ });
+ }
+ return getTypes(cmd._parent, types, names);
+ }
+ return types;
+ };
+ return getTypes(this._parent);
+ }
+ /**
+ * Get type by name.
+ * @param name Name of the type.
+ */ getType(name) {
+ return this.getBaseType(name) ?? this.getGlobalType(name);
+ }
+ /**
+ * Get base type by name.
+ * @param name Name of the type.
+ */ getBaseType(name) {
+ return this.types.get(name);
+ }
+ /**
+ * Get global type by name.
+ * @param name Name of the type.
+ */ getGlobalType(name) {
+ if (!this._parent) {
+ return;
+ }
+ const cmd = this._parent.getBaseType(name);
+ if (!cmd?.global) {
+ return this._parent.getGlobalType(name);
+ }
+ return cmd;
+ }
+ /** Get completions. */ getCompletions() {
+ return this.getGlobalCompletions().concat(this.getBaseCompletions());
+ }
+ /** Get base completions. */ getBaseCompletions() {
+ return Array.from(this.completions.values());
+ }
+ /** Get global completions. */ getGlobalCompletions() {
+ const getCompletions = (cmd, completions = [], names = [])=>{
+ if (cmd) {
+ if (cmd.completions.size) {
+ cmd.completions.forEach((completion)=>{
+ if (completion.global && !this.completions.has(completion.name) && names.indexOf(completion.name) === -1) {
+ names.push(completion.name);
+ completions.push(completion);
+ }
+ });
+ }
+ return getCompletions(cmd._parent, completions, names);
+ }
+ return completions;
+ };
+ return getCompletions(this._parent);
+ }
+ /**
+ * Get completion by name.
+ * @param name Name of the completion.
+ */ getCompletion(name) {
+ return this.getBaseCompletion(name) ?? this.getGlobalCompletion(name);
+ }
+ /**
+ * Get base completion by name.
+ * @param name Name of the completion.
+ */ getBaseCompletion(name) {
+ return this.completions.get(name);
+ }
+ /**
+ * Get global completions by name.
+ * @param name Name of the completion.
+ */ getGlobalCompletion(name) {
+ if (!this._parent) {
+ return;
+ }
+ const completion = this._parent.getBaseCompletion(name);
+ if (!completion?.global) {
+ return this._parent.getGlobalCompletion(name);
+ }
+ return completion;
+ }
+ /**
+ * Checks whether the command has environment variables or not.
+ * @param hidden Include hidden environment variable.
+ */ hasEnvVars(hidden) {
+ return this.getEnvVars(hidden).length > 0;
+ }
+ /**
+ * Get environment variables.
+ * @param hidden Include hidden environment variable.
+ */ getEnvVars(hidden) {
+ return this.getGlobalEnvVars(hidden).concat(this.getBaseEnvVars(hidden));
+ }
+ /**
+ * Get base environment variables.
+ * @param hidden Include hidden environment variable.
+ */ getBaseEnvVars(hidden) {
+ if (!this.envVars.length) {
+ return [];
+ }
+ return hidden ? this.envVars.slice(0) : this.envVars.filter((env)=>!env.hidden);
+ }
+ /**
+ * Get global environment variables.
+ * @param hidden Include hidden environment variable.
+ */ getGlobalEnvVars(hidden) {
+ if (this._noGlobals) {
+ return [];
+ }
+ const getEnvVars = (cmd, envVars = [], names = [])=>{
+ if (cmd) {
+ if (cmd.envVars.length) {
+ cmd.envVars.forEach((envVar)=>{
+ if (envVar.global && !this.envVars.find((env)=>env.names[0] === envVar.names[0]) && names.indexOf(envVar.names[0]) === -1 && (hidden || !envVar.hidden)) {
+ names.push(envVar.names[0]);
+ envVars.push(envVar);
+ }
+ });
+ }
+ return getEnvVars(cmd._parent, envVars, names);
+ }
+ return envVars;
+ };
+ return getEnvVars(this._parent);
+ }
+ /**
+ * Checks whether the command has an environment variable with given name or not.
+ * @param name Name of the environment variable.
+ * @param hidden Include hidden environment variable.
+ */ hasEnvVar(name, hidden) {
+ return !!this.getEnvVar(name, hidden);
+ }
+ /**
+ * Get environment variable by name.
+ * @param name Name of the environment variable.
+ * @param hidden Include hidden environment variable.
+ */ getEnvVar(name, hidden) {
+ return this.getBaseEnvVar(name, hidden) ?? this.getGlobalEnvVar(name, hidden);
+ }
+ /**
+ * Get base environment variable by name.
+ * @param name Name of the environment variable.
+ * @param hidden Include hidden environment variable.
+ */ getBaseEnvVar(name, hidden) {
+ const envVar = this.envVars.find((env)=>env.names.indexOf(name) !== -1);
+ return envVar && (hidden || !envVar.hidden) ? envVar : undefined;
+ }
+ /**
+ * Get global environment variable by name.
+ * @param name Name of the environment variable.
+ * @param hidden Include hidden environment variable.
+ */ getGlobalEnvVar(name, hidden) {
+ if (!this._parent || this._noGlobals) {
+ return;
+ }
+ const envVar = this._parent.getBaseEnvVar(name, hidden);
+ if (!envVar?.global) {
+ return this._parent.getGlobalEnvVar(name, hidden);
+ }
+ return envVar;
+ }
+ /** Checks whether the command has examples or not. */ hasExamples() {
+ return this.examples.length > 0;
+ }
+ /** Get all examples. */ getExamples() {
+ return this.examples;
+ }
+ /** Checks whether the command has an example with given name or not. */ hasExample(name) {
+ return !!this.getExample(name);
+ }
+ /** Get example with given name. */ getExample(name) {
+ return this.examples.find((example)=>example.name === name);
+ }
+ getHelpOption() {
+ return this._helpOption ?? this._parent?.getHelpOption();
+ }
+}
+function isUpgradeCommand(command) {
+ return command instanceof Command && "getLatestVersion" in command;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZSBuby1leHBsaWNpdC1hbnlcbmltcG9ydCB7XG4gIFVua25vd25UeXBlRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvciBhcyBGbGFnc1ZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIi4uL2ZsYWdzL19lcnJvcnMudHNcIjtcbmltcG9ydCB7IE1pc3NpbmdSZXF1aXJlZEVudlZhckVycm9yIH0gZnJvbSBcIi4vX2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgcGFyc2VGbGFncyB9IGZyb20gXCIuLi9mbGFncy9mbGFncy50c1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZUZsYWdzQ29udGV4dCB9IGZyb20gXCIuLi9mbGFncy90eXBlcy50c1wiO1xuaW1wb3J0IHtcbiAgZ2V0RGVzY3JpcHRpb24sXG4gIHBhcnNlQXJndW1lbnRzRGVmaW5pdGlvbixcbiAgc3BsaXRBcmd1bWVudHMsXG59IGZyb20gXCIuL191dGlscy50c1wiO1xuaW1wb3J0IHsgYm9sZCwgYnJpZ2h0Qmx1ZSwgcmVkLCB5ZWxsb3cgfSBmcm9tIFwiLi9kZXBzLnRzXCI7XG5pbXBvcnQge1xuICBDb21tYW5kRXhlY3V0YWJsZU5vdEZvdW5kRXJyb3IsXG4gIENvbW1hbmROb3RGb3VuZEVycm9yLFxuICBEZWZhdWx0Q29tbWFuZE5vdEZvdW5kRXJyb3IsXG4gIER1cGxpY2F0ZUNvbW1hbmRBbGlhc0Vycm9yLFxuICBEdXBsaWNhdGVDb21tYW5kTmFtZUVycm9yLFxuICBEdXBsaWNhdGVDb21wbGV0aW9uRXJyb3IsXG4gIER1cGxpY2F0ZUVudlZhckVycm9yLFxuICBEdXBsaWNhdGVFeGFtcGxlRXJyb3IsXG4gIER1cGxpY2F0ZU9wdGlvbk5hbWVFcnJvcixcbiAgRHVwbGljYXRlVHlwZUVycm9yLFxuICBNaXNzaW5nQXJndW1lbnRFcnJvcixcbiAgTWlzc2luZ0FyZ3VtZW50c0Vycm9yLFxuICBNaXNzaW5nQ29tbWFuZE5hbWVFcnJvcixcbiAgTm9Bcmd1bWVudHNBbGxvd2VkRXJyb3IsXG4gIFRvb01hbnlBcmd1bWVudHNFcnJvcixcbiAgVG9vTWFueUVudlZhclZhbHVlc0Vycm9yLFxuICBVbmV4cGVjdGVkT3B0aW9uYWxFbnZWYXJWYWx1ZUVycm9yLFxuICBVbmV4cGVjdGVkVmFyaWFkaWNFbnZWYXJWYWx1ZUVycm9yLFxuICBVbmtub3duQ29tbWFuZEVycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gXCIuL19lcnJvcnMudHNcIjtcbmltcG9ydCB7IERlZmF1bHRWYWx1ZSwgRXJyb3JIYW5kbGVyLCBPcHRpb25WYWx1ZUhhbmRsZXIgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuaW1wb3J0IHsgQm9vbGVhblR5cGUgfSBmcm9tIFwiLi90eXBlcy9ib29sZWFuLnRzXCI7XG5pbXBvcnQgeyBGaWxlVHlwZSB9IGZyb20gXCIuL3R5cGVzL2ZpbGUudHNcIjtcbmltcG9ydCB7IE51bWJlclR5cGUgfSBmcm9tIFwiLi90eXBlcy9udW1iZXIudHNcIjtcbmltcG9ydCB7IFN0cmluZ1R5cGUgfSBmcm9tIFwiLi90eXBlcy9zdHJpbmcudHNcIjtcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi90eXBlLnRzXCI7XG5pbXBvcnQgeyBIZWxwR2VuZXJhdG9yIH0gZnJvbSBcIi4vaGVscC9faGVscF9nZW5lcmF0b3IudHNcIjtcbmltcG9ydCB0eXBlIHsgSGVscE9wdGlvbnMgfSBmcm9tIFwiLi9oZWxwL19oZWxwX2dlbmVyYXRvci50c1wiO1xuaW1wb3J0IHR5cGUge1xuICBBY3Rpb25IYW5kbGVyLFxuICBBcmd1bWVudCxcbiAgQXJndW1lbnRWYWx1ZSxcbiAgQ29tbWFuZFJlc3VsdCxcbiAgQ29tcGxldGVIYW5kbGVyLFxuICBDb21wbGV0ZU9wdGlvbnMsXG4gIENvbXBsZXRpb24sXG4gIERlc2NyaXB0aW9uLFxuICBFbnZWYXIsXG4gIEVudlZhck9wdGlvbnMsXG4gIEVudlZhclZhbHVlSGFuZGxlcixcbiAgRXhhbXBsZSxcbiAgR2xvYmFsRW52VmFyT3B0aW9ucyxcbiAgR2xvYmFsT3B0aW9uT3B0aW9ucyxcbiAgSGVscEhhbmRsZXIsXG4gIE1hcFR5cGVzLFxuICBPcHRpb24sXG4gIE9wdGlvbk9wdGlvbnMsXG4gIFR5cGVEZWYsXG4gIFR5cGVPcHRpb25zLFxuICBUeXBlT3JUeXBlSGFuZGxlcixcbiAgVmVyc2lvbkhhbmRsZXIsXG59IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBJbnRlZ2VyVHlwZSB9IGZyb20gXCIuL3R5cGVzL2ludGVnZXIudHNcIjtcbmltcG9ydCB7IHVuZGVyc2NvcmVUb0NhbWVsQ2FzZSB9IGZyb20gXCIuLi9mbGFncy9fdXRpbHMudHNcIjtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmQ8XG4gIFRQYXJlbnRDb21tYW5kR2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCA9IHZvaWQsXG4gIFRQYXJlbnRDb21tYW5kVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQgPVxuICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyBleHRlbmRzIG51bWJlciA/IGFueSA6IHZvaWQsXG4gIFRDb21tYW5kT3B0aW9ucyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCA9XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgVENvbW1hbmRBcmd1bWVudHMgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IFRQYXJlbnRDb21tYW5kR2xvYmFscyBleHRlbmRzXG4gICAgbnVtYmVyID8gYW55IDogW10sXG4gIFRDb21tYW5kR2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCA9XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgVENvbW1hbmRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCA9XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzIGV4dGVuZHMgbnVtYmVyID8gYW55IDoge1xuICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICBpbnRlZ2VyOiBudW1iZXI7XG4gICAgICBzdHJpbmc6IHN0cmluZztcbiAgICAgIGJvb2xlYW46IGJvb2xlYW47XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfSxcbiAgVENvbW1hbmRHbG9iYWxUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCA9XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzIGV4dGVuZHMgbnVtYmVyID8gYW55IDogdm9pZCxcbiAgVFBhcmVudENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPVxuICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyBleHRlbmRzIG51bWJlciA/IGFueSA6IHVuZGVmaW5lZCxcbj4ge1xuICBwcml2YXRlIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlRGVmPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByYXdBcmdzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHByaXZhdGUgbGl0ZXJhbEFyZ3M6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgLy8gQFRPRE86IGdldCBzY3JpcHQgbmFtZTogaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm8vcHVsbC81MDM0XG4gIC8vIHByaXZhdGUgbmFtZTogc3RyaW5nID0gbG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoICcvJyApLnBvcCgpIGFzIHN0cmluZztcbiAgcHJpdmF0ZSBfbmFtZSA9IFwiQ09NTUFORFwiO1xuICBwcml2YXRlIF9wYXJlbnQ/OiBUUGFyZW50Q29tbWFuZDtcbiAgcHJpdmF0ZSBfZ2xvYmFsUGFyZW50PzogQ29tbWFuZDxhbnk+O1xuICBwcml2YXRlIHZlcj86IFZlcnNpb25IYW5kbGVyO1xuICBwcml2YXRlIGRlc2M6IERlc2NyaXB0aW9uID0gXCJcIjtcbiAgcHJpdmF0ZSBfdXNhZ2U/OiBzdHJpbmc7XG4gIHByaXZhdGUgZm4/OiBBY3Rpb25IYW5kbGVyO1xuICBwcml2YXRlIG9wdGlvbnM6IEFycmF5PE9wdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBjb21tYW5kczogTWFwPHN0cmluZywgQ29tbWFuZDxhbnk+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBleGFtcGxlczogQXJyYXk8RXhhbXBsZT4gPSBbXTtcbiAgcHJpdmF0ZSBlbnZWYXJzOiBBcnJheTxFbnZWYXI+ID0gW107XG4gIHByaXZhdGUgYWxpYXNlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcml2YXRlIGNvbXBsZXRpb25zOiBNYXA8c3RyaW5nLCBDb21wbGV0aW9uPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjbWQ6IENvbW1hbmQ8YW55PiA9IHRoaXM7XG4gIHByaXZhdGUgYXJnc0RlZmluaXRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgaXNFeGVjdXRhYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgdGhyb3dPbkVycm9yID0gZmFsc2U7XG4gIHByaXZhdGUgX2FsbG93RW1wdHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RvcEVhcmx5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVmYXVsdENvbW1hbmQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3VzZVJhd0FyZ3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhcmdzOiBBcnJheTxBcmd1bWVudD4gPSBbXTtcbiAgcHJpdmF0ZSBpc0hpZGRlbiA9IGZhbHNlO1xuICBwcml2YXRlIGlzR2xvYmFsID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzRGVmYXVsdHMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmVyc2lvbk9wdGlvbnM/OiBEZWZhdWx0T3B0aW9uIHwgZmFsc2U7XG4gIHByaXZhdGUgX2hlbHBPcHRpb25zPzogRGVmYXVsdE9wdGlvbiB8IGZhbHNlO1xuICBwcml2YXRlIF92ZXJzaW9uT3B0aW9uPzogT3B0aW9uO1xuICBwcml2YXRlIF9oZWxwT3B0aW9uPzogT3B0aW9uO1xuICBwcml2YXRlIF9oZWxwPzogSGVscEhhbmRsZXI7XG4gIHByaXZhdGUgX3Nob3VsZEV4aXQ/OiBib29sZWFuO1xuICBwcml2YXRlIF9tZXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgX2dyb3VwTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfbm9HbG9iYWxzID0gZmFsc2U7XG4gIHByaXZhdGUgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyO1xuXG4gIC8qKiBEaXNhYmxlIHZlcnNpb24gb3B0aW9uLiAqL1xuICBwdWJsaWMgdmVyc2lvbk9wdGlvbihlbmFibGU6IGZhbHNlKTogdGhpcztcblxuICAvKipcbiAgICogU2V0IGdsb2JhbCB2ZXJzaW9uIG9wdGlvbi5cbiAgICogQHBhcmFtIGZsYWdzIFRoZSBmbGFncyBvZiB0aGUgdmVyc2lvbiBvcHRpb24uXG4gICAqIEBwYXJhbSBkZXNjICBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHZlcnNpb24gb3B0aW9uLlxuICAgKiBAcGFyYW0gb3B0cyAgVmVyc2lvbiBvcHRpb24gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyB2ZXJzaW9uT3B0aW9uKFxuICAgIGZsYWdzOiBzdHJpbmcsXG4gICAgZGVzYz86IHN0cmluZyxcbiAgICBvcHRzPzpcbiAgICAgICYgT3B0aW9uT3B0aW9uczxcbiAgICAgICAgUGFydGlhbDxUQ29tbWFuZE9wdGlvbnM+LFxuICAgICAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgICA+XG4gICAgICAmIHtcbiAgICAgICAgZ2xvYmFsOiB0cnVlO1xuICAgICAgfSxcbiAgKTogdGhpcztcblxuICAvKipcbiAgICogU2V0IHZlcnNpb24gb3B0aW9uLlxuICAgKiBAcGFyYW0gZmxhZ3MgVGhlIGZsYWdzIG9mIHRoZSB2ZXJzaW9uIG9wdGlvbi5cbiAgICogQHBhcmFtIGRlc2MgIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdmVyc2lvbiBvcHRpb24uXG4gICAqIEBwYXJhbSBvcHRzICBWZXJzaW9uIG9wdGlvbiBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHZlcnNpb25PcHRpb24oXG4gICAgZmxhZ3M6IHN0cmluZyxcbiAgICBkZXNjPzogc3RyaW5nLFxuICAgIG9wdHM/OiBPcHRpb25PcHRpb25zPFxuICAgICAgVENvbW1hbmRPcHRpb25zLFxuICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICBUUGFyZW50Q29tbWFuZFxuICAgID4sXG4gICk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFNldCB2ZXJzaW9uIG9wdGlvbi5cbiAgICogQHBhcmFtIGZsYWdzIFRoZSBmbGFncyBvZiB0aGUgdmVyc2lvbiBvcHRpb24uXG4gICAqIEBwYXJhbSBkZXNjICBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHZlcnNpb24gb3B0aW9uLlxuICAgKiBAcGFyYW0gb3B0cyAgVGhlIGFjdGlvbiBvZiB0aGUgdmVyc2lvbiBvcHRpb24uXG4gICAqL1xuICBwdWJsaWMgdmVyc2lvbk9wdGlvbihcbiAgICBmbGFnczogc3RyaW5nLFxuICAgIGRlc2M/OiBzdHJpbmcsXG4gICAgb3B0cz86IEFjdGlvbkhhbmRsZXI8XG4gICAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgPixcbiAgKTogdGhpcztcblxuICBwdWJsaWMgdmVyc2lvbk9wdGlvbihcbiAgICBmbGFnczogc3RyaW5nIHwgZmFsc2UsXG4gICAgZGVzYz86IHN0cmluZyxcbiAgICBvcHRzPzpcbiAgICAgIHwgQWN0aW9uSGFuZGxlcjxcbiAgICAgICAgVENvbW1hbmRPcHRpb25zLFxuICAgICAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgICA+XG4gICAgICB8IE9wdGlvbk9wdGlvbnM8XG4gICAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFxuICAgICAgPlxuICAgICAgfCBPcHRpb25PcHRpb25zPFxuICAgICAgICBQYXJ0aWFsPFRDb21tYW5kT3B0aW9ucz4sXG4gICAgICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRcbiAgICAgID5cbiAgICAgICAgJiB7XG4gICAgICAgICAgZ2xvYmFsOiB0cnVlO1xuICAgICAgICB9LFxuICApOiB0aGlzIHtcbiAgICB0aGlzLl92ZXJzaW9uT3B0aW9ucyA9IGZsYWdzID09PSBmYWxzZSA/IGZsYWdzIDoge1xuICAgICAgZmxhZ3MsXG4gICAgICBkZXNjLFxuICAgICAgb3B0czogdHlwZW9mIG9wdHMgPT09IFwiZnVuY3Rpb25cIiA/IHsgYWN0aW9uOiBvcHRzIH0gOiBvcHRzLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogRGlzYWJsZSBoZWxwIG9wdGlvbi4gKi9cbiAgcHVibGljIGhlbHBPcHRpb24oZW5hYmxlOiBmYWxzZSk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFNldCBnbG9iYWwgaGVscCBvcHRpb24uXG4gICAqIEBwYXJhbSBmbGFncyBUaGUgZmxhZ3Mgb2YgdGhlIGhlbHAgb3B0aW9uLlxuICAgKiBAcGFyYW0gZGVzYyAgVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBoZWxwIG9wdGlvbi5cbiAgICogQHBhcmFtIG9wdHMgIEhlbHAgb3B0aW9uIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgaGVscE9wdGlvbihcbiAgICBmbGFnczogc3RyaW5nLFxuICAgIGRlc2M/OiBzdHJpbmcsXG4gICAgb3B0cz86XG4gICAgICAmIE9wdGlvbk9wdGlvbnM8XG4gICAgICAgIFBhcnRpYWw8VENvbW1hbmRPcHRpb25zPixcbiAgICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFxuICAgICAgPlxuICAgICAgJiB7XG4gICAgICAgIGdsb2JhbDogdHJ1ZTtcbiAgICAgIH0sXG4gICk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFNldCBoZWxwIG9wdGlvbi5cbiAgICogQHBhcmFtIGZsYWdzIFRoZSBmbGFncyBvZiB0aGUgaGVscCBvcHRpb24uXG4gICAqIEBwYXJhbSBkZXNjICBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGhlbHAgb3B0aW9uLlxuICAgKiBAcGFyYW0gb3B0cyAgSGVscCBvcHRpb24gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBoZWxwT3B0aW9uKFxuICAgIGZsYWdzOiBzdHJpbmcsXG4gICAgZGVzYz86IHN0cmluZyxcbiAgICBvcHRzPzogT3B0aW9uT3B0aW9uczxcbiAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgVFBhcmVudENvbW1hbmRcbiAgICA+LFxuICApOiB0aGlzO1xuXG4gIC8qKlxuICAgKiBTZXQgaGVscCBvcHRpb24uXG4gICAqIEBwYXJhbSBmbGFncyBUaGUgZmxhZ3Mgb2YgdGhlIGhlbHAgb3B0aW9uLlxuICAgKiBAcGFyYW0gZGVzYyAgVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBoZWxwIG9wdGlvbi5cbiAgICogQHBhcmFtIG9wdHMgIFRoZSBhY3Rpb24gb2YgdGhlIGhlbHAgb3B0aW9uLlxuICAgKi9cbiAgcHVibGljIGhlbHBPcHRpb24oXG4gICAgZmxhZ3M6IHN0cmluZyxcbiAgICBkZXNjPzogc3RyaW5nLFxuICAgIG9wdHM/OiBBY3Rpb25IYW5kbGVyPFxuICAgICAgVENvbW1hbmRPcHRpb25zLFxuICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICBUUGFyZW50Q29tbWFuZFxuICAgID4sXG4gICk6IHRoaXM7XG5cbiAgcHVibGljIGhlbHBPcHRpb24oXG4gICAgZmxhZ3M6IHN0cmluZyB8IGZhbHNlLFxuICAgIGRlc2M/OiBzdHJpbmcsXG4gICAgb3B0cz86XG4gICAgICB8IEFjdGlvbkhhbmRsZXI8XG4gICAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFxuICAgICAgPlxuICAgICAgfCBPcHRpb25PcHRpb25zPFxuICAgICAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRcbiAgICAgID5cbiAgICAgIHwgT3B0aW9uT3B0aW9uczxcbiAgICAgICAgUGFydGlhbDxUQ29tbWFuZE9wdGlvbnM+LFxuICAgICAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgICA+XG4gICAgICAgICYge1xuICAgICAgICAgIGdsb2JhbDogdHJ1ZTtcbiAgICAgICAgfSxcbiAgKTogdGhpcyB7XG4gICAgdGhpcy5faGVscE9wdGlvbnMgPSBmbGFncyA9PT0gZmFsc2UgPyBmbGFncyA6IHtcbiAgICAgIGZsYWdzLFxuICAgICAgZGVzYyxcbiAgICAgIG9wdHM6IHR5cGVvZiBvcHRzID09PSBcImZ1bmN0aW9uXCIgPyB7IGFjdGlvbjogb3B0cyB9IDogb3B0cyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgc3ViLWNvbW1hbmQuXG4gICAqIEBwYXJhbSBuYW1lICAgICAgQ29tbWFuZCBkZWZpbml0aW9uLiBFLmc6IGBteS1jb21tYW5kIDxpbnB1dC1maWxlOnN0cmluZz4gPG91dHB1dC1maWxlOnN0cmluZz5gXG4gICAqIEBwYXJhbSBjbWQgICAgICAgVGhlIG5ldyBjaGlsZCBjb21tYW5kIHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIGNoaWxkIGNvbW1hbmQuXG4gICAqL1xuICBwdWJsaWMgY29tbWFuZDxcbiAgICBUQ29tbWFuZCBleHRlbmRzIENvbW1hbmQ8XG4gICAgICAoVEdsb2JhbE9wdGlvbnMgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfCB2b2lkIHwgdW5kZWZpbmVkLFxuICAgICAgVEdsb2JhbFR5cGVzIHwgdm9pZCB8IHVuZGVmaW5lZCxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCxcbiAgICAgIEFycmF5PHVua25vd24+LFxuICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB2b2lkLFxuICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB2b2lkLFxuICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB2b2lkLFxuICAgICAgQ29tbWFuZDxcbiAgICAgICAgVEdsb2JhbE9wdGlvbnMgfCB2b2lkIHwgdW5kZWZpbmVkLFxuICAgICAgICBUR2xvYmFsVHlwZXMgfCB2b2lkIHwgdW5kZWZpbmVkLFxuICAgICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQsXG4gICAgICAgIEFycmF5PHVua25vd24+LFxuICAgICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQsXG4gICAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCxcbiAgICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB2b2lkLFxuICAgICAgICB1bmRlZmluZWRcbiAgICAgID5cbiAgICA+LFxuICAgIFRHbG9iYWxPcHRpb25zXG4gICAgICBleHRlbmRzIChUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiA/IFRQYXJlbnRDb21tYW5kR2xvYmFsc1xuICAgICAgICA6IE1lcmdlPFRQYXJlbnRDb21tYW5kR2xvYmFscywgVENvbW1hbmRHbG9iYWxzPiksXG4gICAgVEdsb2JhbFR5cGVzXG4gICAgICBleHRlbmRzIChUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiA/IFRQYXJlbnRDb21tYW5kVHlwZXNcbiAgICAgICAgOiBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBUQ29tbWFuZFR5cGVzPiksXG4gID4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNtZDogVENvbW1hbmQsXG4gICAgb3ZlcnJpZGU/OiBib29sZWFuLFxuICApOiBSZXR1cm5UeXBlPFRDb21tYW5kW1wicmVzZXRcIl0+IGV4dGVuZHMgQ29tbWFuZDxcbiAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQsXG4gICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB2b2lkLFxuICAgIGluZmVyIE9wdGlvbnMsXG4gICAgaW5mZXIgQXJndW1lbnRzLFxuICAgIGluZmVyIEdsb2JhbE9wdGlvbnMsXG4gICAgaW5mZXIgVHlwZXMsXG4gICAgaW5mZXIgR2xvYmFsVHlwZXMsXG4gICAgdW5kZWZpbmVkXG4gID4gPyBDb21tYW5kPFxuICAgICAgVEdsb2JhbE9wdGlvbnMsXG4gICAgICBUR2xvYmFsVHlwZXMsXG4gICAgICBPcHRpb25zLFxuICAgICAgQXJndW1lbnRzLFxuICAgICAgR2xvYmFsT3B0aW9ucyxcbiAgICAgIFR5cGVzLFxuICAgICAgR2xvYmFsVHlwZXMsXG4gICAgICBPbmVPZjxUUGFyZW50Q29tbWFuZCwgdGhpcz5cbiAgICA+XG4gICAgOiBuZXZlcjtcblxuICAvKipcbiAgICogQWRkIG5ldyBzdWItY29tbWFuZC5cbiAgICogQHBhcmFtIG5hbWUgICAgICBDb21tYW5kIGRlZmluaXRpb24uIEUuZzogYG15LWNvbW1hbmQgPGlucHV0LWZpbGU6c3RyaW5nPiA8b3V0cHV0LWZpbGU6c3RyaW5nPmBcbiAgICogQHBhcmFtIGNtZCAgICAgICBUaGUgbmV3IGNoaWxkIGNvbW1hbmQgdG8gcmVnaXN0ZXIuXG4gICAqIEBwYXJhbSBvdmVycmlkZSAgT3ZlcnJpZGUgZXhpc3RpbmcgY2hpbGQgY29tbWFuZC5cbiAgICovXG4gIHB1YmxpYyBjb21tYW5kPFxuICAgIFRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxcbiAgICAgIFRHbG9iYWxPcHRpb25zIHwgdm9pZCB8IHVuZGVmaW5lZCxcbiAgICAgIFRHbG9iYWxUeXBlcyB8IHZvaWQgfCB1bmRlZmluZWQsXG4gICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQsXG4gICAgICBBcnJheTx1bmtub3duPixcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCxcbiAgICAgIE9uZU9mPFRQYXJlbnRDb21tYW5kLCB0aGlzPiB8IHVuZGVmaW5lZFxuICAgID4sXG4gICAgVEdsb2JhbE9wdGlvbnNcbiAgICAgIGV4dGVuZHMgKFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+ID8gVFBhcmVudENvbW1hbmRHbG9iYWxzXG4gICAgICAgIDogTWVyZ2U8VFBhcmVudENvbW1hbmRHbG9iYWxzLCBUQ29tbWFuZEdsb2JhbHM+KSxcbiAgICBUR2xvYmFsVHlwZXNcbiAgICAgIGV4dGVuZHMgKFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+ID8gVFBhcmVudENvbW1hbmRUeXBlc1xuICAgICAgICA6IE1lcmdlPFRQYXJlbnRDb21tYW5kVHlwZXMsIFRDb21tYW5kVHlwZXM+KSxcbiAgPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY21kOiBUQ29tbWFuZCxcbiAgICBvdmVycmlkZT86IGJvb2xlYW4sXG4gICk6IFRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxcbiAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQsXG4gICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB2b2lkLFxuICAgIGluZmVyIE9wdGlvbnMsXG4gICAgaW5mZXIgQXJndW1lbnRzLFxuICAgIGluZmVyIEdsb2JhbE9wdGlvbnMsXG4gICAgaW5mZXIgVHlwZXMsXG4gICAgaW5mZXIgR2xvYmFsVHlwZXMsXG4gICAgT25lT2Y8VFBhcmVudENvbW1hbmQsIHRoaXM+IHwgdW5kZWZpbmVkXG4gID4gPyBDb21tYW5kPFxuICAgICAgVEdsb2JhbE9wdGlvbnMsXG4gICAgICBUR2xvYmFsVHlwZXMsXG4gICAgICBPcHRpb25zLFxuICAgICAgQXJndW1lbnRzLFxuICAgICAgR2xvYmFsT3B0aW9ucyxcbiAgICAgIFR5cGVzLFxuICAgICAgR2xvYmFsVHlwZXMsXG4gICAgICBPbmVPZjxUUGFyZW50Q29tbWFuZCwgdGhpcz5cbiAgICA+XG4gICAgOiBuZXZlcjtcblxuICAvKipcbiAgICogQWRkIG5ldyBzdWItY29tbWFuZC5cbiAgICogQHBhcmFtIG5hbWVBbmRBcmd1bWVudHMgIENvbW1hbmQgZGVmaW5pdGlvbi4gRS5nOiBgbXktY29tbWFuZCA8aW5wdXQtZmlsZTpzdHJpbmc+IDxvdXRwdXQtZmlsZTpzdHJpbmc+YFxuICAgKiBAcGFyYW0gZGVzYyAgICAgICAgICAgICAgVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgY2hpbGQgY29tbWFuZC5cbiAgICogQHBhcmFtIG92ZXJyaWRlICAgICAgICAgIE92ZXJyaWRlIGV4aXN0aW5nIGNoaWxkIGNvbW1hbmQuXG4gICAqL1xuICBwdWJsaWMgY29tbWFuZDxcbiAgICBUTmFtZUFuZEFyZ3VtZW50cyBleHRlbmRzIHN0cmluZyxcbiAgICBUQXJndW1lbnRzIGV4dGVuZHMgVHlwZWRDb21tYW5kQXJndW1lbnRzPFxuICAgICAgVE5hbWVBbmRBcmd1bWVudHMsXG4gICAgICBUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiA/IFRQYXJlbnRDb21tYW5kVHlwZXNcbiAgICAgICAgOiBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBUQ29tbWFuZEdsb2JhbFR5cGVzPlxuICAgID4sXG4gID4oXG4gICAgbmFtZUFuZEFyZ3VtZW50czogVE5hbWVBbmRBcmd1bWVudHMsXG4gICAgZGVzYz86IHN0cmluZyxcbiAgICBvdmVycmlkZT86IGJvb2xlYW4sXG4gICk6IFRQYXJlbnRDb21tYW5kR2xvYmFscyBleHRlbmRzIG51bWJlciA/IENvbW1hbmQ8YW55PiA6IENvbW1hbmQ8XG4gICAgVFBhcmVudENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPGFueT4gPyBUUGFyZW50Q29tbWFuZEdsb2JhbHNcbiAgICAgIDogTWVyZ2U8VFBhcmVudENvbW1hbmRHbG9iYWxzLCBUQ29tbWFuZEdsb2JhbHM+LFxuICAgIFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+ID8gVFBhcmVudENvbW1hbmRUeXBlc1xuICAgICAgOiBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBUQ29tbWFuZEdsb2JhbFR5cGVzPixcbiAgICB2b2lkLFxuICAgIFRBcmd1bWVudHMsXG4gICAgdm9pZCxcbiAgICB2b2lkLFxuICAgIHZvaWQsXG4gICAgT25lT2Y8VFBhcmVudENvbW1hbmQsIHRoaXM+XG4gID47XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgc3ViLWNvbW1hbmQuXG4gICAqIEBwYXJhbSBuYW1lQW5kQXJndW1lbnRzICBDb21tYW5kIGRlZmluaXRpb24uIEUuZzogYG15LWNvbW1hbmQgPGlucHV0LWZpbGU6c3RyaW5nPiA8b3V0cHV0LWZpbGU6c3RyaW5nPmBcbiAgICogQHBhcmFtIGNtZE9yRGVzY3JpcHRpb24gIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbmV3IGNoaWxkIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBvdmVycmlkZSAgICAgICAgICBPdmVycmlkZSBleGlzdGluZyBjaGlsZCBjb21tYW5kLlxuICAgKi9cbiAgY29tbWFuZChcbiAgICBuYW1lQW5kQXJndW1lbnRzOiBzdHJpbmcsXG4gICAgY21kT3JEZXNjcmlwdGlvbj86IENvbW1hbmQ8YW55PiB8IHN0cmluZyxcbiAgICBvdmVycmlkZT86IGJvb2xlYW4sXG4gICk6IENvbW1hbmQ8YW55PiB7XG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gc3BsaXRBcmd1bWVudHMobmFtZUFuZEFyZ3VtZW50cyk7XG5cbiAgICBjb25zdCBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZXN1bHQuZmxhZ3Muc2hpZnQoKTtcbiAgICBjb25zdCBhbGlhc2VzOiBzdHJpbmdbXSA9IHJlc3VsdC5mbGFncztcblxuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IE1pc3NpbmdDb21tYW5kTmFtZUVycm9yKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0QmFzZUNvbW1hbmQobmFtZSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghb3ZlcnJpZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUNvbW1hbmROYW1lRXJyb3IobmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbW92ZUNvbW1hbmQobmFtZSk7XG4gICAgfVxuXG4gICAgbGV0IGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNtZDogQ29tbWFuZDxhbnk+O1xuXG4gICAgaWYgKHR5cGVvZiBjbWRPckRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGNtZE9yRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaWYgKGNtZE9yRGVzY3JpcHRpb24gaW5zdGFuY2VvZiBDb21tYW5kKSB7XG4gICAgICBjbWQgPSBjbWRPckRlc2NyaXB0aW9uLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNtZCA9IG5ldyBDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgY21kLl9uYW1lID0gbmFtZTtcbiAgICBjbWQuX3BhcmVudCA9IHRoaXM7XG5cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGNtZC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC50eXBlRGVmaW5pdGlvbikge1xuICAgICAgY21kLmFyZ3VtZW50cyhyZXN1bHQudHlwZURlZmluaXRpb24pO1xuICAgIH1cblxuICAgIGFsaWFzZXMuZm9yRWFjaCgoYWxpYXM6IHN0cmluZykgPT4gY21kLmFsaWFzKGFsaWFzKSk7XG5cbiAgICB0aGlzLmNvbW1hbmRzLnNldChuYW1lLCBjbWQpO1xuXG4gICAgdGhpcy5zZWxlY3QobmFtZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGNvbW1hbmQgYWxpYXMuXG4gICAqIEBwYXJhbSBhbGlhcyBUaGEgbmFtZSBvZiB0aGUgYWxpYXMuXG4gICAqL1xuICBwdWJsaWMgYWxpYXMoYWxpYXM6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICh0aGlzLmNtZC5fbmFtZSA9PT0gYWxpYXMgfHwgdGhpcy5jbWQuYWxpYXNlcy5pbmNsdWRlcyhhbGlhcykpIHtcbiAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVDb21tYW5kQWxpYXNFcnJvcihhbGlhcyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbWQuYWxpYXNlcy5wdXNoKGFsaWFzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFJlc2V0IGludGVybmFsIGNvbW1hbmQgcmVmZXJlbmNlIHRvIG1haW4gY29tbWFuZC4gKi9cbiAgcHVibGljIHJlc2V0KCk6IE9uZU9mPFRQYXJlbnRDb21tYW5kLCB0aGlzPiB7XG4gICAgdGhpcy5fZ3JvdXBOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY21kID0gdGhpcztcbiAgICByZXR1cm4gdGhpcyBhcyBPbmVPZjxUUGFyZW50Q29tbWFuZCwgdGhpcz47XG4gIH1cblxuICAvKipcbiAgICogU2V0IGludGVybmFsIGNvbW1hbmQgcG9pbnRlciB0byBjaGlsZCBjb21tYW5kIHdpdGggZ2l2ZW4gbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdG8gc2VsZWN0LlxuICAgKi9cbiAgcHVibGljIHNlbGVjdDxcbiAgICBUT3B0aW9ucyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdm9pZCA9IGFueSxcbiAgICBUQXJndW1lbnRzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBhbnksXG4gICAgVEdsb2JhbE9wdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHZvaWQgPSBhbnksXG4gID4oXG4gICAgbmFtZTogc3RyaW5nLFxuICApOiBDb21tYW5kPFxuICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgIFRPcHRpb25zLFxuICAgIFRBcmd1bWVudHMsXG4gICAgVEdsb2JhbE9wdGlvbnMsXG4gICAgVENvbW1hbmRUeXBlcyxcbiAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID4ge1xuICAgIGNvbnN0IGNtZCA9IHRoaXMuZ2V0QmFzZUNvbW1hbmQobmFtZSwgdHJ1ZSk7XG5cbiAgICBpZiAoIWNtZCkge1xuICAgICAgdGhyb3cgbmV3IENvbW1hbmROb3RGb3VuZEVycm9yKG5hbWUsIHRoaXMuZ2V0QmFzZUNvbW1hbmRzKHRydWUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmNtZCA9IGNtZDtcblxuICAgIHJldHVybiB0aGlzIGFzIENvbW1hbmQ8YW55PjtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKioqKiBTVUIgSEFORExFUiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKiBTZXQgY29tbWFuZCBuYW1lLiAqL1xuICBwdWJsaWMgbmFtZShuYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmNtZC5fbmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbW1hbmQgdmVyc2lvbi5cbiAgICogQHBhcmFtIHZlcnNpb24gU2VtYW50aWMgdmVyc2lvbiBzdHJpbmcgc3RyaW5nIG9yIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHZlcnNpb24oXG4gICAgdmVyc2lvbjpcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IFZlcnNpb25IYW5kbGVyPFxuICAgICAgICBQYXJ0aWFsPFRDb21tYW5kT3B0aW9ucz4sXG4gICAgICAgIFBhcnRpYWw8VENvbW1hbmRBcmd1bWVudHM+LFxuICAgICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRcbiAgICAgID4sXG4gICk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5jbWQudmVyID0gKCkgPT4gdmVyc2lvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY21kLnZlciA9IHZlcnNpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIG1ldGEobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5jbWQuX21ldGFbbmFtZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRhKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHB1YmxpYyBnZXRNZXRhKG5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgcHVibGljIGdldE1ldGEobmFtZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgbmFtZSA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuX21ldGEgOiB0aGlzLl9tZXRhW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb21tYW5kIGhlbHAuXG4gICAqIEBwYXJhbSBoZWxwIEhlbHAgc3RyaW5nLCBtZXRob2QsIG9yIGNvbmZpZyBmb3IgZ2VuZXJhdG9yIHRoYXQgcmV0dXJucyB0aGUgaGVscCBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgaGVscChcbiAgICBoZWxwOlxuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgSGVscEhhbmRsZXI8XG4gICAgICAgIFBhcnRpYWw8VENvbW1hbmRPcHRpb25zPixcbiAgICAgICAgUGFydGlhbDxUQ29tbWFuZEFyZ3VtZW50cz4sXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzXG4gICAgICA+XG4gICAgICB8IEhlbHBPcHRpb25zLFxuICApOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIGhlbHAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuY21kLl9oZWxwID0gKCkgPT4gaGVscDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWxwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY21kLl9oZWxwID0gaGVscDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbWQuX2hlbHAgPSAoY21kOiBDb21tYW5kLCBvcHRpb25zOiBIZWxwT3B0aW9ucyk6IHN0cmluZyA9PlxuICAgICAgICBIZWxwR2VuZXJhdG9yLmdlbmVyYXRlKGNtZCwgeyAuLi5oZWxwLCAuLi5vcHRpb25zIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxvbmcgY29tbWFuZCBkZXNjcmlwdGlvbi5cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBjb21tYW5kIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcHVibGljIGRlc2NyaXB0aW9uKFxuICAgIGRlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbjxcbiAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgVFBhcmVudENvbW1hbmRcbiAgICA+LFxuICApOiB0aGlzIHtcbiAgICB0aGlzLmNtZC5kZXNjID0gZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjb21tYW5kIHVzYWdlLiBEZWZhdWx0cyB0byBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB1c2FnZSBUaGUgY29tbWFuZCB1c2FnZS5cbiAgICovXG4gIHB1YmxpYyB1c2FnZSh1c2FnZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5jbWQuX3VzYWdlID0gdXNhZ2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBjb21tYW5kIGZyb20gaGVscCwgY29tcGxldGlvbnMsIGV0Yy5cbiAgICovXG4gIHB1YmxpYyBoaWRkZW4oKTogdGhpcyB7XG4gICAgdGhpcy5jbWQuaXNIaWRkZW4gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIE1ha2UgY29tbWFuZCBnbG9iYWxseSBhdmFpbGFibGUuICovXG4gIHB1YmxpYyBnbG9iYWwoKTogdGhpcyB7XG4gICAgdGhpcy5jbWQuaXNHbG9iYWwgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIE1ha2UgY29tbWFuZCBleGVjdXRhYmxlLiAqL1xuICBwdWJsaWMgZXhlY3V0YWJsZSgpOiB0aGlzIHtcbiAgICB0aGlzLmNtZC5pc0V4ZWN1dGFibGUgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb21tYW5kIGFyZ3VtZW50czpcbiAgICpcbiAgICogICA8cmVxdWlyZWRBcmc6c3RyaW5nPiBbb3B0aW9uYWxBcmc6IG51bWJlcl0gWy4uLnJlc3RBcmdzOnN0cmluZ11cbiAgICovXG4gIHB1YmxpYyBhcmd1bWVudHM8XG4gICAgVEFyZ3VtZW50cyBleHRlbmRzIFR5cGVkQXJndW1lbnRzPFxuICAgICAgVEFyZ3MsXG4gICAgICBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBNZXJnZTxUQ29tbWFuZEdsb2JhbFR5cGVzLCBUQ29tbWFuZFR5cGVzPj5cbiAgICA+LFxuICAgIFRBcmdzIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICA+KFxuICAgIGFyZ3M6IFRBcmdzLFxuICApOiBDb21tYW5kPFxuICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICBUQXJndW1lbnRzLFxuICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICBUQ29tbWFuZFR5cGVzLFxuICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPiB7XG4gICAgdGhpcy5jbWQuYXJnc0RlZmluaXRpb24gPSBhcmdzO1xuICAgIHJldHVybiB0aGlzIGFzIENvbW1hbmQ8YW55PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29tbWFuZCBjYWxsYmFjayBtZXRob2QuXG4gICAqIEBwYXJhbSBmbiBDb21tYW5kIGFjdGlvbiBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGFjdGlvbihcbiAgICBmbjogQWN0aW9uSGFuZGxlcjxcbiAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgVFBhcmVudENvbW1hbmRcbiAgICA+LFxuICApOiB0aGlzIHtcbiAgICB0aGlzLmNtZC5mbiA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERvbid0IHRocm93IGFuIGVycm9yIGlmIHRoZSBjb21tYW5kIHdhcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSBhbGxvd0VtcHR5IEVuYWJsZS9kaXNhYmxlIGFsbG93IGVtcHR5LlxuICAgKi9cbiAgLy8gcHVibGljIGFsbG93RW1wdHk8VEFsbG93RW1wdHkgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgLy8gICBhbGxvd0VtcHR5PzogVEFsbG93RW1wdHksXG4gIC8vICk6IGZhbHNlIGV4dGVuZHMgVEFsbG93RW1wdHkgPyB0aGlzXG4gIC8vICAgOiBDb21tYW5kPFxuICAvLyAgICAgUGFydGlhbDxUUGFyZW50Q29tbWFuZEdsb2JhbHM+LFxuICAvLyAgICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgLy8gICAgIFBhcnRpYWw8VENvbW1hbmRPcHRpb25zPixcbiAgLy8gICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAvLyAgICAgVENvbW1hbmRHbG9iYWxzLFxuICAvLyAgICAgVENvbW1hbmRUeXBlcyxcbiAgLy8gICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gIC8vICAgICBUUGFyZW50Q29tbWFuZFxuICAvLyAgID4ge1xuICAvLyAgIHRoaXMuY21kLl9hbGxvd0VtcHR5ID0gYWxsb3dFbXB0eSAhPT0gZmFsc2U7XG4gIC8vICAgcmV0dXJuIHRoaXM7XG4gIC8vIH1cblxuICBwdWJsaWMgYWxsb3dFbXB0eTxUQWxsb3dFbXB0eSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgIGFsbG93RW1wdHk/OiBUQWxsb3dFbXB0eSxcbiAgKTogZmFsc2UgZXh0ZW5kcyBUQWxsb3dFbXB0eSA/IHRoaXNcbiAgICA6IENvbW1hbmQ8XG4gICAgICBQYXJ0aWFsPFRQYXJlbnRDb21tYW5kR2xvYmFscz4sXG4gICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgUGFydGlhbDxUQ29tbWFuZE9wdGlvbnM+LFxuICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgPiB7XG4gICAgdGhpcy5jbWQuX2FsbG93RW1wdHkgPSBhbGxvd0VtcHR5ICE9PSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcyBhcyBmYWxzZSBleHRlbmRzIFRBbGxvd0VtcHR5ID8gdGhpc1xuICAgICAgOiBDb21tYW5kPFxuICAgICAgICBQYXJ0aWFsPFRQYXJlbnRDb21tYW5kR2xvYmFscz4sXG4gICAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICAgIFBhcnRpYWw8VENvbW1hbmRPcHRpb25zPixcbiAgICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRcbiAgICAgID47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHN0b3AgZWFybHkuIElmIGVuYWJsZWQsIGFsbCBhcmd1bWVudHMgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3Qgbm9uXG4gICAqIG9wdGlvbiBhcmd1bWVudCB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgd2l0aCB0eXBlIHN0cmluZyB0byB0aGUgY29tbWFuZFxuICAgKiBhY3Rpb24gaGFuZGxlci5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICAgICBgY29tbWFuZCAtLWRlYnVnLWxldmVsIHdhcm5pbmcgc2VydmVyIC0tcG9ydCA4MGBcbiAgICpcbiAgICogV2lsbCByZXN1bHQgaW46XG4gICAqICAgICAtIG9wdGlvbnM6IGB7ZGVidWdMZXZlbDogJ3dhcm5pbmcnfWBcbiAgICogICAgIC0gYXJnczogYFsnc2VydmVyJywgJy0tcG9ydCcsICc4MCddYFxuICAgKlxuICAgKiBAcGFyYW0gc3RvcEVhcmx5IEVuYWJsZS9kaXNhYmxlIHN0b3AgZWFybHkuXG4gICAqL1xuICBwdWJsaWMgc3RvcEVhcmx5KHN0b3BFYXJseSA9IHRydWUpOiB0aGlzIHtcbiAgICB0aGlzLmNtZC5fc3RvcEVhcmx5ID0gc3RvcEVhcmx5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgcGFyc2luZyBhcmd1bWVudHMuIElmIGVuYWJsZWQgdGhlIHJhdyBhcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG9cbiAgICogdGhlIGFjdGlvbiBoYW5kbGVyLiBUaGlzIGhhcyBubyBlZmZlY3QgZm9yIHBhcmVudCBvciBjaGlsZCBjb21tYW5kcy4gT25seVxuICAgKiBmb3IgdGhlIGNvbW1hbmQgb24gd2hpY2ggdGhpcyBtZXRob2Qgd2FzIGNhbGxlZC5cbiAgICogQHBhcmFtIHVzZVJhd0FyZ3MgRW5hYmxlL2Rpc2FibGUgcmF3IGFyZ3VtZW50cy5cbiAgICovXG4gIHB1YmxpYyB1c2VSYXdBcmdzKFxuICAgIHVzZVJhd0FyZ3MgPSB0cnVlLFxuICApOiBDb21tYW5kPFxuICAgIHZvaWQsXG4gICAgdm9pZCxcbiAgICB2b2lkLFxuICAgIEFycmF5PHN0cmluZz4sXG4gICAgdm9pZCxcbiAgICB2b2lkLFxuICAgIHZvaWQsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPiB7XG4gICAgdGhpcy5jbWQuX3VzZVJhd0FyZ3MgPSB1c2VSYXdBcmdzO1xuICAgIHJldHVybiB0aGlzIGFzIENvbW1hbmQ8YW55PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBjb21tYW5kLiBUaGUgZGVmYXVsdCBjb21tYW5kIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHByb2dyYW1cbiAgICogd2FzIGNhbGxlZCB3aXRob3V0IGFueSBhcmd1bWVudCBhbmQgaWYgbm8gYWN0aW9uIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZC5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZGVmYXVsdCBjb21tYW5kLlxuICAgKi9cbiAgcHVibGljIGRlZmF1bHQobmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5jbWQuZGVmYXVsdENvbW1hbmQgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdsb2JhbFR5cGU8XG4gICAgVEhhbmRsZXIgZXh0ZW5kcyBUeXBlT3JUeXBlSGFuZGxlcjx1bmtub3duPixcbiAgICBUTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgPihcbiAgICBuYW1lOiBUTmFtZSxcbiAgICBoYW5kbGVyOiBUSGFuZGxlcixcbiAgICBvcHRpb25zPzogT21pdDxUeXBlT3B0aW9ucywgXCJnbG9iYWxcIj4sXG4gICk6IENvbW1hbmQ8XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgVENvbW1hbmRPcHRpb25zLFxuICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICBUQ29tbWFuZFR5cGVzLFxuICAgIE1lcmdlPFRDb21tYW5kR2xvYmFsVHlwZXMsIFR5cGVkVHlwZTxUTmFtZSwgVEhhbmRsZXI+PixcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+IHtcbiAgICByZXR1cm4gdGhpcy50eXBlKG5hbWUsIGhhbmRsZXIsIHsgLi4ub3B0aW9ucywgZ2xvYmFsOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGN1c3RvbSB0eXBlLlxuICAgKiBAcGFyYW0gbmFtZSAgICBUaGUgbmFtZSBvZiB0aGUgdHlwZS5cbiAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGNhbGxiYWNrIG1ldGhvZCB0byBwYXJzZSB0aGUgdHlwZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVHlwZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHR5cGU8XG4gICAgVEhhbmRsZXIgZXh0ZW5kcyBUeXBlT3JUeXBlSGFuZGxlcjx1bmtub3duPixcbiAgICBUTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgPihcbiAgICBuYW1lOiBUTmFtZSxcbiAgICBoYW5kbGVyOiBUSGFuZGxlcixcbiAgICBvcHRpb25zPzogVHlwZU9wdGlvbnMsXG4gICk6IENvbW1hbmQ8XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgVENvbW1hbmRPcHRpb25zLFxuICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICBNZXJnZTxUQ29tbWFuZFR5cGVzLCBUeXBlZFR5cGU8VE5hbWUsIFRIYW5kbGVyPj4sXG4gICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+IHtcbiAgICBpZiAodGhpcy5jbWQudHlwZXMuZ2V0KG5hbWUpICYmICFvcHRpb25zPy5vdmVycmlkZSkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZVR5cGVFcnJvcihuYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmNtZC50eXBlcy5zZXQobmFtZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG5hbWUsXG4gICAgICBoYW5kbGVyOiBoYW5kbGVyIGFzIFR5cGVPclR5cGVIYW5kbGVyPHVua25vd24+LFxuICAgIH0pO1xuXG4gICAgaWYgKFxuICAgICAgaGFuZGxlciBpbnN0YW5jZW9mIFR5cGUgJiZcbiAgICAgICh0eXBlb2YgaGFuZGxlci5jb21wbGV0ZSAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2YgaGFuZGxlci52YWx1ZXMgIT09IFwidW5kZWZpbmVkXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBjb21wbGV0ZUhhbmRsZXI6IENvbXBsZXRlSGFuZGxlciA9IChcbiAgICAgICAgY21kOiBDb21tYW5kLFxuICAgICAgICBwYXJlbnQ/OiBDb21tYW5kLFxuICAgICAgKSA9PiBoYW5kbGVyLmNvbXBsZXRlPy4oY21kLCBwYXJlbnQpIHx8IFtdO1xuICAgICAgdGhpcy5jb21wbGV0ZShuYW1lLCBjb21wbGV0ZUhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzIGFzIENvbW1hbmQ8YW55PjtcbiAgfVxuXG4gIHB1YmxpYyBnbG9iYWxDb21wbGV0ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY29tcGxldGU6IENvbXBsZXRlSGFuZGxlcixcbiAgICBvcHRpb25zPzogT21pdDxDb21wbGV0ZU9wdGlvbnMsIFwiZ2xvYmFsXCI+LFxuICApOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShuYW1lLCBjb21wbGV0ZSwgeyAuLi5vcHRpb25zLCBnbG9iYWw6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY29tbWFuZCBzcGVjaWZpYyBjdXN0b20gdHlwZS5cbiAgICogQHBhcmFtIG5hbWUgICAgICBUaGUgbmFtZSBvZiB0aGUgY29tcGxldGlvbi5cbiAgICogQHBhcmFtIGNvbXBsZXRlICBUaGUgY2FsbGJhY2sgbWV0aG9kIHRvIGNvbXBsZXRlIHRoZSB0eXBlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAgIENvbXBsZXRlIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbXBsZXRlOiBDb21wbGV0ZUhhbmRsZXI8XG4gICAgICBQYXJ0aWFsPFRDb21tYW5kT3B0aW9ucz4sXG4gICAgICBQYXJ0aWFsPFRDb21tYW5kQXJndW1lbnRzPixcbiAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICAgIGFueVxuICAgID4sXG4gICAgb3B0aW9uczogQ29tcGxldGVPcHRpb25zICYgeyBnbG9iYWw6IGJvb2xlYW4gfSxcbiAgKTogdGhpcztcbiAgcHVibGljIGNvbXBsZXRlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb21wbGV0ZTogQ29tcGxldGVIYW5kbGVyPFxuICAgICAgVENvbW1hbmRPcHRpb25zLFxuICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICBUUGFyZW50Q29tbWFuZFxuICAgID4sXG4gICAgb3B0aW9ucz86IENvbXBsZXRlT3B0aW9ucyxcbiAgKTogdGhpcztcblxuICBwdWJsaWMgY29tcGxldGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbXBsZXRlOlxuICAgICAgfCBDb21wbGV0ZUhhbmRsZXI8XG4gICAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFxuICAgICAgPlxuICAgICAgfCBDb21wbGV0ZUhhbmRsZXI8XG4gICAgICAgIFBhcnRpYWw8VENvbW1hbmRPcHRpb25zPixcbiAgICAgICAgUGFydGlhbDxUQ29tbWFuZEFyZ3VtZW50cz4sXG4gICAgICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICBhbnlcbiAgICAgID4sXG4gICAgb3B0aW9ucz86IENvbXBsZXRlT3B0aW9ucyxcbiAgKTogdGhpcyB7XG4gICAgaWYgKHRoaXMuY21kLmNvbXBsZXRpb25zLmhhcyhuYW1lKSAmJiAhb3B0aW9ucz8ub3ZlcnJpZGUpIHtcbiAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVDb21wbGV0aW9uRXJyb3IobmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbWQuY29tcGxldGlvbnMuc2V0KG5hbWUsIHtcbiAgICAgIG5hbWUsXG4gICAgICBjb21wbGV0ZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvdyB2YWxpZGF0aW9uIGVycm9ycyBpbnN0ZWFkIG9mIGNhbGxpbmcgYERlbm8uZXhpdCgpYCB0byBoYW5kbGVcbiAgICogdmFsaWRhdGlvbiBlcnJvcnMgbWFudWFsbHkuXG4gICAqXG4gICAqIEEgdmFsaWRhdGlvbiBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGUgY29tbWFuZCBpcyB3cm9uZ2x5IHVzZWQgYnkgdGhlIHVzZXIuXG4gICAqIEZvciBleGFtcGxlOiBJZiB0aGUgdXNlciBwYXNzZXMgc29tZSBpbnZhbGlkIG9wdGlvbnMgb3IgYXJndW1lbnRzIHRvIHRoZVxuICAgKiBjb21tYW5kLlxuICAgKlxuICAgKiBUaGlzIGhhcyBubyBlZmZlY3QgZm9yIHBhcmVudCBjb21tYW5kcy4gT25seSBmb3IgdGhlIGNvbW1hbmQgb24gd2hpY2ggdGhpc1xuICAgKiBtZXRob2Qgd2FzIGNhbGxlZCBhbmQgYWxsIGNoaWxkIGNvbW1hbmRzLlxuICAgKlxuICAgKiAqKkV4YW1wbGU6KipcbiAgICpcbiAgICogYGBgXG4gICAqIHRyeSB7XG4gICAqICAgY21kLnBhcnNlKCk7XG4gICAqIH0gY2F0Y2goZXJyb3IpIHtcbiAgICogICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICogICAgIGNtZC5zaG93SGVscCgpO1xuICAgKiAgICAgRGVuby5leGl0KDEpO1xuICAgKiAgIH1cbiAgICogICB0aHJvdyBlcnJvcjtcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBWYWxpZGF0aW9uRXJyb3JcbiAgICovXG4gIHB1YmxpYyB0aHJvd0Vycm9ycygpOiB0aGlzIHtcbiAgICB0aGlzLmNtZC50aHJvd09uRXJyb3IgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGVycm9yKGhhbmRsZXI6IEVycm9ySGFuZGxlcik6IHRoaXMge1xuICAgIHRoaXMuY21kLmVycm9ySGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGdldEVycm9ySGFuZGxlcigpOiBFcnJvckhhbmRsZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlciA/PyB0aGlzLl9wYXJlbnQ/LmVycm9ySGFuZGxlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGFzIGAudGhyb3dFcnJvcnMoKWAgYnV0IGFsc28gcHJldmVudHMgY2FsbGluZyBgRGVuby5leGl0YCBhZnRlclxuICAgKiBwcmludGluZyBoZWxwIG9yIHZlcnNpb24gd2l0aCB0aGUgLS1oZWxwIGFuZCAtLXZlcnNpb24gb3B0aW9uLlxuICAgKi9cbiAgcHVibGljIG5vRXhpdCgpOiB0aGlzIHtcbiAgICB0aGlzLmNtZC5fc2hvdWxkRXhpdCA9IGZhbHNlO1xuICAgIHRoaXMudGhyb3dFcnJvcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGluaGVyaXRpbmcgZ2xvYmFsIGNvbW1hbmRzLCBvcHRpb25zIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbVxuICAgKiBwYXJlbnQgY29tbWFuZHMuXG4gICAqL1xuICBwdWJsaWMgbm9HbG9iYWxzKCk6IHRoaXMge1xuICAgIHRoaXMuY21kLl9ub0dsb2JhbHMgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIHRocm93IGVycm9ycyBvciBleGl0LiAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkVGhyb3dFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGhyb3dPbkVycm9yIHx8ICEhdGhpcy5fcGFyZW50Py5zaG91bGRUaHJvd0Vycm9ycygpO1xuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGV4aXQgYWZ0ZXIgcHJpbnRpbmcgaGVscCBvciB2ZXJzaW9uLiAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkRXhpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkRXhpdCA/PyB0aGlzLl9wYXJlbnQ/LnNob3VsZEV4aXQoKSA/PyB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdsb2JhbE9wdGlvbjxcbiAgICBURmxhZ3MgZXh0ZW5kcyBzdHJpbmcsXG4gICAgVEdsb2JhbE9wdGlvbnMgZXh0ZW5kcyBUeXBlZE9wdGlvbjxcbiAgICAgIFRGbGFncyxcbiAgICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICAgIE1lcmdlPFRQYXJlbnRDb21tYW5kVHlwZXMsIE1lcmdlPFRDb21tYW5kR2xvYmFsVHlwZXMsIFRDb21tYW5kVHlwZXM+PixcbiAgICAgIHVuZGVmaW5lZCBleHRlbmRzIFRDb25mbGljdHMgPyBUUmVxdWlyZWQgOiBmYWxzZSxcbiAgICAgIFREZWZhdWx0VmFsdWVcbiAgICA+LFxuICAgIFRNYXBwZWRHbG9iYWxPcHRpb25zIGV4dGVuZHMgTWFwVmFsdWU8XG4gICAgICBUR2xvYmFsT3B0aW9ucyxcbiAgICAgIFRNYXBwZWRWYWx1ZSxcbiAgICAgIFRDb2xsZWN0XG4gICAgPixcbiAgICBUUmVxdWlyZWQgZXh0ZW5kcyBPcHRpb25PcHRpb25zW1wicmVxdWlyZWRcIl0gPSB1bmRlZmluZWQsXG4gICAgVENvbGxlY3QgZXh0ZW5kcyBPcHRpb25PcHRpb25zW1wiY29sbGVjdFwiXSA9IHVuZGVmaW5lZCxcbiAgICBUQ29uZmxpY3RzIGV4dGVuZHMgT3B0aW9uT3B0aW9uc1tcImNvbmZsaWN0c1wiXSA9IHVuZGVmaW5lZCxcbiAgICBURGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkLFxuICAgIFRNYXBwZWRWYWx1ZSA9IHVuZGVmaW5lZCxcbiAgPihcbiAgICBmbGFnczogVEZsYWdzLFxuICAgIGRlc2M6IHN0cmluZyxcbiAgICBvcHRzPzpcbiAgICAgIHwgT21pdDxcbiAgICAgICAgR2xvYmFsT3B0aW9uT3B0aW9uczxcbiAgICAgICAgICBQYXJ0aWFsPFRDb21tYW5kT3B0aW9ucz4sXG4gICAgICAgICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgICAgTWVyZ2VPcHRpb25zPFRGbGFncywgVENvbW1hbmRHbG9iYWxzLCBUR2xvYmFsT3B0aW9ucz4sXG4gICAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgICAgID4sXG4gICAgICAgIFwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICAmIHtcbiAgICAgICAgICBkZWZhdWx0PzogRGVmYXVsdFZhbHVlPFREZWZhdWx0VmFsdWU+O1xuICAgICAgICAgIHJlcXVpcmVkPzogVFJlcXVpcmVkO1xuICAgICAgICAgIGNvbGxlY3Q/OiBUQ29sbGVjdDtcbiAgICAgICAgICB2YWx1ZT86IE9wdGlvblZhbHVlSGFuZGxlcjxcbiAgICAgICAgICAgIE1hcFR5cGVzPFZhbHVlT2Y8VEdsb2JhbE9wdGlvbnM+PixcbiAgICAgICAgICAgIFRNYXBwZWRWYWx1ZVxuICAgICAgICAgID47XG4gICAgICAgIH1cbiAgICAgIHwgT3B0aW9uVmFsdWVIYW5kbGVyPE1hcFR5cGVzPFZhbHVlT2Y8VEdsb2JhbE9wdGlvbnM+PiwgVE1hcHBlZFZhbHVlPixcbiAgKTogQ29tbWFuZDxcbiAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgTWVyZ2VPcHRpb25zPFRGbGFncywgVENvbW1hbmRHbG9iYWxzLCBUTWFwcGVkR2xvYmFsT3B0aW9ucz4sXG4gICAgVENvbW1hbmRUeXBlcyxcbiAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb24oXG4gICAgICAgIGZsYWdzLFxuICAgICAgICBkZXNjLFxuICAgICAgICB7IHZhbHVlOiBvcHRzLCBnbG9iYWw6IHRydWUgfSBhcyBPcHRpb25PcHRpb25zLFxuICAgICAgKSBhcyBDb21tYW5kPGFueT47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbihcbiAgICAgIGZsYWdzLFxuICAgICAgZGVzYyxcbiAgICAgIHsgLi4ub3B0cywgZ2xvYmFsOiB0cnVlIH0gYXMgT3B0aW9uT3B0aW9ucyxcbiAgICApIGFzIENvbW1hbmQ8YW55PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgZ3JvdXBpbmcgb2Ygb3B0aW9ucyBhbmQgc2V0IHRoZSBuYW1lIG9mIHRoZSBncm91cC5cbiAgICogQWxsIG9wdGlvbiB3aGljaCBhcmUgYWRkZWQgYWZ0ZXIgY2FsbGluZyB0aGUgYC5ncm91cCgpYCBtZXRob2Qgd2lsbCBiZVxuICAgKiBncm91cGVkIGluIHRoZSBoZWxwIG91dHB1dC4gSWYgdGhlIGAuZ3JvdXAoKWAgbWV0aG9kIGNhbiBiZSB1c2UgbXVsdGlwbGVcbiAgICogdGltZXMgdG8gY3JlYXRlIG1vcmUgZ3JvdXBzLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3B0aW9uIGdyb3VwLlxuICAgKi9cbiAgcHVibGljIGdyb3VwKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuY21kLl9ncm91cE5hbWUgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBvcHRpb24uXG4gICAqIEBwYXJhbSBmbGFncyBGbGFncyBzdHJpbmcgZS5nOiAtaCwgLS1oZWxwLCAtLW1hbnVhbCA8cmVxdWlyZWRBcmc6c3RyaW5nPiBbb3B0aW9uYWxBcmc6bnVtYmVyXSBbLi4ucmVzdEFyZ3M6c3RyaW5nXVxuICAgKiBAcGFyYW0gZGVzYyBGbGFnIGRlc2NyaXB0aW9uLlxuICAgKiBAcGFyYW0gb3B0cyBGbGFnIG9wdGlvbnMgb3IgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgZmxhZyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvcHRpb248XG4gICAgVEZsYWdzIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRHbG9iYWxPcHRpb25zIGV4dGVuZHMgVHlwZWRPcHRpb248XG4gICAgICBURmxhZ3MsXG4gICAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgICBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBNZXJnZTxUQ29tbWFuZEdsb2JhbFR5cGVzLCBUQ29tbWFuZFR5cGVzPj4sXG4gICAgICB1bmRlZmluZWQgZXh0ZW5kcyBUQ29uZmxpY3RzID8gVFJlcXVpcmVkIDogZmFsc2UsXG4gICAgICBURGVmYXVsdFxuICAgID4sXG4gICAgVE1hcHBlZEdsb2JhbE9wdGlvbnMgZXh0ZW5kcyBNYXBWYWx1ZTxcbiAgICAgIFRHbG9iYWxPcHRpb25zLFxuICAgICAgVE1hcHBlZFZhbHVlLFxuICAgICAgVENvbGxlY3RcbiAgICA+LFxuICAgIFRSZXF1aXJlZCBleHRlbmRzIE9wdGlvbk9wdGlvbnNbXCJyZXF1aXJlZFwiXSA9IHVuZGVmaW5lZCxcbiAgICBUQ29sbGVjdCBleHRlbmRzIE9wdGlvbk9wdGlvbnNbXCJjb2xsZWN0XCJdID0gdW5kZWZpbmVkLFxuICAgIFRDb25mbGljdHMgZXh0ZW5kcyBPcHRpb25PcHRpb25zW1wiY29uZmxpY3RzXCJdID0gdW5kZWZpbmVkLFxuICAgIFREZWZhdWx0ID0gdW5kZWZpbmVkLFxuICAgIFRNYXBwZWRWYWx1ZSA9IHVuZGVmaW5lZCxcbiAgPihcbiAgICBmbGFnczogVEZsYWdzLFxuICAgIGRlc2M6IHN0cmluZyxcbiAgICBvcHRzOlxuICAgICAgfCBPbWl0PFxuICAgICAgICBPcHRpb25PcHRpb25zPFxuICAgICAgICAgIFBhcnRpYWw8VENvbW1hbmRPcHRpb25zPixcbiAgICAgICAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICAgICAgICBNZXJnZU9wdGlvbnM8VEZsYWdzLCBUQ29tbWFuZEdsb2JhbHMsIFRHbG9iYWxPcHRpb25zPixcbiAgICAgICAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgICAgICAgVENvbW1hbmRUeXBlcyxcbiAgICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgICAgICAgVFBhcmVudENvbW1hbmRcbiAgICAgICAgPixcbiAgICAgICAgXCJ2YWx1ZVwiXG4gICAgICA+XG4gICAgICAgICYge1xuICAgICAgICAgIGdsb2JhbDogdHJ1ZTtcbiAgICAgICAgICBkZWZhdWx0PzogRGVmYXVsdFZhbHVlPFREZWZhdWx0PjtcbiAgICAgICAgICByZXF1aXJlZD86IFRSZXF1aXJlZDtcbiAgICAgICAgICBjb2xsZWN0PzogVENvbGxlY3Q7XG4gICAgICAgICAgdmFsdWU/OiBPcHRpb25WYWx1ZUhhbmRsZXI8XG4gICAgICAgICAgICBNYXBUeXBlczxWYWx1ZU9mPFRHbG9iYWxPcHRpb25zPj4sXG4gICAgICAgICAgICBUTWFwcGVkVmFsdWVcbiAgICAgICAgICA+O1xuICAgICAgICB9XG4gICAgICB8IE9wdGlvblZhbHVlSGFuZGxlcjxNYXBUeXBlczxWYWx1ZU9mPFRHbG9iYWxPcHRpb25zPj4sIFRNYXBwZWRWYWx1ZT4sXG4gICk6IENvbW1hbmQ8XG4gICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgIFRQYXJlbnRDb21tYW5kVHlwZXMsXG4gICAgVENvbW1hbmRPcHRpb25zLFxuICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgIE1lcmdlT3B0aW9uczxURmxhZ3MsIFRDb21tYW5kR2xvYmFscywgVE1hcHBlZEdsb2JhbE9wdGlvbnM+LFxuICAgIFRDb21tYW5kVHlwZXMsXG4gICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+O1xuXG4gIHB1YmxpYyBvcHRpb248XG4gICAgVEZsYWdzIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRPcHRpb25zIGV4dGVuZHMgVHlwZWRPcHRpb248XG4gICAgICBURmxhZ3MsXG4gICAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgICBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBNZXJnZTxUQ29tbWFuZEdsb2JhbFR5cGVzLCBUQ29tbWFuZFR5cGVzPj4sXG4gICAgICB1bmRlZmluZWQgZXh0ZW5kcyBUQ29uZmxpY3RzID8gVFJlcXVpcmVkIDogZmFsc2UsXG4gICAgICBURGVmYXVsdFZhbHVlXG4gICAgPixcbiAgICBUTWFwcGVkT3B0aW9ucyBleHRlbmRzIE1hcFZhbHVlPFRPcHRpb25zLCBUTWFwcGVkVmFsdWUsIFRDb2xsZWN0PixcbiAgICBUUmVxdWlyZWQgZXh0ZW5kcyBPcHRpb25PcHRpb25zW1wicmVxdWlyZWRcIl0gPSB1bmRlZmluZWQsXG4gICAgVENvbGxlY3QgZXh0ZW5kcyBPcHRpb25PcHRpb25zW1wiY29sbGVjdFwiXSA9IHVuZGVmaW5lZCxcbiAgICBUQ29uZmxpY3RzIGV4dGVuZHMgT3B0aW9uT3B0aW9uc1tcImNvbmZsaWN0c1wiXSA9IHVuZGVmaW5lZCxcbiAgICBURGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkLFxuICAgIFRNYXBwZWRWYWx1ZSA9IHVuZGVmaW5lZCxcbiAgPihcbiAgICBmbGFnczogVEZsYWdzLFxuICAgIGRlc2M6IHN0cmluZyxcbiAgICBvcHRzPzpcbiAgICAgIHwgT21pdDxcbiAgICAgICAgT3B0aW9uT3B0aW9uczxcbiAgICAgICAgICBNZXJnZU9wdGlvbnM8VEZsYWdzLCBUQ29tbWFuZE9wdGlvbnMsIFRNYXBwZWRPcHRpb25zPixcbiAgICAgICAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICAgICAgICBUQ29tbWFuZEdsb2JhbHMsXG4gICAgICAgICAgVFBhcmVudENvbW1hbmRHbG9iYWxzLFxuICAgICAgICAgIFRDb21tYW5kVHlwZXMsXG4gICAgICAgICAgVENvbW1hbmRHbG9iYWxUeXBlcyxcbiAgICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICAgIFRQYXJlbnRDb21tYW5kXG4gICAgICAgID4sXG4gICAgICAgIFwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICAmIHtcbiAgICAgICAgICBkZWZhdWx0PzogRGVmYXVsdFZhbHVlPFREZWZhdWx0VmFsdWU+O1xuICAgICAgICAgIHJlcXVpcmVkPzogVFJlcXVpcmVkO1xuICAgICAgICAgIGNvbGxlY3Q/OiBUQ29sbGVjdDtcbiAgICAgICAgICBjb25mbGljdHM/OiBUQ29uZmxpY3RzO1xuICAgICAgICAgIHZhbHVlPzogT3B0aW9uVmFsdWVIYW5kbGVyPE1hcFR5cGVzPFZhbHVlT2Y8VE9wdGlvbnM+PiwgVE1hcHBlZFZhbHVlPjtcbiAgICAgICAgfVxuICAgICAgfCBPcHRpb25WYWx1ZUhhbmRsZXI8TWFwVHlwZXM8VmFsdWVPZjxUT3B0aW9ucz4+LCBUTWFwcGVkVmFsdWU+LFxuICApOiBDb21tYW5kPFxuICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgIE1lcmdlT3B0aW9uczxURmxhZ3MsIFRDb21tYW5kT3B0aW9ucywgVE1hcHBlZE9wdGlvbnM+LFxuICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICBUQ29tbWFuZFR5cGVzLFxuICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPjtcblxuICBwdWJsaWMgb3B0aW9uKFxuICAgIGZsYWdzOiBzdHJpbmcsXG4gICAgZGVzYzogc3RyaW5nLFxuICAgIG9wdHM/OiBPcHRpb25PcHRpb25zIHwgT3B0aW9uVmFsdWVIYW5kbGVyLFxuICApOiBDb21tYW5kPGFueT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb24oZmxhZ3MsIGRlc2MsIHsgdmFsdWU6IG9wdHMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gc3BsaXRBcmd1bWVudHMoZmxhZ3MpO1xuXG4gICAgY29uc3QgYXJnczogQXJndW1lbnRbXSA9IHJlc3VsdC50eXBlRGVmaW5pdGlvblxuICAgICAgPyBwYXJzZUFyZ3VtZW50c0RlZmluaXRpb24ocmVzdWx0LnR5cGVEZWZpbml0aW9uKVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IG9wdGlvbjogT3B0aW9uID0ge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogZGVzYyxcbiAgICAgIGFyZ3MsXG4gICAgICBmbGFnczogcmVzdWx0LmZsYWdzLFxuICAgICAgZXF1YWxzU2lnbjogcmVzdWx0LmVxdWFsc1NpZ24sXG4gICAgICB0eXBlRGVmaW5pdGlvbjogcmVzdWx0LnR5cGVEZWZpbml0aW9uLFxuICAgICAgZ3JvdXBOYW1lOiB0aGlzLl9ncm91cE5hbWUsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb24uc2VwYXJhdG9yKSB7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGlmIChhcmcubGlzdCkge1xuICAgICAgICAgIGFyZy5zZXBhcmF0b3IgPSBvcHRpb24uc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIG9wdGlvbi5mbGFncykge1xuICAgICAgY29uc3QgYXJnID0gcGFydC50cmltKCk7XG4gICAgICBjb25zdCBpc0xvbmcgPSAvXi0tLy50ZXN0KGFyZyk7XG4gICAgICBjb25zdCBuYW1lID0gaXNMb25nID8gYXJnLnNsaWNlKDIpIDogYXJnLnNsaWNlKDEpO1xuXG4gICAgICBpZiAodGhpcy5jbWQuZ2V0QmFzZU9wdGlvbihuYW1lLCB0cnVlKSkge1xuICAgICAgICBpZiAob3B0cz8ub3ZlcnJpZGUpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZU9wdGlvbihuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlT3B0aW9uTmFtZUVycm9yKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9uLm5hbWUgJiYgaXNMb25nKSB7XG4gICAgICAgIG9wdGlvbi5uYW1lID0gbmFtZTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbi5hbGlhc2VzKSB7XG4gICAgICAgIG9wdGlvbi5hbGlhc2VzID0gW25hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9uLmFsaWFzZXMucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9uLnByZXBlbmQpIHtcbiAgICAgIHRoaXMuY21kLm9wdGlvbnMudW5zaGlmdChvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNtZC5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGNvbW1hbmQgZXhhbXBsZS5cbiAgICogQHBhcmFtIG5hbWUgICAgICAgICAgTmFtZSBvZiB0aGUgZXhhbXBsZS5cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uICAgVGhlIGNvbnRlbnQgb2YgdGhlIGV4YW1wbGUuXG4gICAqL1xuICBwdWJsaWMgZXhhbXBsZShuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5jbWQuaGFzRXhhbXBsZShuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUV4YW1wbGVFcnJvcihuYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmNtZC5leGFtcGxlcy5wdXNoKHsgbmFtZSwgZGVzY3JpcHRpb24gfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBnbG9iYWxFbnY8XG4gICAgVE5hbWVBbmRWYWx1ZSBleHRlbmRzIHN0cmluZyxcbiAgICBUR2xvYmFsRW52VmFycyBleHRlbmRzIFR5cGVkRW52PFxuICAgICAgVE5hbWVBbmRWYWx1ZSxcbiAgICAgIFRQcmVmaXgsXG4gICAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgICBNZXJnZTxUUGFyZW50Q29tbWFuZFR5cGVzLCBNZXJnZTxUQ29tbWFuZEdsb2JhbFR5cGVzLCBUQ29tbWFuZFR5cGVzPj4sXG4gICAgICBUUmVxdWlyZWRcbiAgICA+LFxuICAgIFRNYXBwZWRHbG9iYWxFbnZWYXJzIGV4dGVuZHMgTWFwVmFsdWU8VEdsb2JhbEVudlZhcnMsIFRNYXBwZWRWYWx1ZT4sXG4gICAgVFJlcXVpcmVkIGV4dGVuZHMgRW52VmFyT3B0aW9uc1tcInJlcXVpcmVkXCJdID0gdW5kZWZpbmVkLFxuICAgIFRQcmVmaXggZXh0ZW5kcyBFbnZWYXJPcHRpb25zW1wicHJlZml4XCJdID0gdW5kZWZpbmVkLFxuICAgIFRNYXBwZWRWYWx1ZSA9IHVuZGVmaW5lZCxcbiAgPihcbiAgICBuYW1lOiBUTmFtZUFuZFZhbHVlLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE9taXQ8R2xvYmFsRW52VmFyT3B0aW9ucywgXCJ2YWx1ZVwiPiAmIHtcbiAgICAgIHJlcXVpcmVkPzogVFJlcXVpcmVkO1xuICAgICAgcHJlZml4PzogVFByZWZpeDtcbiAgICAgIHZhbHVlPzogRW52VmFyVmFsdWVIYW5kbGVyPFxuICAgICAgICBNYXBUeXBlczxWYWx1ZU9mPFRHbG9iYWxFbnZWYXJzPj4sXG4gICAgICAgIFRNYXBwZWRWYWx1ZVxuICAgICAgPjtcbiAgICB9LFxuICApOiBDb21tYW5kPFxuICAgIFRQYXJlbnRDb21tYW5kR2xvYmFscyxcbiAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgIFRDb21tYW5kT3B0aW9ucyxcbiAgICBUQ29tbWFuZEFyZ3VtZW50cyxcbiAgICBNZXJnZTxUQ29tbWFuZEdsb2JhbHMsIFRNYXBwZWRHbG9iYWxFbnZWYXJzPixcbiAgICBUQ29tbWFuZFR5cGVzLFxuICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPiB7XG4gICAgcmV0dXJuIHRoaXMuZW52KFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgeyAuLi5vcHRpb25zLCBnbG9iYWw6IHRydWUgfSBhcyBFbnZWYXJPcHRpb25zLFxuICAgICkgYXMgQ29tbWFuZDxhbnk+O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqIEBwYXJhbSBuYW1lICAgICAgICAgIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gICBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAgICAgICBFbnZpcm9ubWVudCB2YXJpYWJsZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGVudjxcbiAgICBOIGV4dGVuZHMgc3RyaW5nLFxuICAgIEcgZXh0ZW5kcyBUeXBlZEVudjxcbiAgICAgIE4sXG4gICAgICBQLFxuICAgICAgVENvbW1hbmRPcHRpb25zLFxuICAgICAgTWVyZ2U8VFBhcmVudENvbW1hbmRUeXBlcywgTWVyZ2U8VENvbW1hbmRHbG9iYWxUeXBlcywgVENvbW1hbmRUeXBlcz4+LFxuICAgICAgUlxuICAgID4sXG4gICAgTUcgZXh0ZW5kcyBNYXBWYWx1ZTxHLCBWPixcbiAgICBSIGV4dGVuZHMgRW52VmFyT3B0aW9uc1tcInJlcXVpcmVkXCJdID0gdW5kZWZpbmVkLFxuICAgIFAgZXh0ZW5kcyBFbnZWYXJPcHRpb25zW1wicHJlZml4XCJdID0gdW5kZWZpbmVkLFxuICAgIFYgPSB1bmRlZmluZWQsXG4gID4oXG4gICAgbmFtZTogTixcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IE9taXQ8RW52VmFyT3B0aW9ucywgXCJ2YWx1ZVwiPiAmIHtcbiAgICAgIGdsb2JhbDogdHJ1ZTtcbiAgICAgIHJlcXVpcmVkPzogUjtcbiAgICAgIHByZWZpeD86IFA7XG4gICAgICB2YWx1ZT86IEVudlZhclZhbHVlSGFuZGxlcjxNYXBUeXBlczxWYWx1ZU9mPEc+PiwgVj47XG4gICAgfSxcbiAgKTogQ29tbWFuZDxcbiAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICBUQ29tbWFuZE9wdGlvbnMsXG4gICAgVENvbW1hbmRBcmd1bWVudHMsXG4gICAgTWVyZ2U8VENvbW1hbmRHbG9iYWxzLCBNRz4sXG4gICAgVENvbW1hbmRUeXBlcyxcbiAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID47XG5cbiAgcHVibGljIGVudjxcbiAgICBUTmFtZUFuZFZhbHVlIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRFbnZWYXIgZXh0ZW5kcyBUeXBlZEVudjxcbiAgICAgIFROYW1lQW5kVmFsdWUsXG4gICAgICBUUHJlZml4LFxuICAgICAgVENvbW1hbmRPcHRpb25zLFxuICAgICAgTWVyZ2U8VFBhcmVudENvbW1hbmRUeXBlcywgTWVyZ2U8VENvbW1hbmRHbG9iYWxUeXBlcywgVENvbW1hbmRUeXBlcz4+LFxuICAgICAgVFJlcXVpcmVkXG4gICAgPixcbiAgICBUTWFwcGVkRW52VmFyIGV4dGVuZHMgTWFwVmFsdWU8VEVudlZhciwgVE1hcHBlZFZhbHVlPixcbiAgICBUUmVxdWlyZWQgZXh0ZW5kcyBFbnZWYXJPcHRpb25zW1wicmVxdWlyZWRcIl0gPSB1bmRlZmluZWQsXG4gICAgVFByZWZpeCBleHRlbmRzIEVudlZhck9wdGlvbnNbXCJwcmVmaXhcIl0gPSB1bmRlZmluZWQsXG4gICAgVE1hcHBlZFZhbHVlID0gdW5kZWZpbmVkLFxuICA+KFxuICAgIG5hbWU6IFROYW1lQW5kVmFsdWUsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBvcHRpb25zPzogT21pdDxFbnZWYXJPcHRpb25zLCBcInZhbHVlXCI+ICYge1xuICAgICAgcmVxdWlyZWQ/OiBUUmVxdWlyZWQ7XG4gICAgICBwcmVmaXg/OiBUUHJlZml4O1xuICAgICAgdmFsdWU/OiBFbnZWYXJWYWx1ZUhhbmRsZXI8TWFwVHlwZXM8VmFsdWVPZjxURW52VmFyPj4sIFRNYXBwZWRWYWx1ZT47XG4gICAgfSxcbiAgKTogQ29tbWFuZDxcbiAgICBUUGFyZW50Q29tbWFuZEdsb2JhbHMsXG4gICAgVFBhcmVudENvbW1hbmRUeXBlcyxcbiAgICBNZXJnZTxUQ29tbWFuZE9wdGlvbnMsIFRNYXBwZWRFbnZWYXI+LFxuICAgIFRDb21tYW5kQXJndW1lbnRzLFxuICAgIFRDb21tYW5kR2xvYmFscyxcbiAgICBUQ29tbWFuZFR5cGVzLFxuICAgIFRDb21tYW5kR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPjtcblxuICBwdWJsaWMgZW52KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFbnZWYXJPcHRpb25zLFxuICApOiBDb21tYW5kPGFueT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHNwbGl0QXJndW1lbnRzKG5hbWUpO1xuXG4gICAgaWYgKCFyZXN1bHQudHlwZURlZmluaXRpb24pIHtcbiAgICAgIHJlc3VsdC50eXBlRGVmaW5pdGlvbiA9IFwiPHZhbHVlOmJvb2xlYW4+XCI7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5mbGFncy5zb21lKChlbnZOYW1lKSA9PiB0aGlzLmNtZC5nZXRCYXNlRW52VmFyKGVudk5hbWUsIHRydWUpKSkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUVudlZhckVycm9yKG5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGRldGFpbHM6IEFyZ3VtZW50W10gPSBwYXJzZUFyZ3VtZW50c0RlZmluaXRpb24oXG4gICAgICByZXN1bHQudHlwZURlZmluaXRpb24sXG4gICAgKTtcblxuICAgIGlmIChkZXRhaWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBUb29NYW55RW52VmFyVmFsdWVzRXJyb3IobmFtZSk7XG4gICAgfSBlbHNlIGlmIChkZXRhaWxzLmxlbmd0aCAmJiBkZXRhaWxzWzBdLm9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkT3B0aW9uYWxFbnZWYXJWYWx1ZUVycm9yKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoZGV0YWlscy5sZW5ndGggJiYgZGV0YWlsc1swXS52YXJpYWRpYykge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYXJpYWRpY0VudlZhclZhbHVlRXJyb3IobmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbWQuZW52VmFycy5wdXNoKHtcbiAgICAgIG5hbWU6IHJlc3VsdC5mbGFnc1swXSxcbiAgICAgIG5hbWVzOiByZXN1bHQuZmxhZ3MsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHR5cGU6IGRldGFpbHNbMF0udHlwZSxcbiAgICAgIGRldGFpbHM6IGRldGFpbHMuc2hpZnQoKSBhcyBBcmd1bWVudCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKioqKiBNQUlOIEhBTkRMRVIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBleGVjdXRlIG1hdGNoZWQgY29tbWFuZC5cbiAgICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBsaW5lIGFyZ3MgdG8gcGFyc2UuIEV4OiBgY21kLnBhcnNlKCBEZW5vLmFyZ3MgKWBcbiAgICovXG4gIHB1YmxpYyBwYXJzZShcbiAgICBhcmdzOiBzdHJpbmdbXSA9IERlbm8uYXJncyxcbiAgKTogUHJvbWlzZTxcbiAgICBUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiA/IENvbW1hbmRSZXN1bHQ8XG4gICAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICBBcnJheTx1bmtub3duPixcbiAgICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICB1bmRlZmluZWRcbiAgICAgID5cbiAgICAgIDogQ29tbWFuZFJlc3VsdDxcbiAgICAgICAgTWFwVHlwZXM8VENvbW1hbmRPcHRpb25zPixcbiAgICAgICAgTWFwVHlwZXM8VENvbW1hbmRBcmd1bWVudHM+LFxuICAgICAgICBNYXBUeXBlczxUQ29tbWFuZEdsb2JhbHM+LFxuICAgICAgICBNYXBUeXBlczxUUGFyZW50Q29tbWFuZEdsb2JhbHM+LFxuICAgICAgICBUQ29tbWFuZFR5cGVzLFxuICAgICAgICBUQ29tbWFuZEdsb2JhbFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFR5cGVzLFxuICAgICAgICBUUGFyZW50Q29tbWFuZFxuICAgICAgPlxuICA+IHtcbiAgICBjb25zdCBjdHg6IFBhcnNlQ29udGV4dCA9IHtcbiAgICAgIHVua25vd246IGFyZ3Muc2xpY2UoKSxcbiAgICAgIGZsYWdzOiB7fSxcbiAgICAgIGVudjoge30sXG4gICAgICBsaXRlcmFsOiBbXSxcbiAgICAgIHN0b3BFYXJseTogZmFsc2UsXG4gICAgICBzdG9wT25Vbmtub3duOiBmYWxzZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnBhcnNlQ29tbWFuZChjdHgpIGFzIGFueTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGFyc2VDb21tYW5kKGN0eDogUGFyc2VDb250ZXh0KTogUHJvbWlzZTxDb21tYW5kUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJEZWZhdWx0cygpO1xuICAgICAgdGhpcy5yYXdBcmdzID0gY3R4LnVua25vd24uc2xpY2UoKTtcblxuICAgICAgaWYgKHRoaXMuaXNFeGVjdXRhYmxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUV4ZWN1dGFibGUoY3R4LnVua25vd24pO1xuICAgICAgICByZXR1cm4geyBvcHRpb25zOiB7fSwgYXJnczogW10sIGNtZDogdGhpcywgbGl0ZXJhbDogW10gfSBhcyBhbnk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3VzZVJhd0FyZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJzZUVudlZhcnMoY3R4LCB0aGlzLmVudlZhcnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRlKGN0eC5lbnYsIC4uLmN0eC51bmtub3duKSBhcyBhbnk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcmVQYXJzZUdsb2JhbHMgPSBmYWxzZTtcbiAgICAgIGxldCBzdWJDb21tYW5kOiBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIFByZSBwYXJzZSBnbG9iYWxzIHRvIHN1cHBvcnQ6IGNtZCAtLWdsb2JhbC1vcHRpb24gc3ViLWNvbW1hbmQgLS1vcHRpb25cbiAgICAgIGlmIChjdHgudW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIERldGVjdCBzdWIgY29tbWFuZC5cbiAgICAgICAgc3ViQ29tbWFuZCA9IHRoaXMuZ2V0U3ViQ29tbWFuZChjdHgpO1xuXG4gICAgICAgIGlmICghc3ViQ29tbWFuZCkge1xuICAgICAgICAgIC8vIE9ubHkgcHJlIHBhcnNlIGdsb2JhbHMgaWYgZmlyc3QgYXJnIGlzdCBhIGdsb2JhbCBvcHRpb24uXG4gICAgICAgICAgY29uc3Qgb3B0aW9uTmFtZSA9IGN0eC51bmtub3duWzBdLnJlcGxhY2UoL14tKy8sIFwiXCIpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKG9wdGlvbk5hbWUsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbj8uZ2xvYmFsKSB7XG4gICAgICAgICAgICBwcmVQYXJzZUdsb2JhbHMgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wYXJzZUdsb2JhbE9wdGlvbnNBbmRFbnZWYXJzKGN0eCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJDb21tYW5kIHx8IGN0eC51bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3ViQ29tbWFuZCA/Pz0gdGhpcy5nZXRTdWJDb21tYW5kKGN0eCk7XG5cbiAgICAgICAgaWYgKHN1YkNvbW1hbmQpIHtcbiAgICAgICAgICBzdWJDb21tYW5kLl9nbG9iYWxQYXJlbnQgPSB0aGlzO1xuICAgICAgICAgIHJldHVybiBzdWJDb21tYW5kLnBhcnNlQ29tbWFuZChjdHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIHJlc3Qgb3B0aW9ucyAmIGVudiB2YXJzLlxuICAgICAgYXdhaXQgdGhpcy5wYXJzZU9wdGlvbnNBbmRFbnZWYXJzKGN0eCwgcHJlUGFyc2VHbG9iYWxzKTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLmN0eC5lbnYsIC4uLmN0eC5mbGFncyB9O1xuICAgICAgY29uc3QgYXJncyA9IHRoaXMucGFyc2VBcmd1bWVudHMoY3R4LCBvcHRpb25zKTtcbiAgICAgIHRoaXMubGl0ZXJhbEFyZ3MgPSBjdHgubGl0ZXJhbDtcblxuICAgICAgLy8gRXhlY3V0ZSBvcHRpb24gYWN0aW9uLlxuICAgICAgaWYgKGN0eC5hY3Rpb24pIHtcbiAgICAgICAgYXdhaXQgY3R4LmFjdGlvbi5hY3Rpb24uY2FsbCh0aGlzLCBvcHRpb25zLCAuLi5hcmdzKTtcblxuICAgICAgICBpZiAoY3R4LmFjdGlvbi5zdGFuZGFsb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY21kOiB0aGlzLFxuICAgICAgICAgICAgbGl0ZXJhbDogdGhpcy5saXRlcmFsQXJncyxcbiAgICAgICAgICB9IGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlKG9wdGlvbnMsIC4uLmFyZ3MpIGFzIGFueTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJDb21tYW5kKGN0eDogUGFyc2VDb250ZXh0KSB7XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuZ2V0Q29tbWFuZChjdHgudW5rbm93blswXSwgdHJ1ZSk7XG5cbiAgICBpZiAoc3ViQ29tbWFuZCkge1xuICAgICAgY3R4LnVua25vd24uc2hpZnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ViQ29tbWFuZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGFyc2VHbG9iYWxPcHRpb25zQW5kRW52VmFycyhcbiAgICBjdHg6IFBhcnNlQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNIZWxwT3B0aW9uID0gdGhpcy5nZXRIZWxwT3B0aW9uKCk/LmZsYWdzLmluY2x1ZGVzKGN0eC51bmtub3duWzBdKTtcblxuICAgIC8vIFBhcnNlIGdsb2JhbCBlbnYgdmFycy5cbiAgICBjb25zdCBlbnZWYXJzID0gW1xuICAgICAgLi4udGhpcy5lbnZWYXJzLmZpbHRlcigoZW52VmFyKSA9PiBlbnZWYXIuZ2xvYmFsKSxcbiAgICAgIC4uLnRoaXMuZ2V0R2xvYmFsRW52VmFycyh0cnVlKSxcbiAgICBdO1xuXG4gICAgYXdhaXQgdGhpcy5wYXJzZUVudlZhcnMoY3R4LCBlbnZWYXJzLCAhaXNIZWxwT3B0aW9uKTtcblxuICAgIC8vIFBhcnNlIGdsb2JhbCBvcHRpb25zLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICAuLi50aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5nbG9iYWwpLFxuICAgICAgLi4udGhpcy5nZXRHbG9iYWxPcHRpb25zKHRydWUpLFxuICAgIF07XG5cbiAgICB0aGlzLnBhcnNlT3B0aW9ucyhjdHgsIG9wdGlvbnMsIHtcbiAgICAgIHN0b3BFYXJseTogdHJ1ZSxcbiAgICAgIHN0b3BPblVua25vd246IHRydWUsXG4gICAgICBkb3R0ZWQ6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwYXJzZU9wdGlvbnNBbmRFbnZWYXJzKFxuICAgIGN0eDogUGFyc2VDb250ZXh0LFxuICAgIHByZVBhcnNlR2xvYmFsczogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGVscE9wdGlvbiA9IHRoaXMuZ2V0SGVscE9wdGlvbigpO1xuICAgIGNvbnN0IGlzVmVyc2lvbk9wdGlvbiA9IHRoaXMuX3ZlcnNpb25PcHRpb24/LmZsYWdzLmluY2x1ZGVzKGN0eC51bmtub3duWzBdKTtcbiAgICBjb25zdCBpc0hlbHBPcHRpb24gPSBoZWxwT3B0aW9uICYmIGN0eC5mbGFncz8uW2hlbHBPcHRpb24ubmFtZV0gPT09IHRydWU7XG5cbiAgICAvLyBQYXJzZSBlbnYgdmFycy5cbiAgICBjb25zdCBlbnZWYXJzID0gcHJlUGFyc2VHbG9iYWxzXG4gICAgICA/IHRoaXMuZW52VmFycy5maWx0ZXIoKGVudlZhcikgPT4gIWVudlZhci5nbG9iYWwpXG4gICAgICA6IHRoaXMuZ2V0RW52VmFycyh0cnVlKTtcblxuICAgIGF3YWl0IHRoaXMucGFyc2VFbnZWYXJzKFxuICAgICAgY3R4LFxuICAgICAgZW52VmFycyxcbiAgICAgICFpc0hlbHBPcHRpb24gJiYgIWlzVmVyc2lvbk9wdGlvbixcbiAgICApO1xuXG4gICAgLy8gUGFyc2Ugb3B0aW9ucy5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHRydWUpO1xuXG4gICAgdGhpcy5wYXJzZU9wdGlvbnMoY3R4LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBkZWZhdWx0IG9wdGlvbnMgbGlrZSBgLS12ZXJzaW9uYCBhbmQgYC0taGVscGAuICovXG4gIHByaXZhdGUgcmVnaXN0ZXJEZWZhdWx0cygpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5oYXNEZWZhdWx0cyB8fCB0aGlzLmdldFBhcmVudCgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhpcy5oYXNEZWZhdWx0cyA9IHRydWU7XG5cbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAhdGhpcy50eXBlcy5oYXMoXCJzdHJpbmdcIikgJiZcbiAgICAgIHRoaXMudHlwZShcInN0cmluZ1wiLCBuZXcgU3RyaW5nVHlwZSgpLCB7IGdsb2JhbDogdHJ1ZSB9KTtcbiAgICAhdGhpcy50eXBlcy5oYXMoXCJudW1iZXJcIikgJiZcbiAgICAgIHRoaXMudHlwZShcIm51bWJlclwiLCBuZXcgTnVtYmVyVHlwZSgpLCB7IGdsb2JhbDogdHJ1ZSB9KTtcbiAgICAhdGhpcy50eXBlcy5oYXMoXCJpbnRlZ2VyXCIpICYmXG4gICAgICB0aGlzLnR5cGUoXCJpbnRlZ2VyXCIsIG5ldyBJbnRlZ2VyVHlwZSgpLCB7IGdsb2JhbDogdHJ1ZSB9KTtcbiAgICAhdGhpcy50eXBlcy5oYXMoXCJib29sZWFuXCIpICYmXG4gICAgICB0aGlzLnR5cGUoXCJib29sZWFuXCIsIG5ldyBCb29sZWFuVHlwZSgpLCB7IGdsb2JhbDogdHJ1ZSB9KTtcbiAgICAhdGhpcy50eXBlcy5oYXMoXCJmaWxlXCIpICYmXG4gICAgICB0aGlzLnR5cGUoXCJmaWxlXCIsIG5ldyBGaWxlVHlwZSgpLCB7IGdsb2JhbDogdHJ1ZSB9KTtcblxuICAgIGlmICghdGhpcy5faGVscCkge1xuICAgICAgdGhpcy5oZWxwKHtcbiAgICAgICAgaGludHM6IHRydWUsXG4gICAgICAgIHR5cGVzOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92ZXJzaW9uT3B0aW9ucyAhPT0gZmFsc2UgJiYgKHRoaXMuX3ZlcnNpb25PcHRpb25zIHx8IHRoaXMudmVyKSkge1xuICAgICAgdGhpcy5vcHRpb24oXG4gICAgICAgIHRoaXMuX3ZlcnNpb25PcHRpb25zPy5mbGFncyB8fCBcIi1WLCAtLXZlcnNpb25cIixcbiAgICAgICAgdGhpcy5fdmVyc2lvbk9wdGlvbnM/LmRlc2MgfHxcbiAgICAgICAgICBcIlNob3cgdGhlIHZlcnNpb24gbnVtYmVyIGZvciB0aGlzIHByb2dyYW0uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgICAgIHByZXBlbmQ6IHRydWUsXG4gICAgICAgICAgYWN0aW9uOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBsb25nID0gdGhpcy5nZXRSYXdBcmdzKCkuaW5jbHVkZXMoXG4gICAgICAgICAgICAgIGAtLSR7dGhpcy5fdmVyc2lvbk9wdGlvbj8ubmFtZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChsb25nKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWZXJzaW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd0xvbmdWZXJzaW9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNob3dWZXJzaW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4aXQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLih0aGlzLl92ZXJzaW9uT3B0aW9ucz8ub3B0cyA/PyB7fSksXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5fdmVyc2lvbk9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVscE9wdGlvbnMgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9wdGlvbihcbiAgICAgICAgdGhpcy5faGVscE9wdGlvbnM/LmZsYWdzIHx8IFwiLWgsIC0taGVscFwiLFxuICAgICAgICB0aGlzLl9oZWxwT3B0aW9ucz8uZGVzYyB8fCBcIlNob3cgdGhpcyBoZWxwLlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICAgICAgICBnbG9iYWw6IHRydWUsXG4gICAgICAgICAgcHJlcGVuZDogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvbmcgPSB0aGlzLmdldFJhd0FyZ3MoKS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgYC0tJHt0aGlzLmdldEhlbHBPcHRpb24oKT8ubmFtZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWZXJzaW9uKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dIZWxwKHsgbG9uZyB9KTtcbiAgICAgICAgICAgIHRoaXMuZXhpdCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKHRoaXMuX2hlbHBPcHRpb25zPy5vcHRzID8/IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLl9oZWxwT3B0aW9uID0gdGhpcy5vcHRpb25zWzBdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgY29tbWFuZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgQSBtYXAgb2Ygb3B0aW9ucy5cbiAgICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZXhlY3V0ZShcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBBcnJheTx1bmtub3duPlxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5mbikge1xuICAgICAgYXdhaXQgdGhpcy5mbihvcHRpb25zLCAuLi5hcmdzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdENvbW1hbmQpIHtcbiAgICAgIGNvbnN0IGNtZCA9IHRoaXMuZ2V0Q29tbWFuZCh0aGlzLmRlZmF1bHRDb21tYW5kLCB0cnVlKTtcblxuICAgICAgaWYgKCFjbWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERlZmF1bHRDb21tYW5kTm90Rm91bmRFcnJvcihcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb21tYW5kLFxuICAgICAgICAgIHRoaXMuZ2V0Q29tbWFuZHMoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNtZC5fZ2xvYmFsUGFyZW50ID0gdGhpcztcblxuICAgICAgcmV0dXJuIGNtZC5leGVjdXRlKG9wdGlvbnMsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvcHRpb25zLFxuICAgICAgYXJncyxcbiAgICAgIGNtZDogdGhpcyxcbiAgICAgIGxpdGVyYWw6IHRoaXMubGl0ZXJhbEFyZ3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGV4dGVybmFsIHN1Yi1jb21tYW5kLlxuICAgKiBAcGFyYW0gYXJncyBSYXcgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBleGVjdXRlRXhlY3V0YWJsZShhcmdzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmdldFBhdGgoKS5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKTtcblxuICAgIGF3YWl0IERlbm8ucGVybWlzc2lvbnMucmVxdWVzdCh7IG5hbWU6IFwicnVuXCIsIGNvbW1hbmQgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvY2VzczogRGVuby5Qcm9jZXNzID0gRGVuby5ydW4oe1xuICAgICAgICBjbWQ6IFtjb21tYW5kLCAuLi5hcmdzXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhdHVzOiBEZW5vLlByb2Nlc3NTdGF0dXMgPSBhd2FpdCBwcm9jZXNzLnN0YXR1cygpO1xuXG4gICAgICBpZiAoIXN0YXR1cy5zdWNjZXNzKSB7XG4gICAgICAgIERlbm8uZXhpdChzdGF0dXMuY29kZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tYW5kRXhlY3V0YWJsZU5vdEZvdW5kRXJyb3IoY29tbWFuZCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKiogUGFyc2UgcmF3IGNvbW1hbmQgbGluZSBhcmd1bWVudHMuICovXG4gIHByb3RlY3RlZCBwYXJzZU9wdGlvbnMoXG4gICAgY3R4OiBQYXJzZUNvbnRleHQsXG4gICAgb3B0aW9uczogT3B0aW9uW10sXG4gICAge1xuICAgICAgc3RvcEVhcmx5ID0gdGhpcy5fc3RvcEVhcmx5LFxuICAgICAgc3RvcE9uVW5rbm93biA9IGZhbHNlLFxuICAgICAgZG90dGVkID0gdHJ1ZSxcbiAgICB9OiBQYXJzZU9wdGlvbnNPcHRpb25zID0ge30sXG4gICk6IHZvaWQge1xuICAgIHBhcnNlRmxhZ3MoY3R4LCB7XG4gICAgICBzdG9wRWFybHksXG4gICAgICBzdG9wT25Vbmtub3duLFxuICAgICAgZG90dGVkLFxuICAgICAgYWxsb3dFbXB0eTogdGhpcy5fYWxsb3dFbXB0eSxcbiAgICAgIGZsYWdzOiBvcHRpb25zLFxuICAgICAgaWdub3JlRGVmYXVsdHM6IGN0eC5lbnYsXG4gICAgICBwYXJzZTogKHR5cGU6IEFyZ3VtZW50VmFsdWUpID0+IHRoaXMucGFyc2VUeXBlKHR5cGUpLFxuICAgICAgb3B0aW9uOiAob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFjdHguYWN0aW9uICYmIG9wdGlvbi5hY3Rpb24pIHtcbiAgICAgICAgICBjdHguYWN0aW9uID0gb3B0aW9uIGFzIEFjdGlvbk9wdGlvbjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQYXJzZSBhcmd1bWVudCB0eXBlLiAqL1xuICBwcm90ZWN0ZWQgcGFyc2VUeXBlKHR5cGU6IEFyZ3VtZW50VmFsdWUpOiB1bmtub3duIHtcbiAgICBjb25zdCB0eXBlU2V0dGluZ3M6IFR5cGVEZWYgfCB1bmRlZmluZWQgPSB0aGlzLmdldFR5cGUodHlwZS50eXBlKTtcblxuICAgIGlmICghdHlwZVNldHRpbmdzKSB7XG4gICAgICB0aHJvdyBuZXcgVW5rbm93blR5cGVFcnJvcihcbiAgICAgICAgdHlwZS50eXBlLFxuICAgICAgICB0aGlzLmdldFR5cGVzKCkubWFwKCh0eXBlKSA9PiB0eXBlLm5hbWUpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVNldHRpbmdzLmhhbmRsZXIgaW5zdGFuY2VvZiBUeXBlXG4gICAgICA/IHR5cGVTZXR0aW5ncy5oYW5kbGVyLnBhcnNlKHR5cGUpXG4gICAgICA6IHR5cGVTZXR0aW5ncy5oYW5kbGVyKHR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgYW5kIHZhbGlkYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIGN0eCBQYXJzZSBjb250ZXh0LlxuICAgKiBAcGFyYW0gZW52VmFycyBlbnYgdmFycyBkZWZpbmVkIGJ5IHRoZSBjb21tYW5kLlxuICAgKiBAcGFyYW0gdmFsaWRhdGUgd2hlbiB0cnVlLCB0aHJvd3MgYW4gZXJyb3IgaWYgYSByZXF1aXJlZCBlbnYgdmFyIGlzIG1pc3NpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcGFyc2VFbnZWYXJzKFxuICAgIGN0eDogUGFyc2VDb250ZXh0LFxuICAgIGVudlZhcnM6IEFycmF5PEVudlZhcj4sXG4gICAgdmFsaWRhdGUgPSB0cnVlLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudlZhciBvZiBlbnZWYXJzKSB7XG4gICAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmZpbmRFbnZWYXIoZW52VmFyLm5hbWVzKTtcblxuICAgICAgaWYgKGVudikge1xuICAgICAgICBjb25zdCBwYXJzZVR5cGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHlwZSh7XG4gICAgICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudCB2YXJpYWJsZVwiLFxuICAgICAgICAgICAgdHlwZTogZW52VmFyLnR5cGUsXG4gICAgICAgICAgICBuYW1lOiBlbnYubmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHVuZGVyc2NvcmVUb0NhbWVsQ2FzZShcbiAgICAgICAgICBlbnZWYXIucHJlZml4XG4gICAgICAgICAgICA/IGVudlZhci5uYW1lc1swXS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke2VudlZhci5wcmVmaXh9YCksIFwiXCIpXG4gICAgICAgICAgICA6IGVudlZhci5uYW1lc1swXSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZW52VmFyLmRldGFpbHMubGlzdCkge1xuICAgICAgICAgIGN0eC5lbnZbcHJvcGVydHlOYW1lXSA9IGVudi52YWx1ZVxuICAgICAgICAgICAgLnNwbGl0KGVudlZhci5kZXRhaWxzLnNlcGFyYXRvciA/PyBcIixcIilcbiAgICAgICAgICAgIC5tYXAocGFyc2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguZW52W3Byb3BlcnR5TmFtZV0gPSBwYXJzZVR5cGUoZW52LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnZWYXIudmFsdWUgJiYgdHlwZW9mIGN0eC5lbnZbcHJvcGVydHlOYW1lXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGN0eC5lbnZbcHJvcGVydHlOYW1lXSA9IGVudlZhci52YWx1ZShjdHguZW52W3Byb3BlcnR5TmFtZV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudlZhci5yZXF1aXJlZCAmJiB2YWxpZGF0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ1JlcXVpcmVkRW52VmFyRXJyb3IoZW52VmFyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZmluZEVudlZhcihcbiAgICBuYW1lczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgRGVuby5wZXJtaXNzaW9ucy5xdWVyeSh7XG4gICAgICAgIG5hbWU6IFwiZW52XCIsXG4gICAgICAgIHZhcmlhYmxlOiBuYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGF0dXMuc3RhdGUgPT09IFwiZ3JhbnRlZFwiKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gRGVuby5lbnYuZ2V0KG5hbWUpO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7IG5hbWUsIHZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSBjdHggICAgIFBhcnNlIGNvbnRleHQuXG4gICAqIEBwYXJhbSBvcHRpb25zIFBhcnNlZCBjb21tYW5kIGxpbmUgb3B0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCBwYXJzZUFyZ3VtZW50cyhcbiAgICBjdHg6IFBhcnNlQ29udGV4dCxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogVENvbW1hbmRBcmd1bWVudHMge1xuICAgIGNvbnN0IHBhcmFtczogQXJyYXk8dW5rbm93bj4gPSBbXTtcbiAgICBjb25zdCBhcmdzID0gY3R4LnVua25vd24uc2xpY2UoKTtcblxuICAgIGlmICghdGhpcy5oYXNBcmd1bWVudHMoKSkge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbW1hbmRzKHRydWUpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzQ29tbWFuZChhcmdzWzBdLCB0cnVlKSkge1xuICAgICAgICAgICAgLy8gZS5nOiBjb21tYW5kIC0tZ2xvYmFsLWZvbyAtLWZvbyBzdWItY29tbWFuZFxuICAgICAgICAgICAgdGhyb3cgbmV3IFRvb01hbnlBcmd1bWVudHNFcnJvcihhcmdzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVua25vd25Db21tYW5kRXJyb3IoYXJnc1swXSwgdGhpcy5nZXRDb21tYW5kcygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vQXJndW1lbnRzQWxsb3dlZEVycm9yKHRoaXMuZ2V0UGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5nZXRBcmd1bWVudHMoKVxuICAgICAgICAgIC5maWx0ZXIoKGV4cGVjdGVkQXJnKSA9PiAhZXhwZWN0ZWRBcmcub3B0aW9uYWxWYWx1ZSlcbiAgICAgICAgICAubWFwKChleHBlY3RlZEFyZykgPT4gZXhwZWN0ZWRBcmcubmFtZSk7XG5cbiAgICAgICAgaWYgKHJlcXVpcmVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbk5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGhhc1N0YW5kYWxvbmVPcHRpb24gPSAhIW9wdGlvbk5hbWVzLmZpbmQoKG5hbWUpID0+XG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvbihuYW1lLCB0cnVlKT8uc3RhbmRhbG9uZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWhhc1N0YW5kYWxvbmVPcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nQXJndW1lbnRzRXJyb3IocmVxdWlyZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBleHBlY3RlZEFyZyBvZiB0aGlzLmdldEFyZ3VtZW50cygpKSB7XG4gICAgICAgICAgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGV4cGVjdGVkQXJnLm9wdGlvbmFsVmFsdWUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ0FyZ3VtZW50RXJyb3IoZXhwZWN0ZWRBcmcubmFtZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGFyZzogdW5rbm93bjtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlQXJnVmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkQXJnLmxpc3RcbiAgICAgICAgICAgICAgPyB2YWx1ZS5zcGxpdChcIixcIikubWFwKCh2YWx1ZSkgPT4gcGFyc2VBcmdUeXBlKHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBwYXJzZUFyZ1R5cGUodmFsdWUpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBwYXJzZUFyZ1R5cGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUeXBlKHtcbiAgICAgICAgICAgICAgbGFiZWw6IFwiQXJndW1lbnRcIixcbiAgICAgICAgICAgICAgdHlwZTogZXhwZWN0ZWRBcmcudHlwZSxcbiAgICAgICAgICAgICAgbmFtZTogZXhwZWN0ZWRBcmcubmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkQXJnLnZhcmlhZGljKSB7XG4gICAgICAgICAgICBhcmcgPSBhcmdzLnNwbGljZSgwLCBhcmdzLmxlbmd0aCkubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgcGFyc2VBcmdWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFyZyA9IHBhcnNlQXJnVmFsdWUoYXJncy5zaGlmdCgpIGFzIHN0cmluZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkQXJnLnZhcmlhZGljICYmIEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2goLi4uYXJnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb01hbnlBcmd1bWVudHNFcnJvcihhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXMgYXMgVENvbW1hbmRBcmd1bWVudHM7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICAgIHRoaXMudGhyb3coXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEZsYWdzVmFsaWRhdGlvbkVycm9yXG4gICAgICAgID8gbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgICA6IGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBlcnJvclxuICAgICAgICA6IG5ldyBFcnJvcihgW25vbi1lcnJvci10aHJvd25dICR7ZXJyb3J9YCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXJyb3IuIElmIGB0aHJvd0Vycm9yc2AgaXMgZW5hYmxlZCB0aGUgZXJyb3Igd2lsbCBiZSB0aHJvd24sXG4gICAqIG90aGVyd2lzZSBhIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZCBhbmQgYERlbm8uZXhpdCgxKWBcbiAgICogd2lsbCBiZSBjYWxsZWQuIFRoaXMgd2lsbCBhbHNvIHRyaWdnZXIgcmVnaXN0ZXJlZCBlcnJvciBoYW5kbGVycy5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciB0byBoYW5kbGUuXG4gICAqL1xuICBwdWJsaWMgdGhyb3coZXJyb3I6IEVycm9yKTogbmV2ZXIge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgZXJyb3IuY21kID0gdGhpcyBhcyB1bmtub3duIGFzIENvbW1hbmQ7XG4gICAgfVxuICAgIHRoaXMuZ2V0RXJyb3JIYW5kbGVyKCk/LihlcnJvciwgdGhpcyBhcyB1bmtub3duIGFzIENvbW1hbmQpO1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkVGhyb3dFcnJvcnMoKSB8fCAhKGVycm9yIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRoaXMuc2hvd0hlbHAoKTtcblxuICAgIGNvbnNvbGUuZXJyb3IocmVkKGAgICR7Ym9sZChcImVycm9yXCIpfTogJHtlcnJvci5tZXNzYWdlfVxcbmApKTtcblxuICAgIERlbm8uZXhpdChlcnJvciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvciA/IGVycm9yLmV4aXRDb2RlIDogMSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICoqKiogR0VUVEVSICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKiogR2V0IGNvbW1hbmQgbmFtZS4gKi9cbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8qKiBHZXQgcGFyZW50IGNvbW1hbmQuICovXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogVFBhcmVudENvbW1hbmQge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQgYXMgVFBhcmVudENvbW1hbmQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhcmVudCBjb21tYW5kIGZyb20gZ2xvYmFsIGV4ZWN1dGVkIGNvbW1hbmQuXG4gICAqIEJlIHN1cmUsIHRvIGNhbGwgdGhpcyBtZXRob2Qgb25seSBpbnNpZGUgYW4gYWN0aW9uIGhhbmRsZXIuIFVubGVzcyB0aGlzIG9yIGFueSBjaGlsZCBjb21tYW5kIHdhcyBleGVjdXRlZCxcbiAgICogdGhpcyBtZXRob2QgcmV0dXJucyBhbHdheXMgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIGdldEdsb2JhbFBhcmVudCgpOiBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nbG9iYWxQYXJlbnQ7XG4gIH1cblxuICAvKiogR2V0IG1haW4gY29tbWFuZC4gKi9cbiAgcHVibGljIGdldE1haW5Db21tYW5kKCk6IENvbW1hbmQ8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudD8uZ2V0TWFpbkNvbW1hbmQoKSA/PyB0aGlzO1xuICB9XG5cbiAgLyoqIEdldCBjb21tYW5kIG5hbWUgYWxpYXNlcy4gKi9cbiAgcHVibGljIGdldEFsaWFzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmFsaWFzZXM7XG4gIH1cblxuICAvKiogR2V0IGZ1bGwgY29tbWFuZCBwYXRoLiAqL1xuICBwdWJsaWMgZ2V0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRcbiAgICAgID8gdGhpcy5fcGFyZW50LmdldFBhdGgoKSArIFwiIFwiICsgdGhpcy5fbmFtZVxuICAgICAgOiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqIEdldCBhcmd1bWVudHMgZGVmaW5pdGlvbi4gRS5nOiA8aW5wdXQtZmlsZTpzdHJpbmc+IDxvdXRwdXQtZmlsZTpzdHJpbmc+ICovXG4gIHB1YmxpYyBnZXRBcmdzRGVmaW5pdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFyZ3NEZWZpbml0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcmd1bWVudCBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhcmd1bWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXRBcmd1bWVudChuYW1lOiBzdHJpbmcpOiBBcmd1bWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJndW1lbnRzKCkuZmluZCgoYXJnKSA9PiBhcmcubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvKiogR2V0IGFyZ3VtZW50cy4gKi9cbiAgcHVibGljIGdldEFyZ3VtZW50cygpOiBBcmd1bWVudFtdIHtcbiAgICBpZiAoIXRoaXMuYXJncy5sZW5ndGggJiYgdGhpcy5hcmdzRGVmaW5pdGlvbikge1xuICAgICAgdGhpcy5hcmdzID0gcGFyc2VBcmd1bWVudHNEZWZpbml0aW9uKHRoaXMuYXJnc0RlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgY29tbWFuZCBoYXMgYXJndW1lbnRzLiAqL1xuICBwdWJsaWMgaGFzQXJndW1lbnRzKCkge1xuICAgIHJldHVybiAhIXRoaXMuYXJnc0RlZmluaXRpb247XG4gIH1cblxuICAvKiogR2V0IGNvbW1hbmQgdmVyc2lvbi4gKi9cbiAgcHVibGljIGdldFZlcnNpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWZXJzaW9uSGFuZGxlcigpPy5jYWxsKHRoaXMsIHRoaXMpO1xuICB9XG5cbiAgLyoqIEdldCBoZWxwIGhhbmRsZXIgbWV0aG9kLiAqL1xuICBwcml2YXRlIGdldFZlcnNpb25IYW5kbGVyKCk6IFZlcnNpb25IYW5kbGVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy52ZXIgPz8gdGhpcy5fcGFyZW50Py5nZXRWZXJzaW9uSGFuZGxlcigpO1xuICB9XG5cbiAgLyoqIEdldCBjb21tYW5kIGRlc2NyaXB0aW9uLiAqL1xuICBwdWJsaWMgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAvLyBjYWxsIGRlc2NyaXB0aW9uIG1ldGhvZCBvbmx5IG9uY2VcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuZGVzYyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRoaXMuZGVzYyA9IHRoaXMuZGVzYygpXG4gICAgICA6IHRoaXMuZGVzYztcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNhZ2UgPz8gdGhpcy5nZXRBcmdzRGVmaW5pdGlvbigpO1xuICB9XG5cbiAgLyoqIEdldCBzaG9ydCBjb21tYW5kIGRlc2NyaXB0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBkZXNjcmlwdGlvbi4gKi9cbiAgcHVibGljIGdldFNob3J0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGVzY3JpcHRpb24odGhpcy5nZXREZXNjcmlwdGlvbigpLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBHZXQgb3JpZ2luYWwgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gKi9cbiAgcHVibGljIGdldFJhd0FyZ3MoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnJhd0FyZ3M7XG4gIH1cblxuICAvKiogR2V0IGFsbCBhcmd1bWVudHMgZGVmaW5lZCBhZnRlciB0aGUgZG91YmxlIGRhc2guICovXG4gIHB1YmxpYyBnZXRMaXRlcmFsQXJncygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMubGl0ZXJhbEFyZ3M7XG4gIH1cblxuICAvKiogT3V0cHV0IGdlbmVyYXRlZCBoZWxwIHdpdGhvdXQgZXhpdGluZy4gKi9cbiAgcHVibGljIHNob3dWZXJzaW9uKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZ2V0VmVyc2lvbigpKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGNvbW1hbmQgbmFtZSwgdmVyc2lvbiBhbmQgbWV0YSBkYXRhLiAqL1xuICBwdWJsaWMgZ2V0TG9uZ1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Ym9sZCh0aGlzLmdldE1haW5Db21tYW5kKCkuZ2V0TmFtZSgpKX0gJHtcbiAgICAgIGJyaWdodEJsdWUodGhpcy5nZXRWZXJzaW9uKCkgPz8gXCJcIilcbiAgICB9YCArXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmdldE1ldGEoKSkubWFwKFxuICAgICAgICAoW2ssIHZdKSA9PiBgXFxuJHtib2xkKGspfSAke2JyaWdodEJsdWUodil9YCxcbiAgICAgICkuam9pbihcIlwiKTtcbiAgfVxuXG4gIC8qKiBPdXRwdXRzIGNvbW1hbmQgbmFtZSwgdmVyc2lvbiBhbmQgbWV0YSBkYXRhLiAqL1xuICBwdWJsaWMgc2hvd0xvbmdWZXJzaW9uKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZ2V0TG9uZ1ZlcnNpb24oKSk7XG4gIH1cblxuICAvKiogT3V0cHV0IGdlbmVyYXRlZCBoZWxwIHdpdGhvdXQgZXhpdGluZy4gKi9cbiAgcHVibGljIHNob3dIZWxwKG9wdGlvbnM/OiBIZWxwT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZ2V0SGVscChvcHRpb25zKSk7XG4gIH1cblxuICAvKiogR2V0IGdlbmVyYXRlZCBoZWxwLiAqL1xuICBwdWJsaWMgZ2V0SGVscChvcHRpb25zPzogSGVscE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHRoaXMucmVnaXN0ZXJEZWZhdWx0cygpO1xuICAgIHJldHVybiB0aGlzLmdldEhlbHBIYW5kbGVyKCkuY2FsbCh0aGlzLCB0aGlzLCBvcHRpb25zID8/IHt9KTtcbiAgfVxuXG4gIC8qKiBHZXQgaGVscCBoYW5kbGVyIG1ldGhvZC4gKi9cbiAgcHJpdmF0ZSBnZXRIZWxwSGFuZGxlcigpOiBIZWxwSGFuZGxlciB7XG4gICAgcmV0dXJuIHRoaXMuX2hlbHAgPz8gdGhpcy5fcGFyZW50Py5nZXRIZWxwSGFuZGxlcigpIGFzIEhlbHBIYW5kbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBleGl0KGNvZGUgPSAwKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkRXhpdCgpKSB7XG4gICAgICBEZW5vLmV4aXQoY29kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENoZWNrIGlmIG5ldyB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBhbmQgYWRkIGhpbnQgdG8gdmVyc2lvbi4gKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrVmVyc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYWluQ29tbWFuZCA9IHRoaXMuZ2V0TWFpbkNvbW1hbmQoKTtcbiAgICBjb25zdCB1cGdyYWRlQ29tbWFuZCA9IG1haW5Db21tYW5kLmdldENvbW1hbmQoXCJ1cGdyYWRlXCIpO1xuXG4gICAgaWYgKCFpc1VwZ3JhZGVDb21tYW5kKHVwZ3JhZGVDb21tYW5kKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gYXdhaXQgdXBncmFkZUNvbW1hbmQuZ2V0TGF0ZXN0VmVyc2lvbigpO1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbWFpbkNvbW1hbmQuZ2V0VmVyc2lvbigpO1xuXG4gICAgaWYgKGN1cnJlbnRWZXJzaW9uID09PSBsYXRlc3RWZXJzaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25IZWxwVGV4dCA9XG4gICAgICBgKE5ldyB2ZXJzaW9uIGF2YWlsYWJsZTogJHtsYXRlc3RWZXJzaW9ufS4gUnVuICcke21haW5Db21tYW5kLmdldE5hbWUoKX0gdXBncmFkZScgdG8gdXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24hKWA7XG5cbiAgICBtYWluQ29tbWFuZC52ZXJzaW9uKGAke2N1cnJlbnRWZXJzaW9ufSAgJHtib2xkKHllbGxvdyh2ZXJzaW9uSGVscFRleHQpKX1gKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKioqKiBPcHRpb25zIEdFVFRFUiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBoYXMgb3B0aW9ucyBvciBub3QuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBoYXNPcHRpb25zKGhpZGRlbj86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25zKGhpZGRlbikubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3B0aW9ucy5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGdldE9wdGlvbnMoaGlkZGVuPzogYm9vbGVhbik6IE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRHbG9iYWxPcHRpb25zKGhpZGRlbikuY29uY2F0KHRoaXMuZ2V0QmFzZU9wdGlvbnMoaGlkZGVuKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJhc2Ugb3B0aW9ucy5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGdldEJhc2VPcHRpb25zKGhpZGRlbj86IGJvb2xlYW4pOiBPcHRpb25bXSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpZGRlblxuICAgICAgPyB0aGlzLm9wdGlvbnMuc2xpY2UoMClcbiAgICAgIDogdGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0LmhpZGRlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdsb2JhbCBvcHRpb25zLlxuICAgKiBAcGFyYW0gaGlkZGVuIEluY2x1ZGUgaGlkZGVuIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0R2xvYmFsT3B0aW9ucyhoaWRkZW4/OiBib29sZWFuKTogT3B0aW9uW10ge1xuICAgIGNvbnN0IGhlbHBPcHRpb24gPSB0aGlzLmdldEhlbHBPcHRpb24oKTtcbiAgICBjb25zdCBnZXRHbG9iYWxzID0gKFxuICAgICAgY21kOiBDb21tYW5kPGFueT4sXG4gICAgICBub0dsb2JhbHM6IGJvb2xlYW4sXG4gICAgICBvcHRpb25zOiBPcHRpb25bXSA9IFtdLFxuICAgICAgbmFtZXM6IHN0cmluZ1tdID0gW10sXG4gICAgKTogT3B0aW9uW10gPT4ge1xuICAgICAgaWYgKGNtZC5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBjbWQub3B0aW9ucykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9wdGlvbi5nbG9iYWwgJiZcbiAgICAgICAgICAgICF0aGlzLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQubmFtZSA9PT0gb3B0aW9uLm5hbWUpICYmXG4gICAgICAgICAgICBuYW1lcy5pbmRleE9mKG9wdGlvbi5uYW1lKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIChoaWRkZW4gfHwgIW9wdGlvbi5oaWRkZW4pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAobm9HbG9iYWxzICYmIG9wdGlvbiAhPT0gaGVscE9wdGlvbikge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZXMucHVzaChvcHRpb24ubmFtZSk7XG4gICAgICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNtZC5fcGFyZW50XG4gICAgICAgID8gZ2V0R2xvYmFscyhcbiAgICAgICAgICBjbWQuX3BhcmVudCxcbiAgICAgICAgICBub0dsb2JhbHMgfHwgY21kLl9ub0dsb2JhbHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBuYW1lcyxcbiAgICAgICAgKVxuICAgICAgICA6IG9wdGlvbnM7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQgPyBnZXRHbG9iYWxzKHRoaXMuX3BhcmVudCwgdGhpcy5fbm9HbG9iYWxzKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGhhcyBhbiBvcHRpb24gd2l0aCBnaXZlbiBuYW1lIG9yIG5vdC5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgb3B0aW9uLiBNdXN0IGJlIGluIHBhcmFtLWNhc2UuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBoYXNPcHRpb24obmFtZTogc3RyaW5nLCBoaWRkZW4/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb24obmFtZSwgaGlkZGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3B0aW9uIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIG9wdGlvbi4gTXVzdCBiZSBpbiBwYXJhbS1jYXNlLlxuICAgKiBAcGFyYW0gaGlkZGVuIEluY2x1ZGUgaGlkZGVuIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0T3B0aW9uKG5hbWU6IHN0cmluZywgaGlkZGVuPzogYm9vbGVhbik6IE9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZU9wdGlvbihuYW1lLCBoaWRkZW4pID8/XG4gICAgICB0aGlzLmdldEdsb2JhbE9wdGlvbihuYW1lLCBoaWRkZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBiYXNlIG9wdGlvbiBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBvcHRpb24uIE11c3QgYmUgaW4gcGFyYW0tY2FzZS5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGdldEJhc2VPcHRpb24obmFtZTogc3RyaW5nLCBoaWRkZW4/OiBib29sZWFuKTogT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PlxuICAgICAgb3B0aW9uLm5hbWUgPT09IG5hbWUgfHwgb3B0aW9uLmFsaWFzZXM/LmluY2x1ZGVzKG5hbWUpXG4gICAgKTtcblxuICAgIHJldHVybiBvcHRpb24gJiYgKGhpZGRlbiB8fCAhb3B0aW9uLmhpZGRlbikgPyBvcHRpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdsb2JhbCBvcHRpb24gZnJvbSBwYXJlbnQgY29tbWFuZHMgYnkgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgb3B0aW9uLiBNdXN0IGJlIGluIHBhcmFtLWNhc2UuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBnZXRHbG9iYWxPcHRpb24obmFtZTogc3RyaW5nLCBoaWRkZW4/OiBib29sZWFuKTogT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBoZWxwT3B0aW9uID0gdGhpcy5nZXRIZWxwT3B0aW9uKCk7XG4gICAgY29uc3QgZ2V0R2xvYmFsT3B0aW9uID0gKFxuICAgICAgcGFyZW50OiBDb21tYW5kLFxuICAgICAgbm9HbG9iYWxzOiBib29sZWFuLFxuICAgICk6IE9wdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBjb25zdCBvcHRpb246IE9wdGlvbiB8IHVuZGVmaW5lZCA9IHBhcmVudC5nZXRCYXNlT3B0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICBoaWRkZW4sXG4gICAgICApO1xuXG4gICAgICBpZiAoIW9wdGlvbj8uZ2xvYmFsKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQuX3BhcmVudCAmJiBnZXRHbG9iYWxPcHRpb24oXG4gICAgICAgICAgcGFyZW50Ll9wYXJlbnQsXG4gICAgICAgICAgbm9HbG9iYWxzIHx8IHBhcmVudC5fbm9HbG9iYWxzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKG5vR2xvYmFscyAmJiBvcHRpb24gIT09IGhlbHBPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fcGFyZW50ICYmIGdldEdsb2JhbE9wdGlvbihcbiAgICAgIHRoaXMuX3BhcmVudCxcbiAgICAgIHRoaXMuX25vR2xvYmFscyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBvcHRpb24gYnkgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgb3B0aW9uLiBNdXN0IGJlIGluIHBhcmFtLWNhc2UuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlT3B0aW9uKG5hbWU6IHN0cmluZyk6IE9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi5uYW1lID09PSBuYW1lKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwbGljZShpbmRleCwgMSlbMF07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgaGFzIHN1Yi1jb21tYW5kcyBvciBub3QuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gY29tbWFuZHMuXG4gICAqL1xuICBwdWJsaWMgaGFzQ29tbWFuZHMoaGlkZGVuPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbW1hbmRzKGhpZGRlbikubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tbWFuZHMuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gY29tbWFuZHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWFuZHMoaGlkZGVuPzogYm9vbGVhbik6IEFycmF5PENvbW1hbmQ8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLmdldEdsb2JhbENvbW1hbmRzKGhpZGRlbikuY29uY2F0KHRoaXMuZ2V0QmFzZUNvbW1hbmRzKGhpZGRlbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBiYXNlIGNvbW1hbmRzLlxuICAgKiBAcGFyYW0gaGlkZGVuIEluY2x1ZGUgaGlkZGVuIGNvbW1hbmRzLlxuICAgKi9cbiAgcHVibGljIGdldEJhc2VDb21tYW5kcyhoaWRkZW4/OiBib29sZWFuKTogQXJyYXk8Q29tbWFuZDxhbnk+PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBBcnJheS5mcm9tKHRoaXMuY29tbWFuZHMudmFsdWVzKCkpO1xuICAgIHJldHVybiBoaWRkZW4gPyBjb21tYW5kcyA6IGNvbW1hbmRzLmZpbHRlcigoY21kKSA9PiAhY21kLmlzSGlkZGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ2xvYmFsIGNvbW1hbmRzLlxuICAgKiBAcGFyYW0gaGlkZGVuIEluY2x1ZGUgaGlkZGVuIGNvbW1hbmRzLlxuICAgKi9cbiAgcHVibGljIGdldEdsb2JhbENvbW1hbmRzKGhpZGRlbj86IGJvb2xlYW4pOiBBcnJheTxDb21tYW5kPGFueT4+IHtcbiAgICBjb25zdCBnZXRDb21tYW5kcyA9IChcbiAgICAgIGNvbW1hbmQ6IENvbW1hbmQ8YW55PixcbiAgICAgIG5vR2xvYmFsczogYm9vbGVhbixcbiAgICAgIGNvbW1hbmRzOiBBcnJheTxDb21tYW5kPGFueT4+ID0gW10sXG4gICAgICBuYW1lczogc3RyaW5nW10gPSBbXSxcbiAgICApOiBBcnJheTxDb21tYW5kPGFueT4+ID0+IHtcbiAgICAgIGlmIChjb21tYW5kLmNvbW1hbmRzLnNpemUpIHtcbiAgICAgICAgZm9yIChjb25zdCBbXywgY21kXSBvZiBjb21tYW5kLmNvbW1hbmRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY21kLmlzR2xvYmFsICYmXG4gICAgICAgICAgICB0aGlzICE9PSBjbWQgJiZcbiAgICAgICAgICAgICF0aGlzLmNvbW1hbmRzLmhhcyhjbWQuX25hbWUpICYmXG4gICAgICAgICAgICBuYW1lcy5pbmRleE9mKGNtZC5fbmFtZSkgPT09IC0xICYmXG4gICAgICAgICAgICAoaGlkZGVuIHx8ICFjbWQuaXNIaWRkZW4pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAobm9HbG9iYWxzICYmIGNtZD8uZ2V0TmFtZSgpICE9PSBcImhlbHBcIikge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZXMucHVzaChjbWQuX25hbWUpO1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaChjbWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbWFuZC5fcGFyZW50XG4gICAgICAgID8gZ2V0Q29tbWFuZHMoXG4gICAgICAgICAgY29tbWFuZC5fcGFyZW50LFxuICAgICAgICAgIG5vR2xvYmFscyB8fCBjb21tYW5kLl9ub0dsb2JhbHMsXG4gICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgbmFtZXMsXG4gICAgICAgIClcbiAgICAgICAgOiBjb21tYW5kcztcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IGdldENvbW1hbmRzKHRoaXMuX3BhcmVudCwgdGhpcy5fbm9HbG9iYWxzKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgY2hpbGQgY29tbWFuZCBleGlzdHMgYnkgZ2l2ZW4gbmFtZSBvciBhbGlhcy5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvciBhbGlhcyBvZiB0aGUgY29tbWFuZC5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBjb21tYW5kcy5cbiAgICovXG4gIHB1YmxpYyBoYXNDb21tYW5kKG5hbWU6IHN0cmluZywgaGlkZGVuPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Q29tbWFuZChuYW1lLCBoaWRkZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21tYW5kIGJ5IG5hbWUgb3IgYWxpYXMuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb3IgYWxpYXMgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gY29tbWFuZHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWFuZDxUQ29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55Pj4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGhpZGRlbj86IGJvb2xlYW4sXG4gICk6IFRDb21tYW5kIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlQ29tbWFuZChuYW1lLCBoaWRkZW4pID8/XG4gICAgICB0aGlzLmdldEdsb2JhbENvbW1hbmQobmFtZSwgaGlkZGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmFzZSBjb21tYW5kIGJ5IG5hbWUgb3IgYWxpYXMuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb3IgYWxpYXMgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gY29tbWFuZHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0QmFzZUNvbW1hbmQ8VENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPGFueT4+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBoaWRkZW4/OiBib29sZWFuLFxuICApOiBUQ29tbWFuZCB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBjbWQgb2YgdGhpcy5jb21tYW5kcy52YWx1ZXMoKSkge1xuICAgICAgaWYgKGNtZC5fbmFtZSA9PT0gbmFtZSB8fCBjbWQuYWxpYXNlcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICByZXR1cm4gKGNtZCAmJiAoaGlkZGVuIHx8ICFjbWQuaXNIaWRkZW4pID8gY21kIDogdW5kZWZpbmVkKSBhc1xuICAgICAgICAgIHwgVENvbW1hbmRcbiAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdsb2JhbCBjb21tYW5kIGJ5IG5hbWUgb3IgYWxpYXMuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb3IgYWxpYXMgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gY29tbWFuZHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0R2xvYmFsQ29tbWFuZDxUQ29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55Pj4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGhpZGRlbj86IGJvb2xlYW4sXG4gICk6IFRDb21tYW5kIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBnZXRHbG9iYWxDb21tYW5kID0gKFxuICAgICAgcGFyZW50OiBDb21tYW5kLFxuICAgICAgbm9HbG9iYWxzOiBib29sZWFuLFxuICAgICk6IENvbW1hbmQgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgY29uc3QgY21kOiBDb21tYW5kIHwgdW5kZWZpbmVkID0gcGFyZW50LmdldEJhc2VDb21tYW5kKG5hbWUsIGhpZGRlbik7XG5cbiAgICAgIGlmICghY21kPy5pc0dsb2JhbCkge1xuICAgICAgICByZXR1cm4gcGFyZW50Ll9wYXJlbnQgJiZcbiAgICAgICAgICBnZXRHbG9iYWxDb21tYW5kKHBhcmVudC5fcGFyZW50LCBub0dsb2JhbHMgfHwgcGFyZW50Ll9ub0dsb2JhbHMpO1xuICAgICAgfVxuICAgICAgaWYgKG5vR2xvYmFscyAmJiBjbWQuZ2V0TmFtZSgpICE9PSBcImhlbHBcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbWQ7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQgJiZcbiAgICAgIGdldEdsb2JhbENvbW1hbmQodGhpcy5fcGFyZW50LCB0aGlzLl9ub0dsb2JhbHMpIGFzIFRDb21tYW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBzdWItY29tbWFuZCBieSBuYW1lIG9yIGFsaWFzLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9yIGFsaWFzIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNvbW1hbmQobmFtZTogc3RyaW5nKTogQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb21tYW5kID0gdGhpcy5nZXRCYXNlQ29tbWFuZChuYW1lLCB0cnVlKTtcblxuICAgIGlmIChjb21tYW5kKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzLmRlbGV0ZShjb21tYW5kLl9uYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZDtcbiAgfVxuXG4gIC8qKiBHZXQgdHlwZXMuICovXG4gIHB1YmxpYyBnZXRUeXBlcygpOiBBcnJheTxUeXBlRGVmPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0R2xvYmFsVHlwZXMoKS5jb25jYXQodGhpcy5nZXRCYXNlVHlwZXMoKSk7XG4gIH1cblxuICAvKiogR2V0IGJhc2UgdHlwZXMuICovXG4gIHB1YmxpYyBnZXRCYXNlVHlwZXMoKTogQXJyYXk8VHlwZURlZj4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudHlwZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqIEdldCBnbG9iYWwgdHlwZXMuICovXG4gIHB1YmxpYyBnZXRHbG9iYWxUeXBlcygpOiBBcnJheTxUeXBlRGVmPiB7XG4gICAgY29uc3QgZ2V0VHlwZXMgPSAoXG4gICAgICBjbWQ6IENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCxcbiAgICAgIHR5cGVzOiBBcnJheTxUeXBlRGVmPiA9IFtdLFxuICAgICAgbmFtZXM6IEFycmF5PHN0cmluZz4gPSBbXSxcbiAgICApOiBBcnJheTxUeXBlRGVmPiA9PiB7XG4gICAgICBpZiAoY21kKSB7XG4gICAgICAgIGlmIChjbWQudHlwZXMuc2l6ZSkge1xuICAgICAgICAgIGNtZC50eXBlcy5mb3JFYWNoKCh0eXBlOiBUeXBlRGVmKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGUuZ2xvYmFsICYmXG4gICAgICAgICAgICAgICF0aGlzLnR5cGVzLmhhcyh0eXBlLm5hbWUpICYmXG4gICAgICAgICAgICAgIG5hbWVzLmluZGV4T2YodHlwZS5uYW1lKSA9PT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBuYW1lcy5wdXNoKHR5cGUubmFtZSk7XG4gICAgICAgICAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VHlwZXMoY21kLl9wYXJlbnQsIHR5cGVzLCBuYW1lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGdldFR5cGVzKHRoaXMuX3BhcmVudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHR5cGUgYnkgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBnZXRUeXBlKG5hbWU6IHN0cmluZyk6IFR5cGVEZWYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2VUeXBlKG5hbWUpID8/IHRoaXMuZ2V0R2xvYmFsVHlwZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmFzZSB0eXBlIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0QmFzZVR5cGUobmFtZTogc3RyaW5nKTogVHlwZURlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHlwZXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBnbG9iYWwgdHlwZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldEdsb2JhbFR5cGUobmFtZTogc3RyaW5nKTogVHlwZURlZiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbWQ6IFR5cGVEZWYgfCB1bmRlZmluZWQgPSB0aGlzLl9wYXJlbnQuZ2V0QmFzZVR5cGUobmFtZSk7XG5cbiAgICBpZiAoIWNtZD8uZ2xvYmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFyZW50LmdldEdsb2JhbFR5cGUobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNtZDtcbiAgfVxuXG4gIC8qKiBHZXQgY29tcGxldGlvbnMuICovXG4gIHB1YmxpYyBnZXRDb21wbGV0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRHbG9iYWxDb21wbGV0aW9ucygpLmNvbmNhdCh0aGlzLmdldEJhc2VDb21wbGV0aW9ucygpKTtcbiAgfVxuXG4gIC8qKiBHZXQgYmFzZSBjb21wbGV0aW9ucy4gKi9cbiAgcHVibGljIGdldEJhc2VDb21wbGV0aW9ucygpOiBDb21wbGV0aW9uW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29tcGxldGlvbnMudmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqIEdldCBnbG9iYWwgY29tcGxldGlvbnMuICovXG4gIHB1YmxpYyBnZXRHbG9iYWxDb21wbGV0aW9ucygpOiBDb21wbGV0aW9uW10ge1xuICAgIGNvbnN0IGdldENvbXBsZXRpb25zID0gKFxuICAgICAgY21kOiBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQsXG4gICAgICBjb21wbGV0aW9uczogQ29tcGxldGlvbltdID0gW10sXG4gICAgICBuYW1lczogc3RyaW5nW10gPSBbXSxcbiAgICApOiBDb21wbGV0aW9uW10gPT4ge1xuICAgICAgaWYgKGNtZCkge1xuICAgICAgICBpZiAoY21kLmNvbXBsZXRpb25zLnNpemUpIHtcbiAgICAgICAgICBjbWQuY29tcGxldGlvbnMuZm9yRWFjaCgoY29tcGxldGlvbjogQ29tcGxldGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb21wbGV0aW9uLmdsb2JhbCAmJlxuICAgICAgICAgICAgICAhdGhpcy5jb21wbGV0aW9ucy5oYXMoY29tcGxldGlvbi5uYW1lKSAmJlxuICAgICAgICAgICAgICBuYW1lcy5pbmRleE9mKGNvbXBsZXRpb24ubmFtZSkgPT09IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmFtZXMucHVzaChjb21wbGV0aW9uLm5hbWUpO1xuICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbXBsZXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBsZXRpb25zKGNtZC5fcGFyZW50LCBjb21wbGV0aW9ucywgbmFtZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGxldGlvbnM7XG4gICAgfTtcblxuICAgIHJldHVybiBnZXRDb21wbGV0aW9ucyh0aGlzLl9wYXJlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wbGV0aW9uIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGNvbXBsZXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tcGxldGlvbihuYW1lOiBzdHJpbmcpOiBDb21wbGV0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlQ29tcGxldGlvbihuYW1lKSA/PyB0aGlzLmdldEdsb2JhbENvbXBsZXRpb24obmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJhc2UgY29tcGxldGlvbiBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBjb21wbGV0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldEJhc2VDb21wbGV0aW9uKG5hbWU6IHN0cmluZyk6IENvbXBsZXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbXBsZXRpb25zLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ2xvYmFsIGNvbXBsZXRpb25zIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGNvbXBsZXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0R2xvYmFsQ29tcGxldGlvbihuYW1lOiBzdHJpbmcpOiBDb21wbGV0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRpb246IENvbXBsZXRpb24gfCB1bmRlZmluZWQgPSB0aGlzLl9wYXJlbnQuZ2V0QmFzZUNvbXBsZXRpb24oXG4gICAgICBuYW1lLFxuICAgICk7XG5cbiAgICBpZiAoIWNvbXBsZXRpb24/Lmdsb2JhbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudC5nZXRHbG9iYWxDb21wbGV0aW9uKG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wbGV0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGhhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3Igbm90LlxuICAgKiBAcGFyYW0gaGlkZGVuIEluY2x1ZGUgaGlkZGVuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcHVibGljIGhhc0VudlZhcnMoaGlkZGVuPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEVudlZhcnMoaGlkZGVuKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0RW52VmFycyhoaWRkZW4/OiBib29sZWFuKTogRW52VmFyW10ge1xuICAgIHJldHVybiB0aGlzLmdldEdsb2JhbEVudlZhcnMoaGlkZGVuKS5jb25jYXQodGhpcy5nZXRCYXNlRW52VmFycyhoaWRkZW4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmFzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0QmFzZUVudlZhcnMoaGlkZGVuPzogYm9vbGVhbik6IEVudlZhcltdIHtcbiAgICBpZiAoIXRoaXMuZW52VmFycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGlkZGVuXG4gICAgICA/IHRoaXMuZW52VmFycy5zbGljZSgwKVxuICAgICAgOiB0aGlzLmVudlZhcnMuZmlsdGVyKChlbnYpID0+ICFlbnYuaGlkZGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ2xvYmFsIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRHbG9iYWxFbnZWYXJzKGhpZGRlbj86IGJvb2xlYW4pOiBFbnZWYXJbXSB7XG4gICAgaWYgKHRoaXMuX25vR2xvYmFscykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGdldEVudlZhcnMgPSAoXG4gICAgICBjbWQ6IENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCxcbiAgICAgIGVudlZhcnM6IEVudlZhcltdID0gW10sXG4gICAgICBuYW1lczogc3RyaW5nW10gPSBbXSxcbiAgICApOiBFbnZWYXJbXSA9PiB7XG4gICAgICBpZiAoY21kKSB7XG4gICAgICAgIGlmIChjbWQuZW52VmFycy5sZW5ndGgpIHtcbiAgICAgICAgICBjbWQuZW52VmFycy5mb3JFYWNoKChlbnZWYXI6IEVudlZhcikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBlbnZWYXIuZ2xvYmFsICYmXG4gICAgICAgICAgICAgICF0aGlzLmVudlZhcnMuZmluZCgoZW52KSA9PiBlbnYubmFtZXNbMF0gPT09IGVudlZhci5uYW1lc1swXSkgJiZcbiAgICAgICAgICAgICAgbmFtZXMuaW5kZXhPZihlbnZWYXIubmFtZXNbMF0pID09PSAtMSAmJlxuICAgICAgICAgICAgICAoaGlkZGVuIHx8ICFlbnZWYXIuaGlkZGVuKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG5hbWVzLnB1c2goZW52VmFyLm5hbWVzWzBdKTtcbiAgICAgICAgICAgICAgZW52VmFycy5wdXNoKGVudlZhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0RW52VmFycyhjbWQuX3BhcmVudCwgZW52VmFycywgbmFtZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW52VmFycztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGdldEVudlZhcnModGhpcy5fcGFyZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBoYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBnaXZlbiBuYW1lIG9yIG5vdC5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqIEBwYXJhbSBoaWRkZW4gSW5jbHVkZSBoaWRkZW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICBwdWJsaWMgaGFzRW52VmFyKG5hbWU6IHN0cmluZywgaGlkZGVuPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0RW52VmFyKG5hbWUsIGhpZGRlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKiBAcGFyYW0gaGlkZGVuIEluY2x1ZGUgaGlkZGVuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcHVibGljIGdldEVudlZhcihuYW1lOiBzdHJpbmcsIGhpZGRlbj86IGJvb2xlYW4pOiBFbnZWYXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2VFbnZWYXIobmFtZSwgaGlkZGVuKSA/P1xuICAgICAgdGhpcy5nZXRHbG9iYWxFbnZWYXIobmFtZSwgaGlkZGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmFzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRCYXNlRW52VmFyKG5hbWU6IHN0cmluZywgaGlkZGVuPzogYm9vbGVhbik6IEVudlZhciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZW52VmFyOiBFbnZWYXIgfCB1bmRlZmluZWQgPSB0aGlzLmVudlZhcnMuZmluZCgoZW52KSA9PlxuICAgICAgZW52Lm5hbWVzLmluZGV4T2YobmFtZSkgIT09IC0xXG4gICAgKTtcblxuICAgIHJldHVybiBlbnZWYXIgJiYgKGhpZGRlbiB8fCAhZW52VmFyLmhpZGRlbikgPyBlbnZWYXIgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICogQHBhcmFtIGhpZGRlbiBJbmNsdWRlIGhpZGRlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRHbG9iYWxFbnZWYXIobmFtZTogc3RyaW5nLCBoaWRkZW4/OiBib29sZWFuKTogRW52VmFyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCB8fCB0aGlzLl9ub0dsb2JhbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZWYXI6IEVudlZhciB8IHVuZGVmaW5lZCA9IHRoaXMuX3BhcmVudC5nZXRCYXNlRW52VmFyKFxuICAgICAgbmFtZSxcbiAgICAgIGhpZGRlbixcbiAgICApO1xuXG4gICAgaWYgKCFlbnZWYXI/Lmdsb2JhbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudC5nZXRHbG9iYWxFbnZWYXIobmFtZSwgaGlkZGVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW52VmFyO1xuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGhhcyBleGFtcGxlcyBvciBub3QuICovXG4gIHB1YmxpYyBoYXNFeGFtcGxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGFtcGxlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgZXhhbXBsZXMuICovXG4gIHB1YmxpYyBnZXRFeGFtcGxlcygpOiBFeGFtcGxlW10ge1xuICAgIHJldHVybiB0aGlzLmV4YW1wbGVzO1xuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGhhcyBhbiBleGFtcGxlIHdpdGggZ2l2ZW4gbmFtZSBvciBub3QuICovXG4gIHB1YmxpYyBoYXNFeGFtcGxlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0RXhhbXBsZShuYW1lKTtcbiAgfVxuXG4gIC8qKiBHZXQgZXhhbXBsZSB3aXRoIGdpdmVuIG5hbWUuICovXG4gIHB1YmxpYyBnZXRFeGFtcGxlKG5hbWU6IHN0cmluZyk6IEV4YW1wbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmV4YW1wbGVzLmZpbmQoKGV4YW1wbGUpID0+IGV4YW1wbGUubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhlbHBPcHRpb24oKTogT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faGVscE9wdGlvbiA/PyB0aGlzLl9wYXJlbnQ/LmdldEhlbHBPcHRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VwZ3JhZGVDb21tYW5kKGNvbW1hbmQ6IHVua25vd24pOiBjb21tYW5kIGlzIFVwZ3JhZGVDb21tYW5kSW1wbCB7XG4gIHJldHVybiBjb21tYW5kIGluc3RhbmNlb2YgQ29tbWFuZCAmJiBcImdldExhdGVzdFZlcnNpb25cIiBpbiBjb21tYW5kO1xufVxuXG5pbnRlcmZhY2UgVXBncmFkZUNvbW1hbmRJbXBsIHtcbiAgZ2V0TGF0ZXN0VmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz47XG59XG5cbmludGVyZmFjZSBEZWZhdWx0T3B0aW9uIHtcbiAgZmxhZ3M6IHN0cmluZztcbiAgZGVzYz86IHN0cmluZztcbiAgb3B0cz86IE9wdGlvbk9wdGlvbnM7XG59XG5cbnR5cGUgQWN0aW9uT3B0aW9uID0gT3B0aW9uICYgeyBhY3Rpb246IEFjdGlvbkhhbmRsZXIgfTtcblxuaW50ZXJmYWNlIFBhcnNlQ29udGV4dCBleHRlbmRzIFBhcnNlRmxhZ3NDb250ZXh0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGFjdGlvbj86IEFjdGlvbk9wdGlvbjtcbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuaW50ZXJmYWNlIFBhcnNlT3B0aW9uc09wdGlvbnMge1xuICBzdG9wRWFybHk/OiBib29sZWFuO1xuICBzdG9wT25Vbmtub3duPzogYm9vbGVhbjtcbiAgZG90dGVkPzogYm9vbGVhbjtcbn1cblxudHlwZSBUcmltTGVmdDxUVmFsdWUgZXh0ZW5kcyBzdHJpbmcsIFRUcmltVmFsdWUgZXh0ZW5kcyBzdHJpbmcgfCB1bmRlZmluZWQ+ID1cbiAgVFZhbHVlIGV4dGVuZHMgYCR7VFRyaW1WYWx1ZX0ke2luZmVyIFRSZXN0fWAgPyBUUmVzdFxuICAgIDogVFZhbHVlO1xuXG50eXBlIFRyaW1SaWdodDxUVmFsdWUgZXh0ZW5kcyBzdHJpbmcsIFRUcmltVmFsdWUgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgVFZhbHVlIGV4dGVuZHMgYCR7aW5mZXIgVFJlc3R9JHtUVHJpbVZhbHVlfWAgPyBUUmVzdFxuICAgIDogVFZhbHVlO1xuXG50eXBlIExvd2VyPFRWYWx1ZSBleHRlbmRzIHN0cmluZz4gPSBUVmFsdWUgZXh0ZW5kcyBVcHBlcmNhc2U8VFZhbHVlPlxuICA/IExvd2VyY2FzZTxUVmFsdWU+XG4gIDogVW5jYXBpdGFsaXplPFRWYWx1ZT47XG5cbnR5cGUgQ2FtZWxDYXNlPFRWYWx1ZSBleHRlbmRzIHN0cmluZz4gPSBUVmFsdWUgZXh0ZW5kc1xuICBgJHtpbmZlciBUUGFydH1fJHtpbmZlciBUUmVzdH1gXG4gID8gYCR7TG93ZXI8VFBhcnQ+fSR7Q2FwaXRhbGl6ZTxDYW1lbENhc2U8VFJlc3Q+Pn1gXG4gIDogVFZhbHVlIGV4dGVuZHMgYCR7aW5mZXIgVFBhcnR9LSR7aW5mZXIgVFJlc3R9YFxuICAgID8gYCR7TG93ZXI8VFBhcnQ+fSR7Q2FwaXRhbGl6ZTxDYW1lbENhc2U8VFJlc3Q+Pn1gXG4gIDogTG93ZXI8VFZhbHVlPjtcblxudHlwZSBPbmVPZjxUVmFsdWUsIFREZWZhdWx0PiA9IFRWYWx1ZSBleHRlbmRzIHZvaWQgPyBURGVmYXVsdCA6IFRWYWx1ZTtcblxudHlwZSBNZXJnZTxUTGVmdCwgVFJpZ2h0PiA9IFRMZWZ0IGV4dGVuZHMgdm9pZCA/IFRSaWdodFxuICA6IFRSaWdodCBleHRlbmRzIHZvaWQgPyBUTGVmdFxuICA6IFRMZWZ0ICYgVFJpZ2h0O1xuXG4vLyB0eXBlIE1lcmdlPEwsIFI+ID0gTCBleHRlbmRzIHZvaWQgPyBSXG4vLyAgIDogUiBleHRlbmRzIHZvaWQgPyBMXG4vLyAgIDogT21pdDxMLCBrZXlvZiBSPiAmIFI7XG5cbnR5cGUgTWVyZ2VSZWN1cnNpdmU8VExlZnQsIFRSaWdodD4gPSBUTGVmdCBleHRlbmRzIHZvaWQgPyBUUmlnaHRcbiAgOiBUUmlnaHQgZXh0ZW5kcyB2b2lkID8gVExlZnRcbiAgOiBUTGVmdCAmIFRSaWdodDtcblxudHlwZSBPcHRpb25hbE9yUmVxdWlyZWRWYWx1ZTxUVHlwZSBleHRlbmRzIHN0cmluZz4gPVxuICB8IGBbJHtUVHlwZX1dYFxuICB8IGA8JHtUVHlwZX0+YDtcbnR5cGUgUmVzdFZhbHVlID0gYC4uLiR7c3RyaW5nfWAgfCBgJHtzdHJpbmd9Li4uYDtcblxuLyoqXG4gKiBSZXN0IGFyZ3Mgd2l0aCBsaXN0IHR5cGUgYW5kIGNvbXBsZXRpb25zLlxuICpcbiAqIC0gYFsuLi5uYW1lOnR5cGVbXTpjb21wbGV0aW9uXWBcbiAqIC0gYDwuLi5uYW1lOnR5cGVbXTpjb21wbGV0aW9uPmBcbiAqIC0gYFtuYW1lLi4uOnR5cGVbXTpjb21wbGV0aW9uXWBcbiAqIC0gYDxuYW1lLi4uOnR5cGVbXTpjb21wbGV0aW9uPmBcbiAqL1xudHlwZSBSZXN0QXJnc0xpc3RUeXBlQ29tcGxldGlvbjxUVHlwZSBleHRlbmRzIHN0cmluZz4gPSBPcHRpb25hbE9yUmVxdWlyZWRWYWx1ZTxcbiAgYCR7UmVzdFZhbHVlfToke1RUeXBlfVtdOiR7c3RyaW5nfWBcbj47XG5cbi8qKlxuICogUmVzdCBhcmdzIHdpdGggbGlzdCB0eXBlLlxuICpcbiAqIC0gYFsuLi5uYW1lOnR5cGVbXV1gXG4gKiAtIGA8Li4ubmFtZTp0eXBlW10+YFxuICogLSBgW25hbWUuLi46dHlwZVtdXWBcbiAqIC0gYDxuYW1lLi4uOnR5cGVbXT5gXG4gKi9cbnR5cGUgUmVzdEFyZ3NMaXN0VHlwZTxUVHlwZSBleHRlbmRzIHN0cmluZz4gPSBPcHRpb25hbE9yUmVxdWlyZWRWYWx1ZTxcbiAgYCR7UmVzdFZhbHVlfToke1RUeXBlfVtdYFxuPjtcblxuLyoqXG4gKiBSZXN0IGFyZ3Mgd2l0aCB0eXBlIGFuZCBjb21wbGV0aW9ucy5cbiAqXG4gKiAtIGBbLi4ubmFtZTp0eXBlOmNvbXBsZXRpb25dYFxuICogLSBgPC4uLm5hbWU6dHlwZTpjb21wbGV0aW9uPmBcbiAqIC0gYFtuYW1lLi4uOnR5cGU6Y29tcGxldGlvbl1gXG4gKiAtIGA8bmFtZS4uLjp0eXBlOmNvbXBsZXRpb24+YFxuICovXG50eXBlIFJlc3RBcmdzVHlwZUNvbXBsZXRpb248VFR5cGUgZXh0ZW5kcyBzdHJpbmc+ID0gT3B0aW9uYWxPclJlcXVpcmVkVmFsdWU8XG4gIGAke1Jlc3RWYWx1ZX06JHtUVHlwZX06JHtzdHJpbmd9YFxuPjtcblxuLyoqXG4gKiBSZXN0IGFyZ3Mgd2l0aCB0eXBlLlxuICpcbiAqIC0gYFsuLi5uYW1lOnR5cGVdYFxuICogLSBgPC4uLm5hbWU6dHlwZT5gXG4gKiAtIGBbbmFtZS4uLjp0eXBlXWBcbiAqIC0gYDxuYW1lLi4uOnR5cGU+YFxuICovXG50eXBlIFJlc3RBcmdzVHlwZTxUVHlwZSBleHRlbmRzIHN0cmluZz4gPSBPcHRpb25hbE9yUmVxdWlyZWRWYWx1ZTxcbiAgYCR7UmVzdFZhbHVlfToke1RUeXBlfWBcbj47XG5cbi8qKlxuICogUmVzdCBhcmdzLlxuICogLSBgWy4uLm5hbWVdYFxuICogLSBgPC4uLm5hbWU+YFxuICogLSBgW25hbWUuLi5dYFxuICogLSBgPG5hbWUuLi4+YFxuICovXG50eXBlIFJlc3RBcmdzID0gT3B0aW9uYWxPclJlcXVpcmVkVmFsdWU8XG4gIGAke1Jlc3RWYWx1ZX1gXG4+O1xuXG4vKipcbiAqIFNpbmdsZSBhcmcgd2l0aCBsaXN0IHR5cGUgYW5kIGNvbXBsZXRpb25zLlxuICpcbiAqIC0gYFtuYW1lOnR5cGVbXTpjb21wbGV0aW9uXWBcbiAqIC0gYDxuYW1lOnR5cGVbXTpjb21wbGV0aW9uPmBcbiAqL1xudHlwZSBTaW5nbGVBcmdMaXN0VHlwZUNvbXBsZXRpb248VFR5cGUgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgT3B0aW9uYWxPclJlcXVpcmVkVmFsdWU8XG4gICAgYCR7c3RyaW5nfToke1RUeXBlfVtdOiR7c3RyaW5nfWBcbiAgPjtcblxuLyoqXG4gKiBTaW5nbGUgYXJnIHdpdGggbGlzdCB0eXBlLlxuICpcbiAqIC0gYFtuYW1lOnR5cGVbXV1gXG4gKiAtIGA8bmFtZTp0eXBlW10+YFxuICovXG50eXBlIFNpbmdsZUFyZ0xpc3RUeXBlPFRUeXBlIGV4dGVuZHMgc3RyaW5nPiA9IE9wdGlvbmFsT3JSZXF1aXJlZFZhbHVlPFxuICBgJHtzdHJpbmd9OiR7VFR5cGV9W11gXG4+O1xuXG4vKipcbiAqIFNpbmdsZSBhcmcgIHdpdGggdHlwZSBhbmQgY29tcGxldGlvbi5cbiAqXG4gKiAtIGBbbmFtZTp0eXBlOmNvbXBsZXRpb25dYFxuICogLSBgPG5hbWU6dHlwZTpjb21wbGV0aW9uPmBcbiAqL1xudHlwZSBTaW5nbGVBcmdUeXBlQ29tcGxldGlvbjxUVHlwZSBleHRlbmRzIHN0cmluZz4gPSBPcHRpb25hbE9yUmVxdWlyZWRWYWx1ZTxcbiAgYCR7c3RyaW5nfToke1RUeXBlfToke3N0cmluZ31gXG4+O1xuXG4vKipcbiAqIFNpbmdsZSBhcmcgd2l0aCB0eXBlLlxuICpcbiAqIC0gYFtuYW1lOnR5cGVdYFxuICogLSBgPG5hbWU6dHlwZT5gXG4gKi9cbnR5cGUgU2luZ2xlQXJnVHlwZTxUVHlwZSBleHRlbmRzIHN0cmluZz4gPSBPcHRpb25hbE9yUmVxdWlyZWRWYWx1ZTxcbiAgYCR7c3RyaW5nfToke1RUeXBlfWBcbj47XG5cbi8qKlxuICogU2luZ2xlIGFyZy5cbiAqXG4gKiAtIGBbbmFtZV1gXG4gKiAtIGA8bmFtZT5gXG4gKi9cbnR5cGUgU2luZ2xlQXJnID0gT3B0aW9uYWxPclJlcXVpcmVkVmFsdWU8XG4gIGAke3N0cmluZ31gXG4+O1xuXG50eXBlIERlZmF1bHRUeXBlcyA9IHtcbiAgbnVtYmVyOiBOdW1iZXJUeXBlO1xuICBpbnRlZ2VyOiBJbnRlZ2VyVHlwZTtcbiAgc3RyaW5nOiBTdHJpbmdUeXBlO1xuICBib29sZWFuOiBCb29sZWFuVHlwZTtcbiAgZmlsZTogRmlsZVR5cGU7XG59O1xuXG50eXBlIEFyZ3VtZW50VHlwZTxcbiAgVEFyZyBleHRlbmRzIHN0cmluZyxcbiAgVEN1c3RvbVR5cGVzLFxuICBUVHlwZXMgPSBNZXJnZTxEZWZhdWx0VHlwZXMsIFRDdXN0b21UeXBlcz4sXG4+ID0gVEFyZyBleHRlbmRzIFJlc3RBcmdzTGlzdFR5cGVDb21wbGV0aW9uPGluZmVyIFR5cGU+XG4gID8gVFR5cGVzIGV4dGVuZHMgUmVjb3JkPFR5cGUsIGluZmVyIFI+ID8gQXJyYXk8QXJyYXk8Uj4+IDogdW5rbm93blxuICA6IFRBcmcgZXh0ZW5kcyBSZXN0QXJnc0xpc3RUeXBlPGluZmVyIFR5cGU+XG4gICAgPyBUVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8VHlwZSwgaW5mZXIgUj4gPyBBcnJheTxBcnJheTxSPj4gOiB1bmtub3duXG4gIDogVEFyZyBleHRlbmRzIFJlc3RBcmdzVHlwZUNvbXBsZXRpb248aW5mZXIgVHlwZT5cbiAgICA/IFRUeXBlcyBleHRlbmRzIFJlY29yZDxUeXBlLCBpbmZlciBSPiA/IEFycmF5PFI+IDogdW5rbm93blxuICA6IFRBcmcgZXh0ZW5kcyBSZXN0QXJnc1R5cGU8aW5mZXIgVHlwZT5cbiAgICA/IFRUeXBlcyBleHRlbmRzIFJlY29yZDxUeXBlLCBpbmZlciBSPiA/IEFycmF5PFI+IDogdW5rbm93blxuICA6IFRBcmcgZXh0ZW5kcyBSZXN0QXJncyA/IEFycmF5PHN0cmluZz5cbiAgOiBUQXJnIGV4dGVuZHMgU2luZ2xlQXJnTGlzdFR5cGVDb21wbGV0aW9uPGluZmVyIFR5cGU+XG4gICAgPyBUVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8VHlwZSwgaW5mZXIgUj4gPyBBcnJheTxSPiA6IHVua25vd25cbiAgOiBUQXJnIGV4dGVuZHMgU2luZ2xlQXJnTGlzdFR5cGU8aW5mZXIgVHlwZT5cbiAgICA/IFRUeXBlcyBleHRlbmRzIFJlY29yZDxUeXBlLCBpbmZlciBSPiA/IEFycmF5PFI+IDogdW5rbm93blxuICA6IFRBcmcgZXh0ZW5kcyBTaW5nbGVBcmdUeXBlQ29tcGxldGlvbjxpbmZlciBUeXBlPlxuICAgID8gVFR5cGVzIGV4dGVuZHMgUmVjb3JkPFR5cGUsIGluZmVyIFI+ID8gUiA6IHVua25vd25cbiAgOiBUQXJnIGV4dGVuZHMgU2luZ2xlQXJnVHlwZTxpbmZlciBUeXBlPlxuICAgID8gVFR5cGVzIGV4dGVuZHMgUmVjb3JkPFR5cGUsIGluZmVyIFI+ID8gUiA6IHVua25vd25cbiAgOiBUQXJnIGV4dGVuZHMgU2luZ2xlQXJnID8gc3RyaW5nXG4gIDogdW5rbm93bjtcblxudHlwZSBBcmd1bWVudFR5cGVzPFRGbGFncyBleHRlbmRzIHN0cmluZywgVD4gPSBURmxhZ3MgZXh0ZW5kc1xuICBgJHtzdHJpbmd9ICR7c3RyaW5nfWAgPyBUeXBlZEFyZ3VtZW50czxURmxhZ3MsIFQ+XG4gIDogQXJndW1lbnRUeXBlPFRGbGFncywgVD47XG5cbnR5cGUgR2V0QXJndW1lbnRzPFRGbGFncyBleHRlbmRzIHN0cmluZz4gPSBURmxhZ3MgZXh0ZW5kc1xuICBgLSR7c3RyaW5nfT0ke2luZmVyIFJlc3RGbGFnc31gID8gR2V0QXJndW1lbnRzPFJlc3RGbGFncz5cbiAgOiBURmxhZ3MgZXh0ZW5kcyBgLSR7c3RyaW5nfSAke2luZmVyIFJlc3RGbGFnc31gID8gR2V0QXJndW1lbnRzPFJlc3RGbGFncz5cbiAgOiBURmxhZ3M7XG5cbnR5cGUgT3B0aW9uTmFtZTxOYW1lIGV4dGVuZHMgc3RyaW5nPiA9IE5hbWUgZXh0ZW5kcyBcIipcIiA/IHN0cmluZ1xuICA6IENhbWVsQ2FzZTxUcmltUmlnaHQ8TmFtZSwgXCIsXCI+PjtcblxudHlwZSBJc1JlcXVpcmVkPFRSZXF1aXJlZCBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQsIFREZWZhdWx0PiA9XG4gIFRSZXF1aXJlZCBleHRlbmRzIHRydWUgPyB0cnVlXG4gICAgOiBURGVmYXVsdCBleHRlbmRzIHVuZGVmaW5lZCA/IGZhbHNlXG4gICAgOiB0cnVlO1xuXG50eXBlIE5lZ2F0YWJsZU9wdGlvbjxcbiAgVE5hbWUgZXh0ZW5kcyBzdHJpbmcsXG4gIFRPcHRpb25zLFxuICBURGVmYXVsdCxcbj4gPSBURGVmYXVsdCBleHRlbmRzIHVuZGVmaW5lZFxuICA/IE9wdGlvbk5hbWU8VE5hbWU+IGV4dGVuZHMga2V5b2YgVE9wdGlvbnNcbiAgICA/IHsgW0tleSBpbiBPcHRpb25OYW1lPFROYW1lPl0/OiBmYWxzZSB9XG4gIDogeyBbS2V5IGluIE9wdGlvbk5hbWU8VE5hbWU+XTogYm9vbGVhbiB9XG4gIDogeyBbS2V5IGluIE9wdGlvbk5hbWU8VE5hbWU+XTogTm9uTnVsbGFibGU8VERlZmF1bHQ+IHwgZmFsc2UgfTtcblxudHlwZSBCb29sZWFuT3B0aW9uPFxuICBUTmFtZSBleHRlbmRzIHN0cmluZyxcbiAgVE9wdGlvbnMsXG4gIFRSZXF1aXJlZCBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIFREZWZhdWx0ID0gdW5kZWZpbmVkLFxuPiA9IFROYW1lIGV4dGVuZHMgYG5vLSR7aW5mZXIgTmFtZX1gID8gTmVnYXRhYmxlT3B0aW9uPE5hbWUsIFRPcHRpb25zLCBURGVmYXVsdD5cbiAgOiBUTmFtZSBleHRlbmRzIGAke2luZmVyIE5hbWV9LiR7aW5mZXIgUmVzdH1gID8gKFRSZXF1aXJlZCBleHRlbmRzIHRydWUgPyB7XG4gICAgICAgIFtLZXkgaW4gT3B0aW9uTmFtZTxOYW1lPl06IEJvb2xlYW5PcHRpb248XG4gICAgICAgICAgUmVzdCxcbiAgICAgICAgICBUT3B0aW9ucyxcbiAgICAgICAgICBUUmVxdWlyZWQsXG4gICAgICAgICAgVERlZmF1bHRcbiAgICAgICAgPjtcbiAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICBbS2V5IGluIE9wdGlvbk5hbWU8TmFtZT5dPzogQm9vbGVhbk9wdGlvbjxcbiAgICAgICAgICBSZXN0LFxuICAgICAgICAgIFRPcHRpb25zLFxuICAgICAgICAgIFRSZXF1aXJlZCxcbiAgICAgICAgICBURGVmYXVsdFxuICAgICAgICA+O1xuICAgICAgfSlcbiAgOiAoVFJlcXVpcmVkIGV4dGVuZHMgdHJ1ZSA/IHsgW0tleSBpbiBPcHRpb25OYW1lPFROYW1lPl06IHRydWUgfCBURGVmYXVsdCB9XG4gICAgOiB7IFtLZXkgaW4gT3B0aW9uTmFtZTxUTmFtZT5dPzogdHJ1ZSB8IFREZWZhdWx0IH0pO1xuXG50eXBlIFZhbHVlT3B0aW9uPFxuICBUTmFtZSBleHRlbmRzIHN0cmluZyxcbiAgVFJlc3RGbGFncyBleHRlbmRzIHN0cmluZyxcbiAgVFR5cGVzLFxuICBUUmVxdWlyZWQgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBURGVmYXVsdCA9IHVuZGVmaW5lZCxcbj4gPSBUTmFtZSBleHRlbmRzIGAke2luZmVyIE5hbWV9LiR7aW5mZXIgUmVzdE5hbWV9YFxuICA/IChUUmVxdWlyZWQgZXh0ZW5kcyB0cnVlID8ge1xuICAgICAgW0tleSBpbiBPcHRpb25OYW1lPE5hbWU+XTogVmFsdWVPcHRpb248XG4gICAgICAgIFJlc3ROYW1lLFxuICAgICAgICBUUmVzdEZsYWdzLFxuICAgICAgICBUVHlwZXMsXG4gICAgICAgIFRSZXF1aXJlZCxcbiAgICAgICAgVERlZmF1bHRcbiAgICAgID47XG4gICAgfVxuICAgIDoge1xuICAgICAgW0tleSBpbiBPcHRpb25OYW1lPE5hbWU+XT86IFZhbHVlT3B0aW9uPFxuICAgICAgICBSZXN0TmFtZSxcbiAgICAgICAgVFJlc3RGbGFncyxcbiAgICAgICAgVFR5cGVzLFxuICAgICAgICBUUmVxdWlyZWQsXG4gICAgICAgIFREZWZhdWx0XG4gICAgICA+O1xuICAgIH0pXG4gIDogKFRSZXF1aXJlZCBleHRlbmRzIHRydWUgPyB7XG4gICAgICBbS2V5IGluIE9wdGlvbk5hbWU8VE5hbWU+XTogR2V0QXJndW1lbnRzPFRSZXN0RmxhZ3M+IGV4dGVuZHMgYFske3N0cmluZ31dYFxuICAgICAgICA/IFxuICAgICAgICAgIHwgTm9uTnVsbGFibGU8VERlZmF1bHQ+XG4gICAgICAgICAgfCB0cnVlXG4gICAgICAgICAgfCBBcmd1bWVudFR5cGU8R2V0QXJndW1lbnRzPFRSZXN0RmxhZ3M+LCBUVHlwZXM+XG4gICAgICAgIDogXG4gICAgICAgICAgfCBOb25OdWxsYWJsZTxURGVmYXVsdD5cbiAgICAgICAgICB8IEFyZ3VtZW50VHlwZTxHZXRBcmd1bWVudHM8VFJlc3RGbGFncz4sIFRUeXBlcz47XG4gICAgfVxuICAgIDoge1xuICAgICAgW0tleSBpbiBPcHRpb25OYW1lPFROYW1lPl0/OiBHZXRBcmd1bWVudHM8VFJlc3RGbGFncz4gZXh0ZW5kc1xuICAgICAgICBgWyR7c3RyaW5nfV1gID8gXG4gICAgICAgICAgfCBOb25OdWxsYWJsZTxURGVmYXVsdD5cbiAgICAgICAgICB8IHRydWVcbiAgICAgICAgICB8IEFyZ3VtZW50VHlwZTxHZXRBcmd1bWVudHM8VFJlc3RGbGFncz4sIFRUeXBlcz5cbiAgICAgICAgOiBcbiAgICAgICAgICB8IE5vbk51bGxhYmxlPFREZWZhdWx0PlxuICAgICAgICAgIHwgQXJndW1lbnRUeXBlPEdldEFyZ3VtZW50czxUUmVzdEZsYWdzPiwgVFR5cGVzPjtcbiAgICB9KTtcblxudHlwZSBWYWx1ZXNPcHRpb248XG4gIFROYW1lIGV4dGVuZHMgc3RyaW5nLFxuICBUUmVzdEZsYWdzIGV4dGVuZHMgc3RyaW5nLFxuICBUVHlwZXMsXG4gIFRSZXF1aXJlZCBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIFREZWZhdWx0ID0gdW5kZWZpbmVkLFxuPiA9IFROYW1lIGV4dGVuZHMgYCR7aW5mZXIgTmFtZX0uJHtpbmZlciBSZXN0TmFtZX1gXG4gID8gKFRSZXF1aXJlZCBleHRlbmRzIHRydWUgPyB7XG4gICAgICBbS2V5IGluIE9wdGlvbk5hbWU8TmFtZT5dOiBWYWx1ZXNPcHRpb248XG4gICAgICAgIFJlc3ROYW1lLFxuICAgICAgICBUUmVzdEZsYWdzLFxuICAgICAgICBUVHlwZXMsXG4gICAgICAgIFRSZXF1aXJlZCxcbiAgICAgICAgVERlZmF1bHRcbiAgICAgID47XG4gICAgfVxuICAgIDoge1xuICAgICAgW0tleSBpbiBPcHRpb25OYW1lPE5hbWU+XT86IFZhbHVlc09wdGlvbjxcbiAgICAgICAgUmVzdE5hbWUsXG4gICAgICAgIFRSZXN0RmxhZ3MsXG4gICAgICAgIFRUeXBlcyxcbiAgICAgICAgVFJlcXVpcmVkLFxuICAgICAgICBURGVmYXVsdFxuICAgICAgPjtcbiAgICB9KVxuICA6IChUUmVxdWlyZWQgZXh0ZW5kcyB0cnVlID8ge1xuICAgICAgW0tleSBpbiBPcHRpb25OYW1lPFROYW1lPl06IEdldEFyZ3VtZW50czxUUmVzdEZsYWdzPiBleHRlbmRzIGBbJHtzdHJpbmd9XWBcbiAgICAgICAgPyBcbiAgICAgICAgICB8IE5vbk51bGxhYmxlPFREZWZhdWx0PlxuICAgICAgICAgIHwgdHJ1ZVxuICAgICAgICAgIHwgQXJndW1lbnRUeXBlczxHZXRBcmd1bWVudHM8VFJlc3RGbGFncz4sIFRUeXBlcz5cbiAgICAgICAgOiBcbiAgICAgICAgICB8IE5vbk51bGxhYmxlPFREZWZhdWx0PlxuICAgICAgICAgIHwgQXJndW1lbnRUeXBlczxHZXRBcmd1bWVudHM8VFJlc3RGbGFncz4sIFRUeXBlcz47XG4gICAgfVxuICAgIDoge1xuICAgICAgW0tleSBpbiBPcHRpb25OYW1lPFROYW1lPl0/OiBHZXRBcmd1bWVudHM8VFJlc3RGbGFncz4gZXh0ZW5kc1xuICAgICAgICBgWyR7c3RyaW5nfV1gID8gXG4gICAgICAgICAgfCBOb25OdWxsYWJsZTxURGVmYXVsdD5cbiAgICAgICAgICB8IHRydWVcbiAgICAgICAgICB8IEFyZ3VtZW50VHlwZXM8R2V0QXJndW1lbnRzPFRSZXN0RmxhZ3M+LCBUVHlwZXM+XG4gICAgICAgIDogXG4gICAgICAgICAgfCBOb25OdWxsYWJsZTxURGVmYXVsdD5cbiAgICAgICAgICB8IEFyZ3VtZW50VHlwZXM8R2V0QXJndW1lbnRzPFRSZXN0RmxhZ3M+LCBUVHlwZXM+O1xuICAgIH0pO1xuXG50eXBlIE1hcFZhbHVlPFRPcHRpb25zLCBUTWFwcGVkT3B0aW9ucywgVENvbGxlY3QgPSB1bmRlZmluZWQ+ID1cbiAgVE1hcHBlZE9wdGlvbnMgZXh0ZW5kcyB1bmRlZmluZWQgPyBUQ29sbGVjdCBleHRlbmRzIHRydWUgPyB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgVE9wdGlvbnNdOiBUT3B0aW9uc1tLZXldIGV4dGVuZHNcbiAgICAgICAgICAoUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpXG4gICAgICAgICAgPyBNYXBWYWx1ZTxUT3B0aW9uc1tLZXldLCBUTWFwcGVkT3B0aW9ucz5cbiAgICAgICAgICA6IEFycmF5PE5vbk51bGxhYmxlPFRPcHRpb25zW0tleV0+PjtcbiAgICAgIH1cbiAgICA6IFRPcHRpb25zXG4gICAgOiB7XG4gICAgICBbS2V5IGluIGtleW9mIFRPcHRpb25zXTogVE9wdGlvbnNbS2V5XSBleHRlbmRzXG4gICAgICAgIChSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZClcbiAgICAgICAgPyBNYXBWYWx1ZTxUT3B0aW9uc1tLZXldLCBUTWFwcGVkT3B0aW9ucz5cbiAgICAgICAgOiBUTWFwcGVkT3B0aW9ucztcbiAgICB9O1xuXG50eXBlIEdldE9wdGlvbk5hbWU8VEZsYWdzPiA9IFRGbGFncyBleHRlbmRzIGAke3N0cmluZ30tLSR7aW5mZXIgTmFtZX09JHtzdHJpbmd9YFxuICA/IFRyaW1SaWdodDxOYW1lLCBcIixcIj5cbiAgOiBURmxhZ3MgZXh0ZW5kcyBgJHtzdHJpbmd9LS0ke2luZmVyIE5hbWV9ICR7c3RyaW5nfWAgPyBUcmltUmlnaHQ8TmFtZSwgXCIsXCI+XG4gIDogVEZsYWdzIGV4dGVuZHMgYCR7c3RyaW5nfS0tJHtpbmZlciBOYW1lfWAgPyBOYW1lXG4gIDogVEZsYWdzIGV4dGVuZHMgYC0ke2luZmVyIE5hbWV9PSR7c3RyaW5nfWAgPyBUcmltUmlnaHQ8TmFtZSwgXCIsXCI+XG4gIDogVEZsYWdzIGV4dGVuZHMgYC0ke2luZmVyIE5hbWV9ICR7c3RyaW5nfWAgPyBUcmltUmlnaHQ8TmFtZSwgXCIsXCI+XG4gIDogVEZsYWdzIGV4dGVuZHMgYC0ke2luZmVyIE5hbWV9YCA/IE5hbWVcbiAgOiB1bmtub3duO1xuXG50eXBlIE1lcmdlT3B0aW9uczxcbiAgVEZsYWdzLFxuICBUT3B0aW9ucyxcbiAgVE1hcHBlZE9wdGlvbnMsXG4gIFROYW1lID0gR2V0T3B0aW9uTmFtZTxURmxhZ3M+LFxuPiA9IFROYW1lIGV4dGVuZHMgYG5vLSR7c3RyaW5nfWAgPyBTcHJlYWQ8VE9wdGlvbnMsIFRNYXBwZWRPcHRpb25zPlxuICA6IFROYW1lIGV4dGVuZHMgYCR7c3RyaW5nfS4ke3N0cmluZ31gXG4gICAgPyBNZXJnZVJlY3Vyc2l2ZTxUT3B0aW9ucywgVE1hcHBlZE9wdGlvbnM+XG4gIDogTWVyZ2U8VE9wdGlvbnMsIFRNYXBwZWRPcHRpb25zPjtcblxuLy8gdHlwZSBNZXJnZU9wdGlvbnM8VCwgQ08sIE8sIE4gPSBHZXRPcHRpb25OYW1lPFQ+PiA9IE4gZXh0ZW5kcyBgbm8tJHtzdHJpbmd9YFxuLy8gICA/IFNwcmVhZDxDTywgTz5cbi8vICAgOiBOIGV4dGVuZHMgYCR7aW5mZXIgTmFtZX0uJHtpbmZlciBDaGlsZH1gXG4vLyAgICAgPyAoT3B0aW9uTmFtZTxOYW1lPiBleHRlbmRzIGtleW9mIE1lcmdlPENPLCBPPlxuLy8gICAgICAgPyBPcHRpb25OYW1lPENoaWxkPiBleHRlbmRzXG4vLyAgICAgICAgIGtleW9mIE5vbk51bGxhYmxlPE1lcmdlPENPLCBPPltPcHRpb25OYW1lPE5hbWU+XT4gPyBTcHJlYWRUd288Q08sIE8+XG4vLyAgICAgICA6IE1lcmdlUmVjdXJzaXZlPENPLCBPPlxuLy8gICAgICAgOiBNZXJnZVJlY3Vyc2l2ZTxDTywgTz4pXG4vLyAgIDogTWVyZ2U8Q08sIE8+O1xuXG50eXBlIFR5cGVkT3B0aW9uPFxuICBURmxhZ3MgZXh0ZW5kcyBzdHJpbmcsXG4gIFRPcHRpb25zLFxuICBUVHlwZXMsXG4gIFRSZXF1aXJlZCBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIFREZWZhdWx0ID0gdW5kZWZpbmVkLFxuPiA9IG51bWJlciBleHRlbmRzIFRUeXBlcyA/IGFueVxuICA6IFRGbGFncyBleHRlbmRzIGAke3N0cmluZ30tLSR7aW5mZXIgTmFtZX09JHtpbmZlciBUUmVzdEZsYWdzfWBcbiAgICA/IFZhbHVlc09wdGlvbjxcbiAgICAgIE5hbWUsXG4gICAgICBUUmVzdEZsYWdzLFxuICAgICAgVFR5cGVzLFxuICAgICAgSXNSZXF1aXJlZDxUUmVxdWlyZWQsIFREZWZhdWx0PixcbiAgICAgIFREZWZhdWx0XG4gICAgPlxuICA6IFRGbGFncyBleHRlbmRzIGAke3N0cmluZ30tLSR7aW5mZXIgTmFtZX0gJHtpbmZlciBUUmVzdEZsYWdzfWBcbiAgICA/IFZhbHVlc09wdGlvbjxcbiAgICAgIE5hbWUsXG4gICAgICBUUmVzdEZsYWdzLFxuICAgICAgVFR5cGVzLFxuICAgICAgSXNSZXF1aXJlZDxUUmVxdWlyZWQsIFREZWZhdWx0PixcbiAgICAgIFREZWZhdWx0XG4gICAgPlxuICA6IFRGbGFncyBleHRlbmRzIGAke3N0cmluZ30tLSR7aW5mZXIgTmFtZX1gXG4gICAgPyBCb29sZWFuT3B0aW9uPE5hbWUsIFRPcHRpb25zLCBJc1JlcXVpcmVkPFRSZXF1aXJlZCwgVERlZmF1bHQ+LCBURGVmYXVsdD5cbiAgOiBURmxhZ3MgZXh0ZW5kcyBgLSR7aW5mZXIgTmFtZX09JHtpbmZlciBUUmVzdEZsYWdzfWAgPyBWYWx1ZXNPcHRpb248XG4gICAgICBOYW1lLFxuICAgICAgVFJlc3RGbGFncyxcbiAgICAgIFRUeXBlcyxcbiAgICAgIElzUmVxdWlyZWQ8VFJlcXVpcmVkLCBURGVmYXVsdD4sXG4gICAgICBURGVmYXVsdFxuICAgID5cbiAgOiBURmxhZ3MgZXh0ZW5kcyBgLSR7aW5mZXIgTmFtZX0gJHtpbmZlciBUUmVzdEZsYWdzfWAgPyBWYWx1ZXNPcHRpb248XG4gICAgICBOYW1lLFxuICAgICAgVFJlc3RGbGFncyxcbiAgICAgIFRUeXBlcyxcbiAgICAgIElzUmVxdWlyZWQ8VFJlcXVpcmVkLCBURGVmYXVsdD4sXG4gICAgICBURGVmYXVsdFxuICAgID5cbiAgOiBURmxhZ3MgZXh0ZW5kcyBgLSR7aW5mZXIgTmFtZX1gXG4gICAgPyBCb29sZWFuT3B0aW9uPE5hbWUsIFRPcHRpb25zLCBJc1JlcXVpcmVkPFRSZXF1aXJlZCwgVERlZmF1bHQ+LCBURGVmYXVsdD5cbiAgOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBUeXBlZEFyZ3VtZW50czxUQXJncyBleHRlbmRzIHN0cmluZywgVFR5cGVzPiA9IG51bWJlciBleHRlbmRzIFRUeXBlcyA/IGFueVxuICA6IFRBcmdzIGV4dGVuZHMgYCR7aW5mZXIgVEFyZ30gJHtpbmZlciBUUmVzdEFyZ3N9YFxuICAgID8gVEFyZyBleHRlbmRzIGBbJHtzdHJpbmd9XWBcbiAgICAgID8gW0FyZ3VtZW50VHlwZTxUQXJnLCBUVHlwZXM+PywgLi4uVHlwZWRBcmd1bWVudHM8VFJlc3RBcmdzLCBUVHlwZXM+XVxuICAgIDogW0FyZ3VtZW50VHlwZTxUQXJnLCBUVHlwZXM+LCAuLi5UeXBlZEFyZ3VtZW50czxUUmVzdEFyZ3MsIFRUeXBlcz5dXG4gIDogVEFyZ3MgZXh0ZW5kcyBgJHtzdHJpbmd9Li4uJHtzdHJpbmd9YCA/IFtcbiAgICAgIC4uLkFyZ3VtZW50VHlwZTxUQXJncywgVFR5cGVzPiBleHRlbmRzIEFycmF5PGluZmVyIFRWYWx1ZT5cbiAgICAgICAgPyBUQXJncyBleHRlbmRzIGBbJHtzdHJpbmd9XWAgPyBBcnJheTxUVmFsdWU+XG4gICAgICAgIDogW1RWYWx1ZSwgLi4uQXJyYXk8VFZhbHVlPl1cbiAgICAgICAgOiBuZXZlcixcbiAgICBdXG4gIDogVEFyZ3MgZXh0ZW5kcyBgWyR7c3RyaW5nfV1gID8gW0FyZ3VtZW50VHlwZTxUQXJncywgVFR5cGVzPj9dXG4gIDogW0FyZ3VtZW50VHlwZTxUQXJncywgVFR5cGVzPl07XG5cbnR5cGUgVHlwZWRDb21tYW5kQXJndW1lbnRzPFROYW1lQW5kQXJndW1lbnRzIGV4dGVuZHMgc3RyaW5nLCBUVHlwZXM+ID1cbiAgbnVtYmVyIGV4dGVuZHMgVFR5cGVzID8gYW55XG4gICAgOiBUTmFtZUFuZEFyZ3VtZW50cyBleHRlbmRzIGAke3N0cmluZ30gJHtpbmZlciBURmxhZ3N9YFxuICAgICAgPyBUeXBlZEFyZ3VtZW50czxURmxhZ3MsIFRUeXBlcz5cbiAgICA6IFtdO1xuXG50eXBlIFR5cGVkRW52PFxuICBUTmFtZUFuZFZhbHVlIGV4dGVuZHMgc3RyaW5nLFxuICBUUHJlZml4IGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBUT3B0aW9ucyxcbiAgVFR5cGVzLFxuICBUUmVxdWlyZWQgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBURGVmYXVsdCA9IHVuZGVmaW5lZCxcbj4gPSBudW1iZXIgZXh0ZW5kcyBUVHlwZXMgPyBhbnlcbiAgOiBUTmFtZUFuZFZhbHVlIGV4dGVuZHMgYCR7aW5mZXIgTmFtZX09JHtpbmZlciBSZXN0fWBcbiAgICA/IFZhbHVlT3B0aW9uPFRyaW1MZWZ0PE5hbWUsIFRQcmVmaXg+LCBSZXN0LCBUVHlwZXMsIFRSZXF1aXJlZCwgVERlZmF1bHQ+XG4gIDogVE5hbWVBbmRWYWx1ZSBleHRlbmRzIGAke2luZmVyIE5hbWV9ICR7aW5mZXIgUmVzdH1gXG4gICAgPyBWYWx1ZU9wdGlvbjxUcmltTGVmdDxOYW1lLCBUUHJlZml4PiwgUmVzdCwgVFR5cGVzLCBUUmVxdWlyZWQsIFREZWZhdWx0PlxuICA6IFROYW1lQW5kVmFsdWUgZXh0ZW5kcyBgJHtpbmZlciBOYW1lfWBcbiAgICA/IEJvb2xlYW5PcHRpb248VHJpbUxlZnQ8TmFtZSwgVFByZWZpeD4sIFRPcHRpb25zLCBUUmVxdWlyZWQsIFREZWZhdWx0PlxuICA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG50eXBlIFR5cGVkVHlwZTxcbiAgVE5hbWUgZXh0ZW5kcyBzdHJpbmcsXG4gIFRIYW5kbGVyIGV4dGVuZHMgVHlwZU9yVHlwZUhhbmRsZXI8dW5rbm93bj4sXG4+ID0geyBbTmFtZSBpbiBUTmFtZV06IFRIYW5kbGVyIH07XG5cbnR5cGUgUmVxdWlyZWRLZXlzPFRSZWNvcmQ+ID0ge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICBbS2V5IGluIGtleW9mIFRSZWNvcmRdLT86IHt9IGV4dGVuZHMgUGljazxUUmVjb3JkLCBLZXk+ID8gbmV2ZXIgOiBLZXk7XG59W2tleW9mIFRSZWNvcmRdO1xuXG50eXBlIE9wdGlvbmFsS2V5czxUUmVjb3JkPiA9IHtcbiAgLy8gZGVuby1saW50LWlnbm9yZSBiYW4tdHlwZXNcbiAgW0tleSBpbiBrZXlvZiBUUmVjb3JkXS0/OiB7fSBleHRlbmRzIFBpY2s8VFJlY29yZCwgS2V5PiA/IEtleSA6IG5ldmVyO1xufVtrZXlvZiBUUmVjb3JkXTtcblxudHlwZSBTcHJlYWRSZXF1aXJlZFByb3BlcnRpZXM8XG4gIFRUYXJnZXQsXG4gIFRTb3VyY2UsXG4gIFRLZXlzIGV4dGVuZHMga2V5b2YgVFRhcmdldCAmIGtleW9mIFRTb3VyY2UsXG4+ID0ge1xuICBbS2V5IGluIFRLZXlzXTpcbiAgICB8IEV4Y2x1ZGU8VFRhcmdldFtLZXldLCB1bmRlZmluZWQ+XG4gICAgfCBFeGNsdWRlPFRTb3VyY2VbS2V5XSwgdW5kZWZpbmVkPjtcbn07XG5cbnR5cGUgU3ByZWFkT3B0aW9uYWxQcm9wZXJ0aWVzPFxuICBUVGFyZ2V0LFxuICBUU291cmNlLFxuICBUS2V5cyBleHRlbmRzIGtleW9mIFRUYXJnZXQgJiBrZXlvZiBUU291cmNlLFxuPiA9IHtcbiAgW0tleSBpbiBUS2V5c10/OiBUVGFyZ2V0W0tleV0gfCBUU291cmNlW0tleV07XG59O1xuXG4vKiogTWVyZ2UgdHlwZXMgb2YgdHdvIG9iamVjdHMuICovXG50eXBlIFNwcmVhZDxUVGFyZ2V0LCBUU291cmNlPiA9IFRUYXJnZXQgZXh0ZW5kcyB2b2lkID8gVFNvdXJjZVxuICA6IFRTb3VyY2UgZXh0ZW5kcyB2b2lkID8gVFRhcmdldFxuICAvLyBQcm9wZXJ0aWVzIGluIEwgdGhhdCBkb24ndCBleGlzdCBpbiBSLlxuICA6IFxuICAgICYgT21pdDxUVGFyZ2V0LCBrZXlvZiBUU291cmNlPlxuICAgIC8vIFByb3BlcnRpZXMgaW4gUiB0aGF0IGRvbid0IGV4aXN0IGluIEwuXG4gICAgJiBPbWl0PFRTb3VyY2UsIGtleW9mIFRUYXJnZXQ+XG4gICAgLy8gUmVxdWlyZWQgcHJvcGVydGllcyBpbiBSIHRoYXQgZXhpc3QgaW4gTC5cbiAgICAmIFNwcmVhZFJlcXVpcmVkUHJvcGVydGllczxcbiAgICAgIFRUYXJnZXQsXG4gICAgICBUU291cmNlLFxuICAgICAgUmVxdWlyZWRLZXlzPFRTb3VyY2U+ICYga2V5b2YgVFRhcmdldFxuICAgID5cbiAgICAvLyBSZXF1aXJlZCBwcm9wZXJ0aWVzIGluIEwgdGhhdCBleGlzdCBpbiBSLlxuICAgICYgU3ByZWFkUmVxdWlyZWRQcm9wZXJ0aWVzPFxuICAgICAgVFRhcmdldCxcbiAgICAgIFRTb3VyY2UsXG4gICAgICBSZXF1aXJlZEtleXM8VFRhcmdldD4gJiBrZXlvZiBUU291cmNlXG4gICAgPlxuICAgIC8vIE9wdGlvbmFsIHByb3BlcnRpZXMgaW4gTCBhbmQgUi5cbiAgICAmIFNwcmVhZE9wdGlvbmFsUHJvcGVydGllczxcbiAgICAgIFRUYXJnZXQsXG4gICAgICBUU291cmNlLFxuICAgICAgT3B0aW9uYWxLZXlzPFRUYXJnZXQ+ICYgT3B0aW9uYWxLZXlzPFRTb3VyY2U+XG4gICAgPjtcblxudHlwZSBWYWx1ZU9mPFRWYWx1ZT4gPSBUVmFsdWUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBpbmZlciBWPiA/IFZhbHVlT2Y8Vj5cbiAgOiBUVmFsdWU7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLFNBQ0UsZ0JBQWdCLEVBQ2hCLG1CQUFtQixvQkFBb0IsUUFDbEMsc0JBQXNCO0FBQzdCLFNBQVMsMEJBQTBCLFFBQVEsZUFBZTtBQUMxRCxTQUFTLFVBQVUsUUFBUSxvQkFBb0I7QUFFL0MsU0FDRSxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLGNBQWMsUUFDVCxjQUFjO0FBQ3JCLFNBQVMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFH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
+// denoCacheMetadata=7163494972557327759,4152170276387220143 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/8ff2624c5c21ed0dc87c654d08bd72bd8d37a89508b0a29c64ec3448bb2af726.js b/vendor/gen/https/deno.land/8ff2624c5c21ed0dc87c654d08bd72bd8d37a89508b0a29c64ec3448bb2af726.js
new file mode 100644
index 0000000..7736863
--- /dev/null
+++ b/vendor/gen/https/deno.land/8ff2624c5c21ed0dc87c654d08bd72bd8d37a89508b0a29c64ec3448bb2af726.js
@@ -0,0 +1,25 @@
+import tomlLoader from "../core/loaders/toml.ts";
+import { merge } from "../core/utils/object.ts";
+// Default options
+export const defaults = {
+ extensions: [
+ ".toml"
+ ],
+ pageSubExtension: ".page"
+};
+/**
+ * A plugin to load TOML data files and pages
+ * @see https://lume.land/plugins/toml/
+ */ export function toml(userOptions) {
+ const options = merge(defaults, userOptions);
+ return (site)=>{
+ site.loadData(options.extensions, tomlLoader);
+ site.loadPages(options.extensions, {
+ loader: tomlLoader,
+ pageSubExtension: options.pageSubExtension
+ });
+ };
+}
+export default toml;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy90b21sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0b21sTG9hZGVyIGZyb20gXCIuLi9jb3JlL2xvYWRlcnMvdG9tbC50c1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi4vY29yZS91dGlscy9vYmplY3QudHNcIjtcblxuaW1wb3J0IHR5cGUgU2l0ZSBmcm9tIFwiLi4vY29yZS9zaXRlLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBGaWxlIGV4dGVuc2lvbnMgdG8gbG9hZCAqL1xuICBleHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIE9wdGlvbmFsIHN1Yi1leHRlbnNpb24gZm9yIHBhZ2UgZmlsZXMgKi9cbiAgcGFnZVN1YkV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuLy8gRGVmYXVsdCBvcHRpb25zXG5leHBvcnQgY29uc3QgZGVmYXVsdHM6IE9wdGlvbnMgPSB7XG4gIGV4dGVuc2lvbnM6IFtcIi50b21sXCJdLFxuICBwYWdlU3ViRXh0ZW5zaW9uOiBcIi5wYWdlXCIsXG59O1xuXG4vKipcbiAqIEEgcGx1Z2luIHRvIGxvYWQgVE9NTCBkYXRhIGZpbGVzIGFuZCBwYWdlc1xuICogQHNlZSBodHRwczovL2x1bWUubGFuZC9wbHVnaW5zL3RvbWwvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b21sKHVzZXJPcHRpb25zPzogT3B0aW9ucykge1xuICBjb25zdCBvcHRpb25zID0gbWVyZ2UoZGVmYXVsdHMsIHVzZXJPcHRpb25zKTtcblxuICByZXR1cm4gKHNpdGU6IFNpdGUpID0+IHtcbiAgICBzaXRlLmxvYWREYXRhKG9wdGlvbnMuZXh0ZW5zaW9ucywgdG9tbExvYWRlcik7XG4gICAgc2l0ZS5sb2FkUGFnZXMob3B0aW9ucy5leHRlbnNpb25zLCB7XG4gICAgICBsb2FkZXI6IHRvbWxMb2FkZXIsXG4gICAgICBwYWdlU3ViRXh0ZW5zaW9uOiBvcHRpb25zLnBhZ2VTdWJFeHRlbnNpb24sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvbWw7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQkFBZ0IsMEJBQTBCO0FBQ2pELFNBQVMsS0FBSyxRQUFRLDBCQUEwQjtBQVloRCxrQkFBa0I7QUFDbEIsT0FBTyxNQUFNLFdBQW9CO0VBQy9CLFlBQVk7SUFBQztHQUFRO0VBQ3JCLGtCQUFrQjtBQUNwQixFQUFFO0FBRUY7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLEtBQUssV0FBcUI7RUFDeEMsTUFBTSxVQUFVLE1BQU0sVUFBVTtFQUVoQyxPQUFPLENBQUM7SUFDTixLQUFLLFFBQVEsQ0FBQyxRQUFRLFVBQVUsRUFBRTtJQUNsQyxLQUFLLFNBQVMsQ0FBQyxRQUFRLFVBQVUsRUFBRTtNQUNqQyxRQUFRO01BQ1Isa0JBQWtCLFFBQVEsZ0JBQWdCO0lBQzVDO0VBQ0Y7QUFDRjtBQUVBLGVBQWUsS0FBSyJ9
+// denoCacheMetadata=1217915538899810810,4434902150761336048 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/9013a95f0c5758768ae5a9fd8fcfb1b10de82e26b90888065d0add44087bee29.js b/vendor/gen/https/deno.land/9013a95f0c5758768ae5a9fd8fcfb1b10de82e26b90888065d0add44087bee29.js
new file mode 100644
index 0000000..02c5418
--- /dev/null
+++ b/vendor/gen/https/deno.land/9013a95f0c5758768ae5a9fd8fcfb1b10de82e26b90888065d0add44087bee29.js
@@ -0,0 +1,37 @@
+import create from "./bare.ts";
+import ifTag from "./plugins/if.ts";
+import forTag from "./plugins/for.ts";
+import includeTag from "./plugins/include.ts";
+import setTag from "./plugins/set.ts";
+import jsTag from "./plugins/js.ts";
+import layoutTag from "./plugins/layout.ts";
+import functionTag from "./plugins/function.ts";
+import importTag from "./plugins/import.ts";
+import exportTag from "./plugins/export.ts";
+import echoTag from "./plugins/echo.ts";
+import escape from "./plugins/escape.ts";
+import unescape from "./plugins/unescape.ts";
+import trim from "./plugins/trim.ts";
+export default function(options = {}) {
+ const env = create({
+ ...options,
+ autoDataVarname: options.autoDataVarname ?? options.useWith ?? true
+ });
+ // Register basic plugins
+ env.use(ifTag());
+ env.use(forTag());
+ env.use(jsTag());
+ env.use(includeTag());
+ env.use(setTag());
+ env.use(layoutTag());
+ env.use(functionTag());
+ env.use(importTag());
+ env.use(exportTag());
+ env.use(echoTag());
+ env.use(escape());
+ env.use(unescape());
+ env.use(trim());
+ return env;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZSwgeyBPcHRpb25zIGFzIEJhcmVPcHRpb25zIH0gZnJvbSBcIi4vYmFyZS50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudCB9IGZyb20gXCIuL3NyYy9lbnZpcm9ubWVudC50c1wiO1xuaW1wb3J0IGlmVGFnIGZyb20gXCIuL3BsdWdpbnMvaWYudHNcIjtcbmltcG9ydCBmb3JUYWcgZnJvbSBcIi4vcGx1Z2lucy9mb3IudHNcIjtcbmltcG9ydCBpbmNsdWRlVGFnIGZyb20gXCIuL3BsdWdpbnMvaW5jbHVkZS50c1wiO1xuaW1wb3J0IHNldFRhZyBmcm9tIFwiLi9wbHVnaW5zL3NldC50c1wiO1xuaW1wb3J0IGpzVGFnIGZyb20gXCIuL3BsdWdpbnMvanMudHNcIjtcbmltcG9ydCBsYXlvdXRUYWcgZnJvbSBcIi4vcGx1Z2lucy9sYXlvdXQudHNcIjtcbmltcG9ydCBmdW5jdGlvblRhZyBmcm9tIFwiLi9wbHVnaW5zL2Z1bmN0aW9uLnRzXCI7XG5pbXBvcnQgaW1wb3J0VGFnIGZyb20gXCIuL3BsdWdpbnMvaW1wb3J0LnRzXCI7XG5pbXBvcnQgZXhwb3J0VGFnIGZyb20gXCIuL3BsdWdpbnMvZXhwb3J0LnRzXCI7XG5pbXBvcnQgZWNob1RhZyBmcm9tIFwiLi9wbHVnaW5zL2VjaG8udHNcIjtcbmltcG9ydCBlc2NhcGUgZnJvbSBcIi4vcGx1Z2lucy9lc2NhcGUudHNcIjtcbmltcG9ydCB1bmVzY2FwZSBmcm9tIFwiLi9wbHVnaW5zL3VuZXNjYXBlLnRzXCI7XG5pbXBvcnQgdHJpbSBmcm9tIFwiLi9wbHVnaW5zL3RyaW0udHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIGV4dGVuZHMgQmFyZU9wdGlvbnMge1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGF1dG9EYXRhVmFybmFtZSAqL1xuICB1c2VXaXRoPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IEVudmlyb25tZW50IHtcbiAgY29uc3QgZW52ID0gY3JlYXRlKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGF1dG9EYXRhVmFybmFtZTogb3B0aW9ucy5hdXRvRGF0YVZhcm5hbWUgPz8gb3B0aW9ucy51c2VXaXRoID8/IHRydWUsXG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIGJhc2ljIHBsdWdpbnNcbiAgZW52LnVzZShpZlRhZygpKTtcbiAgZW52LnVzZShmb3JUYWcoKSk7XG4gIGVudi51c2UoanNUYWcoKSk7XG4gIGVudi51c2UoaW5jbHVkZVRhZygpKTtcbiAgZW52LnVzZShzZXRUYWcoKSk7XG4gIGVudi51c2UobGF5b3V0VGFnKCkpO1xuICBlbnYudXNlKGZ1bmN0aW9uVGFnKCkpO1xuICBlbnYudXNlKGltcG9ydFRhZygpKTtcbiAgZW52LnVzZShleHBvcnRUYWcoKSk7XG4gIGVudi51c2UoZWNob1RhZygpKTtcbiAgZW52LnVzZShlc2NhcGUoKSk7XG4gIGVudi51c2UodW5lc2NhcGUoKSk7XG4gIGVudi51c2UodHJpbSgpKTtcblxuICByZXR1cm4gZW52O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBd0MsWUFBWTtBQUUzRCxPQUFPLFdBQVcsa0JBQWtCO0FBQ3BDLE9BQU8sWUFBWSxtQkFBbUI7QUFDdEMsT0FBTyxnQkFBZ0IsdUJBQXVCO0FBQzlDLE9BQU8sWUFBWSxtQkFBbUI7QUFDdEMsT0FBTyxXQUFXLGtCQUFrQjtBQUNwQyxPQUFPLGVBQWUsc0JBQXNCO0FBQzVDLE9BQU8saUJBQWlCLHdCQUF3QjtBQUNoRCxPQUFPLGVBQWUsc0JBQXNCO0FBQzVDLE9BQU8sZUFBZSxzQkFBc0I7QUFDNUMsT0FBTyxhQUFhLG9CQUFvQjtBQUN4QyxPQUFPLFlBQVksc0JBQXNCO0FBQ3pDLE9BQU8sY0FBYyx3QkFBd0I7QUFDN0MsT0FBTyxVQUFVLG9CQUFvQjtBQU9yQyxlQUFlLFNBQVUsVUFBbUIsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sTUFBTSxPQUFPO0lBQ2pCLEdBQUcsT0FBTztJQUNWLGlCQUFpQixRQUFRLGVBQWUsSUFBSSxRQUFRLE9BQU8sSUFBSTtFQUNqRTtFQUVBLHlCQUF5QjtFQUN6QixJQUFJLEdBQUcsQ0FBQztFQUNSLElBQUksR0FBRyxDQUFDO0VBQ1IsSUFBSSxHQUFHLENBQUM7RUFDUixJQUFJLEdBQUcsQ0FBQztFQUNSLElBQUksR0FBRyxDQUFDO0VBQ1IsSUFBSSxHQUFHLENBQUM7RUFDUixJQUFJLEdBQUcsQ0FBQztFQUNSLElBQUksR0FBRyxDQUFDO0VBQ1IsSUFBSSxHQUFHLENBQUM7RUFDUixJQUFJLEdBQUcsQ0FBQztFQUNSLElBQUksR0FBRyxDQUFDO0VBQ1IsSUFBSSxHQUFHLENBQUM7RUFDUixJQUFJLEdBQUcsQ0FBQztFQUVSLE9BQU87QUFDVCJ9
+// denoCacheMetadata=4683514964064964297,5667045177061146746 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/92479c3c048c7fe77aff827f925bec1558c2307c8c96d5cec7b9808beb910699.js b/vendor/gen/https/deno.land/92479c3c048c7fe77aff827f925bec1558c2307c8c96d5cec7b9808beb910699.js
new file mode 100644
index 0000000..f6832bd
--- /dev/null
+++ b/vendor/gen/https/deno.land/92479c3c048c7fe77aff827f925bec1558c2307c8c96d5cec7b9808beb910699.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported mostly from https://github.com/browserify/path-browserify/
+/**
+ * Utilities for working with OS-specific file paths.
+ *
+ * Codes in the examples uses POSIX path but it automatically use Windows path
+ * on Windows. Use methods under `posix` or `win32` object instead to handle non
+ * platform specific path like:
+ * ```ts
+ * import { posix, win32 } from "https://deno.land/std@$STD_VERSION/path/mod.ts";
+ * const p1 = posix.fromFileUrl("file:///home/foo");
+ * const p2 = win32.fromFileUrl("file:///home/foo");
+ * console.log(p1); // "/home/foo"
+ * console.log(p2); // "\\home\\foo"
+ * ```
+ *
+ * This module is browser compatible.
+ *
+ * @module
+ */ import { isWindows } from "../_util/os.ts";
+import * as _win32 from "./win32.ts";
+import * as _posix from "./posix.ts";
+const path = isWindows ? _win32 : _posix;
+export const win32 = _win32;
+export const posix = _posix;
+export const { basename, delimiter, dirname, extname, format, fromFileUrl, isAbsolute, join, normalize, parse, relative, resolve, sep, toFileUrl, toNamespacedPath } = path;
+export * from "./common.ts";
+export { SEP, SEP_PATTERN } from "./separator.ts";
+export * from "./_interface.ts";
+export * from "./glob.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgbW9zdGx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuXG4vKipcbiAqIFV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIE9TLXNwZWNpZmljIGZpbGUgcGF0aHMuXG4gKlxuICogQ29kZXMgaW4gdGhlIGV4YW1wbGVzIHVzZXMgUE9TSVggcGF0aCBidXQgaXQgYXV0b21hdGljYWxseSB1c2UgV2luZG93cyBwYXRoXG4gKiBvbiBXaW5kb3dzLiBVc2UgbWV0aG9kcyB1bmRlciBgcG9zaXhgIG9yIGB3aW4zMmAgb2JqZWN0IGluc3RlYWQgdG8gaGFuZGxlIG5vblxuICogcGxhdGZvcm0gc3BlY2lmaWMgcGF0aCBsaWtlOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBvc2l4LCB3aW4zMiB9IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC9zdGRAJFNURF9WRVJTSU9OL3BhdGgvbW9kLnRzXCI7XG4gKiBjb25zdCBwMSA9IHBvc2l4LmZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKTtcbiAqIGNvbnN0IHAyID0gd2luMzIuZnJvbUZpbGVVcmwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpO1xuICogY29uc29sZS5sb2cocDEpOyAvLyBcIi9ob21lL2Zvb1wiXG4gKiBjb25zb2xlLmxvZyhwMik7IC8vIFwiXFxcXGhvbWVcXFxcZm9vXCJcbiAqIGBgYFxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4uL191dGlsL29zLnRzXCI7XG5pbXBvcnQgKiBhcyBfd2luMzIgZnJvbSBcIi4vd2luMzIudHNcIjtcbmltcG9ydCAqIGFzIF9wb3NpeCBmcm9tIFwiLi9wb3NpeC50c1wiO1xuXG5jb25zdCBwYXRoID0gaXNXaW5kb3dzID8gX3dpbjMyIDogX3Bvc2l4O1xuXG5leHBvcnQgY29uc3Qgd2luMzIgPSBfd2luMzI7XG5leHBvcnQgY29uc3QgcG9zaXggPSBfcG9zaXg7XG5leHBvcnQgY29uc3Qge1xuICBiYXNlbmFtZSxcbiAgZGVsaW1pdGVyLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBmb3JtYXQsXG4gIGZyb21GaWxlVXJsLFxuICBpc0Fic29sdXRlLFxuICBqb2luLFxuICBub3JtYWxpemUsXG4gIHBhcnNlLFxuICByZWxhdGl2ZSxcbiAgcmVzb2x2ZSxcbiAgc2VwLFxuICB0b0ZpbGVVcmwsXG4gIHRvTmFtZXNwYWNlZFBhdGgsXG59ID0gcGF0aDtcblxuZXhwb3J0ICogZnJvbSBcIi4vY29tbW9uLnRzXCI7XG5leHBvcnQgeyBTRVAsIFNFUF9QQVRURVJOIH0gZnJvbSBcIi4vc2VwYXJhdG9yLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9faW50ZXJmYWNlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nbG9iLnRzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLGlEQUFpRDtBQUNqRCxvRUFBb0U7QUFFcEU7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBRUQsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBQzNDLFlBQVksWUFBWSxhQUFhO0FBQ3JDLFlBQVksWUFBWSxhQUFhO0FBRXJDLE1BQU0sT0FBTyxZQUFZLFNBQVM7QUFFbEMsT0FBTyxNQUFNLFFBQVEsT0FBTztBQUM1QixPQUFPLE1BQU0sUUFBUSxPQUFPO0FBQzVCLE9BQU8sTUFBTSxFQUNYLFFBQVEsRUFDUixTQUFTLEVBQ1QsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sV0FBVyxFQUNYLFVBQVUsRUFDVixJQUFJLEVBQ0osU0FBUyxFQUNULEtBQUssRUFDTCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEdBQUcsRUFDSCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLEdBQUcsS0FBSztBQUVULGNBQWMsY0FBYztBQUM1QixTQUFTLEdBQUcsRUFBRSxXQUFXLFFBQVEsaUJBQWlCO0FBQ2xELGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsWUFBWSJ9
+// denoCacheMetadata=8277751481651470362,3736611333096358374 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/933fa6a8c6ed95819acdfaf57f66e8539ff8f18769af26fef468b2f111eb7b1d.js b/vendor/gen/https/deno.land/933fa6a8c6ed95819acdfaf57f66e8539ff8f18769af26fef468b2f111eb7b1d.js
new file mode 100644
index 0000000..f444660
--- /dev/null
+++ b/vendor/gen/https/deno.land/933fa6a8c6ed95819acdfaf57f66e8539ff8f18769af26fef468b2f111eb7b1d.js
@@ -0,0 +1,99 @@
+import { GenericPrompt } from "./_generic_prompt.ts";
+import { brightBlue, dim, stripColor, underline } from "./deps.ts";
+/** Generic input prompt representation. */ export class GenericInput extends GenericPrompt {
+ inputValue = "";
+ inputIndex = 0;
+ /**
+ * Prompt constructor.
+ * @param settings Prompt settings.
+ */ constructor(settings){
+ super({
+ ...settings,
+ keys: {
+ moveCursorLeft: [
+ "left"
+ ],
+ moveCursorRight: [
+ "right"
+ ],
+ deleteCharLeft: [
+ "backspace"
+ ],
+ deleteCharRight: [
+ "delete"
+ ],
+ ...settings.keys ?? {}
+ }
+ });
+ }
+ getCurrentInputValue() {
+ return this.inputValue;
+ }
+ message() {
+ const message = super.message() + " " + this.settings.pointer + " ";
+ this.cursor.x = stripColor(message).length + this.inputIndex + 1;
+ return message + this.input();
+ }
+ input() {
+ return underline(this.inputValue);
+ }
+ highlight(value, color1 = dim, color2 = brightBlue) {
+ value = value.toString();
+ const inputLowerCase = this.getCurrentInputValue().toLowerCase();
+ const valueLowerCase = value.toLowerCase();
+ const index = valueLowerCase.indexOf(inputLowerCase);
+ const matched = value.slice(index, index + inputLowerCase.length);
+ return index >= 0 ? color1(value.slice(0, index)) + color2(matched) + color1(value.slice(index + inputLowerCase.length)) : value;
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case this.isKey(this.settings.keys, "moveCursorLeft", event):
+ this.moveCursorLeft();
+ break;
+ case this.isKey(this.settings.keys, "moveCursorRight", event):
+ this.moveCursorRight();
+ break;
+ case this.isKey(this.settings.keys, "deleteCharRight", event):
+ this.deleteCharRight();
+ break;
+ case this.isKey(this.settings.keys, "deleteCharLeft", event):
+ this.deleteChar();
+ break;
+ case event.char && !event.meta && !event.ctrl:
+ this.addChar(event.char);
+ break;
+ default:
+ await super.handleEvent(event);
+ }
+ }
+ /** Add character to current input. */ addChar(char) {
+ this.inputValue = this.inputValue.slice(0, this.inputIndex) + char + this.inputValue.slice(this.inputIndex);
+ this.inputIndex++;
+ }
+ /** Move prompt cursor left. */ moveCursorLeft() {
+ if (this.inputIndex > 0) {
+ this.inputIndex--;
+ }
+ }
+ /** Move prompt cursor right. */ moveCursorRight() {
+ if (this.inputIndex < this.inputValue.length) {
+ this.inputIndex++;
+ }
+ }
+ /** Delete char left. */ deleteChar() {
+ if (this.inputIndex > 0) {
+ this.inputIndex--;
+ this.deleteCharRight();
+ }
+ }
+ /** Delete char right. */ deleteCharRight() {
+ if (this.inputIndex < this.inputValue.length) {
+ this.inputValue = this.inputValue.slice(0, this.inputIndex) + this.inputValue.slice(this.inputIndex + 1);
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L19nZW5lcmljX2lucHV0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgS2V5Q29kZSB9IGZyb20gXCIuLi9rZXljb2RlL2tleV9jb2RlLnRzXCI7XG5pbXBvcnQge1xuICBHZW5lcmljUHJvbXB0LFxuICBHZW5lcmljUHJvbXB0S2V5cyxcbiAgR2VuZXJpY1Byb21wdE9wdGlvbnMsXG4gIEdlbmVyaWNQcm9tcHRTZXR0aW5ncyxcbn0gZnJvbSBcIi4vX2dlbmVyaWNfcHJvbXB0LnRzXCI7XG5pbXBvcnQgeyBicmlnaHRCbHVlLCBkaW0sIHN0cmlwQ29sb3IsIHVuZGVybGluZSB9IGZyb20gXCIuL2RlcHMudHNcIjtcblxuLyoqIElucHV0IGtleXMgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0lucHV0S2V5cyBleHRlbmRzIEdlbmVyaWNQcm9tcHRLZXlzIHtcbiAgbW92ZUN1cnNvckxlZnQ/OiBzdHJpbmdbXTtcbiAgbW92ZUN1cnNvclJpZ2h0Pzogc3RyaW5nW107XG4gIGRlbGV0ZUNoYXJMZWZ0Pzogc3RyaW5nW107XG4gIGRlbGV0ZUNoYXJSaWdodD86IHN0cmluZ1tdO1xufVxuXG4vKiogR2VuZXJpYyBpbnB1dCBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0lucHV0UHJvbXB0T3B0aW9uczxUVmFsdWUsIFRSYXdWYWx1ZT5cbiAgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxUVmFsdWUsIFRSYXdWYWx1ZT4ge1xuICBrZXlzPzogR2VuZXJpY0lucHV0S2V5cztcbn1cblxuLyoqIEdlbmVyaWMgaW5wdXQgcHJvbXB0IHNldHRpbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljSW5wdXRQcm9tcHRTZXR0aW5nczxUVmFsdWUsIFRSYXdWYWx1ZT5cbiAgZXh0ZW5kcyBHZW5lcmljUHJvbXB0U2V0dGluZ3M8VFZhbHVlLCBUUmF3VmFsdWU+IHtcbiAga2V5cz86IEdlbmVyaWNJbnB1dEtleXM7XG59XG5cbi8qKiBHZW5lcmljIGlucHV0IHByb21wdCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljSW5wdXQ8XG4gIFRWYWx1ZSxcbiAgVFJhd1ZhbHVlLFxuICBUU2V0dGluZ3MgZXh0ZW5kcyBHZW5lcmljSW5wdXRQcm9tcHRTZXR0aW5nczxUVmFsdWUsIFRSYXdWYWx1ZT4sXG4+IGV4dGVuZHMgR2VuZXJpY1Byb21wdDxUVmFsdWUsIFRSYXdWYWx1ZSwgVFNldHRpbmdzPiB7XG4gIHByb3RlY3RlZCBpbnB1dFZhbHVlID0gXCJcIjtcbiAgcHJvdGVjdGVkIGlucHV0SW5kZXggPSAwO1xuXG4gIC8qKlxuICAgKiBQcm9tcHQgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSBzZXR0aW5ncyBQcm9tcHQgc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc2V0dGluZ3M6IFRTZXR0aW5ncykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLnNldHRpbmdzLFxuICAgICAga2V5czoge1xuICAgICAgICBtb3ZlQ3Vyc29yTGVmdDogW1wibGVmdFwiXSxcbiAgICAgICAgbW92ZUN1cnNvclJpZ2h0OiBbXCJyaWdodFwiXSxcbiAgICAgICAgZGVsZXRlQ2hhckxlZnQ6IFtcImJhY2tzcGFjZVwiXSxcbiAgICAgICAgZGVsZXRlQ2hhclJpZ2h0OiBbXCJkZWxldGVcIl0sXG4gICAgICAgIC4uLihzZXR0aW5ncy5rZXlzID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q3VycmVudElucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmcgPSBzdXBlci5tZXNzYWdlKCkgKyBcIiBcIiArIHRoaXMuc2V0dGluZ3MucG9pbnRlciArIFwiIFwiO1xuICAgIHRoaXMuY3Vyc29yLnggPSBzdHJpcENvbG9yKG1lc3NhZ2UpLmxlbmd0aCArIHRoaXMuaW5wdXRJbmRleCArIDE7XG4gICAgcmV0dXJuIG1lc3NhZ2UgKyB0aGlzLmlucHV0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5wdXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdW5kZXJsaW5lKHRoaXMuaW5wdXRWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGlnaGxpZ2h0KFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sb3IxOiAodmFsOiBzdHJpbmcpID0+IHN0cmluZyA9IGRpbSxcbiAgICBjb2xvcjI6ICh2YWw6IHN0cmluZykgPT4gc3RyaW5nID0gYnJpZ2h0Qmx1ZSxcbiAgKTogc3RyaW5nIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaW5wdXRMb3dlckNhc2UgPSB0aGlzLmdldEN1cnJlbnRJbnB1dFZhbHVlKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZUxvd2VyQ2FzZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaW5kZXggPSB2YWx1ZUxvd2VyQ2FzZS5pbmRleE9mKGlucHV0TG93ZXJDYXNlKTtcbiAgICBjb25zdCBtYXRjaGVkOiBzdHJpbmcgPSB2YWx1ZS5zbGljZShpbmRleCwgaW5kZXggKyBpbnB1dExvd2VyQ2FzZS5sZW5ndGgpO1xuICAgIHJldHVybiBpbmRleCA+PSAwXG4gICAgICA/IGNvbG9yMSh2YWx1ZS5zbGljZSgwLCBpbmRleCkpICsgY29sb3IyKG1hdGNoZWQpICtcbiAgICAgICAgY29sb3IxKHZhbHVlLnNsaWNlKGluZGV4ICsgaW5wdXRMb3dlckNhc2UubGVuZ3RoKSlcbiAgICAgIDogdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHVzZXIgaW5wdXQgZXZlbnQuXG4gICAqIEBwYXJhbSBldmVudCBLZXkgZXZlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlRXZlbnQoZXZlbnQ6IEtleUNvZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwibW92ZUN1cnNvckxlZnRcIiwgZXZlbnQpOlxuICAgICAgICB0aGlzLm1vdmVDdXJzb3JMZWZ0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJtb3ZlQ3Vyc29yUmlnaHRcIiwgZXZlbnQpOlxuICAgICAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwiZGVsZXRlQ2hhclJpZ2h0XCIsIGV2ZW50KTpcbiAgICAgICAgdGhpcy5kZWxldGVDaGFyUmlnaHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuaXNLZXkodGhpcy5zZXR0aW5ncy5rZXlzLCBcImRlbGV0ZUNoYXJMZWZ0XCIsIGV2ZW50KTpcbiAgICAgICAgdGhpcy5kZWxldGVDaGFyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBldmVudC5jaGFyICYmICFldmVudC5tZXRhICYmICFldmVudC5jdHJsOlxuICAgICAgICB0aGlzLmFkZENoYXIoZXZlbnQuY2hhciEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGF3YWl0IHN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiogQWRkIGNoYXJhY3RlciB0byBjdXJyZW50IGlucHV0LiAqL1xuICBwcm90ZWN0ZWQgYWRkQ2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc2xpY2UoMCwgdGhpcy5pbnB1dEluZGV4KSArIGNoYXIgK1xuICAgICAgdGhpcy5pbnB1dFZhbHVlLnNsaWNlKHRoaXMuaW5wdXRJbmRleCk7XG4gICAgdGhpcy5pbnB1dEluZGV4Kys7XG4gIH1cblxuICAvKiogTW92ZSBwcm9tcHQgY3Vyc29yIGxlZnQuICovXG4gIHByb3RlY3RlZCBtb3ZlQ3Vyc29yTGVmdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEluZGV4ID4gMCkge1xuICAgICAgdGhpcy5pbnB1dEluZGV4LS07XG4gICAgfVxuICB9XG5cbiAgLyoqIE1vdmUgcHJvbXB0IGN1cnNvciByaWdodC4gKi9cbiAgcHJvdGVjdGVkIG1vdmVDdXJzb3JSaWdodCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEluZGV4IDwgdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5pbnB1dEluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGV0ZSBjaGFyIGxlZnQuICovXG4gIHByb3RlY3RlZCBkZWxldGVDaGFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0SW5kZXgtLTtcbiAgICAgIHRoaXMuZGVsZXRlQ2hhclJpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGV0ZSBjaGFyIHJpZ2h0LiAqL1xuICBwcm90ZWN0ZWQgZGVsZXRlQ2hhclJpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0SW5kZXggPCB0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc2xpY2UoMCwgdGhpcy5pbnB1dEluZGV4KSArXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZS5zbGljZSh0aGlzLmlucHV0SW5kZXggKyAxKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxTQUNFLGFBQWEsUUFJUix1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
+// denoCacheMetadata=8818798192649543924,17999905195180302821 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/934dc04fa84b83650a23ea29851bb29cc527105c156123c5ce5212f4cc4dfe45.js b/vendor/gen/https/deno.land/934dc04fa84b83650a23ea29851bb29cc527105c156123c5ce5212f4cc4dfe45.js
new file mode 100644
index 0000000..6a10af8
--- /dev/null
+++ b/vendor/gen/https/deno.land/934dc04fa84b83650a23ea29851bb29cc527105c156123c5ce5212f4cc4dfe45.js
@@ -0,0 +1,485 @@
+import { CTOR_KEY } from "../constructor-lock.ts";
+import { NodeList, nodeListMutatorSym } from "./node-list.ts";
+import { insertBeforeAfter, isDocumentFragment, moveDocumentFragmentChildren } from "./utils.ts";
+export var NodeType = /*#__PURE__*/ function(NodeType) {
+ NodeType[NodeType["ELEMENT_NODE"] = 1] = "ELEMENT_NODE";
+ NodeType[NodeType["ATTRIBUTE_NODE"] = 2] = "ATTRIBUTE_NODE";
+ NodeType[NodeType["TEXT_NODE"] = 3] = "TEXT_NODE";
+ NodeType[NodeType["CDATA_SECTION_NODE"] = 4] = "CDATA_SECTION_NODE";
+ NodeType[NodeType["ENTITY_REFERENCE_NODE"] = 5] = "ENTITY_REFERENCE_NODE";
+ NodeType[NodeType["ENTITY_NODE"] = 6] = "ENTITY_NODE";
+ NodeType[NodeType["PROCESSING_INSTRUCTION_NODE"] = 7] = "PROCESSING_INSTRUCTION_NODE";
+ NodeType[NodeType["COMMENT_NODE"] = 8] = "COMMENT_NODE";
+ NodeType[NodeType["DOCUMENT_NODE"] = 9] = "DOCUMENT_NODE";
+ NodeType[NodeType["DOCUMENT_TYPE_NODE"] = 10] = "DOCUMENT_TYPE_NODE";
+ NodeType[NodeType["DOCUMENT_FRAGMENT_NODE"] = 11] = "DOCUMENT_FRAGMENT_NODE";
+ NodeType[NodeType["NOTATION_NODE"] = 12] = "NOTATION_NODE";
+ return NodeType;
+}({});
+/**
+ * Throws if any of the nodes are an ancestor
+ * of `parentNode`
+ */ export function nodesAndTextNodes(nodes, parentNode) {
+ return nodes.flatMap((n)=>{
+ if (isDocumentFragment(n)) {
+ const children = Array.from(n.childNodes);
+ moveDocumentFragmentChildren(n, parentNode);
+ return children;
+ } else {
+ const node = n instanceof Node ? n : new Text(String(n));
+ // Make sure the node isn't an ancestor of parentNode
+ if (n === node && parentNode) {
+ parentNode._assertNotAncestor(node);
+ }
+ // Remove from parentNode (if any)
+ node._remove(true);
+ // Set new parent
+ node._setParent(parentNode, true);
+ return [
+ node
+ ];
+ }
+ });
+}
+export class Node extends EventTarget {
+ nodeName;
+ nodeType;
+ #nodeValue;
+ parentNode;
+ #ownerDocument;
+ get parentElement() {
+ if (this.parentNode?.nodeType === NodeType.ELEMENT_NODE) {
+ return this.parentNode;
+ }
+ return null;
+ }
+ // Instance constants defined after Node
+ // class body below to avoid clutter
+ static ELEMENT_NODE = NodeType.ELEMENT_NODE;
+ static ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE;
+ static TEXT_NODE = NodeType.TEXT_NODE;
+ static CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE;
+ static ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE;
+ static ENTITY_NODE = NodeType.ENTITY_NODE;
+ static PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE;
+ static COMMENT_NODE = NodeType.COMMENT_NODE;
+ static DOCUMENT_NODE = NodeType.DOCUMENT_NODE;
+ static DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE;
+ static DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE;
+ static NOTATION_NODE = NodeType.NOTATION_NODE;
+ constructor(nodeName, nodeType, parentNode, key){
+ if (key !== CTOR_KEY) {
+ throw new TypeError("Illegal constructor.");
+ }
+ super(), this.nodeName = nodeName, this.nodeType = nodeType, this.#nodeValue = null, this.parentNode = null, this.#ownerDocument = null, this.#childNodes = null;
+ this.#nodeValue = null;
+ if (parentNode) {
+ parentNode.appendChild(this);
+ }
+ }
+ #childNodes;
+ get childNodes() {
+ return this.#childNodes || (this.#childNodes = new NodeList());
+ }
+ _getChildNodesMutator() {
+ return this.childNodes[nodeListMutatorSym]();
+ }
+ _hasInitializedChildNodes() {
+ return Boolean(this.#childNodes);
+ }
+ /**
+ * Update ancestor chain & owner document for this child
+ * and all its children.
+ */ _setParent(newParent, force = false) {
+ const sameParent = this.parentNode === newParent;
+ const shouldUpdateParentAndAncestors = !sameParent || force;
+ if (shouldUpdateParentAndAncestors) {
+ this.parentNode = newParent;
+ if (newParent) {
+ if (!sameParent) {
+ this._setOwnerDocument(newParent.#ownerDocument);
+ }
+ }
+ // Update ancestors for child nodes
+ if (this._hasInitializedChildNodes()) {
+ for (const child of this.childNodes){
+ child._setParent(this, shouldUpdateParentAndAncestors);
+ }
+ }
+ }
+ }
+ _assertNotAncestor(child) {
+ // Check this child isn't an ancestor
+ if (child.contains(this)) {
+ throw new DOMException("The new child is an ancestor of the parent");
+ }
+ }
+ _setOwnerDocument(document) {
+ if (this.#ownerDocument !== document) {
+ this.#ownerDocument = document;
+ if (this._hasInitializedChildNodes()) {
+ for (const child of this.childNodes){
+ child._setOwnerDocument(document);
+ }
+ }
+ }
+ }
+ contains(child) {
+ let node = child;
+ while(node){
+ if (node === this) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
+ }
+ get ownerDocument() {
+ return this.#ownerDocument;
+ }
+ get nodeValue() {
+ return this.#nodeValue;
+ }
+ set nodeValue(value) {
+ // Setting is ignored
+ }
+ get textContent() {
+ let out = "";
+ for (const child of this.childNodes){
+ switch(child.nodeType){
+ case NodeType.TEXT_NODE:
+ out += child.nodeValue;
+ break;
+ case NodeType.ELEMENT_NODE:
+ out += child.textContent;
+ break;
+ }
+ }
+ return out;
+ }
+ set textContent(content) {
+ for (const child of this.childNodes){
+ child._setParent(null);
+ }
+ this._getChildNodesMutator().splice(0, this.childNodes.length);
+ this.appendChild(new Text(content));
+ }
+ get firstChild() {
+ if (!this._hasInitializedChildNodes()) {
+ return null;
+ }
+ return this.childNodes[0] || null;
+ }
+ get lastChild() {
+ if (!this._hasInitializedChildNodes()) {
+ return null;
+ }
+ return this.childNodes[this.childNodes.length - 1] || null;
+ }
+ hasChildNodes() {
+ return this._hasInitializedChildNodes() && Boolean(this.childNodes.length);
+ }
+ cloneNode(deep = false) {
+ const copy = this._shallowClone();
+ copy._setOwnerDocument(this.ownerDocument);
+ if (deep && this._hasInitializedChildNodes()) {
+ for (const child of this.childNodes){
+ copy.appendChild(child.cloneNode(true));
+ }
+ }
+ return copy;
+ }
+ _shallowClone() {
+ throw new Error("Illegal invocation");
+ }
+ _remove(skipSetParent = false) {
+ const parent = this.parentNode;
+ if (parent) {
+ const nodeList = parent._getChildNodesMutator();
+ const idx = nodeList.indexOf(this);
+ nodeList.splice(idx, 1);
+ if (!skipSetParent) {
+ this._setParent(null);
+ }
+ }
+ }
+ appendChild(child) {
+ if (isDocumentFragment(child)) {
+ const mutator = this._getChildNodesMutator();
+ mutator.push(...child.childNodes);
+ moveDocumentFragmentChildren(child, this);
+ return child;
+ } else {
+ return child._appendTo(this);
+ }
+ }
+ _appendTo(parentNode) {
+ parentNode._assertNotAncestor(this); // FIXME: Should this really be a method?
+ const oldParentNode = this.parentNode;
+ // Check if we already own this child
+ if (oldParentNode === parentNode) {
+ if (parentNode._getChildNodesMutator().indexOf(this) !== -1) {
+ return this;
+ }
+ } else if (oldParentNode) {
+ this._remove();
+ }
+ this._setParent(parentNode, true);
+ parentNode._getChildNodesMutator().push(this);
+ return this;
+ }
+ removeChild(child) {
+ // Just copy Firefox's error messages
+ if (child && typeof child === "object") {
+ if (child.parentNode === this) {
+ child._remove();
+ return child;
+ } else {
+ throw new DOMException("Node.removeChild: The node to be removed is not a child of this node");
+ }
+ } else {
+ throw new TypeError("Node.removeChild: Argument 1 is not an object.");
+ }
+ }
+ replaceChild(newChild, oldChild) {
+ if (oldChild.parentNode !== this) {
+ throw new Error("Old child's parent is not the current node.");
+ }
+ oldChild._replaceWith(newChild);
+ return oldChild;
+ }
+ insertBefore(newNode, refNode) {
+ this._assertNotAncestor(newNode);
+ const mutator = this._getChildNodesMutator();
+ if (refNode === null) {
+ this.appendChild(newNode);
+ return newNode;
+ }
+ const index = mutator.indexOf(refNode);
+ if (index === -1) {
+ throw new Error("DOMException: Child to insert before is not a child of this node");
+ }
+ if (isDocumentFragment(newNode)) {
+ mutator.splice(index, 0, ...newNode.childNodes);
+ moveDocumentFragmentChildren(newNode, this);
+ } else {
+ const oldParentNode = newNode.parentNode;
+ const oldMutator = oldParentNode?._getChildNodesMutator();
+ if (oldMutator) {
+ oldMutator.splice(oldMutator.indexOf(newNode), 1);
+ }
+ newNode._setParent(this, oldParentNode !== this);
+ mutator.splice(index, 0, newNode);
+ }
+ return newNode;
+ }
+ _replaceWith(...nodes) {
+ if (this.parentNode) {
+ const parentNode = this.parentNode;
+ const mutator = parentNode._getChildNodesMutator();
+ let viableNextSibling = null;
+ {
+ const thisIndex = mutator.indexOf(this);
+ for(let i = thisIndex + 1; i < parentNode.childNodes.length; i++){
+ if (!nodes.includes(parentNode.childNodes[i])) {
+ viableNextSibling = parentNode.childNodes[i];
+ break;
+ }
+ }
+ }
+ nodes = nodesAndTextNodes(nodes, parentNode);
+ let index = viableNextSibling ? mutator.indexOf(viableNextSibling) : parentNode.childNodes.length;
+ let deleteNumber;
+ if (parentNode.childNodes[index - 1] === this) {
+ index--;
+ deleteNumber = 1;
+ } else {
+ deleteNumber = 0;
+ }
+ mutator.splice(index, deleteNumber, ...nodes);
+ this._setParent(null);
+ }
+ }
+ get nextSibling() {
+ const parent = this.parentNode;
+ if (!parent) {
+ return null;
+ }
+ const index = parent._getChildNodesMutator().indexOf(this);
+ const next = parent.childNodes[index + 1] || null;
+ return next;
+ }
+ get previousSibling() {
+ const parent = this.parentNode;
+ if (!parent) {
+ return null;
+ }
+ const index = parent._getChildNodesMutator().indexOf(this);
+ const prev = parent.childNodes[index - 1] || null;
+ return prev;
+ }
+ // Node.compareDocumentPosition()'s bitmask values
+ static DOCUMENT_POSITION_DISCONNECTED = 1;
+ static DOCUMENT_POSITION_PRECEDING = 2;
+ static DOCUMENT_POSITION_FOLLOWING = 4;
+ static DOCUMENT_POSITION_CONTAINS = 8;
+ static DOCUMENT_POSITION_CONTAINED_BY = 16;
+ static DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32;
+ /**
+ * FIXME: Does not implement attribute node checks
+ * ref: https://dom.spec.whatwg.org/#dom-node-comparedocumentposition
+ * MDN: https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition
+ */ compareDocumentPosition(other) {
+ if (other === this) {
+ return 0;
+ }
+ // Note: major browser implementations differ in their rejection error of
+ // non-Node or nullish values so we just copy the most relevant error message
+ // from Firefox
+ if (!(other instanceof Node)) {
+ throw new TypeError("Node.compareDocumentPosition: Argument 1 does not implement interface Node.");
+ }
+ let node1Root = other;
+ let node2Root = this;
+ const node1Hierarchy = [
+ node1Root
+ ];
+ const node2Hierarchy = [
+ node2Root
+ ];
+ while(node1Root.parentNode ?? node2Root.parentNode){
+ node1Root = node1Root.parentNode ? (node1Hierarchy.push(node1Root.parentNode), node1Root.parentNode) : node1Root;
+ node2Root = node2Root.parentNode ? (node2Hierarchy.push(node2Root.parentNode), node2Root.parentNode) : node2Root;
+ }
+ // Check if they don't share the same root node
+ if (node1Root !== node2Root) {
+ return Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | Node.DOCUMENT_POSITION_PRECEDING;
+ }
+ const longerHierarchy = node1Hierarchy.length > node2Hierarchy.length ? node1Hierarchy : node2Hierarchy;
+ const shorterHierarchy = longerHierarchy === node1Hierarchy ? node2Hierarchy : node1Hierarchy;
+ // Check if either is a container of the other
+ if (longerHierarchy[longerHierarchy.length - shorterHierarchy.length] === shorterHierarchy[0]) {
+ return longerHierarchy === node1Hierarchy ? Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING;
+ }
+ // Find their first common ancestor and see whether they
+ // are preceding or following
+ const longerStart = longerHierarchy.length - shorterHierarchy.length;
+ for(let i = shorterHierarchy.length - 1; i >= 0; i--){
+ const shorterHierarchyNode = shorterHierarchy[i];
+ const longerHierarchyNode = longerHierarchy[longerStart + i];
+ // We found the first common ancestor
+ if (longerHierarchyNode !== shorterHierarchyNode) {
+ const siblings = shorterHierarchyNode.parentNode._getChildNodesMutator();
+ if (siblings.indexOf(shorterHierarchyNode) < siblings.indexOf(longerHierarchyNode)) {
+ // Shorter is before longer
+ if (shorterHierarchy === node1Hierarchy) {
+ // Other is before this
+ return Node.DOCUMENT_POSITION_PRECEDING;
+ } else {
+ // This is before other
+ return Node.DOCUMENT_POSITION_FOLLOWING;
+ }
+ } else {
+ // Longer is before shorter
+ if (longerHierarchy === node1Hierarchy) {
+ // Other is before this
+ return Node.DOCUMENT_POSITION_PRECEDING;
+ } else {
+ // Other is after this
+ return Node.DOCUMENT_POSITION_FOLLOWING;
+ }
+ }
+ }
+ }
+ // FIXME: Should probably throw here because this
+ // point should be unreachable code as per the
+ // intended logic
+ return Node.DOCUMENT_POSITION_FOLLOWING;
+ }
+ getRootNode(opts = {}) {
+ if (this.parentNode) {
+ return this.parentNode.getRootNode(opts);
+ }
+ if (opts.composed && this.host) {
+ return this.host.getRootNode(opts);
+ }
+ return this;
+ }
+}
+Node.prototype.ELEMENT_NODE = NodeType.ELEMENT_NODE;
+Node.prototype.ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE;
+Node.prototype.TEXT_NODE = NodeType.TEXT_NODE;
+Node.prototype.CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE;
+Node.prototype.ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE;
+Node.prototype.ENTITY_NODE = NodeType.ENTITY_NODE;
+Node.prototype.PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE;
+Node.prototype.COMMENT_NODE = NodeType.COMMENT_NODE;
+Node.prototype.DOCUMENT_NODE = NodeType.DOCUMENT_NODE;
+Node.prototype.DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE;
+Node.prototype.DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE;
+Node.prototype.NOTATION_NODE = NodeType.NOTATION_NODE;
+export class CharacterData extends Node {
+ #nodeValue = "";
+ constructor(data, nodeName, nodeType, parentNode, key){
+ super(nodeName, nodeType, parentNode, key);
+ this.#nodeValue = data;
+ }
+ get nodeValue() {
+ return this.#nodeValue;
+ }
+ set nodeValue(value) {
+ this.#nodeValue = String(value ?? "");
+ }
+ get data() {
+ return this.#nodeValue;
+ }
+ set data(value) {
+ this.nodeValue = value;
+ }
+ get textContent() {
+ return this.#nodeValue;
+ }
+ set textContent(value) {
+ this.nodeValue = value;
+ }
+ get length() {
+ return this.data.length;
+ }
+ before(...nodes) {
+ if (this.parentNode) {
+ insertBeforeAfter(this, nodes, true);
+ }
+ }
+ after(...nodes) {
+ if (this.parentNode) {
+ insertBeforeAfter(this, nodes, false);
+ }
+ }
+ remove() {
+ this._remove();
+ }
+ replaceWith(...nodes) {
+ this._replaceWith(...nodes);
+ }
+}
+export class Text extends CharacterData {
+ constructor(text = ""){
+ super(String(text), "#text", NodeType.TEXT_NODE, null, CTOR_KEY);
+ }
+ _shallowClone() {
+ return new Text(this.textContent);
+ }
+}
+export class Comment extends CharacterData {
+ constructor(text = ""){
+ super(String(text), "#comment", NodeType.COMMENT_NODE, null, CTOR_KEY);
+ }
+ _shallowClone() {
+ return new Comment(this.textContent);
+ }
+ get textContent() {
+ return this.nodeValue;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL25vZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1RPUl9LRVkgfSBmcm9tIFwiLi4vY29uc3RydWN0b3ItbG9jay50c1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QsIE5vZGVMaXN0TXV0YXRvciwgbm9kZUxpc3RNdXRhdG9yU3ltIH0gZnJvbSBcIi4vbm9kZS1saXN0LnRzXCI7XG5pbXBvcnQge1xuICBpbnNlcnRCZWZvcmVBZnRlcixcbiAgaXNEb2N1bWVudEZyYWdtZW50LFxuICBtb3ZlRG9jdW1lbnRGcmFnbWVudENoaWxkcmVuLFxufSBmcm9tIFwiLi91dGlscy50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC50c1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50LnRzXCI7XG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RnJhZ21lbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1mcmFnbWVudC50c1wiO1xuXG5leHBvcnQgZW51bSBOb2RlVHlwZSB7XG4gIEVMRU1FTlRfTk9ERSA9IDEsXG4gIEFUVFJJQlVURV9OT0RFID0gMixcbiAgVEVYVF9OT0RFID0gMyxcbiAgQ0RBVEFfU0VDVElPTl9OT0RFID0gNCxcbiAgRU5USVRZX1JFRkVSRU5DRV9OT0RFID0gNSxcbiAgRU5USVRZX05PREUgPSA2LFxuICBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgPSA3LFxuICBDT01NRU5UX05PREUgPSA4LFxuICBET0NVTUVOVF9OT0RFID0gOSxcbiAgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTAsXG4gIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMSxcbiAgTk9UQVRJT05fTk9ERSA9IDEyLFxufVxuXG4vKipcbiAqIFRocm93cyBpZiBhbnkgb2YgdGhlIG5vZGVzIGFyZSBhbiBhbmNlc3RvclxuICogb2YgYHBhcmVudE5vZGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc0FuZFRleHROb2RlcyhcbiAgbm9kZXM6IChOb2RlIHwgdW5rbm93bilbXSxcbiAgcGFyZW50Tm9kZTogTm9kZSxcbik6IE5vZGVbXSB7XG4gIHJldHVybiBub2Rlcy5mbGF0TWFwKChuKSA9PiB7XG4gICAgaWYgKGlzRG9jdW1lbnRGcmFnbWVudChuIGFzIE5vZGUpKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oKG4gYXMgTm9kZSkuY2hpbGROb2Rlcyk7XG4gICAgICBtb3ZlRG9jdW1lbnRGcmFnbWVudENoaWxkcmVuKG4gYXMgRG9jdW1lbnRGcmFnbWVudCwgcGFyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGU6IE5vZGUgPSBuIGluc3RhbmNlb2YgTm9kZSA/IG4gOiBuZXcgVGV4dChTdHJpbmcobikpO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIG5vZGUgaXNuJ3QgYW4gYW5jZXN0b3Igb2YgcGFyZW50Tm9kZVxuICAgICAgaWYgKG4gPT09IG5vZGUgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLl9hc3NlcnROb3RBbmNlc3Rvcihub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIGZyb20gcGFyZW50Tm9kZSAoaWYgYW55KVxuICAgICAgbm9kZS5fcmVtb3ZlKHRydWUpO1xuXG4gICAgICAvLyBTZXQgbmV3IHBhcmVudFxuICAgICAgbm9kZS5fc2V0UGFyZW50KHBhcmVudE5vZGUsIHRydWUpO1xuICAgICAgcmV0dXJuIFtub2RlXTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTm9kZSBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI25vZGVWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBOb2RlIHwgbnVsbCA9IG51bGw7XG4gICNvd25lckRvY3VtZW50OiBEb2N1bWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGdldCBwYXJlbnRFbGVtZW50KCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5wYXJlbnROb2RlPy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBJbnN0YW5jZSBjb25zdGFudHMgZGVmaW5lZCBhZnRlciBOb2RlXG4gIC8vIGNsYXNzIGJvZHkgYmVsb3cgdG8gYXZvaWQgY2x1dHRlclxuICBzdGF0aWMgRUxFTUVOVF9OT0RFID0gTm9kZVR5cGUuRUxFTUVOVF9OT0RFO1xuICBzdGF0aWMgQVRUUklCVVRFX05PREUgPSBOb2RlVHlwZS5BVFRSSUJVVEVfTk9ERTtcbiAgc3RhdGljIFRFWFRfTk9ERSA9IE5vZGVUeXBlLlRFWFRfTk9ERTtcbiAgc3RhdGljIENEQVRBX1NFQ1RJT05fTk9ERSA9IE5vZGVUeXBlLkNEQVRBX1NFQ1RJT05fTk9ERTtcbiAgc3RhdGljIEVOVElUWV9SRUZFUkVOQ0VfTk9ERSA9IE5vZGVUeXBlLkVOVElUWV9SRUZFUkVOQ0VfTk9ERTtcbiAgc3RhdGljIEVOVElUWV9OT0RFID0gTm9kZVR5cGUuRU5USVRZX05PREU7XG4gIHN0YXRpYyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgPSBOb2RlVHlwZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7XG4gIHN0YXRpYyBDT01NRU5UX05PREUgPSBOb2RlVHlwZS5DT01NRU5UX05PREU7XG4gIHN0YXRpYyBET0NVTUVOVF9OT0RFID0gTm9kZVR5cGUuRE9DVU1FTlRfTk9ERTtcbiAgc3RhdGljIERPQ1VNRU5UX1RZUEVfTk9ERSA9IE5vZGVUeXBlLkRPQ1VNRU5UX1RZUEVfTk9ERTtcbiAgc3RhdGljIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSBOb2RlVHlwZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFO1xuICBzdGF0aWMgTk9UQVRJT05fTk9ERSA9IE5vZGVUeXBlLk5PVEFUSU9OX05PREU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5vZGVOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIG5vZGVUeXBlOiBOb2RlVHlwZSxcbiAgICBwYXJlbnROb2RlOiBOb2RlIHwgbnVsbCxcbiAgICBrZXk6IHR5cGVvZiBDVE9SX0tFWSxcbiAgKSB7XG4gICAgaWYgKGtleSAhPT0gQ1RPUl9LRVkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yLlwiKTtcbiAgICB9XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuI25vZGVWYWx1ZSA9IG51bGw7XG5cbiAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAjY2hpbGROb2RlczogTm9kZUxpc3QgfCBudWxsID0gbnVsbDtcbiAgZ2V0IGNoaWxkTm9kZXMoKTogTm9kZUxpc3Qge1xuICAgIHJldHVybiB0aGlzLiNjaGlsZE5vZGVzIHx8ICh0aGlzLiNjaGlsZE5vZGVzID0gbmV3IE5vZGVMaXN0KCkpO1xuICB9XG5cbiAgX2dldENoaWxkTm9kZXNNdXRhdG9yKCk6IE5vZGVMaXN0TXV0YXRvciB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2Rlc1tub2RlTGlzdE11dGF0b3JTeW1dKCk7XG4gIH1cblxuICBfaGFzSW5pdGlhbGl6ZWRDaGlsZE5vZGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuI2NoaWxkTm9kZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbmNlc3RvciBjaGFpbiAmIG93bmVyIGRvY3VtZW50IGZvciB0aGlzIGNoaWxkXG4gICAqIGFuZCBhbGwgaXRzIGNoaWxkcmVuLlxuICAgKi9cbiAgX3NldFBhcmVudChuZXdQYXJlbnQ6IE5vZGUgfCBudWxsLCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc2FtZVBhcmVudCA9IHRoaXMucGFyZW50Tm9kZSA9PT0gbmV3UGFyZW50O1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZVBhcmVudEFuZEFuY2VzdG9ycyA9ICFzYW1lUGFyZW50IHx8IGZvcmNlO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZVBhcmVudEFuZEFuY2VzdG9ycykge1xuICAgICAgdGhpcy5wYXJlbnROb2RlID0gbmV3UGFyZW50O1xuXG4gICAgICBpZiAobmV3UGFyZW50KSB7XG4gICAgICAgIGlmICghc2FtZVBhcmVudCkge1xuICAgICAgICAgIHRoaXMuX3NldE93bmVyRG9jdW1lbnQobmV3UGFyZW50LiNvd25lckRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgYW5jZXN0b3JzIGZvciBjaGlsZCBub2Rlc1xuICAgICAgaWYgKHRoaXMuX2hhc0luaXRpYWxpemVkQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICAgICAgY2hpbGQuX3NldFBhcmVudCh0aGlzLCBzaG91bGRVcGRhdGVQYXJlbnRBbmRBbmNlc3RvcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2Fzc2VydE5vdEFuY2VzdG9yKGNoaWxkOiBOb2RlKSB7XG4gICAgLy8gQ2hlY2sgdGhpcyBjaGlsZCBpc24ndCBhbiBhbmNlc3RvclxuICAgIGlmIChjaGlsZC5jb250YWlucyh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcIlRoZSBuZXcgY2hpbGQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHBhcmVudFwiKTtcbiAgICB9XG4gIH1cblxuICBfc2V0T3duZXJEb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnQgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuI293bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgICB0aGlzLiNvd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cbiAgICAgIGlmICh0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgICAgIGNoaWxkLl9zZXRPd25lckRvY3VtZW50KGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnRhaW5zKGNoaWxkOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgbGV0IG5vZGU6IE5vZGUgfCBudWxsID0gY2hpbGQ7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIGlmIChub2RlID09PSB0aGlzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBvd25lckRvY3VtZW50KCk6IERvY3VtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI293bmVyRG9jdW1lbnQ7XG4gIH1cblxuICBnZXQgbm9kZVZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLiNub2RlVmFsdWU7XG4gIH1cblxuICBzZXQgbm9kZVZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgLy8gU2V0dGluZyBpcyBpZ25vcmVkXG4gIH1cblxuICBnZXQgdGV4dENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICBsZXQgb3V0ID0gXCJcIjtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBzd2l0Y2ggKGNoaWxkLm5vZGVUeXBlKSB7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuVEVYVF9OT0RFOlxuICAgICAgICAgIG91dCArPSBjaGlsZC5ub2RlVmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICAgIG91dCArPSBjaGlsZC50ZXh0Q29udGVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgc2V0IHRleHRDb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBjaGlsZC5fc2V0UGFyZW50KG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMuX2dldENoaWxkTm9kZXNNdXRhdG9yKCkuc3BsaWNlKDAsIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFRleHQoY29udGVudCkpO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKTogTm9kZSB8IG51bGwge1xuICAgIGlmICghdGhpcy5faGFzSW5pdGlhbGl6ZWRDaGlsZE5vZGVzKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBsYXN0Q2hpbGQoKTogTm9kZSB8IG51bGwge1xuICAgIGlmICghdGhpcy5faGFzSW5pdGlhbGl6ZWRDaGlsZE5vZGVzKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXNbdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gIH1cblxuICBoYXNDaGlsZE5vZGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSAmJiBCb29sZWFuKHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICB9XG5cbiAgY2xvbmVOb2RlKGRlZXAgPSBmYWxzZSk6IE5vZGUge1xuICAgIGNvbnN0IGNvcHkgPSB0aGlzLl9zaGFsbG93Q2xvbmUoKTtcblxuICAgIGNvcHkuX3NldE93bmVyRG9jdW1lbnQodGhpcy5vd25lckRvY3VtZW50KTtcblxuICAgIGlmIChkZWVwICYmIHRoaXMuX2hhc0luaXRpYWxpemVkQ2hpbGROb2RlcygpKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgICBjb3B5LmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHkgYXMgdGhpcztcbiAgfVxuXG4gIF9zaGFsbG93Q2xvbmUoKTogTm9kZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgX3JlbW92ZShza2lwU2V0UGFyZW50ID0gZmFsc2UpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBjb25zdCBub2RlTGlzdCA9IHBhcmVudC5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICAgIGNvbnN0IGlkeCA9IG5vZGVMaXN0LmluZGV4T2YodGhpcyk7XG4gICAgICBub2RlTGlzdC5zcGxpY2UoaWR4LCAxKTtcblxuICAgICAgaWYgKCFza2lwU2V0UGFyZW50KSB7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudChudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBlbmRDaGlsZChjaGlsZDogTm9kZSk6IE5vZGUge1xuICAgIGlmIChpc0RvY3VtZW50RnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICBjb25zdCBtdXRhdG9yID0gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICAgIG11dGF0b3IucHVzaCguLi5jaGlsZC5jaGlsZE5vZGVzKTtcbiAgICAgIG1vdmVEb2N1bWVudEZyYWdtZW50Q2hpbGRyZW4oY2hpbGQsIHRoaXMpO1xuXG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaGlsZC5fYXBwZW5kVG8odGhpcyk7XG4gICAgfVxuICB9XG5cbiAgX2FwcGVuZFRvKHBhcmVudE5vZGU6IE5vZGUpOiB0aGlzIHtcbiAgICBwYXJlbnROb2RlLl9hc3NlcnROb3RBbmNlc3Rvcih0aGlzKTsgLy8gRklYTUU6IFNob3VsZCB0aGlzIHJlYWxseSBiZSBhIG1ldGhvZD9cbiAgICBjb25zdCBvbGRQYXJlbnROb2RlID0gdGhpcy5wYXJlbnROb2RlO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBvd24gdGhpcyBjaGlsZFxuICAgIGlmIChvbGRQYXJlbnROb2RlID09PSBwYXJlbnROb2RlKSB7XG4gICAgICBpZiAocGFyZW50Tm9kZS5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKS5pbmRleE9mKHRoaXMpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9sZFBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMuX3JlbW92ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3NldFBhcmVudChwYXJlbnROb2RlLCB0cnVlKTtcbiAgICBwYXJlbnROb2RlLl9nZXRDaGlsZE5vZGVzTXV0YXRvcigpLnB1c2godGhpcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZUNoaWxkKGNoaWxkOiBOb2RlKTogTm9kZSB7XG4gICAgLy8gSnVzdCBjb3B5IEZpcmVmb3gncyBlcnJvciBtZXNzYWdlc1xuICAgIGlmIChjaGlsZCAmJiB0eXBlb2YgY2hpbGQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChjaGlsZC5wYXJlbnROb2RlID09PSB0aGlzKSB7XG4gICAgICAgIGNoaWxkLl9yZW1vdmUoKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBcIk5vZGUucmVtb3ZlQ2hpbGQ6IFRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb2RlLnJlbW92ZUNoaWxkOiBBcmd1bWVudCAxIGlzIG5vdCBhbiBvYmplY3QuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VDaGlsZChuZXdDaGlsZDogTm9kZSwgb2xkQ2hpbGQ6IE5vZGUpOiBOb2RlIHtcbiAgICBpZiAob2xkQ2hpbGQucGFyZW50Tm9kZSAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT2xkIGNoaWxkJ3MgcGFyZW50IGlzIG5vdCB0aGUgY3VycmVudCBub2RlLlwiKTtcbiAgICB9XG5cbiAgICBvbGRDaGlsZC5fcmVwbGFjZVdpdGgobmV3Q2hpbGQpO1xuICAgIHJldHVybiBvbGRDaGlsZDtcbiAgfVxuXG4gIGluc2VydEJlZm9yZShuZXdOb2RlOiBOb2RlLCByZWZOb2RlOiBOb2RlIHwgbnVsbCk6IE5vZGUge1xuICAgIHRoaXMuX2Fzc2VydE5vdEFuY2VzdG9yKG5ld05vZGUpO1xuICAgIGNvbnN0IG11dGF0b3IgPSB0aGlzLl9nZXRDaGlsZE5vZGVzTXV0YXRvcigpO1xuXG4gICAgaWYgKHJlZk5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XG4gICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IG11dGF0b3IuaW5kZXhPZihyZWZOb2RlKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRE9NRXhjZXB0aW9uOiBDaGlsZCB0byBpbnNlcnQgYmVmb3JlIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEb2N1bWVudEZyYWdtZW50KG5ld05vZGUpKSB7XG4gICAgICBtdXRhdG9yLnNwbGljZShpbmRleCwgMCwgLi4ubmV3Tm9kZS5jaGlsZE5vZGVzKTtcbiAgICAgIG1vdmVEb2N1bWVudEZyYWdtZW50Q2hpbGRyZW4obmV3Tm9kZSwgdGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9sZFBhcmVudE5vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XG4gICAgICBjb25zdCBvbGRNdXRhdG9yID0gb2xkUGFyZW50Tm9kZT8uX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG5cbiAgICAgIGlmIChvbGRNdXRhdG9yKSB7XG4gICAgICAgIG9sZE11dGF0b3Iuc3BsaWNlKG9sZE11dGF0b3IuaW5kZXhPZihuZXdOb2RlKSwgMSk7XG4gICAgICB9XG5cbiAgICAgIG5ld05vZGUuX3NldFBhcmVudCh0aGlzLCBvbGRQYXJlbnROb2RlICE9PSB0aGlzKTtcbiAgICAgIG11dGF0b3Iuc3BsaWNlKGluZGV4LCAwLCBuZXdOb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbiAgfVxuXG4gIF9yZXBsYWNlV2l0aCguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgbXV0YXRvciA9IHBhcmVudE5vZGUuX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG4gICAgICBsZXQgdmlhYmxlTmV4dFNpYmxpbmc6IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgICAgIHtcbiAgICAgICAgY29uc3QgdGhpc0luZGV4ID0gbXV0YXRvci5pbmRleE9mKHRoaXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpc0luZGV4ICsgMTsgaSA8IHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghbm9kZXMuaW5jbHVkZXMocGFyZW50Tm9kZS5jaGlsZE5vZGVzW2ldKSkge1xuICAgICAgICAgICAgdmlhYmxlTmV4dFNpYmxpbmcgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGVzID0gbm9kZXNBbmRUZXh0Tm9kZXMobm9kZXMsIHBhcmVudE5vZGUpO1xuXG4gICAgICBsZXQgaW5kZXggPSB2aWFibGVOZXh0U2libGluZ1xuICAgICAgICA/IG11dGF0b3IuaW5kZXhPZih2aWFibGVOZXh0U2libGluZylcbiAgICAgICAgOiBwYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgbGV0IGRlbGV0ZU51bWJlcjtcbiAgICAgIGlmIChwYXJlbnROb2RlLmNoaWxkTm9kZXNbaW5kZXggLSAxXSA9PT0gdGhpcykge1xuICAgICAgICBpbmRleC0tO1xuICAgICAgICBkZWxldGVOdW1iZXIgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlTnVtYmVyID0gMDtcbiAgICAgIH1cbiAgICAgIG11dGF0b3Iuc3BsaWNlKGluZGV4LCBkZWxldGVOdW1iZXIsIC4uLihub2RlcyBhcyBOb2RlW10pKTtcbiAgICAgIHRoaXMuX3NldFBhcmVudChudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmV4dFNpYmxpbmcoKTogTm9kZSB8IG51bGwge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHBhcmVudC5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKS5pbmRleE9mKHRoaXMpO1xuICAgIGNvbnN0IG5leHQ6IE5vZGUgfCBudWxsID0gcGFyZW50LmNoaWxkTm9kZXNbaW5kZXggKyAxXSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBnZXQgcHJldmlvdXNTaWJsaW5nKCk6IE5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSBwYXJlbnQuX2dldENoaWxkTm9kZXNNdXRhdG9yKCkuaW5kZXhPZih0aGlzKTtcbiAgICBjb25zdCBwcmV2OiBOb2RlIHwgbnVsbCA9IHBhcmVudC5jaGlsZE5vZGVzW2luZGV4IC0gMV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBwcmV2O1xuICB9XG5cbiAgLy8gTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigpJ3MgYml0bWFzayB2YWx1ZXNcbiAgcHVibGljIHN0YXRpYyBET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQgPSAxIGFzIGNvbnN0O1xuICBwdWJsaWMgc3RhdGljIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyA9IDIgYXMgY29uc3Q7XG4gIHB1YmxpYyBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HID0gNCBhcyBjb25zdDtcbiAgcHVibGljIHN0YXRpYyBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyA9IDggYXMgY29uc3Q7XG4gIHB1YmxpYyBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZID0gMTYgYXMgY29uc3Q7XG4gIHB1YmxpYyBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgPSAzMiBhcyBjb25zdDtcblxuICAvKipcbiAgICogRklYTUU6IERvZXMgbm90IGltcGxlbWVudCBhdHRyaWJ1dGUgbm9kZSBjaGVja3NcbiAgICogcmVmOiBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ub2RlLWNvbXBhcmVkb2N1bWVudHBvc2l0aW9uXG4gICAqIE1ETjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvY29tcGFyZURvY3VtZW50UG9zaXRpb25cbiAgICovXG4gIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG90aGVyOiBOb2RlKTogbnVtYmVyIHtcbiAgICBpZiAob3RoZXIgPT09IHRoaXMpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IG1ham9yIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGRpZmZlciBpbiB0aGVpciByZWplY3Rpb24gZXJyb3Igb2ZcbiAgICAvLyBub24tTm9kZSBvciBudWxsaXNoIHZhbHVlcyBzbyB3ZSBqdXN0IGNvcHkgdGhlIG1vc3QgcmVsZXZhbnQgZXJyb3IgbWVzc2FnZVxuICAgIC8vIGZyb20gRmlyZWZveFxuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjogQXJndW1lbnQgMSBkb2VzIG5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlIE5vZGUuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBub2RlMVJvb3QgPSBvdGhlcjtcbiAgICBsZXQgbm9kZTJSb290ID0gdGhpcyBhcyBOb2RlO1xuICAgIGNvbnN0IG5vZGUxSGllcmFyY2h5ID0gW25vZGUxUm9vdF07XG4gICAgY29uc3Qgbm9kZTJIaWVyYXJjaHkgPSBbbm9kZTJSb290XTtcbiAgICB3aGlsZSAobm9kZTFSb290LnBhcmVudE5vZGUgPz8gbm9kZTJSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIG5vZGUxUm9vdCA9IG5vZGUxUm9vdC5wYXJlbnROb2RlXG4gICAgICAgID8gKG5vZGUxSGllcmFyY2h5LnB1c2gobm9kZTFSb290LnBhcmVudE5vZGUpLCBub2RlMVJvb3QucGFyZW50Tm9kZSlcbiAgICAgICAgOiBub2RlMVJvb3Q7XG4gICAgICBub2RlMlJvb3QgPSBub2RlMlJvb3QucGFyZW50Tm9kZVxuICAgICAgICA/IChub2RlMkhpZXJhcmNoeS5wdXNoKG5vZGUyUm9vdC5wYXJlbnROb2RlKSwgbm9kZTJSb290LnBhcmVudE5vZGUpXG4gICAgICAgIDogbm9kZTJSb290O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZXkgZG9uJ3Qgc2hhcmUgdGhlIHNhbWUgcm9vdCBub2RlXG4gICAgaWYgKG5vZGUxUm9vdCAhPT0gbm9kZTJSb290KSB7XG4gICAgICByZXR1cm4gTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQgfFxuICAgICAgICBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDIHxcbiAgICAgICAgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9uZ2VySGllcmFyY2h5ID0gbm9kZTFIaWVyYXJjaHkubGVuZ3RoID4gbm9kZTJIaWVyYXJjaHkubGVuZ3RoXG4gICAgICA/IG5vZGUxSGllcmFyY2h5XG4gICAgICA6IG5vZGUySGllcmFyY2h5O1xuICAgIGNvbnN0IHNob3J0ZXJIaWVyYXJjaHkgPSBsb25nZXJIaWVyYXJjaHkgPT09IG5vZGUxSGllcmFyY2h5XG4gICAgICA/IG5vZGUySGllcmFyY2h5XG4gICAgICA6IG5vZGUxSGllcmFyY2h5O1xuXG4gICAgLy8gQ2hlY2sgaWYgZWl0aGVyIGlzIGEgY29udGFpbmVyIG9mIHRoZSBvdGhlclxuICAgIGlmIChcbiAgICAgIGxvbmdlckhpZXJhcmNoeVtsb25nZXJIaWVyYXJjaHkubGVuZ3RoIC0gc2hvcnRlckhpZXJhcmNoeS5sZW5ndGhdID09PVxuICAgICAgICBzaG9ydGVySGllcmFyY2h5WzBdXG4gICAgKSB7XG4gICAgICByZXR1cm4gbG9uZ2VySGllcmFyY2h5ID09PSBub2RlMUhpZXJhcmNoeVxuICAgICAgICAvLyBvdGhlciBpcyBhIGNoaWxkIG9mIHRoaXNcbiAgICAgICAgPyBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HXG4gICAgICAgIC8vIHRoaXMgaXMgYSBjaGlsZCBvZiBvdGhlclxuICAgICAgICA6IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORztcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZWlyIGZpcnN0IGNvbW1vbiBhbmNlc3RvciBhbmQgc2VlIHdoZXRoZXIgdGhleVxuICAgIC8vIGFyZSBwcmVjZWRpbmcgb3IgZm9sbG93aW5nXG4gICAgY29uc3QgbG9uZ2VyU3RhcnQgPSBsb25nZXJIaWVyYXJjaHkubGVuZ3RoIC0gc2hvcnRlckhpZXJhcmNoeS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IHNob3J0ZXJIaWVyYXJjaHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHNob3J0ZXJIaWVyYXJjaHlOb2RlID0gc2hvcnRlckhpZXJhcmNoeVtpXTtcbiAgICAgIGNvbnN0IGxvbmdlckhpZXJhcmNoeU5vZGUgPSBsb25nZXJIaWVyYXJjaHlbbG9uZ2VyU3RhcnQgKyBpXTtcblxuICAgICAgLy8gV2UgZm91bmQgdGhlIGZpcnN0IGNvbW1vbiBhbmNlc3RvclxuICAgICAgaWYgKGxvbmdlckhpZXJhcmNoeU5vZGUgIT09IHNob3J0ZXJIaWVyYXJjaHlOb2RlKSB7XG4gICAgICAgIGNvbnN0IHNpYmxpbmdzID0gc2hvcnRlckhpZXJhcmNoeU5vZGUucGFyZW50Tm9kZSFcbiAgICAgICAgICAuX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNpYmxpbmdzLmluZGV4T2Yoc2hvcnRlckhpZXJhcmNoeU5vZGUpIDxcbiAgICAgICAgICAgIHNpYmxpbmdzLmluZGV4T2YobG9uZ2VySGllcmFyY2h5Tm9kZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gU2hvcnRlciBpcyBiZWZvcmUgbG9uZ2VyXG4gICAgICAgICAgaWYgKHNob3J0ZXJIaWVyYXJjaHkgPT09IG5vZGUxSGllcmFyY2h5KSB7XG4gICAgICAgICAgICAvLyBPdGhlciBpcyBiZWZvcmUgdGhpc1xuICAgICAgICAgICAgcmV0dXJuIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGJlZm9yZSBvdGhlclxuICAgICAgICAgICAgcmV0dXJuIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBMb25nZXIgaXMgYmVmb3JlIHNob3J0ZXJcbiAgICAgICAgICBpZiAobG9uZ2VySGllcmFyY2h5ID09PSBub2RlMUhpZXJhcmNoeSkge1xuICAgICAgICAgICAgLy8gT3RoZXIgaXMgYmVmb3JlIHRoaXNcbiAgICAgICAgICAgIHJldHVybiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXIgaXMgYWZ0ZXIgdGhpc1xuICAgICAgICAgICAgcmV0dXJuIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZJWE1FOiBTaG91bGQgcHJvYmFibHkgdGhyb3cgaGVyZSBiZWNhdXNlIHRoaXNcbiAgICAvLyBwb2ludCBzaG91bGQgYmUgdW5yZWFjaGFibGUgY29kZSBhcyBwZXIgdGhlXG4gICAgLy8gaW50ZW5kZWQgbG9naWNcbiAgICByZXR1cm4gTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIH1cblxuICBnZXRSb290Tm9kZShvcHRzOiB7IGNvbXBvc2VkPzogYm9vbGVhbiB9ID0ge30pOiBOb2RlIHtcbiAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmdldFJvb3ROb2RlKG9wdHMpO1xuICAgIH1cbiAgICBpZiAob3B0cy5jb21wb3NlZCAmJiAodGhpcyBhcyBhbnkpLmhvc3QpIHtcbiAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLmhvc3QuZ2V0Um9vdE5vZGUob3B0cyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIE5vZGUgaW5zdGFuY2UgYG5vZGVUeXBlYCBlbnVtIGNvbnN0YW50c1xuZXhwb3J0IGludGVyZmFjZSBOb2RlIHtcbiAgRUxFTUVOVF9OT0RFOiBOb2RlVHlwZTtcbiAgQVRUUklCVVRFX05PREU6IE5vZGVUeXBlO1xuICBURVhUX05PREU6IE5vZGVUeXBlO1xuICBDREFUQV9TRUNUSU9OX05PREU6IE5vZGVUeXBlO1xuICBFTlRJVFlfUkVGRVJFTkNFX05PREU6IE5vZGVUeXBlO1xuICBFTlRJVFlfTk9ERTogTm9kZVR5cGU7XG4gIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogTm9kZVR5cGU7XG4gIENPTU1FTlRfTk9ERTogTm9kZVR5cGU7XG4gIERPQ1VNRU5UX05PREU6IE5vZGVUeXBlO1xuICBET0NVTUVOVF9UWVBFX05PREU6IE5vZGVUeXBlO1xuICBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOiBOb2RlVHlwZTtcbiAgTk9UQVRJT05fTk9ERTogTm9kZVR5cGU7XG59XG5cbk5vZGUucHJvdG90eXBlLkVMRU1FTlRfTk9ERSA9IE5vZGVUeXBlLkVMRU1FTlRfTk9ERTtcbk5vZGUucHJvdG90eXBlLkFUVFJJQlVURV9OT0RFID0gTm9kZVR5cGUuQVRUUklCVVRFX05PREU7XG5Ob2RlLnByb3RvdHlwZS5URVhUX05PREUgPSBOb2RlVHlwZS5URVhUX05PREU7XG5Ob2RlLnByb3RvdHlwZS5DREFUQV9TRUNUSU9OX05PREUgPSBOb2RlVHlwZS5DREFUQV9TRUNUSU9OX05PREU7XG5Ob2RlLnByb3RvdHlwZS5FTlRJVFlfUkVGRVJFTkNFX05PREUgPSBOb2RlVHlwZS5FTlRJVFlfUkVGRVJFTkNFX05PREU7XG5Ob2RlLnByb3RvdHlwZS5FTlRJVFlfTk9ERSA9IE5vZGVUeXBlLkVOVElUWV9OT0RFO1xuTm9kZS5wcm90b3R5cGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFID1cbiAgTm9kZVR5cGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFO1xuTm9kZS5wcm90b3R5cGUuQ09NTUVOVF9OT0RFID0gTm9kZVR5cGUuQ09NTUVOVF9OT0RFO1xuTm9kZS5wcm90b3R5cGUuRE9DVU1FTlRfTk9ERSA9IE5vZGVUeXBlLkRPQ1VNRU5UX05PREU7XG5Ob2RlLnByb3RvdHlwZS5ET0NVTUVOVF9UWVBFX05PREUgPSBOb2RlVHlwZS5ET0NVTUVOVF9UWVBFX05PREU7XG5Ob2RlLnByb3RvdHlwZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gTm9kZVR5cGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTtcbk5vZGUucHJvdG90eXBlLk5PVEFUSU9OX05PREUgPSBOb2RlVHlwZS5OT1RBVElPTl9OT0RFO1xuXG5leHBvcnQgY2xhc3MgQ2hhcmFjdGVyRGF0YSBleHRlbmRzIE5vZGUge1xuICAjbm9kZVZhbHVlID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBzdHJpbmcsXG4gICAgbm9kZU5hbWU6IHN0cmluZyxcbiAgICBub2RlVHlwZTogTm9kZVR5cGUsXG4gICAgcGFyZW50Tm9kZTogTm9kZSB8IG51bGwsXG4gICAga2V5OiB0eXBlb2YgQ1RPUl9LRVksXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgbm9kZU5hbWUsXG4gICAgICBub2RlVHlwZSxcbiAgICAgIHBhcmVudE5vZGUsXG4gICAgICBrZXksXG4gICAgKTtcblxuICAgIHRoaXMuI25vZGVWYWx1ZSA9IGRhdGE7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgbm9kZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVWYWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCBub2RlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuI25vZGVWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyBcIlwiKTtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVWYWx1ZTtcbiAgfVxuXG4gIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm5vZGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IHRleHRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVWYWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCB0ZXh0Q29udGVudCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5ub2RlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGJlZm9yZSguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICBpbnNlcnRCZWZvcmVBZnRlcih0aGlzLCBub2RlcywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgYWZ0ZXIoLi4ubm9kZXM6IChOb2RlIHwgc3RyaW5nKVtdKSB7XG4gICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlQWZ0ZXIodGhpcywgbm9kZXMsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgdGhpcy5fcmVtb3ZlKCk7XG4gIH1cblxuICByZXBsYWNlV2l0aCguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICB0aGlzLl9yZXBsYWNlV2l0aCguLi5ub2Rlcyk7XG4gIH1cblxuICAvLyBUT0RPOiBJbXBsZW1lbnQgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLm5leHRFbGVtZW50U2libGluZywgZXRjXG4gIC8vIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NoYXJhY3RlckRhdGFcbn1cblxuZXhwb3J0IGNsYXNzIFRleHQgZXh0ZW5kcyBDaGFyYWN0ZXJEYXRhIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdGV4dDogc3RyaW5nID0gXCJcIixcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBTdHJpbmcodGV4dCksXG4gICAgICBcIiN0ZXh0XCIsXG4gICAgICBOb2RlVHlwZS5URVhUX05PREUsXG4gICAgICBudWxsLFxuICAgICAgQ1RPUl9LRVksXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIF9zaGFsbG93Q2xvbmUoKTogTm9kZSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0KHRoaXMudGV4dENvbnRlbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50IGV4dGVuZHMgQ2hhcmFjdGVyRGF0YSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRleHQ6IHN0cmluZyA9IFwiXCIsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgU3RyaW5nKHRleHQpLFxuICAgICAgXCIjY29tbWVudFwiLFxuICAgICAgTm9kZVR5cGUuQ09NTUVOVF9OT0RFLFxuICAgICAgbnVsbCxcbiAgICAgIENUT1JfS0VZLFxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBfc2hhbGxvd0Nsb25lKCk6IE5vZGUge1xuICAgIHJldHVybiBuZXcgQ29tbWVudCh0aGlzLnRleHRDb250ZW50KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCB0ZXh0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiA8c3RyaW5nPiB0aGlzLm5vZGVWYWx1ZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsUUFBUSxRQUFRLHlCQUF5QjtBQUNsRCxTQUFTLFFBQVEsRUFBbUIsa0JBQWtCLFFBQVEsaUJBQWlCO0FBQy9FLFNBQ0UsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQiw0QkFBNEIsUUFDdkIsYUFBYTtBQUtwQixPQUFPLElBQUEsQUFBSyxrQ0FBQTs7Ozs7Ozs7Ozs7OztTQUFBO01BYVg7QUFFRDs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsa0JBQ2QsS0FBeUIsRUFDekIsVUFBZ0I7RUFFaEIsT0FBTyxNQUFNLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCLElBQUksbUJBQW1CLElBQVk7TUFDakMsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLEFBQUMsRUFBVyxVQUFVO01BQ2xELDZCQUE2QixHQUF1QjtNQUNwRCxPQUFPO0lBQ1QsT0FBTztNQUNMLE1BQU0sT0FBYSxhQUFhLE9BQU8sSUFBSSxJQUFJLEtBQUssT0FBTztNQUUzRCxxREFBcUQ7TUFDckQsSUFBSSxNQUFNLFFBQVEsWUFBWTtRQUM1QixXQUFXLGtCQUFrQixDQUFDO01BQ2hDO01BRUEsa0NBQWtDO01BQ2xDLEtBQUssT0FBTyxDQUFDO01BRWIsaUJBQWlCO01BQ2pCLEtBQUssVUFBVSxDQUFDLFlBQVk7TUFDNUIsT0FBTztRQUFDO09BQUs7SUFDZjtFQUNGO0FBQ0Y7QUFFQSxPQUFPLE1BQU0sYUFBYTs7O0VBQ3hCLENBQUEsU0FBVSxDQUF1QjtFQUMxQixXQUErQjtFQUN0QyxDQUFBLGFBQWMsQ0FBeUI7RUFFdkMsSUFBSSxnQkFBZ0M7SUFDbEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsU0FBUyxZQUFZLEVBQUU7TUFDdkQsT0FBTyxJQUFJLENBQUMsVUFBVTtJQUN4QjtJQUVBLE9BQU87RUFDVDtFQUVBLHdDQUF3QztFQUN4QyxvQ0FBb0M7RUFDcEMsT0FBTyxlQUFlLFNBQVMsWUFBWSxDQUFDO0VBQzVDLE9BQU8saUJBQWlCLFNBQVMsY0FBYyxDQUFDO0VBQ2hELE9BQU8sWUFBWSxTQUFTLFNBQVMsQ0FBQztFQUN0QyxPQUFPLHFCQUFxQixTQUFTLGtCQUFrQixDQUFDO0VBQ3hELE9BQU8sd0JBQXdCLFNBQVMscUJBQXFCLENBQUM7RUFDOUQsT0FBTyxjQUFjLFNBQVMsV0FBVyxDQUFDO0VBQzFDLE9BQU8sOEJBQThCLFNBQVMsMkJBQTJCLENBQUM7RUFDMUUsT0FBTyxlQUFlLFNBQVMsWUFBWSxDQUFDO0VBQzVDLE9BQU8sZ0JBQWdCLFNBQVMsYUFBYSxDQUFDO0VBQzlDLE9BQU8scUJBQXFCLFNBQVMsa0JBQWtCLENBQUM7RUFDeEQsT0FBTyx5QkFBeUIsU0FBUyxzQkFBc0IsQ0FBQztFQUNoRSxPQUFPLGdCQUFnQixTQUFTLGFBQWEsQ0FBQztFQUU5QyxZQUNFLEFBQU8sUUFBZ0IsRUFDdkIsQUFBTyxRQUFrQixFQUN6QixVQUF1QixFQUN2QixHQUFvQixDQUNwQjtJQUNBLElBQUksUUFBUSxVQUFVO01BQ3BCLE1BQU0sSUFBSSxVQUFVO0lBQ3RCO0lBQ0EsS0FBSyxTQVJFLFdBQUEsZUFDQSxXQUFBLGVBN0JULENBQUEsU0FBVSxHQUFrQixXQUNyQixhQUEwQixXQUNqQyxDQUFBLGFBQWMsR0FBb0IsV0EyQ2xDLENBQUEsVUFBVyxHQUFvQjtJQVA3QixJQUFJLENBQUMsQ0FBQSxTQUFVLEdBQUc7SUFFbEIsSUFBSSxZQUFZO01BQ2QsV0FBVyxXQUFXLENBQUMsSUFBSTtJQUM3QjtFQUNGO0VBRUEsQ0FBQSxVQUFXLENBQXlCO0VBQ3BDLElBQUksYUFBdUI7SUFDekIsT0FBTyxJQUFJLENBQUMsQ0FBQSxVQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxVQUFXLEdBQUcsSUFBSSxVQUFVO0VBQy9EO0VBRUEsd0JBQXlDO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7RUFDNUM7RUFFQSw0QkFBcUM7SUFDbkMsT0FBTyxRQUFRLElBQUksQ0FBQyxDQUFBLFVBQVc7RUFDakM7RUFFQTs7O0dBR0MsR0FDRCxXQUFXLFNBQXNCLEVBQUUsUUFBUSxLQUFLLEVBQUU7SUFDaEQsTUFBTSxhQUFhLElBQUksQ0FBQyxVQUFVLEtBQUs7SUFDdkMsTUFBTSxpQ0FBaUMsQ0FBQyxjQUFjO0lBRXRELElBQUksZ0NBQWdDO01BQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUc7TUFFbEIsSUFBSSxXQUFXO1FBQ2IsSUFBSSxDQUFDLFlBQVk7VUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFBLGFBQWM7UUFDakQ7TUFDRjtNQUVBLG1DQUFtQztNQUNuQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSTtRQUNwQyxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFFO1VBQ25DLE1BQU0sVUFBVSxDQUFDLElBQUksRUFBRTtRQUN6QjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLG1CQUFtQixLQUFXLEVBQUU7SUFDOUIscUNBQXFDO0lBQ3JDLElBQUksTUFBTSxRQUFRLENBQUMsSUFBSSxHQUFHO01BQ3hCLE1BQU0sSUFBSSxhQUFhO0lBQ3pCO0VBQ0Y7RUFFQSxrQkFBa0IsUUFBeUIsRUFBRTtJQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFBLGFBQWMsS0FBSyxVQUFVO01BQ3BDLElBQUksQ0FBQyxDQUFBLGFBQWMsR0FBRztNQUV0QixJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSTtRQUNwQyxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFFO1VBQ25DLE1BQU0saUJBQWlCLENBQUM7UUFDMUI7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxTQUFTLEtBQVcsRUFBVztJQUM3QixJQUFJLE9BQW9CO0lBQ3hCLE1BQU8sS0FBTTtNQUNYLElBQUksU0FBUyxJQUFJLEVBQUU7UUFDakIsT0FBTztNQUNUO01BRUEsT0FBTyxLQUFLLFVBQVU7SUFDeEI7SUFFQSxPQUFPO0VBQ1Q7RUFFQSxJQUFJLGdCQUFpQztJQUNuQyxPQUFPLElBQUksQ0FBQyxDQUFBLGFBQWM7RUFDNUI7RUFFQSxJQUFJLFlBQTJCO0lBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUEsU0FBVTtFQUN4QjtFQUVBLElBQUksVUFBVSxLQUFjLEVBQUU7RUFDNUIscUJBQXFCO0VBQ3ZCO0VBRUEsSUFBSSxjQUFzQjtJQUN4QixJQUFJLE1BQU07SUFFVixLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFFO01BQ25DLE9BQVEsTUFBTSxRQUFRO1FBQ3BCLEtBQUssU0FBUyxTQUFTO1VBQ3JCLE9BQU8sTUFBTSxTQUFTO1VBQ3RCO1FBQ0YsS0FBSyxTQUFTLFlBQVk7VUFDeEIsT0FBTyxNQUFNLFdBQVc7VUFDeEI7TUFDSjtJQUNGO0lBRUEsT0FBTztFQUNUO0VBRUEsSUFBSSxZQUFZLE9BQWUsRUFBRTtJQUMvQixLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFFO01BQ25DLE1BQU0sVUFBVSxDQUFDO0lBQ25CO0lBRUEsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtJQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSztFQUM1QjtFQUVBLElBQUksYUFBMEI7SUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsSUFBSTtNQUNyQyxPQUFPO0lBQ1Q7SUFFQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJO0VBQy9CO0VBRUEsSUFBSSxZQUF5QjtJQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJO01BQ3JDLE9BQU87SUFDVDtJQUVBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUk7RUFDeEQ7RUFFQSxnQkFBeUI7SUFDdkIsT0FBTyxJQUFJLENBQUMseUJBQXlCLE1BQU0sUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07RUFDM0U7RUFFQSxVQUFVLE9BQU8sS0FBSyxFQUFRO0lBQzVCLE1BQU0sT0FBTyxJQUFJLENBQUMsYUFBYTtJQUUvQixLQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhO0lBRXpDLElBQUksUUFBUSxJQUFJLENBQUMseUJBQXlCLElBQUk7TUFDNUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBRTtRQUNuQyxLQUFLLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQztNQUNuQztJQUNGO0lBRUEsT0FBTztFQUNUO0VBRUEsZ0JBQXNCO0lBQ3BCLE1BQU0sSUFBSSxNQUFNO0VBQ2xCO0VBRUEsUUFBUSxnQkFBZ0IsS0FBSyxFQUFFO0lBQzdCLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVTtJQUU5QixJQUFJLFFBQVE7TUFDVixNQUFNLFdBQVcsT0FBTyxxQkFBcUI7TUFDN0MsTUFBTSxNQUFNLFNBQVMsT0FBTyxDQUFDLElBQUk7TUFDakMsU0FBUyxNQUFNLENBQUMsS0FBSztNQUVyQixJQUFJLENBQUMsZUFBZTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDO01BQ2xCO0lBQ0Y7RUFDRjtFQUVBLFlBQVksS0FBVyxFQUFRO0lBQzdCLElBQUksbUJBQW1CLFFBQVE7TUFDN0IsTUFBTSxVQUFVLElBQUksQ0FBQyxxQkFBcUI7TUFDMUMsUUFBUSxJQUFJLElBQUksTUFBTSxVQUFVO01BQ2hDLDZCQUE2QixPQUFPLElBQUk7TUFFeEMsT0FBTztJQUNULE9BQU87TUFDTCxPQUFPLE1BQU0sU0FBUyxDQUFDLElBQUk7SUFDN0I7RUFDRjtFQUVBLFVBQVUsVUFBZ0IsRUFBUTtJQUNoQyxXQUFXLGtCQUFrQixDQUFDLElBQUksR0FBRyx5Q0FBeUM7SUFDOUUsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDLFVBQVU7SUFFckMscUNBQXFDO0lBQ3JDLElBQUksa0JBQWtCLFlBQVk7TUFDaEMsSUFBSSxXQUFXLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQzNELE9BQU8sSUFBSTtNQUNiO0lBQ0YsT0FBTyxJQUFJLGVBQWU7TUFDeEIsSUFBSSxDQUFDLE9BQU87SUFDZDtJQUVBLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWTtJQUM1QixXQUFXLHFCQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJO0lBRTVDLE9BQU8sSUFBSTtFQUNiO0VBRUEsWUFBWSxLQUFXLEVBQVE7SUFDN0IscUNBQXFDO0lBQ3JDLElBQUksU0FBUyxPQUFPLFVBQVUsVUFBVTtNQUN0QyxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksRUFBRTtRQUM3QixNQUFNLE9BQU87UUFDYixPQUFPO01BQ1QsT0FBTztRQUNMLE1BQU0sSUFBSSxhQUNSO01BRUo7SUFDRixPQUFPO01BQ0wsTUFBTSxJQUFJLFVBQVU7SUFDdEI7RUFDRjtFQUVBLGFBQWEsUUFBYyxFQUFFLFFBQWMsRUFBUTtJQUNqRCxJQUFJLFNBQVMsVUFBVSxLQUFLLElBQUksRUFBRTtNQUNoQyxNQUFNLElBQUksTUFBTTtJQUNsQjtJQUVBLFNBQVMsWUFBWSxDQUFDO0lBQ3RCLE9BQU87RUFDVDtFQUVBLGFBQWEsT0FBYSxFQUFFLE9BQW9CLEVBQVE7SUFDdEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3hCLE1BQU0sVUFBVSxJQUFJLENBQUMscUJBQXFCO0lBRTFDLElBQUksWUFBWSxNQUFNO01BQ3BCLElBQUksQ0FBQyxXQUFXLENBQUM7TUFDakIsT0FBTztJQUNUO0lBRUEsTUFBTSxRQUFRLFFBQVEsT0FBTyxDQUFDO0lBQzlCLElBQUksVUFBVSxDQUFDLEdBQUc7TUFDaEIsTUFBTSxJQUFJLE1BQ1I7SUFFSjtJQUVBLElBQUksbUJBQW1CLFVBQVU7TUFDL0IsUUFBUSxNQUFNLENBQUMsT0FBTyxNQUFNLFFBQVEsVUFBVTtNQUM5Qyw2QkFBNkIsU0FBUyxJQUFJO0lBQzVDLE9BQU87TUFDTCxNQUFNLGdCQUFnQixRQUFRLFVBQVU7TUFDeEMsTUFBTSxhQUFhLGVBQWU7TUFFbEMsSUFBSSxZQUFZO1FBQ2QsV0FBVyxNQUFNLENBQUMsV0FBVyxPQUFPLENBQUMsVUFBVTtNQUNqRDtNQUVBLFFBQVEsVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsSUFBSTtNQUMvQyxRQUFRLE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDM0I7SUFFQSxPQUFPO0VBQ1Q7RUFFQSxhQUFhLEdBQUcsS0FBd0IsRUFBRTtJQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7TUFDbkIsTUFBTSxhQUFhLElBQUksQ0FBQyxVQUFVO01BQ2xDLE1BQU0sVUFBVSxXQUFXLHFCQUFxQjtNQUNoRCxJQUFJLG9CQUFpQztNQUNyQztRQUNFLE1BQU0sWUFBWSxRQUFRLE9BQU8sQ0FBQyxJQUFJO1FBQ3RDLElBQUssSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLFdBQVcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFLO1VBQ2pFLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxXQUFXLFVBQVUsQ0FBQyxFQUFFLEdBQUc7WUFDN0Msb0JBQW9CLFdBQVcsVUFBVSxDQUFDLEVBQUU7WUFDNUM7VUFDRjtRQUNGO01BQ0Y7TUFDQSxRQUFRLGtCQUFrQixPQUFPO01BRWpDLElBQUksUUFBUSxvQkFDUixRQUFRLE9BQU8sQ0FBQyxxQkFDaEIsV0FBVyxVQUFVLENBQUMsTUFBTTtNQUNoQyxJQUFJO01BQ0osSUFBSSxXQUFXLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0M7UUFDQSxlQUFlO01BQ2pCLE9BQU87UUFDTCxlQUFlO01BQ2pCO01BQ0EsUUFBUSxNQUFNLENBQUMsT0FBTyxpQkFBa0I7TUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNsQjtFQUNGO0VBRUEsSUFBSSxjQUEyQjtJQUM3QixNQUFNLFNBQVMsSUFBSSxDQUFDLFVBQVU7SUFFOUIsSUFBSSxDQUFDLFFBQVE7TUFDWCxPQUFPO0lBQ1Q7SUFFQSxNQUFNLFFBQVEsT0FBTyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsSUFBSTtJQUN6RCxNQUFNLE9BQW9CLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJO0lBRTFELE9BQU87RUFDVDtFQUVBLElBQUksa0JBQStCO0lBQ2pDLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVTtJQUU5QixJQUFJLENBQUMsUUFBUTtNQUNYLE9BQU87SUFDVDtJQUVBLE1BQU0sUUFBUSxPQUFPLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxJQUFJO0lBQ3pELE1BQU0sT0FBb0IsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUk7SUFFMUQsT0FBTztFQUNUO0VBRUEsa0RBQWtEO0VBQ2xELE9BQWMsaUNBQWlDLEVBQVc7RUFDMUQsT0FBYyw4QkFBOEIsRUFBVztFQUN2RCxPQUFjLDhCQUE4QixFQUFXO0VBQ3ZELE9BQWMsNkJBQTZCLEVBQVc7RUFDdEQsT0FBYyxpQ0FBaUMsR0FBWTtFQUMzRCxPQUFjLDRDQUE0QyxHQUFZO0VBRXRFOzs7O0dBSUMsR0FDRCx3QkFBd0IsS0FBVyxFQUFVO0lBQzNDLElBQUksVUFBVSxJQUFJLEVBQUU7TUFDbEIsT0FBTztJQUNUO0lBRUEseUVBQXlFO0lBQ3pFLDZFQUE2RTtJQUM3RSxlQUFlO0lBQ2YsSUFBSSxDQUFDLENBQUMsaUJBQWlCLElBQUksR0FBRztNQUM1QixNQUFNLElBQUksVUFDUjtJQUVKO0lBRUEsSUFBSSxZQUFZO0lBQ2hCLElBQUksWUFBWSxJQUFJO0lBQ3BCLE1BQU0saUJBQWlCO01BQUM7S0FBVTtJQUNsQyxNQUFNLGlCQUFpQjtNQUFDO0tBQVU7SUFDbEMsTUFBTyxVQUFVLFVBQVUsSUFBSSxVQUFVLFVBQVUsQ0FBRTtNQUNuRCxZQUFZLFVBQVUsVUFBVSxHQUM1QixDQUFDLGVBQWUsSUFBSSxDQUFDLFVBQVUsVUFBVSxHQUFHLFVBQVUsVUFBVSxJQUNoRTtNQUNKLFlBQVksVUFBVSxVQUFVLEdBQzVCLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxVQUFVLEdBQUcsVUFBVSxVQUFVLElBQ2hFO0lBQ047SUFFQSwrQ0FBK0M7SUFDL0MsSUFBSSxjQUFjLFdBQVc7TUFDM0IsT0FBTyxLQUFLLDhCQUE4QixHQUN4QyxLQUFLLHlDQUF5QyxHQUM5QyxLQUFLLDJCQUEyQjtJQUNwQztJQUVBLE1BQU0sa0JBQWtCLGVBQWUsTUFBTSxHQUFHLGVBQWUsTUFBTSxHQUNqRSxpQkFDQTtJQUNKLE1BQU0sbUJBQW1CLG9CQUFvQixpQkFDekMsaUJBQ0E7SUFFSiw4Q0FBOEM7SUFDOUMsSUFDRSxlQUFlLENBQUMsZ0JBQWdCLE1BQU0sR0FBRyxpQkFBaUIsTUFBTSxDQUFDLEtBQy9ELGdCQUFnQixDQUFDLEVBQUUsRUFDckI7TUFDQSxPQUFPLG9CQUFvQixpQkFFdkIsS0FBSyw4QkFBOEIsR0FBRyxLQUFLLDJCQUEyQixHQUV0RSxLQUFLLDBCQUEwQixHQUFHLEtBQUssMkJBQTJCO0lBQ3hFO0lBRUEsd0RBQXdEO0lBQ3hELDZCQUE2QjtJQUM3QixNQUFNLGNBQWMsZ0JBQWdCLE1BQU0sR0FBRyxpQkFBaUIsTUFBTTtJQUNwRSxJQUFLLElBQUksSUFBSSxpQkFBaUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUs7TUFDckQsTUFBTSx1QkFBdUIsZ0JBQWdCLENBQUMsRUFBRTtNQUNoRCxNQUFNLHNCQUFzQixlQUFlLENBQUMsY0FBYyxFQUFFO01BRTVELHFDQUFxQztNQUNyQyxJQUFJLHdCQUF3QixzQkFBc0I7UUFDaEQsTUFBTSxXQUFXLHFCQUFxQixVQUFVLENBQzdDLHFCQUFxQjtRQUV4QixJQUNFLFNBQVMsT0FBTyxDQUFDLHdCQUNmLFNBQVMsT0FBTyxDQUFDLHNCQUNuQjtVQUNBLDJCQUEyQjtVQUMzQixJQUFJLHFCQUFxQixnQkFBZ0I7WUFDdkMsdUJBQXVCO1lBQ3ZCLE9BQU8sS0FBSywyQkFBMkI7VUFDekMsT0FBTztZQUNMLHVCQUF1QjtZQUN2QixPQUFPLEtBQUssMkJBQTJCO1VBQ3pDO1FBQ0YsT0FBTztVQUNMLDJCQUEyQjtVQUMzQixJQUFJLG9CQUFvQixnQkFBZ0I7WUFDdEMsdUJBQXVCO1lBQ3ZCLE9BQU8sS0FBSywyQkFBMkI7VUFDekMsT0FBTztZQUNMLHNCQUFzQjtZQUN0QixPQUFPLEtBQUssMkJBQTJCO1VBQ3pDO1FBQ0Y7TUFDRjtJQUNGO0lBRUEsaURBQWlEO0lBQ2pELDhDQUE4QztJQUM5QyxpQkFBaUI7SUFDakIsT0FBTyxLQUFLLDJCQUEyQjtFQUN6QztFQUVBLFlBQVksT0FBK0IsQ0FBQyxDQUFDLEVBQVE7SUFDbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO01BQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDckM7SUFDQSxJQUFJLEtBQUssUUFBUSxJQUFJLEFBQUMsSUFBSSxDQUFTLElBQUksRUFBRTtNQUN2QyxPQUFPLEFBQUMsSUFBSSxDQUFTLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDeEM7SUFDQSxPQUFPLElBQUk7RUFDYjtBQUNGO0FBa0JBLEtBQUssU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLFlBQVk7QUFDbkQsS0FBSyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsY0FBYztBQUN2RCxLQUFLLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxTQUFTO0FBQzdDLEtBQUssU0FBUyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsa0JBQWtCO0FBQy9ELEtBQUssU0FBUyxDQUFDLHFCQUFxQixHQUFHLFNBQVMscUJBQXFCO0FBQ3JFLEtBQUssU0FBUyxDQUFDLFdBQVcsR0FBRyxTQUFTLFdBQVc7QUFDakQsS0FBSyxTQUFTLENBQUMsMkJBQTJCLEdBQ3hDLFNBQVMsMkJBQTJCO0FBQ3RDLEtBQUssU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLFlBQVk7QUFDbkQsS0FBSyxTQUFTLENBQUMsYUFBYSxHQUFHLFNBQVMsYUFBYTtBQUNyRCxLQUFLLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLGtCQUFrQjtBQUMvRCxLQUFLLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLHNCQUFzQjtBQUN2RSxLQUFLLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxhQUFhO0FBRXJELE9BQU8sTUFBTSxzQkFBc0I7RUFDakMsQ0FBQSxTQUFVLEdBQUcsR0FBRztFQUVoQixZQUNFLElBQVksRUFDWixRQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUF1QixFQUN2QixHQUFvQixDQUNwQjtJQUNBLEtBQUssQ0FDSCxVQUNBLFVBQ0EsWUFDQTtJQUdGLElBQUksQ0FBQyxDQUFBLFNBQVUsR0FBRztFQUNwQjtFQUVBLElBQWEsWUFBb0I7SUFDL0IsT0FBTyxJQUFJLENBQUMsQ0FBQSxTQUFVO0VBQ3hCO0VBRUEsSUFBYSxVQUFVLEtBQVUsRUFBRTtJQUNqQyxJQUFJLENBQUMsQ0FBQSxTQUFVLEdBQUcsT0FBTyxTQUFTO0VBQ3BDO0VBRUEsSUFBSSxPQUFlO0lBQ2pCLE9BQU8sSUFBSSxDQUFDLENBQUEsU0FBVTtFQUN4QjtFQUVBLElBQUksS0FBSyxLQUFVLEVBQUU7SUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRztFQUNuQjtFQUVBLElBQWEsY0FBc0I7SUFDakMsT0FBTyxJQUFJLENBQUMsQ0FBQSxTQUFVO0VBQ3hCO0VBRUEsSUFBYSxZQUFZLEtBQVUsRUFBRTtJQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHO0VBQ25CO0VBRUEsSUFBSSxTQUFpQjtJQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtFQUN6QjtFQUVBLE9BQU8sR0FBRyxLQUF3QixFQUFFO0lBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtNQUNuQixrQkFBa0IsSUFBSSxFQUFFLE9BQU87SUFDakM7RUFDRjtFQUVBLE1BQU0sR0FBRyxLQUF3QixFQUFFO0lBQ2pDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtNQUNuQixrQkFBa0IsSUFBSSxFQUFFLE9BQU87SUFDakM7RUFDRjtFQUVBLFNBQVM7SUFDUCxJQUFJLENBQUMsT0FBTztFQUNkO0VBRUEsWUFBWSxHQUFHLEtBQXdCLEVBQUU7SUFDdkMsSUFBSSxDQUFDLFlBQVksSUFBSTtFQUN2QjtBQUlGO0FBRUEsT0FBTyxNQUFNLGFBQWE7RUFDeEIsWUFDRSxPQUFlLEVBQUUsQ0FDakI7SUFDQSxLQUFLLENBQ0gsT0FBTyxPQUNQLFNBQ0EsU0FBUyxTQUFTLEVBQ2xCLE1BQ0E7RUFFSjtFQUVTLGdCQUFzQjtJQUM3QixPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVztFQUNsQztBQUNGO0FBRUEsT0FBTyxNQUFNLGdCQUFnQjtFQUMzQixZQUNFLE9BQWUsRUFBRSxDQUNqQjtJQUNBLEtBQUssQ0FDSCxPQUFPLE9BQ1AsWUFDQSxTQUFTLFlBQVksRUFDckIsTUFDQTtFQUVKO0VBRVMsZ0JBQXNCO0lBQzdCLE9BQU8sSUFBSSxRQUFRLElBQUksQ0FBQyxXQUFXO0VBQ3JDO0VBRUEsSUFBYSxjQUFzQjtJQUNqQyxPQUFnQixJQUFJLENBQUMsU0FBUztFQUNoQztBQUNGIn0=
+// denoCacheMetadata=12839600816431781389,13149568153198503621 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/9357f4868ca6ed11b518750d43038b4ab81a79b38ffd4e0f5dd2b6ac0b825b52.js b/vendor/gen/https/deno.land/9357f4868ca6ed11b518750d43038b4ab81a79b38ffd4e0f5dd2b6ac0b825b52.js
new file mode 100644
index 0000000..0335201
--- /dev/null
+++ b/vendor/gen/https/deno.land/9357f4868ca6ed11b518750d43038b4ab81a79b38ffd4e0f5dd2b6ac0b825b52.js
@@ -0,0 +1,67 @@
+import { GenericPrompt } from "./_generic_prompt.ts";
+import { GenericSuggestions } from "./_generic_suggestions.ts";
+import { brightBlue, normalize, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+/** Input prompt representation. */ export class Input extends GenericSuggestions {
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ if (typeof options === "string") {
+ options = {
+ message: options
+ };
+ }
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ listPointer: brightBlue(Figures.POINTER),
+ maxRows: 8,
+ minLength: 0,
+ maxLength: Infinity,
+ ...options
+ }).prompt();
+ }
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ success(value) {
+ this.saveSuggestions(value);
+ return super.success(value);
+ }
+ /** Get input value. */ getValue() {
+ return this.settings.files ? normalize(this.inputValue) : this.inputValue;
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ if (typeof value !== "string") {
+ return false;
+ }
+ if (value.length < this.settings.minLength) {
+ return `Value must be longer than ${this.settings.minLength} but has a length of ${value.length}.`;
+ }
+ if (value.length > this.settings.maxLength) {
+ return `Value can't be longer than ${this.settings.maxLength} but has a length of ${value.length}.`;
+ }
+ return true;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ return value.trim();
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return value;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L2lucHV0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdlbmVyaWNQcm9tcHQgfSBmcm9tIFwiLi9fZ2VuZXJpY19wcm9tcHQudHNcIjtcbmltcG9ydCB7XG4gIEdlbmVyaWNTdWdnZXN0aW9ucyxcbiAgR2VuZXJpY1N1Z2dlc3Rpb25zS2V5cyxcbiAgR2VuZXJpY1N1Z2dlc3Rpb25zT3B0aW9ucyxcbiAgR2VuZXJpY1N1Z2dlc3Rpb25zU2V0dGluZ3MsXG59IGZyb20gXCIuL19nZW5lcmljX3N1Z2dlc3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBicmlnaHRCbHVlLCBub3JtYWxpemUsIHllbGxvdyB9IGZyb20gXCIuL2RlcHMudHNcIjtcbmltcG9ydCB7IEZpZ3VyZXMgfSBmcm9tIFwiLi9maWd1cmVzLnRzXCI7XG5cbmV4cG9ydCB0eXBlIElucHV0S2V5cyA9IEdlbmVyaWNTdWdnZXN0aW9uc0tleXM7XG5cbi8qKiBJbnB1dCBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRPcHRpb25zXG4gIGV4dGVuZHMgR2VuZXJpY1N1Z2dlc3Rpb25zT3B0aW9uczxzdHJpbmcsIHN0cmluZz4ge1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAga2V5cz86IElucHV0S2V5cztcbn1cblxuLyoqIElucHV0IHByb21wdCBzZXR0aW5ncy4gKi9cbmludGVyZmFjZSBJbnB1dFNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY1N1Z2dlc3Rpb25zU2V0dGluZ3M8c3RyaW5nLCBzdHJpbmc+IHtcbiAgbWluTGVuZ3RoOiBudW1iZXI7XG4gIG1heExlbmd0aDogbnVtYmVyO1xuICBrZXlzPzogSW5wdXRLZXlzO1xufVxuXG4vKiogSW5wdXQgcHJvbXB0IHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IGNsYXNzIElucHV0IGV4dGVuZHMgR2VuZXJpY1N1Z2dlc3Rpb25zPHN0cmluZywgc3RyaW5nLCBJbnB1dFNldHRpbmdzPiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBwcm9tcHQgYW5kIHNob3cgY3Vyc29yIG9uIGVuZC4gKi9cbiAgcHVibGljIHN0YXRpYyBwcm9tcHQob3B0aW9uczogc3RyaW5nIHwgSW5wdXRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB7IG1lc3NhZ2U6IG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgcG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVJfU01BTEwpLFxuICAgICAgcHJlZml4OiB5ZWxsb3coXCI/IFwiKSxcbiAgICAgIGluZGVudDogXCIgXCIsXG4gICAgICBsaXN0UG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVIpLFxuICAgICAgbWF4Um93czogOCxcbiAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgIG1heExlbmd0aDogSW5maW5pdHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLnByb21wdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluamVjdCBwcm9tcHQgdmFsdWUuIENhbiBiZSB1c2VkIGZvciB1bml0IHRlc3RzIG9yIHByZSBzZWxlY3Rpb25zLlxuICAgKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGluamVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgR2VuZXJpY1Byb21wdC5pbmplY3QodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Y2Nlc3ModmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5zYXZlU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgIHJldHVybiBzdXBlci5zdWNjZXNzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBHZXQgaW5wdXQgdmFsdWUuICovXG4gIHByb3RlY3RlZCBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmZpbGVzID8gbm9ybWFsaXplKHRoaXMuaW5wdXRWYWx1ZSkgOiB0aGlzLmlucHV0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgaW5wdXQgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBVc2VyIGlucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3IgZXJyb3IgbWVzc2FnZSBvbiBlcnJvci5cbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB8IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgdGhpcy5zZXR0aW5ncy5taW5MZW5ndGgpIHtcbiAgICAgIHJldHVybiBgVmFsdWUgbXVzdCBiZSBsb25nZXIgdGhhbiAke3RoaXMuc2V0dGluZ3MubWluTGVuZ3RofSBidXQgaGFzIGEgbGVuZ3RoIG9mICR7dmFsdWUubGVuZ3RofS5gO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoID4gdGhpcy5zZXR0aW5ncy5tYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBgVmFsdWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gJHt0aGlzLnNldHRpbmdzLm1heExlbmd0aH0gYnV0IGhhcyBhIGxlbmd0aCBvZiAke3ZhbHVlLmxlbmd0aH0uYDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGlucHV0IHZhbHVlIHRvIG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGFBQWEsUUFBUSx1QkFBdUI7QUFDckQsU0FDRSxrQkFBa0IsUUFJYiw0QkFBNEI7QUFDbkMsU0FBUyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxZQUFZO0FBQzFELFNBQVMsT0FBTyxRQUFRLGVBQWU7QUFtQnZDLGlDQUFpQyxHQUNqQyxPQUFPLE1BQU0sY0FBYztFQUN6QiwrQ0FBK0MsR0FDL0MsT0FBYyxPQUFPLE9BQThCLEVBQW1CO0lBQ3BFLElBQUksT0FBTyxZQUFZLFVBQVU7TUFDL0IsVUFBVTtRQUFFLFNBQVM7TUFBUTtJQUMvQjtJQUVBLE9BQU8sSUFBSSxJQUFJLENBQUM7TUFDZCxTQUFTLFdBQVcsUUFBUSxhQUFhO01BQ3pDLFFBQVEsT0FBTztNQUNmLFFBQVE7TUFDUixhQUFhLFdBQVcsUUFBUSxPQUFPO01BQ3ZDLFNBQVM7TUFDVCxXQUFXO01BQ1gsV0FBVztNQUNYLEdBQUcsT0FBTztJQUNaLEdBQUcsTUFBTTtFQUNYO0VBRUE7OztHQUdDLEdBQ0QsT0FBYyxPQUFPLEtBQWEsRUFBUTtJQUN4QyxjQUFjLE1BQU0sQ0FBQztFQUN2QjtFQUVVLFFBQVEsS0FBYSxFQUFzQjtJQUNuRCxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3JCLE9BQU8sS0FBSyxDQUFDLFFBQVE7RUFDdkI7RUFFQSxxQkFBcUIsR0FDckIsQUFBVSxXQUFtQjtJQUMzQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVTtFQUMzRTtFQUVBOzs7O0dBSUMsR0FDRCxBQUFVLFNBQVMsS0FBYSxFQUFvQjtJQUNsRCxJQUFJLE9BQU8sVUFBVSxVQUFVO01BQzdCLE9BQU87SUFDVDtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7TUFDMUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRztJQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7TUFDMUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRztJQUNBLE9BQU87RUFDVDtFQUVBOzs7O0dBSUMsR0FDRCxBQUFVLFVBQVUsS0FBYSxFQUFzQjtJQUNyRCxPQUFPLE1BQU0sSUFBSTtFQUNuQjtFQUVBOzs7R0FHQyxHQUNELEFBQVUsT0FBTyxLQUFhLEVBQVU7SUFDdEMsT0FBTztFQUNUO0FBQ0YifQ==
+// denoCacheMetadata=9931490778005018295,14940612991006410141 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/936428dffbff71b213bd57d419fcb8b7be2b58766cef7c6e31478b4cf92d9d03.js b/vendor/gen/https/deno.land/936428dffbff71b213bd57d419fcb8b7be2b58766cef7c6e31478b4cf92d9d03.js
new file mode 100644
index 0000000..0e4c3ed
--- /dev/null
+++ b/vendor/gen/https/deno.land/936428dffbff71b213bd57d419fcb8b7be2b58766cef7c6e31478b4cf92d9d03.js
@@ -0,0 +1,5 @@
+/// <reference lib="dom" />
+/// <reference lib="dom.iterable" />
+export * from "https://deno.land/x/deno_dom@v0.1.49/deno-dom-wasm.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9kb20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgbGliPVwiZG9tXCIgLz5cbi8vLyA8cmVmZXJlbmNlIGxpYj1cImRvbS5pdGVyYWJsZVwiIC8+XG5leHBvcnQgKiBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQveC9kZW5vX2RvbUB2MC4xLjQ5L2Rlbm8tZG9tLXdhc20udHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0Isb0NBQW9DO0FBQ3BDLGNBQWMsd0RBQXdEIn0=
+// denoCacheMetadata=15843156102399148250,10821655885244681950 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/96837a0d8b9fa98caa6242855b2236f19c5c8132a4048efeb3e0037fe24644f4.js b/vendor/gen/https/deno.land/96837a0d8b9fa98caa6242855b2236f19c5c8132a4048efeb3e0037fe24644f4.js
new file mode 100644
index 0000000..126e14c
--- /dev/null
+++ b/vendor/gen/https/deno.land/96837a0d8b9fa98caa6242855b2236f19c5c8132a4048efeb3e0037fe24644f4.js
@@ -0,0 +1,5 @@
+/**
+ * Used to enforce illegal constructors
+ */ export const CTOR_KEY = Symbol("CTOR_KEY");
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvY29uc3RydWN0b3ItbG9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZWQgdG8gZW5mb3JjZSBpbGxlZ2FsIGNvbnN0cnVjdG9yc1xuICovXG5cbmV4cG9ydCBjb25zdCBDVE9SX0tFWSA9IFN5bWJvbChcIkNUT1JfS0VZXCIpO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztDQUVDLEdBRUQsT0FBTyxNQUFNLFdBQVcsT0FBTyxZQUFZIn0=
+// denoCacheMetadata=16982866296210629238,16468744999704106686 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/978202d32ddc6b8ca33e7a4952d156af6f8470aad796d45d91b4153c0c4abda6.js b/vendor/gen/https/deno.land/978202d32ddc6b8ca33e7a4952d156af6f8470aad796d45d91b4153c0c4abda6.js
new file mode 100644
index 0000000..531b0df
--- /dev/null
+++ b/vendor/gen/https/deno.land/978202d32ddc6b8ca33e7a4952d156af6f8470aad796d45d91b4153c0c4abda6.js
@@ -0,0 +1,48 @@
+import { CTOR_KEY } from "../constructor-lock.ts";
+import { nodesFromString } from "../deserialize.ts";
+import { DocumentType, HTMLDocument } from "./document.ts";
+export class DOMParser {
+ parseFromString(source, mimeType) {
+ if (mimeType !== "text/html") {
+ throw new Error(`DOMParser: "${mimeType}" unimplemented`); // TODO
+ }
+ const doc = new HTMLDocument(CTOR_KEY);
+ const fakeDoc = nodesFromString(source);
+ let htmlNode = null;
+ let hasDoctype = false;
+ for (const child of [
+ ...fakeDoc.childNodes
+ ]){
+ doc.appendChild(child);
+ if (child instanceof DocumentType) {
+ hasDoctype = true;
+ } else if (child.nodeName === "HTML") {
+ htmlNode = child;
+ }
+ }
+ if (!hasDoctype) {
+ const docType = new DocumentType("html", "", "", CTOR_KEY);
+ // doc.insertBefore(docType, doc.firstChild);
+ if (doc.childNodes.length === 0) {
+ doc.appendChild(docType);
+ } else {
+ doc.insertBefore(docType, doc.childNodes[0]);
+ }
+ }
+ if (htmlNode) {
+ for (const child of htmlNode.childNodes){
+ switch(child.tagName){
+ case "HEAD":
+ doc.head = child;
+ break;
+ case "BODY":
+ doc.body = child;
+ break;
+ }
+ }
+ }
+ return doc;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL2RvbS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1RPUl9LRVkgfSBmcm9tIFwiLi4vY29uc3RydWN0b3ItbG9jay50c1wiO1xuaW1wb3J0IHsgbm9kZXNGcm9tU3RyaW5nIH0gZnJvbSBcIi4uL2Rlc2VyaWFsaXplLnRzXCI7XG5pbXBvcnQgeyBEb2N1bWVudFR5cGUsIEhUTUxEb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50LnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LnRzXCI7XG5cbmV4cG9ydCB0eXBlIERPTVBhcnNlck1pbWVUeXBlID1cbiAgfCBcInRleHQvaHRtbFwiXG4gIHwgXCJ0ZXh0L3htbFwiXG4gIHwgXCJhcHBsaWNhdGlvbi94bWxcIlxuICB8IFwiYXBwbGljYXRpb24veGh0bWwreG1sXCJcbiAgfCBcImltYWdlL3N2Zyt4bWxcIjtcblxuZXhwb3J0IGNsYXNzIERPTVBhcnNlciB7XG4gIHBhcnNlRnJvbVN0cmluZyhcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBtaW1lVHlwZTogRE9NUGFyc2VyTWltZVR5cGUsXG4gICk6IEhUTUxEb2N1bWVudCB7XG4gICAgaWYgKG1pbWVUeXBlICE9PSBcInRleHQvaHRtbFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERPTVBhcnNlcjogXCIke21pbWVUeXBlfVwiIHVuaW1wbGVtZW50ZWRgKTsgLy8gVE9ET1xuICAgIH1cblxuICAgIGNvbnN0IGRvYyA9IG5ldyBIVE1MRG9jdW1lbnQoQ1RPUl9LRVkpO1xuXG4gICAgY29uc3QgZmFrZURvYyA9IG5vZGVzRnJvbVN0cmluZyhzb3VyY2UpO1xuICAgIGxldCBodG1sTm9kZTogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNEb2N0eXBlID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIFsuLi5mYWtlRG9jLmNoaWxkTm9kZXNdKSB7XG4gICAgICBkb2MuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBEb2N1bWVudFR5cGUpIHtcbiAgICAgICAgaGFzRG9jdHlwZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLm5vZGVOYW1lID09PSBcIkhUTUxcIikge1xuICAgICAgICBodG1sTm9kZSA9IDxFbGVtZW50PiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWhhc0RvY3R5cGUpIHtcbiAgICAgIGNvbnN0IGRvY1R5cGUgPSBuZXcgRG9jdW1lbnRUeXBlKFwiaHRtbFwiLCBcIlwiLCBcIlwiLCBDVE9SX0tFWSk7XG4gICAgICAvLyBkb2MuaW5zZXJ0QmVmb3JlKGRvY1R5cGUsIGRvYy5maXJzdENoaWxkKTtcbiAgICAgIGlmIChkb2MuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGRvY1R5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLmluc2VydEJlZm9yZShkb2NUeXBlLCBkb2MuY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGh0bWxOb2RlKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGh0bWxOb2RlLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgc3dpdGNoICgoPEVsZW1lbnQ+IGNoaWxkKS50YWdOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgICAgIGRvYy5oZWFkID0gPEVsZW1lbnQ+IGNoaWxkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkJPRFlcIjpcbiAgICAgICAgICAgIGRvYy5ib2R5ID0gPEVsZW1lbnQ+IGNoaWxkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxRQUFRLFFBQVEseUJBQXlCO0FBQ2xELFNBQVMsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTLFlBQVksRUFBRSxZQUFZLFFBQVEsZ0JBQWdCO0FBVTNELE9BQU8sTUFBTTtFQUNYLGdCQUNFLE1BQWMsRUFDZCxRQUEyQixFQUNiO0lBQ2QsSUFBSSxhQUFhLGFBQWE7TUFDNUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsU0FBUyxlQUFlLENBQUMsR0FBRyxPQUFPO0lBQ3BFO0lBRUEsTUFBTSxNQUFNLElBQUksYUFBYTtJQUU3QixNQUFNLFVBQVUsZ0JBQWdCO0lBQ2hDLElBQUksV0FBMkI7SUFDL0IsSUFBSSxhQUFhO0lBRWpCLEtBQUssTUFBTSxTQUFTO1NBQUksUUFBUSxVQUFVO0tBQUMsQ0FBRTtNQUMzQyxJQUFJLFdBQVcsQ0FBQztNQUVoQixJQUFJLGlCQUFpQixjQUFjO1FBQ2pDLGFBQWE7TUFDZixPQUFPLElBQUksTUFBTSxRQUFRLEtBQUssUUFBUTtRQUNwQyxXQUFxQjtNQUN2QjtJQUNGO0lBRUEsSUFBSSxDQUFDLFlBQVk7TUFDZixNQUFNLFVBQVUsSUFBSSxhQUFhLFFBQVEsSUFBSSxJQUFJO01BQ2pELDZDQUE2QztNQUM3QyxJQUFJLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxHQUFHO1FBQy9CLElBQUksV0FBVyxDQUFDO01BQ2xCLE9BQU87UUFDTCxJQUFJLFlBQVksQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLEVBQUU7TUFDN0M7SUFDRjtJQUVBLElBQUksVUFBVTtNQUNaLEtBQUssTUFBTSxTQUFTLFNBQVMsVUFBVSxDQUFFO1FBQ3ZDLE9BQVEsQUFBVyxNQUFPLE9BQU87VUFDL0IsS0FBSztZQUNILElBQUksSUFBSSxHQUFhO1lBQ3JCO1VBQ0YsS0FBSztZQUNILElBQUksSUFBSSxHQUFhO1lBQ3JCO1FBQ0o7TUFDRjtJQUNGO0lBRUEsT0FBTztFQUNUO0FBQ0YifQ==
+// denoCacheMetadata=15918585765417562359,15756952364380734859 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/98009cf0d9b7bf8c93ccedf9d4efb562d421fed638e1c6419615658575f37e70.js b/vendor/gen/https/deno.land/98009cf0d9b7bf8c93ccedf9d4efb562d421fed638e1c6419615658575f37e70.js
new file mode 100644
index 0000000..a49bbb9
--- /dev/null
+++ b/vendor/gen/https/deno.land/98009cf0d9b7bf8c93ccedf9d4efb562d421fed638e1c6419615658575f37e70.js
@@ -0,0 +1,3 @@
+// deno-lint-ignore-file no-explicit-any
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkZW5vLWxpbnQtaWdub3JlLWZpbGUgbm8tZXhwbGljaXQtYW55XG5cbmltcG9ydCB0eXBlIHtcbiAgQXJndW1lbnRPcHRpb25zLFxuICBBcmd1bWVudFZhbHVlLFxuICBEZWZhdWx0VmFsdWUsXG4gIEZsYWdPcHRpb25zLFxuICBUeXBlSGFuZGxlcixcbiAgVmFsdWVIYW5kbGVyLFxufSBmcm9tIFwiLi4vZmxhZ3MvdHlwZXMudHNcIjtcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vX2Vycm9ycy50c1wiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiO1xuaW1wb3J0IHR5cGUgeyBIZWxwT3B0aW9ucyB9IGZyb20gXCIuL2hlbHAvX2hlbHBfZ2VuZXJhdG9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiLi90eXBlLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgQXJndW1lbnRWYWx1ZSwgRGVmYXVsdFZhbHVlLCBUeXBlSGFuZGxlciB9O1xuXG50eXBlIE1lcmdlPFQsIFY+ID0gVCBleHRlbmRzIHZvaWQgPyBWIDogViBleHRlbmRzIHZvaWQgPyBUIDogVCAmIFY7XG5cbmV4cG9ydCB0eXBlIFR5cGVPclR5cGVIYW5kbGVyPFRWYWx1ZT4gPSBUeXBlPFRWYWx1ZT4gfCBUeXBlSGFuZGxlcjxUVmFsdWU+O1xuXG50eXBlIElkPFRWYWx1ZT4gPSBUVmFsdWUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICA/IFRWYWx1ZSBleHRlbmRzIGluZmVyIFUgPyB7IFtLIGluIGtleW9mIFVdOiBJZDxVW0tdPiB9IDogbmV2ZXJcbiAgOiBUVmFsdWU7XG5cbmV4cG9ydCB0eXBlIE1hcFR5cGVzPFQ+ID0gVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8dW5rbm93bj5cbiAgPyB7IFtLIGluIGtleW9mIFRdOiBNYXBUeXBlczxUW0tdPiB9XG4gIDogVHlwZS5pbmZlcjxUPjtcblxuLyogQ09NTUFORCBUWVBFUyAqL1xuXG4vKiogRGVzY3JpcHRpb24gaGFuZGxlci4gKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0aW9uPFxuICBUT3B0aW9ucyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gYW55LFxuICBUQXJndW1lbnRzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBUR2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUR2xvYmFsVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB1bmRlZmluZWQsXG4+ID1cbiAgfCBzdHJpbmdcbiAgfCBEZXNjcmlwdGlvbkhhbmRsZXI8XG4gICAgVE9wdGlvbnMsXG4gICAgVEFyZ3VtZW50cyxcbiAgICBUR2xvYmFscyxcbiAgICBUUGFyZW50R2xvYmFscyxcbiAgICBUVHlwZXMsXG4gICAgVEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+O1xuXG4vKiogRGVzY3JpcHRpb24gaGFuZGxlci4gKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0aW9uSGFuZGxlcjxcbiAgVE9wdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgVEFyZ3VtZW50cyBleHRlbmRzIEFycmF5PHVua25vd24+ID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgVEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50R2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVEdsb2JhbFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50VHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdW5kZWZpbmVkLFxuPiA9IChcbiAgdGhpczogQ29tbWFuZDxcbiAgICBUUGFyZW50R2xvYmFscyxcbiAgICBUUGFyZW50VHlwZXMsXG4gICAgVE9wdGlvbnMsXG4gICAgVEFyZ3VtZW50cyxcbiAgICBUR2xvYmFscyxcbiAgICBUVHlwZXMsXG4gICAgVEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID4sXG4pID0+IHN0cmluZztcblxuLyoqIEFjdGlvbiBoYW5kbGVyIGZvciBjb21tYW5kcyBhbmQgb3B0aW9ucy4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvbkhhbmRsZXI8XG4gIFRPcHRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIFRBcmd1bWVudHMgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIFRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRHbG9iYWxUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHVuZGVmaW5lZCxcbj4gPSAoXG4gIHRoaXM6IENvbW1hbmQ8XG4gICAgVFBhcmVudEdsb2JhbHMsXG4gICAgVFBhcmVudFR5cGVzLFxuICAgIFRPcHRpb25zLFxuICAgIFRBcmd1bWVudHMsXG4gICAgVEdsb2JhbHMsXG4gICAgVFR5cGVzLFxuICAgIFRHbG9iYWxUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+LFxuICBvcHRpb25zOiBNYXBUeXBlczxNZXJnZTxUUGFyZW50R2xvYmFscywgTWVyZ2U8VEdsb2JhbHMsIFRPcHRpb25zPj4+LFxuICAuLi5hcmdzOiBNYXBUeXBlczxUQXJndW1lbnRzPlxuKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPjtcblxuLyoqIEFyZ3VtZW50IGRldGFpbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFyZ3VtZW50IGV4dGVuZHMgQXJndW1lbnRPcHRpb25zIHtcbiAgLyoqIEFyZ3VtZW50IG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNoZWxsIGNvbXBsZXRpb24gYWN0aW9uLiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEFyZ3VtZW50cyB0eXBlLiAqL1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKiBSZXN1bHQgb2YgYGNtZC5wYXJzZSgpYCBtZXRob2QuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRSZXN1bHQ8XG4gIFRPcHRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIFRBcmd1bWVudHMgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIFRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRHbG9iYWxUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHVuZGVmaW5lZCxcbj4ge1xuICBvcHRpb25zOiBJZDxNZXJnZTxNZXJnZTxUUGFyZW50R2xvYmFscywgVEdsb2JhbHM+LCBUT3B0aW9ucz4+O1xuICBhcmdzOiBUQXJndW1lbnRzO1xuICBsaXRlcmFsOiBzdHJpbmdbXTtcbiAgY21kOiBDb21tYW5kPFxuICAgIFRQYXJlbnRHbG9iYWxzLFxuICAgIFRQYXJlbnRUeXBlcyxcbiAgICBUT3B0aW9ucyxcbiAgICBUQXJndW1lbnRzLFxuICAgIFRHbG9iYWxzLFxuICAgIFRUeXBlcyxcbiAgICBUR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPjtcbn1cblxuLyogT1BUSU9OIFRZUEVTICovXG5cbmV4cG9ydCB0eXBlIE9wdGlvblZhbHVlSGFuZGxlcjxUVmFsdWUgPSBhbnksIFRSZXR1cm4gPSBUVmFsdWU+ID0gVmFsdWVIYW5kbGVyPFxuICBUVmFsdWUsXG4gIFRSZXR1cm5cbj47XG5cbnR5cGUgRXhjbHVkZWRDb21tYW5kT3B0aW9ucyA9XG4gIHwgXCJuYW1lXCJcbiAgfCBcImFyZ3NcIlxuICB8IFwidHlwZVwiXG4gIHwgXCJvcHRpb25hbFZhbHVlXCJcbiAgfCBcInJlcXVpcmVkVmFsdWVcIlxuICB8IFwiYWxpYXNlc1wiXG4gIHwgXCJ2YXJpYWRpY1wiXG4gIHwgXCJsaXN0XCJcbiAgfCBcInZhbHVlXCJcbiAgfCBcImRlZmF1bHRcIjtcblxuLyoqIENvbW1hbmQgb3B0aW9uIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbE9wdGlvbk9wdGlvbnM8XG4gIFRPcHRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIFRBcmd1bWVudHMgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIFRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRHbG9iYWxUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBPbWl0PEZsYWdPcHRpb25zLCBFeGNsdWRlZENvbW1hbmRPcHRpb25zPiB7XG4gIG92ZXJyaWRlPzogYm9vbGVhbjtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgYWN0aW9uPzogQWN0aW9uSGFuZGxlcjxcbiAgICBUT3B0aW9ucyxcbiAgICBUQXJndW1lbnRzLFxuICAgIFRHbG9iYWxzLFxuICAgIFRQYXJlbnRHbG9iYWxzLFxuICAgIFRUeXBlcyxcbiAgICBUR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID47XG4gIHByZXBlbmQ/OiBib29sZWFuO1xuICB2YWx1ZT86IE9wdGlvblZhbHVlSGFuZGxlcjtcbiAgZGVmYXVsdD86IERlZmF1bHRWYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25PcHRpb25zPFxuICBUT3B0aW9ucyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gYW55LFxuICBUQXJndW1lbnRzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBUR2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUR2xvYmFsVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB1bmRlZmluZWQsXG4+IGV4dGVuZHNcbiAgR2xvYmFsT3B0aW9uT3B0aW9uczxcbiAgICBUT3B0aW9ucyxcbiAgICBUQXJndW1lbnRzLFxuICAgIFRHbG9iYWxzLFxuICAgIFRQYXJlbnRHbG9iYWxzLFxuICAgIFRUeXBlcyxcbiAgICBUR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID4ge1xuICBnbG9iYWw/OiBib29sZWFuO1xufVxuXG4vKiogQ29tbWFuZCBvcHRpb24gc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbjxcbiAgVE9wdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgVEFyZ3VtZW50cyBleHRlbmRzIEFycmF5PHVua25vd24+ID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgVEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50R2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVEdsb2JhbFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50VHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdW5kZWZpbmVkLFxuPiBleHRlbmRzXG4gIE9wdGlvbk9wdGlvbnM8XG4gICAgVE9wdGlvbnMsXG4gICAgVEFyZ3VtZW50cyxcbiAgICBUR2xvYmFscyxcbiAgICBUUGFyZW50R2xvYmFscyxcbiAgICBUVHlwZXMsXG4gICAgVEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+LFxuICBPbWl0PEZsYWdPcHRpb25zLCBcInZhbHVlXCI+IHtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZmxhZ3M6IEFycmF5PHN0cmluZz47XG4gIHR5cGVEZWZpbml0aW9uPzogc3RyaW5nO1xuICBhcmdzOiBBcmd1bWVudFtdO1xuICBncm91cE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qIEVOViBWQVJTIFRZUEVTICovXG5cbmV4cG9ydCB0eXBlIEVudlZhclZhbHVlSGFuZGxlcjxUVmFsdWUgPSBhbnksIFRSZXR1cm4gPSBUVmFsdWU+ID0gKFxuICB2YWw6IFRWYWx1ZSxcbikgPT4gVFJldHVybjtcblxuLyoqIEVudmlyb25tZW50IHZhcmlhYmxlIG9wdGlvbnMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsRW52VmFyT3B0aW9ucyB7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcHJlZml4Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB2YWx1ZT86IEVudlZhclZhbHVlSGFuZGxlcjtcbn1cblxuLyoqIEVudmlyb25tZW50IHZhcmlhYmxlIG9wdGlvbnMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52VmFyT3B0aW9ucyBleHRlbmRzIEdsb2JhbEVudlZhck9wdGlvbnMge1xuICBnbG9iYWw/OiBib29sZWFuO1xufVxuXG4vKiogRW52aXJvbm1lbnQgdmFyaWFibGUgc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudlZhciBleHRlbmRzIEVudlZhck9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIG5hbWVzOiBzdHJpbmdbXTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBkZXRhaWxzOiBBcmd1bWVudDtcbn1cblxuLyogVFlQRSBUWVBFUyAqL1xuXG4vKiogVHlwZSBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlT3B0aW9ucyB7XG4gIG92ZXJyaWRlPzogYm9vbGVhbjtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbn1cblxuLyoqIFR5cGUgc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEZWYgZXh0ZW5kcyBUeXBlT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaGFuZGxlcjogVHlwZTx1bmtub3duPiB8IFR5cGVIYW5kbGVyPHVua25vd24+O1xufVxuXG4vKiBFWEFNUExFIFRZUEVTICovXG5cbi8qKiBFeGFtcGxlIHNldHRpbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGFtcGxlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiBDT01QTEVUSU9OIFRZUEVTICovXG5cbi8qKiBDb21wbGV0aW9uIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlT3B0aW9ucyB7XG4gIG92ZXJyaWRlPzogYm9vbGVhbjtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbn1cblxuLyoqIENvbXBsZXRpb24gc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb248XG4gIFRPcHRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBhbnksXG4gIFRBcmd1bWVudHMgZXh0ZW5kcyBBcnJheTx1bmtub3duPiA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55IDogW10sXG4gIFRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRHbG9iYWxUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQ8YW55PiB8IHVuZGVmaW5lZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBDb21wbGV0ZU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbXBsZXRlOiBDb21wbGV0ZUhhbmRsZXI8XG4gICAgVE9wdGlvbnMsXG4gICAgVEFyZ3VtZW50cyxcbiAgICBUR2xvYmFscyxcbiAgICBUUGFyZW50R2xvYmFscyxcbiAgICBUVHlwZXMsXG4gICAgVEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+O1xufVxuXG5leHBvcnQgdHlwZSBDb21wbGV0ZUhhbmRsZXJSZXN1bHQgPVxuICB8IEFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+XG4gIHwgUHJvbWlzZTxBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPj47XG5cbmV4cG9ydCB0eXBlIFZhbHVlc0hhbmRsZXJSZXN1bHQgPSBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuLyoqIFR5cGUgcGFyc2VyIG1ldGhvZC4gKi9cbmV4cG9ydCB0eXBlIENvbXBsZXRlSGFuZGxlcjxcbiAgVE9wdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgVEFyZ3VtZW50cyBleHRlbmRzIEFycmF5PHVua25vd24+ID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgVEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50R2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVEdsb2JhbFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50VHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdW5kZWZpbmVkLFxuPiA9IChcbiAgY21kOiBDb21tYW5kPFxuICAgIFRQYXJlbnRHbG9iYWxzLFxuICAgIFRQYXJlbnRUeXBlcyxcbiAgICBUT3B0aW9ucyxcbiAgICBUQXJndW1lbnRzLFxuICAgIFRHbG9iYWxzLFxuICAgIFRUeXBlcyxcbiAgICBUR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPixcbiAgcGFyZW50PzogQ29tbWFuZDxhbnk+LFxuKSA9PiBDb21wbGV0ZUhhbmRsZXJSZXN1bHQ7XG5cbi8qKlxuICogSGVscCBjYWxsYmFjayBtZXRob2QgdG8gcHJpbnQgdGhlIGhlbHAuXG4gKiBJbnZva2VkIGJ5IHRoZSBgLS1oZWxwYCBvcHRpb24gYW5kIGBoZWxwYCBjb21tYW5kIGFuZCB0aGUgYC5nZXRIZWxwKClgIGFuZCBgLnNob3dIZWxwKClgIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCB0eXBlIEhlbHBIYW5kbGVyPFxuICBUT3B0aW9ucyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gYW55LFxuICBUQXJndW1lbnRzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4gPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueSA6IFtdLFxuICBUR2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRHbG9iYWxzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUR2xvYmFsVHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRUeXBlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFBhcmVudENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPGFueT4gfCB1bmRlZmluZWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB1bmRlZmluZWQsXG4gIFRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxcbiAgICBUUGFyZW50R2xvYmFscyxcbiAgICBUUGFyZW50VHlwZXMsXG4gICAgVE9wdGlvbnMsXG4gICAgVEFyZ3VtZW50cyxcbiAgICBUR2xvYmFscyxcbiAgICBUVHlwZXMsXG4gICAgVEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID4gPSBDb21tYW5kPFxuICAgIFRQYXJlbnRHbG9iYWxzLFxuICAgIFRQYXJlbnRUeXBlcyxcbiAgICBUT3B0aW9ucyxcbiAgICBUQXJndW1lbnRzLFxuICAgIFRHbG9iYWxzLFxuICAgIFRUeXBlcyxcbiAgICBUR2xvYmFsVHlwZXMsXG4gICAgVFBhcmVudENvbW1hbmRcbiAgPixcbj4gPSAodGhpczogVENvbW1hbmQsIGNtZDogVENvbW1hbmQsIG9wdGlvbnM6IEhlbHBPcHRpb25zKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogVmVyc2lvbiBjYWxsYmFjayBtZXRob2QgdG8gcHJpbnQgdGhlIHZlcnNpb24uXG4gKiBJbnZva2VkIGJ5IHRoZSBgLS1oZWxwYCBvcHRpb24gY29tbWFuZCBhbmQgdGhlIGAuZ2V0VmVyc2lvbigpYCBhbmQgYC5zaG93SGVscCgpYCBtZXRob2RzLlxuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uSGFuZGxlcjxcbiAgVE9wdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IGFueSxcbiAgVEFyZ3VtZW50cyBleHRlbmRzIEFycmF5PHVua25vd24+ID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXIgPyBhbnkgOiBbXSxcbiAgVEdsb2JhbHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50R2xvYmFscyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB2b2lkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdm9pZCxcbiAgVFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlciA/IGFueVxuICAgIDogdm9pZCxcbiAgVEdsb2JhbFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB8IHZvaWQgPSBUT3B0aW9ucyBleHRlbmRzIG51bWJlclxuICAgID8gYW55XG4gICAgOiB2b2lkLFxuICBUUGFyZW50VHlwZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdm9pZCA9IFRPcHRpb25zIGV4dGVuZHMgbnVtYmVyXG4gICAgPyBhbnlcbiAgICA6IHZvaWQsXG4gIFRQYXJlbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZDxhbnk+IHwgdW5kZWZpbmVkID0gVE9wdGlvbnMgZXh0ZW5kcyBudW1iZXJcbiAgICA/IGFueVxuICAgIDogdW5kZWZpbmVkLFxuICBUQ29tbWFuZCBleHRlbmRzIENvbW1hbmQ8XG4gICAgVFBhcmVudEdsb2JhbHMsXG4gICAgVFBhcmVudFR5cGVzLFxuICAgIFRPcHRpb25zLFxuICAgIFRBcmd1bWVudHMsXG4gICAgVEdsb2JhbHMsXG4gICAgVFR5cGVzLFxuICAgIFRHbG9iYWxUeXBlcyxcbiAgICBUUGFyZW50Q29tbWFuZFxuICA+ID0gQ29tbWFuZDxcbiAgICBUUGFyZW50R2xvYmFscyxcbiAgICBUUGFyZW50VHlwZXMsXG4gICAgVE9wdGlvbnMsXG4gICAgVEFyZ3VtZW50cyxcbiAgICBUR2xvYmFscyxcbiAgICBUVHlwZXMsXG4gICAgVEdsb2JhbFR5cGVzLFxuICAgIFRQYXJlbnRDb21tYW5kXG4gID4sXG4+ID0gKHRoaXM6IFRDb21tYW5kLCBjbWQ6IFRDb21tYW5kKSA9PiBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIEVycm9ySGFuZGxlciA9IChcbiAgZXJyb3I6IEVycm9yIHwgVmFsaWRhdGlvbkVycm9yLFxuICBjbWQ6IENvbW1hbmQsXG4pID0+IHVua25vd247XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDIn0=
+// denoCacheMetadata=14817219252458872749,2876757959492578688 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/9c1f5cb3e2801bc4ef15fa27426125f58e1320b663e89fd95558c870717dfcbf.js b/vendor/gen/https/deno.land/9c1f5cb3e2801bc4ef15fa27426125f58e1320b663e89fd95558c870717dfcbf.js
new file mode 100644
index 0000000..ecb11a3
--- /dev/null
+++ b/vendor/gen/https/deno.land/9c1f5cb3e2801bc4ef15fa27426125f58e1320b663e89fd95558c870717dfcbf.js
@@ -0,0 +1,7 @@
+export * as path from "jsr:@std/path@1.0.8";
+export * as html from "jsr:@std/html@1.0.3";
+export * as astring from "jsr:@davidbonnet/astring@1.8.6";
+export * as meriyah from "npm:meriyah@6.0.5";
+export * as walker from "npm:estree-walker@3.0.3";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9kZXBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIHBhdGggZnJvbSBcImpzcjpAc3RkL3BhdGhAMS4wLjhcIjtcbmV4cG9ydCAqIGFzIGh0bWwgZnJvbSBcImpzcjpAc3RkL2h0bWxAMS4wLjNcIjtcblxuZXhwb3J0ICogYXMgYXN0cmluZyBmcm9tIFwianNyOkBkYXZpZGJvbm5ldC9hc3RyaW5nQDEuOC42XCI7XG5leHBvcnQgKiBhcyBtZXJpeWFoIGZyb20gXCJucG06bWVyaXlhaEA2LjAuNVwiO1xuZXhwb3J0ICogYXMgd2Fsa2VyIGZyb20gXCJucG06ZXN0cmVlLXdhbGtlckAzLjAuM1wiO1xuZXhwb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcIm5wbTpAdHlwZXMvZXN0cmVlQDEuMC42XCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0I7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0I7QUFFNUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxpQ0FBaUM7QUFDMUQsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0I7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSwwQkFBMEIifQ==
+// denoCacheMetadata=13951551029396770186,5013503144350320255 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/9cb036abadad5dc481f4e8049fd5c5f7711b3b5cc8d0d11c4a03005fdcb41560.js b/vendor/gen/https/deno.land/9cb036abadad5dc481f4e8049fd5c5f7711b3b5cc8d0d11c4a03005fdcb41560.js
new file mode 100644
index 0000000..bcc5455
--- /dev/null
+++ b/vendor/gen/https/deno.land/9cb036abadad5dc481f4e8049fd5c5f7711b3b5cc8d0d11c4a03005fdcb41560.js
@@ -0,0 +1,43 @@
+import * as stdColors from "https://deno.land/std@0.170.0/fmt/colors.ts";
+const proto = Object.create(null);
+const methodNames = Object.keys(stdColors);
+for (const name of methodNames){
+ if (name === "setColorEnabled" || name === "getColorEnabled") {
+ continue;
+ }
+ Object.defineProperty(proto, name, {
+ get () {
+ return factory([
+ ...this._stack,
+ name
+ ]);
+ }
+ });
+}
+export const colors = factory();
+/**
+ * Chainable colors module.
+ * ```
+ * console.log(colors.blue.bgRed.bold('Welcome to Deno.Land!'));
+ * ```
+ * If invoked as method, a new Ansi instance will be returned.
+ * ```
+ * const myColors: Colors = colors();
+ * console.log(myColors.blue.bgRed.bold('Welcome to Deno.Land!'));
+ * ```
+ */ function factory(stack = []) {
+ const colors = function(str, ...args) {
+ if (str) {
+ const lastIndex = stack.length - 1;
+ return stack.reduce((str, name, index)=>index === lastIndex ? stdColors[name](str, ...args) : stdColors[name](str), str);
+ }
+ const tmp = stack.slice();
+ stack = [];
+ return factory(tmp);
+ };
+ Object.setPrototypeOf(colors, proto);
+ colors._stack = stack;
+ return colors;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9jb2xvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3RkQ29sb3JzIGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNzAuMC9mbXQvY29sb3JzLnRzXCI7XG5cbnR5cGUgRXhjbHVkZWRDb2xvck1ldGhvZHMgPSBcInNldENvbG9yRW5hYmxlZFwiIHwgXCJnZXRDb2xvckVuYWJsZWRcIjtcbnR5cGUgUHJvcGVydHlOYW1lcyA9IGtleW9mIHR5cGVvZiBzdGRDb2xvcnM7XG50eXBlIENvbG9yTWV0aG9kID0gKHN0cjogc3RyaW5nLCAuLi5hcmdzOiBBcnJheTx1bmtub3duPikgPT4gc3RyaW5nO1xudHlwZSBDb2xvck1ldGhvZHMgPSBFeGNsdWRlPFByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVkQ29sb3JNZXRob2RzPjtcbnR5cGUgQ2hhaW5hYmxlPFQsIEUgZXh0ZW5kcyBrZXlvZiBUIHwgbnVsbCA9IG51bGw+ID0ge1xuICBbUCBpbiBrZXlvZiBUXTogUCBleHRlbmRzIEUgPyBUW1BdIDogQ2hhaW5hYmxlPFQsIEU+ICYgVFtQXTtcbn07XG5cbi8qKiBDaGFpbmFibGUgY29sb3JzIGluc3RhbmNlIHJldHVybmVkIGJ5IGFsbCBhbnNpIGVzY2FwZSBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IHR5cGUgQ29sb3JzQ2hhaW4gPVxuICAmIENoYWluYWJsZTx0eXBlb2Ygc3RkQ29sb3JzLCBFeGNsdWRlZENvbG9yTWV0aG9kcz5cbiAgJiB7IF9zdGFjazogQXJyYXk8Q29sb3JNZXRob2RzPiB9O1xuXG4vKiogQ3JlYXRlIG5ldyBgQ29sb3JzYCBpbnN0YW5jZS4gKi9cbmV4cG9ydCB0eXBlIENvbG9yc0ZhY3RvcnkgPSAoKSA9PiBDb2xvcnM7XG5cbi8qKlxuICogQ2hhaW5hYmxlIGNvbG9ycyBtb2R1bGUuXG4gKiBJZiBpbnZva2VkIGFzIG1ldGhvZCwgYSBuZXcgYENvbG9yc2AgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29sb3JzID0gQ29sb3JzRmFjdG9yeSAmIENvbG9yc0NoYWluO1xuXG5jb25zdCBwcm90byA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5jb25zdCBtZXRob2ROYW1lcyA9IE9iamVjdC5rZXlzKHN0ZENvbG9ycykgYXMgQXJyYXk8UHJvcGVydHlOYW1lcz47XG5mb3IgKGNvbnN0IG5hbWUgb2YgbWV0aG9kTmFtZXMpIHtcbiAgaWYgKG5hbWUgPT09IFwic2V0Q29sb3JFbmFibGVkXCIgfHwgbmFtZSA9PT0gXCJnZXRDb2xvckVuYWJsZWRcIikge1xuICAgIGNvbnRpbnVlO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgbmFtZSwge1xuICAgIGdldCh0aGlzOiBDb2xvcnNDaGFpbikge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoWy4uLnRoaXMuX3N0YWNrLCBuYW1lXSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBjb2xvcnM6IENvbG9ycyA9IGZhY3RvcnkoKTtcblxuLyoqXG4gKiBDaGFpbmFibGUgY29sb3JzIG1vZHVsZS5cbiAqIGBgYFxuICogY29uc29sZS5sb2coY29sb3JzLmJsdWUuYmdSZWQuYm9sZCgnV2VsY29tZSB0byBEZW5vLkxhbmQhJykpO1xuICogYGBgXG4gKiBJZiBpbnZva2VkIGFzIG1ldGhvZCwgYSBuZXcgQW5zaSBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkLlxuICogYGBgXG4gKiBjb25zdCBteUNvbG9yczogQ29sb3JzID0gY29sb3JzKCk7XG4gKiBjb25zb2xlLmxvZyhteUNvbG9ycy5ibHVlLmJnUmVkLmJvbGQoJ1dlbGNvbWUgdG8gRGVuby5MYW5kIScpKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBmYWN0b3J5KHN0YWNrOiBBcnJheTxDb2xvck1ldGhvZHM+ID0gW10pOiBDb2xvcnMge1xuICBjb25zdCBjb2xvcnM6IENvbG9ycyA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBDb2xvcnNDaGFpbiB8IHVuZGVmaW5lZCxcbiAgICBzdHI/OiBzdHJpbmcsXG4gICAgLi4uYXJnczogQXJyYXk8dW5rbm93bj5cbiAgKTogc3RyaW5nIHwgQ29sb3JzQ2hhaW4ge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICByZXR1cm4gc3RhY2sucmVkdWNlKFxuICAgICAgICAoc3RyOiBzdHJpbmcsIG5hbWU6IFByb3BlcnR5TmFtZXMsIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgaW5kZXggPT09IGxhc3RJbmRleFxuICAgICAgICAgICAgPyAoc3RkQ29sb3JzW25hbWVdIGFzIENvbG9yTWV0aG9kKShzdHIsIC4uLmFyZ3MpXG4gICAgICAgICAgICA6IChzdGRDb2xvcnNbbmFtZV0gYXMgQ29sb3JNZXRob2QpKHN0ciksXG4gICAgICAgIHN0cixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRtcCA9IHN0YWNrLnNsaWNlKCk7XG4gICAgc3RhY2sgPSBbXTtcbiAgICByZXR1cm4gZmFjdG9yeSh0bXApO1xuICB9IGFzIENvbG9ycztcblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29sb3JzLCBwcm90byk7XG4gIGNvbG9ycy5fc3RhY2sgPSBzdGFjaztcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLGVBQWUsOENBQThDO0FBd0J6RSxNQUFNLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDNUIsTUFBTSxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQ2hDLEtBQUssTUFBTSxRQUFRLFlBQWE7RUFDOUIsSUFBSSxTQUFTLHFCQUFxQixTQUFTLG1CQUFtQjtJQUM1RDtFQUNGO0VBQ0EsT0FBTyxjQUFjLENBQUMsT0FBTyxNQUFNO0lBQ2pDO01BQ0UsT0FBTyxRQUFRO1dBQUksSUFBSSxDQUFDLE1BQU07UUFBRTtPQUFLO0lBQ3ZDO0VBQ0Y7QUFDRjtBQUVBLE9BQU8sTUFBTSxTQUFpQixVQUFVO0FBRXhDOzs7Ozs7Ozs7O0NBVUMsR0FDRCxTQUFTLFFBQVEsUUFBNkIsRUFBRTtFQUM5QyxNQUFNLFNBQWlCLFNBRXJCLEdBQVksRUFDWixHQUFHLElBQW9CO0lBRXZCLElBQUksS0FBSztNQUNQLE1BQU0sWUFBWSxNQUFNLE1BQU0sR0FBRztNQUNqQyxPQUFPLE1BQU0sTUFBTSxDQUNqQixDQUFDLEtBQWEsTUFBcUIsUUFDakMsVUFBVSxZQUNOLEFBQUMsU0FBUyxDQUFDLEtBQUssQ0FBaUIsUUFBUSxRQUN6QyxBQUFDLFNBQVMsQ0FBQyxLQUFLLENBQWlCLE1BQ3ZDO0lBRUo7SUFDQSxNQUFNLE1BQU0sTUFBTSxLQUFLO0lBQ3ZCLFFBQVEsRUFBRTtJQUNWLE9BQU8sUUFBUTtFQUNqQjtFQUVBLE9BQU8sY0FBYyxDQUFDLFFBQVE7RUFDOUIsT0FBTyxNQUFNLEdBQUc7RUFDaEIsT0FBTztBQUNUIn0=
+// denoCacheMetadata=14330092040106725988,14797678348196684716 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/9d6d5c7bf6e94259ee1cbf067e9c79b6901e0161a772b9bc6ac1ed9aa53c4487.js b/vendor/gen/https/deno.land/9d6d5c7bf6e94259ee1cbf067e9c79b6901e0161a772b9bc6ac1ed9aa53c4487.js
new file mode 100644
index 0000000..bd6e39e
--- /dev/null
+++ b/vendor/gen/https/deno.land/9d6d5c7bf6e94259ee1cbf067e9c79b6901e0161a772b9bc6ac1ed9aa53c4487.js
@@ -0,0 +1,42 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(setTag);
+ };
+}
+function setTag(env, code, _output, tokens) {
+ if (!code.startsWith("set ")) {
+ return;
+ }
+ const expression = code.replace(/^set\s+/, "");
+ const { dataVarname } = env.options;
+ // Value is set (e.g. {{ set foo = "bar" }})
+ if (expression.includes("=")) {
+ const match = code.match(/^set\s+([\w]+)\s*=\s*([\s\S]+)$/);
+ if (!match) {
+ throw new Error(`Invalid set tag: ${code}`);
+ }
+ const [, variable, value] = match;
+ const val = env.compileFilters(tokens, value);
+ return `
+ var ${variable} = ${val};
+ ${dataVarname}["${variable}"] = ${variable};
+ `;
+ }
+ // Value is captured (eg: {{ set foo }}bar{{ /set }})
+ const compiled = [];
+ const compiledFilters = env.compileFilters(tokens, expression);
+ compiled.push(`var ${expression} = "";`);
+ compiled.push(...env.compileTokens(tokens, expression, [
+ "/set"
+ ]));
+ compiled.push(`${dataVarname}["${expression}"] = ${expression};`);
+ if (tokens.length && (tokens[0][0] !== "tag" || tokens[0][1] !== "/set")) {
+ throw new Error(`Missing closing tag for set tag: ${code}`);
+ }
+ tokens.shift();
+ compiled.push(`${expression} = ${compiledFilters};`);
+ compiled.push(`${dataVarname}["${expression.trim()}"] = ${expression};`);
+ return compiled.join("\n");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL3NldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4uL3NyYy90b2tlbml6ZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCk6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIGVudi50YWdzLnB1c2goc2V0VGFnKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2V0VGFnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjb2RlOiBzdHJpbmcsXG4gIF9vdXRwdXQ6IHN0cmluZyxcbiAgdG9rZW5zOiBUb2tlbltdLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb2RlLnN0YXJ0c1dpdGgoXCJzZXQgXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGNvZGUucmVwbGFjZSgvXnNldFxccysvLCBcIlwiKTtcbiAgY29uc3QgeyBkYXRhVmFybmFtZSB9ID0gZW52Lm9wdGlvbnM7XG5cbiAgLy8gVmFsdWUgaXMgc2V0IChlLmcuIHt7IHNldCBmb28gPSBcImJhclwiIH19KVxuICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICBjb25zdCBtYXRjaCA9IGNvZGUubWF0Y2goL15zZXRcXHMrKFtcXHddKylcXHMqPVxccyooW1xcc1xcU10rKSQvKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXQgdGFnOiAke2NvZGV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgWywgdmFyaWFibGUsIHZhbHVlXSA9IG1hdGNoO1xuICAgIGNvbnN0IHZhbCA9IGVudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIHZhbHVlKTtcblxuICAgIHJldHVybiBgXG4gICAgdmFyICR7dmFyaWFibGV9ID0gJHt2YWx9O1xuICAgICR7ZGF0YVZhcm5hbWV9W1wiJHt2YXJpYWJsZX1cIl0gPSAke3ZhcmlhYmxlfTtcbiAgICBgO1xuICB9XG5cbiAgLy8gVmFsdWUgaXMgY2FwdHVyZWQgKGVnOiB7eyBzZXQgZm9vIH19YmFye3sgL3NldCB9fSlcbiAgY29uc3QgY29tcGlsZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbXBpbGVkRmlsdGVycyA9IGVudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIGV4cHJlc3Npb24pO1xuXG4gIGNvbXBpbGVkLnB1c2goYHZhciAke2V4cHJlc3Npb259ID0gXCJcIjtgKTtcbiAgY29tcGlsZWQucHVzaCguLi5lbnYuY29tcGlsZVRva2Vucyh0b2tlbnMsIGV4cHJlc3Npb24sIFtcIi9zZXRcIl0pKTtcbiAgY29tcGlsZWQucHVzaChgJHtkYXRhVmFybmFtZX1bXCIke2V4cHJlc3Npb259XCJdID0gJHtleHByZXNzaW9ufTtgKTtcblxuICBpZiAodG9rZW5zLmxlbmd0aCAmJiAodG9rZW5zWzBdWzBdICE9PSBcInRhZ1wiIHx8IHRva2Vuc1swXVsxXSAhPT0gXCIvc2V0XCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGNsb3NpbmcgdGFnIGZvciBzZXQgdGFnOiAke2NvZGV9YCk7XG4gIH1cblxuICB0b2tlbnMuc2hpZnQoKTtcbiAgY29tcGlsZWQucHVzaChgJHtleHByZXNzaW9ufSA9ICR7Y29tcGlsZWRGaWx0ZXJzfTtgKTtcbiAgY29tcGlsZWQucHVzaChgJHtkYXRhVmFybmFtZX1bXCIke2V4cHJlc3Npb24udHJpbSgpfVwiXSA9ICR7ZXhwcmVzc2lvbn07YCk7XG4gIHJldHVybiBjb21waWxlZC5qb2luKFwiXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7QUFDRjtBQUVBLFNBQVMsT0FDUCxHQUFnQixFQUNoQixJQUFZLEVBQ1osT0FBZSxFQUNmLE1BQWU7RUFFZixJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsU0FBUztJQUM1QjtFQUNGO0VBRUEsTUFBTSxhQUFhLEtBQUssT0FBTyxDQUFDLFdBQVc7RUFDM0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksT0FBTztFQUVuQyw0Q0FBNEM7RUFDNUMsSUFBSSxXQUFXLFFBQVEsQ0FBQyxNQUFNO0lBQzVCLE1BQU0sUUFBUSxLQUFLLEtBQUssQ0FBQztJQUV6QixJQUFJLENBQUMsT0FBTztNQUNWLE1BQU0sSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTTtJQUM1QztJQUVBLE1BQU0sR0FBRyxVQUFVLE1BQU0sR0FBRztJQUM1QixNQUFNLE1BQU0sSUFBSSxjQUFjLENBQUMsUUFBUTtJQUV2QyxPQUFPLENBQUM7UUFDSixFQUFFLFNBQVMsR0FBRyxFQUFFLElBQUk7SUFDeEIsRUFBRSxZQUFZLEVBQUUsRUFBRSxTQUFTLEtBQUssRUFBRSxTQUFTO0lBQzNDLENBQUM7RUFDSDtFQUVBLHFEQUFxRDtFQUNyRCxNQUFNLFdBQXFCLEVBQUU7RUFDN0IsTUFBTSxrQkFBa0IsSUFBSSxjQUFjLENBQUMsUUFBUTtFQUVuRCxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQztFQUN2QyxTQUFTLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxRQUFRLFlBQVk7SUFBQztHQUFPO0VBQy9ELFNBQVMsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsV0FBVyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFFaEUsSUFBSSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxHQUFHO0lBQ3hFLE1BQU0sSUFBSSxNQUFNLENBQUMsaUNBQWlDLEVBQUUsTUFBTTtFQUM1RDtFQUVBLE9BQU8sS0FBSztFQUNaLFNBQVMsSUFBSSxDQUFDLEdBQUcsV0FBVyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztFQUNuRCxTQUFTLElBQUksQ0FBQyxHQUFHLFlBQVksRUFBRSxFQUFFLFdBQVcsSUFBSSxHQUFHLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztFQUN2RSxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBQ3ZCIn0=
+// denoCacheMetadata=3864222844877195401,9260727916331799357 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/9e76f64c85bbd2191baef628b4355a88bce06fd0aacc5861a3db29bf6d805ad5.js b/vendor/gen/https/deno.land/9e76f64c85bbd2191baef628b4355a88bce06fd0aacc5861a3db29bf6d805ad5.js
new file mode 100644
index 0000000..f08f3b9
--- /dev/null
+++ b/vendor/gen/https/deno.land/9e76f64c85bbd2191baef628b4355a88bce06fd0aacc5861a3db29bf6d805ad5.js
@@ -0,0 +1,195 @@
+import tokenize from "./tokenizer.ts";
+import { transformTemplateCode } from "./transformer.ts";
+import { TemplateError, TransformError } from "./errors.ts";
+export class Environment {
+ cache = new Map();
+ options;
+ tags = [];
+ tokenPreprocessors = [];
+ filters = {};
+ utils = {
+ callMethod
+ };
+ constructor(options){
+ this.options = options;
+ }
+ use(plugin) {
+ plugin(this);
+ }
+ async run(file, data, from) {
+ const template = await this.load(file, from);
+ return await template(data);
+ }
+ async runString(source, data, file) {
+ if (file) {
+ const cached = this.cache.get(file);
+ if (cached) {
+ return await cached(data);
+ }
+ const template = this.compile(source, file);
+ this.cache.set(file, template);
+ return await template(data);
+ }
+ const template = this.compile(source, file);
+ return await template(data);
+ }
+ runStringSync(source, data) {
+ const template = this.compile(source, "", {}, true);
+ return template(data);
+ }
+ compile(source, path, defaults, sync = false) {
+ if (typeof source !== "string") {
+ throw new Error(`The source code of "${path}" must be a string. Got ${typeof source}`);
+ }
+ const tokens = this.tokenize(source, path);
+ let code = this.compileTokens(tokens).join("\n");
+ const { dataVarname, autoDataVarname } = this.options;
+ if (autoDataVarname) {
+ try {
+ code = transformTemplateCode(code, dataVarname);
+ } catch (cause) {
+ if (cause instanceof TransformError) {
+ throw new TemplateError(path, source, cause.position, cause);
+ }
+ throw new Error(`Unknown error while transforming ${path}`, {
+ cause
+ });
+ }
+ }
+ const constructor = new Function("__file", "__env", "__defaults", "__err", `return${sync ? "" : " async"} function (${dataVarname}) {
+ let __pos = 0;
+ try {
+ ${dataVarname} = Object.assign({}, __defaults, ${dataVarname});
+ const __exports = { content: "" };
+ ${code}
+ return __exports;
+ } catch (cause) {
+ const template = __env.cache.get(__file);
+ throw new __err(__file, template?.source, __pos, cause);
+ }
+ }
+ `);
+ const template = constructor(path, this, defaults, TemplateError);
+ template.file = path;
+ template.code = code;
+ template.source = source;
+ return template;
+ }
+ tokenize(source, path) {
+ const result = tokenize(source);
+ let { tokens } = result;
+ const { position, error } = result;
+ if (error) {
+ throw new TemplateError(path, source, position, error);
+ }
+ for (const tokenPreprocessor of this.tokenPreprocessors){
+ const result = tokenPreprocessor(this, tokens, path);
+ if (result !== undefined) {
+ tokens = result;
+ }
+ }
+ return tokens;
+ }
+ async load(file, from) {
+ const path = this.options.loader.resolve(from || "", file);
+ if (!this.cache.has(path)) {
+ // Remove query and hash params from path before loading
+ const cleanPath = path.split("?")[0].split("#")[0];
+ const { source, data } = await this.options.loader.load(cleanPath);
+ const template = this.compile(source, path, data);
+ this.cache.set(path, template);
+ }
+ return this.cache.get(path);
+ }
+ compileTokens(tokens, outputVar = "__exports.content", stopAt) {
+ const compiled = [];
+ tokens: while(tokens.length > 0){
+ if (stopAt && tokens[0][0] === "tag" && stopAt.includes(tokens[0][1])) {
+ break;
+ }
+ const [type, code, pos] = tokens.shift();
+ if (type === "comment") {
+ continue;
+ }
+ if (type === "string") {
+ if (code !== "") {
+ compiled.push(`${outputVar} += ${JSON.stringify(code)};`);
+ }
+ continue;
+ }
+ if (type === "tag") {
+ compiled.push(`__pos = ${pos};`);
+ for (const tag of this.tags){
+ const compiledTag = tag(this, code, outputVar, tokens);
+ if (typeof compiledTag === "string") {
+ compiled.push(compiledTag);
+ continue tokens;
+ }
+ }
+ // Unknown tag, just print it
+ const expression = this.compileFilters(tokens, code, this.options.autoescape);
+ compiled.push(`${outputVar} += (${expression}) ?? "";`);
+ continue;
+ }
+ throw new Error(`Unknown token type "${type}"`);
+ }
+ return compiled;
+ }
+ compileFilters(tokens, output, autoescape = false) {
+ let unescaped = false;
+ while(tokens.length > 0 && tokens[0][0] === "filter"){
+ const [, code] = tokens.shift();
+ const match = code.match(/^(await\s+)?([\w.]+)(?:\((.*)\))?$/);
+ if (!match) {
+ throw new Error(`Invalid filter: ${code}`);
+ }
+ const [_, isAsync, name, args] = match;
+ if (!Object.hasOwn(this.filters, name)) {
+ if (name === "safe") {
+ unescaped = true;
+ } else if (isGlobal(name)) {
+ // If a global function
+ output = `${isAsync ? "await " : ""}${name}(${output}${args ? `, ${args}` : ""})`;
+ } else {
+ // It's a prototype's method (e.g. `String.toUpperCase()`)
+ output = `${isAsync ? "await " : ""}__env.utils.callMethod(${output}, "${name}", ${args ? args : ""})`;
+ }
+ } else {
+ // It's a filter (e.g. filters.upper())
+ const { dataVarname } = this.options;
+ output = `${isAsync || checkAsync(this.filters[name]) ? "await " : ""}__env.filters.${name}.call({data:${dataVarname},env:__env}, ${output}${args ? `, ${args}` : ""})`;
+ }
+ }
+ // Escape by default
+ if (autoescape && !unescaped) {
+ output = `__env.filters.escape(${output})`;
+ }
+ return output;
+ }
+}
+function isGlobal(name) {
+ // @ts-ignore TS doesn't know about globalThis
+ if (Object.hasOwn(globalThis, name)) {
+ return true;
+ }
+ if (name.includes(".")) {
+ const [obj, prop] = name.split(".");
+ // @ts-ignore TS doesn't know about globalThis
+ return Object.hasOwn(globalThis[obj], prop);
+ }
+}
+// deno-lint-ignore no-explicit-any
+function callMethod(thisObject, method, ...args) {
+ if (thisObject === null || thisObject === undefined) {
+ return thisObject;
+ }
+ if (typeof thisObject[method] === "function") {
+ return thisObject[method](...args);
+ }
+ throw new Error(`"${method}" is not a valid filter, global object or a method of a ${typeof thisObject} variable`);
+}
+function checkAsync(fn) {
+ return fn.constructor?.name === "AsyncFunction";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9zcmMvZW52aXJvbm1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRva2VuaXplLCB7IFRva2VuIH0gZnJvbSBcIi4vdG9rZW5pemVyLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgTG9hZGVyIH0gZnJvbSBcIi4vbG9hZGVyLnRzXCI7XG5pbXBvcnQgeyB0cmFuc2Zvcm1UZW1wbGF0ZUNvZGUgfSBmcm9tIFwiLi90cmFuc2Zvcm1lci50c1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVFcnJvciwgVHJhbnNmb3JtRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVJlc3VsdCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZSB7XG4gIChkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPFRlbXBsYXRlUmVzdWx0PjtcbiAgc291cmNlOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVN5bmMge1xuICAoZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVGVtcGxhdGVSZXN1bHQ7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIGZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFRva2VuUHJlcHJvY2Vzc29yID0gKFxuICBlbnY6IEVudmlyb25tZW50LFxuICB0b2tlbnM6IFRva2VuW10sXG4gIHBhdGg/OiBzdHJpbmcsXG4pID0+IFRva2VuW10gfCB2b2lkO1xuXG5leHBvcnQgdHlwZSBUYWcgPSAoXG4gIGVudjogRW52aXJvbm1lbnQsXG4gIGNvZGU6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHRva2VuczogVG9rZW5bXSxcbikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJUaGlzID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZW52OiBFbnZpcm9ubWVudDtcbn07XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBGaWx0ZXIgPSAodGhpczogRmlsdGVyVGhpcywgLi4uYXJnczogYW55W10pID0+IGFueTtcblxuZXhwb3J0IHR5cGUgUGx1Z2luID0gKGVudjogRW52aXJvbm1lbnQpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGxvYWRlcjogTG9hZGVyO1xuICBkYXRhVmFybmFtZTogc3RyaW5nO1xuICBhdXRvZXNjYXBlOiBib29sZWFuO1xuICBhdXRvRGF0YVZhcm5hbWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIGNhY2hlOiBNYXA8c3RyaW5nLCBUZW1wbGF0ZT4gPSBuZXcgTWFwKCk7XG4gIG9wdGlvbnM6IE9wdGlvbnM7XG4gIHRhZ3M6IFRhZ1tdID0gW107XG4gIHRva2VuUHJlcHJvY2Vzc29yczogVG9rZW5QcmVwcm9jZXNzb3JbXSA9IFtdO1xuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXI+ID0ge307XG4gIHV0aWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBjYWxsTWV0aG9kLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgdXNlKHBsdWdpbjogUGx1Z2luKSB7XG4gICAgcGx1Z2luKHRoaXMpO1xuICB9XG5cbiAgYXN5bmMgcnVuKFxuICAgIGZpbGU6IHN0cmluZyxcbiAgICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBmcm9tPzogc3RyaW5nLFxuICApOiBQcm9taXNlPFRlbXBsYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLmxvYWQoZmlsZSwgZnJvbSk7XG4gICAgcmV0dXJuIGF3YWl0IHRlbXBsYXRlKGRhdGEpO1xuICB9XG5cbiAgYXN5bmMgcnVuU3RyaW5nKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBmaWxlPzogc3RyaW5nLFxuICApOiBQcm9taXNlPFRlbXBsYXRlUmVzdWx0PiB7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGZpbGUpO1xuXG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZWQoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jb21waWxlKHNvdXJjZSwgZmlsZSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChmaWxlLCB0ZW1wbGF0ZSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0ZW1wbGF0ZShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY29tcGlsZShzb3VyY2UsIGZpbGUpO1xuICAgIHJldHVybiBhd2FpdCB0ZW1wbGF0ZShkYXRhKTtcbiAgfVxuXG4gIHJ1blN0cmluZ1N5bmMoXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmNvbXBpbGUoc291cmNlLCBcIlwiLCB7fSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHRlbXBsYXRlKGRhdGEpO1xuICB9XG5cbiAgY29tcGlsZShcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBwYXRoPzogc3RyaW5nLFxuICAgIGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc3luYz86IGZhbHNlLFxuICApOiBUZW1wbGF0ZTtcbiAgY29tcGlsZShcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBwYXRoPzogc3RyaW5nLFxuICAgIGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc3luYz86IHRydWUsXG4gICk6IFRlbXBsYXRlU3luYztcbiAgY29tcGlsZShcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBwYXRoPzogc3RyaW5nLFxuICAgIGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc3luYyA9IGZhbHNlLFxuICApOiBUZW1wbGF0ZSB8IFRlbXBsYXRlU3luYyB7XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBzb3VyY2UgY29kZSBvZiBcIiR7cGF0aH1cIiBtdXN0IGJlIGEgc3RyaW5nLiBHb3QgJHt0eXBlb2Ygc291cmNlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLnRva2VuaXplKHNvdXJjZSwgcGF0aCk7XG4gICAgbGV0IGNvZGUgPSB0aGlzLmNvbXBpbGVUb2tlbnModG9rZW5zKS5qb2luKFwiXFxuXCIpO1xuXG4gICAgY29uc3QgeyBkYXRhVmFybmFtZSwgYXV0b0RhdGFWYXJuYW1lIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBpZiAoYXV0b0RhdGFWYXJuYW1lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb2RlID0gdHJhbnNmb3JtVGVtcGxhdGVDb2RlKGNvZGUsIGRhdGFWYXJuYW1lKTtcbiAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIFRyYW5zZm9ybUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRlbXBsYXRlRXJyb3IocGF0aCwgc291cmNlLCBjYXVzZS5wb3NpdGlvbiwgY2F1c2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGVycm9yIHdoaWxlIHRyYW5zZm9ybWluZyAke3BhdGh9YCwgeyBjYXVzZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBGdW5jdGlvbihcbiAgICAgIFwiX19maWxlXCIsXG4gICAgICBcIl9fZW52XCIsXG4gICAgICBcIl9fZGVmYXVsdHNcIixcbiAgICAgIFwiX19lcnJcIixcbiAgICAgIGByZXR1cm4ke3N5bmMgPyBcIlwiIDogXCIgYXN5bmNcIn0gZnVuY3Rpb24gKCR7ZGF0YVZhcm5hbWV9KSB7XG4gICAgICAgIGxldCBfX3BvcyA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgJHtkYXRhVmFybmFtZX0gPSBPYmplY3QuYXNzaWduKHt9LCBfX2RlZmF1bHRzLCAke2RhdGFWYXJuYW1lfSk7XG4gICAgICAgICAgY29uc3QgX19leHBvcnRzID0geyBjb250ZW50OiBcIlwiIH07XG4gICAgICAgICAgJHtjb2RlfVxuICAgICAgICAgIHJldHVybiBfX2V4cG9ydHM7XG4gICAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBfX2Vudi5jYWNoZS5nZXQoX19maWxlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgX19lcnIoX19maWxlLCB0ZW1wbGF0ZT8uc291cmNlLCBfX3BvcywgY2F1c2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBgLFxuICAgICk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSBjb25zdHJ1Y3RvcihwYXRoLCB0aGlzLCBkZWZhdWx0cywgVGVtcGxhdGVFcnJvcik7XG4gICAgdGVtcGxhdGUuZmlsZSA9IHBhdGg7XG4gICAgdGVtcGxhdGUuY29kZSA9IGNvZGU7XG4gICAgdGVtcGxhdGUuc291cmNlID0gc291cmNlO1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHRva2VuaXplKHNvdXJjZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogVG9rZW5bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdG9rZW5pemUoc291cmNlKTtcbiAgICBsZXQgeyB0b2tlbnMgfSA9IHJlc3VsdDtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCBlcnJvciB9ID0gcmVzdWx0O1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgVGVtcGxhdGVFcnJvcihwYXRoLCBzb3VyY2UsIHBvc2l0aW9uLCBlcnJvcik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0b2tlblByZXByb2Nlc3NvciBvZiB0aGlzLnRva2VuUHJlcHJvY2Vzc29ycykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdG9rZW5QcmVwcm9jZXNzb3IodGhpcywgdG9rZW5zLCBwYXRoKTtcblxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRva2VucyA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgYXN5bmMgbG9hZChmaWxlOiBzdHJpbmcsIGZyb20/OiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMub3B0aW9ucy5sb2FkZXIucmVzb2x2ZShmcm9tIHx8IFwiXCIsIGZpbGUpO1xuXG4gICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhwYXRoKSkge1xuICAgICAgLy8gUmVtb3ZlIHF1ZXJ5IGFuZCBoYXNoIHBhcmFtcyBmcm9tIHBhdGggYmVmb3JlIGxvYWRpbmdcbiAgICAgIGNvbnN0IGNsZWFuUGF0aCA9IHBhdGhcbiAgICAgICAgLnNwbGl0KFwiP1wiKVswXVxuICAgICAgICAuc3BsaXQoXCIjXCIpWzBdO1xuXG4gICAgICBjb25zdCB7IHNvdXJjZSwgZGF0YSB9ID0gYXdhaXQgdGhpcy5vcHRpb25zLmxvYWRlci5sb2FkKGNsZWFuUGF0aCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY29tcGlsZShzb3VyY2UsIHBhdGgsIGRhdGEpO1xuXG4gICAgICB0aGlzLmNhY2hlLnNldChwYXRoLCB0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHBhdGgpITtcbiAgfVxuXG4gIGNvbXBpbGVUb2tlbnMoXG4gICAgdG9rZW5zOiBUb2tlbltdLFxuICAgIG91dHB1dFZhciA9IFwiX19leHBvcnRzLmNvbnRlbnRcIixcbiAgICBzdG9wQXQ/OiBzdHJpbmdbXSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbXBpbGVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdG9rZW5zOlxuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHN0b3BBdCAmJiB0b2tlbnNbMF1bMF0gPT09IFwidGFnXCIgJiYgc3RvcEF0LmluY2x1ZGVzKHRva2Vuc1swXVsxXSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt0eXBlLCBjb2RlLCBwb3NdID0gdG9rZW5zLnNoaWZ0KCkhO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChjb2RlICE9PSBcIlwiKSB7XG4gICAgICAgICAgY29tcGlsZWQucHVzaChgJHtvdXRwdXRWYXJ9ICs9ICR7SlNPTi5zdHJpbmdpZnkoY29kZSl9O2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gXCJ0YWdcIikge1xuICAgICAgICBjb21waWxlZC5wdXNoKGBfX3BvcyA9ICR7cG9zfTtgKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGhpcy50YWdzKSB7XG4gICAgICAgICAgY29uc3QgY29tcGlsZWRUYWcgPSB0YWcodGhpcywgY29kZSwgb3V0cHV0VmFyLCB0b2tlbnMpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb21waWxlZFRhZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29tcGlsZWQucHVzaChjb21waWxlZFRhZyk7XG4gICAgICAgICAgICBjb250aW51ZSB0b2tlbnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5rbm93biB0YWcsIGp1c3QgcHJpbnQgaXRcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuY29tcGlsZUZpbHRlcnMoXG4gICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF1dG9lc2NhcGUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbXBpbGVkLnB1c2goYCR7b3V0cHV0VmFyfSArPSAoJHtleHByZXNzaW9ufSkgPz8gXCJcIjtgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0b2tlbiB0eXBlIFwiJHt0eXBlfVwiYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkO1xuICB9XG5cbiAgY29tcGlsZUZpbHRlcnModG9rZW5zOiBUb2tlbltdLCBvdXRwdXQ6IHN0cmluZywgYXV0b2VzY2FwZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBsZXQgdW5lc2NhcGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCA+IDAgJiYgdG9rZW5zWzBdWzBdID09PSBcImZpbHRlclwiKSB7XG4gICAgICBjb25zdCBbLCBjb2RlXSA9IHRva2Vucy5zaGlmdCgpITtcblxuICAgICAgY29uc3QgbWF0Y2ggPSBjb2RlLm1hdGNoKC9eKGF3YWl0XFxzKyk/KFtcXHcuXSspKD86XFwoKC4qKVxcKSk/JC8pO1xuXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWx0ZXI6ICR7Y29kZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW18sIGlzQXN5bmMsIG5hbWUsIGFyZ3NdID0gbWF0Y2g7XG5cbiAgICAgIGlmICghT2JqZWN0Lmhhc093bih0aGlzLmZpbHRlcnMsIG5hbWUpKSB7XG4gICAgICAgIGlmIChuYW1lID09PSBcInNhZmVcIikge1xuICAgICAgICAgIHVuZXNjYXBlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHbG9iYWwobmFtZSkpIHtcbiAgICAgICAgICAvLyBJZiBhIGdsb2JhbCBmdW5jdGlvblxuICAgICAgICAgIG91dHB1dCA9IGAke2lzQXN5bmMgPyBcImF3YWl0IFwiIDogXCJcIn0ke25hbWV9KCR7b3V0cHV0fSR7XG4gICAgICAgICAgICBhcmdzID8gYCwgJHthcmdzfWAgOiBcIlwiXG4gICAgICAgICAgfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEl0J3MgYSBwcm90b3R5cGUncyBtZXRob2QgKGUuZy4gYFN0cmluZy50b1VwcGVyQ2FzZSgpYClcbiAgICAgICAgICBvdXRwdXQgPSBgJHtcbiAgICAgICAgICAgIGlzQXN5bmMgPyBcImF3YWl0IFwiIDogXCJcIlxuICAgICAgICAgIH1fX2Vudi51dGlscy5jYWxsTWV0aG9kKCR7b3V0cHV0fSwgXCIke25hbWV9XCIsICR7YXJncyA/IGFyZ3MgOiBcIlwifSlgO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGEgZmlsdGVyIChlLmcuIGZpbHRlcnMudXBwZXIoKSlcbiAgICAgICAgY29uc3QgeyBkYXRhVmFybmFtZSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBvdXRwdXQgPSBgJHtcbiAgICAgICAgICAoaXNBc3luYyB8fCBjaGVja0FzeW5jKHRoaXMuZmlsdGVyc1tuYW1lXSkpID8gXCJhd2FpdCBcIiA6IFwiXCJcbiAgICAgICAgfV9fZW52LmZpbHRlcnMuJHtuYW1lfS5jYWxsKHtkYXRhOiR7ZGF0YVZhcm5hbWV9LGVudjpfX2Vudn0sICR7b3V0cHV0fSR7XG4gICAgICAgICAgYXJncyA/IGAsICR7YXJnc31gIDogXCJcIlxuICAgICAgICB9KWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXNjYXBlIGJ5IGRlZmF1bHRcbiAgICBpZiAoYXV0b2VzY2FwZSAmJiAhdW5lc2NhcGVkKSB7XG4gICAgICBvdXRwdXQgPSBgX19lbnYuZmlsdGVycy5lc2NhcGUoJHtvdXRwdXR9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0dsb2JhbChuYW1lOiBzdHJpbmcpIHtcbiAgLy8gQHRzLWlnbm9yZSBUUyBkb2Vzbid0IGtub3cgYWJvdXQgZ2xvYmFsVGhpc1xuICBpZiAoT2JqZWN0Lmhhc093bihnbG9iYWxUaGlzLCBuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgY29uc3QgW29iaiwgcHJvcF0gPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAvLyBAdHMtaWdub3JlIFRTIGRvZXNuJ3Qga25vdyBhYm91dCBnbG9iYWxUaGlzXG4gICAgcmV0dXJuIE9iamVjdC5oYXNPd24oZ2xvYmFsVGhpc1tvYmpdLCBwcm9wKTtcbiAgfVxufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gY2FsbE1ldGhvZCh0aGlzT2JqZWN0OiBhbnksIG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgaWYgKHRoaXNPYmplY3QgPT09IG51bGwgfHwgdGhpc09iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXNPYmplY3Q7XG4gIH1cblxuICBpZiAodHlwZW9mIHRoaXNPYmplY3RbbWV0aG9kXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHRoaXNPYmplY3RbbWV0aG9kXSguLi5hcmdzKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgXCIke21ldGhvZH1cIiBpcyBub3QgYSB2YWxpZCBmaWx0ZXIsIGdsb2JhbCBvYmplY3Qgb3IgYSBtZXRob2Qgb2YgYSAke3R5cGVvZiB0aGlzT2JqZWN0fSB2YXJpYWJsZWAsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQXN5bmMoZm46ICgpID0+IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGZuLmNvbnN0cnVjdG9yPy5uYW1lID09PSBcIkFzeW5jRnVuY3Rpb25cIjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGNBQXlCLGlCQUFpQjtBQUdqRCxTQUFTLHFCQUFxQixRQUFRLG1CQUFtQjtBQUN6RCxTQUFTLGFBQWEsRUFBRSxjQUFjLFFBQVEsY0FBYztBQW1ENUQsT0FBTyxNQUFNO0VBQ1gsUUFBK0IsSUFBSSxNQUFNO0VBQ3pDLFFBQWlCO0VBQ2pCLE9BQWMsRUFBRSxDQUFDO0VBQ2pCLHFCQUEwQyxFQUFFLENBQUM7RUFDN0MsVUFBa0MsQ0FBQyxFQUFFO0VBQ3JDLFFBQWlDO0lBQy9CO0VBQ0YsRUFBRTtFQUVGLFlBQVksT0FBZ0IsQ0FBRTtJQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHO0VBQ2pCO0VBRUEsSUFBSSxNQUFjLEVBQUU7SUFDbEIsT0FBTyxJQUFJO0VBQ2I7RUFFQSxNQUFNLElBQ0osSUFBWSxFQUNaLElBQTZCLEVBQzdCLElBQWEsRUFDWTtJQUN6QixNQUFNLFdBQVcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07SUFDdkMsT0FBTyxNQUFNLFNBQVM7RUFDeEI7RUFFQSxNQUFNLFVBQ0osTUFBYyxFQUNkLElBQThCLEVBQzlCLElBQWEsRUFDWTtJQUN6QixJQUFJLE1BQU07TUFDUixNQUFNLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFFOUIsSUFBSSxRQUFRO1FBQ1YsT0FBTyxNQUFNLE9BQU87TUFDdEI7TUFFQSxNQUFNLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO01BQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07TUFFckIsT0FBTyxNQUFNLFNBQVM7SUFDeEI7SUFFQSxNQUFNLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO0lBQ3RDLE9BQU8sTUFBTSxTQUFTO0VBQ3hCO0VBRUEsY0FDRSxNQUFjLEVBQ2QsSUFBOEIsRUFDZDtJQUNoQixNQUFNLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHO0lBQzlDLE9BQU8sU0FBUztFQUNsQjtFQWNBLFFBQ0UsTUFBYyxFQUNkLElBQWEsRUFDYixRQUFrQyxFQUNsQyxPQUFPLEtBQUssRUFDYTtJQUN6QixJQUFJLE9BQU8sV0FBVyxVQUFVO01BQzlCLE1BQU0sSUFBSSxNQUNSLENBQUMsb0JBQW9CLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxPQUFPLFFBQVE7SUFFekU7SUFDQSxNQUFNLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO0lBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDO0lBRTNDLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU87SUFFckQsSUFBSSxpQkFBaUI7TUFDbkIsSUFBSTtRQUNGLE9BQU8sc0JBQXNCLE1BQU07TUFDckMsRUFBRSxPQUFPLE9BQU87UUFDZCxJQUFJLGlCQUFpQixnQkFBZ0I7VUFDbkMsTUFBTSxJQUFJLGNBQWMsTUFBTSxRQUFRLE1BQU0sUUFBUSxFQUFFO1FBQ3hEO1FBRUEsTUFBTSxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRSxNQUFNLEVBQUU7VUFBRTtRQUFNO01BQ3RFO0lBQ0Y7SUFFQSxNQUFNLGNBQWMsSUFBSSxTQUN0QixVQUNBLFNBQ0EsY0FDQSxTQUNBLENBQUMsTUFBTSxFQUFFLE9BQU8sS0FBSyxTQUFTLFdBQVcsRUFBRSxZQUFZOzs7VUFHbkQsRUFBRSxZQUFZLGlDQUFpQyxFQUFFLFlBQVk7O1VBRTdELEVBQUUsS0FBSzs7Ozs7OztNQU9YLENBQUM7SUFHSCxNQUFNLFdBQXFCLFlBQVksTUFBTSxJQUFJLEVBQUUsVUFBVTtJQUM3RCxTQUFTLElBQUksR0FBRztJQUNoQixTQUFTLElBQUksR0FBRztJQUNoQixTQUFTLE1BQU0sR0FBRztJQUNsQixPQUFPO0VBQ1Q7RUFFQSxTQUFTLE1BQWMsRUFBRSxJQUFhLEVBQVc7SUFDL0MsTUFBTSxTQUFTLFNBQVM7SUFDeEIsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHO0lBQ2pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUc7SUFFNUIsSUFBSSxPQUFPO01BQ1QsTUFBTSxJQUFJLGNBQWMsTUFBTSxRQUFRLFVBQVU7SUFDbEQ7SUFFQSxLQUFLLE1BQU0scUJBQXFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBRTtNQUN2RCxNQUFNLFNBQVMsa0JBQWtCLElBQUksRUFBRSxRQUFRO01BRS9DLElBQUksV0FBVyxXQUFXO1FBQ3hCLFNBQVM7TUFDWDtJQUNGO0lBRUEsT0FBTztFQUNUO0VBRUEsTUFBTSxLQUFLLElBQVksRUFBRSxJQUFhLEVBQXFCO0lBQ3pELE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJO0lBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO01BQ3pCLHdEQUF3RDtNQUN4RCxNQUFNLFlBQVksS0FDZixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDYixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFFaEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztNQUN4RCxNQUFNLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLE1BQU07TUFFNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtJQUN2QjtJQUVBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDeEI7RUFFQSxjQUNFLE1BQWUsRUFDZixZQUFZLG1CQUFtQixFQUMvQixNQUFpQixFQUNQO0lBQ1YsTUFBTSxXQUFxQixFQUFFO0lBRTdCLFFBQ0EsTUFBTyxPQUFPLE1BQU0sR0FBRyxFQUFHO01BQ3hCLElBQUksVUFBVSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO1FBQ3JFO01BQ0Y7TUFFQSxNQUFNLENBQUMsTUFBTSxNQUFNLElBQUksR0FBRyxPQUFPLEtBQUs7TUFFdEMsSUFBSSxTQUFTLFdBQVc7UUFDdEI7TUFDRjtNQUVBLElBQUksU0FBUyxVQUFVO1FBQ3JCLElBQUksU0FBUyxJQUFJO1VBQ2YsU0FBUyxJQUFJLENBQUMsR0FBRyxVQUFVLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRDtRQUNBO01BQ0Y7TUFFQSxJQUFJLFNBQVMsT0FBTztRQUNsQixTQUFTLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixLQUFLLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFFO1VBQzNCLE1BQU0sY0FBYyxJQUFJLElBQUksRUFBRSxNQUFNLFdBQVc7VUFFL0MsSUFBSSxPQUFPLGdCQUFnQixVQUFVO1lBQ25DLFNBQVMsSUFBSSxDQUFDO1lBQ2QsU0FBUztVQUNYO1FBQ0Y7UUFFQSw2QkFBNkI7UUFDN0IsTUFBTSxhQUFhLElBQUksQ0FBQyxjQUFjLENBQ3BDLFFBQ0EsTUFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7UUFFekIsU0FBUyxJQUFJLENBQUMsR0FBRyxVQUFVLEtBQUssRUFBRSxXQUFXLFFBQVEsQ0FBQztRQUN0RDtNQUNGO01BRUEsTUFBTSxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRDtJQUVBLE9BQU87RUFDVDtFQUVBLGVBQWUsTUFBZSxFQUFFLE1BQWMsRUFBRSxhQUFhLEtBQUssRUFBVTtJQUMxRSxJQUFJLFlBQVk7SUFFaEIsTUFBTyxPQUFPLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVU7TUFDckQsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLEtBQUs7TUFFN0IsTUFBTSxRQUFRLEtBQUssS0FBSyxDQUFDO01BRXpCLElBQUksQ0FBQyxPQUFPO1FBQ1YsTUFBTSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNO01BQzNDO01BRUEsTUFBTSxDQUFDLEdBQUcsU0FBUyxNQUFNLEtBQUssR0FBRztNQUVqQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO1FBQ3RDLElBQUksU0FBUyxRQUFRO1VBQ25CLFlBQVk7UUFDZCxPQUFPLElBQUksU0FBUyxPQUFPO1VBQ3pCLHVCQUF1QjtVQUN2QixTQUFTLEdBQUcsVUFBVSxXQUFXLEtBQUssS0FBSyxDQUFDLEVBQUUsU0FDNUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FDdEIsQ0FBQyxDQUFDO1FBQ0wsT0FBTztVQUNMLDBEQUEwRDtVQUMxRCxTQUFTLEdBQ1AsVUFBVSxXQUFXLEdBQ3RCLHVCQUF1QixFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNyRTtNQUNGLE9BQU87UUFDTCx1Q0FBdUM7UUFDdkMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPO1FBQ3BDLFNBQVMsR0FDUCxBQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSyxXQUFXLEdBQzFELGNBQWMsRUFBRSxLQUFLLFlBQVksRUFBRSxZQUFZLGFBQWEsRUFBRSxTQUM3RCxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxHQUN0QixDQUFDLENBQUM7TUFDTDtJQUNGO0lBRUEsb0JBQW9CO0lBQ3BCLElBQUksY0FBYyxDQUFDLFdBQVc7TUFDNUIsU0FBUyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDO0lBRUEsT0FBTztFQUNUO0FBQ0Y7QUFFQSxTQUFTLFNBQVMsSUFBWTtFQUM1Qiw4Q0FBOEM7RUFDOUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLE9BQU87SUFDbkMsT0FBTztFQUNUO0VBRUEsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNO0lBQ3RCLE1BQU0sQ0FBQyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQztJQUMvQiw4Q0FBOEM7SUFDOUMsT0FBTyxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO0VBQ3hDO0FBQ0Y7QUFFQSxtQ0FBbUM7QUFDbkMsU0FBUyxXQUFXLFVBQWUsRUFBRSxNQUFjLEVBQUUsR0FBRyxJQUFlO0VBQ3JFLElBQUksZUFBZSxRQUFRLGVBQWUsV0FBVztJQUNuRCxPQUFPO0VBQ1Q7RUFFQSxJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxZQUFZO0lBQzVDLE9BQU8sVUFBVSxDQUFDLE9BQU8sSUFBSTtFQUMvQjtFQUVBLE1BQU0sSUFBSSxNQUNSLENBQUMsQ0FBQyxFQUFFLE9BQU8sd0RBQXdELEVBQUUsT0FBTyxXQUFXLFNBQVMsQ0FBQztBQUVyRztBQUVBLFNBQVMsV0FBVyxFQUFpQjtFQUNuQyxPQUFPLEdBQUcsV0FBVyxFQUFFLFNBQVM7QUFDbEMifQ==
+// denoCacheMetadata=10722073564790835336,17743246261904758588 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a0fab84dd7db3361dc01a7e9adb6a56c8687824456dee2e7bda560162e212af5.js b/vendor/gen/https/deno.land/a0fab84dd7db3361dc01a7e9adb6a56c8687824456dee2e7bda560162e212af5.js
new file mode 100644
index 0000000..939a1ff
--- /dev/null
+++ b/vendor/gen/https/deno.land/a0fab84dd7db3361dc01a7e9adb6a56c8687824456dee2e7bda560162e212af5.js
@@ -0,0 +1,57 @@
+import { merge } from "../core/utils/object.ts";
+export const defaults = {
+ options: {
+ size: 10
+ }
+};
+/**
+ * A plugin to paginate pages
+ * Installed by default
+ * @see https://lume.land/plugins/paginate/
+ */ export function paginate(userOptions) {
+ const options = merge(defaults, userOptions);
+ return (site)=>{
+ if (!userOptions?.options?.url) {
+ const ext = site.options.prettyUrls ? "/index.html" : ".html";
+ options.options.url = (page)=>`./page-${page}${ext}`;
+ }
+ // Register the helper
+ site.data("paginate", createPaginator(options.options));
+ };
+}
+/** Create a paginator function */ export function createPaginator(defaults) {
+ return function paginate(results, userOptions = {}) {
+ const options = merge(defaults, userOptions);
+ const totalResults = results.length;
+ const totalPages = Math.ceil(results.length / options.size);
+ const result = [];
+ let page = 0;
+ while(++page <= totalPages){
+ const data = createPageData(page);
+ const from = (page - 1) * options.size;
+ const to = from + options.size;
+ data.results = results.slice(from, to);
+ if (options.each) {
+ options.each(data, page);
+ }
+ result.push(data);
+ }
+ return result;
+ function createPageData(page) {
+ return {
+ url: options.url(page),
+ results: [],
+ pagination: {
+ page,
+ totalPages,
+ totalResults,
+ previous: page > 1 ? options.url(page - 1) : null,
+ next: totalPages > page ? options.url(page + 1) : null
+ }
+ };
+ }
+ };
+}
+export default paginate;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy9wYWdpbmF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZSB9IGZyb20gXCIuLi9jb3JlL3V0aWxzL29iamVjdC50c1wiO1xuXG5pbXBvcnQgdHlwZSBTaXRlIGZyb20gXCIuLi9jb3JlL3NpdGUudHNcIjtcblxuLyoqIFRoZSBvcHRpb25zIGZvciB0aGUgcGFnaW5hdGUgaGVscGVyICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9ucyB7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHBlciBwYWdlICovXG4gIHNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgdXJsIG9mIHRoZSBwYWdlcyAqL1xuICB1cmw/OiAocGFnZTogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIG1vZGlmeSBvciBhZGQgZXh0cmEgZGF0YSB0byBlYWNoIHBhZ2UgKi9cbiAgZWFjaD86IChkYXRhOiBQYWdpbmF0ZVJlc3VsdDx1bmtub3duPiwgcGFnZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0b3IgPSA8VD4oXG4gIHJlc3VsdHM6IFRbXSxcbiAgdXNlck9wdGlvbnM/OiBQYXJ0aWFsPFBhZ2luYXRlT3B0aW9ucz4sXG4pID0+IFBhZ2luYXRlUmVzdWx0PFQ+W107XG5cbi8qKiBQYWdpbmF0aW9uIGluZm8gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkluZm8ge1xuICAvKiogVGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgKi9cbiAgcGFnZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzICovXG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcblxuICAvKiogVGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyAqL1xuICB0b3RhbFJlc3VsdHM6IG51bWJlcjtcblxuICAvKiogVGhlIHVybCBvZiB0aGUgcHJldmlvdXMgcGFnZSAqL1xuICBwcmV2aW91czogc3RyaW5nIHwgbnVsbDtcblxuICAvKiogVGhlIHVybCBvZiB0aGUgbmV4dCBwYWdlICovXG4gIG5leHQ6IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBUaGUgcGFnaW5hdGUgcmVzdWx0ICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlUmVzdWx0PFQ+IHtcbiAgLyoqIFRoZSBwYWdlIHVybCAqL1xuICB1cmw6IHN0cmluZztcblxuICAvKiogVGhlIGVsZW1lbnRzIGluIHRoaXMgcGFnZSAqL1xuICByZXN1bHRzOiBUW107XG5cbiAgLyoqIFRoZSBwYWdpbmF0aW9uIGluZm8gKi9cbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbkluZm87XG5cbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqIFRoZSBkZWZhdWx0IHBhZ2luYXRpb24gb3B0aW9ucyAqL1xuICBvcHRpb25zPzogUGFnaW5hdGVPcHRpb25zO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdHM6IE9wdGlvbnMgPSB7XG4gIG9wdGlvbnM6IHtcbiAgICBzaXplOiAxMCxcbiAgfSxcbn07XG5cbi8qKlxuICogQSBwbHVnaW4gdG8gcGFnaW5hdGUgcGFnZXNcbiAqIEluc3RhbGxlZCBieSBkZWZhdWx0XG4gKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvcGFnaW5hdGUvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0ZSh1c2VyT3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlKGRlZmF1bHRzLCB1c2VyT3B0aW9ucyk7XG5cbiAgcmV0dXJuIChzaXRlOiBTaXRlKSA9PiB7XG4gICAgaWYgKCF1c2VyT3B0aW9ucz8ub3B0aW9ucz8udXJsKSB7XG4gICAgICBjb25zdCBleHQgPSBzaXRlLm9wdGlvbnMucHJldHR5VXJscyA/IFwiL2luZGV4Lmh0bWxcIiA6IFwiLmh0bWxcIjtcbiAgICAgIG9wdGlvbnMub3B0aW9ucy51cmwgPSAocGFnZTogbnVtYmVyKSA9PiBgLi9wYWdlLSR7cGFnZX0ke2V4dH1gO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBoZWxwZXJcbiAgICBzaXRlLmRhdGEoXCJwYWdpbmF0ZVwiLCBjcmVhdGVQYWdpbmF0b3Iob3B0aW9ucy5vcHRpb25zKSk7XG4gIH07XG59XG5cbi8qKiBDcmVhdGUgYSBwYWdpbmF0b3IgZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0b3IoZGVmYXVsdHM6IFBhZ2luYXRlT3B0aW9ucyk6IFBhZ2luYXRvciB7XG4gIHJldHVybiBmdW5jdGlvbiBwYWdpbmF0ZTxUPihcbiAgICByZXN1bHRzOiBUW10sXG4gICAgdXNlck9wdGlvbnM6IFBhcnRpYWw8UGFnaW5hdGVPcHRpb25zPiA9IHt9LFxuICApIHtcbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2UoZGVmYXVsdHMsIHVzZXJPcHRpb25zKTtcbiAgICBjb25zdCB0b3RhbFJlc3VsdHMgPSByZXN1bHRzLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdHMubGVuZ3RoIC8gb3B0aW9ucy5zaXplKTtcblxuICAgIGNvbnN0IHJlc3VsdDogUGFnaW5hdGVSZXN1bHQ8VD5bXSA9IFtdO1xuICAgIGxldCBwYWdlID0gMDtcblxuICAgIHdoaWxlICgrK3BhZ2UgPD0gdG90YWxQYWdlcykge1xuICAgICAgY29uc3QgZGF0YSA9IGNyZWF0ZVBhZ2VEYXRhKHBhZ2UpO1xuICAgICAgY29uc3QgZnJvbSA9IChwYWdlIC0gMSkgKiBvcHRpb25zLnNpemU7XG4gICAgICBjb25zdCB0byA9IGZyb20gKyBvcHRpb25zLnNpemU7XG4gICAgICBkYXRhLnJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKGZyb20sIHRvKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZWFjaCkge1xuICAgICAgICBvcHRpb25zLmVhY2goZGF0YSwgcGFnZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC5wdXNoKGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWdlRGF0YShwYWdlOiBudW1iZXIpOiBQYWdpbmF0ZVJlc3VsdDxUPiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IG9wdGlvbnMudXJsKHBhZ2UpLFxuICAgICAgICByZXN1bHRzOiBbXSxcbiAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgdG90YWxQYWdlcyxcbiAgICAgICAgICB0b3RhbFJlc3VsdHMsXG4gICAgICAgICAgcHJldmlvdXM6IHBhZ2UgPiAxID8gb3B0aW9ucy51cmwocGFnZSAtIDEpIDogbnVsbCxcbiAgICAgICAgICBuZXh0OiB0b3RhbFBhZ2VzID4gcGFnZSA/IG9wdGlvbnMudXJsKHBhZ2UgKyAxKSA6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGU7XG5cbi8qKiBFeHRlbmRzIERhdGEgaW50ZXJmYWNlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBMdW1lIHtcbiAgICBleHBvcnQgdHlwZSB7IFBhZ2luYXRlUmVzdWx0IH07XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgcGFnaW5hdG9yIGhlbHBlclxuICAgICAgICogQHNlZSBodHRwczovL2x1bWUubGFuZC9wbHVnaW5zL3BhZ2luYXRlL1xuICAgICAgICovXG4gICAgICBwYWdpbmF0ZTogUGFnaW5hdG9yO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBwYWdpbmF0aW9uIGluZm9cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9sdW1lLmxhbmQvcGx1Z2lucy9wYWdpbmF0ZS9cbiAgICAgICAqL1xuICAgICAgcGFnaW5hdGlvbj86IFBhZ2luYXRpb25JbmZvO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBwYWdpbmF0aW9uIHJlc3VsdFxuICAgICAgICogQHNlZSBodHRwczovL2x1bWUubGFuZC9wbHVnaW5zL3BhZ2luYXRlL1xuICAgICAgICovXG4gICAgICByZXN1bHRzPzogRGF0YVtdO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLDBCQUEwQjtBQTBEaEQsT0FBTyxNQUFNLFdBQW9CO0VBQy9CLFNBQVM7SUFDUCxNQUFNO0VBQ1I7QUFDRixFQUFFO0FBRUY7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBUyxTQUFTLFdBQXFCO0VBQzVDLE1BQU0sVUFBVSxNQUFNLFVBQVU7RUFFaEMsT0FBTyxDQUFDO0lBQ04sSUFBSSxDQUFDLGFBQWEsU0FBUyxLQUFLO01BQzlCLE1BQU0sTUFBTSxLQUFLLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCO01BQ3RELFFBQVEsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSztJQUNoRTtJQUVBLHNCQUFzQjtJQUN0QixLQUFLLElBQUksQ0FBQyxZQUFZLGdCQUFnQixRQUFRLE9BQU87RUFDdkQ7QUFDRjtBQUVBLGdDQUFnQyxHQUNoQyxPQUFPLFNBQVMsZ0JBQWdCLFFBQXlCO0VBQ3ZELE9BQU8sU0FBUyxTQUNkLE9BQVksRUFDWixjQUF3QyxDQUFDLENBQUM7SUFFMUMsTUFBTSxVQUFVLE1BQU0sVUFBVTtJQUNoQyxNQUFNLGVBQWUsUUFBUSxNQUFNO0lBQ25DLE1BQU0sYUFBYSxLQUFLLElBQUksQ0FBQyxRQUFRLE1BQU0sR0FBRyxRQUFRLElBQUk7SUFFMUQsTUFBTSxTQUE4QixFQUFFO0lBQ3RDLElBQUksT0FBTztJQUVYLE1BQU8sRUFBRSxRQUFRLFdBQVk7TUFDM0IsTUFBTSxPQUFPLGVBQWU7TUFDNUIsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxJQUFJO01BQ3RDLE1BQU0sS0FBSyxPQUFPLFFBQVEsSUFBSTtNQUM5QixLQUFLLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxNQUFNO01BRW5DLElBQUksUUFBUSxJQUFJLEVBQUU7UUFDaEIsUUFBUSxJQUFJLENBQUMsTUFBTTtNQUNyQjtNQUVBLE9BQU8sSUFBSSxDQUFDO0lBQ2Q7SUFFQSxPQUFPO0lBRVAsU0FBUyxlQUFlLElBQVk7TUFDbEMsT0FBTztRQUNMLEtBQUssUUFBUSxHQUFHLENBQUM7UUFDakIsU0FBUyxFQUFFO1FBQ1gsWUFBWTtVQUNWO1VBQ0E7VUFDQTtVQUNBLFVBQVUsT0FBTyxJQUFJLFFBQVEsR0FBRyxDQUFDLE9BQU8sS0FBSztVQUM3QyxNQUFNLGFBQWEsT0FBTyxRQUFRLEdBQUcsQ0FBQyxPQUFPLEtBQUs7UUFDcEQ7TUFDRjtJQUNGO0VBQ0Y7QUFDRjtBQUVBLGVBQWUsU0FBUyJ9
+// denoCacheMetadata=3363691232633183071,14298317539027376755 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a1d7e697a2ce1b02191959f5519b60b7a0cff44624326e60882d91c949eb6e1a.js b/vendor/gen/https/deno.land/a1d7e697a2ce1b02191959f5519b60b7a0cff44624326e60882d91c949eb6e1a.js
new file mode 100644
index 0000000..b863efb
--- /dev/null
+++ b/vendor/gen/https/deno.land/a1d7e697a2ce1b02191959f5519b60b7a0cff44624326e60882d91c949eb6e1a.js
@@ -0,0 +1,4 @@
+export * from "jsr:@std/path@1.0.9";
+export * as posix from "jsr:@std/path@1.0.9/posix";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJqc3I6QHN0ZC9wYXRoQDEuMC45XCI7XG5leHBvcnQgKiBhcyBwb3NpeCBmcm9tIFwianNyOkBzdGQvcGF0aEAxLjAuOS9wb3NpeFwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCO0FBQ3BDLE9BQU8sS0FBSyxLQUFLLE1BQU0sNEJBQTRCIn0=
+// denoCacheMetadata=11973340054162728824,17203654548082326383 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a1ecf01679e9a072e3fcb67fdc0c72bd9f0cb869e0da64dcaaa6d66c6426485d.js b/vendor/gen/https/deno.land/a1ecf01679e9a072e3fcb67fdc0c72bd9f0cb869e0da64dcaaa6d66c6426485d.js
new file mode 100644
index 0000000..c8c17ec
--- /dev/null
+++ b/vendor/gen/https/deno.land/a1ecf01679e9a072e3fcb67fdc0c72bd9f0cb869e0da64dcaaa6d66c6426485d.js
@@ -0,0 +1,45 @@
+import lume from "../mod.ts";
+import { toFileUrl } from "../deps/path.ts";
+import { isUrl } from "../core/utils/path.ts";
+import { getConfigFile } from "../core/utils/lume_config.ts";
+import { log } from "../core/utils/log.ts";
+import Site from "../core/site.ts";
+/** Create a site instance */ export async function createSite(config) {
+ let url;
+ const watchInclude = [];
+ if (config && isUrl(config)) {
+ url = config;
+ } else {
+ const path = await getConfigFile(config);
+ if (path) {
+ watchInclude.push(path);
+ url = toFileUrl(path).href;
+ }
+ }
+ if (url) {
+ log.info(`Loading config file <gray>${url}</gray>`);
+ const mod = await import(url);
+ const site = mod.default;
+ if (!(site instanceof Site)) {
+ log.fatal(`[Lume] Missing Site instance! Ensure your config file does export the Site instance as default.`);
+ throw new Error("Site instance is not found");
+ }
+ site._data.configFile = url;
+ site.options.watcher.include.push(...watchInclude);
+ return site;
+ }
+ return lume();
+}
+/** Create a site intance and build it */ export async function buildSite(config) {
+ const site = await createSite(config);
+ performance.mark("start");
+ await site.build();
+ performance.mark("end");
+ log.info(`🍾 Site built into <gray>${site.options.dest}</gray>`);
+ const duration = performance.measure("duration", "start", "end").duration / 1000;
+ const total = site.pages.length + site.files.length;
+ log.info(` <gray>${total} files generated in ${duration.toFixed(2)} seconds</gray>`);
+ return site;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY2xpL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsdW1lIGZyb20gXCIuLi9tb2QudHNcIjtcbmltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCIuLi9kZXBzL3BhdGgudHNcIjtcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnRmlsZSB9IGZyb20gXCIuLi9jb3JlL3V0aWxzL2x1bWVfY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi4vY29yZS91dGlscy9sb2cudHNcIjtcbmltcG9ydCBTaXRlIGZyb20gXCIuLi9jb3JlL3NpdGUudHNcIjtcblxuLyoqIENyZWF0ZSBhIHNpdGUgaW5zdGFuY2UgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTaXRlKGNvbmZpZz86IHN0cmluZyk6IFByb21pc2U8U2l0ZT4ge1xuICBsZXQgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHdhdGNoSW5jbHVkZSA9IFtdO1xuXG4gIGlmIChjb25maWcgJiYgaXNVcmwoY29uZmlnKSkge1xuICAgIHVybCA9IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgZ2V0Q29uZmlnRmlsZShjb25maWcpO1xuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHdhdGNoSW5jbHVkZS5wdXNoKHBhdGgpO1xuICAgICAgdXJsID0gdG9GaWxlVXJsKHBhdGgpLmhyZWY7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVybCkge1xuICAgIGxvZy5pbmZvKGBMb2FkaW5nIGNvbmZpZyBmaWxlIDxncmF5PiR7dXJsfTwvZ3JheT5gKTtcbiAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQodXJsKTtcbiAgICBjb25zdCBzaXRlID0gbW9kLmRlZmF1bHQgYXMgU2l0ZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIShzaXRlIGluc3RhbmNlb2YgU2l0ZSkpIHtcbiAgICAgIGxvZy5mYXRhbChcbiAgICAgICAgYFtMdW1lXSBNaXNzaW5nIFNpdGUgaW5zdGFuY2UhIEVuc3VyZSB5b3VyIGNvbmZpZyBmaWxlIGRvZXMgZXhwb3J0IHRoZSBTaXRlIGluc3RhbmNlIGFzIGRlZmF1bHQuYCxcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXRlIGluc3RhbmNlIGlzIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBzaXRlLl9kYXRhLmNvbmZpZ0ZpbGUgPSB1cmw7XG4gICAgc2l0ZS5vcHRpb25zLndhdGNoZXIuaW5jbHVkZS5wdXNoKC4uLndhdGNoSW5jbHVkZSk7XG4gICAgcmV0dXJuIHNpdGU7XG4gIH1cblxuICByZXR1cm4gbHVtZSgpO1xufVxuXG4vKiogQ3JlYXRlIGEgc2l0ZSBpbnRhbmNlIGFuZCBidWlsZCBpdCAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2l0ZShjb25maWc/OiBzdHJpbmcpOiBQcm9taXNlPFNpdGU+IHtcbiAgY29uc3Qgc2l0ZSA9IGF3YWl0IGNyZWF0ZVNpdGUoY29uZmlnKTtcblxuICBwZXJmb3JtYW5jZS5tYXJrKFwic3RhcnRcIik7XG4gIGF3YWl0IHNpdGUuYnVpbGQoKTtcbiAgcGVyZm9ybWFuY2UubWFyayhcImVuZFwiKTtcblxuICBsb2cuaW5mbyhg8J+NviBTaXRlIGJ1aWx0IGludG8gPGdyYXk+JHtzaXRlLm9wdGlvbnMuZGVzdH08L2dyYXk+YCk7XG4gIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2UubWVhc3VyZShcImR1cmF0aW9uXCIsIFwic3RhcnRcIiwgXCJlbmRcIikuZHVyYXRpb24gL1xuICAgIDEwMDA7XG4gIGNvbnN0IHRvdGFsID0gc2l0ZS5wYWdlcy5sZW5ndGggKyBzaXRlLmZpbGVzLmxlbmd0aDtcbiAgbG9nLmluZm8oXG4gICAgYCAgPGdyYXk+JHt0b3RhbH0gZmlsZXMgZ2VuZXJhdGVkIGluICR7ZHVyYXRpb24udG9GaXhlZCgyKX0gc2Vjb25kczwvZ3JheT5gLFxuICApO1xuXG4gIHJldHVybiBzaXRlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxZQUFZO0FBQzdCLFNBQVMsU0FBUyxRQUFRLGtCQUFrQjtBQUM1QyxTQUFTLEtBQUssUUFBUSx3QkFBd0I7QUFDOUMsU0FBUyxhQUFhLFFBQVEsK0JBQStCO0FBQzdELFNBQVMsR0FBRyxRQUFRLHVCQUF1QjtBQUMzQyxPQUFPLFVBQVUsa0JBQWtCO0FBRW5DLDJCQUEyQixHQUMzQixPQUFPLGVBQWUsV0FBVyxNQUFlO0VBQzlDLElBQUk7RUFDSixNQUFNLGVBQWUsRUFBRTtFQUV2QixJQUFJLFVBQVUsTUFBTSxTQUFTO0lBQzNCLE1BQU07RUFDUixPQUFPO0lBQ0wsTUFBTSxPQUFPLE1BQU0sY0FBYztJQUVqQyxJQUFJLE1BQU07TUFDUixhQUFhLElBQUksQ0FBQztNQUNsQixNQUFNLFVBQVUsTUFBTSxJQUFJO0lBQzVCO0VBQ0Y7RUFFQSxJQUFJLEtBQUs7SUFDUCxJQUFJLElBQUksQ0FBQyxDQUFDLDBCQUEwQixFQUFFLElBQUksT0FBTyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxNQUFNLE1BQU0sQ0FBQztJQUN6QixNQUFNLE9BQU8sSUFBSSxPQUFPO0lBQ3hCLElBQUksQ0FBQyxDQUFDLGdCQUFnQixJQUFJLEdBQUc7TUFDM0IsSUFBSSxLQUFLLENBQ1AsQ0FBQywrRkFBK0YsQ0FBQztNQUVuRyxNQUFNLElBQUksTUFBTTtJQUNsQjtJQUVBLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRztJQUN4QixLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtJQUNyQyxPQUFPO0VBQ1Q7RUFFQSxPQUFPO0FBQ1Q7QUFFQSx1Q0FBdUMsR0FDdkMsT0FBTyxlQUFlLFVBQVUsTUFBZTtFQUM3QyxNQUFNLE9BQU8sTUFBTSxXQUFXO0VBRTlCLFlBQVksSUFBSSxDQUFDO0VBQ2pCLE1BQU0sS0FBSyxLQUFLO0VBQ2hCLFlBQVksSUFBSSxDQUFDO0VBRWpCLElBQUksSUFBSSxDQUFDLENBQUMseUJBQXlCLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztFQUMvRCxNQUFNLFdBQVcsWUFBWSxPQUFPLENBQUMsWUFBWSxTQUFTLE9BQU8sUUFBUSxHQUN2RTtFQUNGLE1BQU0sUUFBUSxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxLQUFLLENBQUMsTUFBTTtFQUNuRCxJQUFJLElBQUksQ0FDTixDQUFDLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixFQUFFLFNBQVMsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDO0VBRzdFLE9BQU87QUFDVCJ9
+// denoCacheMetadata=2042069628751175414,4204658886903053925 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a1f0a3b1767fb95b49e43ce38f4e77a0b6d2a5f812e7292dff495ef6dcc715ae.js b/vendor/gen/https/deno.land/a1f0a3b1767fb95b49e43ce38f4e77a0b6d2a5f812e7292dff495ef6dcc715ae.js
new file mode 100644
index 0000000..71ce4ce
--- /dev/null
+++ b/vendor/gen/https/deno.land/a1f0a3b1767fb95b49e43ce38f4e77a0b6d2a5f812e7292dff495ef6dcc715ae.js
@@ -0,0 +1,28 @@
+import { brightGreen, gray, red } from "../deps/colors.ts";
+/** Log the request/responses */ export function log() {
+ return async (request, next)=>{
+ try {
+ const response = await next(request);
+ const url = new URL(request.url);
+ const pathname = decodeURIComponent(url.pathname);
+ const { status } = response;
+ if (status === 404 || status === 500) {
+ console.log(`${red(status.toString())} ${pathname}`);
+ } else if (status === 200) {
+ console.log(`${brightGreen(status.toString())} ${pathname}`);
+ } else if (status === 301 || status === 302) {
+ console.log(`${gray(status.toString())} ${pathname} => ${response.headers?.get("location")}`);
+ } else {
+ console.log(`${gray(status.toString())} ${pathname}`);
+ }
+ return response;
+ } catch (cause) {
+ return new Response(`Error: ${cause.toString()}`, {
+ status: 500
+ });
+ }
+ };
+}
+export default log;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvbWlkZGxld2FyZXMvbG9nZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJyaWdodEdyZWVuLCBncmF5LCByZWQgfSBmcm9tIFwiLi4vZGVwcy9jb2xvcnMudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL2NvcmUvc2VydmVyLnRzXCI7XG5cbi8qKiBMb2cgdGhlIHJlcXVlc3QvcmVzcG9uc2VzICovXG5leHBvcnQgZnVuY3Rpb24gbG9nKCk6IE1pZGRsZXdhcmUge1xuICByZXR1cm4gYXN5bmMgKHJlcXVlc3QsIG5leHQpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGF0aG5hbWUpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoc3RhdHVzID09PSA0MDQgfHwgc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7cmVkKHN0YXR1cy50b1N0cmluZygpKX0gJHtwYXRobmFtZX1gKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7YnJpZ2h0R3JlZW4oc3RhdHVzLnRvU3RyaW5nKCkpfSAke3BhdGhuYW1lfWApO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDMwMSB8fCBzdGF0dXMgPT09IDMwMikge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtncmF5KHN0YXR1cy50b1N0cmluZygpKX0gJHtwYXRobmFtZX0gPT4gJHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnM/LmdldChcbiAgICAgICAgICAgICAgXCJsb2NhdGlvblwiLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1gLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7Z3JheShzdGF0dXMudG9TdHJpbmcoKSl9ICR7cGF0aG5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICAgICAgYEVycm9yOiAke2NhdXNlLnRvU3RyaW5nKCl9YCxcbiAgICAgICAgeyBzdGF0dXM6IDUwMCB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLG9CQUFvQjtBQUkzRCw4QkFBOEIsR0FDOUIsT0FBTyxTQUFTO0VBQ2QsT0FBTyxPQUFPLFNBQVM7SUFDckIsSUFBSTtNQUNGLE1BQU0sV0FBVyxNQUFNLEtBQUs7TUFDNUIsTUFBTSxNQUFNLElBQUksSUFBSSxRQUFRLEdBQUc7TUFDL0IsTUFBTSxXQUFXLG1CQUFtQixJQUFJLFFBQVE7TUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHO01BRW5CLElBQUksV0FBVyxPQUFPLFdBQVcsS0FBSztRQUNwQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksT0FBTyxRQUFRLElBQUksQ0FBQyxFQUFFLFVBQVU7TUFDckQsT0FBTyxJQUFJLFdBQVcsS0FBSztRQUN6QixRQUFRLEdBQUcsQ0FBQyxHQUFHLFlBQVksT0FBTyxRQUFRLElBQUksQ0FBQyxFQUFFLFVBQVU7TUFDN0QsT0FBTyxJQUFJLFdBQVcsT0FBTyxXQUFXLEtBQUs7UUFDM0MsUUFBUSxHQUFHLENBQ1QsR0FBRyxLQUFLLE9BQU8sUUFBUSxJQUFJLENBQUMsRUFBRSxTQUFTLElBQUksRUFDekMsU0FBUyxPQUFPLEVBQUUsSUFDaEIsYUFFRjtNQUVOLE9BQU87UUFDTCxRQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQUssT0FBTyxRQUFRLElBQUksQ0FBQyxFQUFFLFVBQVU7TUFDdEQ7TUFFQSxPQUFPO0lBQ1QsRUFBRSxPQUFPLE9BQU87TUFDZCxPQUFPLElBQUksU0FDVCxDQUFDLE9BQU8sRUFBRSxNQUFNLFFBQVEsSUFBSSxFQUM1QjtRQUFFLFFBQVE7TUFBSTtJQUVsQjtFQUNGO0FBQ0Y7QUFFQSxlQUFlLElBQUkifQ==
+// denoCacheMetadata=16544281629193175687,3939433164643484295 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a1ffddb82c7c3d3a654ac3cae5af0c27137ea544999726961b8a861fc3d109af.js b/vendor/gen/https/deno.land/a1ffddb82c7c3d3a654ac3cae5af0c27137ea544999726961b8a861fc3d109af.js
new file mode 100644
index 0000000..4393d7c
--- /dev/null
+++ b/vendor/gen/https/deno.land/a1ffddb82c7c3d3a654ac3cae5af0c27137ea544999726961b8a861fc3d109af.js
@@ -0,0 +1,115 @@
+import { posix } from "../deps/path.ts";
+import Events from "./events.ts";
+import { serveFile as httpServeFile } from "../deps/http.ts";
+import { decodeURIComponentSafe } from "./utils/path.ts";
+import { merge } from "./utils/object.ts";
+export const defaults = {
+ root: `${Deno.cwd()}/_site`,
+ port: 8000,
+ serveFile
+};
+export default class Server {
+ events = new Events();
+ options;
+ middlewares = [];
+ #server;
+ fetch;
+ constructor(options = {}){
+ this.options = merge(defaults, options);
+ if (this.options.hostname === "localhost") {
+ this.options.hostname = "0.0.0.0";
+ }
+ // Create the fetch function for `deno serve`
+ this.fetch = (request, info)=>{
+ return this.handle(request, info);
+ };
+ }
+ /** The local address this server is listening on. */ get addr() {
+ return this.#server?.addr;
+ }
+ /** Register one or more middlewares */ use(...middleware) {
+ this.middlewares.push(...middleware);
+ return this;
+ }
+ /** Add a listener to an event */ addEventListener(type, listener, options) {
+ this.events.addEventListener(type, listener, options);
+ return this;
+ }
+ /** Dispatch an event */ dispatchEvent(event) {
+ return this.events.dispatchEvent(event);
+ }
+ /** Start the server */ start(signal) {
+ this.#server = Deno.serve({
+ ...this.options,
+ signal,
+ onListen: ()=>this.dispatchEvent({
+ type: "start"
+ })
+ }, this.handle.bind(this));
+ }
+ /** Stops the server */ stop() {
+ try {
+ this.#server?.shutdown();
+ } catch (err) {
+ this.dispatchEvent({
+ type: "error",
+ error: err
+ });
+ }
+ }
+ /** Handle a http request event */ async handle(request, info) {
+ const middlewares = [
+ ...this.middlewares
+ ];
+ const next = async (request)=>{
+ const middleware = middlewares.shift();
+ if (middleware) {
+ return await middleware(request, next, info);
+ }
+ return await this.options.serveFile(this.options.root, request);
+ };
+ return await next(request);
+ }
+}
+/** Serve a static file */ export async function serveFile(root, request) {
+ const url = new URL(request.url);
+ const pathname = decodeURIComponentSafe(url.pathname);
+ const path = posix.join(root, pathname);
+ try {
+ const file = path.endsWith("/") ? path + "index.html" : path;
+ // Redirect /example to /example/
+ const info = await Deno.stat(file);
+ if (info.isDirectory) {
+ return new Response(null, {
+ status: 301,
+ headers: {
+ location: posix.join(pathname, "/")
+ }
+ });
+ }
+ // Serve the static file
+ return await fixServeFile(request, file);
+ } catch {
+ try {
+ // Exists a HTML file with this name?
+ if (!posix.extname(path)) {
+ return await fixServeFile(request, path + ".html");
+ }
+ } catch {
+ // Continue
+ }
+ return new Response("Not found", {
+ status: 404
+ });
+ }
+}
+async function fixServeFile(request, path) {
+ const response = await httpServeFile(request, path);
+ // Fix for https://github.com/lumeland/lume/issues/734
+ if (response.headers.get("content-type") === "application/rss+xml") {
+ response.headers.set("content-type", "application/xml");
+ }
+ return response;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcG9zaXggfSBmcm9tIFwiLi4vZGVwcy9wYXRoLnRzXCI7XG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL2V2ZW50cy50c1wiO1xuaW1wb3J0IHsgc2VydmVGaWxlIGFzIGh0dHBTZXJ2ZUZpbGUgfSBmcm9tIFwiLi4vZGVwcy9odHRwLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgRXZlbnQsIEV2ZW50TGlzdGVuZXIsIEV2ZW50T3B0aW9ucyB9IGZyb20gXCIuL2V2ZW50cy50c1wiO1xuaW1wb3J0IHsgZGVjb2RlVVJJQ29tcG9uZW50U2FmZSB9IGZyb20gXCIuL3V0aWxzL3BhdGgudHNcIjtcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSBcIi4vdXRpbHMvb2JqZWN0LnRzXCI7XG5cbi8qKiBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxvY2FsIHNlcnZlciAqL1xuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIGV4dGVuZHMgRGVuby5TZXJ2ZU9wdGlvbnMge1xuICAvKiogVGhlIHJvb3QgcGF0aCAqL1xuICByb290OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIGhvc3RuYW1lPzogc3RyaW5nO1xuICBzZXJ2ZUZpbGU/OiAocm9vdDogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0KSA9PiBQcm9taXNlPFJlc3BvbnNlPjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzOiBPcHRpb25zID0ge1xuICByb290OiBgJHtEZW5vLmN3ZCgpfS9fc2l0ZWAsXG4gIHBvcnQ6IDgwMDAsXG4gIHNlcnZlRmlsZSxcbn07XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIYW5kbGVyID0gKHJlcTogUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXNwb25zZT47XG5leHBvcnQgdHlwZSBNaWRkbGV3YXJlID0gKFxuICByZXE6IFJlcXVlc3QsXG4gIG5leHQ6IFJlcXVlc3RIYW5kbGVyLFxuICBpbmZvOiBEZW5vLlNlcnZlSGFuZGxlckluZm8sXG4pID0+IFByb21pc2U8UmVzcG9uc2U+O1xuXG4vKiogQ3VzdG9tIGV2ZW50cyBmb3Igc2VydmVyICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAvKiogVGhlIGV2ZW50IHR5cGUgKi9cbiAgdHlwZTogU2VydmVyRXZlbnRUeXBlO1xuXG4gIC8qKiBUaGUgcmVxdWVzdCBvYmplY3QgKi9cbiAgcmVxdWVzdD86IFJlcXVlc3Q7XG5cbiAgLyoqIFRoZSBlcnJvciBvYmplY3QgKG9ubHkgZm9yIFwiZXJyb3JcIiBldmVudHMpICovXG4gIGVycm9yPzogRXJyb3I7XG59XG5cbi8qKiBUaGUgYXZhaWxhYmxlIGV2ZW50IHR5cGVzICovXG5leHBvcnQgdHlwZSBTZXJ2ZXJFdmVudFR5cGUgPVxuICB8IFwic3RhcnRcIlxuICB8IFwiZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VydmVyIHtcbiAgZXZlbnRzOiBFdmVudHM8U2VydmVyRXZlbnQ+ID0gbmV3IEV2ZW50czxTZXJ2ZXJFdmVudD4oKTtcbiAgb3B0aW9uczogUmVxdWlyZWQ8T3B0aW9ucz47XG4gIG1pZGRsZXdhcmVzOiBNaWRkbGV3YXJlW10gPSBbXTtcbiAgI3NlcnZlcj86IERlbm8uSHR0cFNlcnZlcjtcbiAgZmV0Y2g6IERlbm8uU2VydmVIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlKGRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaG9zdG5hbWUgPT09IFwibG9jYWxob3N0XCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5ob3N0bmFtZSA9IFwiMC4wLjAuMFwiO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZmV0Y2ggZnVuY3Rpb24gZm9yIGBkZW5vIHNlcnZlYFxuICAgIHRoaXMuZmV0Y2ggPSAocmVxdWVzdDogUmVxdWVzdCwgaW5mbzogRGVuby5TZXJ2ZUhhbmRsZXJJbmZvKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGUocmVxdWVzdCwgaW5mbyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBUaGUgbG9jYWwgYWRkcmVzcyB0aGlzIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uICovXG4gIGdldCBhZGRyKCk6IERlbm8uQWRkciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI3NlcnZlcj8uYWRkcjtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBvbmUgb3IgbW9yZSBtaWRkbGV3YXJlcyAqL1xuICB1c2UoLi4ubWlkZGxld2FyZTogTWlkZGxld2FyZVtdKSB7XG4gICAgdGhpcy5taWRkbGV3YXJlcy5wdXNoKC4uLm1pZGRsZXdhcmUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEFkZCBhIGxpc3RlbmVyIHRvIGFuIGV2ZW50ICovXG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogU2VydmVyRXZlbnRUeXBlLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyPFNlcnZlckV2ZW50PixcbiAgICBvcHRpb25zPzogRXZlbnRPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaCBhbiBldmVudCAqL1xuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBTZXJ2ZXJFdmVudCkge1xuICAgIHJldHVybiB0aGlzLmV2ZW50cy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBTdGFydCB0aGUgc2VydmVyICovXG4gIHN0YXJ0KHNpZ25hbD86IERlbm8uU2VydmVPcHRpb25zW1wic2lnbmFsXCJdKSB7XG4gICAgdGhpcy4jc2VydmVyID0gRGVuby5zZXJ2ZSh7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBzaWduYWwsXG4gICAgICBvbkxpc3RlbjogKCkgPT4gdGhpcy5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJzdGFydFwiIH0pLFxuICAgIH0sIHRoaXMuaGFuZGxlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqIFN0b3BzIHRoZSBzZXJ2ZXIgKi9cbiAgc3RvcCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy4jc2VydmVyPy5zaHV0ZG93bigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogZXJyIGFzIEVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGh0dHAgcmVxdWVzdCBldmVudCAqL1xuICBhc3luYyBoYW5kbGUoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBpbmZvOiBEZW5vLlNlcnZlSGFuZGxlckluZm8sXG4gICk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBjb25zdCBtaWRkbGV3YXJlcyA9IFsuLi50aGlzLm1pZGRsZXdhcmVzXTtcblxuICAgIGNvbnN0IG5leHQ6IFJlcXVlc3RIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBtaWRkbGV3YXJlID0gbWlkZGxld2FyZXMuc2hpZnQoKTtcblxuICAgICAgaWYgKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1pZGRsZXdhcmUocmVxdWVzdCwgbmV4dCwgaW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGlvbnMuc2VydmVGaWxlKHRoaXMub3B0aW9ucy5yb290LCByZXF1ZXN0KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IG5leHQocmVxdWVzdCk7XG4gIH1cbn1cblxuLyoqIFNlcnZlIGEgc3RhdGljIGZpbGUgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJ2ZUZpbGUoXG4gIHJvb3Q6IHN0cmluZyxcbiAgcmVxdWVzdDogUmVxdWVzdCxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gIGNvbnN0IHBhdGhuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50U2FmZSh1cmwucGF0aG5hbWUpO1xuICBjb25zdCBwYXRoID0gcG9zaXguam9pbihyb290LCBwYXRobmFtZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlID0gcGF0aC5lbmRzV2l0aChcIi9cIikgPyBwYXRoICsgXCJpbmRleC5odG1sXCIgOiBwYXRoO1xuXG4gICAgLy8gUmVkaXJlY3QgL2V4YW1wbGUgdG8gL2V4YW1wbGUvXG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IERlbm8uc3RhdChmaWxlKTtcblxuICAgIGlmIChpbmZvLmlzRGlyZWN0b3J5KSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgc3RhdHVzOiAzMDEsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBsb2NhdGlvbjogcG9zaXguam9pbihwYXRobmFtZSwgXCIvXCIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VydmUgdGhlIHN0YXRpYyBmaWxlXG4gICAgcmV0dXJuIGF3YWl0IGZpeFNlcnZlRmlsZShyZXF1ZXN0LCBmaWxlKTtcbiAgfSBjYXRjaCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEV4aXN0cyBhIEhUTUwgZmlsZSB3aXRoIHRoaXMgbmFtZT9cbiAgICAgIGlmICghcG9zaXguZXh0bmFtZShwYXRoKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZml4U2VydmVGaWxlKHJlcXVlc3QsIHBhdGggKyBcIi5odG1sXCIpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgICAgXCJOb3QgZm91bmRcIixcbiAgICAgIHsgc3RhdHVzOiA0MDQgfSxcbiAgICApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeFNlcnZlRmlsZShyZXF1ZXN0OiBSZXF1ZXN0LCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHR0cFNlcnZlRmlsZShyZXF1ZXN0LCBwYXRoKTtcblxuICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9sdW1lbGFuZC9sdW1lL2lzc3Vlcy83MzRcbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpID09PSBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIikge1xuICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb24veG1sXCIpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLGtCQUFrQjtBQUN4QyxPQUFPLFlBQVksY0FBYztBQUNqQyxTQUFTLGFBQWEsYUFBYSxRQUFRLGtCQUFrQjtBQUc3RCxTQUFTLHNCQUFzQixRQUFRLGtCQUFrQjtBQUN6RCxTQUFTLEtBQUssUUFBUSxvQkFBb0I7QUFXMUMsT0FBTyxNQUFNLFdBQW9CO0VBQy9CLE1BQU0sR0FBRyxLQUFLLEdBQUcsR0FBRyxNQUFNLENBQUM7RUFDM0IsTUFBTTtFQUNOO0FBQ0YsRUFBRTtBQTBCRixlQUFlLE1BQU07RUFDbkIsU0FBOEIsSUFBSSxTQUFzQjtFQUN4RCxRQUEyQjtFQUMzQixjQUE0QixFQUFFLENBQUM7RUFDL0IsQ0FBQSxNQUFPLENBQW1CO0VBQzFCLE1BQXlCO0VBRXpCLFlBQVksVUFBNEIsQ0FBQyxDQUFDLENBQUU7SUFDMUMsSUFBSSxDQUFDLE9B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
+// denoCacheMetadata=4688306983084188218,7259532271230754078 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a2c4e100e69a26246471a4a40b33c5e69175effef0af41eea14e1289d6214ab6.js b/vendor/gen/https/deno.land/a2c4e100e69a26246471a4a40b33c5e69175effef0af41eea14e1289d6214ab6.js
new file mode 100644
index 0000000..6ceb5ba
--- /dev/null
+++ b/vendor/gen/https/deno.land/a2c4e100e69a26246471a4a40b33c5e69175effef0af41eea14e1289d6214ab6.js
@@ -0,0 +1,9 @@
+import { html } from "../deps.ts";
+export default function() {
+ return (env)=>{
+ // deno-lint-ignore no-explicit-any
+ env.filters.escape = (value)=>value ? html.escape(value.toString()) : "";
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2VzY2FwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4uL2RlcHMudHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCk6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgZW52LmZpbHRlcnMuZXNjYXBlID0gKHZhbHVlOiBhbnkpID0+XG4gICAgICB2YWx1ZSA/IGh0bWwuZXNjYXBlKHZhbHVlLnRvU3RyaW5nKCkpIDogXCJcIjtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLElBQUksUUFBUSxhQUFhO0FBR2xDLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixtQ0FBbUM7SUFDbkMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsUUFDcEIsUUFBUSxLQUFLLE1BQU0sQ0FBQyxNQUFNLFFBQVEsTUFBTTtFQUM1QztBQUNGIn0=
+// denoCacheMetadata=1498635866432030645,3942014168243327901 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a2ebd302f1560ba601d7654f6a17f7c6a896c262db50e1178bb6677802f39401.js b/vendor/gen/https/deno.land/a2ebd302f1560ba601d7654f6a17f7c6a896c262db50e1178bb6677802f39401.js
new file mode 100644
index 0000000..e23a208
--- /dev/null
+++ b/vendor/gen/https/deno.land/a2ebd302f1560ba601d7654f6a17f7c6a896c262db50e1178bb6677802f39401.js
@@ -0,0 +1,26 @@
+import { Command } from "../command.ts";
+import { dim, italic } from "../deps.ts";
+import { BashCompletionsCommand } from "./bash.ts";
+import { CompleteCommand } from "./complete.ts";
+import { FishCompletionsCommand } from "./fish.ts";
+import { ZshCompletionsCommand } from "./zsh.ts";
+/** Generates shell completion scripts for various shells. */ export class CompletionsCommand extends Command {
+ #cmd;
+ constructor(cmd){
+ super();
+ this.#cmd = cmd;
+ return this.description(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ return `Generate shell completions.
+
+To enable shell completions for this program add the following line to your ${dim(italic("~/.bashrc"))} or similar:
+
+ ${dim(italic(`source <(${baseCmd.getPath()} completions [shell])`))}
+
+ For more information run ${dim(italic(`${baseCmd.getPath()} completions [shell] --help`))}
+`;
+ }).noGlobals().action(()=>this.showHelp()).command("bash", new BashCompletionsCommand(this.#cmd)).command("fish", new FishCompletionsCommand(this.#cmd)).command("zsh", new ZshCompletionsCommand(this.#cmd)).command("complete", new CompleteCommand(this.#cmd).hidden()).reset();
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBkaW0sIGl0YWxpYyB9IGZyb20gXCIuLi9kZXBzLnRzXCI7XG5pbXBvcnQgeyBCYXNoQ29tcGxldGlvbnNDb21tYW5kIH0gZnJvbSBcIi4vYmFzaC50c1wiO1xuaW1wb3J0IHsgQ29tcGxldGVDb21tYW5kIH0gZnJvbSBcIi4vY29tcGxldGUudHNcIjtcbmltcG9ydCB7IEZpc2hDb21wbGV0aW9uc0NvbW1hbmQgfSBmcm9tIFwiLi9maXNoLnRzXCI7XG5pbXBvcnQgeyBac2hDb21wbGV0aW9uc0NvbW1hbmQgfSBmcm9tIFwiLi96c2gudHNcIjtcblxuLyoqIEdlbmVyYXRlcyBzaGVsbCBjb21wbGV0aW9uIHNjcmlwdHMgZm9yIHZhcmlvdXMgc2hlbGxzLiAqL1xuZXhwb3J0IGNsYXNzIENvbXBsZXRpb25zQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAjY21kPzogQ29tbWFuZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY21kPzogQ29tbWFuZCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jY21kID0gY21kO1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuZGVzY3JpcHRpb24oKCkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlQ21kID0gdGhpcy4jY21kIHx8IHRoaXMuZ2V0TWFpbkNvbW1hbmQoKTtcbiAgICAgICAgcmV0dXJuIGBHZW5lcmF0ZSBzaGVsbCBjb21wbGV0aW9ucy5cblxuVG8gZW5hYmxlIHNoZWxsIGNvbXBsZXRpb25zIGZvciB0aGlzIHByb2dyYW0gYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyICR7XG4gICAgICAgICAgZGltKGl0YWxpYyhcIn4vLmJhc2hyY1wiKSlcbiAgICAgICAgfSBvciBzaW1pbGFyOlxuXG4gICAgJHtkaW0oaXRhbGljKGBzb3VyY2UgPCgke2Jhc2VDbWQuZ2V0UGF0aCgpfSBjb21wbGV0aW9ucyBbc2hlbGxdKWApKX1cblxuICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJ1biAke1xuICAgICAgICAgIGRpbShpdGFsaWMoYCR7YmFzZUNtZC5nZXRQYXRoKCl9IGNvbXBsZXRpb25zIFtzaGVsbF0gLS1oZWxwYCkpXG4gICAgICAgIH1cbmA7XG4gICAgICB9KVxuICAgICAgLm5vR2xvYmFscygpXG4gICAgICAuYWN0aW9uKCgpID0+IHRoaXMuc2hvd0hlbHAoKSlcbiAgICAgIC5jb21tYW5kKFwiYmFzaFwiLCBuZXcgQmFzaENvbXBsZXRpb25zQ29tbWFuZCh0aGlzLiNjbWQpKVxuICAgICAgLmNvbW1hbmQoXCJmaXNoXCIsIG5ldyBGaXNoQ29tcGxldGlvbnNDb21tYW5kKHRoaXMuI2NtZCkpXG4gICAgICAuY29tbWFuZChcInpzaFwiLCBuZXcgWnNoQ29tcGxldGlvbnNDb21tYW5kKHRoaXMuI2NtZCkpXG4gICAgICAuY29tbWFuZChcImNvbXBsZXRlXCIsIG5ldyBDb21wbGV0ZUNvbW1hbmQodGhpcy4jY21kKS5oaWRkZW4oKSlcbiAgICAgIC5yZXNldCgpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLFFBQVEsZ0JBQWdCO0FBQ3hDLFNBQVMsR0FBRyxFQUFFLE1BQU0sUUFBUSxhQUFhO0FBQ3pDLFNBQVMsc0JBQXNCLFFBQVEsWUFBWTtBQUNuRCxTQUFTLGVBQWUsUUFBUSxnQkFBZ0I7QUFDaEQsU0FBUyxzQkFBc0IsUUFBUSxZQUFZO0FBQ25ELFNBQVMscUJBQXFCLFFBQVEsV0FBVztBQUVqRCwyREFBMkQsR0FDM0QsT0FBTyxNQUFNLDJCQUEyQjtFQUN0QyxDQUFBLEdBQUksQ0FBVztFQUVmLFlBQW1CLEdBQWEsQ0FBRTtJQUNoQyxLQUFLO0lBQ0wsSUFBSSxDQUFDLENBQUEsR0FBSSxHQUFHO0lBQ1osT0FBTyxJQUFJLENBQ1IsV0FBVyxDQUFDO01BQ1gsTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFBLEdBQUksSUFBSSxJQUFJLENBQUMsY0FBYztNQUNoRCxPQUFPLENBQUM7OzRFQUU0RCxFQUNsRSxJQUFJLE9BQU8sY0FDWjs7SUFFTCxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHOzs2QkFFM0MsRUFDbkIsSUFBSSxPQUFPLEdBQUcsUUFBUSxPQUFPLEdBQUcsMkJBQTJCLENBQUMsR0FDN0Q7QUFDVCxDQUFDO0lBQ0ssR0FDQyxTQUFTLEdBQ1QsTUFBTSxDQUFDLElBQU0sSUFBSSxDQUFDLFFBQVEsSUFDMUIsT0FBTyxDQUFDLFFBQVEsSUFBSSx1QkFBdUIsSUFBSSxDQUFDLENBQUEsR0FBSSxHQUNwRCxPQUFPLENBQUMsUUFBUSxJQUFJLHVCQUF1QixJQUFJLENBQUMsQ0FBQSxHQUFJLEdBQ3BELE9BQU8sQ0FBQyxPQUFPLElBQUksc0JBQXNCLElBQUksQ0FBQyxDQUFBLEdBQUksR0FDbEQsT0FBTyxDQUFDLFlBQVksSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLENBQUEsR0FBSSxFQUFFLE1BQU0sSUFDekQsS0FBSztFQUNWO0FBQ0YifQ==
+// denoCacheMetadata=6336827247712403280,5165255785369232017 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a345c1e6061c714f4b7f0c60c5dd2c22044837f9abca210d502436299c05ba5f.js b/vendor/gen/https/deno.land/a345c1e6061c714f4b7f0c60c5dd2c22044837f9abca210d502436299c05ba5f.js
new file mode 100644
index 0000000..b60073f
--- /dev/null
+++ b/vendor/gen/https/deno.land/a345c1e6061c714f4b7f0c60c5dd2c22044837f9abca210d502436299c05ba5f.js
@@ -0,0 +1,19 @@
+/** Border characters interface. */ /** Default border characters. */ export const border = {
+ top: "─",
+ topMid: "┬",
+ topLeft: "┌",
+ topRight: "┐",
+ bottom: "─",
+ bottomMid: "┴",
+ bottomLeft: "└",
+ bottomRight: "┘",
+ left: "│",
+ leftMid: "├",
+ mid: "─",
+ midMid: "┼",
+ right: "│",
+ rightMid: "┤",
+ middle: "│"
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvYm9yZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBCb3JkZXIgY2hhcmFjdGVycyBpbnRlcmZhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIElCb3JkZXIge1xuICB0b3A6IHN0cmluZztcbiAgdG9wTWlkOiBzdHJpbmc7XG4gIHRvcExlZnQ6IHN0cmluZztcbiAgdG9wUmlnaHQ6IHN0cmluZztcbiAgYm90dG9tOiBzdHJpbmc7XG4gIGJvdHRvbU1pZDogc3RyaW5nO1xuICBib3R0b21MZWZ0OiBzdHJpbmc7XG4gIGJvdHRvbVJpZ2h0OiBzdHJpbmc7XG4gIGxlZnQ6IHN0cmluZztcbiAgbGVmdE1pZDogc3RyaW5nO1xuICBtaWQ6IHN0cmluZztcbiAgbWlkTWlkOiBzdHJpbmc7XG4gIHJpZ2h0OiBzdHJpbmc7XG4gIHJpZ2h0TWlkOiBzdHJpbmc7XG4gIG1pZGRsZTogc3RyaW5nO1xufVxuXG4vKiogRGVmYXVsdCBib3JkZXIgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBib3JkZXI6IElCb3JkZXIgPSB7XG4gIHRvcDogXCLilIBcIixcbiAgdG9wTWlkOiBcIuKUrFwiLFxuICB0b3BMZWZ0OiBcIuKUjFwiLFxuICB0b3BSaWdodDogXCLilJBcIixcbiAgYm90dG9tOiBcIuKUgFwiLFxuICBib3R0b21NaWQ6IFwi4pS0XCIsXG4gIGJvdHRvbUxlZnQ6IFwi4pSUXCIsXG4gIGJvdHRvbVJpZ2h0OiBcIuKUmFwiLFxuICBsZWZ0OiBcIuKUglwiLFxuICBsZWZ0TWlkOiBcIuKUnFwiLFxuICBtaWQ6IFwi4pSAXCIsXG4gIG1pZE1pZDogXCLilLxcIixcbiAgcmlnaHQ6IFwi4pSCXCIsXG4gIHJpZ2h0TWlkOiBcIuKUpFwiLFxuICBtaWRkbGU6IFwi4pSCXCIsXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQyxHQW1CakMsK0JBQStCLEdBQy9CLE9BQU8sTUFBTSxTQUFrQjtFQUM3QixLQUFLO0VBQ0wsUUFBUTtFQUNSLFNBQVM7RUFDVCxVQUFVO0VBQ1YsUUFBUTtFQUNSLFdBQVc7RUFDWCxZQUFZO0VBQ1osYUFBYTtFQUNiLE1BQU07RUFDTixTQUFTO0VBQ1QsS0FBSztFQUNMLFFBQVE7RUFDUixPQUFPO0VBQ1AsVUFBVTtFQUNWLFFBQVE7QUFDVixFQUFFIn0=
+// denoCacheMetadata=2412683515442778659,12590242258776051525 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a3c0d2358d026014ddf7f7f71ae9b5fa57d2690f93c3555d8d692c51db7a6af5.js b/vendor/gen/https/deno.land/a3c0d2358d026014ddf7f7f71ae9b5fa57d2690f93c3555d8d692c51db7a6af5.js
new file mode 100644
index 0000000..f204b8c
--- /dev/null
+++ b/vendor/gen/https/deno.land/a3c0d2358d026014ddf7f7f71ae9b5fa57d2690f93c3555d8d692c51db7a6af5.js
@@ -0,0 +1,347 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows, osType } from "../_util/os.ts";
+import { SEP, SEP_PATTERN } from "./separator.ts";
+import * as _win32 from "./win32.ts";
+import * as _posix from "./posix.ts";
+const path = isWindows ? _win32 : _posix;
+const { join, normalize } = path;
+const regExpEscapeChars = [
+ "!",
+ "$",
+ "(",
+ ")",
+ "*",
+ "+",
+ ".",
+ "=",
+ "?",
+ "[",
+ "\\",
+ "^",
+ "{",
+ "|"
+];
+const rangeEscapeChars = [
+ "-",
+ "\\",
+ "]"
+];
+/** Convert a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment. */ export function globToRegExp(glob, { extended = true, globstar: globstarOption = true, os = osType, caseInsensitive = false } = {}) {
+ if (glob == "") {
+ return /(?!)/;
+ }
+ const sep = os == "windows" ? "(?:\\\\|/)+" : "/+";
+ const sepMaybe = os == "windows" ? "(?:\\\\|/)*" : "/*";
+ const seps = os == "windows" ? [
+ "\\",
+ "/"
+ ] : [
+ "/"
+ ];
+ const globstar = os == "windows" ? "(?:[^\\\\/]*(?:\\\\|/|$)+)*" : "(?:[^/]*(?:/|$)+)*";
+ const wildcard = os == "windows" ? "[^\\\\/]*" : "[^/]*";
+ const escapePrefix = os == "windows" ? "`" : "\\";
+ // Remove trailing separators.
+ let newLength = glob.length;
+ for(; newLength > 1 && seps.includes(glob[newLength - 1]); newLength--);
+ glob = glob.slice(0, newLength);
+ let regExpString = "";
+ // Terminates correctly. Trust that `j` is incremented every iteration.
+ for(let j = 0; j < glob.length;){
+ let segment = "";
+ const groupStack = [];
+ let inRange = false;
+ let inEscape = false;
+ let endsWithSep = false;
+ let i = j;
+ // Terminates with `i` at the non-inclusive end of the current segment.
+ for(; i < glob.length && !seps.includes(glob[i]); i++){
+ if (inEscape) {
+ inEscape = false;
+ const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars;
+ segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
+ continue;
+ }
+ if (glob[i] == escapePrefix) {
+ inEscape = true;
+ continue;
+ }
+ if (glob[i] == "[") {
+ if (!inRange) {
+ inRange = true;
+ segment += "[";
+ if (glob[i + 1] == "!") {
+ i++;
+ segment += "^";
+ } else if (glob[i + 1] == "^") {
+ i++;
+ segment += "\\^";
+ }
+ continue;
+ } else if (glob[i + 1] == ":") {
+ let k = i + 1;
+ let value = "";
+ while(glob[k + 1] != null && glob[k + 1] != ":"){
+ value += glob[k + 1];
+ k++;
+ }
+ if (glob[k + 1] == ":" && glob[k + 2] == "]") {
+ i = k + 2;
+ if (value == "alnum") segment += "\\dA-Za-z";
+ else if (value == "alpha") segment += "A-Za-z";
+ else if (value == "ascii") segment += "\x00-\x7F";
+ else if (value == "blank") segment += "\t ";
+ else if (value == "cntrl") segment += "\x00-\x1F\x7F";
+ else if (value == "digit") segment += "\\d";
+ else if (value == "graph") segment += "\x21-\x7E";
+ else if (value == "lower") segment += "a-z";
+ else if (value == "print") segment += "\x20-\x7E";
+ else if (value == "punct") {
+ segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~";
+ } else if (value == "space") segment += "\\s\v";
+ else if (value == "upper") segment += "A-Z";
+ else if (value == "word") segment += "\\w";
+ else if (value == "xdigit") segment += "\\dA-Fa-f";
+ continue;
+ }
+ }
+ }
+ if (glob[i] == "]" && inRange) {
+ inRange = false;
+ segment += "]";
+ continue;
+ }
+ if (inRange) {
+ if (glob[i] == "\\") {
+ segment += `\\\\`;
+ } else {
+ segment += glob[i];
+ }
+ continue;
+ }
+ if (glob[i] == ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] != "BRACE") {
+ segment += ")";
+ const type = groupStack.pop();
+ if (type == "!") {
+ segment += wildcard;
+ } else if (type != "@") {
+ segment += type;
+ }
+ continue;
+ }
+ if (glob[i] == "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] != "BRACE") {
+ segment += "|";
+ continue;
+ }
+ if (glob[i] == "+" && extended && glob[i + 1] == "(") {
+ i++;
+ groupStack.push("+");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] == "@" && extended && glob[i + 1] == "(") {
+ i++;
+ groupStack.push("@");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] == "?") {
+ if (extended && glob[i + 1] == "(") {
+ i++;
+ groupStack.push("?");
+ segment += "(?:";
+ } else {
+ segment += ".";
+ }
+ continue;
+ }
+ if (glob[i] == "!" && extended && glob[i + 1] == "(") {
+ i++;
+ groupStack.push("!");
+ segment += "(?!";
+ continue;
+ }
+ if (glob[i] == "{") {
+ groupStack.push("BRACE");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] == "}" && groupStack[groupStack.length - 1] == "BRACE") {
+ groupStack.pop();
+ segment += ")";
+ continue;
+ }
+ if (glob[i] == "," && groupStack[groupStack.length - 1] == "BRACE") {
+ segment += "|";
+ continue;
+ }
+ if (glob[i] == "*") {
+ if (extended && glob[i + 1] == "(") {
+ i++;
+ groupStack.push("*");
+ segment += "(?:";
+ } else {
+ const prevChar = glob[i - 1];
+ let numStars = 1;
+ while(glob[i + 1] == "*"){
+ i++;
+ numStars++;
+ }
+ const nextChar = glob[i + 1];
+ if (globstarOption && numStars == 2 && [
+ ...seps,
+ undefined
+ ].includes(prevChar) && [
+ ...seps,
+ undefined
+ ].includes(nextChar)) {
+ segment += globstar;
+ endsWithSep = true;
+ } else {
+ segment += wildcard;
+ }
+ }
+ continue;
+ }
+ segment += regExpEscapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
+ }
+ // Check for unclosed groups or a dangling backslash.
+ if (groupStack.length > 0 || inRange || inEscape) {
+ // Parse failure. Take all characters from this segment literally.
+ segment = "";
+ for (const c of glob.slice(j, i)){
+ segment += regExpEscapeChars.includes(c) ? `\\${c}` : c;
+ endsWithSep = false;
+ }
+ }
+ regExpString += segment;
+ if (!endsWithSep) {
+ regExpString += i < glob.length ? sep : sepMaybe;
+ endsWithSep = true;
+ }
+ // Terminates with `i` at the start of the next segment.
+ while(seps.includes(glob[i]))i++;
+ // Check that the next value of `j` is indeed higher than the current value.
+ if (!(i > j)) {
+ throw new Error("Assertion failure: i > j (potential infinite loop)");
+ }
+ j = i;
+ }
+ regExpString = `^${regExpString}$`;
+ return new RegExp(regExpString, caseInsensitive ? "i" : "");
+}
+/** Test whether the given string is a glob */ export function isGlob(str) {
+ const chars = {
+ "{": "}",
+ "(": ")",
+ "[": "]"
+ };
+ const regex = /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
+ if (str === "") {
+ return false;
+ }
+ let match;
+ while(match = regex.exec(str)){
+ if (match[2]) return true;
+ let idx = match.index + match[0].length;
+ // if an open bracket/brace/paren is escaped,
+ // set the index to the next closing character
+ const open = match[1];
+ const close = open ? chars[open] : null;
+ if (open && close) {
+ const n = str.indexOf(close, idx);
+ if (n !== -1) {
+ idx = n + 1;
+ }
+ }
+ str = str.slice(idx);
+ }
+ return false;
+}
+/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ export function normalizeGlob(glob, { globstar = false } = {}) {
+ if (glob.match(/\0/g)) {
+ throw new Error(`Glob contains invalid characters: "${glob}"`);
+ }
+ if (!globstar) {
+ return normalize(glob);
+ }
+ const s = SEP_PATTERN.source;
+ const badParentPattern = new RegExp(`(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, "g");
+ return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, "..");
+}
+/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ export function joinGlobs(globs, { extended = true, globstar = false } = {}) {
+ if (!globstar || globs.length == 0) {
+ return join(...globs);
+ }
+ if (globs.length === 0) return ".";
+ let joined;
+ for (const glob of globs){
+ const path = glob;
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `${SEP}${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalizeGlob(joined, {
+ extended,
+ globstar
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvZ2xvYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MsIG9zVHlwZSB9IGZyb20gXCIuLi9fdXRpbC9vcy50c1wiO1xuaW1wb3J0IHsgU0VQLCBTRVBfUEFUVEVSTiB9IGZyb20gXCIuL3NlcGFyYXRvci50c1wiO1xuaW1wb3J0ICogYXMgX3dpbjMyIGZyb20gXCIuL3dpbjMyLnRzXCI7XG5pbXBvcnQgKiBhcyBfcG9zaXggZnJvbSBcIi4vcG9zaXgudHNcIjtcbmltcG9ydCB0eXBlIHsgT1NUeXBlIH0gZnJvbSBcIi4uL191dGlsL29zLnRzXCI7XG5cbmNvbnN0IHBhdGggPSBpc1dpbmRvd3MgPyBfd2luMzIgOiBfcG9zaXg7XG5jb25zdCB7IGpvaW4sIG5vcm1hbGl6ZSB9ID0gcGF0aDtcblxuZXhwb3J0IGludGVyZmFjZSBHbG9iT3B0aW9ucyB7XG4gIC8qKiBFeHRlbmRlZCBnbG9iIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7dHJ1ZX1cbiAgICovXG4gIGV4dGVuZGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JzdGFyIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gICAqIElmIGZhbHNlLCBgKipgIGlzIHRyZWF0ZWQgbGlrZSBgKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgZ2xvYnN0YXI/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBnbG9ic3RhciBzaG91bGQgYmUgY2FzZS1pbnNlbnNpdGl2ZS4gKi9cbiAgY2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgLyoqIE9wZXJhdGluZyBzeXN0ZW0uIERlZmF1bHRzIHRvIHRoZSBuYXRpdmUgT1MuICovXG4gIG9zPzogT1NUeXBlO1xufVxuXG5leHBvcnQgdHlwZSBHbG9iVG9SZWdFeHBPcHRpb25zID0gR2xvYk9wdGlvbnM7XG5cbmNvbnN0IHJlZ0V4cEVzY2FwZUNoYXJzID0gW1xuICBcIiFcIixcbiAgXCIkXCIsXG4gIFwiKFwiLFxuICBcIilcIixcbiAgXCIqXCIsXG4gIFwiK1wiLFxuICBcIi5cIixcbiAgXCI9XCIsXG4gIFwiP1wiLFxuICBcIltcIixcbiAgXCJcXFxcXCIsXG4gIFwiXlwiLFxuICBcIntcIixcbiAgXCJ8XCIsXG5dO1xuY29uc3QgcmFuZ2VFc2NhcGVDaGFycyA9IFtcIi1cIiwgXCJcXFxcXCIsIFwiXVwiXTtcblxuLyoqIENvbnZlcnQgYSBnbG9iIHN0cmluZyB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBUcmllcyB0byBtYXRjaCBiYXNoIGdsb2IgZXhwYW5zaW9uIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXG4gKlxuICogQmFzaWMgZ2xvYiBzeW50YXg6XG4gKiAtIGAqYCAtIE1hdGNoZXMgZXZlcnl0aGluZyB3aXRob3V0IGxlYXZpbmcgdGhlIHBhdGggc2VnbWVudC5cbiAqIC0gYD9gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIC0gYHtmb28sYmFyfWAgLSBNYXRjaGVzIGBmb29gIG9yIGBiYXJgLlxuICogLSBgW2FiY2RdYCAtIE1hdGNoZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbYS1kXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgWyFhYmNkXWAgLSBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIGJlc2lkZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbWzo8Y2xhc3M+Ol1dYCAtIE1hdGNoZXMgYW55IGNoYXJhY3RlciBiZWxvbmdpbmcgdG8gYDxjbGFzcz5gLlxuICogICAgIC0gYFtbOmFsbnVtOl1dYCAtIE1hdGNoZXMgYW55IGRpZ2l0IG9yIGxldHRlci5cbiAqICAgICAtIGBbWzpkaWdpdDpdYWJjXWAgLSBNYXRjaGVzIGFueSBkaWdpdCwgYGFgLCBgYmAgb3IgYGNgLlxuICogICAgIC0gU2VlIGh0dHBzOi8vZmFjZWxlc3N1c2VyLmdpdGh1Yi5pby93Y21hdGNoL2dsb2IvI3Bvc2l4LWNoYXJhY3Rlci1jbGFzc2VzXG4gKiAgICAgICBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBjaGFyYWN0ZXIgY2xhc3Nlcy5cbiAqIC0gYFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBhbiBgb3NgIG90aGVyIHRoYW4gYFwid2luZG93c1wiYC5cbiAqIC0gXFxgIC0gRXNjYXBlcyB0aGUgbmV4dCBjaGFyYWN0ZXIgZm9yIGBvc2Agc2V0IHRvIGBcIndpbmRvd3NcImAuXG4gKiAtIGAvYCAtIFBhdGggc2VwYXJhdG9yLlxuICogLSBgXFxgIC0gQWRkaXRpb25hbCBwYXRoIHNlcGFyYXRvciBvbmx5IGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICpcbiAqIEV4dGVuZGVkIHN5bnRheDpcbiAqIC0gUmVxdWlyZXMgYHsgZXh0ZW5kZWQ6IHRydWUgfWAuXG4gKiAtIGA/KGZvb3xiYXIpYCAtIE1hdGNoZXMgMCBvciAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgQChmb298YmFyKWAgLSBNYXRjaGVzIDEgaW5zdGFuY2Ugb2YgYHtmb28sYmFyfWAuIFRoZXkgYmVoYXZlIHRoZSBzYW1lLlxuICogLSBgKihmb298YmFyKWAgLSBNYXRjaGVzIF9uXyBpbnN0YW5jZXMgb2YgYHtmb28sYmFyfWAuXG4gKiAtIGArKGZvb3xiYXIpYCAtIE1hdGNoZXMgX24gPiAwXyBpbnN0YW5jZXMgb2YgYHtmb28sYmFyfWAuXG4gKiAtIGAhKGZvb3xiYXIpYCAtIE1hdGNoZXMgYW55dGhpbmcgb3RoZXIgdGhhbiBge2ZvbyxiYXJ9YC5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLlxuICpcbiAqIEdsb2JzdGFyIHN5bnRheDpcbiAqIC0gUmVxdWlyZXMgYHsgZ2xvYnN0YXI6IHRydWUgfWAuXG4gKiAtIGAqKmAgLSBNYXRjaGVzIGFueSBudW1iZXIgb2YgYW55IHBhdGggc2VnbWVudHMuXG4gKiAgICAgLSBNdXN0IGNvbXByaXNlIGl0cyBlbnRpcmUgcGF0aCBzZWdtZW50IGluIHRoZSBwcm92aWRlZCBnbG9iLlxuICogLSBTZWUgaHR0cHM6Ly93d3cubGludXhqb3VybmFsLmNvbS9jb250ZW50L2dsb2JzdGFyLW5ldy1iYXNoLWdsb2JiaW5nLW9wdGlvbi5cbiAqXG4gKiBOb3RlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIC0gVGhlIGdlbmVyYXRlZCBgUmVnRXhwYCBpcyBhbmNob3JlZCBhdCBib3RoIHN0YXJ0IGFuZCBlbmQuXG4gKiAtIFJlcGVhdGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgdG9sZXJhdGVkLiBUcmFpbGluZyBzZXBhcmF0b3JzIGluIHRoZVxuICogICBwcm92aWRlZCBnbG9iIGhhdmUgbm8gbWVhbmluZyBhbmQgYXJlIGRpc2NhcmRlZC5cbiAqIC0gQWJzb2x1dGUgZ2xvYnMgd2lsbCBvbmx5IG1hdGNoIGFic29sdXRlIHBhdGhzLCBldGMuXG4gKiAtIEVtcHR5IGdsb2JzIHdpbGwgbWF0Y2ggbm90aGluZy5cbiAqIC0gQW55IHNwZWNpYWwgZ2xvYiBzeW50YXggbXVzdCBiZSBjb250YWluZWQgdG8gb25lIHBhdGggc2VnbWVudC4gRm9yIGV4YW1wbGUsXG4gKiAgIGA/KGZvb3xiYXIvYmF6KWAgaXMgaW52YWxpZC4gVGhlIHNlcGFyYXRvciB3aWxsIHRha2UgcHJlY2VkZW5jZSBhbmQgdGhlXG4gKiAgIGZpcnN0IHNlZ21lbnQgZW5kcyB3aXRoIGFuIHVuY2xvc2VkIGdyb3VwLlxuICogLSBJZiBhIHBhdGggc2VnbWVudCBlbmRzIHdpdGggdW5jbG9zZWQgZ3JvdXBzIG9yIGEgZGFuZ2xpbmcgZXNjYXBlIHByZWZpeCwgYVxuICogICBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQuIEV2ZXJ5IGNoYXJhY3RlciBmb3IgdGhhdCBzZWdtZW50IGlzIHRha2VuXG4gKiAgIGxpdGVyYWxseSBpbiB0aGlzIGV2ZW50LlxuICpcbiAqIExpbWl0YXRpb25zOlxuICogLSBBIG5lZ2F0aXZlIGdyb3VwIGxpa2UgYCEoZm9vfGJhcilgIHdpbGwgd3JvbmdseSBiZSBjb252ZXJ0ZWQgdG8gYSBuZWdhdGl2ZVxuICogICBsb29rLWFoZWFkIGZvbGxvd2VkIGJ5IGEgd2lsZGNhcmQuIFRoaXMgbWVhbnMgdGhhdCBgIShmb28pLmpzYCB3aWxsIHdyb25nbHlcbiAqICAgZmFpbCB0byBtYXRjaCBgZm9vYmFyLmpzYCwgZXZlbiB0aG91Z2ggYGZvb2JhcmAgaXMgbm90IGBmb29gLiBFZmZlY3RpdmVseSxcbiAqICAgYCEoZm9vfGJhcilgIGlzIHRyZWF0ZWQgbGlrZSBgIShAKGZvb3xiYXIpKilgLiBUaGlzIHdpbGwgd29yayBjb3JyZWN0bHkgaWZcbiAqICAgdGhlIGdyb3VwIG9jY3VycyBub3QgbmVzdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2xvYlRvUmVnRXhwKFxuICBnbG9iOiBzdHJpbmcsXG4gIHtcbiAgICBleHRlbmRlZCA9IHRydWUsXG4gICAgZ2xvYnN0YXI6IGdsb2JzdGFyT3B0aW9uID0gdHJ1ZSxcbiAgICBvcyA9IG9zVHlwZSxcbiAgICBjYXNlSW5zZW5zaXRpdmUgPSBmYWxzZSxcbiAgfTogR2xvYlRvUmVnRXhwT3B0aW9ucyA9IHt9LFxuKTogUmVnRXhwIHtcbiAgaWYgKGdsb2IgPT0gXCJcIikge1xuICAgIHJldHVybiAvKD8hKS87XG4gIH1cblxuICBjb25zdCBzZXAgPSBvcyA9PSBcIndpbmRvd3NcIiA/IFwiKD86XFxcXFxcXFx8LykrXCIgOiBcIi8rXCI7XG4gIGNvbnN0IHNlcE1heWJlID0gb3MgPT0gXCJ3aW5kb3dzXCIgPyBcIig/OlxcXFxcXFxcfC8pKlwiIDogXCIvKlwiO1xuICBjb25zdCBzZXBzID0gb3MgPT0gXCJ3aW5kb3dzXCIgPyBbXCJcXFxcXCIsIFwiL1wiXSA6IFtcIi9cIl07XG4gIGNvbnN0IGdsb2JzdGFyID0gb3MgPT0gXCJ3aW5kb3dzXCJcbiAgICA/IFwiKD86W15cXFxcXFxcXC9dKig/OlxcXFxcXFxcfC98JCkrKSpcIlxuICAgIDogXCIoPzpbXi9dKig/Oi98JCkrKSpcIjtcbiAgY29uc3Qgd2lsZGNhcmQgPSBvcyA9PSBcIndpbmRvd3NcIiA/IFwiW15cXFxcXFxcXC9dKlwiIDogXCJbXi9dKlwiO1xuICBjb25zdCBlc2NhcGVQcmVmaXggPSBvcyA9PSBcIndpbmRvd3NcIiA/IFwiYFwiIDogXCJcXFxcXCI7XG5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNlcGFyYXRvcnMuXG4gIGxldCBuZXdMZW5ndGggPSBnbG9iLmxlbmd0aDtcbiAgZm9yICg7IG5ld0xlbmd0aCA+IDEgJiYgc2Vwcy5pbmNsdWRlcyhnbG9iW25ld0xlbmd0aCAtIDFdKTsgbmV3TGVuZ3RoLS0pO1xuICBnbG9iID0gZ2xvYi5zbGljZSgwLCBuZXdMZW5ndGgpO1xuXG4gIGxldCByZWdFeHBTdHJpbmcgPSBcIlwiO1xuXG4gIC8vIFRlcm1pbmF0ZXMgY29ycmVjdGx5LiBUcnVzdCB0aGF0IGBqYCBpcyBpbmNyZW1lbnRlZCBldmVyeSBpdGVyYXRpb24uXG4gIGZvciAobGV0IGogPSAwOyBqIDwgZ2xvYi5sZW5ndGg7KSB7XG4gICAgbGV0IHNlZ21lbnQgPSBcIlwiO1xuICAgIGNvbnN0IGdyb3VwU3RhY2s6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGluUmFuZ2UgPSBmYWxzZTtcbiAgICBsZXQgaW5Fc2NhcGUgPSBmYWxzZTtcbiAgICBsZXQgZW5kc1dpdGhTZXAgPSBmYWxzZTtcbiAgICBsZXQgaSA9IGo7XG5cbiAgICAvLyBUZXJtaW5hdGVzIHdpdGggYGlgIGF0IHRoZSBub24taW5jbHVzaXZlIGVuZCBvZiB0aGUgY3VycmVudCBzZWdtZW50LlxuICAgIGZvciAoOyBpIDwgZ2xvYi5sZW5ndGggJiYgIXNlcHMuaW5jbHVkZXMoZ2xvYltpXSk7IGkrKykge1xuICAgICAgaWYgKGluRXNjYXBlKSB7XG4gICAgICAgIGluRXNjYXBlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGVzY2FwZUNoYXJzID0gaW5SYW5nZSA/IHJhbmdlRXNjYXBlQ2hhcnMgOiByZWdFeHBFc2NhcGVDaGFycztcbiAgICAgICAgc2VnbWVudCArPSBlc2NhcGVDaGFycy5pbmNsdWRlcyhnbG9iW2ldKSA/IGBcXFxcJHtnbG9iW2ldfWAgOiBnbG9iW2ldO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gZXNjYXBlUHJlZml4KSB7XG4gICAgICAgIGluRXNjYXBlID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiW1wiKSB7XG4gICAgICAgIGlmICghaW5SYW5nZSkge1xuICAgICAgICAgIGluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgIHNlZ21lbnQgKz0gXCJbXCI7XG4gICAgICAgICAgaWYgKGdsb2JbaSArIDFdID09IFwiIVwiKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBzZWdtZW50ICs9IFwiXlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZ2xvYltpICsgMV0gPT0gXCJeXCIpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIHNlZ21lbnQgKz0gXCJcXFxcXlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChnbG9iW2kgKyAxXSA9PSBcIjpcIikge1xuICAgICAgICAgIGxldCBrID0gaSArIDE7XG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoZ2xvYltrICsgMV0gIT0gbnVsbCAmJiBnbG9iW2sgKyAxXSAhPSBcIjpcIikge1xuICAgICAgICAgICAgdmFsdWUgKz0gZ2xvYltrICsgMV07XG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChnbG9iW2sgKyAxXSA9PSBcIjpcIiAmJiBnbG9iW2sgKyAyXSA9PSBcIl1cIikge1xuICAgICAgICAgICAgaSA9IGsgKyAyO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiYWxudW1cIikgc2VnbWVudCArPSBcIlxcXFxkQS1aYS16XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImFscGhhXCIpIHNlZ21lbnQgKz0gXCJBLVphLXpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwiYXNjaWlcIikgc2VnbWVudCArPSBcIlxceDAwLVxceDdGXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImJsYW5rXCIpIHNlZ21lbnQgKz0gXCJcXHQgXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImNudHJsXCIpIHNlZ21lbnQgKz0gXCJcXHgwMC1cXHgxRlxceDdGXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImRpZ2l0XCIpIHNlZ21lbnQgKz0gXCJcXFxcZFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJncmFwaFwiKSBzZWdtZW50ICs9IFwiXFx4MjEtXFx4N0VcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwibG93ZXJcIikgc2VnbWVudCArPSBcImEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJwcmludFwiKSBzZWdtZW50ICs9IFwiXFx4MjAtXFx4N0VcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwicHVuY3RcIikge1xuICAgICAgICAgICAgICBzZWdtZW50ICs9IFwiIVxcXCIjJCUmJygpKissXFxcXC0uLzo7PD0+P0BbXFxcXFxcXFxcXFxcXV5f4oCYe3x9flwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcInNwYWNlXCIpIHNlZ21lbnQgKz0gXCJcXFxcc1xcdlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJ1cHBlclwiKSBzZWdtZW50ICs9IFwiQS1aXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcIndvcmRcIikgc2VnbWVudCArPSBcIlxcXFx3XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInhkaWdpdFwiKSBzZWdtZW50ICs9IFwiXFxcXGRBLUZhLWZcIjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIl1cIiAmJiBpblJhbmdlKSB7XG4gICAgICAgIGluUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudCArPSBcIl1cIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpblJhbmdlKSB7XG4gICAgICAgIGlmIChnbG9iW2ldID09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgc2VnbWVudCArPSBgXFxcXFxcXFxgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgKz0gZ2xvYltpXTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBnbG9iW2ldID09IFwiKVwiICYmIGdyb3VwU3RhY2subGVuZ3RoID4gMCAmJlxuICAgICAgICBncm91cFN0YWNrW2dyb3VwU3RhY2subGVuZ3RoIC0gMV0gIT0gXCJCUkFDRVwiXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudCArPSBcIilcIjtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdyb3VwU3RhY2sucG9wKCkhO1xuICAgICAgICBpZiAodHlwZSA9PSBcIiFcIikge1xuICAgICAgICAgIHNlZ21lbnQgKz0gd2lsZGNhcmQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPSBcIkBcIikge1xuICAgICAgICAgIHNlZ21lbnQgKz0gdHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBnbG9iW2ldID09IFwifFwiICYmIGdyb3VwU3RhY2subGVuZ3RoID4gMCAmJlxuICAgICAgICBncm91cFN0YWNrW2dyb3VwU3RhY2subGVuZ3RoIC0gMV0gIT0gXCJCUkFDRVwiXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudCArPSBcInxcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiK1wiICYmIGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09IFwiKFwiKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiK1wiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCJAXCIgJiYgZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT0gXCIoXCIpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCJAXCIpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIj9cIikge1xuICAgICAgICBpZiAoZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT0gXCIoXCIpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiP1wiKTtcbiAgICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCArPSBcIi5cIjtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCIhXCIgJiYgZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT0gXCIoXCIpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCIhXCIpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKD8hXCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIntcIikge1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCJCUkFDRVwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCJ9XCIgJiYgZ3JvdXBTdGFja1tncm91cFN0YWNrLmxlbmd0aCAtIDFdID09IFwiQlJBQ0VcIikge1xuICAgICAgICBncm91cFN0YWNrLnBvcCgpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKVwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCIsXCIgJiYgZ3JvdXBTdGFja1tncm91cFN0YWNrLmxlbmd0aCAtIDFdID09IFwiQlJBQ0VcIikge1xuICAgICAgICBzZWdtZW50ICs9IFwifFwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09IFwiKFwiKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGdyb3VwU3RhY2sucHVzaChcIipcIik7XG4gICAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHByZXZDaGFyID0gZ2xvYltpIC0gMV07XG4gICAgICAgICAgbGV0IG51bVN0YXJzID0gMTtcbiAgICAgICAgICB3aGlsZSAoZ2xvYltpICsgMV0gPT0gXCIqXCIpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIG51bVN0YXJzKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gZ2xvYltpICsgMV07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ2xvYnN0YXJPcHRpb24gJiYgbnVtU3RhcnMgPT0gMiAmJlxuICAgICAgICAgICAgWy4uLnNlcHMsIHVuZGVmaW5lZF0uaW5jbHVkZXMocHJldkNoYXIpICYmXG4gICAgICAgICAgICBbLi4uc2VwcywgdW5kZWZpbmVkXS5pbmNsdWRlcyhuZXh0Q2hhcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlZ21lbnQgKz0gZ2xvYnN0YXI7XG4gICAgICAgICAgICBlbmRzV2l0aFNlcCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlZ21lbnQgKz0gd2lsZGNhcmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzZWdtZW50ICs9IHJlZ0V4cEVzY2FwZUNoYXJzLmluY2x1ZGVzKGdsb2JbaV0pID8gYFxcXFwke2dsb2JbaV19YCA6IGdsb2JbaV07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHVuY2xvc2VkIGdyb3VwcyBvciBhIGRhbmdsaW5nIGJhY2tzbGFzaC5cbiAgICBpZiAoZ3JvdXBTdGFjay5sZW5ndGggPiAwIHx8IGluUmFuZ2UgfHwgaW5Fc2NhcGUpIHtcbiAgICAgIC8vIFBhcnNlIGZhaWx1cmUuIFRha2UgYWxsIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHNlZ21lbnQgbGl0ZXJhbGx5LlxuICAgICAgc2VnbWVudCA9IFwiXCI7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgZ2xvYi5zbGljZShqLCBpKSkge1xuICAgICAgICBzZWdtZW50ICs9IHJlZ0V4cEVzY2FwZUNoYXJzLmluY2x1ZGVzKGMpID8gYFxcXFwke2N9YCA6IGM7XG4gICAgICAgIGVuZHNXaXRoU2VwID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVnRXhwU3RyaW5nICs9IHNlZ21lbnQ7XG4gICAgaWYgKCFlbmRzV2l0aFNlcCkge1xuICAgICAgcmVnRXhwU3RyaW5nICs9IGkgPCBnbG9iLmxlbmd0aCA/IHNlcCA6IHNlcE1heWJlO1xuICAgICAgZW5kc1dpdGhTZXAgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFRlcm1pbmF0ZXMgd2l0aCBgaWAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgd2hpbGUgKHNlcHMuaW5jbHVkZXMoZ2xvYltpXSkpIGkrKztcblxuICAgIC8vIENoZWNrIHRoYXQgdGhlIG5leHQgdmFsdWUgb2YgYGpgIGlzIGluZGVlZCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICBpZiAoIShpID4gaikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzc2VydGlvbiBmYWlsdXJlOiBpID4gaiAocG90ZW50aWFsIGluZmluaXRlIGxvb3ApXCIpO1xuICAgIH1cbiAgICBqID0gaTtcbiAgfVxuXG4gIHJlZ0V4cFN0cmluZyA9IGBeJHtyZWdFeHBTdHJpbmd9JGA7XG4gIHJldHVybiBuZXcgUmVnRXhwKHJlZ0V4cFN0cmluZywgY2FzZUluc2Vuc2l0aXZlID8gXCJpXCIgOiBcIlwiKTtcbn1cblxuLyoqIFRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgZ2xvYiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBjaGFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJ7XCI6IFwifVwiLCBcIihcIjogXCIpXCIsIFwiW1wiOiBcIl1cIiB9O1xuICBjb25zdCByZWdleCA9XG4gICAgL1xcXFwoLil8KF4hfFxcKnxcXD98W1xcXS4rKV1cXD98XFxbW15cXFxcXFxdXStcXF18XFx7W15cXFxcfV0rXFx9fFxcKFxcP1s6IT1dW15cXFxcKV0rXFwpfFxcKFtefF0rXFx8W15cXFxcKV0rXFwpKS87XG5cbiAgaWYgKHN0ciA9PT0gXCJcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcblxuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzdHIpKSkge1xuICAgIGlmIChtYXRjaFsyXSkgcmV0dXJuIHRydWU7XG4gICAgbGV0IGlkeCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXG4gICAgLy8gaWYgYW4gb3BlbiBicmFja2V0L2JyYWNlL3BhcmVuIGlzIGVzY2FwZWQsXG4gICAgLy8gc2V0IHRoZSBpbmRleCB0byB0aGUgbmV4dCBjbG9zaW5nIGNoYXJhY3RlclxuICAgIGNvbnN0IG9wZW4gPSBtYXRjaFsxXTtcbiAgICBjb25zdCBjbG9zZSA9IG9wZW4gPyBjaGFyc1tvcGVuXSA6IG51bGw7XG4gICAgaWYgKG9wZW4gJiYgY2xvc2UpIHtcbiAgICAgIGNvbnN0IG4gPSBzdHIuaW5kZXhPZihjbG9zZSwgaWR4KTtcbiAgICAgIGlmIChuICE9PSAtMSkge1xuICAgICAgICBpZHggPSBuICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHIgPSBzdHIuc2xpY2UoaWR4KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIExpa2Ugbm9ybWFsaXplKCksIGJ1dCBkb2Vzbid0IGNvbGxhcHNlIFwiKipcXC8uLlwiIHdoZW4gYGdsb2JzdGFyYCBpcyB0cnVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUdsb2IoXG4gIGdsb2I6IHN0cmluZyxcbiAgeyBnbG9ic3RhciA9IGZhbHNlIH06IEdsb2JPcHRpb25zID0ge30sXG4pOiBzdHJpbmcge1xuICBpZiAoZ2xvYi5tYXRjaCgvXFwwL2cpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHbG9iIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogXCIke2dsb2J9XCJgKTtcbiAgfVxuICBpZiAoIWdsb2JzdGFyKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZShnbG9iKTtcbiAgfVxuICBjb25zdCBzID0gU0VQX1BBVFRFUk4uc291cmNlO1xuICBjb25zdCBiYWRQYXJlbnRQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICBgKD88PSgke3N9fF4pXFxcXCpcXFxcKiR7c30pXFxcXC5cXFxcLig/PSR7c318JClgLFxuICAgIFwiZ1wiLFxuICApO1xuICByZXR1cm4gbm9ybWFsaXplKGdsb2IucmVwbGFjZShiYWRQYXJlbnRQYXR0ZXJuLCBcIlxcMFwiKSkucmVwbGFjZSgvXFwwL2csIFwiLi5cIik7XG59XG5cbi8qKiBMaWtlIGpvaW4oKSwgYnV0IGRvZXNuJ3QgY29sbGFwc2UgXCIqKlxcLy4uXCIgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuICovXG5leHBvcnQgZnVuY3Rpb24gam9pbkdsb2JzKFxuICBnbG9iczogc3RyaW5nW10sXG4gIHsgZXh0ZW5kZWQgPSB0cnVlLCBnbG9ic3RhciA9IGZhbHNlIH06IEdsb2JPcHRpb25zID0ge30sXG4pOiBzdHJpbmcge1xuICBpZiAoIWdsb2JzdGFyIHx8IGdsb2JzLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIGpvaW4oLi4uZ2xvYnMpO1xuICB9XG4gIGlmIChnbG9icy5sZW5ndGggPT09IDApIHJldHVybiBcIi5cIjtcbiAgbGV0IGpvaW5lZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGdsb2Igb2YgZ2xvYnMpIHtcbiAgICBjb25zdCBwYXRoID0gZ2xvYjtcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIWpvaW5lZCkgam9pbmVkID0gcGF0aDtcbiAgICAgIGVsc2Ugam9pbmVkICs9IGAke1NFUH0ke3BhdGh9YDtcbiAgICB9XG4gIH1cbiAgaWYgKCFqb2luZWQpIHJldHVybiBcIi5cIjtcbiAgcmV0dXJuIG5vcm1hbGl6ZUdsb2Ioam9pbmVkLCB7IGV4dGVuZGVkLCBnbG9ic3RhciB9KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxFQUFFLE1BQU0sUUFBUSxpQkFBaUI7QUFDbkQsU0FBUyxHQUFHLEVBQUUsV0FBVyxRQUFRLGlCQUFpQjtBQUNsRCxZQUFZLFlBQVksYUFBYTtBQUNyQyxZQUFZLFlBQVksYUFBYTtBQUdyQyxNQUFNLE9BQU8sWUFBWSxTQUFTO0FBQ2xDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUc7QUF3QjVCLE1BQU0sb0JBQW9CO0VBQ3hCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDRDtBQUNELE1BQU0sbUJBQW1CO0VBQUM7RUFBSztFQUFNO0NBQUk7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0REFzRDRELEdBQzVELE9BQU8sU0FBUyxhQUNkLElBQVksRUFDWixFQUNFLFdBQVcsSUFBSSxFQUNmLFVBQVUsaUJBQWlCLElBQUksRUFDL0IsS0FBSyxNQUFNLEVBQ1gsa0JBQWtCLEtBQUssRUFDSCxHQUFHLENBQUMsQ0FBQztFQUUzQixJQUFJLFFBQVEsSUFBSTtJQUNkLE9BQU87RUFDVDtFQUVBLE1BQU0sTUFBTSxNQUFNLFlBQVksZ0JBQWdCO0VBQzlDLE1BQU0sV0FBVyxNQUFNLFlBQVksZ0JBQWdCO0VBQ25ELE1BQU0sT0FBTyxNQUFNLFlBQVk7SUFBQztJQUFNO0dBQUksR0FBRztJQUFDO0dBQUk7RUFDbEQsTUFBTSxXQUFXLE1BQU0sWUFDbkIsZ0NBQ0E7RUFDSixNQUFNLFdBQVcsTUFBTSxZQUFZLGNBQWM7RUFDakQsTUFBTSxlQUFlLE1BQU0s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
+// denoCacheMetadata=13715640747363587899,14674386616214901222 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a3f479751556a01612701b1f61c1b91e6e4a6424cada6e6d346ece2472b8016f.js b/vendor/gen/https/deno.land/a3f479751556a01612701b1f61c1b91e6e4a6424cada6e6d346ece2472b8016f.js
new file mode 100644
index 0000000..575e0f3
--- /dev/null
+++ b/vendor/gen/https/deno.land/a3f479751556a01612701b1f61c1b91e6e4a6424cada6e6d346ece2472b8016f.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/cli@1.0.17";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImpzcjpAc3RkL2NsaUAxLjAuMTdcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQiJ9
+// denoCacheMetadata=3798902321297602519,18233081866375542493 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a58ec68acb97ed1d285f9d18d22e00f3d70ef42f0bb5d9a73a4a133059023ecd.js b/vendor/gen/https/deno.land/a58ec68acb97ed1d285f9d18d22e00f3d70ef42f0bb5d9a73a4a133059023ecd.js
new file mode 100644
index 0000000..06274e5
--- /dev/null
+++ b/vendor/gen/https/deno.land/a58ec68acb97ed1d285f9d18d22e00f3d70ef42f0bb5d9a73a4a133059023ecd.js
@@ -0,0 +1,13 @@
+/** Add a header to prevent the browser cache */ export function noCache() {
+ return async (request, next)=>{
+ const response = await next(request);
+ const { headers } = response;
+ headers.set("cache-control", "no-cache no-store must-revalidate");
+ headers.delete("last-modified");
+ headers.delete("etag");
+ return response;
+ };
+}
+export default noCache;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvbWlkZGxld2FyZXMvbm9fY2FjaGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL2NvcmUvc2VydmVyLnRzXCI7XG5cbi8qKiBBZGQgYSBoZWFkZXIgdG8gcHJldmVudCB0aGUgYnJvd3NlciBjYWNoZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vQ2FjaGUoKTogTWlkZGxld2FyZSB7XG4gIHJldHVybiBhc3luYyAocmVxdWVzdCwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgIGhlYWRlcnMuc2V0KFwiY2FjaGUtY29udHJvbFwiLCBcIm5vLWNhY2hlIG5vLXN0b3JlIG11c3QtcmV2YWxpZGF0ZVwiKTtcbiAgICBoZWFkZXJzLmRlbGV0ZShcImxhc3QtbW9kaWZpZWRcIik7XG4gICAgaGVhZGVycy5kZWxldGUoXCJldGFnXCIpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBub0NhY2hlO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLDhDQUE4QyxHQUM5QyxPQUFPLFNBQVM7RUFDZCxPQUFPLE9BQU8sU0FBUztJQUNyQixNQUFNLFdBQVcsTUFBTSxLQUFLO0lBQzVCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRztJQUNwQixRQUFRLEdBQUcsQ0FBQyxpQkFBaUI7SUFDN0IsUUFBUSxNQUFNLENBQUM7SUFDZixRQUFRLE1BQU0sQ0FBQztJQUVmLE9BQU87RUFDVDtBQUNGO0FBRUEsZUFBZSxRQUFRIn0=
+// denoCacheMetadata=14972636640210327153,16648725534655931314 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a5c3947b8fadf72708c17d7cc459b4ada54f0a242d45d5bee3e31add18f859ba.js b/vendor/gen/https/deno.land/a5c3947b8fadf72708c17d7cc459b4ada54f0a242d45d5bee3e31add18f859ba.js
new file mode 100644
index 0000000..9469760
--- /dev/null
+++ b/vendor/gen/https/deno.land/a5c3947b8fadf72708c17d7cc459b4ada54f0a242d45d5bee3e31add18f859ba.js
@@ -0,0 +1,3 @@
+export * from "npm:lightningcss-wasm@1.30.1";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9saWdodG5pbmdjc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIm5wbTpsaWdodG5pbmdjc3Mtd2FzbUAxLjMwLjFcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQiJ9
+// denoCacheMetadata=12725670638620619445,14592442366043746897 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a6003d14dce8cf272c965072ada755d0997d02091192e648ad9d6fec3d6568c2.js b/vendor/gen/https/deno.land/a6003d14dce8cf272c965072ada755d0997d02091192e648ad9d6fec3d6568c2.js
new file mode 100644
index 0000000..92b3d9f
--- /dev/null
+++ b/vendor/gen/https/deno.land/a6003d14dce8cf272c965072ada755d0997d02091192e648ad9d6fec3d6568c2.js
@@ -0,0 +1,50 @@
+export { nodesFromString } from "./deserialize.ts";
+export * from "./dom/node.ts";
+export * from "./dom/element.ts";
+export * from "./dom/document.ts";
+export * from "./dom/document-fragment.ts";
+export * from "./dom/dom-parser.ts";
+export * from "./dom/elements/html-template-element.ts";
+export { disableCodeGeneration as denoDomDisableQuerySelectorCodeGeneration } from "./dom/selectors/selectors.ts";
+// Re-export private constructors without constructor signature
+import { CharacterData as ConstructibleCharacterData, Node as ConstructibleNode } from "./dom/node.ts";
+import { HTMLDocument as ConstructibleHTMLDocument } from "./dom/document.ts";
+import { Attr as ConstructibleAttr, Element as ConstructibleElement } from "./dom/element.ts";
+export const Node = ConstructibleNode;
+export const HTMLDocument = ConstructibleHTMLDocument;
+export const CharacterData = ConstructibleCharacterData;
+export const Element = ConstructibleElement;
+export const Attr = ConstructibleAttr;
+export { NodeListPublic as NodeList } from "./dom/node-list.ts";
+export { HTMLCollectionPublic as HTMLCollection } from "./dom/html-collection.ts";
+import { NodeList } from "./dom/node-list.ts";
+import { HTMLCollection } from "./dom/html-collection.ts";
+// Prevent childNodes and HTMLCollections from being seen as an arrays
+const oldHasInstance = Array[Symbol.hasInstance];
+Object.defineProperty(Array, Symbol.hasInstance, {
+ value (value) {
+ switch(value?.constructor){
+ case HTMLCollection:
+ case NodeList:
+ return false;
+ default:
+ return oldHasInstance.call(this, value);
+ }
+ },
+ configurable: true
+});
+const oldIsArray = Array.isArray;
+Object.defineProperty(Array, "isArray", {
+ value: (value)=>{
+ switch(value?.constructor){
+ case HTMLCollection:
+ case NodeList:
+ return false;
+ default:
+ return oldIsArray.call(Array, value);
+ }
+ },
+ configurable: true
+});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IG5vZGVzRnJvbVN0cmluZyB9IGZyb20gXCIuL2Rlc2VyaWFsaXplLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb20vbm9kZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG9tL2VsZW1lbnQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RvbS9kb2N1bWVudC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG9tL2RvY3VtZW50LWZyYWdtZW50LnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb20vZG9tLXBhcnNlci50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG9tL2VsZW1lbnRzL2h0bWwtdGVtcGxhdGUtZWxlbWVudC50c1wiO1xuZXhwb3J0IHsgZGlzYWJsZUNvZGVHZW5lcmF0aW9uIGFzIGRlbm9Eb21EaXNhYmxlUXVlcnlTZWxlY3RvckNvZGVHZW5lcmF0aW9uIH0gZnJvbSBcIi4vZG9tL3NlbGVjdG9ycy9zZWxlY3RvcnMudHNcIjtcblxuLy8gUmUtZXhwb3J0IHByaXZhdGUgY29uc3RydWN0b3JzIHdpdGhvdXQgY29uc3RydWN0b3Igc2lnbmF0dXJlXG5pbXBvcnQge1xuICBDaGFyYWN0ZXJEYXRhIGFzIENvbnN0cnVjdGlibGVDaGFyYWN0ZXJEYXRhLFxuICBOb2RlIGFzIENvbnN0cnVjdGlibGVOb2RlLFxufSBmcm9tIFwiLi9kb20vbm9kZS50c1wiO1xuXG5pbXBvcnQgeyBIVE1MRG9jdW1lbnQgYXMgQ29uc3RydWN0aWJsZUhUTUxEb2N1bWVudCB9IGZyb20gXCIuL2RvbS9kb2N1bWVudC50c1wiO1xuXG5pbXBvcnQge1xuICBBdHRyIGFzIENvbnN0cnVjdGlibGVBdHRyLFxuICBFbGVtZW50IGFzIENvbnN0cnVjdGlibGVFbGVtZW50LFxufSBmcm9tIFwiLi9kb20vZWxlbWVudC50c1wiO1xuXG5leHBvcnQgY29uc3QgTm9kZTpcbiAgJiBQaWNrPFxuICAgIHR5cGVvZiBDb25zdHJ1Y3RpYmxlTm9kZSxcbiAgICBrZXlvZiB0eXBlb2YgQ29uc3RydWN0aWJsZU5vZGVcbiAgPlxuICAmIEZ1bmN0aW9uID0gQ29uc3RydWN0aWJsZU5vZGU7XG5leHBvcnQgdHlwZSBOb2RlID0gQ29uc3RydWN0aWJsZU5vZGU7XG5cbmV4cG9ydCBjb25zdCBIVE1MRG9jdW1lbnQ6XG4gICYgUGljazxcbiAgICB0eXBlb2YgQ29uc3RydWN0aWJsZUhUTUxEb2N1bWVudCxcbiAgICBrZXlvZiB0eXBlb2YgQ29uc3RydWN0aWJsZUhUTUxEb2N1bWVudFxuICA+XG4gICYgRnVuY3Rpb24gPSBDb25zdHJ1Y3RpYmxlSFRNTERvY3VtZW50O1xuZXhwb3J0IHR5cGUgSFRNTERvY3VtZW50ID0gQ29uc3RydWN0aWJsZUhUTUxEb2N1bWVudDtcblxuZXhwb3J0IGNvbnN0IENoYXJhY3RlckRhdGE6XG4gICYgUGljazxcbiAgICB0eXBlb2YgQ29uc3RydWN0aWJsZUNoYXJhY3RlckRhdGEsXG4gICAga2V5b2YgdHlwZW9mIENvbnN0cnVjdGlibGVDaGFyYWN0ZXJEYXRhXG4gID5cbiAgJiBGdW5jdGlvbiA9IENvbnN0cnVjdGlibGVDaGFyYWN0ZXJEYXRhO1xuZXhwb3J0IHR5cGUgQ2hhcmFjdGVyRGF0YSA9IENvbnN0cnVjdGlibGVDaGFyYWN0ZXJEYXRhO1xuXG5leHBvcnQgY29uc3QgRWxlbWVudDpcbiAgJiBQaWNrPFxuICAgIHR5cGVvZiBDb25zdHJ1Y3RpYmxlRWxlbWVudCxcbiAgICBrZXlvZiB0eXBlb2YgQ29uc3RydWN0aWJsZUVsZW1lbnRcbiAgPlxuICAmIEZ1bmN0aW9uID0gQ29uc3RydWN0aWJsZUVsZW1lbnQ7XG5leHBvcnQgdHlwZSBFbGVtZW50ID0gQ29uc3RydWN0aWJsZUVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBBdHRyOlxuICAmIFBpY2s8XG4gICAgdHlwZW9mIENvbnN0cnVjdGlibGVBdHRyLFxuICAgIGtleW9mIHR5cGVvZiBDb25zdHJ1Y3RpYmxlQXR0clxuICA+XG4gICYgRnVuY3Rpb24gPSBDb25zdHJ1Y3RpYmxlQXR0cjtcbmV4cG9ydCB0eXBlIEF0dHIgPSBDb25zdHJ1Y3RpYmxlQXR0cjtcblxuZXhwb3J0IHsgTm9kZUxpc3RQdWJsaWMgYXMgTm9kZUxpc3QgfSBmcm9tIFwiLi9kb20vbm9kZS1saXN0LnRzXCI7XG5leHBvcnQgeyBIVE1MQ29sbGVjdGlvblB1YmxpYyBhcyBIVE1MQ29sbGVjdGlvbiB9IGZyb20gXCIuL2RvbS9odG1sLWNvbGxlY3Rpb24udHNcIjtcblxuaW1wb3J0IHsgTm9kZUxpc3QgfSBmcm9tIFwiLi9kb20vbm9kZS1saXN0LnRzXCI7XG5pbXBvcnQgeyBIVE1MQ29sbGVjdGlvbiB9IGZyb20gXCIuL2RvbS9odG1sLWNvbGxlY3Rpb24udHNcIjtcblxuLy8gUHJldmVudCBjaGlsZE5vZGVzIGFuZCBIVE1MQ29sbGVjdGlvbnMgZnJvbSBiZWluZyBzZWVuIGFzIGFuIGFycmF5c1xuY29uc3Qgb2xkSGFzSW5zdGFuY2UgPSBBcnJheVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgdmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodmFsdWU/LmNvbnN0cnVjdG9yKSB7XG4gICAgICBjYXNlIEhUTUxDb2xsZWN0aW9uOlxuICAgICAgY2FzZSBOb2RlTGlzdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG9sZEhhc0luc3RhbmNlLmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxufSk7XG5cbmNvbnN0IG9sZElzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LCBcImlzQXJyYXlcIiwge1xuICB2YWx1ZTogKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBzd2l0Y2ggKHZhbHVlPy5jb25zdHJ1Y3Rvcikge1xuICAgICAgY2FzZSBIVE1MQ29sbGVjdGlvbjpcbiAgICAgIGNhc2UgTm9kZUxpc3Q6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBvbGRJc0FycmF5LmNhbGwoQXJyYXksIHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbn0pO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsZUFBZSxRQUFRLG1CQUFtQjtBQUNuRCxjQUFjLGdCQUFnQjtBQUM5QixjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLDZCQUE2QjtBQUMzQyxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLDBDQUEwQztBQUN4RCxTQUFTLHlCQUF5Qix5Q0FBeUMsUUFBUSwrQkFBK0I7QUFFbEgsK0RBQStEO0FBQy9ELFNBQ0UsaUJBQWlCLDBCQUEwQixFQUMzQyxRQUFRLGlCQUFpQixRQUNwQixnQkFBZ0I7QUFFdkIsU0FBUyxnQkFBZ0IseUJBQXlCLFFBQVEsb0JBQW9CO0FBRTlFLFNBQ0UsUUFBUSxpQkFBaUIsRUFDekIsV0FBVyxvQkFBb0IsUUFDMUIsbUJBQW1CO0FBRTFCLE9BQU8sTUFBTSxPQUtFLGtCQUFrQjtBQUdqQyxPQUFPLE1BQU0sZUFLRSwwQkFBMEI7QUFHekMsT0FBTyxNQUFNLGdCQUtFLDJCQUEyQjtBQUcxQyxPQUFPLE1BQU0sVUFLRSxxQkFBcUI7QUFHcEMsT0FBTyxNQUFNLE9BS0Usa0JBQWtCO0FBR2pDLFNBQVMsa0JBQWtCLFFBQVEsUUFBUSxxQkFBcUI7QUFDaEUsU0FBUyx3QkFBd0IsY0FBYyxRQUFRLDJCQUEyQjtBQUVsRixTQUFTLFFBQVEsUUFBUSxxQkFBcUI7QUFDOUMsU0FBUyxjQUFjLFFBQVEsMkJBQTJCO0FBRTFELHNFQUFzRTtBQUN0RSxNQUFNLGlCQUFpQixLQUFLLENBQUMsT0FBTyxXQUFXLENBQUM7QUFDaEQsT0FBTyxjQUFjLENBQUMsT0FBTyxPQUFPLFdBQVcsRUFBRTtFQUMvQyxPQUFNLEtBQVU7SUFDZCxPQUFRLE9BQU87TUFDYixLQUFLO01BQ0wsS0FBSztRQUNILE9BQU87TUFDVDtRQUNFLE9BQU8sZUFBZSxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ3JDO0VBQ0Y7RUFDQSxjQUFjO0FBQ2hCO0FBRUEsTUFBTSxhQUFhLE1BQU0sT0FBTztBQUNoQyxPQUFPLGNBQWMsQ0FBQyxPQUFPLFdBQVc7RUFDdEMsT0FBTyxDQUFDO0lBQ04sT0FBUSxPQUFPO01BQ2IsS0FBSztNQUNMLEtBQUs7UUFDSCxPQUFPO01BQ1Q7UUFDRSxPQUFPLFdBQVcsSUFBSSxDQUFDLE9BQU87SUFDbEM7RUFDRjtFQUNBLGNBQWM7QUFDaEIifQ==
+// denoCacheMetadata=6292900515365798811,15825073840933386796 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a628841e2dca4f32cd805688d9e166dce1486b5a5a98a154bfdb428724423c69.js b/vendor/gen/https/deno.land/a628841e2dca4f32cd805688d9e166dce1486b5a5a98a154bfdb428724423c69.js
new file mode 100644
index 0000000..48df2ac
--- /dev/null
+++ b/vendor/gen/https/deno.land/a628841e2dca4f32cd805688d9e166dce1486b5a5a98a154bfdb428724423c69.js
@@ -0,0 +1,3 @@
+/** Parser options. */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFBhcnNlciBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUZsYWdzT3B0aW9uczxcbiAgVEZsYWdPcHRpb25zIGV4dGVuZHMgRmxhZ09wdGlvbnMgPSBGbGFnT3B0aW9ucyxcbj4ge1xuICBmbGFncz86IEFycmF5PFRGbGFnT3B0aW9ucz47XG4gIHBhcnNlPzogVHlwZUhhbmRsZXI8dW5rbm93bj47XG4gIG9wdGlvbj86IChvcHRpb246IFRGbGFnT3B0aW9ucywgdmFsdWU/OiB1bmtub3duKSA9PiB2b2lkO1xuICBzdG9wRWFybHk/OiBib29sZWFuO1xuICBzdG9wT25Vbmtub3duPzogYm9vbGVhbjtcbiAgYWxsb3dFbXB0eT86IGJvb2xlYW47XG4gIGlnbm9yZURlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGRvdHRlZD86IGJvb2xlYW47XG59XG5cbi8qKiBGbGFnIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsYWdPcHRpb25zIGV4dGVuZHMgQXJndW1lbnRPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcmdzPzogQXJndW1lbnRPcHRpb25zW107XG4gIGFsaWFzZXM/OiBzdHJpbmdbXTtcbiAgc3RhbmRhbG9uZT86IGJvb2xlYW47XG4gIGRlZmF1bHQ/OiBEZWZhdWx0VmFsdWU7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZGVwZW5kcz86IHN0cmluZ1tdO1xuICBjb25mbGljdHM/OiBzdHJpbmdbXTtcbiAgdmFsdWU/OiBWYWx1ZUhhbmRsZXI7XG4gIGNvbGxlY3Q/OiBib29sZWFuO1xuICBlcXVhbHNTaWduPzogYm9vbGVhbjtcbn1cblxuLyoqIEZsYWcgYXJndW1lbnQgZGVmaW5pdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXJndW1lbnRPcHRpb25zIHtcbiAgdHlwZT86IEFyZ3VtZW50VHlwZSB8IHN0cmluZztcbiAgb3B0aW9uYWxWYWx1ZT86IGJvb2xlYW47XG4gIHJlcXVpcmVkVmFsdWU/OiBib29sZWFuO1xuICB2YXJpYWRpYz86IGJvb2xlYW47XG4gIGxpc3Q/OiBib29sZWFuO1xuICBzZXBhcmF0b3I/OiBzdHJpbmc7XG59XG5cbi8qKiBBdmFpbGFibGUgYnVpbGQtaW4gYXJndW1lbnQgdHlwZXMuICovXG5leHBvcnQgdHlwZSBBcmd1bWVudFR5cGUgPSBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bWJlclwiIHwgXCJpbnRlZ2VyXCI7XG5cbi8qKiBEZWZhdWx0IGZsYWcgdmFsdWUgKi9cbmV4cG9ydCB0eXBlIERlZmF1bHRWYWx1ZTxUVmFsdWUgPSB1bmtub3duPiA9XG4gIHwgVFZhbHVlXG4gIHwgRGVmYXVsdFZhbHVlSGFuZGxlcjxUVmFsdWU+O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0VmFsdWVIYW5kbGVyPFRWYWx1ZSA9IHVua25vd24+ID0gKCkgPT4gVFZhbHVlO1xuXG4vKiogVmFsdWUgaGFuZGxlciBmb3IgY3VzdG9tIHZhbHVlIHByb2Nlc3NpbmcuICovXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgVmFsdWVIYW5kbGVyPFRWYWx1ZSA9IGFueSwgVFJldHVybiA9IFRWYWx1ZT4gPSAoXG4gIHZhbDogVFZhbHVlLFxuICBwcmV2aW91cz86IFRSZXR1cm4sXG4pID0+IFRSZXR1cm47XG5cbi8qKiBSZXN1bHQgb2YgdGhlIHBhcnNlRmxhZ3MgbWV0aG9kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUZsYWdzQ29udGV4dDxcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgVEZsYWdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIFRTdGFuZGFsb25lT3B0aW9uIGV4dGVuZHMgRmxhZ09wdGlvbnMgPSBGbGFnT3B0aW9ucyxcbj4ge1xuICBmbGFnczogVEZsYWdzO1xuICB1bmtub3duOiBBcnJheTxzdHJpbmc+O1xuICBsaXRlcmFsOiBBcnJheTxzdHJpbmc+O1xuICBzdGFuZGFsb25lPzogVFN0YW5kYWxvbmVPcHRpb247XG4gIHN0b3BFYXJseTogYm9vbGVhbjtcbiAgc3RvcE9uVW5rbm93bjogYm9vbGVhbjtcbn1cblxuLyoqIFR5cGUgZGV0YWlscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXJndW1lbnRWYWx1ZSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogQ3VzdG9tIHR5cGUgaGFuZGxlci9wYXJzZXIuICovXG5leHBvcnQgdHlwZSBUeXBlSGFuZGxlcjxUUmV0dXJuID0gdW5rbm93bj4gPSAoYXJnOiBBcmd1bWVudFZhbHVlKSA9PiBUUmV0dXJuO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQixHQUNwQiJ9
+// denoCacheMetadata=588608111998653176,17034436489048596845 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a6ec6f3510616248b0edd4442b5f244a0722fba2ed52a645812ad07b0eac1d20.js b/vendor/gen/https/deno.land/a6ec6f3510616248b0edd4442b5f244a0722fba2ed52a645812ad07b0eac1d20.js
new file mode 100644
index 0000000..ce1041f
--- /dev/null
+++ b/vendor/gen/https/deno.land/a6ec6f3510616248b0edd4442b5f244a0722fba2ed52a645812ad07b0eac1d20.js
@@ -0,0 +1,8 @@
+export * from "./ansi.ts";
+export * from "./ansi_escapes.ts";
+export * from "./chain.ts";
+export * from "./colors.ts";
+export * from "./cursor_position.ts";
+export * from "./tty.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYW5zaS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYW5zaV9lc2NhcGVzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGFpbi50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29sb3JzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jdXJzb3JfcG9zaXRpb24udHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R0eS50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWTtBQUMxQixjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsV0FBVyJ9
+// denoCacheMetadata=3751638740744540889,6518290959901677304 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a72ad68e4135a8e5e626af97b8df6af86a6c4fdff3ec2d0c68854cc6424ac29f.js b/vendor/gen/https/deno.land/a72ad68e4135a8e5e626af97b8df6af86a6c4fdff3ec2d0c68854cc6424ac29f.js
new file mode 100644
index 0000000..19e80e7
--- /dev/null
+++ b/vendor/gen/https/deno.land/a72ad68e4135a8e5e626af97b8df6af86a6c4fdff3ec2d0c68854cc6424ac29f.js
@@ -0,0 +1,240 @@
+import { getDescription } from "../_utils.ts";
+import { FileType } from "../types/file.ts";
+/** Generates zsh completions script. */ export class ZshCompletionsGenerator {
+ cmd;
+ actions;
+ /** Generates zsh completions script for given command. */ static generate(cmd) {
+ return new ZshCompletionsGenerator(cmd).generate();
+ }
+ constructor(cmd){
+ this.cmd = cmd;
+ this.actions = new Map();
+ }
+ /** Generates zsh completions code. */ generate() {
+ const path = this.cmd.getPath();
+ const name = this.cmd.getName();
+ const version = this.cmd.getVersion() ? ` v${this.cmd.getVersion()}` : "";
+ return `#!/usr/bin/env zsh
+# zsh completion support for ${path}${version}
+
+autoload -U is-at-least
+
+# shellcheck disable=SC2154
+(( $+functions[__${replaceSpecialChars(name)}_complete] )) ||
+function __${replaceSpecialChars(name)}_complete {
+ local name="$1"; shift
+ local action="$1"; shift
+ integer ret=1
+ local -a values
+ local expl lines
+ _tags "$name"
+ while _tags; do
+ if _requested "$name"; then
+ # shellcheck disable=SC2034
+ lines="$(${name} completions complete "\${action}" "\${@}")"
+ values=("\${(ps:\\n:)lines}")
+ if (( \${#values[@]} )); then
+ while _next_label "$name" expl "$action"; do
+ compadd -S '' "\${expl[@]}" "\${values[@]}"
+ done
+ fi
+ fi
+ done
+}
+
+${this.generateCompletions(this.cmd).trim()}
+
+# _${replaceSpecialChars(path)} "\${@}"
+
+compdef _${replaceSpecialChars(path)} ${path}`;
+ }
+ /** Generates zsh completions method for given command and child commands. */ generateCompletions(command, path = "") {
+ if (!command.hasCommands(false) && !command.hasOptions(false) && !command.hasArguments()) {
+ return "";
+ }
+ path = (path ? path + " " : "") + command.getName();
+ return `# shellcheck disable=SC2154
+(( $+functions[_${replaceSpecialChars(path)}] )) ||
+function _${replaceSpecialChars(path)}() {` + (!command.getParent() ? `
+ local state` : "") + this.generateCommandCompletions(command, path) + this.generateSubCommandCompletions(command, path) + this.generateArgumentCompletions(command, path) + this.generateActions(command) + `\n}\n\n` + command.getCommands(false).filter((subCommand)=>subCommand !== command).map((subCommand)=>this.generateCompletions(subCommand, path)).join("");
+ }
+ generateCommandCompletions(command, path) {
+ const commands = command.getCommands(false);
+ let completions = commands.map((subCommand)=>`'${subCommand.getName()}:${subCommand.getShortDescription()// escape single quotes
+ .replace(/'/g, "'\"'\"'")}'`).join("\n ");
+ if (completions) {
+ completions = `
+ local -a commands
+ # shellcheck disable=SC2034
+ commands=(
+ ${completions}
+ )
+ _describe 'command' commands`;
+ }
+ // only complete first argument, rest arguments are completed with _arguments.
+ if (command.hasArguments()) {
+ const completionsPath = path.split(" ").slice(1).join(" ");
+ const arg = command.getArguments()[0];
+ const action = this.addAction(arg, completionsPath);
+ if (action && command.getCompletion(arg.action)) {
+ completions += `\n __${replaceSpecialChars(this.cmd.getName())}_complete ${action.arg.name} ${action.arg.action} ${action.cmd}`;
+ }
+ }
+ if (completions) {
+ completions = `\n\n function _commands() {${completions}\n }`;
+ }
+ return completions;
+ }
+ generateSubCommandCompletions(command, path) {
+ if (command.hasCommands(false)) {
+ const actions = command.getCommands(false).map((command)=>`${command.getName()}) _${replaceSpecialChars(path + " " + command.getName())} ;;`).join("\n ");
+ return `\n
+ function _command_args() {
+ case "\${words[1]}" in\n ${actions}\n esac
+ }`;
+ }
+ return "";
+ }
+ generateArgumentCompletions(command, path) {
+ /* clear actions from previously parsed command. */ this.actions.clear();
+ const options = this.generateOptions(command, path);
+ let argIndex = 0;
+ // @TODO: add stop early option: -A "-*"
+ // http://zsh.sourceforge.net/Doc/Release/Completion-System.html
+ let argsCommand = "\n\n _arguments -w -s -S -C";
+ if (command.hasOptions()) {
+ argsCommand += ` \\\n ${options.join(" \\\n ")}`;
+ }
+ if (command.hasCommands(false) || command.getArguments().filter((arg)=>command.getCompletion(arg.action)).length) {
+ argsCommand += ` \\\n '${++argIndex}:command:_commands'`;
+ }
+ if (command.hasArguments() || command.hasCommands(false)) {
+ const args = [];
+ // first argument is completed together with commands.
+ for (const arg of command.getArguments().slice(1)){
+ const type = command.getType(arg.type);
+ if (type && type.handler instanceof FileType) {
+ const fileCompletions = this.getFileCompletions(type);
+ if (arg.variadic) {
+ argIndex++;
+ for(let i = 0; i < 5; i++){
+ args.push(`${argIndex + i}${arg.optionalValue ? "::" : ":"}${arg.name}:${fileCompletions}`);
+ }
+ } else {
+ args.push(`${++argIndex}${arg.optionalValue ? "::" : ":"}${arg.name}:${fileCompletions}`);
+ }
+ } else {
+ const completionsPath = path.split(" ").slice(1).join(" ");
+ const action = this.addAction(arg, completionsPath);
+ args.push(`${++argIndex}${arg.optionalValue ? "::" : ":"}${arg.name}:->${action.name}`);
+ }
+ }
+ argsCommand += args.map((arg)=>`\\\n '${arg}'`).join("");
+ if (command.hasCommands(false)) {
+ argsCommand += ` \\\n '*::sub command:->command_args'`;
+ }
+ }
+ return argsCommand;
+ }
+ generateOptions(command, path) {
+ const options = [];
+ const cmdArgs = path.split(" ");
+ const _baseName = cmdArgs.shift();
+ const completionsPath = cmdArgs.join(" ");
+ const excludedFlags = command.getOptions(false).map((option)=>option.standalone ? option.flags : false).flat().filter((flag)=>typeof flag === "string");
+ for (const option of command.getOptions(false)){
+ options.push(this.generateOption(command, option, completionsPath, excludedFlags));
+ }
+ return options;
+ }
+ generateOption(command, option, completionsPath, excludedOptions) {
+ let args = "";
+ for (const arg of option.args){
+ const type = command.getType(arg.type);
+ const optionalValue = arg.optionalValue ? "::" : ":";
+ if (type && type.handler instanceof FileType) {
+ const fileCompletions = this.getFileCompletions(type);
+ args += `${optionalValue}${arg.name}:${fileCompletions}`;
+ } else {
+ const action = this.addAction(arg, completionsPath);
+ args += `${optionalValue}${arg.name}:->${action.name}`;
+ }
+ }
+ const description = getDescription(option.description, true)// escape brackets and quotes
+ .replace(/\[/g, "\\[").replace(/]/g, "\\]").replace(/"/g, '\\"').replace(/'/g, "'\"'\"'");
+ const collect = option.collect ? "*" : "";
+ const equalsSign = option.equalsSign ? "=" : "";
+ const flags = option.flags.map((flag)=>`${flag}${equalsSign}`);
+ let result = "";
+ if (option.standalone) {
+ result += "'(- *)'";
+ } else {
+ const excludedFlags = [
+ ...excludedOptions
+ ];
+ if (option.conflicts?.length) {
+ excludedFlags.push(...option.conflicts.map((opt)=>"--" + opt.replace(/^--/, "")));
+ }
+ if (!option.collect) {
+ excludedFlags.push(...option.flags);
+ }
+ if (excludedFlags.length) {
+ result += `'(${excludedFlags.join(" ")})'`;
+ }
+ }
+ if (collect || flags.length > 1) {
+ result += `{${collect}${flags.join(",")}}`;
+ } else {
+ result += `${flags.join(",")}`;
+ }
+ return `${result}'[${description}]${args}'`;
+ }
+ getFileCompletions(type) {
+ if (!(type.handler instanceof FileType)) {
+ return "";
+ }
+ return "_files";
+ // const fileOpts = type.handler.getOptions();
+ // let fileCompletions = "_files";
+ // if (fileOpts.dirsOnly) {
+ // fileCompletions += " -/";
+ // }
+ // if (fileOpts.pattern) {
+ // fileCompletions += ' -g "' + fileOpts.pattern + '"';
+ // }
+ // if (fileOpts.ignore) {
+ // fileCompletions += " -F " + fileOpts.ignore;
+ // }
+ // return fileCompletions;
+ }
+ addAction(arg, cmd) {
+ const action = `${arg.name}-${arg.action}`;
+ if (!this.actions.has(action)) {
+ this.actions.set(action, {
+ arg: arg,
+ label: `${arg.name}: ${arg.action}`,
+ name: action,
+ cmd
+ });
+ }
+ return this.actions.get(action);
+ }
+ generateActions(command) {
+ let actions = [];
+ if (this.actions.size) {
+ actions = Array.from(this.actions).map(([name, action])=>`${name}) __${replaceSpecialChars(this.cmd.getName())}_complete ${action.arg.name} ${action.arg.action} ${action.cmd} ;;`);
+ }
+ if (command.hasCommands(false)) {
+ actions.unshift(`command_args) _command_args ;;`);
+ }
+ if (actions.length) {
+ return `\n\n case "$state" in\n ${actions.join("\n ")}\n esac`;
+ }
+ return "";
+ }
+}
+function replaceSpecialChars(str) {
+ return str.replace(/[^a-zA-Z0-9]/g, "_");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9fenNoX2NvbXBsZXRpb25zX2dlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREZXNjcmlwdGlvbiB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50LCBPcHRpb24sIFR5cGVEZWYgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSBcIi4uL3R5cGVzL2ZpbGUudHNcIjtcblxuaW50ZXJmYWNlIElDb21wbGV0aW9uQWN0aW9uIHtcbiAgYXJnOiBBcmd1bWVudDtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBjbWQ6IHN0cmluZztcbn1cblxuLyoqIEdlbmVyYXRlcyB6c2ggY29tcGxldGlvbnMgc2NyaXB0LiAqL1xuZXhwb3J0IGNsYXNzIFpzaENvbXBsZXRpb25zR2VuZXJhdG9yIHtcbiAgcHJpdmF0ZSBhY3Rpb25zOiBNYXA8c3RyaW5nLCBJQ29tcGxldGlvbkFjdGlvbj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqIEdlbmVyYXRlcyB6c2ggY29tcGxldGlvbnMgc2NyaXB0IGZvciBnaXZlbiBjb21tYW5kLiAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlKGNtZDogQ29tbWFuZCkge1xuICAgIHJldHVybiBuZXcgWnNoQ29tcGxldGlvbnNHZW5lcmF0b3IoY21kKS5nZW5lcmF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY21kOiBDb21tYW5kKSB7fVxuXG4gIC8qKiBHZW5lcmF0ZXMgenNoIGNvbXBsZXRpb25zIGNvZGUuICovXG4gIHByaXZhdGUgZ2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jbWQuZ2V0UGF0aCgpO1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNtZC5nZXROYW1lKCk7XG4gICAgY29uc3QgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jbWQuZ2V0VmVyc2lvbigpXG4gICAgICA/IGAgdiR7dGhpcy5jbWQuZ2V0VmVyc2lvbigpfWBcbiAgICAgIDogXCJcIjtcblxuICAgIHJldHVybiBgIyEvdXNyL2Jpbi9lbnYgenNoXG4jIHpzaCBjb21wbGV0aW9uIHN1cHBvcnQgZm9yICR7cGF0aH0ke3ZlcnNpb259XG5cbmF1dG9sb2FkIC1VIGlzLWF0LWxlYXN0XG5cbiMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE1NFxuKCggJCtmdW5jdGlvbnNbX18ke3JlcGxhY2VTcGVjaWFsQ2hhcnMobmFtZSl9X2NvbXBsZXRlXSApKSB8fFxuZnVuY3Rpb24gX18ke3JlcGxhY2VTcGVjaWFsQ2hhcnMobmFtZSl9X2NvbXBsZXRlIHtcbiAgbG9jYWwgbmFtZT1cIiQxXCI7IHNoaWZ0XG4gIGxvY2FsIGFjdGlvbj1cIiQxXCI7IHNoaWZ0XG4gIGludGVnZXIgcmV0PTFcbiAgbG9jYWwgLWEgdmFsdWVzXG4gIGxvY2FsIGV4cGwgbGluZXNcbiAgX3RhZ3MgXCIkbmFtZVwiXG4gIHdoaWxlIF90YWdzOyBkb1xuICAgIGlmIF9yZXF1ZXN0ZWQgXCIkbmFtZVwiOyB0aGVuXG4gICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzRcbiAgICAgIGxpbmVzPVwiJCgke25hbWV9IGNvbXBsZXRpb25zIGNvbXBsZXRlIFwiXFwke2FjdGlvbn1cIiBcIlxcJHtAfVwiKVwiXG4gICAgICB2YWx1ZXM9KFwiXFwkeyhwczpcXFxcbjopbGluZXN9XCIpXG4gICAgICBpZiAoKCBcXCR7I3ZhbHVlc1tAXX0gKSk7IHRoZW5cbiAgICAgICAgd2hpbGUgX25leHRfbGFiZWwgXCIkbmFtZVwiIGV4cGwgXCIkYWN0aW9uXCI7IGRvXG4gICAgICAgICAgY29tcGFkZCAtUyAnJyBcIlxcJHtleHBsW0BdfVwiIFwiXFwke3ZhbHVlc1tAXX1cIlxuICAgICAgICBkb25lXG4gICAgICBmaVxuICAgIGZpXG4gIGRvbmVcbn1cblxuJHt0aGlzLmdlbmVyYXRlQ29tcGxldGlvbnModGhpcy5jbWQpLnRyaW0oKX1cblxuIyBfJHtyZXBsYWNlU3BlY2lhbENoYXJzKHBhdGgpfSBcIlxcJHtAfVwiXG5cbmNvbXBkZWYgXyR7cmVwbGFjZVNwZWNpYWxDaGFycyhwYXRoKX0gJHtwYXRofWA7XG4gIH1cblxuICAvKiogR2VuZXJhdGVzIHpzaCBjb21wbGV0aW9ucyBtZXRob2QgZm9yIGdpdmVuIGNvbW1hbmQgYW5kIGNoaWxkIGNvbW1hbmRzLiAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29tcGxldGlvbnMoY29tbWFuZDogQ29tbWFuZCwgcGF0aCA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgICFjb21tYW5kLmhhc0NvbW1hbmRzKGZhbHNlKSAmJiAhY29tbWFuZC5oYXNPcHRpb25zKGZhbHNlKSAmJlxuICAgICAgIWNvbW1hbmQuaGFzQXJndW1lbnRzKClcbiAgICApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHBhdGggPSAocGF0aCA/IHBhdGggKyBcIiBcIiA6IFwiXCIpICsgY29tbWFuZC5nZXROYW1lKCk7XG5cbiAgICByZXR1cm4gYCMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE1NFxuKCggJCtmdW5jdGlvbnNbXyR7cmVwbGFjZVNwZWNpYWxDaGFycyhwYXRoKX1dICkpIHx8XG5mdW5jdGlvbiBfJHtyZXBsYWNlU3BlY2lhbENoYXJzKHBhdGgpfSgpIHtgICtcbiAgICAgICghY29tbWFuZC5nZXRQYXJlbnQoKVxuICAgICAgICA/IGBcbiAgbG9jYWwgc3RhdGVgXG4gICAgICAgIDogXCJcIikgK1xuICAgICAgdGhpcy5nZW5lcmF0ZUNvbW1hbmRDb21wbGV0aW9ucyhjb21tYW5kLCBwYXRoKSArXG4gICAgICB0aGlzLmdlbmVyYXRlU3ViQ29tbWFuZENvbXBsZXRpb25zKGNvbW1hbmQsIHBhdGgpICtcbiAgICAgIHRoaXMuZ2VuZXJhdGVBcmd1bWVudENvbXBsZXRpb25zKGNvbW1hbmQsIHBhdGgpICtcbiAgICAgIHRoaXMuZ2VuZXJhdGVBY3Rpb25zKGNvbW1hbmQpICtcbiAgICAgIGBcXG59XFxuXFxuYCArXG4gICAgICBjb21tYW5kLmdldENvbW1hbmRzKGZhbHNlKVxuICAgICAgICAuZmlsdGVyKChzdWJDb21tYW5kOiBDb21tYW5kKSA9PiBzdWJDb21tYW5kICE9PSBjb21tYW5kKVxuICAgICAgICAubWFwKChzdWJDb21tYW5kOiBDb21tYW5kKSA9PlxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb21wbGV0aW9ucyhzdWJDb21tYW5kLCBwYXRoKVxuICAgICAgICApXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbW1hbmRDb21wbGV0aW9ucyhjb21tYW5kOiBDb21tYW5kLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZC5nZXRDb21tYW5kcyhmYWxzZSk7XG5cbiAgICBsZXQgY29tcGxldGlvbnM6IHN0cmluZyA9IGNvbW1hbmRzXG4gICAgICAubWFwKChzdWJDb21tYW5kOiBDb21tYW5kKSA9PlxuICAgICAgICBgJyR7c3ViQ29tbWFuZC5nZXROYW1lKCl9OiR7XG4gICAgICAgICAgc3ViQ29tbWFuZC5nZXRTaG9ydERlc2NyaXB0aW9uKClcbiAgICAgICAgICAgIC8vIGVzY2FwZSBzaW5nbGUgcXVvdGVzXG4gICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIidcXFwiJ1xcXCInXCIpXG4gICAgICAgIH0nYFxuICAgICAgKVxuICAgICAgLmpvaW4oXCJcXG4gICAgICBcIik7XG5cbiAgICBpZiAoY29tcGxldGlvbnMpIHtcbiAgICAgIGNvbXBsZXRpb25zID0gYFxuICAgIGxvY2FsIC1hIGNvbW1hbmRzXG4gICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0XG4gICAgY29tbWFuZHM9KFxuICAgICAgJHtjb21wbGV0aW9uc31cbiAgICApXG4gICAgX2Rlc2NyaWJlICdjb21tYW5kJyBjb21tYW5kc2A7XG4gICAgfVxuXG4gICAgLy8gb25seSBjb21wbGV0ZSBmaXJzdCBhcmd1bWVudCwgcmVzdCBhcmd1bWVudHMgYXJlIGNvbXBsZXRlZCB3aXRoIF9hcmd1bWVudHMuXG4gICAgaWYgKGNvbW1hbmQuaGFzQXJndW1lbnRzKCkpIHtcbiAgICAgIGNvbnN0IGNvbXBsZXRpb25zUGF0aDogc3RyaW5nID0gcGF0aC5zcGxpdChcIiBcIikuc2xpY2UoMSkuam9pbihcIiBcIik7XG4gICAgICBjb25zdCBhcmc6IEFyZ3VtZW50ID0gY29tbWFuZC5nZXRBcmd1bWVudHMoKVswXTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWRkQWN0aW9uKGFyZywgY29tcGxldGlvbnNQYXRoKTtcbiAgICAgIGlmIChhY3Rpb24gJiYgY29tbWFuZC5nZXRDb21wbGV0aW9uKGFyZy5hY3Rpb24pKSB7XG4gICAgICAgIGNvbXBsZXRpb25zICs9IGBcXG4gICAgX18ke1xuICAgICAgICAgIHJlcGxhY2VTcGVjaWFsQ2hhcnModGhpcy5jbWQuZ2V0TmFtZSgpKVxuICAgICAgICB9X2NvbXBsZXRlICR7YWN0aW9uLmFyZy5uYW1lfSAke2FjdGlvbi5hcmcuYWN0aW9ufSAke2FjdGlvbi5jbWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29tcGxldGlvbnMpIHtcbiAgICAgIGNvbXBsZXRpb25zID0gYFxcblxcbiAgZnVuY3Rpb24gX2NvbW1hbmRzKCkgeyR7Y29tcGxldGlvbnN9XFxuICB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGxldGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlU3ViQ29tbWFuZENvbXBsZXRpb25zKFxuICAgIGNvbW1hbmQ6IENvbW1hbmQsXG4gICAgcGF0aDogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGlmIChjb21tYW5kLmhhc0NvbW1hbmRzKGZhbHNlKSkge1xuICAgICAgY29uc3QgYWN0aW9uczogc3RyaW5nID0gY29tbWFuZFxuICAgICAgICAuZ2V0Q29tbWFuZHMoZmFsc2UpXG4gICAgICAgIC5tYXAoKGNvbW1hbmQ6IENvbW1hbmQpID0+XG4gICAgICAgICAgYCR7Y29tbWFuZC5nZXROYW1lKCl9KSBfJHtcbiAgICAgICAgICAgIHJlcGxhY2VTcGVjaWFsQ2hhcnMocGF0aCArIFwiIFwiICsgY29tbWFuZC5nZXROYW1lKCkpXG4gICAgICAgICAgfSA7O2BcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIlxcbiAgICAgIFwiKTtcblxuICAgICAgcmV0dXJuIGBcXG5cbiAgZnVuY3Rpb24gX2NvbW1hbmRfYXJncygpIHtcbiAgICBjYXNlIFwiXFwke3dvcmRzWzFdfVwiIGluXFxuICAgICAgJHthY3Rpb25zfVxcbiAgICBlc2FjXG4gIH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUFyZ3VtZW50Q29tcGxldGlvbnMoY29tbWFuZDogQ29tbWFuZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvKiBjbGVhciBhY3Rpb25zIGZyb20gcHJldmlvdXNseSBwYXJzZWQgY29tbWFuZC4gKi9cbiAgICB0aGlzLmFjdGlvbnMuY2xlYXIoKTtcblxuICAgIGNvbnN0IG9wdGlvbnM6IHN0cmluZ1tdID0gdGhpcy5nZW5lcmF0ZU9wdGlvbnMoY29tbWFuZCwgcGF0aCk7XG5cbiAgICBsZXQgYXJnSW5kZXggPSAwO1xuICAgIC8vIEBUT0RPOiBhZGQgc3RvcCBlYXJseSBvcHRpb246IC1BIFwiLSpcIlxuICAgIC8vIGh0dHA6Ly96c2guc291cmNlZm9yZ2UubmV0L0RvYy9SZWxlYXNlL0NvbXBsZXRpb24tU3lzdGVtLmh0bWxcbiAgICBsZXQgYXJnc0NvbW1hbmQgPSBcIlxcblxcbiAgX2FyZ3VtZW50cyAtdyAtcyAtUyAtQ1wiO1xuXG4gICAgaWYgKGNvbW1hbmQuaGFzT3B0aW9ucygpKSB7XG4gICAgICBhcmdzQ29tbWFuZCArPSBgIFxcXFxcXG4gICAgJHtvcHRpb25zLmpvaW4oXCIgXFxcXFxcbiAgICBcIil9YDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjb21tYW5kLmhhc0NvbW1hbmRzKGZhbHNlKSB8fCAoXG4gICAgICAgIGNvbW1hbmQuZ2V0QXJndW1lbnRzKClcbiAgICAgICAgICAuZmlsdGVyKChhcmcpID0+IGNvbW1hbmQuZ2V0Q29tcGxldGlvbihhcmcuYWN0aW9uKSkubGVuZ3RoXG4gICAgICApXG4gICAgKSB7XG4gICAgICBhcmdzQ29tbWFuZCArPSBgIFxcXFxcXG4gICAgJyR7KythcmdJbmRleH06Y29tbWFuZDpfY29tbWFuZHMnYDtcbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZC5oYXNBcmd1bWVudHMoKSB8fCBjb21tYW5kLmhhc0NvbW1hbmRzKGZhbHNlKSkge1xuICAgICAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgLy8gZmlyc3QgYXJndW1lbnQgaXMgY29tcGxldGVkIHRvZ2V0aGVyIHdpdGggY29tbWFuZHMuXG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBjb21tYW5kLmdldEFyZ3VtZW50cygpLnNsaWNlKDEpKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb21tYW5kLmdldFR5cGUoYXJnLnR5cGUpO1xuICAgICAgICBpZiAodHlwZSAmJiB0eXBlLmhhbmRsZXIgaW5zdGFuY2VvZiBGaWxlVHlwZSkge1xuICAgICAgICAgIGNvbnN0IGZpbGVDb21wbGV0aW9ucyA9IHRoaXMuZ2V0RmlsZUNvbXBsZXRpb25zKHR5cGUpO1xuICAgICAgICAgIGlmIChhcmcudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIGFyZ0luZGV4Kys7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgICAgICAgICBhcmdzLnB1c2goXG4gICAgICAgICAgICAgICAgYCR7YXJnSW5kZXggKyBpfSR7XG4gICAgICAgICAgICAgICAgICBhcmcub3B0aW9uYWxWYWx1ZSA/IFwiOjpcIiA6IFwiOlwiXG4gICAgICAgICAgICAgICAgfSR7YXJnLm5hbWV9OiR7ZmlsZUNvbXBsZXRpb25zfWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChcbiAgICAgICAgICAgICAgYCR7KythcmdJbmRleH0ke1xuICAgICAgICAgICAgICAgIGFyZy5vcHRpb25hbFZhbHVlID8gXCI6OlwiIDogXCI6XCJcbiAgICAgICAgICAgICAgfSR7YXJnLm5hbWV9OiR7ZmlsZUNvbXBsZXRpb25zfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wbGV0aW9uc1BhdGg6IHN0cmluZyA9IHBhdGguc3BsaXQoXCIgXCIpLnNsaWNlKDEpLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWRkQWN0aW9uKGFyZywgY29tcGxldGlvbnNQYXRoKTtcbiAgICAgICAgICBhcmdzLnB1c2goXG4gICAgICAgICAgICBgJHsrK2FyZ0luZGV4fSR7XG4gICAgICAgICAgICAgIGFyZy5vcHRpb25hbFZhbHVlID8gXCI6OlwiIDogXCI6XCJcbiAgICAgICAgICAgIH0ke2FyZy5uYW1lfTotPiR7YWN0aW9uLm5hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFyZ3NDb21tYW5kICs9IGFyZ3MubWFwKChhcmc6IHN0cmluZykgPT4gYFxcXFxcXG4gICAgJyR7YXJnfSdgKS5qb2luKFwiXCIpO1xuXG4gICAgICBpZiAoY29tbWFuZC5oYXNDb21tYW5kcyhmYWxzZSkpIHtcbiAgICAgICAgYXJnc0NvbW1hbmQgKz0gYCBcXFxcXFxuICAgICcqOjpzdWIgY29tbWFuZDotPmNvbW1hbmRfYXJncydgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmdzQ29tbWFuZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQsIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IG9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY21kQXJnczogc3RyaW5nW10gPSBwYXRoLnNwbGl0KFwiIFwiKTtcbiAgICBjb25zdCBfYmFzZU5hbWU6IHN0cmluZyA9IGNtZEFyZ3Muc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgY29tcGxldGlvbnNQYXRoOiBzdHJpbmcgPSBjbWRBcmdzLmpvaW4oXCIgXCIpO1xuXG4gICAgY29uc3QgZXhjbHVkZWRGbGFnczogc3RyaW5nW10gPSBjb21tYW5kLmdldE9wdGlvbnMoZmFsc2UpXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5zdGFuZGFsb25lID8gb3B0aW9uLmZsYWdzIDogZmFsc2UpXG4gICAgICAuZmxhdCgpXG4gICAgICAuZmlsdGVyKChmbGFnKSA9PiB0eXBlb2YgZmxhZyA9PT0gXCJzdHJpbmdcIikgYXMgc3RyaW5nW107XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBjb21tYW5kLmdldE9wdGlvbnMoZmFsc2UpKSB7XG4gICAgICBvcHRpb25zLnB1c2goXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVPcHRpb24oY29tbWFuZCwgb3B0aW9uLCBjb21wbGV0aW9uc1BhdGgsIGV4Y2x1ZGVkRmxhZ3MpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVPcHRpb24oXG4gICAgY29tbWFuZDogQ29tbWFuZCxcbiAgICBvcHRpb246IE9wdGlvbixcbiAgICBjb21wbGV0aW9uc1BhdGg6IHN0cmluZyxcbiAgICBleGNsdWRlZE9wdGlvbnM6IHN0cmluZ1tdLFxuICApOiBzdHJpbmcge1xuICAgIGxldCBhcmdzID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcHRpb24uYXJncykge1xuICAgICAgY29uc3QgdHlwZSA9IGNvbW1hbmQuZ2V0VHlwZShhcmcudHlwZSk7XG4gICAgICBjb25zdCBvcHRpb25hbFZhbHVlID0gYXJnLm9wdGlvbmFsVmFsdWUgPyBcIjo6XCIgOiBcIjpcIjtcbiAgICAgIGlmICh0eXBlICYmIHR5cGUuaGFuZGxlciBpbnN0YW5jZW9mIEZpbGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVDb21wbGV0aW9ucyA9IHRoaXMuZ2V0RmlsZUNvbXBsZXRpb25zKHR5cGUpO1xuICAgICAgICBhcmdzICs9IGAke29wdGlvbmFsVmFsdWV9JHthcmcubmFtZX06JHtmaWxlQ29tcGxldGlvbnN9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWRkQWN0aW9uKGFyZywgY29tcGxldGlvbnNQYXRoKTtcbiAgICAgICAgYXJncyArPSBgJHtvcHRpb25hbFZhbHVlfSR7YXJnLm5hbWV9Oi0+JHthY3Rpb24ubmFtZX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkZXNjcmlwdGlvbjogc3RyaW5nID0gZ2V0RGVzY3JpcHRpb24ob3B0aW9uLmRlc2NyaXB0aW9uLCB0cnVlKVxuICAgICAgLy8gZXNjYXBlIGJyYWNrZXRzIGFuZCBxdW90ZXNcbiAgICAgIC5yZXBsYWNlKC9cXFsvZywgXCJcXFxcW1wiKVxuICAgICAgLnJlcGxhY2UoL10vZywgXCJcXFxcXVwiKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgLnJlcGxhY2UoLycvZywgXCInXFxcIidcXFwiJ1wiKTtcblxuICAgIGNvbnN0IGNvbGxlY3Q6IHN0cmluZyA9IG9wdGlvbi5jb2xsZWN0ID8gXCIqXCIgOiBcIlwiO1xuICAgIGNvbnN0IGVxdWFsc1NpZ24gPSBvcHRpb24uZXF1YWxzU2lnbiA/IFwiPVwiIDogXCJcIjtcbiAgICBjb25zdCBmbGFncyA9IG9wdGlvbi5mbGFncy5tYXAoKGZsYWcpID0+IGAke2ZsYWd9JHtlcXVhbHNTaWdufWApO1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuXG4gICAgaWYgKG9wdGlvbi5zdGFuZGFsb25lKSB7XG4gICAgICByZXN1bHQgKz0gXCInKC0gKiknXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVkRmxhZ3MgPSBbLi4uZXhjbHVkZWRPcHRpb25zXTtcblxuICAgICAgaWYgKG9wdGlvbi5jb25mbGljdHM/Lmxlbmd0aCkge1xuICAgICAgICBleGNsdWRlZEZsYWdzLnB1c2goXG4gICAgICAgICAgLi4ub3B0aW9uLmNvbmZsaWN0cy5tYXAoKG9wdCkgPT4gXCItLVwiICsgb3B0LnJlcGxhY2UoL14tLS8sIFwiXCIpKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9uLmNvbGxlY3QpIHtcbiAgICAgICAgZXhjbHVkZWRGbGFncy5wdXNoKC4uLm9wdGlvbi5mbGFncyk7XG4gICAgICB9XG4gICAgICBpZiAoZXhjbHVkZWRGbGFncy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAnKCR7ZXhjbHVkZWRGbGFncy5qb2luKFwiIFwiKX0pJ2A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3QgfHwgZmxhZ3MubGVuZ3RoID4gMSkge1xuICAgICAgcmVzdWx0ICs9IGB7JHtjb2xsZWN0fSR7ZmxhZ3Muam9pbihcIixcIil9fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBgJHtmbGFncy5qb2luKFwiLFwiKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtyZXN1bHR9J1ske2Rlc2NyaXB0aW9ufV0ke2FyZ3N9J2A7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVDb21wbGV0aW9ucyh0eXBlOiBUeXBlRGVmKSB7XG4gICAgaWYgKCEodHlwZS5oYW5kbGVyIGluc3RhbmNlb2YgRmlsZVR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiX2ZpbGVzXCI7XG4gICAgLy8gY29uc3QgZmlsZU9wdHMgPSB0eXBlLmhhbmRsZXIuZ2V0T3B0aW9ucygpO1xuICAgIC8vIGxldCBmaWxlQ29tcGxldGlvbnMgPSBcIl9maWxlc1wiO1xuICAgIC8vIGlmIChmaWxlT3B0cy5kaXJzT25seSkge1xuICAgIC8vICAgZmlsZUNvbXBsZXRpb25zICs9IFwiIC0vXCI7XG4gICAgLy8gfVxuICAgIC8vIGlmIChmaWxlT3B0cy5wYXR0ZXJuKSB7XG4gICAgLy8gICBmaWxlQ29tcGxldGlvbnMgKz0gJyAtZyBcIicgKyBmaWxlT3B0cy5wYXR0ZXJuICsgJ1wiJztcbiAgICAvLyB9XG4gICAgLy8gaWYgKGZpbGVPcHRzLmlnbm9yZSkge1xuICAgIC8vICAgZmlsZUNvbXBsZXRpb25zICs9IFwiIC1GIFwiICsgZmlsZU9wdHMuaWdub3JlO1xuICAgIC8vIH1cbiAgICAvLyByZXR1cm4gZmlsZUNvbXBsZXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBY3Rpb24oYXJnOiBBcmd1bWVudCwgY21kOiBzdHJpbmcpOiBJQ29tcGxldGlvbkFjdGlvbiB7XG4gICAgY29uc3QgYWN0aW9uID0gYCR7YXJnLm5hbWV9LSR7YXJnLmFjdGlvbn1gO1xuXG4gICAgaWYgKCF0aGlzLmFjdGlvbnMuaGFzKGFjdGlvbikpIHtcbiAgICAgIHRoaXMuYWN0aW9ucy5zZXQoYWN0aW9uLCB7XG4gICAgICAgIGFyZzogYXJnLFxuICAgICAgICBsYWJlbDogYCR7YXJnLm5hbWV9OiAke2FyZy5hY3Rpb259YCxcbiAgICAgICAgbmFtZTogYWN0aW9uLFxuICAgICAgICBjbWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zLmdldChhY3Rpb24pIGFzIElDb21wbGV0aW9uQWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUFjdGlvbnMoY29tbWFuZDogQ29tbWFuZCk6IHN0cmluZyB7XG4gICAgbGV0IGFjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5hY3Rpb25zLnNpemUpIHtcbiAgICAgIGFjdGlvbnMgPSBBcnJheVxuICAgICAgICAuZnJvbSh0aGlzLmFjdGlvbnMpXG4gICAgICAgIC5tYXAoKFtuYW1lLCBhY3Rpb25dKSA9PlxuICAgICAgICAgIGAke25hbWV9KSBfXyR7XG4gICAgICAgICAgICByZXBsYWNlU3BlY2lhbENoYXJzKHRoaXMuY21kLmdldE5hbWUoKSlcbiAgICAgICAgICB9X2NvbXBsZXRlICR7YWN0aW9uLmFyZy5uYW1lfSAke2FjdGlvbi5hcmcuYWN0aW9ufSAke2FjdGlvbi5jbWR9IDs7YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjb21tYW5kLmhhc0NvbW1hbmRzKGZhbHNlKSkge1xuICAgICAgYWN0aW9ucy51bnNoaWZ0KGBjb21tYW5kX2FyZ3MpIF9jb21tYW5kX2FyZ3MgOztgKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBgXFxuXFxuICBjYXNlIFwiJHN0YXRlXCIgaW5cXG4gICAgJHthY3Rpb25zLmpvaW4oXCJcXG4gICAgXCIpfVxcbiAgZXNhY2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxDaGFycyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiX1wiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGNBQWMsUUFBUSxlQUFlO0FBRzlDLFNBQVMsUUFBUSxRQUFRLG1CQUFtQjtBQVM1QyxzQ0FBc0MsR0FDdEMsT0FBTyxNQUFNOztFQUNILFFBQW9EO0VBRTVELHdEQUF3RCxHQUN4RCxPQUFjLFNBQVMsR0FBWSxFQUFFO0lBQ25DLE9BQU8sSUFBSSx3QkFBd0IsS0FBSyxRQUFRO0VBQ2xEO0VBRUEsWUFBb0IsQUFBVSxHQUFZLENBQUU7U0FBZCxNQUFBO1NBUHRCLFVBQTBD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
+// denoCacheMetadata=8022116120923099448,1507209347091644005 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a789cb6c48c7a1d04c243ad9a99d34bcc1b7bc5e4006a4918461e2d957f1b471.js b/vendor/gen/https/deno.land/a789cb6c48c7a1d04c243ad9a99d34bcc1b7bc5e4006a4918461e2d957f1b471.js
new file mode 100644
index 0000000..cbe62d0
--- /dev/null
+++ b/vendor/gen/https/deno.land/a789cb6c48c7a1d04c243ad9a99d34bcc1b7bc5e4006a4918461e2d957f1b471.js
@@ -0,0 +1,10 @@
+const upperCasedStringCache = new Map();
+const lowerCasedStringCache = new Map();
+export function getUpperCase(string) {
+ return upperCasedStringCache.get(string) ?? upperCasedStringCache.set(string, string.toUpperCase()).get(string);
+}
+export function getLowerCase(string) {
+ return lowerCasedStringCache.get(string) ?? lowerCasedStringCache.set(string, string.toLowerCase()).get(string);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3N0cmluZy1jYWNoZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB1cHBlckNhc2VkU3RyaW5nQ2FjaGU6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5jb25zdCBsb3dlckNhc2VkU3RyaW5nQ2FjaGU6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcHBlckNhc2Uoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdXBwZXJDYXNlZFN0cmluZ0NhY2hlLmdldChzdHJpbmcpID8/XG4gICAgdXBwZXJDYXNlZFN0cmluZ0NhY2hlLnNldChzdHJpbmcsIHN0cmluZy50b1VwcGVyQ2FzZSgpKS5nZXQoc3RyaW5nKSE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb3dlckNhc2Uoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG93ZXJDYXNlZFN0cmluZ0NhY2hlLmdldChzdHJpbmcpID8/XG4gICAgbG93ZXJDYXNlZFN0cmluZ0NhY2hlLnNldChzdHJpbmcsIHN0cmluZy50b0xvd2VyQ2FzZSgpKS5nZXQoc3RyaW5nKSE7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSx3QkFBNkMsSUFBSTtBQUN2RCxNQUFNLHdCQUE2QyxJQUFJO0FBRXZELE9BQU8sU0FBUyxhQUFhLE1BQWM7RUFDekMsT0FBTyxzQkFBc0IsR0FBRyxDQUFDLFdBQy9CLHNCQUFzQixHQUFHLENBQUMsUUFBUSxPQUFPLFdBQVcsSUFBSSxHQUFHLENBQUM7QUFDaEU7QUFFQSxPQUFPLFNBQVMsYUFBYSxNQUFjO0VBQ3pDLE9BQU8sc0JBQXNCLEdBQUcsQ0FBQyxXQUMvQixzQkFBc0IsR0FBRyxDQUFDLFFBQVEsT0FBTyxXQUFXLElBQUksR0FBRyxDQUFDO0FBQ2hFIn0=
+// denoCacheMetadata=4532848147329023150,9244704878751882796 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a7d2cd91bbf79350d5df1606d7571bad822fb6a33c35d0667a2506f937314b91.js b/vendor/gen/https/deno.land/a7d2cd91bbf79350d5df1606d7571bad822fb6a33c35d0667a2506f937314b91.js
new file mode 100644
index 0000000..d35e4ca
--- /dev/null
+++ b/vendor/gen/https/deno.land/a7d2cd91bbf79350d5df1606d7571bad822fb6a33c35d0667a2506f937314b91.js
@@ -0,0 +1,15 @@
+export * from "./figures.ts";
+export * from "./_generic_prompt.ts";
+export * from "./_generic_input.ts";
+export * from "./_generic_list.ts";
+export * from "./checkbox.ts";
+export * from "./confirm.ts";
+export * from "./input.ts";
+export * from "./list.ts";
+export * from "./number.ts";
+export * from "./secret.ts";
+export * from "./select.ts";
+export * from "./toggle.ts";
+export * from "./prompt.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9maWd1cmVzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9fZ2VuZXJpY19wcm9tcHQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL19nZW5lcmljX2lucHV0LnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9fZ2VuZXJpY19saXN0LnRzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NoZWNrYm94LnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25maXJtLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnB1dC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGlzdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbnVtYmVyLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZWNyZXQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlbGVjdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdG9nZ2xlLnRzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3Byb21wdC50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZTtBQUM3QixjQUFjLHVCQUF1QjtBQUNyQyxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLHFCQUFxQjtBQUVuQyxjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWU7QUFDN0IsY0FBYyxhQUFhO0FBQzNCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGNBQWM7QUFDNUIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsY0FBYztBQUM1QixjQUFjLGNBQWM7QUFFNUIsY0FBYyxjQUFjIn0=
+// denoCacheMetadata=11052431237751334694,18410497533697407333 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a8505974f72fcbd736ae4b912e0e51c5f27f8243d826eb776061d81ac3d4cf72.js b/vendor/gen/https/deno.land/a8505974f72fcbd736ae4b912e0e51c5f27f8243d826eb776061d81ac3d4cf72.js
new file mode 100644
index 0000000..4a79ee8
--- /dev/null
+++ b/vendor/gen/https/deno.land/a8505974f72fcbd736ae4b912e0e51c5f27f8243d826eb776061d81ac3d4cf72.js
@@ -0,0 +1,85 @@
+/** A list of the available plugins not installed by default and sorted */ export const pluginNames = [
+ // Order doesn't matter, but should be first
+ "attributes",
+ "date",
+ "code_highlight",
+ "decap_cms",
+ "fff",
+ "eta",
+ "extract_date",
+ "jsx",
+ "json_ld",
+ "reading_info",
+ "relations",
+ "mdx",
+ "metas",
+ "multilanguage",
+ "nav",
+ "nunjucks",
+ "pagefind",
+ "plaintext",
+ "prism",
+ "pug",
+ "remark",
+ "robots",
+ "sheets",
+ "filter_pages",
+ "redirects",
+ "icons",
+ // CSS + JS + source maps
+ "esbuild",
+ "terser",
+ "katex",
+ "google_fonts",
+ "sass",
+ "unocss",
+ "tailwindcss",
+ "postcss",
+ "lightningcss",
+ "purgecss",
+ "source_maps",
+ // Modify URLs
+ "base_path",
+ "resolve_urls",
+ "relative_urls",
+ "slugify_urls",
+ "modify_urls",
+ "check_urls",
+ // Images
+ "og_images",
+ "favicon",
+ "svgo",
+ "picture",
+ "transform_images",
+ // Assets in HTML
+ "inline",
+ "sri",
+ // Generate files with URLs
+ "feed",
+ "sitemap",
+ // Final minification and compression
+ "minify_html",
+ "brotli",
+ "gzip"
+];
+/** Returns the _config file of a site */ export async function getConfigFile(path, defaultPaths = [
+ "_config.js",
+ "_config.ts"
+]) {
+ if (path) {
+ try {
+ return await Deno.realPath(path);
+ } catch {
+ throw new Error(`Config file not found (${path})`);
+ }
+ }
+ for (const path of defaultPaths){
+ try {
+ return await Deno.realPath(path);
+ } catch {
+ // Ignore
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9sdW1lX2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgcGx1Z2lucyBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgYW5kIHNvcnRlZCAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbk5hbWVzID0gW1xuICAvLyBPcmRlciBkb2Vzbid0IG1hdHRlciwgYnV0IHNob3VsZCBiZSBmaXJzdFxuICBcImF0dHJpYnV0ZXNcIixcbiAgXCJkYXRlXCIsXG4gIFwiY29kZV9oaWdobGlnaHRcIixcbiAgXCJkZWNhcF9jbXNcIixcbiAgXCJmZmZcIixcbiAgXCJldGFcIixcbiAgXCJleHRyYWN0X2RhdGVcIixcbiAgXCJqc3hcIixcbiAgXCJqc29uX2xkXCIsXG4gIFwicmVhZGluZ19pbmZvXCIsXG4gIFwicmVsYXRpb25zXCIsXG4gIFwibWR4XCIsXG4gIFwibWV0YXNcIixcbiAgXCJtdWx0aWxhbmd1YWdlXCIsXG4gIFwibmF2XCIsXG4gIFwibnVuanVja3NcIixcbiAgXCJwYWdlZmluZFwiLFxuICBcInBsYWludGV4dFwiLFxuICBcInByaXNtXCIsXG4gIFwicHVnXCIsXG4gIFwicmVtYXJrXCIsXG4gIFwicm9ib3RzXCIsXG4gIFwic2hlZXRzXCIsXG4gIFwiZmlsdGVyX3BhZ2VzXCIsXG4gIFwicmVkaXJlY3RzXCIsXG4gIFwiaWNvbnNcIixcblxuICAvLyBDU1MgKyBKUyArIHNvdXJjZSBtYXBzXG4gIFwiZXNidWlsZFwiLFxuICBcInRlcnNlclwiLFxuICBcImthdGV4XCIsXG4gIFwiZ29vZ2xlX2ZvbnRzXCIsXG4gIFwic2Fzc1wiLFxuICBcInVub2Nzc1wiLFxuICBcInRhaWx3aW5kY3NzXCIsXG4gIFwicG9zdGNzc1wiLFxuICBcImxpZ2h0bmluZ2Nzc1wiLFxuICBcInB1cmdlY3NzXCIsXG4gIFwic291cmNlX21hcHNcIixcblxuICAvLyBNb2RpZnkgVVJMc1xuICBcImJhc2VfcGF0aFwiLFxuICBcInJlc29sdmVfdXJsc1wiLFxuICBcInJlbGF0aXZlX3VybHNcIixcbiAgXCJzbHVnaWZ5X3VybHNcIixcbiAgXCJtb2RpZnlfdXJsc1wiLFxuICBcImNoZWNrX3VybHNcIixcblxuICAvLyBJbWFnZXNcbiAgXCJvZ19pbWFnZXNcIixcbiAgXCJmYXZpY29uXCIsXG4gIFwic3Znb1wiLFxuICBcInBpY3R1cmVcIixcbiAgXCJ0cmFuc2Zvcm1faW1hZ2VzXCIsXG5cbiAgLy8gQXNzZXRzIGluIEhUTUxcbiAgXCJpbmxpbmVcIixcbiAgXCJzcmlcIixcblxuICAvLyBHZW5lcmF0ZSBmaWxlcyB3aXRoIFVSTHNcbiAgXCJmZWVkXCIsXG4gIFwic2l0ZW1hcFwiLFxuXG4gIC8vIEZpbmFsIG1pbmlmaWNhdGlvbiBhbmQgY29tcHJlc3Npb25cbiAgXCJtaW5pZnlfaHRtbFwiLFxuICBcImJyb3RsaVwiLFxuICBcImd6aXBcIixcbl07XG5cbi8qKiBSZXR1cm5zIHRoZSBfY29uZmlnIGZpbGUgb2YgYSBzaXRlICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29uZmlnRmlsZShcbiAgcGF0aD86IHN0cmluZyxcbiAgZGVmYXVsdFBhdGhzOiBzdHJpbmdbXSA9IFtcIl9jb25maWcuanNcIiwgXCJfY29uZmlnLnRzXCJdLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IERlbm8ucmVhbFBhdGgocGF0aCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZyBmaWxlIG5vdCBmb3VuZCAoJHtwYXRofSlgKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHBhdGggb2YgZGVmYXVsdFBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBEZW5vLnJlYWxQYXRoKHBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0VBQXdFLEdBQ3hFLE9BQU8sTUFBTSxjQUFjO0VBQ3pCLDRDQUE0QztFQUM1QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUEseUJBQXlCO0VBQ3pCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxjQUFjO0VBQ2Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUEsU0FBUztFQUNUO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxpQkFBaUI7RUFDakI7RUFDQTtFQUVBLDJCQUEyQjtFQUMzQjtFQUNBO0VBRUEscUNBQXFDO0VBQ3JDO0VBQ0E7RUFDQTtDQUNELENBQUM7QUFFRix1Q0FBdUMsR0FDdkMsT0FBTyxlQUFlLGNBQ3BCLElBQWEsRUFDYixlQUF5QjtFQUFDO0VBQWM7Q0FBYTtFQUVyRCxJQUFJLE1BQU07SUFDUixJQUFJO01BQ0YsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDO0lBQzdCLEVBQUUsT0FBTTtNQUNOLE1BQU0sSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQ7RUFDRjtFQUVBLEtBQUssTUFBTSxRQUFRLGFBQWM7SUFDL0IsSUFBSTtNQUNGLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQztJQUM3QixFQUFFLE9BQU07SUFDTixTQUFTO0lBQ1g7RUFDRjtBQUNGIn0=
+// denoCacheMetadata=15431452927548674093,14826493310451118503 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a94773728869a4bb4351cfa2169dbd0c8a7e717593400c695edbab0970d22b9c.js b/vendor/gen/https/deno.land/a94773728869a4bb4351cfa2169dbd0c8a7e717593400c695edbab0970d22b9c.js
new file mode 100644
index 0000000..e7a886c
--- /dev/null
+++ b/vendor/gen/https/deno.land/a94773728869a4bb4351cfa2169dbd0c8a7e717593400c695edbab0970d22b9c.js
@@ -0,0 +1,25 @@
+/**
+ * Base class for custom types.
+ *
+ * **Custom type example:**
+ * ```
+ * export class ColorType extends Type<string> {
+ * public parse({ label, name, value, type }: ArgumentValue): string {
+ * if (["red", "blue"].includes(value)) {
+ * trow new Error(
+ * `${label} "${name}" must be of type "${type}", but got "${value}".` +
+ * "Valid colors are: red, blue"
+ * );
+ * }
+ * return value;
+ * }
+ *
+ * public complete(): string[] {
+ * return ["red", "blue"];
+ * }
+ * }
+ * ```
+ */ export class Type {
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmQudHNcIjtcbmltcG9ydCB7IFR5cGVPclR5cGVIYW5kbGVyIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXJndW1lbnRWYWx1ZSxcbiAgQ29tcGxldGVIYW5kbGVyUmVzdWx0LFxuICBWYWx1ZXNIYW5kbGVyUmVzdWx0LFxufSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGN1c3RvbSB0eXBlcy5cbiAqXG4gKiAqKkN1c3RvbSB0eXBlIGV4YW1wbGU6KipcbiAqIGBgYFxuICogZXhwb3J0IGNsYXNzIENvbG9yVHlwZSBleHRlbmRzIFR5cGU8c3RyaW5nPiB7XG4gKiAgIHB1YmxpYyBwYXJzZSh7IGxhYmVsLCBuYW1lLCB2YWx1ZSwgdHlwZSB9OiBBcmd1bWVudFZhbHVlKTogc3RyaW5nIHtcbiAqICAgICBpZiAoW1wicmVkXCIsIFwiYmx1ZVwiXS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAqICAgICAgIHRyb3cgbmV3IEVycm9yKFxuICogICAgICAgICBgJHtsYWJlbH0gXCIke25hbWV9XCIgbXVzdCBiZSBvZiB0eXBlIFwiJHt0eXBlfVwiLCBidXQgZ290IFwiJHt2YWx1ZX1cIi5gICtcbiAqICAgICAgICAgXCJWYWxpZCBjb2xvcnMgYXJlOiByZWQsIGJsdWVcIlxuICogICAgICAgKTtcbiAqICAgICB9XG4gKiAgICAgcmV0dXJuIHZhbHVlO1xuICogICB9XG4gKlxuICogICBwdWJsaWMgY29tcGxldGUoKTogc3RyaW5nW10ge1xuICogICAgIHJldHVybiBbXCJyZWRcIiwgXCJibHVlXCJdO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFR5cGU8VFZhbHVlPiB7XG4gIHB1YmxpYyBhYnN0cmFjdCBwYXJzZSh0eXBlOiBBcmd1bWVudFZhbHVlKTogVFZhbHVlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHZhbHVlcyBkaXNwbGF5ZWQgaW4gaGVscCB0ZXh0LiBJZiBubyBjb21wbGV0ZSBtZXRob2QgaXMgcHJvdmlkZWQsXG4gICAqIHRoZXNlIHZhbHVlcyBhcmUgYWxzbyB1c2VkIGZvciBzaGVsbCBjb21wbGV0aW9ucy5cbiAgICovXG4gIHB1YmxpYyB2YWx1ZXM/KFxuICAgIGNtZDogQ29tbWFuZCxcbiAgICBwYXJlbnQ/OiBDb21tYW5kLFxuICApOiBWYWx1ZXNIYW5kbGVyUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHNoZWxsIGNvbXBsZXRpb24gdmFsdWVzLiBJZiBubyBjb21wbGV0ZSBtZXRob2QgaXMgcHJvdmlkZWQsXG4gICAqIHZhbHVlcyBmcm9tIHRoZSB2YWx1ZXMgbWV0aG9kIGFyZSB1c2VkLlxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlPyhcbiAgICBjbWQ6IENvbW1hbmQsXG4gICAgcGFyZW50PzogQ29tbWFuZCxcbiAgKTogQ29tcGxldGVIYW5kbGVyUmVzdWx0O1xufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLW5hbWVzcGFjZVxuZXhwb3J0IG5hbWVzcGFjZSBUeXBlIHtcbiAgZXhwb3J0IHR5cGUgaW5mZXI8VFR5cGUsIFREZWZhdWx0ID0gVFR5cGU+ID0gVFR5cGUgZXh0ZW5kc1xuICAgIFR5cGVPclR5cGVIYW5kbGVyPGluZmVyIFZhbHVlPiA/IFZhbHVlIDogVERlZmF1bHQ7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCQyxHQUNELE9BQU8sTUFBZTtBQW9CdEIifQ==
+// denoCacheMetadata=9240526584462040201,5025332936928767283 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/a951c2a1162a432fc83cda09e7cd6f0dd125bb5c1c70c43848606295b60cc7eb.js b/vendor/gen/https/deno.land/a951c2a1162a432fc83cda09e7cd6f0dd125bb5c1c70c43848606295b60cc7eb.js
new file mode 100644
index 0000000..606364a
--- /dev/null
+++ b/vendor/gen/https/deno.land/a951c2a1162a432fc83cda09e7cd6f0dd125bb5c1c70c43848606295b60cc7eb.js
@@ -0,0 +1,4 @@
+export { default as engine } from "https://deno.land/x/vento@v1.13.0/mod.ts";
+export { default as autotrim } from "https://deno.land/x/vento@v1.13.0/plugins/auto_trim.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy92ZW50by50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIGVuZ2luZSB9IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC94L3ZlbnRvQHYxLjEzLjAvbW9kLnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGF1dG90cmltIH0gZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2F1dG9fdHJpbS50c1wiO1xuXG5leHBvcnQgdHlwZSB7XG4gIEVudmlyb25tZW50LFxuICBQbHVnaW4sXG59IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC94L3ZlbnRvQHYxLjEzLjAvc3JjL2Vudmlyb25tZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IExvYWRlciB9IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC94L3ZlbnRvQHYxLjEzLjAvc3JjL2xvYWRlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC94L3ZlbnRvQHYxLjEzLjAvc3JjL3Rva2VuaXplci50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsV0FBVyxNQUFNLFFBQVEsMkNBQTJDO0FBQzdFLFNBQVMsV0FBVyxRQUFRLFFBQVEseURBQXlEIn0=
+// denoCacheMetadata=11980659975130636616,647886473139693750 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ad2d49ec36cd9398ebd9d085925339ac4d2faf5397a1153871d0ec2b4bd96f96.js b/vendor/gen/https/deno.land/ad2d49ec36cd9398ebd9d085925339ac4d2faf5397a1153871d0ec2b4bd96f96.js
new file mode 100644
index 0000000..2a92c78
--- /dev/null
+++ b/vendor/gen/https/deno.land/ad2d49ec36cd9398ebd9d085925339ac4d2faf5397a1153871d0ec2b4bd96f96.js
@@ -0,0 +1,20 @@
+/**
+ * Parser interface
+ */ export let parse = (_html)=>{
+ console.error("Error: deno-dom: No parser registered");
+ Deno.exit(1);
+};
+export let parseFrag = (_html, _contextLocalName)=>{
+ console.error("Error: deno-dom: No parser registered");
+ Deno.exit(1);
+};
+const originalParse = parse;
+export function register(func, fragFunc) {
+ if (parse !== originalParse) {
+ return;
+ }
+ parse = func;
+ parseFrag = fragFunc;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2VyIGludGVyZmFjZVxuICovXG5leHBvcnQgdHlwZSBQYXJzZXIgPSAoaHRtbDogc3RyaW5nLCBjb250ZXh0TG9jYWxOYW1lPzogc3RyaW5nKSA9PiBzdHJpbmc7XG5leHBvcnQgbGV0IHBhcnNlOiBQYXJzZXIgPSAoX2h0bWwpID0+IHtcbiAgY29uc29sZS5lcnJvcihcIkVycm9yOiBkZW5vLWRvbTogTm8gcGFyc2VyIHJlZ2lzdGVyZWRcIik7XG4gIERlbm8uZXhpdCgxKTtcbn07XG5cbmV4cG9ydCBsZXQgcGFyc2VGcmFnOiBQYXJzZXIgPSAoX2h0bWwsIF9jb250ZXh0TG9jYWxOYW1lKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogZGVuby1kb206IE5vIHBhcnNlciByZWdpc3RlcmVkXCIpO1xuICBEZW5vLmV4aXQoMSk7XG59O1xuXG5jb25zdCBvcmlnaW5hbFBhcnNlID0gcGFyc2U7XG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoZnVuYzogUGFyc2VyLCBmcmFnRnVuYzogUGFyc2VyKSB7XG4gIGlmIChwYXJzZSAhPT0gb3JpZ2luYWxQYXJzZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcnNlID0gZnVuYztcbiAgcGFyc2VGcmFnID0gZnJhZ0Z1bmM7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0NBRUMsR0FFRCxPQUFPLElBQUksUUFBZ0IsQ0FBQztFQUMxQixRQUFRLEtBQUssQ0FBQztFQUNkLEtBQUssSUFBSSxDQUFDO0FBQ1osRUFBRTtBQUVGLE9BQU8sSUFBSSxZQUFvQixDQUFDLE9BQU87RUFDckMsUUFBUSxLQUFLLENBQUM7RUFDZCxLQUFLLElBQUksQ0FBQztBQUNaLEVBQUU7QUFFRixNQUFNLGdCQUFnQjtBQUN0QixPQUFPLFNBQVMsU0FBUyxJQUFZLEVBQUUsUUFBZ0I7RUFDckQsSUFBSSxVQUFVLGVBQWU7SUFDM0I7RUFDRjtFQUVBLFFBQVE7RUFDUixZQUFZO0FBQ2QifQ==
+// denoCacheMetadata=1981685386313081568,8867157598356623625 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ae96820eb6bd61609f33a5714be30ae1a34dfefabded9aa931a7931a6efb3224.js b/vendor/gen/https/deno.land/ae96820eb6bd61609f33a5714be30ae1a34dfefabded9aa931a7931a6efb3224.js
new file mode 100644
index 0000000..a1e796c
--- /dev/null
+++ b/vendor/gen/https/deno.land/ae96820eb6bd61609f33a5714be30ae1a34dfefabded9aa931a7931a6efb3224.js
@@ -0,0 +1,13 @@
+/** Return the current installed version */ export function getCurrentVersion(url = new URL(import.meta.resolve("../"))) {
+ const { pathname } = url;
+ return pathname.match(/@([^/]+)/)?.[1] ?? `local (${pathname})`;
+}
+/** Return the Lume generator value (for <meta>, Feed, etc) */ export function getGenerator() {
+ const version = getCurrentVersion();
+ if (version.startsWith("local")) {
+ return "Lume";
+ }
+ return `Lume ${version}`;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9sdW1lX3ZlcnNpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJldHVybiB0aGUgY3VycmVudCBpbnN0YWxsZWQgdmVyc2lvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRWZXJzaW9uKFxuICB1cmwgPSBuZXcgVVJMKGltcG9ydC5tZXRhLnJlc29sdmUoXCIuLi9cIikpLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgeyBwYXRobmFtZSB9ID0gdXJsO1xuICByZXR1cm4gcGF0aG5hbWUubWF0Y2goL0AoW14vXSspLyk/LlsxXSA/PyBgbG9jYWwgKCR7cGF0aG5hbWV9KWA7XG59XG5cbi8qKiBSZXR1cm4gdGhlIEx1bWUgZ2VuZXJhdG9yIHZhbHVlIChmb3IgPG1ldGE+LCBGZWVkLCBldGMpICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VuZXJhdG9yKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Q3VycmVudFZlcnNpb24oKTtcblxuICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKFwibG9jYWxcIikpIHtcbiAgICByZXR1cm4gXCJMdW1lXCI7XG4gIH1cblxuICByZXR1cm4gYEx1bWUgJHt2ZXJzaW9ufWA7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDLEdBQ3pDLE9BQU8sU0FBUyxrQkFDZCxNQUFNLElBQUksSUFBSSxZQUFZLE9BQU8sQ0FBQyxPQUFPO0VBRXpDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRztFQUNyQixPQUFPLFNBQVMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakU7QUFFQSw0REFBNEQsR0FDNUQsT0FBTyxTQUFTO0VBQ2QsTUFBTSxVQUFVO0VBRWhCLElBQUksUUFBUSxVQUFVLENBQUMsVUFBVTtJQUMvQixPQUFPO0VBQ1Q7RUFFQSxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVM7QUFDMUIifQ==
+// denoCacheMetadata=1976951836821188705,6391497537095662571 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b04ac5a483d0425a66ef8f823cec21e6dd5d728e03a56b827c00577a683d9141.js b/vendor/gen/https/deno.land/b04ac5a483d0425a66ef8f823cec21e6dd5d728e03a56b827c00577a683d9141.js
new file mode 100644
index 0000000..4972ef5
--- /dev/null
+++ b/vendor/gen/https/deno.land/b04ac5a483d0425a66ef8f823cec21e6dd5d728e03a56b827c00577a683d9141.js
@@ -0,0 +1,1057 @@
+var _computedKey, _computedKey1, _computedKey2;
+import { CTOR_KEY } from "../constructor-lock.ts";
+import { fragmentNodesFromString } from "../deserialize.ts";
+import { Node, nodesAndTextNodes, NodeType } from "./node.ts";
+import { NodeList, nodeListMutatorSym } from "./node-list.ts";
+import { getDatasetHtmlAttrName, getDatasetJavascriptName, getElementsByClassName, getOuterOrInnerHtml, insertBeforeAfter, lowerCaseCharRe, upperCaseCharRe } from "./utils.ts";
+import UtilTypes from "./utils-types.ts";
+import { getLowerCase, getUpperCase } from "./string-cache.ts";
+_computedKey = Symbol.iterator;
+export class DOMTokenList {
+ // Minimum number of classnames/tokens in order to switch from
+ // an array-backed to a set-backed list
+ static #DOM_TOKEN_LIST_MIN_SET_SIZE = 32;
+ #_value = "";
+ get #value() {
+ return this.#_value;
+ }
+ set #value(value) {
+ this.#_value = value;
+ this.#onChange(value);
+ }
+ #set = [];
+ #onChange;
+ constructor(onChange, key){
+ if (key !== CTOR_KEY) {
+ throw new TypeError("Illegal constructor");
+ }
+ this.#onChange = onChange;
+ }
+ static #invalidToken(token) {
+ return token === "" || /[\t\n\f\r ]/.test(token);
+ }
+ #setIndices() {
+ const classes = Array.from(this.#set);
+ for(let i = 0; i < classes.length; i++){
+ this[i] = classes[i];
+ }
+ }
+ set value(input) {
+ this.#value = input;
+ this.#set = input.trim().split(/[\t\n\f\r\s]+/g).filter(Boolean);
+ if (this.#set.length > DOMTokenList.#DOM_TOKEN_LIST_MIN_SET_SIZE) {
+ this.#set = new Set(this.#set);
+ } else {
+ const deduplicatedSet = [];
+ for (const element of this.#set){
+ if (!deduplicatedSet.includes(element)) {
+ deduplicatedSet.push(element);
+ }
+ }
+ this.#set = deduplicatedSet;
+ }
+ this.#setIndices();
+ }
+ get value() {
+ return this.#_value;
+ }
+ get length() {
+ if (this.#set.constructor === Array) {
+ return this.#set.length;
+ } else {
+ return this.#set.size;
+ }
+ }
+ *entries() {
+ const array = Array.from(this.#set);
+ for(let i = 0; i < array.length; i++){
+ yield [
+ i,
+ array[i]
+ ];
+ }
+ }
+ *values() {
+ yield* this.#set.values();
+ }
+ *keys() {
+ const length = this.length;
+ for(let i = 0; i < length; i++){
+ yield i;
+ }
+ }
+ *[_computedKey]() {
+ yield* this.#set.values();
+ }
+ item(index) {
+ index = Number(index);
+ if (Number.isNaN(index) || index === Infinity) index = 0;
+ return this[Math.trunc(index) % 2 ** 32] ?? null;
+ }
+ contains(element) {
+ if (this.#set.constructor === Array) {
+ return this.#set.includes(element);
+ } else {
+ return this.#set.has(element);
+ }
+ }
+ #arrayAdd(element) {
+ const array = this.#set;
+ if (!array.includes(element)) {
+ this[array.length] = element;
+ array.push(element);
+ }
+ }
+ #setAdd(element) {
+ const set = this.#set;
+ const { size } = set;
+ set.add(element);
+ if (size < set.size) {
+ this[size] = element;
+ }
+ }
+ add(...elements) {
+ const method = (this.#set.constructor === Array ? this.#arrayAdd : this.#setAdd).bind(this);
+ for (const element of elements){
+ if (DOMTokenList.#invalidToken(element)) {
+ throw new DOMException("Failed to execute 'add' on 'DOMTokenList': The token provided must not be empty.");
+ }
+ method(element);
+ }
+ this.#updateClassString();
+ }
+ #arrayRemove(element) {
+ const array = this.#set;
+ const index = array.indexOf(element);
+ if (index >= 0) {
+ array.splice(index, 1);
+ }
+ }
+ #setRemove(element) {
+ this.#set.delete(element);
+ }
+ remove(...elements) {
+ const method = (this.#set.constructor === Array ? this.#arrayRemove : this.#setRemove).bind(this);
+ const size = this.length;
+ for (const element of elements){
+ if (DOMTokenList.#invalidToken(element)) {
+ throw new DOMException("Failed to execute 'remove' on 'DOMTokenList': The token provided must not be empty.");
+ }
+ method(element);
+ }
+ const newSize = this.length;
+ if (size !== newSize) {
+ for(let i = newSize; i < size; i++){
+ delete this[i];
+ }
+ this.#setIndices();
+ }
+ this.#updateClassString();
+ }
+ replace(oldToken, newToken) {
+ const isArrayBacked = this.#set.constructor === Array;
+ const removeMethod = (isArrayBacked ? this.#arrayRemove : this.#setRemove).bind(this);
+ const addMethod = (isArrayBacked ? this.#arrayAdd : this.#setAdd).bind(this);
+ if ([
+ oldToken,
+ newToken
+ ].some((v)=>DOMTokenList.#invalidToken(v))) {
+ throw new DOMException("Failed to execute 'replace' on 'DOMTokenList': The token provided must not be empty.");
+ }
+ if (!this.contains(oldToken)) {
+ return false;
+ }
+ if (this.contains(newToken)) {
+ this.remove(oldToken);
+ } else {
+ removeMethod(oldToken);
+ addMethod(newToken);
+ this.#setIndices();
+ this.#updateClassString();
+ }
+ return true;
+ }
+ supports() {
+ throw new Error("Not implemented");
+ }
+ toggle(element, force) {
+ if (force !== undefined) {
+ const operation = force ? "add" : "remove";
+ this[operation](element);
+ return false;
+ } else {
+ const contains = this.contains(element);
+ const operation = contains ? "remove" : "add";
+ this[operation](element);
+ return !contains;
+ }
+ }
+ forEach(callback) {
+ for (const [i, value] of this.entries()){
+ callback(value, i, this);
+ }
+ }
+ #updateClassString() {
+ this.#value = Array.from(this.#set).join(" ");
+ if (this.#set.constructor === Array && this.#set.length > DOMTokenList.#DOM_TOKEN_LIST_MIN_SET_SIZE) {
+ this.#set = new Set(this.#set);
+ }
+ }
+}
+const initializeClassListSym = Symbol("initializeClassListSym");
+const domTokenListCurrentElementSym = Symbol("domTokenListCurrentElementSym");
+_computedKey1 = Symbol.iterator;
+/**
+ * The purpose of this uninitialized DOMTokenList is to consume less memory
+ * than the actual DOMTokenList class. By measurements of Deno v2.1.0 (V8 13.0.245.12-rusty)
+ * this class consumes 48 bytes while the smallest DOMTokenList consumes 488
+ * bytes
+ */ class UninitializedDOMTokenList {
+ // This will always be populated with the current element
+ // being queried
+ [domTokenListCurrentElementSym];
+ constructor(currentElement){
+ this[domTokenListCurrentElementSym] = currentElement;
+ }
+ #getInitialized() {
+ const currentClassList = this[domTokenListCurrentElementSym].classList;
+ if (currentClassList === this) {
+ return null;
+ }
+ return currentClassList;
+ }
+ set value(input) {
+ this[domTokenListCurrentElementSym][initializeClassListSym]();
+ this[domTokenListCurrentElementSym].classList.value = String(input);
+ }
+ get value() {
+ return this.#getInitialized()?.value ?? "";
+ }
+ get length() {
+ return this.#getInitialized()?.length ?? 0;
+ }
+ *entries() {
+ const initialized = this.#getInitialized();
+ if (initialized) {
+ yield* initialized.entries();
+ }
+ }
+ *values() {
+ const initialized = this.#getInitialized();
+ if (initialized) {
+ yield* initialized.values();
+ }
+ }
+ *keys() {
+ const initialized = this.#getInitialized();
+ if (initialized) {
+ yield* initialized.keys();
+ }
+ }
+ *[_computedKey1]() {
+ yield* this.values();
+ }
+ item(index) {
+ return this.#getInitialized()?.item(index) ?? null;
+ }
+ contains(element) {
+ return this.#getInitialized()?.contains(element) ?? false;
+ }
+ add(...elements) {
+ this[domTokenListCurrentElementSym][initializeClassListSym]();
+ this[domTokenListCurrentElementSym].classList.add(...elements);
+ }
+ remove(...elements) {
+ this.#getInitialized()?.remove(...elements);
+ }
+ replace(oldToken, newToken) {
+ return this.#getInitialized()?.replace(oldToken, newToken) ?? false;
+ }
+ supports() {
+ throw new Error("Not implemented");
+ }
+ toggle(element, force) {
+ if (force === false) {
+ return this.#getInitialized()?.toggle(element, force) ?? false;
+ }
+ this[domTokenListCurrentElementSym][initializeClassListSym]();
+ this[domTokenListCurrentElementSym].classList.add(element);
+ return true;
+ }
+ forEach(callback) {
+ this.#getInitialized()?.forEach(callback);
+ }
+}
+const setNamedNodeMapOwnerElementSym = Symbol("setNamedNodeMapOwnerElementSym");
+const setAttrValueSym = Symbol("setAttrValueSym");
+export class Attr extends Node {
+ #namedNodeMap = null;
+ #name = "";
+ #value = "";
+ #ownerElement = null;
+ constructor(map, name, value, key){
+ if (key !== CTOR_KEY) {
+ throw new TypeError("Illegal constructor");
+ }
+ super(name, NodeType.ATTRIBUTE_NODE, null, CTOR_KEY);
+ this.#name = name;
+ this.#value = value;
+ this.#namedNodeMap = map;
+ }
+ [setNamedNodeMapOwnerElementSym](ownerElement) {
+ this.#ownerElement = ownerElement;
+ this.#namedNodeMap = ownerElement?.attributes ?? null;
+ if (ownerElement) {
+ this._setOwnerDocument(ownerElement.ownerDocument);
+ }
+ }
+ [setAttrValueSym](value) {
+ this.#value = value;
+ }
+ _shallowClone() {
+ const newAttr = new Attr(null, this.#name, this.#value, CTOR_KEY);
+ newAttr._setOwnerDocument(this.ownerDocument);
+ return newAttr;
+ }
+ cloneNode() {
+ return super.cloneNode();
+ }
+ appendChild() {
+ throw new DOMException("Cannot add children to an Attribute");
+ }
+ replaceChild() {
+ throw new DOMException("Cannot add children to an Attribute");
+ }
+ insertBefore() {
+ throw new DOMException("Cannot add children to an Attribute");
+ }
+ removeChild() {
+ throw new DOMException("The node to be removed is not a child of this node");
+ }
+ get name() {
+ return this.#name;
+ }
+ get localName() {
+ // TODO: When we make namespaces a thing this needs
+ // to be updated
+ return this.#name;
+ }
+ get value() {
+ return this.#value;
+ }
+ set value(value) {
+ this.#value = String(value);
+ if (this.#namedNodeMap) {
+ this.#namedNodeMap[setNamedNodeMapValueSym](this.#name, this.#value, true);
+ }
+ }
+ get ownerElement() {
+ return this.#ownerElement ?? null;
+ }
+ get specified() {
+ return true;
+ }
+ // TODO
+ get prefix() {
+ return null;
+ }
+}
+const setNamedNodeMapValueSym = Symbol("setNamedNodeMapValueSym");
+const getNamedNodeMapValueSym = Symbol("getNamedNodeMapValueSym");
+const getNamedNodeMapAttrNamesSym = Symbol("getNamedNodeMapAttrNamesSym");
+const getNamedNodeMapAttrNodeSym = Symbol("getNamedNodeMapAttrNodeSym");
+const removeNamedNodeMapAttrSym = Symbol("removeNamedNodeMapAttrSym");
+_computedKey2 = Symbol.iterator;
+export class NamedNodeMap {
+ static #indexedAttrAccess = function(map, index) {
+ if (index + 1 > this.length) {
+ return undefined;
+ }
+ const attribute = Object.keys(map).filter((attribute)=>map[attribute] !== undefined)[index]?.slice(1); // Remove "a" for safeAttrName
+ return this[getNamedNodeMapAttrNodeSym](attribute);
+ };
+ #onAttrNodeChange;
+ constructor(ownerElement, onAttrNodeChange, key){
+ if (key !== CTOR_KEY) {
+ throw new TypeError("Illegal constructor.");
+ }
+ this.#ownerElement = ownerElement;
+ this.#onAttrNodeChange = onAttrNodeChange;
+ // Retain ordering of any preceding id or class attributes
+ for (const attr of ownerElement.getAttributeNames()){
+ this[setNamedNodeMapValueSym](attr, ownerElement.getAttribute(attr));
+ }
+ }
+ #attrNodeCache = {};
+ #map = {};
+ #length = 0;
+ #capacity = 0;
+ #ownerElement = null;
+ [getNamedNodeMapAttrNodeSym](attribute) {
+ const safeAttrName = "a" + attribute;
+ let attrNode = this.#attrNodeCache[safeAttrName];
+ if (!attrNode) {
+ attrNode = this.#attrNodeCache[safeAttrName] = new Attr(this, attribute, this.#map[safeAttrName], CTOR_KEY);
+ attrNode[setNamedNodeMapOwnerElementSym](this.#ownerElement);
+ }
+ return attrNode;
+ }
+ [getNamedNodeMapAttrNamesSym]() {
+ const names = [];
+ for (const [name, value] of Object.entries(this.#map)){
+ if (value !== undefined) {
+ names.push(name.slice(1)); // Remove "a" for safeAttrName
+ }
+ }
+ return names;
+ }
+ [getNamedNodeMapValueSym](attribute) {
+ const safeAttrName = "a" + attribute;
+ return this.#map[safeAttrName];
+ }
+ [setNamedNodeMapValueSym](attribute, value, bubble = false) {
+ const safeAttrName = "a" + attribute;
+ if (this.#map[safeAttrName] === undefined) {
+ this.#length++;
+ if (this.#length > this.#capacity) {
+ this.#capacity = this.#length;
+ const index = this.#capacity - 1;
+ Object.defineProperty(this, String(this.#capacity - 1), {
+ get: NamedNodeMap.#indexedAttrAccess.bind(this, this.#map, index)
+ });
+ }
+ } else if (this.#attrNodeCache[safeAttrName]) {
+ this.#attrNodeCache[safeAttrName][setAttrValueSym](value);
+ }
+ this.#map[safeAttrName] = value;
+ if (bubble) {
+ this.#onAttrNodeChange(attribute, value);
+ }
+ }
+ /**
+ * Called when an attribute is removed from
+ * an element
+ */ [removeNamedNodeMapAttrSym](attribute) {
+ const safeAttrName = "a" + attribute;
+ if (this.#map[safeAttrName] !== undefined) {
+ this.#length--;
+ this.#map[safeAttrName] = undefined;
+ this.#onAttrNodeChange(attribute, null);
+ const attrNode = this.#attrNodeCache[safeAttrName];
+ if (attrNode) {
+ attrNode[setNamedNodeMapOwnerElementSym](null);
+ this.#attrNodeCache[safeAttrName] = undefined;
+ }
+ }
+ }
+ *[_computedKey2]() {
+ for(let i = 0; i < this.length; i++){
+ yield this[i];
+ }
+ }
+ get length() {
+ return this.#length;
+ }
+ // FIXME: This method should accept anything and basically
+ // coerce any non numbers (and Infinity/-Infinity) into 0
+ item(index) {
+ if (index >= this.#length) {
+ return null;
+ }
+ return this[index];
+ }
+ getNamedItem(attribute) {
+ const safeAttrName = "a" + attribute;
+ if (this.#map[safeAttrName] !== undefined) {
+ return this[getNamedNodeMapAttrNodeSym](attribute);
+ }
+ return null;
+ }
+ setNamedItem(attrNode) {
+ if (attrNode.ownerElement) {
+ throw new DOMException("Attribute already in use");
+ }
+ const safeAttrName = "a" + attrNode.name;
+ const previousAttr = this.#attrNodeCache[safeAttrName];
+ if (previousAttr) {
+ previousAttr[setNamedNodeMapOwnerElementSym](null);
+ this.#map[safeAttrName] = undefined;
+ }
+ attrNode[setNamedNodeMapOwnerElementSym](this.#ownerElement);
+ this.#attrNodeCache[safeAttrName] = attrNode;
+ this[setNamedNodeMapValueSym](attrNode.name, attrNode.value, true);
+ }
+ removeNamedItem(attribute) {
+ const safeAttrName = "a" + attribute;
+ if (this.#map[safeAttrName] !== undefined) {
+ const attrNode = this[getNamedNodeMapAttrNodeSym](attribute);
+ this[removeNamedNodeMapAttrSym](attribute);
+ return attrNode;
+ }
+ throw new DOMException("Node was not found");
+ }
+}
+const XML_NAMESTART_CHAR_RE_SRC = ":A-Za-z_" + String.raw`\u{C0}-\u{D6}\u{D8}-\u{F6}\u{F8}-\u{2FF}\u{370}-\u{37D}` + String.raw`\u{37F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}` + String.raw`\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}`;
+const XML_NAME_CHAR_RE_SRC = XML_NAMESTART_CHAR_RE_SRC + String.raw`\u{B7}\u{0300}-\u{036F}\u{203F}-\u{2040}0-9.-`;
+const xmlNamestartCharRe = new RegExp(`[${XML_NAMESTART_CHAR_RE_SRC}]`, "u");
+const xmlNameCharRe = new RegExp(`[${XML_NAME_CHAR_RE_SRC}]`, "u");
+export class Element extends Node {
+ #namedNodeMap = null;
+ get attributes() {
+ if (!this.#namedNodeMap) {
+ this.#namedNodeMap = new NamedNodeMap(this, (attribute, value)=>{
+ const isRemoved = value === null;
+ if (value === null) {
+ value = "";
+ }
+ switch(attribute){
+ case "class":
+ {
+ if (isRemoved) {
+ this.#hasClassNameAttribute = -1;
+ } else if (this.#hasClassNameAttribute === -1) {
+ this.#hasClassNameAttribute = this.#hasIdAttribute + 1;
+ }
+ // This must happen after the attribute is marked removed
+ this.#currentClassName = value;
+ this.#classList.value = value;
+ break;
+ }
+ case "id":
+ {
+ if (isRemoved) {
+ this.#hasIdAttribute = -1;
+ } else if (this.#hasIdAttribute === -1) {
+ this.#hasIdAttribute = this.#hasClassNameAttribute + 1;
+ }
+ this.#currentId = value;
+ break;
+ }
+ }
+ }, CTOR_KEY);
+ }
+ return this.#namedNodeMap;
+ }
+ #datasetProxy = null;
+ #currentId = "";
+ #currentClassName = "";
+ #hasIdAttribute = -1;
+ #hasClassNameAttribute = -1;
+ // Only initialize a classList when we need one
+ #classListInstance = new UninitializedDOMTokenList(this);
+ get #classList() {
+ return this.#classListInstance;
+ }
+ [initializeClassListSym]() {
+ if (this.#classListInstance.constructor === DOMTokenList) {
+ return;
+ }
+ this.#classListInstance = new DOMTokenList((className)=>{
+ if (this.#currentClassName !== className) {
+ this.#currentClassName = className;
+ if (this.#hasClassNameAttribute === -1) {
+ this.#hasClassNameAttribute = this.#hasIdAttribute + 1;
+ }
+ if (this.#namedNodeMap && (this.hasAttribute("class") || className !== "")) {
+ this.attributes[setNamedNodeMapValueSym]("class", className);
+ }
+ }
+ }, CTOR_KEY);
+ }
+ constructor(tagName, parentNode, attributes, key){
+ super(tagName, NodeType.ELEMENT_NODE, parentNode, key);
+ for (const attr of attributes){
+ this.setAttribute(attr[0], attr[1]);
+ }
+ this.nodeName = getUpperCase(tagName);
+ }
+ get tagName() {
+ return this.nodeName;
+ }
+ get localName() {
+ return getLowerCase(this.tagName);
+ }
+ _shallowClone() {
+ // FIXME: This attribute copying needs to also be fixed in other
+ // elements that override _shallowClone like <template>
+ const attributes = [];
+ for (const attribute of this.getAttributeNames()){
+ attributes.push([
+ attribute,
+ this.getAttribute(attribute)
+ ]);
+ }
+ return new Element(this.nodeName, null, attributes, CTOR_KEY);
+ }
+ get childElementCount() {
+ return this._getChildNodesMutator().elementsView().length;
+ }
+ get className() {
+ return this.#currentClassName;
+ }
+ set className(className) {
+ this.#classList.value = className;
+ }
+ get classList() {
+ return this.#classList;
+ }
+ get outerHTML() {
+ return getOuterOrInnerHtml(this, true);
+ }
+ set outerHTML(html) {
+ if (this.parentNode) {
+ const { parentElement, parentNode } = this;
+ let contextLocalName = parentElement?.localName;
+ switch(parentNode.nodeType){
+ case NodeType.DOCUMENT_NODE:
+ {
+ throw new DOMException("Modifications are not allowed for this document");
+ }
+ // setting outerHTML, step 4. Document Fragment
+ // ref: https://w3c.github.io/DOM-Parsing/#dom-element-outerhtml
+ case NodeType.DOCUMENT_FRAGMENT_NODE:
+ {
+ contextLocalName = "body";
+ // fall-through
+ }
+ default:
+ {
+ const { childNodes: newChildNodes } = fragmentNodesFromString(html, contextLocalName).childNodes[0];
+ const mutator = parentNode._getChildNodesMutator();
+ const insertionIndex = mutator.indexOf(this);
+ for(let i = newChildNodes.length - 1; i >= 0; i--){
+ const child = newChildNodes[i];
+ mutator.splice(insertionIndex, 0, child);
+ child._setParent(parentNode);
+ child._setOwnerDocument(parentNode.ownerDocument);
+ }
+ this.remove();
+ }
+ }
+ }
+ }
+ get innerHTML() {
+ return getOuterOrInnerHtml(this, false);
+ }
+ set innerHTML(html) {
+ // Remove all children
+ for (const child of this.childNodes){
+ child._setParent(null);
+ }
+ const mutator = this._getChildNodesMutator();
+ mutator.splice(0, this.childNodes.length);
+ // Parse HTML into new children
+ if (html.length) {
+ const parsed = fragmentNodesFromString(html, this.localName);
+ for (const child of parsed.childNodes[0].childNodes){
+ mutator.push(child);
+ }
+ for (const child of this.childNodes){
+ child._setParent(this);
+ child._setOwnerDocument(this.ownerDocument);
+ }
+ }
+ }
+ get innerText() {
+ return this.textContent;
+ }
+ set innerText(text) {
+ this.textContent = text;
+ }
+ get children() {
+ return this._getChildNodesMutator().elementsView();
+ }
+ get id() {
+ return this.#currentId || "";
+ }
+ set id(id) {
+ this.setAttribute("id", id);
+ }
+ get dataset() {
+ if (this.#datasetProxy) {
+ return this.#datasetProxy;
+ }
+ this.#datasetProxy = new Proxy({}, {
+ get: (_target, property, _receiver)=>{
+ if (typeof property === "string") {
+ const attributeName = getDatasetHtmlAttrName(property);
+ return this.getAttribute(attributeName) ?? undefined;
+ }
+ return undefined;
+ },
+ set: (_target, property, value, _receiver)=>{
+ if (typeof property === "string") {
+ let attributeName = "data-";
+ let prevChar = "";
+ for (const char of property){
+ // Step 1. https://html.spec.whatwg.org/multipage/dom.html#dom-domstringmap-setitem
+ if (prevChar === "-" && lowerCaseCharRe.test(char)) {
+ throw new DOMException("An invalid or illegal string was specified");
+ }
+ // Step 4. https://html.spec.whatwg.org/multipage/dom.html#dom-domstringmap-setitem
+ if (!xmlNameCharRe.test(char)) {
+ throw new DOMException("String contains an invalid character");
+ }
+ // Step 2. https://html.spec.whatwg.org/multipage/dom.html#dom-domstringmap-setitem
+ if (upperCaseCharRe.test(char)) {
+ attributeName += "-";
+ }
+ attributeName += char.toLowerCase();
+ prevChar = char;
+ }
+ this.setAttribute(attributeName, String(value));
+ }
+ return true;
+ },
+ deleteProperty: (_target, property)=>{
+ if (typeof property === "string") {
+ const attributeName = getDatasetHtmlAttrName(property);
+ this.removeAttribute(attributeName);
+ }
+ return true;
+ },
+ ownKeys: (_target)=>{
+ return this.getAttributeNames().flatMap((attributeName)=>{
+ if (attributeName.startsWith?.("data-")) {
+ return [
+ getDatasetJavascriptName(attributeName)
+ ];
+ } else {
+ return [];
+ }
+ });
+ },
+ getOwnPropertyDescriptor: (_target, property)=>{
+ if (typeof property === "string") {
+ const attributeName = getDatasetHtmlAttrName(property);
+ if (this.hasAttribute(attributeName)) {
+ return {
+ writable: true,
+ enumerable: true,
+ configurable: true
+ };
+ }
+ }
+ return undefined;
+ },
+ has: (_target, property)=>{
+ if (typeof property === "string") {
+ const attributeName = getDatasetHtmlAttrName(property);
+ return this.hasAttribute(attributeName);
+ }
+ return false;
+ }
+ });
+ return this.#datasetProxy;
+ }
+ getAttributeNames() {
+ if (!this.#namedNodeMap) {
+ const attributes = [];
+ // We preserve the order of the "id" and "class" attributes when
+ // returning the list of names with an uninitialized NamedNodeMap
+ const startWithClassAttr = Number(this.#hasIdAttribute > this.#hasClassNameAttribute);
+ for(let i = 0; i < 2; i++){
+ const attributeIdx = (i + startWithClassAttr) % 2;
+ switch(attributeIdx){
+ // "id" attribute
+ case 0:
+ {
+ ~this.#hasIdAttribute && attributes.push("id");
+ break;
+ }
+ // "class" attribute
+ case 1:
+ {
+ ~this.#hasClassNameAttribute && attributes.push("class");
+ break;
+ }
+ }
+ }
+ return attributes;
+ }
+ return this.attributes[getNamedNodeMapAttrNamesSym]();
+ }
+ getAttribute(rawName) {
+ const name = getLowerCase(String(rawName));
+ switch(name){
+ case "id":
+ {
+ if (~this.#hasIdAttribute) {
+ return this.#currentId;
+ } else {
+ return null;
+ }
+ }
+ case "class":
+ {
+ if (~this.#hasClassNameAttribute) {
+ return this.#currentClassName;
+ } else {
+ return null;
+ }
+ }
+ }
+ if (!this.#namedNodeMap) {
+ return null;
+ }
+ return this.attributes[getNamedNodeMapValueSym](name) ?? null;
+ }
+ setAttribute(rawName, value) {
+ const name = getLowerCase(String(rawName));
+ const strValue = String(value);
+ let isNormalAttribute = false;
+ switch(name){
+ case "id":
+ {
+ this.#currentId = strValue;
+ if (this.#hasIdAttribute === -1) {
+ this.#hasIdAttribute = this.#hasClassNameAttribute + 1;
+ }
+ break;
+ }
+ case "class":
+ {
+ this.#classList.value = strValue;
+ if (this.#hasClassNameAttribute === -1) {
+ this.#hasClassNameAttribute = this.#hasIdAttribute + 1;
+ }
+ break;
+ }
+ default:
+ {
+ isNormalAttribute = true;
+ }
+ }
+ if (this.#namedNodeMap || isNormalAttribute) {
+ this.attributes[setNamedNodeMapValueSym](name, strValue);
+ }
+ }
+ removeAttribute(rawName) {
+ const name = getLowerCase(String(rawName));
+ switch(name){
+ case "id":
+ {
+ this.#currentId = "";
+ this.#hasIdAttribute = -1;
+ break;
+ }
+ case "class":
+ {
+ this.#classList.value = "";
+ this.#hasClassNameAttribute = -1;
+ break;
+ }
+ }
+ if (!this.#namedNodeMap) {
+ return;
+ }
+ this.attributes[removeNamedNodeMapAttrSym](name);
+ }
+ toggleAttribute(rawName, force) {
+ const name = getLowerCase(String(rawName));
+ if (this.hasAttribute(name)) {
+ if (force === undefined || force === false) {
+ this.removeAttribute(name);
+ return false;
+ }
+ return true;
+ }
+ if (force === undefined || force === true) {
+ this.setAttribute(name, "");
+ return true;
+ }
+ return false;
+ }
+ hasAttribute(rawName) {
+ const name = getLowerCase(String(rawName));
+ switch(name){
+ case "id":
+ {
+ return Boolean(~this.#hasIdAttribute);
+ }
+ case "class":
+ {
+ return Boolean(~this.#hasClassNameAttribute);
+ }
+ }
+ if (!this.#namedNodeMap) {
+ return false;
+ }
+ return this.attributes[getNamedNodeMapValueSym](name) !== undefined;
+ }
+ hasAttributeNS(_namespace, rawName) {
+ const name = getLowerCase(String(rawName));
+ switch(name){
+ case "id":
+ {
+ return Boolean(~this.#hasIdAttribute);
+ }
+ case "class":
+ {
+ return Boolean(~this.#hasClassNameAttribute);
+ }
+ }
+ if (!this.#namedNodeMap) {
+ return false;
+ }
+ // TODO: Use namespace
+ return this.attributes[getNamedNodeMapValueSym](name) !== undefined;
+ }
+ replaceWith(...nodes) {
+ this._replaceWith(...nodes);
+ }
+ remove() {
+ this._remove();
+ }
+ append(...nodes) {
+ const mutator = this._getChildNodesMutator();
+ mutator.push(...nodesAndTextNodes(nodes, this));
+ }
+ prepend(...nodes) {
+ const mutator = this._getChildNodesMutator();
+ mutator.splice(0, 0, ...nodesAndTextNodes(nodes, this));
+ }
+ before(...nodes) {
+ if (this.parentNode) {
+ insertBeforeAfter(this, nodes, true);
+ }
+ }
+ after(...nodes) {
+ if (this.parentNode) {
+ insertBeforeAfter(this, nodes, false);
+ }
+ }
+ get firstElementChild() {
+ const elements = this._getChildNodesMutator().elementsView();
+ return elements[0] ?? null;
+ }
+ get lastElementChild() {
+ const elements = this._getChildNodesMutator().elementsView();
+ return elements[elements.length - 1] ?? null;
+ }
+ get nextElementSibling() {
+ const parent = this.parentNode;
+ if (!parent) {
+ return null;
+ }
+ const mutator = parent._getChildNodesMutator();
+ const index = mutator.indexOfElementsView(this);
+ const elements = mutator.elementsView();
+ return elements[index + 1] ?? null;
+ }
+ get previousElementSibling() {
+ const parent = this.parentNode;
+ if (!parent) {
+ return null;
+ }
+ const mutator = parent._getChildNodesMutator();
+ const index = mutator.indexOfElementsView(this);
+ const elements = mutator.elementsView();
+ return elements[index - 1] ?? null;
+ }
+ querySelector(selectors) {
+ if (!this.ownerDocument) {
+ throw new Error("Element must have an owner document");
+ }
+ return this.ownerDocument._nwapi.first(selectors, this);
+ }
+ querySelectorAll(selectors) {
+ if (!this.ownerDocument) {
+ throw new Error("Element must have an owner document");
+ }
+ const nodeList = new NodeList();
+ const mutator = nodeList[nodeListMutatorSym]();
+ for (const match of this.ownerDocument._nwapi.select(selectors, this)){
+ mutator.push(match);
+ }
+ return nodeList;
+ }
+ matches(selectorString) {
+ return this.ownerDocument._nwapi.match(selectorString, this);
+ }
+ closest(selectorString) {
+ const { match } = this.ownerDocument._nwapi; // See note below
+ // deno-lint-ignore no-this-alias
+ let el = this;
+ do {
+ // Note: Not using `el.matches(selectorString)` because on a browser if you override
+ // `matches`, you *don't* see it being used by `closest`.
+ if (match(selectorString, el)) {
+ return el;
+ }
+ el = el.parentElement;
+ }while (el !== null)
+ return null;
+ }
+ // TODO: DRY!!!
+ getElementById(id) {
+ if (!this._hasInitializedChildNodes()) {
+ return null;
+ }
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ if (child.id === id) {
+ return child;
+ }
+ const search = child.getElementById(id);
+ if (search) {
+ return search;
+ }
+ }
+ }
+ return null;
+ }
+ getElementsByTagName(tagName) {
+ if (!this._hasInitializedChildNodes()) {
+ return [];
+ }
+ const fixCaseTagName = getUpperCase(tagName);
+ if (fixCaseTagName === "*") {
+ return this._getElementsByTagNameWildcard([]);
+ } else {
+ return this._getElementsByTagName(fixCaseTagName, []);
+ }
+ }
+ _getElementsByTagNameWildcard(search) {
+ if (!this._hasInitializedChildNodes()) {
+ return search;
+ }
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ search.push(child);
+ child._getElementsByTagNameWildcard(search);
+ }
+ }
+ return search;
+ }
+ _getElementsByTagName(tagName, search) {
+ if (!this._hasInitializedChildNodes()) {
+ return search;
+ }
+ for (const child of this.childNodes){
+ if (child.nodeType === NodeType.ELEMENT_NODE) {
+ if (child.tagName === tagName) {
+ search.push(child);
+ }
+ child._getElementsByTagName(tagName, search);
+ }
+ }
+ return search;
+ }
+ getElementsByClassName(className) {
+ if (!this._hasInitializedChildNodes()) {
+ return [];
+ }
+ return getElementsByClassName(this, className.trim().split(/\s+/), []);
+ }
+ getElementsByTagNameNS(_namespace, localName) {
+ if (!this._hasInitializedChildNodes()) {
+ return [];
+ }
+ // TODO: Use namespace
+ return this.getElementsByTagName(localName);
+ }
+}
+UtilTypes.Element = Element;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL2VsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1RPUl9LRVkgfSBmcm9tIFwiLi4vY29uc3RydWN0b3ItbG9jay50c1wiO1xuaW1wb3J0IHsgZnJhZ21lbnROb2Rlc0Zyb21TdHJpbmcgfSBmcm9tIFwiLi4vZGVzZXJpYWxpemUudHNcIjtcbmltcG9ydCB7IE5vZGUsIG5vZGVzQW5kVGV4dE5vZGVzLCBOb2RlVHlwZSB9IGZyb20gXCIuL25vZGUudHNcIjtcbmltcG9ydCB7IE5vZGVMaXN0LCBub2RlTGlzdE11dGF0b3JTeW0gfSBmcm9tIFwiLi9ub2RlLWxpc3QudHNcIjtcbmltcG9ydCB7IEhUTUxDb2xsZWN0aW9uIH0gZnJvbSBcIi4vaHRtbC1jb2xsZWN0aW9uLnRzXCI7XG5pbXBvcnQge1xuICBnZXREYXRhc2V0SHRtbEF0dHJOYW1lLFxuICBnZXREYXRhc2V0SmF2YXNjcmlwdE5hbWUsXG4gIGdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG4gIGdldE91dGVyT3JJbm5lckh0bWwsXG4gIGluc2VydEJlZm9yZUFmdGVyLFxuICBsb3dlckNhc2VDaGFyUmUsXG4gIHVwcGVyQ2FzZUNoYXJSZSxcbn0gZnJvbSBcIi4vdXRpbHMudHNcIjtcbmltcG9ydCBVdGlsVHlwZXMgZnJvbSBcIi4vdXRpbHMtdHlwZXMudHNcIjtcbmltcG9ydCB7IGdldExvd2VyQ2FzZSwgZ2V0VXBwZXJDYXNlIH0gZnJvbSBcIi4vc3RyaW5nLWNhY2hlLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRE9NVG9rZW5MaXN0IHtcbiAgW2luZGV4OiBudW1iZXJdOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBET01Ub2tlbkxpc3Qge1xuICAvLyBNaW5pbXVtIG51bWJlciBvZiBjbGFzc25hbWVzL3Rva2VucyBpbiBvcmRlciB0byBzd2l0Y2ggZnJvbVxuICAvLyBhbiBhcnJheS1iYWNrZWQgdG8gYSBzZXQtYmFja2VkIGxpc3RcbiAgc3RhdGljICNET01fVE9LRU5fTElTVF9NSU5fU0VUX1NJWkUgPSAzMiBhcyBjb25zdDtcblxuICAjX3ZhbHVlID0gXCJcIjtcbiAgZ2V0ICN2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG4gIHNldCAjdmFsdWUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy4jX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy4jb25DaGFuZ2UodmFsdWUpO1xuICB9XG4gICNzZXQ6IHN0cmluZ1tdIHwgU2V0PHN0cmluZz4gPSBbXTtcbiAgI29uQ2hhbmdlOiAoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb25DaGFuZ2U6IChjbGFzc05hbWU6IHN0cmluZykgPT4gdm9pZCxcbiAgICBrZXk6IHR5cGVvZiBDVE9SX0tFWSxcbiAgKSB7XG4gICAgaWYgKGtleSAhPT0gQ1RPUl9LRVkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xuICAgIH1cbiAgICB0aGlzLiNvbkNoYW5nZSA9IG9uQ2hhbmdlO1xuICB9XG5cbiAgc3RhdGljICNpbnZhbGlkVG9rZW4oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgKSB7XG4gICAgcmV0dXJuIHRva2VuID09PSBcIlwiIHx8IC9bXFx0XFxuXFxmXFxyIF0vLnRlc3QodG9rZW4pO1xuICB9XG5cbiAgI3NldEluZGljZXMoKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IEFycmF5LmZyb20odGhpcy4jc2V0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSBjbGFzc2VzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHNldCB2YWx1ZShcbiAgICBpbnB1dDogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLiN2YWx1ZSA9IGlucHV0O1xuICAgIHRoaXMuI3NldCA9IGlucHV0XG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoL1tcXHRcXG5cXGZcXHJcXHNdKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmICh0aGlzLiNzZXQubGVuZ3RoID4gRE9NVG9rZW5MaXN0LiNET01fVE9LRU5fTElTVF9NSU5fU0VUX1NJWkUpIHtcbiAgICAgIHRoaXMuI3NldCA9IG5ldyBTZXQodGhpcy4jc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVkdXBsaWNhdGVkU2V0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuI3NldCkge1xuICAgICAgICBpZiAoIWRlZHVwbGljYXRlZFNldC5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICAgIGRlZHVwbGljYXRlZFNldC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiNzZXQgPSBkZWR1cGxpY2F0ZWRTZXQ7XG4gICAgfVxuXG4gICAgdGhpcy4jc2V0SW5kaWNlcygpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy4jc2V0LmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgcmV0dXJuIHRoaXMuI3NldC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAodGhpcy4jc2V0IGFzIFNldDxzdHJpbmc+KS5zaXplO1xuICAgIH1cbiAgfVxuXG4gICplbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W251bWJlciwgc3RyaW5nXT4ge1xuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh0aGlzLiNzZXQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHlpZWxkIFtpLCBhcnJheVtpXV07XG4gICAgfVxuICB9XG5cbiAgKnZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICAgIHlpZWxkKiB0aGlzLiNzZXQudmFsdWVzKCk7XG4gIH1cblxuICAqa2V5cygpOiBJdGVyYWJsZUl0ZXJhdG9yPG51bWJlcj4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHlpZWxkIGk7XG4gICAgfVxuICB9XG5cbiAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gICAgeWllbGQqIHRoaXMuI3NldC52YWx1ZXMoKTtcbiAgfVxuXG4gIGl0ZW0oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBpbmRleCA9IE51bWJlcihpbmRleCk7XG4gICAgaWYgKE51bWJlci5pc05hTihpbmRleCkgfHwgaW5kZXggPT09IEluZmluaXR5KSBpbmRleCA9IDA7XG4gICAgcmV0dXJuIHRoaXNbTWF0aC50cnVuYyhpbmRleCkgJSAyICoqIDMyXSA/PyBudWxsO1xuICB9XG5cbiAgY29udGFpbnMoXG4gICAgZWxlbWVudDogc3RyaW5nLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy4jc2V0LmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgcmV0dXJuIHRoaXMuI3NldC5pbmNsdWRlcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICh0aGlzLiNzZXQgYXMgU2V0PHN0cmluZz4pLmhhcyhlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAjYXJyYXlBZGQoZWxlbWVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJyYXkgPSB0aGlzLiNzZXQgYXMgc3RyaW5nW107XG4gICAgaWYgKCFhcnJheS5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgdGhpc1thcnJheS5sZW5ndGhdID0gZWxlbWVudDtcbiAgICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9XG4gICNzZXRBZGQoZWxlbWVudDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2V0ID0gdGhpcy4jc2V0IGFzIFNldDxzdHJpbmc+O1xuICAgIGNvbnN0IHsgc2l6ZSB9ID0gc2V0O1xuICAgIHNldC5hZGQoZWxlbWVudCk7XG4gICAgaWYgKHNpemUgPCBzZXQuc2l6ZSkge1xuICAgICAgdGhpc1tzaXplXSA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgYWRkKFxuICAgIC4uLmVsZW1lbnRzOiBBcnJheTxzdHJpbmc+XG4gICkge1xuICAgIGNvbnN0IG1ldGhvZCA9XG4gICAgICAodGhpcy4jc2V0LmNvbnN0cnVjdG9yID09PSBBcnJheSA/IHRoaXMuI2FycmF5QWRkIDogdGhpcy4jc2V0QWRkKS5iaW5kKFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgaWYgKERPTVRva2VuTGlzdC4jaW52YWxpZFRva2VuKGVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnRE9NVG9rZW5MaXN0JzogVGhlIHRva2VuIHByb3ZpZGVkIG11c3Qgbm90IGJlIGVtcHR5LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBtZXRob2QoZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuI3VwZGF0ZUNsYXNzU3RyaW5nKCk7XG4gIH1cblxuICAjYXJyYXlSZW1vdmUoZWxlbWVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJyYXkgPSB0aGlzLiNzZXQgYXMgc3RyaW5nW107XG4gICAgY29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKGVsZW1lbnQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICAjc2V0UmVtb3ZlKGVsZW1lbnQ6IHN0cmluZykge1xuICAgICh0aGlzLiNzZXQgYXMgU2V0PHN0cmluZz4pLmRlbGV0ZShlbGVtZW50KTtcbiAgfVxuXG4gIHJlbW92ZShcbiAgICAuLi5lbGVtZW50czogQXJyYXk8c3RyaW5nPlxuICApIHtcbiAgICBjb25zdCBtZXRob2QgPVxuICAgICAgKHRoaXMuI3NldC5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgPyB0aGlzLiNhcnJheVJlbW92ZSA6IHRoaXMuI3NldFJlbW92ZSlcbiAgICAgICAgLmJpbmQodGhpcyk7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMubGVuZ3RoO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgaWYgKERPTVRva2VuTGlzdC4jaW52YWxpZFRva2VuKGVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVtb3ZlJyBvbiAnRE9NVG9rZW5MaXN0JzogVGhlIHRva2VuIHByb3ZpZGVkIG11c3Qgbm90IGJlIGVtcHR5LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbWV0aG9kKGVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTaXplID0gdGhpcy5sZW5ndGg7XG4gICAgaWYgKHNpemUgIT09IG5ld1NpemUpIHtcbiAgICAgIGZvciAobGV0IGkgPSBuZXdTaXplOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2ldO1xuICAgICAgfVxuICAgICAgdGhpcy4jc2V0SW5kaWNlcygpO1xuICAgIH1cbiAgICB0aGlzLiN1cGRhdGVDbGFzc1N0cmluZygpO1xuICB9XG5cbiAgcmVwbGFjZShcbiAgICBvbGRUb2tlbjogc3RyaW5nLFxuICAgIG5ld1Rva2VuOiBzdHJpbmcsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzQXJyYXlCYWNrZWQgPSB0aGlzLiNzZXQuY29uc3RydWN0b3IgPT09IEFycmF5O1xuICAgIGNvbnN0IHJlbW92ZU1ldGhvZCA9IChpc0FycmF5QmFja2VkID8gdGhpcy4jYXJyYXlSZW1vdmUgOiB0aGlzLiNzZXRSZW1vdmUpXG4gICAgICAuYmluZCh0aGlzKTtcbiAgICBjb25zdCBhZGRNZXRob2QgPSAoaXNBcnJheUJhY2tlZCA/IHRoaXMuI2FycmF5QWRkIDogdGhpcy4jc2V0QWRkKS5iaW5kKFxuICAgICAgdGhpcyxcbiAgICApO1xuICAgIGlmIChbb2xkVG9rZW4sIG5ld1Rva2VuXS5zb21lKCh2KSA9PiBET01Ub2tlbkxpc3QuI2ludmFsaWRUb2tlbih2KSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcGxhY2UnIG9uICdET01Ub2tlbkxpc3QnOiBUaGUgdG9rZW4gcHJvdmlkZWQgbXVzdCBub3QgYmUgZW1wdHkuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29udGFpbnMob2xkVG9rZW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGFpbnMobmV3VG9rZW4pKSB7XG4gICAgICB0aGlzLnJlbW92ZShvbGRUb2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU1ldGhvZChvbGRUb2tlbik7XG4gICAgICBhZGRNZXRob2QobmV3VG9rZW4pO1xuICAgICAgdGhpcy4jc2V0SW5kaWNlcygpO1xuICAgICAgdGhpcy4jdXBkYXRlQ2xhc3NTdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdXBwb3J0cygpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICB9XG5cbiAgdG9nZ2xlKFxuICAgIGVsZW1lbnQ6IHN0cmluZyxcbiAgICBmb3JjZT86IGJvb2xlYW4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChmb3JjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBmb3JjZSA/IFwiYWRkXCIgOiBcInJlbW92ZVwiO1xuICAgICAgdGhpc1tvcGVyYXRpb25dKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250YWlucyA9IHRoaXMuY29udGFpbnMoZWxlbWVudCk7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBjb250YWlucyA/IFwicmVtb3ZlXCIgOiBcImFkZFwiO1xuICAgICAgdGhpc1tvcGVyYXRpb25dKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuICFjb250YWlucztcbiAgICB9XG4gIH1cblxuICBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZywgaW5kZXg6IG51bWJlciwgbGlzdDogRE9NVG9rZW5MaXN0KSA9PiB2b2lkLFxuICApIHtcbiAgICBmb3IgKGNvbnN0IFtpLCB2YWx1ZV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNhbGxiYWNrKHZhbHVlLCBpLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlQ2xhc3NTdHJpbmcoKSB7XG4gICAgdGhpcy4jdmFsdWUgPSBBcnJheS5mcm9tKHRoaXMuI3NldCkuam9pbihcIiBcIik7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLiNzZXQuY29uc3RydWN0b3IgPT09IEFycmF5ICYmXG4gICAgICB0aGlzLiNzZXQubGVuZ3RoID4gRE9NVG9rZW5MaXN0LiNET01fVE9LRU5fTElTVF9NSU5fU0VUX1NJWkVcbiAgICApIHtcbiAgICAgIHRoaXMuI3NldCA9IG5ldyBTZXQodGhpcy4jc2V0KTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgaW5pdGlhbGl6ZUNsYXNzTGlzdFN5bSA9IFN5bWJvbChcImluaXRpYWxpemVDbGFzc0xpc3RTeW1cIik7XG5jb25zdCBkb21Ub2tlbkxpc3RDdXJyZW50RWxlbWVudFN5bSA9IFN5bWJvbChcImRvbVRva2VuTGlzdEN1cnJlbnRFbGVtZW50U3ltXCIpO1xuLyoqXG4gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHVuaW5pdGlhbGl6ZWQgRE9NVG9rZW5MaXN0IGlzIHRvIGNvbnN1bWUgbGVzcyBtZW1vcnlcbiAqIHRoYW4gdGhlIGFjdHVhbCBET01Ub2tlbkxpc3QgY2xhc3MuIEJ5IG1lYXN1cmVtZW50cyBvZiBEZW5vIHYyLjEuMCAoVjggMTMuMC4yNDUuMTItcnVzdHkpXG4gKiB0aGlzIGNsYXNzIGNvbnN1bWVzIDQ4IGJ5dGVzIHdoaWxlIHRoZSBzbWFsbGVzdCBET01Ub2tlbkxpc3QgY29uc3VtZXMgNDg4XG4gKiBieXRlc1xuICovXG5jbGFzcyBVbmluaXRpYWxpemVkRE9NVG9rZW5MaXN0IHtcbiAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50XG4gIC8vIGJlaW5nIHF1ZXJpZWRcblxuICBbZG9tVG9rZW5MaXN0Q3VycmVudEVsZW1lbnRTeW1dOiBFbGVtZW50O1xuICBjb25zdHJ1Y3RvcihcbiAgICBjdXJyZW50RWxlbWVudDogRWxlbWVudCxcbiAgKSB7XG4gICAgdGhpc1tkb21Ub2tlbkxpc3RDdXJyZW50RWxlbWVudFN5bV0gPSBjdXJyZW50RWxlbWVudDtcbiAgfVxuXG4gICNnZXRJbml0aWFsaXplZCgpOiBET01Ub2tlbkxpc3QgfCBudWxsIHtcbiAgICBjb25zdCBjdXJyZW50Q2xhc3NMaXN0ID0gdGhpc1tkb21Ub2tlbkxpc3RDdXJyZW50RWxlbWVudFN5bV0uY2xhc3NMaXN0O1xuICAgIGlmIChjdXJyZW50Q2xhc3NMaXN0ID09PSB0aGlzIGFzIHVua25vd24gYXMgRE9NVG9rZW5MaXN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudENsYXNzTGlzdDtcbiAgfVxuXG4gIHNldCB2YWx1ZShpbnB1dDogc3RyaW5nKSB7XG4gICAgdGhpc1tkb21Ub2tlbkxpc3RDdXJyZW50RWxlbWVudFN5bV1baW5pdGlhbGl6ZUNsYXNzTGlzdFN5bV0oKTtcbiAgICB0aGlzW2RvbVRva2VuTGlzdEN1cnJlbnRFbGVtZW50U3ltXS5jbGFzc0xpc3QudmFsdWUgPSBTdHJpbmcoaW5wdXQpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2dldEluaXRpYWxpemVkKCk/LnZhbHVlID8/IFwiXCI7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2dldEluaXRpYWxpemVkKCk/Lmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgKmVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbbnVtYmVyLCBzdHJpbmddPiB7XG4gICAgY29uc3QgaW5pdGlhbGl6ZWQgPSB0aGlzLiNnZXRJbml0aWFsaXplZCgpO1xuICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgeWllbGQqIGluaXRpYWxpemVkLmVudHJpZXMoKTtcbiAgICB9XG4gIH1cbiAgKnZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICAgIGNvbnN0IGluaXRpYWxpemVkID0gdGhpcy4jZ2V0SW5pdGlhbGl6ZWQoKTtcbiAgICBpZiAoaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHlpZWxkKiBpbml0aWFsaXplZC52YWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgKmtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxudW1iZXI+IHtcbiAgICBjb25zdCBpbml0aWFsaXplZCA9IHRoaXMuI2dldEluaXRpYWxpemVkKCk7XG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICB5aWVsZCogaW5pdGlhbGl6ZWQua2V5cygpO1xuICAgIH1cbiAgfVxuXG4gICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICAgIHlpZWxkKiB0aGlzLnZhbHVlcygpO1xuICB9XG5cbiAgaXRlbShpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI2dldEluaXRpYWxpemVkKCk/Lml0ZW0oaW5kZXgpID8/IG51bGw7XG4gIH1cblxuICBjb250YWlucyhlbGVtZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jZ2V0SW5pdGlhbGl6ZWQoKT8uY29udGFpbnMoZWxlbWVudCkgPz8gZmFsc2U7XG4gIH1cblxuICBhZGQoLi4uZWxlbWVudHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpc1tkb21Ub2tlbkxpc3RDdXJyZW50RWxlbWVudFN5bV1baW5pdGlhbGl6ZUNsYXNzTGlzdFN5bV0oKTtcbiAgICB0aGlzW2RvbVRva2VuTGlzdEN1cnJlbnRFbGVtZW50U3ltXS5jbGFzc0xpc3QuYWRkKC4uLmVsZW1lbnRzKTtcbiAgfVxuXG4gIHJlbW92ZSguLi5lbGVtZW50czogc3RyaW5nW10pIHtcbiAgICB0aGlzLiNnZXRJbml0aWFsaXplZCgpPy5yZW1vdmUoLi4uZWxlbWVudHMpO1xuICB9XG4gIHJlcGxhY2Uob2xkVG9rZW46IHN0cmluZywgbmV3VG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLiNnZXRJbml0aWFsaXplZCgpPy5yZXBsYWNlKG9sZFRva2VuLCBuZXdUb2tlbikgPz8gZmFsc2U7XG4gIH1cblxuICBzdXBwb3J0cygpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICB9XG5cbiAgdG9nZ2xlKFxuICAgIGVsZW1lbnQ6IHN0cmluZyxcbiAgICBmb3JjZT86IGJvb2xlYW4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChmb3JjZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRJbml0aWFsaXplZCgpPy50b2dnbGUoZWxlbWVudCwgZm9yY2UpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXNbZG9tVG9rZW5MaXN0Q3VycmVudEVsZW1lbnRTeW1dW2luaXRpYWxpemVDbGFzc0xpc3RTeW1dKCk7XG4gICAgdGhpc1tkb21Ub2tlbkxpc3RDdXJyZW50RWxlbWVudFN5bV0uY2xhc3NMaXN0LmFkZChlbGVtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBsaXN0OiBET01Ub2tlbkxpc3QpID0+IHZvaWQsXG4gICkge1xuICAgIHRoaXMuI2dldEluaXRpYWxpemVkKCk/LmZvckVhY2goY2FsbGJhY2spO1xuICB9XG59XG5cbmNvbnN0IHNldE5hbWVkTm9kZU1hcE93bmVyRWxlbWVudFN5bSA9IFN5bWJvbChcInNldE5hbWVkTm9kZU1hcE93bmVyRWxlbWVudFN5bVwiKTtcbmNvbnN0IHNldEF0dHJWYWx1ZVN5bSA9IFN5bWJvbChcInNldEF0dHJWYWx1ZVN5bVwiKTtcbmV4cG9ydCBjbGFzcyBBdHRyIGV4dGVuZHMgTm9kZSB7XG4gICNuYW1lZE5vZGVNYXA6IE5hbWVkTm9kZU1hcCB8IG51bGwgPSBudWxsO1xuICAjbmFtZSA9IFwiXCI7XG4gICN2YWx1ZSA9IFwiXCI7XG4gICNvd25lckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtYXA6IE5hbWVkTm9kZU1hcCB8IG51bGwsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAga2V5OiB0eXBlb2YgQ1RPUl9LRVksXG4gICkge1xuICAgIGlmIChrZXkgIT09IENUT1JfS0VZKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbiAgICB9XG4gICAgc3VwZXIobmFtZSwgTm9kZVR5cGUuQVRUUklCVVRFX05PREUsIG51bGwsIENUT1JfS0VZKTtcblxuICAgIHRoaXMuI25hbWUgPSBuYW1lO1xuICAgIHRoaXMuI3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy4jbmFtZWROb2RlTWFwID0gbWFwO1xuICB9XG5cbiAgW3NldE5hbWVkTm9kZU1hcE93bmVyRWxlbWVudFN5bV0ob3duZXJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCkge1xuICAgIHRoaXMuI293bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudDtcbiAgICB0aGlzLiNuYW1lZE5vZGVNYXAgPSBvd25lckVsZW1lbnQ/LmF0dHJpYnV0ZXMgPz8gbnVsbDtcblxuICAgIGlmIChvd25lckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3NldE93bmVyRG9jdW1lbnQob3duZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIFtzZXRBdHRyVmFsdWVTeW1dKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLiN2YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgX3NoYWxsb3dDbG9uZSgpOiBBdHRyIHtcbiAgICBjb25zdCBuZXdBdHRyID0gbmV3IEF0dHIobnVsbCwgdGhpcy4jbmFtZSwgdGhpcy4jdmFsdWUsIENUT1JfS0VZKTtcbiAgICBuZXdBdHRyLl9zZXRPd25lckRvY3VtZW50KHRoaXMub3duZXJEb2N1bWVudCk7XG4gICAgcmV0dXJuIG5ld0F0dHI7XG4gIH1cblxuICBvdmVycmlkZSBjbG9uZU5vZGUoKTogQXR0ciB7XG4gICAgcmV0dXJuIHN1cGVyLmNsb25lTm9kZSgpIGFzIEF0dHI7XG4gIH1cblxuICBvdmVycmlkZSBhcHBlbmRDaGlsZCgpOiBOb2RlIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFwiQ2Fubm90IGFkZCBjaGlsZHJlbiB0byBhbiBBdHRyaWJ1dGVcIik7XG4gIH1cblxuICBvdmVycmlkZSByZXBsYWNlQ2hpbGQoKTogTm9kZSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcIkNhbm5vdCBhZGQgY2hpbGRyZW4gdG8gYW4gQXR0cmlidXRlXCIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW5zZXJ0QmVmb3JlKCk6IE5vZGUge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXCJDYW5ub3QgYWRkIGNoaWxkcmVuIHRvIGFuIEF0dHJpYnV0ZVwiKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbW92ZUNoaWxkKCk6IE5vZGUge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICBcIlRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlXCIsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI25hbWU7XG4gIH1cblxuICBnZXQgbG9jYWxOYW1lKCk6IHN0cmluZyB7XG4gICAgLy8gVE9ETzogV2hlbiB3ZSBtYWtlIG5hbWVzcGFjZXMgYSB0aGluZyB0aGlzIG5lZWRzXG4gICAgLy8gdG8gYmUgdXBkYXRlZFxuICAgIHJldHVybiB0aGlzLiNuYW1lO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy4jbmFtZWROb2RlTWFwKSB7XG4gICAgICB0aGlzLiNuYW1lZE5vZGVNYXBbc2V0TmFtZWROb2RlTWFwVmFsdWVTeW1dKFxuICAgICAgICB0aGlzLiNuYW1lLFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG93bmVyRWxlbWVudCgpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI293bmVyRWxlbWVudCA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IHNwZWNpZmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE9cbiAgZ2V0IHByZWZpeCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVkTm9kZU1hcCB7XG4gIFtpbmRleDogbnVtYmVyXTogQXR0cjtcbn1cblxuY29uc3Qgc2V0TmFtZWROb2RlTWFwVmFsdWVTeW0gPSBTeW1ib2woXCJzZXROYW1lZE5vZGVNYXBWYWx1ZVN5bVwiKTtcbmNvbnN0IGdldE5hbWVkTm9kZU1hcFZhbHVlU3ltID0gU3ltYm9sKFwiZ2V0TmFtZWROb2RlTWFwVmFsdWVTeW1cIik7XG5jb25zdCBnZXROYW1lZE5vZGVNYXBBdHRyTmFtZXNTeW0gPSBTeW1ib2woXCJnZXROYW1lZE5vZGVNYXBBdHRyTmFtZXNTeW1cIik7XG5jb25zdCBnZXROYW1lZE5vZGVNYXBBdHRyTm9kZVN5bSA9IFN5bWJvbChcImdldE5hbWVkTm9kZU1hcEF0dHJOb2RlU3ltXCIpO1xuY29uc3QgcmVtb3ZlTmFtZWROb2RlTWFwQXR0clN5bSA9IFN5bWJvbChcInJlbW92ZU5hbWVkTm9kZU1hcEF0dHJTeW1cIik7XG5leHBvcnQgY2xhc3MgTmFtZWROb2RlTWFwIHtcbiAgc3RhdGljICNpbmRleGVkQXR0ckFjY2VzcyA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBOYW1lZE5vZGVNYXAsXG4gICAgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICk6IEF0dHIgfCB1bmRlZmluZWQge1xuICAgIGlmIChpbmRleCArIDEgPiB0aGlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBPYmplY3RcbiAgICAgIC5rZXlzKG1hcClcbiAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4gbWFwW2F0dHJpYnV0ZV0gIT09IHVuZGVmaW5lZClbaW5kZXhdXG4gICAgICA/LnNsaWNlKDEpOyAvLyBSZW1vdmUgXCJhXCIgZm9yIHNhZmVBdHRyTmFtZVxuICAgIHJldHVybiB0aGlzW2dldE5hbWVkTm9kZU1hcEF0dHJOb2RlU3ltXShhdHRyaWJ1dGUpO1xuICB9O1xuICAjb25BdHRyTm9kZUNoYW5nZTogKGF0dHI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb3duZXJFbGVtZW50OiBFbGVtZW50LFxuICAgIG9uQXR0ck5vZGVDaGFuZ2U6IChhdHRyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkLFxuICAgIGtleTogdHlwZW9mIENUT1JfS0VZLFxuICApIHtcbiAgICBpZiAoa2V5ICE9PSBDVE9SX0tFWSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3IuXCIpO1xuICAgIH1cbiAgICB0aGlzLiNvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQ7XG4gICAgdGhpcy4jb25BdHRyTm9kZUNoYW5nZSA9IG9uQXR0ck5vZGVDaGFuZ2U7XG5cbiAgICAvLyBSZXRhaW4gb3JkZXJpbmcgb2YgYW55IHByZWNlZGluZyBpZCBvciBjbGFzcyBhdHRyaWJ1dGVzXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIG93bmVyRWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XG4gICAgICB0aGlzW3NldE5hbWVkTm9kZU1hcFZhbHVlU3ltXShcbiAgICAgICAgYXR0cixcbiAgICAgICAgb3duZXJFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyKSBhcyBzdHJpbmcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICNhdHRyTm9kZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBBdHRyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICAjbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge307XG4gICNsZW5ndGggPSAwO1xuICAjY2FwYWNpdHkgPSAwO1xuICAjb3duZXJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgW2dldE5hbWVkTm9kZU1hcEF0dHJOb2RlU3ltXShhdHRyaWJ1dGU6IHN0cmluZyk6IEF0dHIge1xuICAgIGNvbnN0IHNhZmVBdHRyTmFtZSA9IFwiYVwiICsgYXR0cmlidXRlO1xuICAgIGxldCBhdHRyTm9kZSA9IHRoaXMuI2F0dHJOb2RlQ2FjaGVbc2FmZUF0dHJOYW1lXTtcbiAgICBpZiAoIWF0dHJOb2RlKSB7XG4gICAgICBhdHRyTm9kZSA9IHRoaXMuI2F0dHJOb2RlQ2FjaGVbc2FmZUF0dHJOYW1lXSA9IG5ldyBBdHRyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgIHRoaXMuI21hcFtzYWZlQXR0ck5hbWVdIGFzIHN0cmluZyxcbiAgICAgICAgQ1RPUl9LRVksXG4gICAgICApO1xuICAgICAgYXR0ck5vZGVbc2V0TmFtZWROb2RlTWFwT3duZXJFbGVtZW50U3ltXSh0aGlzLiNvd25lckVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyTm9kZTtcbiAgfVxuXG4gIFtnZXROYW1lZE5vZGVNYXBBdHRyTmFtZXNTeW1dKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBuYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLiNtYXApKSB7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuYW1lcy5wdXNoKG5hbWUuc2xpY2UoMSkpOyAvLyBSZW1vdmUgXCJhXCIgZm9yIHNhZmVBdHRyTmFtZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIFtnZXROYW1lZE5vZGVNYXBWYWx1ZVN5bV0oYXR0cmlidXRlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNhZmVBdHRyTmFtZSA9IFwiYVwiICsgYXR0cmlidXRlO1xuICAgIHJldHVybiB0aGlzLiNtYXBbc2FmZUF0dHJOYW1lXTtcbiAgfVxuXG4gIFtzZXROYW1lZE5vZGVNYXBWYWx1ZVN5bV0oYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGJ1YmJsZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc2FmZUF0dHJOYW1lID0gXCJhXCIgKyBhdHRyaWJ1dGU7XG4gICAgaWYgKHRoaXMuI21hcFtzYWZlQXR0ck5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuI2xlbmd0aCsrO1xuXG4gICAgICBpZiAodGhpcy4jbGVuZ3RoID4gdGhpcy4jY2FwYWNpdHkpIHtcbiAgICAgICAgdGhpcy4jY2FwYWNpdHkgPSB0aGlzLiNsZW5ndGg7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jY2FwYWNpdHkgLSAxO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU3RyaW5nKHRoaXMuI2NhcGFjaXR5IC0gMSksIHtcbiAgICAgICAgICBnZXQ6IE5hbWVkTm9kZU1hcC4jaW5kZXhlZEF0dHJBY2Nlc3MuYmluZCh0aGlzLCB0aGlzLiNtYXAsIGluZGV4KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLiNhdHRyTm9kZUNhY2hlW3NhZmVBdHRyTmFtZV0pIHtcbiAgICAgIHRoaXMuI2F0dHJOb2RlQ2FjaGVbc2FmZUF0dHJOYW1lXSFbc2V0QXR0clZhbHVlU3ltXSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy4jbWFwW3NhZmVBdHRyTmFtZV0gPSB2YWx1ZTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIHRoaXMuI29uQXR0ck5vZGVDaGFuZ2UoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBpcyByZW1vdmVkIGZyb21cbiAgICogYW4gZWxlbWVudFxuICAgKi9cbiAgW3JlbW92ZU5hbWVkTm9kZU1hcEF0dHJTeW1dKGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2FmZUF0dHJOYW1lID0gXCJhXCIgKyBhdHRyaWJ1dGU7XG4gICAgaWYgKHRoaXMuI21hcFtzYWZlQXR0ck5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuI2xlbmd0aC0tO1xuICAgICAgdGhpcy4jbWFwW3NhZmVBdHRyTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLiNvbkF0dHJOb2RlQ2hhbmdlKGF0dHJpYnV0ZSwgbnVsbCk7XG5cbiAgICAgIGNvbnN0IGF0dHJOb2RlID0gdGhpcy4jYXR0ck5vZGVDYWNoZVtzYWZlQXR0ck5hbWVdO1xuICAgICAgaWYgKGF0dHJOb2RlKSB7XG4gICAgICAgIGF0dHJOb2RlW3NldE5hbWVkTm9kZU1hcE93bmVyRWxlbWVudFN5bV0obnVsbCk7XG4gICAgICAgIHRoaXMuI2F0dHJOb2RlQ2FjaGVbc2FmZUF0dHJOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogR2VuZXJhdG9yPEF0dHI+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHlpZWxkIHRoaXNbaV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNsZW5ndGg7XG4gIH1cblxuICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGFjY2VwdCBhbnl0aGluZyBhbmQgYmFzaWNhbGx5XG4gIC8vIGNvZXJjZSBhbnkgbm9uIG51bWJlcnMgKGFuZCBJbmZpbml0eS8tSW5maW5pdHkpIGludG8gMFxuICBpdGVtKGluZGV4OiBudW1iZXIpOiBBdHRyIHwgbnVsbCB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMuI2xlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbaW5kZXhdO1xuICB9XG5cbiAgZ2V0TmFtZWRJdGVtKGF0dHJpYnV0ZTogc3RyaW5nKTogQXR0ciB8IG51bGwge1xuICAgIGNvbnN0IHNhZmVBdHRyTmFtZSA9IFwiYVwiICsgYXR0cmlidXRlO1xuICAgIGlmICh0aGlzLiNtYXBbc2FmZUF0dHJOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpc1tnZXROYW1lZE5vZGVNYXBBdHRyTm9kZVN5bV0oYXR0cmlidXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldE5hbWVkSXRlbShhdHRyTm9kZTogQXR0cikge1xuICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXCJBdHRyaWJ1dGUgYWxyZWFkeSBpbiB1c2VcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc2FmZUF0dHJOYW1lID0gXCJhXCIgKyBhdHRyTm9kZS5uYW1lO1xuICAgIGNvbnN0IHByZXZpb3VzQXR0ciA9IHRoaXMuI2F0dHJOb2RlQ2FjaGVbc2FmZUF0dHJOYW1lXTtcbiAgICBpZiAocHJldmlvdXNBdHRyKSB7XG4gICAgICBwcmV2aW91c0F0dHJbc2V0TmFtZWROb2RlTWFwT3duZXJFbGVtZW50U3ltXShudWxsKTtcbiAgICAgIHRoaXMuI21hcFtzYWZlQXR0ck5hbWVdID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGF0dHJOb2RlW3NldE5hbWVkTm9kZU1hcE93bmVyRWxlbWVudFN5bV0odGhpcy4jb3duZXJFbGVtZW50KTtcbiAgICB0aGlzLiNhdHRyTm9kZUNhY2hlW3NhZmVBdHRyTmFtZV0gPSBhdHRyTm9kZTtcbiAgICB0aGlzW3NldE5hbWVkTm9kZU1hcFZhbHVlU3ltXShhdHRyTm9kZS5uYW1lLCBhdHRyTm9kZS52YWx1ZSwgdHJ1ZSk7XG4gIH1cblxuICByZW1vdmVOYW1lZEl0ZW0oYXR0cmlidXRlOiBzdHJpbmcpOiBBdHRyIHtcbiAgICBjb25zdCBzYWZlQXR0ck5hbWUgPSBcImFcIiArIGF0dHJpYnV0ZTtcbiAgICBpZiAodGhpcy4jbWFwW3NhZmVBdHRyTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXR0ck5vZGUgPSB0aGlzW2dldE5hbWVkTm9kZU1hcEF0dHJOb2RlU3ltXShhdHRyaWJ1dGUpO1xuICAgICAgdGhpc1tyZW1vdmVOYW1lZE5vZGVNYXBBdHRyU3ltXShhdHRyaWJ1dGUpO1xuICAgICAgcmV0dXJuIGF0dHJOb2RlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXCJOb2RlIHdhcyBub3QgZm91bmRcIik7XG4gIH1cbn1cblxuY29uc3QgWE1MX05BTUVTVEFSVF9DSEFSX1JFX1NSQyA9IFwiOkEtWmEtel9cIiArXG4gIFN0cmluZy5yYXdgXFx1e0MwfS1cXHV7RDZ9XFx1e0Q4fS1cXHV7RjZ9XFx1e0Y4fS1cXHV7MkZGfVxcdXszNzB9LVxcdXszN0R9YCArXG4gIFN0cmluZ1xuICAgIC5yYXdgXFx1ezM3Rn0tXFx1ezFGRkZ9XFx1ezIwMEN9LVxcdXsyMDBEfVxcdXsyMDcwfS1cXHV7MjE4Rn1cXHV7MkMwMH0tXFx1ezJGRUZ9YCArXG4gIFN0cmluZ1xuICAgIC5yYXdgXFx1ezMwMDF9LVxcdXtEN0ZGfVxcdXtGOTAwfS1cXHV7RkRDRn1cXHV7RkRGMH0tXFx1e0ZGRkR9XFx1ezEwMDAwfS1cXHV7RUZGRkZ9YDtcbmNvbnN0IFhNTF9OQU1FX0NIQVJfUkVfU1JDID0gWE1MX05BTUVTVEFSVF9DSEFSX1JFX1NSQyArXG4gIFN0cmluZy5yYXdgXFx1e0I3fVxcdXswMzAwfS1cXHV7MDM2Rn1cXHV7MjAzRn0tXFx1ezIwNDB9MC05Li1gO1xuY29uc3QgeG1sTmFtZXN0YXJ0Q2hhclJlID0gbmV3IFJlZ0V4cChgWyR7WE1MX05BTUVTVEFSVF9DSEFSX1JFX1NSQ31dYCwgXCJ1XCIpO1xuY29uc3QgeG1sTmFtZUNoYXJSZSA9IG5ldyBSZWdFeHAoYFske1hNTF9OQU1FX0NIQVJfUkVfU1JDfV1gLCBcInVcIik7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50IGV4dGVuZHMgTm9kZSB7XG4gICNuYW1lZE5vZGVNYXA6IE5hbWVkTm9kZU1hcCB8IG51bGwgPSBudWxsO1xuICBnZXQgYXR0cmlidXRlcygpOiBOYW1lZE5vZGVNYXAge1xuICAgIGlmICghdGhpcy4jbmFtZWROb2RlTWFwKSB7XG4gICAgICB0aGlzLiNuYW1lZE5vZGVNYXAgPSBuZXcgTmFtZWROb2RlTWFwKHRoaXMsIChhdHRyaWJ1dGUsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVtb3ZlZCA9IHZhbHVlID09PSBudWxsO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xuICAgICAgICAgIGNhc2UgXCJjbGFzc1wiOiB7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVkKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2hhc0NsYXNzTmFtZUF0dHJpYnV0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNoYXNDbGFzc05hbWVBdHRyaWJ1dGUgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2hhc0NsYXNzTmFtZUF0dHJpYnV0ZSA9IHRoaXMuI2hhc0lkQXR0cmlidXRlICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIGF0dHJpYnV0ZSBpcyBtYXJrZWQgcmVtb3ZlZFxuICAgICAgICAgICAgdGhpcy4jY3VycmVudENsYXNzTmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy4jY2xhc3NMaXN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcImlkXCI6IHtcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy4jaGFzSWRBdHRyaWJ1dGUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaGFzSWRBdHRyaWJ1dGUgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2hhc0lkQXR0cmlidXRlID0gdGhpcy4jaGFzQ2xhc3NOYW1lQXR0cmlidXRlICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2N1cnJlbnRJZCA9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBDVE9SX0tFWSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI25hbWVkTm9kZU1hcDtcbiAgfVxuXG4gICNkYXRhc2V0UHJveHk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCBudWxsID0gbnVsbDtcbiAgI2N1cnJlbnRJZCA9IFwiXCI7XG4gICNjdXJyZW50Q2xhc3NOYW1lID0gXCJcIjtcbiAgI2hhc0lkQXR0cmlidXRlID0gLTE7XG4gICNoYXNDbGFzc05hbWVBdHRyaWJ1dGUgPSAtMTtcblxuICAvLyBPbmx5IGluaXRpYWxpemUgYSBjbGFzc0xpc3Qgd2hlbiB3ZSBuZWVkIG9uZVxuICAjY2xhc3NMaXN0SW5zdGFuY2U6IERPTVRva2VuTGlzdCA9IG5ldyBVbmluaXRpYWxpemVkRE9NVG9rZW5MaXN0KFxuICAgIHRoaXMsXG4gICkgYXMgdW5rbm93biBhcyBET01Ub2tlbkxpc3Q7XG4gIGdldCAjY2xhc3NMaXN0KCk6IERPTVRva2VuTGlzdCB7XG4gICAgcmV0dXJuIHRoaXMuI2NsYXNzTGlzdEluc3RhbmNlO1xuICB9XG5cbiAgW2luaXRpYWxpemVDbGFzc0xpc3RTeW1dKCkge1xuICAgIGlmICh0aGlzLiNjbGFzc0xpc3RJbnN0YW5jZS5jb25zdHJ1Y3RvciA9PT0gRE9NVG9rZW5MaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jY2xhc3NMaXN0SW5zdGFuY2UgPSBuZXcgRE9NVG9rZW5MaXN0KFxuICAgICAgKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy4jY3VycmVudENsYXNzTmFtZSAhPT0gY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy4jY3VycmVudENsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgICBpZiAodGhpcy4jaGFzQ2xhc3NOYW1lQXR0cmlidXRlID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy4jaGFzQ2xhc3NOYW1lQXR0cmlidXRlID0gdGhpcy4jaGFzSWRBdHRyaWJ1dGUgKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLiNuYW1lZE5vZGVNYXAgJiZcbiAgICAgICAgICAgICh0aGlzLmhhc0F0dHJpYnV0ZShcImNsYXNzXCIpIHx8IGNsYXNzTmFtZSAhPT0gXCJcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1tzZXROYW1lZE5vZGVNYXBWYWx1ZVN5bV0oXCJjbGFzc1wiLCBjbGFzc05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENUT1JfS0VZLFxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICB0YWdOYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50Tm9kZTogTm9kZSB8IG51bGwsXG4gICAgYXR0cmlidXRlczogW3N0cmluZywgc3RyaW5nXVtdLFxuICAgIGtleTogdHlwZW9mIENUT1JfS0VZLFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIHRhZ05hbWUsXG4gICAgICBOb2RlVHlwZS5FTEVNRU5UX05PREUsXG4gICAgICBwYXJlbnROb2RlLFxuICAgICAga2V5LFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cmlidXRlcykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoYXR0clswXSwgYXR0clsxXSk7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlTmFtZSA9IGdldFVwcGVyQ2FzZSh0YWdOYW1lKTtcbiAgfVxuXG4gIGdldCB0YWdOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU5hbWU7XG4gIH1cblxuICBnZXQgbG9jYWxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldExvd2VyQ2FzZSh0aGlzLnRhZ05hbWUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgX3NoYWxsb3dDbG9uZSgpOiBOb2RlIHtcbiAgICAvLyBGSVhNRTogVGhpcyBhdHRyaWJ1dGUgY29weWluZyBuZWVkcyB0byBhbHNvIGJlIGZpeGVkIGluIG90aGVyXG4gICAgLy8gZWxlbWVudHMgdGhhdCBvdmVycmlkZSBfc2hhbGxvd0Nsb25lIGxpa2UgPHRlbXBsYXRlPlxuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIHRoaXMuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xuICAgICAgYXR0cmlidXRlcy5wdXNoKFthdHRyaWJ1dGUsIHRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkhXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5vZGVOYW1lLCBudWxsLCBhdHRyaWJ1dGVzLCBDVE9SX0tFWSk7XG4gIH1cblxuICBnZXQgY2hpbGRFbGVtZW50Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKS5lbGVtZW50c1ZpZXcoKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgY2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRDbGFzc05hbWU7XG4gIH1cblxuICBzZXQgY2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jY2xhc3NMaXN0LnZhbHVlID0gY2xhc3NOYW1lO1xuICB9XG5cbiAgZ2V0IGNsYXNzTGlzdCgpOiBET01Ub2tlbkxpc3Qge1xuICAgIHJldHVybiB0aGlzLiNjbGFzc0xpc3Q7XG4gIH1cblxuICBnZXQgb3V0ZXJIVE1MKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldE91dGVyT3JJbm5lckh0bWwodGhpcywgdHJ1ZSk7XG4gIH1cblxuICBzZXQgb3V0ZXJIVE1MKGh0bWw6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHtcbiAgICAgIGNvbnN0IHsgcGFyZW50RWxlbWVudCwgcGFyZW50Tm9kZSB9ID0gdGhpcztcbiAgICAgIGxldCBjb250ZXh0TG9jYWxOYW1lID0gcGFyZW50RWxlbWVudD8ubG9jYWxOYW1lO1xuXG4gICAgICBzd2l0Y2ggKHBhcmVudE5vZGUubm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5ET0NVTUVOVF9OT0RFOiB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICAgIFwiTW9kaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgZG9jdW1lbnRcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0dGluZyBvdXRlckhUTUwsIHN0ZXAgNC4gRG9jdW1lbnQgRnJhZ21lbnRcbiAgICAgICAgLy8gcmVmOiBodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI2RvbS1lbGVtZW50LW91dGVyaHRtbFxuICAgICAgICBjYXNlIE5vZGVUeXBlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6IHtcbiAgICAgICAgICBjb250ZXh0TG9jYWxOYW1lID0gXCJib2R5XCI7XG4gICAgICAgICAgLy8gZmFsbC10aHJvdWdoXG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgeyBjaGlsZE5vZGVzOiBuZXdDaGlsZE5vZGVzIH0gPVxuICAgICAgICAgICAgZnJhZ21lbnROb2Rlc0Zyb21TdHJpbmcoaHRtbCwgY29udGV4dExvY2FsTmFtZSEpLmNoaWxkTm9kZXNbMF07XG4gICAgICAgICAgY29uc3QgbXV0YXRvciA9IHBhcmVudE5vZGUuX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0aW9uSW5kZXggPSBtdXRhdG9yLmluZGV4T2YodGhpcyk7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gbmV3Q2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBuZXdDaGlsZE5vZGVzW2ldO1xuICAgICAgICAgICAgbXV0YXRvci5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIGNoaWxkKTtcbiAgICAgICAgICAgIGNoaWxkLl9zZXRQYXJlbnQocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICBjaGlsZC5fc2V0T3duZXJEb2N1bWVudChwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaW5uZXJIVE1MKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldE91dGVyT3JJbm5lckh0bWwodGhpcywgZmFsc2UpO1xuICB9XG5cbiAgc2V0IGlubmVySFRNTChodG1sOiBzdHJpbmcpIHtcbiAgICAvLyBSZW1vdmUgYWxsIGNoaWxkcmVuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgIGNoaWxkLl9zZXRQYXJlbnQobnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgbXV0YXRvciA9IHRoaXMuX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG4gICAgbXV0YXRvci5zcGxpY2UoMCwgdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCk7XG5cbiAgICAvLyBQYXJzZSBIVE1MIGludG8gbmV3IGNoaWxkcmVuXG4gICAgaWYgKGh0bWwubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBmcmFnbWVudE5vZGVzRnJvbVN0cmluZyhodG1sLCB0aGlzLmxvY2FsTmFtZSk7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHBhcnNlZC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgbXV0YXRvci5wdXNoKGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgY2hpbGQuX3NldFBhcmVudCh0aGlzKTtcbiAgICAgICAgY2hpbGQuX3NldE93bmVyRG9jdW1lbnQodGhpcy5vd25lckRvY3VtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaW5uZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dENvbnRlbnQ7XG4gIH1cblxuICBzZXQgaW5uZXJUZXh0KHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IEhUTUxDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKS5lbGVtZW50c1ZpZXcoKTtcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50SWQgfHwgXCJcIjtcbiAgfVxuXG4gIHNldCBpZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gIH1cblxuICBnZXQgZGF0YXNldCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy4jZGF0YXNldFByb3h5KSB7XG4gICAgICByZXR1cm4gdGhpcy4jZGF0YXNldFByb3h5O1xuICAgIH1cblxuICAgIHRoaXMuI2RhdGFzZXRQcm94eSA9IG5ldyBQcm94eTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+Pih7fSwge1xuICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcGVydHksIF9yZWNlaXZlcikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGdldERhdGFzZXRIdG1sQXR0ck5hbWUocHJvcGVydHkpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcblxuICAgICAgc2V0OiAoX3RhcmdldCwgcHJvcGVydHksIHZhbHVlLCBfcmVjZWl2ZXIpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGxldCBhdHRyaWJ1dGVOYW1lID0gXCJkYXRhLVwiO1xuXG4gICAgICAgICAgbGV0IHByZXZDaGFyID0gXCJcIjtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcHJvcGVydHkpIHtcbiAgICAgICAgICAgIC8vIFN0ZXAgMS4gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjZG9tLWRvbXN0cmluZ21hcC1zZXRpdGVtXG4gICAgICAgICAgICBpZiAocHJldkNoYXIgPT09IFwiLVwiICYmIGxvd2VyQ2FzZUNoYXJSZS50ZXN0KGNoYXIpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgICAgICAgXCJBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIHdhcyBzcGVjaWZpZWRcIixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RlcCA0LiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNkb20tZG9tc3RyaW5nbWFwLXNldGl0ZW1cbiAgICAgICAgICAgIGlmICgheG1sTmFtZUNoYXJSZS50ZXN0KGNoYXIpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXCJTdHJpbmcgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0ZXAgMi4gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjZG9tLWRvbXN0cmluZ21hcC1zZXRpdGVtXG4gICAgICAgICAgICBpZiAodXBwZXJDYXNlQ2hhclJlLnRlc3QoY2hhcikpIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSArPSBcIi1cIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZSArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBwcmV2Q2hhciA9IGNoYXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZVByb3BlcnR5OiAoX3RhcmdldCwgcHJvcGVydHkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBnZXREYXRhc2V0SHRtbEF0dHJOYW1lKHByb3BlcnR5KTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcblxuICAgICAgb3duS2V5czogKF90YXJnZXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgICAgICAuZ2V0QXR0cmlidXRlTmFtZXMoKVxuICAgICAgICAgIC5mbGF0TWFwKChhdHRyaWJ1dGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZS5zdGFydHNXaXRoPy4oXCJkYXRhLVwiKSkge1xuICAgICAgICAgICAgICByZXR1cm4gW2dldERhdGFzZXRKYXZhc2NyaXB0TmFtZShhdHRyaWJ1dGVOYW1lKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IChfdGFyZ2V0LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGdldERhdGFzZXRIdG1sQXR0ck5hbWUocHJvcGVydHkpO1xuICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG5cbiAgICAgIGhhczogKF90YXJnZXQsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gZ2V0RGF0YXNldEh0bWxBdHRyTmFtZShwcm9wZXJ0eSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLiNkYXRhc2V0UHJveHk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLiNuYW1lZE5vZGVNYXApIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbXTtcblxuICAgICAgLy8gV2UgcHJlc2VydmUgdGhlIG9yZGVyIG9mIHRoZSBcImlkXCIgYW5kIFwiY2xhc3NcIiBhdHRyaWJ1dGVzIHdoZW5cbiAgICAgIC8vIHJldHVybmluZyB0aGUgbGlzdCBvZiBuYW1lcyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgTmFtZWROb2RlTWFwXG4gICAgICBjb25zdCBzdGFydFdpdGhDbGFzc0F0dHIgPSBOdW1iZXIoXG4gICAgICAgIHRoaXMuI2hhc0lkQXR0cmlidXRlID4gdGhpcy4jaGFzQ2xhc3NOYW1lQXR0cmlidXRlLFxuICAgICAgKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZUlkeCA9IChpICsgc3RhcnRXaXRoQ2xhc3NBdHRyKSAlIDI7XG4gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlSWR4KSB7XG4gICAgICAgICAgLy8gXCJpZFwiIGF0dHJpYnV0ZVxuICAgICAgICAgIGNhc2UgMDoge1xuICAgICAgICAgICAgfnRoaXMuI2hhc0lkQXR0cmlidXRlICYmIGF0dHJpYnV0ZXMucHVzaChcImlkXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFwiY2xhc3NcIiBhdHRyaWJ1dGVcbiAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgIH50aGlzLiNoYXNDbGFzc05hbWVBdHRyaWJ1dGUgJiYgYXR0cmlidXRlcy5wdXNoKFwiY2xhc3NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tnZXROYW1lZE5vZGVNYXBBdHRyTmFtZXNTeW1dKCk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGUocmF3TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbmFtZSA9IGdldExvd2VyQ2FzZShTdHJpbmcocmF3TmFtZSkpO1xuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIFwiaWRcIjoge1xuICAgICAgICBpZiAofnRoaXMuI2hhc0lkQXR0cmlidXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRJZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSBcImNsYXNzXCI6IHtcbiAgICAgICAgaWYgKH50aGlzLiNoYXNDbGFzc05hbWVBdHRyaWJ1dGUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudENsYXNzTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy4jbmFtZWROb2RlTWFwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2dldE5hbWVkTm9kZU1hcFZhbHVlU3ltXShuYW1lKSA/PyBudWxsO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlKHJhd05hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG5hbWUgPSBnZXRMb3dlckNhc2UoU3RyaW5nKHJhd05hbWUpKTtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgbGV0IGlzTm9ybWFsQXR0cmlidXRlID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgXCJpZFwiOiB7XG4gICAgICAgIHRoaXMuI2N1cnJlbnRJZCA9IHN0clZhbHVlO1xuICAgICAgICBpZiAodGhpcy4jaGFzSWRBdHRyaWJ1dGUgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy4jaGFzSWRBdHRyaWJ1dGUgPSB0aGlzLiNoYXNDbGFzc05hbWVBdHRyaWJ1dGUgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNsYXNzXCI6IHtcbiAgICAgICAgdGhpcy4jY2xhc3NMaXN0LnZhbHVlID0gc3RyVmFsdWU7XG4gICAgICAgIGlmICh0aGlzLiNoYXNDbGFzc05hbWVBdHRyaWJ1dGUgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy4jaGFzQ2xhc3NOYW1lQXR0cmlidXRlID0gdGhpcy4jaGFzSWRBdHRyaWJ1dGUgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpc05vcm1hbEF0dHJpYnV0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI25hbWVkTm9kZU1hcCB8fCBpc05vcm1hbEF0dHJpYnV0ZSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzW3NldE5hbWVkTm9kZU1hcFZhbHVlU3ltXShuYW1lLCBzdHJWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQXR0cmlidXRlKHJhd05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IG5hbWUgPSBnZXRMb3dlckNhc2UoU3RyaW5nKHJhd05hbWUpKTtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgXCJpZFwiOiB7XG4gICAgICAgIHRoaXMuI2N1cnJlbnRJZCA9IFwiXCI7XG4gICAgICAgIHRoaXMuI2hhc0lkQXR0cmlidXRlID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNsYXNzXCI6IHtcbiAgICAgICAgdGhpcy4jY2xhc3NMaXN0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgdGhpcy4jaGFzQ2xhc3NOYW1lQXR0cmlidXRlID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy4jbmFtZWROb2RlTWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hdHRyaWJ1dGVzW3JlbW92ZU5hbWVkTm9kZU1hcEF0dHJTeW1dKG5hbWUpO1xuICB9XG5cbiAgdG9nZ2xlQXR0cmlidXRlKHJhd05hbWU6IHN0cmluZywgZm9yY2U/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmFtZSA9IGdldExvd2VyQ2FzZShTdHJpbmcocmF3TmFtZSkpO1xuICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgaWYgKChmb3JjZSA9PT0gdW5kZWZpbmVkKSB8fCAoZm9yY2UgPT09IGZhbHNlKSkge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgoZm9yY2UgPT09IHVuZGVmaW5lZCkgfHwgKGZvcmNlID09PSB0cnVlKSkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgXCJcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKHJhd05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hbWUgPSBnZXRMb3dlckNhc2UoU3RyaW5nKHJhd05hbWUpKTtcblxuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSBcImlkXCI6IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ofnRoaXMuI2hhc0lkQXR0cmlidXRlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJjbGFzc1wiOiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKH50aGlzLiNoYXNDbGFzc05hbWVBdHRyaWJ1dGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy4jbmFtZWROb2RlTWFwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tnZXROYW1lZE5vZGVNYXBWYWx1ZVN5bV0obmFtZSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhhc0F0dHJpYnV0ZU5TKF9uYW1lc3BhY2U6IHN0cmluZywgcmF3TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmFtZSA9IGdldExvd2VyQ2FzZShTdHJpbmcocmF3TmFtZSkpO1xuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIFwiaWRcIjoge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih+dGhpcy4jaGFzSWRBdHRyaWJ1dGUpO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNsYXNzXCI6IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ofnRoaXMuI2hhc0NsYXNzTmFtZUF0dHJpYnV0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLiNuYW1lZE5vZGVNYXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgbmFtZXNwYWNlXG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tnZXROYW1lZE5vZGVNYXBWYWx1ZVN5bV0obmFtZSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlcGxhY2VXaXRoKC4uLm5vZGVzOiAoTm9kZSB8IHN0cmluZylbXSkge1xuICAgIHRoaXMuX3JlcGxhY2VXaXRoKC4uLm5vZGVzKTtcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLl9yZW1vdmUoKTtcbiAgfVxuXG4gIGFwcGVuZCguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICBjb25zdCBtdXRhdG9yID0gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICBtdXRhdG9yLnB1c2goLi4ubm9kZXNBbmRUZXh0Tm9kZXMobm9kZXMsIHRoaXMpKTtcbiAgfVxuXG4gIHByZXBlbmQoLi4ubm9kZXM6IChOb2RlIHwgc3RyaW5nKVtdKSB7XG4gICAgY29uc3QgbXV0YXRvciA9IHRoaXMuX2dldENoaWxkTm9kZXNNdXRhdG9yKCk7XG4gICAgbXV0YXRvci5zcGxpY2UoMCwgMCwgLi4ubm9kZXNBbmRUZXh0Tm9kZXMobm9kZXMsIHRoaXMpKTtcbiAgfVxuXG4gIGJlZm9yZSguLi5ub2RlczogKE5vZGUgfCBzdHJpbmcpW10pIHtcbiAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICBpbnNlcnRCZWZvcmVBZnRlcih0aGlzLCBub2RlcywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgYWZ0ZXIoLi4ubm9kZXM6IChOb2RlIHwgc3RyaW5nKVtdKSB7XG4gICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlQWZ0ZXIodGhpcywgbm9kZXMsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlyc3RFbGVtZW50Q2hpbGQoKTogRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKS5lbGVtZW50c1ZpZXcoKTtcbiAgICByZXR1cm4gZWxlbWVudHNbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBsYXN0RWxlbWVudENoaWxkKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuX2dldENoaWxkTm9kZXNNdXRhdG9yKCkuZWxlbWVudHNWaWV3KCk7XG4gICAgcmV0dXJuIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdID8/IG51bGw7XG4gIH1cblxuICBnZXQgbmV4dEVsZW1lbnRTaWJsaW5nKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbXV0YXRvciA9IHBhcmVudC5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICBjb25zdCBpbmRleCA9IG11dGF0b3IuaW5kZXhPZkVsZW1lbnRzVmlldyh0aGlzKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IG11dGF0b3IuZWxlbWVudHNWaWV3KCk7XG4gICAgcmV0dXJuIGVsZW1lbnRzW2luZGV4ICsgMV0gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbXV0YXRvciA9IHBhcmVudC5fZ2V0Q2hpbGROb2Rlc011dGF0b3IoKTtcbiAgICBjb25zdCBpbmRleCA9IG11dGF0b3IuaW5kZXhPZkVsZW1lbnRzVmlldyh0aGlzKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IG11dGF0b3IuZWxlbWVudHNWaWV3KCk7XG4gICAgcmV0dXJuIGVsZW1lbnRzW2luZGV4IC0gMV0gPz8gbnVsbDtcbiAgfVxuXG4gIHF1ZXJ5U2VsZWN0b3I8VCA9IEVsZW1lbnQ+KHNlbGVjdG9yczogc3RyaW5nKTogVCB8IG51bGwge1xuICAgIGlmICghdGhpcy5vd25lckRvY3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IG11c3QgaGF2ZSBhbiBvd25lciBkb2N1bWVudFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50IS5fbndhcGkuZmlyc3Qoc2VsZWN0b3JzLCB0aGlzKSBhcyBUO1xuICB9XG5cbiAgcXVlcnlTZWxlY3RvckFsbDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+KFxuICAgIHNlbGVjdG9yczogc3RyaW5nLFxuICApOiBOb2RlTGlzdDxUPiB7XG4gICAgaWYgKCF0aGlzLm93bmVyRG9jdW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgbXVzdCBoYXZlIGFuIG93bmVyIGRvY3VtZW50XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG4gICAgY29uc3QgbXV0YXRvciA9IG5vZGVMaXN0W25vZGVMaXN0TXV0YXRvclN5bV0oKTtcblxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgdGhpcy5vd25lckRvY3VtZW50IS5fbndhcGkuc2VsZWN0KHNlbGVjdG9ycywgdGhpcykpIHtcbiAgICAgIG11dGF0b3IucHVzaChtYXRjaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVMaXN0IGFzIE5vZGVMaXN0PFQ+O1xuICB9XG5cbiAgbWF0Y2hlcyhzZWxlY3RvclN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudCEuX253YXBpLm1hdGNoKHNlbGVjdG9yU3RyaW5nLCB0aGlzKTtcbiAgfVxuXG4gIGNsb3Nlc3Qoc2VsZWN0b3JTdHJpbmc6IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCB7IG1hdGNoIH0gPSB0aGlzLm93bmVyRG9jdW1lbnQhLl9ud2FwaTsgLy8gU2VlIG5vdGUgYmVsb3dcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLXRoaXMtYWxpYXNcbiAgICBsZXQgZWw6IEVsZW1lbnQgfCBudWxsID0gdGhpcztcbiAgICBkbyB7XG4gICAgICAvLyBOb3RlOiBOb3QgdXNpbmcgYGVsLm1hdGNoZXMoc2VsZWN0b3JTdHJpbmcpYCBiZWNhdXNlIG9uIGEgYnJvd3NlciBpZiB5b3Ugb3ZlcnJpZGVcbiAgICAgIC8vIGBtYXRjaGVzYCwgeW91ICpkb24ndCogc2VlIGl0IGJlaW5nIHVzZWQgYnkgYGNsb3Nlc3RgLlxuICAgICAgaWYgKG1hdGNoKHNlbGVjdG9yU3RyaW5nLCBlbCkpIHtcbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfVxuICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgIH0gd2hpbGUgKGVsICE9PSBudWxsKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRPRE86IERSWSEhIVxuICBnZXRFbGVtZW50QnlJZChpZDogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5faGFzSW5pdGlhbGl6ZWRDaGlsZE5vZGVzKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5vZGVUeXBlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBpZiAoKDxFbGVtZW50PiBjaGlsZCkuaWQgPT09IGlkKSB7XG4gICAgICAgICAgcmV0dXJuIDxFbGVtZW50PiBjaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9ICg8RWxlbWVudD4gY2hpbGQpLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIHJldHVybiBzZWFyY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWU6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZpeENhc2VUYWdOYW1lID0gZ2V0VXBwZXJDYXNlKHRhZ05hbWUpO1xuXG4gICAgaWYgKGZpeENhc2VUYWdOYW1lID09PSBcIipcIikge1xuICAgICAgcmV0dXJuIDxFbGVtZW50W10+IHRoaXMuX2dldEVsZW1lbnRzQnlUYWdOYW1lV2lsZGNhcmQoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPEVsZW1lbnRbXT4gdGhpcy5fZ2V0RWxlbWVudHNCeVRhZ05hbWUoZml4Q2FzZVRhZ05hbWUsIFtdKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0RWxlbWVudHNCeVRhZ05hbWVXaWxkY2FyZChzZWFyY2g6IE5vZGVbXSk6IE5vZGVbXSB7XG4gICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSkge1xuICAgICAgcmV0dXJuIHNlYXJjaDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgc2VhcmNoLnB1c2goY2hpbGQpO1xuICAgICAgICAoPEVsZW1lbnQ+IGNoaWxkKS5fZ2V0RWxlbWVudHNCeVRhZ05hbWVXaWxkY2FyZChzZWFyY2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2g7XG4gIH1cblxuICBfZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZTogc3RyaW5nLCBzZWFyY2g6IE5vZGVbXSk6IE5vZGVbXSB7XG4gICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSkge1xuICAgICAgcmV0dXJuIHNlYXJjaDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgaWYgKCg8RWxlbWVudD4gY2hpbGQpLnRhZ05hbWUgPT09IHRhZ05hbWUpIHtcbiAgICAgICAgICBzZWFyY2gucHVzaChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICAoPEVsZW1lbnQ+IGNoaWxkKS5fZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSwgc2VhcmNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoO1xuICB9XG5cbiAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZENoaWxkTm9kZXMoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIGNsYXNzTmFtZS50cmltKCkuc3BsaXQoL1xccysvKSxcbiAgICAgIFtdLFxuICAgICkgYXMgRWxlbWVudFtdO1xuICB9XG5cbiAgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhfbmFtZXNwYWNlOiBzdHJpbmcsIGxvY2FsTmFtZTogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgICBpZiAoIXRoaXMuX2hhc0luaXRpYWxpemVkQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIG5hbWVzcGFjZVxuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKGxvY2FsTmFtZSk7XG4gIH1cbn1cblxuVXRpbFR5cGVzLkVsZW1lbnQgPSBFbGVtZW50O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTLFFBQVEsUUFBUSx5QkFBeUI7QUFDbEQsU0FBUyx1QkFBdUIsUUFBUSxvQkFBb0I7QUFDNUQsU0FBUyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxRQUFRLFlBQVk7QUFDOUQsU0FBUyxRQUFRLEVBQUUsa0JBQWtCLFFBQVEsaUJBQWlCO0FBRTlELFNBQ0Usc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsZUFBZSxRQUNWLGFBQWE7QUFDcEIsT0FBTyxlQUFlLG1CQUFtQjtBQUN6QyxTQUFTLFlBQVksRUFBRSxZQUFZLFFBQVEsb0JBQW9CO2VBcUczRCxPQUFPLFFBQVE7QUEvRm5CLE9BQU8sTUFBTTtFQUNYLDhEQUE4RDtFQUM5RCx1Q0FBdUM7RUFDdkMsT0FBTyxDQUFBLDJCQUE0QixHQUFHLEdBQVk7RUFFbEQsQ0FBQSxNQUFPLEdBQUcsR0FBRztFQUNiLElBQUksQ0FBQSxLQUFNO0lBQ1IsT0FBTyxJQUFJLENBQUMsQ0FBQSxNQUFPO0VBQ3JCO0VBQ0EsSUFBSSxDQUFBLEtBQU0sQ0FDUixLQUFhO0lBRWIsSUFBSSxDQUFDLENBQUEsTUFBTyxHQUFHO0lBQ2YsSUFBSSxDQUFDLENB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
+// denoCacheMetadata=1433051206009036728,6311302407068132018 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b1ecf2da2637e535c066eefcfbc2fe27606629100938bdda0a0a7b5d7d35bdd4.js b/vendor/gen/https/deno.land/b1ecf2da2637e535c066eefcfbc2fe27606629100938bdda0a0a7b5d7d35bdd4.js
new file mode 100644
index 0000000..9898b06
--- /dev/null
+++ b/vendor/gen/https/deno.land/b1ecf2da2637e535c066eefcfbc2fe27606629100938bdda0a0a7b5d7d35bdd4.js
@@ -0,0 +1,23 @@
+import { Command } from "../command.ts";
+import { dim, italic } from "../deps.ts";
+import { FishCompletionsGenerator } from "./_fish_completions_generator.ts";
+/** Generates fish completions script. */ export class FishCompletionsCommand extends Command {
+ #cmd;
+ constructor(cmd){
+ super();
+ this.#cmd = cmd;
+ return this.description(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ return `Generate shell completions for fish.
+
+To enable fish completions for this program add following line to your ${dim(italic("~/.config/fish/config.fish"))}:
+
+ ${dim(italic(`source (${baseCmd.getPath()} completions fish | psub)`))}`;
+ }).noGlobals().action(()=>{
+ const baseCmd = this.#cmd || this.getMainCommand();
+ console.log(FishCompletionsGenerator.generate(baseCmd));
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9maXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZC50c1wiO1xuaW1wb3J0IHsgZGltLCBpdGFsaWMgfSBmcm9tIFwiLi4vZGVwcy50c1wiO1xuaW1wb3J0IHsgRmlzaENvbXBsZXRpb25zR2VuZXJhdG9yIH0gZnJvbSBcIi4vX2Zpc2hfY29tcGxldGlvbnNfZ2VuZXJhdG9yLnRzXCI7XG5cbi8qKiBHZW5lcmF0ZXMgZmlzaCBjb21wbGV0aW9ucyBzY3JpcHQuICovXG5leHBvcnQgY2xhc3MgRmlzaENvbXBsZXRpb25zQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAjY21kPzogQ29tbWFuZDtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGNtZD86IENvbW1hbmQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI2NtZCA9IGNtZDtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmRlc2NyaXB0aW9uKCgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZUNtZCA9IHRoaXMuI2NtZCB8fCB0aGlzLmdldE1haW5Db21tYW5kKCk7XG4gICAgICAgIHJldHVybiBgR2VuZXJhdGUgc2hlbGwgY29tcGxldGlvbnMgZm9yIGZpc2guXG5cblRvIGVuYWJsZSBmaXNoIGNvbXBsZXRpb25zIGZvciB0aGlzIHByb2dyYW0gYWRkIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgJHtcbiAgICAgICAgICBkaW0oaXRhbGljKFwifi8uY29uZmlnL2Zpc2gvY29uZmlnLmZpc2hcIikpXG4gICAgICAgIH06XG5cbiAgICAke2RpbShpdGFsaWMoYHNvdXJjZSAoJHtiYXNlQ21kLmdldFBhdGgoKX0gY29tcGxldGlvbnMgZmlzaCB8IHBzdWIpYCkpfWA7XG4gICAgICB9KVxuICAgICAgLm5vR2xvYmFscygpXG4gICAgICAuYWN0aW9uKCgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZUNtZCA9IHRoaXMuI2NtZCB8fCB0aGlzLmdldE1haW5Db21tYW5kKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKEZpc2hDb21wbGV0aW9uc0dlbmVyYXRvci5nZW5lcmF0ZShiYXNlQ21kKSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsT0FBTyxRQUFRLGdCQUFnQjtBQUN4QyxTQUFTLEdBQUcsRUFBRSxNQUFNLFFBQVEsYUFBYTtBQUN6QyxTQUFTLHdCQUF3QixRQUFRLG1DQUFtQztBQUU1RSx1Q0FBdUMsR0FDdkMsT0FBTyxNQUFNLCtCQUErQjtFQUMxQyxDQUFBLEdBQUksQ0FBVztFQUNmLFlBQW1CLEdBQWEsQ0FBRTtJQUNoQyxLQUFLO0lBQ0wsSUFBSSxDQUFDLENBQUEsR0FBSSxHQUFHO0lBQ1osT0FBTyxJQUFJLENBQ1IsV0FBVyxDQUFDO01BQ1gsTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFBLEdBQUksSUFBSSxJQUFJLENBQUMsY0FBYztNQUNoRCxPQUFPLENBQUM7O3VFQUV1RCxFQUM3RCxJQUFJLE9BQU8sK0JBQ1o7O0lBRUwsRUFBRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxPQUFPLEdBQUcseUJBQXlCLENBQUMsSUFBSTtJQUN0RSxHQUNDLFNBQVMsR0FDVCxNQUFNLENBQUM7TUFDTixNQUFNLFVBQVUsSUFBSSxDQUFDLENBQUEsR0FBSSxJQUFJLElBQUksQ0FBQyxjQUFjO01BQ2hELFFBQVEsR0FBRyxDQUFDLHlCQUF5QixRQUFRLENBQUM7SUFDaEQ7RUFDSjtBQUNGIn0=
+// denoCacheMetadata=14701554041105453635,15768257378385793376 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b52b0c3d0f67cabd69f0301754eb9a74af9e5c5992916f3969de2e30d80d65d6.js b/vendor/gen/https/deno.land/b52b0c3d0f67cabd69f0301754eb9a74af9e5c5992916f3969de2e30d80d65d6.js
new file mode 100644
index 0000000..c5aa3eb
--- /dev/null
+++ b/vendor/gen/https/deno.land/b52b0c3d0f67cabd69f0301754eb9a74af9e5c5992916f3969de2e30d80d65d6.js
@@ -0,0 +1,20 @@
+/**
+ * A plugin to register the filters "url" and "htmlUrl"
+ * for normalizing URLs in the templates
+ * Installed by default
+ * @see https://lume.land/plugins/url/
+ */ export function url() {
+ return (site)=>{
+ site.filter("url", url);
+ site.filter("htmlUrl", htmlUrl);
+ function url(path = "/", absolute = false) {
+ return typeof path === "string" ? site.url(path, absolute) : path;
+ }
+ function htmlUrl(html = "", absolute = false) {
+ return html.replaceAll(/\s(href|src)="([^"]+)"/g, (_match, attr, value)=>` ${attr}="${url(value, absolute)}"`);
+ }
+ };
+}
+export default url;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvcGx1Z2lucy91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgU2l0ZSBmcm9tIFwiLi4vY29yZS9zaXRlLnRzXCI7XG5cbi8qKlxuICogQSBwbHVnaW4gdG8gcmVnaXN0ZXIgdGhlIGZpbHRlcnMgXCJ1cmxcIiBhbmQgXCJodG1sVXJsXCJcbiAqIGZvciBub3JtYWxpemluZyBVUkxzIGluIHRoZSB0ZW1wbGF0ZXNcbiAqIEluc3RhbGxlZCBieSBkZWZhdWx0XG4gKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvdXJsL1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsKCkge1xuICByZXR1cm4gKHNpdGU6IFNpdGUpID0+IHtcbiAgICBzaXRlLmZpbHRlcihcInVybFwiLCB1cmwpO1xuICAgIHNpdGUuZmlsdGVyKFwiaHRtbFVybFwiLCBodG1sVXJsKTtcblxuICAgIGZ1bmN0aW9uIHVybChwYXRoID0gXCIvXCIsIGFic29sdXRlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gc2l0ZS51cmwocGF0aCwgYWJzb2x1dGUpIDogcGF0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodG1sVXJsKGh0bWwgPSBcIlwiLCBhYnNvbHV0ZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2VBbGwoXG4gICAgICAgIC9cXHMoaHJlZnxzcmMpPVwiKFteXCJdKylcIi9nLFxuICAgICAgICAoX21hdGNoLCBhdHRyLCB2YWx1ZSkgPT4gYCAke2F0dHJ9PVwiJHt1cmwodmFsdWUsIGFic29sdXRlKX1cImAsXG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXJsO1xuXG4vKiogRXh0ZW5kcyBIZWxwZXJzIGludGVyZmFjZSAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgTHVtZSB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBIZWxwZXJzIHtcbiAgICAgIC8qKiBAc2VlIGh0dHBzOi8vbHVtZS5sYW5kL3BsdWdpbnMvdXJsLyN1cmwtZmlsdGVyICovXG4gICAgICB1cmw6IChwYXRoOiBzdHJpbmcsIGFic29sdXRlPzogYm9vbGVhbikgPT4gc3RyaW5nO1xuXG4gICAgICAvKiogQHNlZSBodHRwczovL2x1bWUubGFuZC9wbHVnaW5zL3VybC8jaHRtbHVybC1maWx0ZXIgKi9cbiAgICAgIGh0bWxVcmw6IChodG1sOiBzdHJpbmcsIGFic29sdXRlPzogYm9vbGVhbikgPT4gc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7OztDQUtDLEdBQ0QsT0FBTyxTQUFTO0VBQ2QsT0FBTyxDQUFDO0lBQ04sS0FBSyxNQUFNLENBQUMsT0FBTztJQUNuQixLQUFLLE1BQU0sQ0FBQyxXQUFXO0lBRXZCLFNBQVMsSUFBSSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUs7TUFDdkMsT0FBTyxPQUFPLFNBQVMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxNQUFNLFlBQVk7SUFDL0Q7SUFFQSxTQUFTLFFBQVEsT0FBTyxFQUFFLEVBQUUsV0FBVyxLQUFLO01BQzFDLE9BQU8sS0FBSyxVQUFVLENBQ3BCLDJCQUNBLENBQUMsUUFBUSxNQUFNLFFBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxDQUFDO0lBRWpFO0VBQ0Y7QUFDRjtBQUVBLGVBQWUsSUFBSSJ9
+// denoCacheMetadata=15039142851586684729,7329129181401366926 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b5381f20d1c2d147bff9bd97bde16422d0e5869a2442912f3631d96a76eddb68.js b/vendor/gen/https/deno.land/b5381f20d1c2d147bff9bd97bde16422d0e5869a2442912f3631d96a76eddb68.js
new file mode 100644
index 0000000..daf0f70
--- /dev/null
+++ b/vendor/gen/https/deno.land/b5381f20d1c2d147bff9bd97bde16422d0e5869a2442912f3631d96a76eddb68.js
@@ -0,0 +1,45 @@
+/**
+ * Returns the date of the git commit that created or modified the file.
+ * Thanks to https://github.com/11ty/eleventy/blob/8dd2a1012de92c5ee1eab7c37e6bf1b36183927e/src/Util/DateGitLastUpdated.js
+ */ export function getGitDate(type, file) {
+ const args = type === "created" ? [
+ "log",
+ "--diff-filter=A",
+ "--follow",
+ "-1",
+ "--format=%at",
+ "--",
+ file
+ ] : [
+ "log",
+ "-1",
+ "--format=%at",
+ "--",
+ file
+ ];
+ const { stdout, success } = new Deno.Command("git", {
+ args
+ }).outputSync();
+ if (!success) {
+ return;
+ }
+ const str = new TextDecoder().decode(stdout);
+ if (str) {
+ return parseDate(parseInt(str) * 1000);
+ }
+}
+/** Parse a string or number (of miliseconds) to UTC Date */ export function parseDate(date) {
+ return new Date(getZonedDateTime(date).epochMilliseconds);
+}
+/** Parse a string or number (of miliseconds) to a zoned datetime */ export function getZonedDateTime(date, timezone = "UTC") {
+ if (typeof date === "number") {
+ return Temporal.Instant.fromEpochMilliseconds(date).toZonedDateTimeISO(timezone);
+ }
+ try {
+ return Temporal.Instant.from(date).toZonedDateTimeISO(timezone);
+ } catch {
+ return Temporal.PlainDateTime.from(date).toZonedDateTime(timezone);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9kYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJucyB0aGUgZGF0ZSBvZiB0aGUgZ2l0IGNvbW1pdCB0aGF0IGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUuXG4gKiBUaGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tLzExdHkvZWxldmVudHkvYmxvYi84ZGQyYTEwMTJkZTkyYzVlZTFlYWI3YzM3ZTZiZjFiMzYxODM5MjdlL3NyYy9VdGlsL0RhdGVHaXRMYXN0VXBkYXRlZC5qc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2l0RGF0ZShcbiAgdHlwZTogXCJjcmVhdGVkXCIgfCBcIm1vZGlmaWVkXCIsXG4gIGZpbGU6IHN0cmluZyxcbik6IERhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBhcmdzID0gdHlwZSA9PT0gXCJjcmVhdGVkXCJcbiAgICA/IFtcImxvZ1wiLCBcIi0tZGlmZi1maWx0ZXI9QVwiLCBcIi0tZm9sbG93XCIsIFwiLTFcIiwgXCItLWZvcm1hdD0lYXRcIiwgXCItLVwiLCBmaWxlXVxuICAgIDogW1wibG9nXCIsIFwiLTFcIiwgXCItLWZvcm1hdD0lYXRcIiwgXCItLVwiLCBmaWxlXTtcblxuICBjb25zdCB7IHN0ZG91dCwgc3VjY2VzcyB9ID0gbmV3IERlbm8uQ29tbWFuZChcImdpdFwiLCB7IGFyZ3MgfSkub3V0cHV0U3luYygpO1xuXG4gIGlmICghc3VjY2Vzcykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdHIgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoc3Rkb3V0KTtcblxuICBpZiAoc3RyKSB7XG4gICAgcmV0dXJuIHBhcnNlRGF0ZShwYXJzZUludChzdHIpICogMTAwMCk7XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgc3RyaW5nIG9yIG51bWJlciAob2YgbWlsaXNlY29uZHMpIHRvIFVUQyBEYXRlICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGU6IHN0cmluZyB8IG51bWJlcik6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUoZ2V0Wm9uZWREYXRlVGltZShkYXRlKS5lcG9jaE1pbGxpc2Vjb25kcyk7XG59XG5cbi8qKiBQYXJzZSBhIHN0cmluZyBvciBudW1iZXIgKG9mIG1pbGlzZWNvbmRzKSB0byBhIHpvbmVkIGRhdGV0aW1lICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9uZWREYXRlVGltZShcbiAgZGF0ZTogc3RyaW5nIHwgbnVtYmVyLFxuICB0aW1lem9uZSA9IFwiVVRDXCIsXG4pOiBUZW1wb3JhbC5ab25lZERhdGVUaW1lIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFRlbXBvcmFsLkluc3RhbnQuZnJvbUVwb2NoTWlsbGlzZWNvbmRzKGRhdGUpLnRvWm9uZWREYXRlVGltZUlTTyhcbiAgICAgIHRpbWV6b25lLFxuICAgICk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBUZW1wb3JhbC5JbnN0YW50LmZyb20oZGF0ZSkudG9ab25lZERhdGVUaW1lSVNPKHRpbWV6b25lKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluRGF0ZVRpbWUuZnJvbShkYXRlKS50b1pvbmVkRGF0ZVRpbWUodGltZXpvbmUpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLFdBQ2QsSUFBNEIsRUFDNUIsSUFBWTtFQUVaLE1BQU0sT0FBTyxTQUFTLFlBQ2xCO0lBQUM7SUFBTztJQUFtQjtJQUFZO0lBQU07SUFBZ0I7SUFBTTtHQUFLLEdBQ3hFO0lBQUM7SUFBTztJQUFNO0lBQWdCO0lBQU07R0FBSztFQUU3QyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksS0FBSyxPQUFPLENBQUMsT0FBTztJQUFFO0VBQUssR0FBRyxVQUFVO0VBRXhFLElBQUksQ0FBQyxTQUFTO0lBQ1o7RUFDRjtFQUNBLE1BQU0sTUFBTSxJQUFJLGNBQWMsTUFBTSxDQUFDO0VBRXJDLElBQUksS0FBSztJQUNQLE9BQU8sVUFBVSxTQUFTLE9BQU87RUFDbkM7QUFDRjtBQUVBLDBEQUEwRCxHQUMxRCxPQUFPLFNBQVMsVUFBVSxJQUFxQjtFQUM3QyxPQUFPLElBQUksS0FBSyxpQkFBaUIsTUFBTSxpQkFBaUI7QUFDMUQ7QUFFQSxrRUFBa0UsR0FDbEUsT0FBTyxTQUFTLGlCQUNkLElBQXFCLEVBQ3JCLFdBQVcsS0FBSztFQUVoQixJQUFJLE9BQU8sU0FBUyxVQUFVO0lBQzVCLE9BQU8sU0FBUyxPQUFPLENBQUMscUJBQXFCLENBQUMsTUFBTSxrQkFBa0IsQ0FDcEU7RUFFSjtFQUVBLElBQUk7SUFDRixPQUFPLFNBQVMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLGtCQUFrQixDQUFDO0VBQ3hELEVBQUUsT0FBTTtJQUNOLE9BQU8sU0FBUyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sZUFBZSxDQUFDO0VBQzNEO0FBQ0YifQ==
+// denoCacheMetadata=432812557858917766,13879348009945641107 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b56f203d7c983a08006eaf50209fbeea5d62c6811f25a9a7645e0e9b4272c505.js b/vendor/gen/https/deno.land/b56f203d7c983a08006eaf50209fbeea5d62c6811f25a9a7645e0e9b4272c505.js
new file mode 100644
index 0000000..3ab18ba
--- /dev/null
+++ b/vendor/gen/https/deno.land/b56f203d7c983a08006eaf50209fbeea5d62c6811f25a9a7645e0e9b4272c505.js
@@ -0,0 +1,9 @@
+import { html } from "../deps.ts";
+export default function() {
+ return (env)=>{
+ // deno-lint-ignore no-explicit-any
+ env.filters.unescape = (value)=>value ? html.unescape(value.toString()) : "";
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL3VuZXNjYXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi4vZGVwcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCwgUGx1Z2luIH0gZnJvbSBcIi4uL3NyYy9lbnZpcm9ubWVudC50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogUGx1Z2luIHtcbiAgcmV0dXJuIChlbnY6IEVudmlyb25tZW50KSA9PiB7XG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICBlbnYuZmlsdGVycy51bmVzY2FwZSA9ICh2YWx1ZTogYW55KSA9PlxuICAgICAgdmFsdWUgPyBodG1sLnVuZXNjYXBlKHZhbHVlLnRvU3RyaW5nKCkpIDogXCJcIjtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLElBQUksUUFBUSxhQUFhO0FBR2xDLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixtQ0FBbUM7SUFDbkMsSUFBSSxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsUUFDdEIsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLFFBQVEsTUFBTTtFQUM5QztBQUNGIn0=
+// denoCacheMetadata=4511259778519194580,4889977204577772516 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b6bb333bf077c1e16e7a4653e7ead93848f46feb6e87cc8be8eaab47b758df61.js b/vendor/gen/https/deno.land/b6bb333bf077c1e16e7a4653e7ead93848f46feb6e87cc8be8eaab47b758df61.js
new file mode 100644
index 0000000..21ddf26
--- /dev/null
+++ b/vendor/gen/https/deno.land/b6bb333bf077c1e16e7a4653e7ead93848f46feb6e87cc8be8eaab47b758df61.js
@@ -0,0 +1,16 @@
+import { extract, test } from "../../deps/front_matter.ts";
+import { read } from "../utils/read.ts";
+/** Load a text file. Detect and parse the front matter */ export default async function text(path) {
+ const content = await read(path, false);
+ if (test(content)) {
+ let { attrs, body } = extract(content);
+ attrs ??= {};
+ attrs.content = body;
+ return attrs;
+ }
+ return {
+ content
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9sb2FkZXJzL3RleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0cmFjdCwgdGVzdCB9IGZyb20gXCIuLi8uLi9kZXBzL2Zyb250X21hdHRlci50c1wiO1xuaW1wb3J0IHsgcmVhZCB9IGZyb20gXCIuLi91dGlscy9yZWFkLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgUmF3RGF0YSB9IGZyb20gXCIuLi9maWxlLnRzXCI7XG5cbi8qKiBMb2FkIGEgdGV4dCBmaWxlLiBEZXRlY3QgYW5kIHBhcnNlIHRoZSBmcm9udCBtYXR0ZXIgKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHRleHQocGF0aDogc3RyaW5nKTogUHJvbWlzZTxSYXdEYXRhPiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkKHBhdGgsIGZhbHNlKTtcblxuICBpZiAodGVzdChjb250ZW50KSkge1xuICAgIGxldCB7IGF0dHJzLCBib2R5IH0gPSBleHRyYWN0PFJhd0RhdGE+KGNvbnRlbnQpO1xuICAgIGF0dHJzID8/PSB7fTtcbiAgICBhdHRycy5jb250ZW50ID0gYm9keTtcblxuICAgIHJldHVybiBhdHRycztcbiAgfVxuXG4gIHJldHVybiB7IGNvbnRlbnQgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLE9BQU8sRUFBRSxJQUFJLFFBQVEsNkJBQTZCO0FBQzNELFNBQVMsSUFBSSxRQUFRLG1CQUFtQjtBQUl4Qyx3REFBd0QsR0FDeEQsZUFBZSxlQUFlLEtBQUssSUFBWTtFQUM3QyxNQUFNLFVBQVUsTUFBTSxLQUFLLE1BQU07RUFFakMsSUFBSSxLQUFLLFVBQVU7SUFDakIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFpQjtJQUN2QyxVQUFVLENBQUM7SUFDWCxNQUFNLE9BQU8sR0FBRztJQUVoQixPQUFPO0VBQ1Q7RUFFQSxPQUFPO0lBQUU7RUFBUTtBQUNuQiJ9
+// denoCacheMetadata=4535290000363525586,15167139241344147976 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b7b648aeb7bf351c40c852c4737f6347ad692730f00a61bd30037e13d6ea262f.js b/vendor/gen/https/deno.land/b7b648aeb7bf351c40c852c4737f6347ad692730f00a61bd30037e13d6ea262f.js
new file mode 100644
index 0000000..7d44aaf
--- /dev/null
+++ b/vendor/gen/https/deno.land/b7b648aeb7bf351c40c852c4737f6347ad692730f00a61bd30037e13d6ea262f.js
@@ -0,0 +1,13 @@
+/** Run a callback concurrently with all the elements of an Iterable */ export async function concurrent(iterable, iteratorFn, limit = 200) {
+ const executing = [];
+ for await (const item of iterable){
+ const p = iteratorFn(item).then(()=>executing.splice(executing.indexOf(p), 1));
+ executing.push(p);
+ if (executing.length >= limit) {
+ await Promise.race(executing);
+ }
+ }
+ await Promise.all(executing);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9jb25jdXJyZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBSdW4gYSBjYWxsYmFjayBjb25jdXJyZW50bHkgd2l0aCBhbGwgdGhlIGVsZW1lbnRzIG9mIGFuIEl0ZXJhYmxlICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uY3VycmVudDxUeXBlPihcbiAgaXRlcmFibGU6IEFzeW5jSXRlcmFibGU8VHlwZT4gfCBJdGVyYWJsZTxUeXBlPixcbiAgaXRlcmF0b3JGbjogKGFyZzogVHlwZSkgPT4gUHJvbWlzZTx1bmtub3duPixcbiAgbGltaXQgPSAyMDAsXG4pIHtcbiAgY29uc3QgZXhlY3V0aW5nOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICBjb25zdCBwOiBQcm9taXNlPHVua25vd24+ID0gaXRlcmF0b3JGbihpdGVtKS50aGVuKCgpID0+XG4gICAgICBleGVjdXRpbmcuc3BsaWNlKGV4ZWN1dGluZy5pbmRleE9mKHApLCAxKVxuICAgICk7XG5cbiAgICBleGVjdXRpbmcucHVzaChwKTtcblxuICAgIGlmIChleGVjdXRpbmcubGVuZ3RoID49IGxpbWl0KSB7XG4gICAgICBhd2FpdCBQcm9taXNlLnJhY2UoZXhlY3V0aW5nKTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChleGVjdXRpbmcpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFFQUFxRSxHQUNyRSxPQUFPLGVBQWUsV0FDcEIsUUFBOEMsRUFDOUMsVUFBMkMsRUFDM0MsUUFBUSxHQUFHO0VBRVgsTUFBTSxZQUFnQyxFQUFFO0VBRXhDLFdBQVcsTUFBTSxRQUFRLFNBQVU7SUFDakMsTUFBTSxJQUFzQixXQUFXLE1BQU0sSUFBSSxDQUFDLElBQ2hELFVBQVUsTUFBTSxDQUFDLFVBQVUsT0FBTyxDQUFDLElBQUk7SUFHekMsVUFBVSxJQUFJLENBQUM7SUFFZixJQUFJLFVBQVUsTUFBTSxJQUFJLE9BQU87TUFDN0IsTUFBTSxRQUFRLElBQUksQ0FBQztJQUNyQjtFQUNGO0VBRUEsTUFBTSxRQUFRLEdBQUcsQ0FBQztBQUNwQiJ9
+// denoCacheMetadata=17751101073593185417,6590090405431996803 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b7b9e383e5e7585d47f56e395335495e36ac227039432f2817fcbc9c673af259.js b/vendor/gen/https/deno.land/b7b9e383e5e7585d47f56e395335495e36ac227039432f2817fcbc9c673af259.js
new file mode 100644
index 0000000..7df4f44
--- /dev/null
+++ b/vendor/gen/https/deno.land/b7b9e383e5e7585d47f56e395335495e36ac227039432f2817fcbc9c673af259.js
@@ -0,0 +1,339 @@
+import { GenericInput } from "./_generic_input.ts";
+import { bold, brightBlue, dim, dirname, join, normalize, stripColor, underline } from "./deps.ts";
+import { Figures, getFiguresByKeys } from "./figures.ts";
+import { distance } from "../_utils/distance.ts";
+const sep = Deno.build.os === "windows" ? "\\" : "/";
+/** Generic input prompt representation. */ export class GenericSuggestions extends GenericInput {
+ suggestionsIndex = -1;
+ suggestionsOffset = 0;
+ suggestions = [];
+ #hasReadPermissions;
+ /**
+ * Prompt constructor.
+ * @param settings Prompt settings.
+ */ constructor(settings){
+ super({
+ ...settings,
+ keys: {
+ complete: [
+ "tab"
+ ],
+ next: [
+ "up"
+ ],
+ previous: [
+ "down"
+ ],
+ nextPage: [
+ "pageup"
+ ],
+ previousPage: [
+ "pagedown"
+ ],
+ ...settings.keys ?? {}
+ }
+ });
+ }
+ get localStorage() {
+ // Keep support for deno < 1.10.
+ if (this.settings.id && "localStorage" in window) {
+ try {
+ // deno-lint-ignore no-explicit-any
+ return window.localStorage;
+ } catch (_) {
+ // Ignore error if --location is not set.
+ }
+ }
+ return null;
+ }
+ loadSuggestions() {
+ if (this.settings.id) {
+ const json = this.localStorage?.getItem(this.settings.id);
+ const suggestions = json ? JSON.parse(json) : [];
+ if (!Array.isArray(suggestions)) {
+ return [];
+ }
+ return suggestions;
+ }
+ return [];
+ }
+ saveSuggestions(...suggestions) {
+ if (this.settings.id) {
+ this.localStorage?.setItem(this.settings.id, JSON.stringify([
+ ...suggestions,
+ ...this.loadSuggestions()
+ ].filter(uniqueSuggestions)));
+ }
+ }
+ async render() {
+ if (this.settings.files && this.#hasReadPermissions === undefined) {
+ const status = await Deno.permissions.request({
+ name: "read"
+ });
+ // disable path completion if read permissions are denied.
+ this.#hasReadPermissions = status.state === "granted";
+ }
+ await this.match();
+ return super.render();
+ }
+ async match() {
+ this.suggestions = await this.getSuggestions();
+ this.suggestionsIndex = Math.max(this.getCurrentInputValue().trim().length === 0 ? -1 : 0, Math.min(this.suggestions.length - 1, this.suggestionsIndex));
+ this.suggestionsOffset = Math.max(0, Math.min(this.suggestions.length - this.getListHeight(), this.suggestionsOffset));
+ }
+ input() {
+ return super.input() + dim(this.getSuggestion());
+ }
+ getSuggestion() {
+ return this.suggestions[this.suggestionsIndex]?.toString().substr(this.getCurrentInputValue().length) ?? "";
+ }
+ async getUserSuggestions(input) {
+ return typeof this.settings.suggestions === "function" ? await this.settings.suggestions(input) : this.settings.suggestions ?? [];
+ }
+ #isFileModeEnabled() {
+ return !!this.settings.files && this.#hasReadPermissions === true;
+ }
+ async getFileSuggestions(input) {
+ if (!this.#isFileModeEnabled()) {
+ return [];
+ }
+ const path = await Deno.stat(input).then((file)=>file.isDirectory ? input : dirname(input)).catch(()=>dirname(input));
+ return await listDir(path, this.settings.files);
+ }
+ async getSuggestions() {
+ const input = this.getCurrentInputValue();
+ const suggestions = [
+ ...this.loadSuggestions(),
+ ...await this.getUserSuggestions(input),
+ ...await this.getFileSuggestions(input)
+ ].filter(uniqueSuggestions);
+ if (!input.length) {
+ return suggestions;
+ }
+ return suggestions.filter((value)=>stripColor(value.toString()).toLowerCase().startsWith(input.toLowerCase())).sort((a, b)=>distance((a || a).toString(), input) - distance((b || b).toString(), input));
+ }
+ body() {
+ return this.getList() + this.getInfo();
+ }
+ getInfo() {
+ if (!this.settings.info) {
+ return "";
+ }
+ const selected = this.suggestionsIndex + 1;
+ const matched = this.suggestions.length;
+ const actions = [];
+ if (this.suggestions.length) {
+ if (this.settings.list) {
+ actions.push([
+ "Next",
+ getFiguresByKeys(this.settings.keys?.next ?? [])
+ ], [
+ "Previous",
+ getFiguresByKeys(this.settings.keys?.previous ?? [])
+ ], [
+ "Next Page",
+ getFiguresByKeys(this.settings.keys?.nextPage ?? [])
+ ], [
+ "Previous Page",
+ getFiguresByKeys(this.settings.keys?.previousPage ?? [])
+ ]);
+ } else {
+ actions.push([
+ "Next",
+ getFiguresByKeys(this.settings.keys?.next ?? [])
+ ], [
+ "Previous",
+ getFiguresByKeys(this.settings.keys?.previous ?? [])
+ ]);
+ }
+ actions.push([
+ "Complete",
+ getFiguresByKeys(this.settings.keys?.complete ?? [])
+ ]);
+ }
+ actions.push([
+ "Submit",
+ getFiguresByKeys(this.settings.keys?.submit ?? [])
+ ]);
+ let info = this.settings.indent;
+ if (this.suggestions.length) {
+ info += brightBlue(Figures.INFO) + bold(` ${selected}/${matched} `);
+ }
+ info += actions.map((cur)=>`${cur[0]}: ${bold(cur[1].join(" "))}`).join(", ");
+ return info;
+ }
+ getList() {
+ if (!this.suggestions.length || !this.settings.list) {
+ return "";
+ }
+ const list = [];
+ const height = this.getListHeight();
+ for(let i = this.suggestionsOffset; i < this.suggestionsOffset + height; i++){
+ list.push(this.getListItem(this.suggestions[i], this.suggestionsIndex === i));
+ }
+ if (list.length && this.settings.info) {
+ list.push("");
+ }
+ return list.join("\n");
+ }
+ /**
+ * Render option.
+ * @param value Option.
+ * @param isSelected Set to true if option is selected.
+ */ getListItem(value, isSelected) {
+ let line = this.settings.indent ?? "";
+ line += isSelected ? `${this.settings.listPointer} ` : " ";
+ if (isSelected) {
+ line += underline(this.highlight(value));
+ } else {
+ line += this.highlight(value);
+ }
+ return line;
+ }
+ /** Get suggestions row height. */ getListHeight(suggestions = this.suggestions) {
+ return Math.min(suggestions.length, this.settings.maxRows || suggestions.length);
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case this.isKey(this.settings.keys, "next", event):
+ if (this.settings.list) {
+ this.selectPreviousSuggestion();
+ } else {
+ this.selectNextSuggestion();
+ }
+ break;
+ case this.isKey(this.settings.keys, "previous", event):
+ if (this.settings.list) {
+ this.selectNextSuggestion();
+ } else {
+ this.selectPreviousSuggestion();
+ }
+ break;
+ case this.isKey(this.settings.keys, "nextPage", event):
+ if (this.settings.list) {
+ this.selectPreviousSuggestionsPage();
+ } else {
+ this.selectNextSuggestionsPage();
+ }
+ break;
+ case this.isKey(this.settings.keys, "previousPage", event):
+ if (this.settings.list) {
+ this.selectNextSuggestionsPage();
+ } else {
+ this.selectPreviousSuggestionsPage();
+ }
+ break;
+ case this.isKey(this.settings.keys, "complete", event):
+ await this.#completeValue();
+ break;
+ case this.isKey(this.settings.keys, "moveCursorRight", event):
+ if (this.inputIndex < this.inputValue.length) {
+ this.moveCursorRight();
+ } else {
+ await this.#completeValue();
+ }
+ break;
+ default:
+ await super.handleEvent(event);
+ }
+ }
+ /** Delete char right. */ deleteCharRight() {
+ if (this.inputIndex < this.inputValue.length) {
+ super.deleteCharRight();
+ if (!this.getCurrentInputValue().length) {
+ this.suggestionsIndex = -1;
+ this.suggestionsOffset = 0;
+ }
+ }
+ }
+ async #completeValue() {
+ this.inputValue = await this.complete();
+ this.inputIndex = this.inputValue.length;
+ this.suggestionsIndex = 0;
+ this.suggestionsOffset = 0;
+ }
+ async complete() {
+ let input = this.getCurrentInputValue();
+ const suggestion = this.suggestions[this.suggestionsIndex]?.toString();
+ if (this.settings.complete) {
+ input = await this.settings.complete(input, suggestion);
+ } else if (this.#isFileModeEnabled() && input.at(-1) !== sep && await isDirectory(input) && (this.getCurrentInputValue().at(-1) !== "." || this.getCurrentInputValue().endsWith(".."))) {
+ input += sep;
+ } else if (suggestion) {
+ input = suggestion;
+ }
+ return this.#isFileModeEnabled() ? normalize(input) : input;
+ }
+ /** Select previous suggestion. */ selectPreviousSuggestion() {
+ if (this.suggestions.length) {
+ if (this.suggestionsIndex > -1) {
+ this.suggestionsIndex--;
+ if (this.suggestionsIndex < this.suggestionsOffset) {
+ this.suggestionsOffset--;
+ }
+ }
+ }
+ }
+ /** Select next suggestion. */ selectNextSuggestion() {
+ if (this.suggestions.length) {
+ if (this.suggestionsIndex < this.suggestions.length - 1) {
+ this.suggestionsIndex++;
+ if (this.suggestionsIndex >= this.suggestionsOffset + this.getListHeight()) {
+ this.suggestionsOffset++;
+ }
+ }
+ }
+ }
+ /** Select previous suggestions page. */ selectPreviousSuggestionsPage() {
+ if (this.suggestions.length) {
+ const height = this.getListHeight();
+ if (this.suggestionsOffset >= height) {
+ this.suggestionsIndex -= height;
+ this.suggestionsOffset -= height;
+ } else if (this.suggestionsOffset > 0) {
+ this.suggestionsIndex -= this.suggestionsOffset;
+ this.suggestionsOffset = 0;
+ }
+ }
+ }
+ /** Select next suggestions page. */ selectNextSuggestionsPage() {
+ if (this.suggestions.length) {
+ const height = this.getListHeight();
+ if (this.suggestionsOffset + height + height < this.suggestions.length) {
+ this.suggestionsIndex += height;
+ this.suggestionsOffset += height;
+ } else if (this.suggestionsOffset + height < this.suggestions.length) {
+ const offset = this.suggestions.length - height;
+ this.suggestionsIndex += offset - this.suggestionsOffset;
+ this.suggestionsOffset = offset;
+ }
+ }
+ }
+}
+function uniqueSuggestions(value, index, self) {
+ return typeof value !== "undefined" && value !== "" && self.indexOf(value) === index;
+}
+function isDirectory(path) {
+ return Deno.stat(path).then((file)=>file.isDirectory).catch(()=>false);
+}
+async function listDir(path, mode) {
+ const fileNames = [];
+ for await (const file of Deno.readDir(path || ".")){
+ if (mode === true && (file.name.startsWith(".") || file.name.endsWith("~"))) {
+ continue;
+ }
+ const filePath = join(path, file.name);
+ if (mode instanceof RegExp && !mode.test(filePath)) {
+ continue;
+ }
+ fileNames.push(filePath);
+ }
+ return fileNames.sort(function(a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase());
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L19nZW5lcmljX3N1Z2dlc3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgS2V5Q29kZSB9IGZyb20gXCIuLi9rZXljb2RlL2tleV9jb2RlLnRzXCI7XG5pbXBvcnQge1xuICBHZW5lcmljSW5wdXQsXG4gIEdlbmVyaWNJbnB1dEtleXMsXG4gIEdlbmVyaWNJbnB1dFByb21wdE9wdGlvbnMsXG4gIEdlbmVyaWNJbnB1dFByb21wdFNldHRpbmdzLFxufSBmcm9tIFwiLi9fZ2VuZXJpY19pbnB1dC50c1wiO1xuaW1wb3J0IHtcbiAgYm9sZCxcbiAgYnJpZ2h0Qmx1ZSxcbiAgZGltLFxuICBkaXJuYW1lLFxuICBqb2luLFxuICBub3JtYWxpemUsXG4gIHN0cmlwQ29sb3IsXG4gIHVuZGVybGluZSxcbn0gZnJvbSBcIi4vZGVwcy50c1wiO1xuaW1wb3J0IHsgRmlndXJlcywgZ2V0RmlndXJlc0J5S2V5cyB9IGZyb20gXCIuL2ZpZ3VyZXMudHNcIjtcbmltcG9ydCB7IGRpc3RhbmNlIH0gZnJvbSBcIi4uL191dGlscy9kaXN0YW5jZS50c1wiO1xuXG5pbnRlcmZhY2UgTG9jYWxTdG9yYWdlIHtcbiAgZ2V0SXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGw7XG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiB2b2lkO1xuICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqIElucHV0IGtleXMgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1N1Z2dlc3Rpb25zS2V5cyBleHRlbmRzIEdlbmVyaWNJbnB1dEtleXMge1xuICBjb21wbGV0ZT86IHN0cmluZ1tdO1xuICBuZXh0Pzogc3RyaW5nW107XG4gIHByZXZpb3VzPzogc3RyaW5nW107XG4gIG5leHRQYWdlPzogc3RyaW5nW107XG4gIHByZXZpb3VzUGFnZT86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBTdWdnZXN0aW9uSGFuZGxlciA9IChcbiAgaW5wdXQ6IHN0cmluZyxcbikgPT4gQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiB8IFByb21pc2U8QXJyYXk8c3RyaW5nIHwgbnVtYmVyPj47XG5cbmV4cG9ydCB0eXBlIENvbXBsZXRlSGFuZGxlciA9IChcbiAgaW5wdXQ6IHN0cmluZyxcbiAgc3VnZ2VzdGlvbj86IHN0cmluZyxcbikgPT4gUHJvbWlzZTxzdHJpbmc+IHwgc3RyaW5nO1xuXG4vKiogR2VuZXJpYyBpbnB1dCBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1N1Z2dlc3Rpb25zT3B0aW9uczxUVmFsdWUsIFRSYXdWYWx1ZT5cbiAgZXh0ZW5kcyBHZW5lcmljSW5wdXRQcm9tcHRPcHRpb25zPFRWYWx1ZSwgVFJhd1ZhbHVlPiB7XG4gIGtleXM/OiBHZW5lcmljU3VnZ2VzdGlvbnNLZXlzO1xuICBpZD86IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM/OiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgU3VnZ2VzdGlvbkhhbmRsZXI7XG4gIGNvbXBsZXRlPzogQ29tcGxldGVIYW5kbGVyO1xuICBmaWxlcz86IGJvb2xlYW4gfCBSZWdFeHA7XG4gIGxpc3Q/OiBib29sZWFuO1xuICBpbmZvPzogYm9vbGVhbjtcbiAgbGlzdFBvaW50ZXI/OiBzdHJpbmc7XG4gIG1heFJvd3M/OiBudW1iZXI7XG59XG5cbi8qKiBHZW5lcmljIGlucHV0IHByb21wdCBzZXR0aW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1N1Z2dlc3Rpb25zU2V0dGluZ3M8VFZhbHVlLCBUUmF3VmFsdWU+XG4gIGV4dGVuZHMgR2VuZXJpY0lucHV0UHJvbXB0U2V0dGluZ3M8VFZhbHVlLCBUUmF3VmFsdWU+IHtcbiAga2V5cz86IEdlbmVyaWNTdWdnZXN0aW9uc0tleXM7XG4gIGlkPzogc3RyaW5nO1xuICBzdWdnZXN0aW9ucz86IEFycmF5PHN0cmluZyB8IG51bWJlcj4gfCBTdWdnZXN0aW9uSGFuZGxlcjtcbiAgY29tcGxldGU/OiBDb21wbGV0ZUhhbmRsZXI7XG4gIGZpbGVzPzogYm9vbGVhbiB8IFJlZ0V4cDtcbiAgbGlzdD86IGJvb2xlYW47XG4gIGluZm8/OiBib29sZWFuO1xuICBsaXN0UG9pbnRlcjogc3RyaW5nO1xuICBtYXhSb3dzOiBudW1iZXI7XG59XG5cbmNvbnN0IHNlcCA9IERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiID8gXCJcXFxcXCIgOiBcIi9cIjtcblxuLyoqIEdlbmVyaWMgaW5wdXQgcHJvbXB0IHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNTdWdnZXN0aW9uczxcbiAgVFZhbHVlLFxuICBUUmF3VmFsdWUsXG4gIFRTZXR0aW5ncyBleHRlbmRzIEdlbmVyaWNTdWdnZXN0aW9uc1NldHRpbmdzPFRWYWx1ZSwgVFJhd1ZhbHVlPixcbj4gZXh0ZW5kcyBHZW5lcmljSW5wdXQ8VFZhbHVlLCBUUmF3VmFsdWUsIFRTZXR0aW5ncz4ge1xuICBwcm90ZWN0ZWQgc3VnZ2VzdGlvbnNJbmRleCA9IC0xO1xuICBwcm90ZWN0ZWQgc3VnZ2VzdGlvbnNPZmZzZXQgPSAwO1xuICBwcm90ZWN0ZWQgc3VnZ2VzdGlvbnM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXTtcbiAgI2hhc1JlYWRQZXJtaXNzaW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb21wdCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHNldHRpbmdzIFByb21wdCBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihzZXR0aW5nczogVFNldHRpbmdzKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICBrZXlzOiB7XG4gICAgICAgIGNvbXBsZXRlOiBbXCJ0YWJcIl0sXG4gICAgICAgIG5leHQ6IFtcInVwXCJdLFxuICAgICAgICBwcmV2aW91czogW1wiZG93blwiXSxcbiAgICAgICAgbmV4dFBhZ2U6IFtcInBhZ2V1cFwiXSxcbiAgICAgICAgcHJldmlvdXNQYWdlOiBbXCJwYWdlZG93blwiXSxcbiAgICAgICAgLi4uKHNldHRpbmdzLmtleXMgPz8ge30pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgbG9jYWxTdG9yYWdlKCk6IExvY2FsU3RvcmFnZSB8IG51bGwge1xuICAgIC8vIEtlZXAgc3VwcG9ydCBmb3IgZGVubyA8IDEuMTAuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuaWQgJiYgXCJsb2NhbFN0b3JhZ2VcIiBpbiB3aW5kb3cpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAod2luZG93IGFzIGFueSkubG9jYWxTdG9yYWdlO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3IgaWYgLS1sb2NhdGlvbiBpcyBub3Qgc2V0LlxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBsb2FkU3VnZ2VzdGlvbnMoKTogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuaWQpIHtcbiAgICAgIGNvbnN0IGpzb24gPSB0aGlzLmxvY2FsU3RvcmFnZT8uZ2V0SXRlbSh0aGlzLnNldHRpbmdzLmlkKTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0ganNvbiA/IEpTT04ucGFyc2UoanNvbikgOiBbXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZVN1Z2dlc3Rpb25zKC4uLnN1Z2dlc3Rpb25zOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuaWQpIHtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlPy5zZXRJdGVtKFxuICAgICAgICB0aGlzLnNldHRpbmdzLmlkLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgLi4udGhpcy5sb2FkU3VnZ2VzdGlvbnMoKSxcbiAgICAgICAgXS5maWx0ZXIodW5pcXVlU3VnZ2VzdGlvbnMpKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5maWxlcyAmJiB0aGlzLiNoYXNSZWFkUGVybWlzc2lvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgRGVuby5wZXJtaXNzaW9ucy5yZXF1ZXN0KHsgbmFtZTogXCJyZWFkXCIgfSk7XG4gICAgICAvLyBkaXNhYmxlIHBhdGggY29tcGxldGlvbiBpZiByZWFkIHBlcm1pc3Npb25zIGFyZSBkZW5pZWQuXG4gICAgICB0aGlzLiNoYXNSZWFkUGVybWlzc2lvbnMgPSBzdGF0dXMuc3RhdGUgPT09IFwiZ3JhbnRlZFwiO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLm1hdGNoKCk7XG4gICAgcmV0dXJuIHN1cGVyLnJlbmRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG1hdGNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBhd2FpdCB0aGlzLmdldFN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5zdWdnZXN0aW9uc0luZGV4ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmdldEN1cnJlbnRJbnB1dFZhbHVlKCkudHJpbSgpLmxlbmd0aCA9PT0gMCA/IC0xIDogMCxcbiAgICAgIE1hdGgubWluKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSwgdGhpcy5zdWdnZXN0aW9uc0luZGV4KSxcbiAgICApO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSB0aGlzLmdldExpc3RIZWlnaHQoKSxcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc09mZnNldCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnB1dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXBlci5pbnB1dCgpICsgZGltKHRoaXMuZ2V0U3VnZ2VzdGlvbigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdWdnZXN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zdWdnZXN0aW9uc0luZGV4XT8udG9TdHJpbmcoKVxuICAgICAgLnN1YnN0cihcbiAgICAgICAgdGhpcy5nZXRDdXJyZW50SW5wdXRWYWx1ZSgpLmxlbmd0aCxcbiAgICAgICkgPz8gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRVc2VyU3VnZ2VzdGlvbnMoXG4gICAgaW5wdXQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxBcnJheTxzdHJpbmcgfCBudW1iZXI+PiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnNldHRpbmdzLnN1Z2dlc3Rpb25zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gYXdhaXQgdGhpcy5zZXR0aW5ncy5zdWdnZXN0aW9ucyhpbnB1dClcbiAgICAgIDogdGhpcy5zZXR0aW5ncy5zdWdnZXN0aW9ucyA/PyBbXTtcbiAgfVxuXG4gICNpc0ZpbGVNb2RlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnNldHRpbmdzLmZpbGVzICYmIHRoaXMuI2hhc1JlYWRQZXJtaXNzaW9ucyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRGaWxlU3VnZ2VzdGlvbnMoXG4gICAgaW5wdXQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxBcnJheTxzdHJpbmcgfCBudW1iZXI+PiB7XG4gICAgaWYgKCF0aGlzLiNpc0ZpbGVNb2RlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IERlbm8uc3RhdChpbnB1dClcbiAgICAgIC50aGVuKChmaWxlKSA9PiBmaWxlLmlzRGlyZWN0b3J5ID8gaW5wdXQgOiBkaXJuYW1lKGlucHV0KSlcbiAgICAgIC5jYXRjaCgoKSA9PiBkaXJuYW1lKGlucHV0KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgbGlzdERpcihwYXRoLCB0aGlzLnNldHRpbmdzLmZpbGVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRTdWdnZXN0aW9ucygpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IG51bWJlcj4+IHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0Q3VycmVudElucHV0VmFsdWUoKTtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgIC4uLnRoaXMubG9hZFN1Z2dlc3Rpb25zKCksXG4gICAgICAuLi5hd2FpdCB0aGlzLmdldFVzZXJTdWdnZXN0aW9ucyhpbnB1dCksXG4gICAgICAuLi5hd2FpdCB0aGlzLmdldEZpbGVTdWdnZXN0aW9ucyhpbnB1dCksXG4gICAgXS5maWx0ZXIodW5pcXVlU3VnZ2VzdGlvbnMpO1xuXG4gICAgaWYgKCFpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gc3VnZ2VzdGlvbnNcbiAgICAgIC5maWx0ZXIoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgICAgIHN0cmlwQ29sb3IodmFsdWUudG9TdHJpbmcoKSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5zdGFydHNXaXRoKGlucHV0LnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAuc29ydCgoYTogc3RyaW5nIHwgbnVtYmVyLCBiOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgICAgIGRpc3RhbmNlKChhIHx8IGEpLnRvU3RyaW5nKCksIGlucHV0KSAtXG4gICAgICAgIGRpc3RhbmNlKChiIHx8IGIpLnRvU3RyaW5nKCksIGlucHV0KVxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBib2R5KCk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdCgpICsgdGhpcy5nZXRJbmZvKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SW5mbygpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5pbmZvKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWQ6IG51bWJlciA9IHRoaXMuc3VnZ2VzdGlvbnNJbmRleCArIDE7XG4gICAgY29uc3QgbWF0Y2hlZDogbnVtYmVyID0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGg7XG4gICAgY29uc3QgYWN0aW9uczogQXJyYXk8W3N0cmluZywgQXJyYXk8c3RyaW5nPl0+ID0gW107XG5cbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxpc3QpIHtcbiAgICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAgIFtcIk5leHRcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/Lm5leHQgPz8gW10pXSxcbiAgICAgICAgICBbXCJQcmV2aW91c1wiLCBnZXRGaWd1cmVzQnlLZXlzKHRoaXMuc2V0dGluZ3Mua2V5cz8ucHJldmlvdXMgPz8gW10pXSxcbiAgICAgICAgICBbXCJOZXh0IFBhZ2VcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/Lm5leHRQYWdlID8/IFtdKV0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgXCJQcmV2aW91cyBQYWdlXCIsXG4gICAgICAgICAgICBnZXRGaWd1cmVzQnlLZXlzKHRoaXMuc2V0dGluZ3Mua2V5cz8ucHJldmlvdXNQYWdlID8/IFtdKSxcbiAgICAgICAgICBdLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAgIFtcIk5leHRcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/Lm5leHQgPz8gW10pXSxcbiAgICAgICAgICBbXCJQcmV2aW91c1wiLCBnZXRGaWd1cmVzQnlLZXlzKHRoaXMuc2V0dGluZ3Mua2V5cz8ucHJldmlvdXMgPz8gW10pXSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgW1wiQ29tcGxldGVcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/LmNvbXBsZXRlID8/IFtdKV0sXG4gICAgICApO1xuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goXG4gICAgICBbXCJTdWJtaXRcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/LnN1Ym1pdCA/PyBbXSldLFxuICAgICk7XG5cbiAgICBsZXQgaW5mbyA9IHRoaXMuc2V0dGluZ3MuaW5kZW50O1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgaW5mbyArPSBicmlnaHRCbHVlKEZpZ3VyZXMuSU5GTykgKyBib2xkKGAgJHtzZWxlY3RlZH0vJHttYXRjaGVkfSBgKTtcbiAgICB9XG4gICAgaW5mbyArPSBhY3Rpb25zXG4gICAgICAubWFwKChjdXIpID0+IGAke2N1clswXX06ICR7Ym9sZChjdXJbMV0uam9pbihcIiBcIikpfWApXG4gICAgICAuam9pbihcIiwgXCIpO1xuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGlzdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggfHwgIXRoaXMuc2V0dGluZ3MubGlzdCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IGxpc3Q6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBoZWlnaHQ6IG51bWJlciA9IHRoaXMuZ2V0TGlzdEhlaWdodCgpO1xuICAgIGZvciAoXG4gICAgICBsZXQgaSA9IHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQ7XG4gICAgICBpIDwgdGhpcy5zdWdnZXN0aW9uc09mZnNldCArIGhlaWdodDtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgbGlzdC5wdXNoKFxuICAgICAgICB0aGlzLmdldExpc3RJdGVtKFxuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNbaV0sXG4gICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0luZGV4ID09PSBpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGxpc3QubGVuZ3RoICYmIHRoaXMuc2V0dGluZ3MuaW5mbykge1xuICAgICAgbGlzdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdC5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBvcHRpb24uXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgICAgT3B0aW9uLlxuICAgKiBAcGFyYW0gaXNTZWxlY3RlZCAgU2V0IHRvIHRydWUgaWYgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldExpc3RJdGVtKFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgaXNTZWxlY3RlZD86IGJvb2xlYW4sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGxpbmUgPSB0aGlzLnNldHRpbmdzLmluZGVudCA/PyBcIlwiO1xuICAgIGxpbmUgKz0gaXNTZWxlY3RlZCA/IGAke3RoaXMuc2V0dGluZ3MubGlzdFBvaW50ZXJ9IGAgOiBcIiAgXCI7XG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIGxpbmUgKz0gdW5kZXJsaW5lKHRoaXMuaGlnaGxpZ2h0KHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmUgKz0gdGhpcy5oaWdobGlnaHQodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIC8qKiBHZXQgc3VnZ2VzdGlvbnMgcm93IGhlaWdodC4gKi9cbiAgcHJvdGVjdGVkIGdldExpc3RIZWlnaHQoXG4gICAgc3VnZ2VzdGlvbnM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSB0aGlzLnN1Z2dlc3Rpb25zLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgIHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICAgIHRoaXMuc2V0dGluZ3MubWF4Um93cyB8fCBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdXNlciBpbnB1dCBldmVudC5cbiAgICogQHBhcmFtIGV2ZW50IEtleSBldmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVFdmVudChldmVudDogS2V5Q29kZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJuZXh0XCIsIGV2ZW50KTpcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubGlzdCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNTdWdnZXN0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3ROZXh0U3VnZ2VzdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJwcmV2aW91c1wiLCBldmVudCk6XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxpc3QpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE5leHRTdWdnZXN0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RQcmV2aW91c1N1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwibmV4dFBhZ2VcIiwgZXZlbnQpOlxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5saXN0KSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RQcmV2aW91c1N1Z2dlc3Rpb25zUGFnZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dFN1Z2dlc3Rpb25zUGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJwcmV2aW91c1BhZ2VcIiwgZXZlbnQpOlxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5saXN0KSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3ROZXh0U3VnZ2VzdGlvbnNQYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RQcmV2aW91c1N1Z2dlc3Rpb25zUGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJjb21wbGV0ZVwiLCBldmVudCk6XG4gICAgICAgIGF3YWl0IHRoaXMuI2NvbXBsZXRlVmFsdWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuaXNLZXkodGhpcy5zZXR0aW5ncy5rZXlzLCBcIm1vdmVDdXJzb3JSaWdodFwiLCBldmVudCk6XG4gICAgICAgIGlmICh0aGlzLmlucHV0SW5kZXggPCB0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yUmlnaHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiNjb21wbGV0ZVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhd2FpdCBzdXBlci5oYW5kbGVFdmVudChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGV0ZSBjaGFyIHJpZ2h0LiAqL1xuICBwcm90ZWN0ZWQgZGVsZXRlQ2hhclJpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0SW5kZXggPCB0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICBzdXBlci5kZWxldGVDaGFyUmlnaHQoKTtcbiAgICAgIGlmICghdGhpcy5nZXRDdXJyZW50SW5wdXRWYWx1ZSgpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc09mZnNldCA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgI2NvbXBsZXRlVmFsdWUoKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gYXdhaXQgdGhpcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaW5wdXRJbmRleCA9IHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5zdWdnZXN0aW9uc0luZGV4ID0gMDtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0ID0gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wbGV0ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBpbnB1dDogc3RyaW5nID0gdGhpcy5nZXRDdXJyZW50SW5wdXRWYWx1ZSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXNcbiAgICAgIC5zdWdnZXN0aW9uc1t0aGlzLnN1Z2dlc3Rpb25zSW5kZXhdPy50b1N0cmluZygpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29tcGxldGUpIHtcbiAgICAgIGlucHV0ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5jb21wbGV0ZShpbnB1dCwgc3VnZ2VzdGlvbik7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuI2lzRmlsZU1vZGVFbmFibGVkKCkgJiZcbiAgICAgIGlucHV0LmF0KC0xKSAhPT0gc2VwICYmXG4gICAgICBhd2FpdCBpc0RpcmVjdG9yeShpbnB1dCkgJiZcbiAgICAgIChcbiAgICAgICAgdGhpcy5nZXRDdXJyZW50SW5wdXRWYWx1ZSgpLmF0KC0xKSAhPT0gXCIuXCIgfHxcbiAgICAgICAgdGhpcy5nZXRDdXJyZW50SW5wdXRWYWx1ZSgpLmVuZHNXaXRoKFwiLi5cIilcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlucHV0ICs9IHNlcDtcbiAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24pIHtcbiAgICAgIGlucHV0ID0gc3VnZ2VzdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jaXNGaWxlTW9kZUVuYWJsZWQoKSA/IG5vcm1hbGl6ZShpbnB1dCkgOiBpbnB1dDtcbiAgfVxuXG4gIC8qKiBTZWxlY3QgcHJldmlvdXMgc3VnZ2VzdGlvbi4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdFByZXZpb3VzU3VnZ2VzdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zSW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zSW5kZXgtLTtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNJbmRleCA8IHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQpIHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0LS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogU2VsZWN0IG5leHQgc3VnZ2VzdGlvbi4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdE5leHRTdWdnZXN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNJbmRleCA8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zSW5kZXgrKztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNJbmRleCA+PVxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc09mZnNldCArIHRoaXMuZ2V0TGlzdEhlaWdodCgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3QgcHJldmlvdXMgc3VnZ2VzdGlvbnMgcGFnZS4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdFByZXZpb3VzU3VnZ2VzdGlvbnNQYWdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaGVpZ2h0OiBudW1iZXIgPSB0aGlzLmdldExpc3RIZWlnaHQoKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0ID49IGhlaWdodCkge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zSW5kZXggLT0gaGVpZ2h0O1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0IC09IGhlaWdodDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zdWdnZXN0aW9uc09mZnNldCA+IDApIHtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0luZGV4IC09IHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQ7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3QgbmV4dCBzdWdnZXN0aW9ucyBwYWdlLiAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0TmV4dFN1Z2dlc3Rpb25zUGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGhlaWdodDogbnVtYmVyID0gdGhpcy5nZXRMaXN0SGVpZ2h0KCk7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc09mZnNldCArIGhlaWdodCArIGhlaWdodCA8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNJbmRleCArPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNPZmZzZXQgKz0gaGVpZ2h0O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0ICsgaGVpZ2h0IDwgdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNJbmRleCArPSBvZmZzZXQgLSB0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0O1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmlxdWVTdWdnZXN0aW9ucyhcbiAgdmFsdWU6IHVua25vd24sXG4gIGluZGV4OiBudW1iZXIsXG4gIHNlbGY6IEFycmF5PHVua25vd24+LFxuKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgIT09IFwiXCIgJiZcbiAgICBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbn1cblxuZnVuY3Rpb24gaXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBEZW5vLnN0YXQocGF0aClcbiAgICAudGhlbigoZmlsZSkgPT4gZmlsZS5pc0RpcmVjdG9yeSlcbiAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0RGlyKFxuICBwYXRoOiBzdHJpbmcsXG4gIG1vZGU/OiBib29sZWFuIHwgUmVnRXhwLFxuKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gIGNvbnN0IGZpbGVOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IGZpbGUgb2YgRGVuby5yZWFkRGlyKHBhdGggfHwgXCIuXCIpKSB7XG4gICAgaWYgKFxuICAgICAgbW9kZSA9PT0gdHJ1ZSAmJiAoZmlsZS5uYW1lLnN0YXJ0c1dpdGgoXCIuXCIpIHx8IGZpbGUubmFtZS5lbmRzV2l0aChcIn5cIikpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHBhdGgsIGZpbGUubmFtZSk7XG5cbiAgICBpZiAobW9kZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhbW9kZS50ZXN0KGZpbGVQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZpbGVOYW1lcy5wdXNoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBmaWxlTmFtZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxTQUNFLFlBQVksUUFJUCxzQkFBc0I7QUFDN0IsU0FDRSxJQUFJLEVBQ0osVUFBVSxFQUNWLEdBQUcsRUFDSCxPQUFPLEVBQ1AsSUFBSSxFQUNKLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxRQUNKLFlBQVk7QUFDbkIsU0FBUyxPQUFPLEVBQUUsZ0JBQWdCLFFBQVEsZUFBZTtBQUN6RCxTQUFTLFFBQVEsUUFBUSx3QkFBd0I7QUFzRGpELE1BQU0sTUFBTSxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssWUFBWSxPQUFPO0FBRWpELHlDQUF5QyxHQUN6QyxPQUFPLE1BQWUsMkJBSVo7RUFDRSxtQkFBbUIsQ0FBQyxFQUFFO0VBQ3RCLG9CQUFvQixFQUFFO0VBQ3RCLGNBQXNDLEVB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
+// denoCacheMetadata=2672763542856384048,5208671079791958977 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/b92b8334e101357a25eaa93990b6e43be520eaf83c20b3addaae80feea4cf623.js b/vendor/gen/https/deno.land/b92b8334e101357a25eaa93990b6e43be520eaf83c20b3addaae80feea4cf623.js
new file mode 100644
index 0000000..fa0956d
--- /dev/null
+++ b/vendor/gen/https/deno.land/b92b8334e101357a25eaa93990b6e43be520eaf83c20b3addaae80feea4cf623.js
@@ -0,0 +1,6 @@
+/** Alias method for Number constructor. */ // deno-lint-ignore no-explicit-any
+export function parseNumber(value) {
+ return Number(value);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L191dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQWxpYXMgbWV0aG9kIGZvciBOdW1iZXIgY29uc3RydWN0b3IuICovXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUMsR0FDekMsbUNBQW1DO0FBQ25DLE9BQU8sU0FBUyxZQUFZLEtBQVU7RUFDcEMsT0FBTyxPQUFPO0FBQ2hCIn0=
+// denoCacheMetadata=16128713821098984831,12042923784009111353 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/bbec36a1ca77b6c7e202b4e56f361584a2bf7cbe94fd74766b08df51542f3ae0.js b/vendor/gen/https/deno.land/bbec36a1ca77b6c7e202b4e56f361584a2bf7cbe94fd74766b08df51542f3ae0.js
new file mode 100644
index 0000000..b8bf9a1
--- /dev/null
+++ b/vendor/gen/https/deno.land/bbec36a1ca77b6c7e202b4e56f361584a2bf7cbe94fd74766b08df51542f3ae0.js
@@ -0,0 +1,63 @@
+import { Command, CompletionsCommand } from "./deps/cliffy.ts";
+import { getCurrentVersion } from "./core/utils/lume_version.ts";
+const upgrade = new Command().description("Upgrade your Lume executable to the latest version.").option("--version <version:string>", "The version to upgrade to.").option("-d, --dev", "Install the latest development version (last Git commit).").example("lume upgrade -g", "Upgrades to the latest stable version.").example("lume upgrade --dev", "Upgrades to the latest development version.").action(async ({ dev, version })=>{
+ const { default: upgrade } = await import("./cli/upgrade.ts");
+ await upgrade(dev, version);
+});
+const create = new Command().description("Run an archetype to create more files.").example("lume new post 'Post title'", "Create a new post file using the _archetypes/post.ts archetype.")// @ts-ignore: todo: fix this
+.action(async ({ config }, name, ...args)=>{
+ const { create } = await import("./cli/create.ts");
+ await create(config, name, args);
+});
+const run = new Command().description("Run one or more scripts from the config file.").example("lume run deploy", "Runs the `deploy` script.").example("lume run deploy --config=_config.ts", "Runs the `deploy` script from the _config.ts file.").example("lume run build deploy", "Runs the `build` and `deploy` scripts.").option("--config <config:string>", "The config file path.").option("--src <src:string>", "The source directory for your site.", {
+ default: "./"
+}).option("--dest <dest:string>", "The build destination.", {
+ default: "_site"
+}).option("--location <location>", "The URL location of the site.", {
+ default: "http://localhost"
+}).action(async ({ config }, ...scripts)=>{
+ const { run } = await import("./cli/run.ts");
+ await run(config, scripts);
+});
+const cms = new Command().description("Run Lume CMS.").option("--config <config:string>", "The config file path.").option("--src <src:string>", "The source directory for your site.", {
+ default: "./"
+}).option("--dest <dest:string>", "The build destination.", {
+ default: "_site"
+}).option("--location <location>", "The URL location of the site.", {
+ default: "http://localhost"
+}).option("-p, --port <port:number>", "The port where the server runs.", {
+ default: 3000
+}).option("--hostname <hostname>", "The hostname where the server runs.", {
+ default: "localhost"
+}).option("-o, --open", "Open the CMS in a browser.").action(async ({ config })=>{
+ const { runCms } = await import("./cli/cms.ts");
+ runCms(config);
+});
+const lume = new Command().name("🔥lume").version(()=>getCurrentVersion()).description("A static site generator for Deno. \nDocs: https://lume.land").example("lume", "Builds the site.").example("lume --serve", "Serves the site in localhost.").example("lume upgrade", "Upgrades Lume to the latest version.").example("lume run <script>", "Runs a custom script.").example("lume [COMMAND] --help", "Shows the help for a command.").option("--config <config:string>", "The config file path.").option("--src <src:string>", "The source directory for your site.", {
+ default: "./"
+}).option("--dest <dest:string>", "The build destination.", {
+ default: "_site"
+}).option("--location <type:string>", "The URL location of the site.", {
+ default: "http://localhost"
+}).option("-s, --serve", "Start a live-reloading web server and watch changes.").option("-p, --port <port:number>", "The port where the server runs.", {
+ default: 3000
+}).option("--hostname <hostname>", "The hostname where the server runs.", {
+ default: "localhost"
+}).option("-o, --open", "Open the site in a browser.", {
+ depends: [
+ "serve"
+ ]
+}).option("-w, --watch", "Build and watch changes.").action(async ({ config, serve, watch })=>{
+ const { build } = await import("./cli/build.ts");
+ build(config, serve, watch);
+}).command("new <archetype> [arguments...]", create).command("upgrade", upgrade).command("run <script...>", run).command("cms", cms).command("completions", new CompletionsCommand());
+try {
+ await lume.parse(Deno.args);
+} catch (error) {
+ console.error(Deno.inspect(error, {
+ colors: true
+ }));
+ Deno.exit(1);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIENvbXBsZXRpb25zQ29tbWFuZCB9IGZyb20gXCIuL2RlcHMvY2xpZmZ5LnRzXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50VmVyc2lvbiB9IGZyb20gXCIuL2NvcmUvdXRpbHMvbHVtZV92ZXJzaW9uLnRzXCI7XG5cbmNvbnN0IHVwZ3JhZGUgPSBuZXcgQ29tbWFuZCgpXG4gIC5kZXNjcmlwdGlvbihcIlVwZ3JhZGUgeW91ciBMdW1lIGV4ZWN1dGFibGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLlwiKVxuICAub3B0aW9uKFxuICAgIFwiLS12ZXJzaW9uIDx2ZXJzaW9uOnN0cmluZz5cIixcbiAgICBcIlRoZSB2ZXJzaW9uIHRvIHVwZ3JhZGUgdG8uXCIsXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi1kLCAtLWRldlwiLFxuICAgIFwiSW5zdGFsbCB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IHZlcnNpb24gKGxhc3QgR2l0IGNvbW1pdCkuXCIsXG4gIClcbiAgLmV4YW1wbGUoXCJsdW1lIHVwZ3JhZGUgLWdcIiwgXCJVcGdyYWRlcyB0byB0aGUgbGF0ZXN0IHN0YWJsZSB2ZXJzaW9uLlwiKVxuICAuZXhhbXBsZShcImx1bWUgdXBncmFkZSAtLWRldlwiLCBcIlVwZ3JhZGVzIHRvIHRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgdmVyc2lvbi5cIilcbiAgLmFjdGlvbihhc3luYyAoeyBkZXYsIHZlcnNpb24gfSkgPT4ge1xuICAgIGNvbnN0IHsgZGVmYXVsdDogdXBncmFkZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jbGkvdXBncmFkZS50c1wiKTtcbiAgICBhd2FpdCB1cGdyYWRlKGRldiwgdmVyc2lvbik7XG4gIH0pO1xuXG5jb25zdCBjcmVhdGUgPSBuZXcgQ29tbWFuZCgpXG4gIC5kZXNjcmlwdGlvbihcIlJ1biBhbiBhcmNoZXR5cGUgdG8gY3JlYXRlIG1vcmUgZmlsZXMuXCIpXG4gIC5leGFtcGxlKFxuICAgIFwibHVtZSBuZXcgcG9zdCAnUG9zdCB0aXRsZSdcIixcbiAgICBcIkNyZWF0ZSBhIG5ldyBwb3N0IGZpbGUgdXNpbmcgdGhlIF9hcmNoZXR5cGVzL3Bvc3QudHMgYXJjaGV0eXBlLlwiLFxuICApXG4gIC8vIEB0cy1pZ25vcmU6IHRvZG86IGZpeCB0aGlzXG4gIC5hY3Rpb24oYXN5bmMgKHsgY29uZmlnIH0sIG5hbWUsIC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jbGkvY3JlYXRlLnRzXCIpO1xuICAgIGF3YWl0IGNyZWF0ZShjb25maWcsIG5hbWUsIGFyZ3MpO1xuICB9KTtcblxuY29uc3QgcnVuID0gbmV3IENvbW1hbmQoKVxuICAuZGVzY3JpcHRpb24oXCJSdW4gb25lIG9yIG1vcmUgc2NyaXB0cyBmcm9tIHRoZSBjb25maWcgZmlsZS5cIilcbiAgLmV4YW1wbGUoXG4gICAgXCJsdW1lIHJ1biBkZXBsb3lcIixcbiAgICBcIlJ1bnMgdGhlIGBkZXBsb3lgIHNjcmlwdC5cIixcbiAgKVxuICAuZXhhbXBsZShcbiAgICBcImx1bWUgcnVuIGRlcGxveSAtLWNvbmZpZz1fY29uZmlnLnRzXCIsXG4gICAgXCJSdW5zIHRoZSBgZGVwbG95YCBzY3JpcHQgZnJvbSB0aGUgX2NvbmZpZy50cyBmaWxlLlwiLFxuICApXG4gIC5leGFtcGxlKFxuICAgIFwibHVtZSBydW4gYnVpbGQgZGVwbG95XCIsXG4gICAgXCJSdW5zIHRoZSBgYnVpbGRgIGFuZCBgZGVwbG95YCBzY3JpcHRzLlwiLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbmZpZyA8Y29uZmlnOnN0cmluZz5cIixcbiAgICBcIlRoZSBjb25maWcgZmlsZSBwYXRoLlwiLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLXNyYyA8c3JjOnN0cmluZz5cIixcbiAgICBcIlRoZSBzb3VyY2UgZGlyZWN0b3J5IGZvciB5b3VyIHNpdGUuXCIsXG4gICAgeyBkZWZhdWx0OiBcIi4vXCIgfSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1kZXN0IDxkZXN0OnN0cmluZz5cIixcbiAgICBcIlRoZSBidWlsZCBkZXN0aW5hdGlvbi5cIixcbiAgICB7IGRlZmF1bHQ6IFwiX3NpdGVcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLWxvY2F0aW9uIDxsb2NhdGlvbj5cIixcbiAgICBcIlRoZSBVUkwgbG9jYXRpb24gb2YgdGhlIHNpdGUuXCIsXG4gICAgeyBkZWZhdWx0OiBcImh0dHA6Ly9sb2NhbGhvc3RcIiB9LFxuICApXG4gIC5hY3Rpb24oYXN5bmMgKHsgY29uZmlnIH0sIC4uLnNjcmlwdHMpID0+IHtcbiAgICBjb25zdCB7IHJ1biB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jbGkvcnVuLnRzXCIpO1xuICAgIGF3YWl0IHJ1bihjb25maWcsIHNjcmlwdHMpO1xuICB9KTtcblxuY29uc3QgY21zID0gbmV3IENvbW1hbmQoKVxuICAuZGVzY3JpcHRpb24oXCJSdW4gTHVtZSBDTVMuXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbmZpZyA8Y29uZmlnOnN0cmluZz5cIixcbiAgICBcIlRoZSBjb25maWcgZmlsZSBwYXRoLlwiLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLXNyYyA8c3JjOnN0cmluZz5cIixcbiAgICBcIlRoZSBzb3VyY2UgZGlyZWN0b3J5IGZvciB5b3VyIHNpdGUuXCIsXG4gICAgeyBkZWZhdWx0OiBcIi4vXCIgfSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1kZXN0IDxkZXN0OnN0cmluZz5cIixcbiAgICBcIlRoZSBidWlsZCBkZXN0aW5hdGlvbi5cIixcbiAgICB7IGRlZmF1bHQ6IFwiX3NpdGVcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLWxvY2F0aW9uIDxsb2NhdGlvbj5cIixcbiAgICBcIlRoZSBVUkwgbG9jYXRpb24gb2YgdGhlIHNpdGUuXCIsXG4gICAgeyBkZWZhdWx0OiBcImh0dHA6Ly9sb2NhbGhvc3RcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItcCwgLS1wb3J0IDxwb3J0Om51bWJlcj5cIixcbiAgICBcIlRoZSBwb3J0IHdoZXJlIHRoZSBzZXJ2ZXIgcnVucy5cIixcbiAgICB7IGRlZmF1bHQ6IDMwMDAgfSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1ob3N0bmFtZSA8aG9zdG5hbWU+XCIsXG4gICAgXCJUaGUgaG9zdG5hbWUgd2hlcmUgdGhlIHNlcnZlciBydW5zLlwiLFxuICAgIHsgZGVmYXVsdDogXCJsb2NhbGhvc3RcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItbywgLS1vcGVuXCIsXG4gICAgXCJPcGVuIHRoZSBDTVMgaW4gYSBicm93c2VyLlwiLFxuICApXG4gIC5hY3Rpb24oYXN5bmMgKHsgY29uZmlnIH0pID0+IHtcbiAgICBjb25zdCB7IHJ1bkNtcyB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jbGkvY21zLnRzXCIpO1xuICAgIHJ1bkNtcyhjb25maWcpO1xuICB9KTtcblxuY29uc3QgbHVtZSA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCLwn5SlbHVtZVwiKVxuICAudmVyc2lvbigoKSA9PiBnZXRDdXJyZW50VmVyc2lvbigpKVxuICAuZGVzY3JpcHRpb24oXG4gICAgXCJBIHN0YXRpYyBzaXRlIGdlbmVyYXRvciBmb3IgRGVuby4gXFxuRG9jczogaHR0cHM6Ly9sdW1lLmxhbmRcIixcbiAgKVxuICAuZXhhbXBsZShcImx1bWVcIiwgXCJCdWlsZHMgdGhlIHNpdGUuXCIpXG4gIC5leGFtcGxlKFwibHVtZSAtLXNlcnZlXCIsIFwiU2VydmVzIHRoZSBzaXRlIGluIGxvY2FsaG9zdC5cIilcbiAgLmV4YW1wbGUoXCJsdW1lIHVwZ3JhZGVcIiwgXCJVcGdyYWRlcyBMdW1lIHRvIHRoZSBsYXRlc3QgdmVyc2lvbi5cIilcbiAgLmV4YW1wbGUoXCJsdW1lIHJ1biA8c2NyaXB0PlwiLCBcIlJ1bnMgYSBjdXN0b20gc2NyaXB0LlwiKVxuICAuZXhhbXBsZShcImx1bWUgW0NPTU1BTkRdIC0taGVscFwiLCBcIlNob3dzIHRoZSBoZWxwIGZvciBhIGNvbW1hbmQuXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbmZpZyA8Y29uZmlnOnN0cmluZz5cIixcbiAgICBcIlRoZSBjb25maWcgZmlsZSBwYXRoLlwiLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLXNyYyA8c3JjOnN0cmluZz5cIixcbiAgICBcIlRoZSBzb3VyY2UgZGlyZWN0b3J5IGZvciB5b3VyIHNpdGUuXCIsXG4gICAgeyBkZWZhdWx0OiBcIi4vXCIgfSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1kZXN0IDxkZXN0OnN0cmluZz5cIixcbiAgICBcIlRoZSBidWlsZCBkZXN0aW5hdGlvbi5cIixcbiAgICB7IGRlZmF1bHQ6IFwiX3NpdGVcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLWxvY2F0aW9uIDx0eXBlOnN0cmluZz5cIixcbiAgICBcIlRoZSBVUkwgbG9jYXRpb24gb2YgdGhlIHNpdGUuXCIsXG4gICAgeyBkZWZhdWx0OiBcImh0dHA6Ly9sb2NhbGhvc3RcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItcywgLS1zZXJ2ZVwiLFxuICAgIFwiU3RhcnQgYSBsaXZlLXJlbG9hZGluZyB3ZWIgc2VydmVyIGFuZCB3YXRjaCBjaGFuZ2VzLlwiLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItcCwgLS1wb3J0IDxwb3J0Om51bWJlcj5cIixcbiAgICBcIlRoZSBwb3J0IHdoZXJlIHRoZSBzZXJ2ZXIgcnVucy5cIixcbiAgICB7IGRlZmF1bHQ6IDMwMDAgfSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1ob3N0bmFtZSA8aG9zdG5hbWU+XCIsXG4gICAgXCJUaGUgaG9zdG5hbWUgd2hlcmUgdGhlIHNlcnZlciBydW5zLlwiLFxuICAgIHsgZGVmYXVsdDogXCJsb2NhbGhvc3RcIiB9LFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItbywgLS1vcGVuXCIsXG4gICAgXCJPcGVuIHRoZSBzaXRlIGluIGEgYnJvd3Nlci5cIixcbiAgICB7IGRlcGVuZHM6IFtcInNlcnZlXCJdIH0sXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi13LCAtLXdhdGNoXCIsXG4gICAgXCJCdWlsZCBhbmQgd2F0Y2ggY2hhbmdlcy5cIixcbiAgKVxuICAuYWN0aW9uKGFzeW5jICh7IGNvbmZpZywgc2VydmUsIHdhdGNoIH0pID0+IHtcbiAgICBjb25zdCB7IGJ1aWxkIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NsaS9idWlsZC50c1wiKTtcbiAgICBidWlsZChjb25maWcsIHNlcnZlLCB3YXRjaCk7XG4gIH0pXG4gIC5jb21tYW5kKFwibmV3IDxhcmNoZXR5cGU+IFthcmd1bWVudHMuLi5dXCIsIGNyZWF0ZSlcbiAgLmNvbW1hbmQoXCJ1cGdyYWRlXCIsIHVwZ3JhZGUpXG4gIC5jb21tYW5kKFwicnVuIDxzY3JpcHQuLi4+XCIsIHJ1bilcbiAgLmNvbW1hbmQoXCJjbXNcIiwgY21zKVxuICAuY29tbWFuZChcImNvbXBsZXRpb25zXCIsIG5ldyBDb21wbGV0aW9uc0NvbW1hbmQoKSk7XG5cbnRyeSB7XG4gIGF3YWl0IGx1bWUucGFyc2UoRGVuby5hcmdzKTtcbn0gY2F0Y2ggKGVycm9yKSB7XG4gIGNvbnNvbGUuZXJyb3IoRGVuby5pbnNwZWN0KGVycm9yLCB7IGNvbG9yczogdHJ1ZSB9KSk7XG4gIERlbm8uZXhpdCgxKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLE9BQU8sRUFBRSxrQkFBa0IsUUFBUSxtQkFBbUI7QUFDL0QsU0FBUyxpQkFBaUIsUUFBUSwrQkFBK0I7QUFFakUsTUFBTSxVQUFVLElBQUksVUFDakIsV0FBVyxDQUFDLHVEQUNaLE1BQU0sQ0FDTCw4QkFDQSw4QkFFRCxNQUFNLENBQ0wsYUFDQSw2REFFRCxPQUFPLENBQUMsbUJBQW1CLDBDQUMzQixPQUFPLENBQUMsc0JBQXNCLCtDQUM5QixNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxP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
+// denoCacheMetadata=5133253858446155415,95508442838772736 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/bc954c21a677007a2ed3673129ee4c05fadbd001d5c4c9ee5931ec76ef25c7f9.js b/vendor/gen/https/deno.land/bc954c21a677007a2ed3673129ee4c05fadbd001d5c4c9ee5931ec76ef25c7f9.js
new file mode 100644
index 0000000..ae53ab8
--- /dev/null
+++ b/vendor/gen/https/deno.land/bc954c21a677007a2ed3673129ee4c05fadbd001d5c4c9ee5931ec76ef25c7f9.js
@@ -0,0 +1,318 @@
+import { globToRegExp } from "../deps/path.ts";
+import { normalizePath } from "./utils/path.ts";
+/** Search helper */ export default class Searcher {
+ #pages;
+ #files;
+ #sourceData;
+ #cache = new Map();
+ #filters;
+ constructor(options){
+ this.#pages = options.pages;
+ this.#files = options.files;
+ this.#sourceData = options.sourceData;
+ this.#filters = options.filters || [];
+ }
+ /** Clear the cache (used after a change in watch mode) */ deleteCache() {
+ this.#cache.clear();
+ }
+ /**
+ * Return the data in the scope of a path (file or folder)
+ */ data(path = "/") {
+ const normalized = normalizePath(path);
+ const dirData = this.#sourceData.get(normalized);
+ if (dirData) {
+ return dirData;
+ }
+ const result = this.#pages.find((page)=>page.data.url === normalized || page.data.sourcePath === normalized);
+ if (result) {
+ return result.data;
+ }
+ }
+ /** Search pages */ pages(query, sort, limit) {
+ const result = this.#searchPages(query, sort);
+ if (!limit) {
+ return result;
+ }
+ return limit < 0 ? result.slice(limit) : result.slice(0, limit);
+ }
+ /** Search and return the first page */ page(query, sort) {
+ return this.pages(query, sort)[0];
+ }
+ /** Search files using a glob */ files(globOrRegexp) {
+ const files = this.#files.map((file)=>file.outputPath);
+ const pages = this.#pages.map((page)=>page.outputPath);
+ const allFiles = [
+ ...files,
+ ...pages
+ ];
+ if (!globOrRegexp) {
+ return allFiles;
+ }
+ const regexp = typeof globOrRegexp === "string" ? globToRegExp(globOrRegexp) : globOrRegexp;
+ return allFiles.filter((file)=>regexp.test(file));
+ }
+ /** Returns all values from the same key of a search */ values(key, query) {
+ const values = new Set();
+ this.#searchPages(query).forEach((data)=>{
+ const value = data[key];
+ if (Array.isArray(value)) {
+ value.forEach((v)=>values.add(v));
+ } else if (value !== undefined) {
+ values.add(value);
+ }
+ });
+ return Array.from(values);
+ }
+ /** Return the next page of a search */ nextPage(url, query, sort) {
+ const pages = this.#searchPages(query, sort);
+ const index = pages.findIndex((data)=>data.url === url);
+ return index === -1 ? undefined : pages[index + 1];
+ }
+ /** Return the previous page of a search */ previousPage(url, query, sort) {
+ const pages = this.#searchPages(query, sort);
+ const index = pages.findIndex((data)=>data.url === url);
+ return index <= 0 ? undefined : pages[index - 1];
+ }
+ #searchPages(query, sort = "date") {
+ const id = JSON.stringify([
+ query,
+ sort
+ ]);
+ if (this.#cache.has(id)) {
+ return [
+ ...this.#cache.get(id)
+ ];
+ }
+ const compiledFilter = buildFilter(query);
+ const filters = compiledFilter ? this.#filters.concat([
+ compiledFilter
+ ]) : this.#filters;
+ const result = filters.reduce((pages, filter)=>pages.filter(filter), this.#pages.map((page)=>page.data));
+ result.sort(buildSort(sort));
+ this.#cache.set(id, result);
+ return [
+ ...result
+ ];
+ }
+}
+/**
+ * Parse a query string and return a function to filter a search result
+ *
+ * example: "title=foo level<3"
+ * returns: (page) => page.data.title === "foo" && page.data.level < 3
+ */ export function buildFilter(query = "") {
+ // (?:(not)?(fieldName)(operator))?(value|"value"|'value')
+ const matches = query ? query.matchAll(/(?:(!)?([\w.-]+)([!^$*]?=|[<>]=?))?([^'"\s][^\s=<>]*|"[^"]+"|'[^']+')/g) : [];
+ const conditions = [];
+ for (const match of matches){
+ let [, not, key, operator, value] = match;
+ if (!key) {
+ key = "tags";
+ operator = "*=";
+ if (value?.startsWith("!")) {
+ not = not ? "" : "!";
+ value = value.slice(1);
+ }
+ }
+ if (not) {
+ operator = "!" + operator;
+ }
+ conditions.push([
+ key,
+ operator,
+ compileValue(value)
+ ]);
+ }
+ if (conditions.length) {
+ return compileFilter(conditions);
+ }
+}
+/**
+ * Convert a parsed query to a function
+ *
+ * example: [["title", "=", "foo"], ["level", "<", 3]]
+ * returns: (data) => data.title === "foo" && data.level < 3
+ */ function compileFilter(conditions) {
+ const filters = [];
+ const args = [];
+ const values = [];
+ conditions.forEach((condition, index)=>{
+ const [key, operator, value] = condition;
+ const varName = `value${index}`;
+ filters.push(compileCondition(key, operator, varName, value));
+ args.push(varName);
+ values.push(value);
+ });
+ args.push(`return (data) => ${filters.join(" && ")};`);
+ const factory = new Function(...args);
+ return factory(...values);
+}
+/**
+ * Convert a parsed condition to a function
+ *
+ * example: key = "data.title", operator = "=" name = "value0" value = "foo"
+ * returns: data.title === value0
+ */ function compileCondition(key, operator, name, value) {
+ key = key.replaceAll(".", "?.");
+ if (value instanceof Date) {
+ switch(operator){
+ case "=":
+ return `data.${key}?.getTime() === ${name}.getTime()`;
+ case "!=":
+ return `data.${key}?.getTime() !== ${name}.getTime()`;
+ case "<":
+ case "<=":
+ case ">":
+ case ">=":
+ return `data.${key}?.getTime() ${operator} ${name}.getTime()`;
+ case "!<":
+ case "!<=":
+ case "!>":
+ case "!>=":
+ return `!(data.${key}?.getTime() ${operator.substring(1)} ${name}.getTime())`;
+ default:
+ throw new Error(`Operator ${operator} not valid for Date values`);
+ }
+ }
+ if (Array.isArray(value)) {
+ switch(operator){
+ case "=":
+ return `${name}.some((i) => data.${key} === i)`;
+ case "!=":
+ return `${name}.some((i) => data.${key} !== i)`;
+ case "^=":
+ return `${name}.some((i) => data.${key}?.startsWith(i))`;
+ case "!^=":
+ return `!${name}.some((i) => data.${key}?.startsWith(i))`;
+ case "$=":
+ return `${name}.some((i) => data.${key}?.endsWith(i))`;
+ case "!$=":
+ return `!${name}.some((i) => data.${key}?.endsWith(i))`;
+ case "*=":
+ return `${name}.some((i) => data.${key}?.includes(i))`;
+ case "!*=":
+ return `${name}.some((i) => data.${key}?.includes(i))`;
+ case "!<":
+ case "!<=":
+ case "!>":
+ case "!>=":
+ return `!${name}.some((i) => data.${key} ${operator.substring(1)} i)`;
+ default:
+ return `${name}.some((i) => data.${key} ${operator} i)`;
+ }
+ }
+ switch(operator){
+ case "=":
+ return `data.${key} === ${name}`;
+ case "!=":
+ return `data.${key} !== ${name}`;
+ case "^=":
+ return `data.${key}?.startsWith(${name})`;
+ case "!^=":
+ return `!data.${key}?.startsWith(${name})`;
+ case "$=":
+ return `data.${key}?.endsWith(${name})`;
+ case "!$=":
+ return `!data.${key}?.endsWith(${name})`;
+ case "*=":
+ return `data.${key}?.includes(${name})`;
+ case "!*=":
+ return `!data.${key}?.includes(${name})`;
+ case "!<":
+ case "!<=":
+ case "!>":
+ case "!>=":
+ return `!(data.${key} ${operator.substring(1)} ${name})`;
+ default:
+ return `data.${key} ${operator} ${name}`;
+ }
+}
+/**
+ * Compile a value and return the proper type
+ *
+ * example: "true" => true
+ * example: "foo" => "foo"
+ * example: "2021-06-12" => new Date(2021, 05, 12)
+ */ function compileValue(value) {
+ if (!value) {
+ return value;
+ }
+ // Remove quotes
+ const quoted = !!value.match(/^('|")(.*)\1$/);
+ if (quoted) {
+ value = value.slice(1, -1);
+ }
+ if (value.includes("|")) {
+ return value.split("|").map((val)=>compileValue(val));
+ }
+ if (quoted) {
+ return value;
+ }
+ if (value.toLowerCase() === "true") {
+ return true;
+ }
+ if (value.toLowerCase() === "false") {
+ return false;
+ }
+ if (value.toLowerCase() === "undefined") {
+ return undefined;
+ }
+ if (value.toLowerCase() === "null") {
+ return null;
+ }
+ if (value.match(/^\d+$/)) {
+ return Number(value);
+ }
+ if (typeof value === "number" && isFinite(value)) {
+ return Number(value);
+ }
+ // Date or datetime values:
+ // yyyy-mm
+ // yyyy-mm-dd
+ // yyyy-mm-ddThh
+ // yyyy-mm-ddThh:ii
+ // yyyy-mm-ddThh:ii:ss
+ const match = value.match(/^(\d{4})-(\d\d)(?:-(\d\d))?(?:T(\d\d)(?::(\d\d))?(?::(\d\d))?)?$/i);
+ if (match) {
+ const [, year, month, day, hour, minute, second] = match;
+ return new Date(parseInt(year), parseInt(month) - 1, day ? parseInt(day) : 1, hour ? parseInt(hour) : 0, minute ? parseInt(minute) : 0, second ? parseInt(second) : 0);
+ }
+ return value;
+}
+/**
+ * Convert a query to sort to a function
+ *
+ * example: "title=desc"
+ * returns: (a, b) => a.title > b.title
+ */ export function buildSort(sort) {
+ let fn = "0";
+ let init = "";
+ const pieces = sort.split(/\s+/).filter((arg)=>arg);
+ pieces.reverse().forEach((arg)=>{
+ const match = arg.match(/([\w.-]+)(?:=(asc-locale|desc-locale|asc|desc))?/);
+ if (!match) {
+ return;
+ }
+ let [, key, direction] = match;
+ key = key.replaceAll(".", "?.");
+ switch(direction){
+ case "asc-locale":
+ init = "const collator = new Intl.Collator();";
+ fn = `(a.${key} == b.${key} ? ${fn} : collator.compare(a.${key} || "", b.${key} || ""))`;
+ break;
+ case "desc-locale":
+ init = "const collator = new Intl.Collator();";
+ fn = `(a.${key} == b.${key} ? ${fn} : collator.compare(b.${key} || "", a.${key} || ""))`;
+ break;
+ case "desc":
+ fn = `(a.${key} == b.${key} ? ${fn} : (a.${key} ?? "") < (b.${key} ?? "") ? 1 : -1)`;
+ break;
+ default:
+ fn = `(a.${key} == b.${key} ? ${fn} : (a.${key} ?? "") > (b.${key} ?? "") ? 1 : -1)`;
+ break;
+ }
+ });
+ return new Function(`${init} return function (a, b) { return ${fn}; }`)();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9zZWFyY2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnbG9iVG9SZWdFeHAgfSBmcm9tIFwiLi4vZGVwcy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4vdXRpbHMvcGF0aC50c1wiO1xuXG5pbXBvcnQgdHlwZSB7IERhdGEsIFBhZ2UsIFN0YXRpY0ZpbGUgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBUaGUgcGFnZXMgYXJyYXkgKi9cbiAgcGFnZXM6IFBhZ2VbXTtcblxuICAvKiogVGhlIHN0YXRpYyBmaWxlcyBhcnJheSAqL1xuICBmaWxlczogU3RhdGljRmlsZVtdO1xuXG4gIC8qKiBDb250ZXh0IGRhdGEgKi9cbiAgc291cmNlRGF0YTogTWFwPHN0cmluZywgUGFydGlhbDxEYXRhPj47XG5cbiAgLyoqIEZpbHRlcnMgdG8gYXBwbHkgdG8gYWxsIHBhZ2Ugc2VhcmNoZXMgKi9cbiAgZmlsdGVycz86IEZpbHRlcltdO1xufVxuXG50eXBlIEZpbHRlciA9IChkYXRhOiBEYXRhKSA9PiBib29sZWFuO1xudHlwZSBDb25kaXRpb24gPSBbc3RyaW5nLCBzdHJpbmcsIHVua25vd25dO1xuXG4vKiogU2VhcmNoIGhlbHBlciAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoZXIge1xuICAjcGFnZXM6IFBhZ2VbXTtcbiAgI2ZpbGVzOiBTdGF0aWNGaWxlW107XG4gICNzb3VyY2VEYXRhOiBNYXA8c3RyaW5nLCBQYXJ0aWFsPERhdGE+PjtcbiAgI2NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIERhdGFbXT4oKTtcbiAgI2ZpbHRlcnM6IEZpbHRlcltdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLiNwYWdlcyA9IG9wdGlvbnMucGFnZXM7XG4gICAgdGhpcy4jZmlsZXMgPSBvcHRpb25zLmZpbGVzO1xuICAgIHRoaXMuI3NvdXJjZURhdGEgPSBvcHRpb25zLnNvdXJjZURhdGE7XG4gICAgdGhpcy4jZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVycyB8fCBbXTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgY2FjaGUgKHVzZWQgYWZ0ZXIgYSBjaGFuZ2UgaW4gd2F0Y2ggbW9kZSkgKi9cbiAgZGVsZXRlQ2FjaGUoKSB7XG4gICAgdGhpcy4jY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRhdGEgaW4gdGhlIHNjb3BlIG9mIGEgcGF0aCAoZmlsZSBvciBmb2xkZXIpXG4gICAqL1xuICBkYXRhPFQ+KHBhdGggPSBcIi9cIik6IFQgJiBQYXJ0aWFsPERhdGE+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGF0aChwYXRoKTtcbiAgICBjb25zdCBkaXJEYXRhID0gdGhpcy4jc291cmNlRGF0YS5nZXQobm9ybWFsaXplZCk7XG5cbiAgICBpZiAoZGlyRGF0YSkge1xuICAgICAgcmV0dXJuIGRpckRhdGEgYXMgVCAmIFBhcnRpYWw8RGF0YT47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy4jcGFnZXMuZmluZCgocGFnZSkgPT5cbiAgICAgIHBhZ2UuZGF0YS51cmwgPT09IG5vcm1hbGl6ZWQgfHwgcGFnZS5kYXRhLnNvdXJjZVBhdGggPT09IG5vcm1hbGl6ZWRcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhIGFzIFQgJiBQYXJ0aWFsPERhdGE+O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWFyY2ggcGFnZXMgKi9cbiAgcGFnZXM8VD4ocXVlcnk/OiBzdHJpbmcsIHNvcnQ/OiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyKTogKERhdGEgJiBUKVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLiNzZWFyY2hQYWdlczxUPihxdWVyeSwgc29ydCk7XG5cbiAgICBpZiAoIWxpbWl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiAobGltaXQgPCAwKSA/IHJlc3VsdC5zbGljZShsaW1pdCkgOiByZXN1bHQuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgLyoqIFNlYXJjaCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBwYWdlICovXG4gIHBhZ2U8VD4ocXVlcnk/OiBzdHJpbmcsIHNvcnQ/OiBzdHJpbmcpOiBEYXRhICYgVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXM8VD4ocXVlcnksIHNvcnQpWzBdO1xuICB9XG5cbiAgLyoqIFNlYXJjaCBmaWxlcyB1c2luZyBhIGdsb2IgKi9cbiAgZmlsZXMoZ2xvYk9yUmVnZXhwPzogUmVnRXhwIHwgc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZpbGVzID0gdGhpcy4jZmlsZXMubWFwKChmaWxlKSA9PiBmaWxlLm91dHB1dFBhdGgpO1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy4jcGFnZXMubWFwKChwYWdlKSA9PiBwYWdlLm91dHB1dFBhdGgpO1xuICAgIGNvbnN0IGFsbEZpbGVzID0gWy4uLmZpbGVzLCAuLi5wYWdlc107XG5cbiAgICBpZiAoIWdsb2JPclJlZ2V4cCkge1xuICAgICAgcmV0dXJuIGFsbEZpbGVzO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4cCA9IHR5cGVvZiBnbG9iT3JSZWdleHAgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZ2xvYlRvUmVnRXhwKGdsb2JPclJlZ2V4cClcbiAgICAgIDogZ2xvYk9yUmVnZXhwO1xuXG4gICAgcmV0dXJuIGFsbEZpbGVzLmZpbHRlcigoZmlsZSkgPT4gcmVnZXhwLnRlc3QoZmlsZSkpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYWxsIHZhbHVlcyBmcm9tIHRoZSBzYW1lIGtleSBvZiBhIHNlYXJjaCAqL1xuICB2YWx1ZXM8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCBxdWVyeT86IHN0cmluZyk6IFRbXSB7XG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFNldCgpO1xuXG4gICAgdGhpcy4jc2VhcmNoUGFnZXMocXVlcnkpLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4gdmFsdWVzLmFkZCh2KSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVzLmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZXMpIGFzIFRbXTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIG5leHQgcGFnZSBvZiBhIHNlYXJjaCAqL1xuICBuZXh0UGFnZTxUID0gdW5rbm93bj4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBzdHJpbmcsXG4gICAgc29ydD86IHN0cmluZyxcbiAgKTogRGF0YSAmIFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy4jc2VhcmNoUGFnZXM8VD4ocXVlcnksIHNvcnQpO1xuICAgIGNvbnN0IGluZGV4ID0gcGFnZXMuZmluZEluZGV4KChkYXRhKSA9PiBkYXRhLnVybCA9PT0gdXJsKTtcblxuICAgIHJldHVybiAoaW5kZXggPT09IC0xKSA/IHVuZGVmaW5lZCA6IHBhZ2VzW2luZGV4ICsgMV07XG4gIH1cblxuICAvKiogUmV0dXJuIHRoZSBwcmV2aW91cyBwYWdlIG9mIGEgc2VhcmNoICovXG4gIHByZXZpb3VzUGFnZTxUID0gdW5rbm93bj4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBzdHJpbmcsXG4gICAgc29ydD86IHN0cmluZyxcbiAgKTogRGF0YSAmIFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy4jc2VhcmNoUGFnZXM8VD4ocXVlcnksIHNvcnQpO1xuICAgIGNvbnN0IGluZGV4ID0gcGFnZXMuZmluZEluZGV4KChkYXRhKSA9PiBkYXRhLnVybCA9PT0gdXJsKTtcblxuICAgIHJldHVybiAoaW5kZXggPD0gMCkgPyB1bmRlZmluZWQgOiBwYWdlc1tpbmRleCAtIDFdO1xuICB9XG5cbiAgI3NlYXJjaFBhZ2VzPFQgPSB1bmtub3duPihxdWVyeT86IHN0cmluZywgc29ydCA9IFwiZGF0ZVwiKTogKERhdGEgJiBUKVtdIHtcbiAgICBjb25zdCBpZCA9IEpTT04uc3RyaW5naWZ5KFtxdWVyeSwgc29ydF0pO1xuXG4gICAgaWYgKHRoaXMuI2NhY2hlLmhhcyhpZCkpIHtcbiAgICAgIHJldHVybiBbLi4udGhpcy4jY2FjaGUuZ2V0KGlkKSFdIGFzIChEYXRhICYgVClbXTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21waWxlZEZpbHRlciA9IGJ1aWxkRmlsdGVyKHF1ZXJ5KTtcbiAgICBjb25zdCBmaWx0ZXJzID0gY29tcGlsZWRGaWx0ZXJcbiAgICAgID8gdGhpcy4jZmlsdGVycy5jb25jYXQoW2NvbXBpbGVkRmlsdGVyXSlcbiAgICAgIDogdGhpcy4jZmlsdGVycztcbiAgICBjb25zdCByZXN1bHQgPSBmaWx0ZXJzLnJlZHVjZShcbiAgICAgIChwYWdlcywgZmlsdGVyKSA9PiBwYWdlcy5maWx0ZXIoZmlsdGVyKSxcbiAgICAgIHRoaXMuI3BhZ2VzLm1hcCgocGFnZSkgPT4gcGFnZS5kYXRhKSxcbiAgICApO1xuXG4gICAgcmVzdWx0LnNvcnQoYnVpbGRTb3J0KHNvcnQpKTtcbiAgICB0aGlzLiNjYWNoZS5zZXQoaWQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIFsuLi5yZXN1bHRdIGFzIChEYXRhICYgVClbXTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgc3RyaW5nIGFuZCByZXR1cm4gYSBmdW5jdGlvbiB0byBmaWx0ZXIgYSBzZWFyY2ggcmVzdWx0XG4gKlxuICogZXhhbXBsZTogXCJ0aXRsZT1mb28gbGV2ZWw8M1wiXG4gKiByZXR1cm5zOiAocGFnZSkgPT4gcGFnZS5kYXRhLnRpdGxlID09PSBcImZvb1wiICYmIHBhZ2UuZGF0YS5sZXZlbCA8IDNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRmlsdGVyKHF1ZXJ5ID0gXCJcIik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIC8vICg/Oihub3QpPyhmaWVsZE5hbWUpKG9wZXJhdG9yKSk/KHZhbHVlfFwidmFsdWVcInwndmFsdWUnKVxuICBjb25zdCBtYXRjaGVzID0gcXVlcnlcbiAgICA/IHF1ZXJ5Lm1hdGNoQWxsKFxuICAgICAgLyg/OighKT8oW1xcdy4tXSspKFshXiQqXT89fFs8Pl09PykpPyhbXidcIlxcc11bXlxccz08Pl0qfFwiW15cIl0rXCJ8J1teJ10rJykvZyxcbiAgICApXG4gICAgOiBbXTtcblxuICBjb25zdCBjb25kaXRpb25zOiBDb25kaXRpb25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgIGxldCBbLCBub3QsIGtleSwgb3BlcmF0b3IsIHZhbHVlXSA9IG1hdGNoO1xuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIGtleSA9IFwidGFnc1wiO1xuICAgICAgb3BlcmF0b3IgPSBcIio9XCI7XG5cbiAgICAgIGlmICh2YWx1ZT8uc3RhcnRzV2l0aChcIiFcIikpIHtcbiAgICAgICAgbm90ID0gbm90ID8gXCJcIiA6IFwiIVwiO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub3QpIHtcbiAgICAgIG9wZXJhdG9yID0gXCIhXCIgKyBvcGVyYXRvcjtcbiAgICB9XG5cbiAgICBjb25kaXRpb25zLnB1c2goW2tleSwgb3BlcmF0b3IsIGNvbXBpbGVWYWx1ZSh2YWx1ZSldKTtcbiAgfVxuXG4gIGlmIChjb25kaXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBjb21waWxlRmlsdGVyKGNvbmRpdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHBhcnNlZCBxdWVyeSB0byBhIGZ1bmN0aW9uXG4gKlxuICogZXhhbXBsZTogW1tcInRpdGxlXCIsIFwiPVwiLCBcImZvb1wiXSwgW1wibGV2ZWxcIiwgXCI8XCIsIDNdXVxuICogcmV0dXJuczogKGRhdGEpID0+IGRhdGEudGl0bGUgPT09IFwiZm9vXCIgJiYgZGF0YS5sZXZlbCA8IDNcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUZpbHRlcihjb25kaXRpb25zOiBDb25kaXRpb25bXSkge1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuXG4gIGNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZGl0aW9uLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IFtrZXksIG9wZXJhdG9yLCB2YWx1ZV0gPSBjb25kaXRpb247XG4gICAgY29uc3QgdmFyTmFtZSA9IGB2YWx1ZSR7aW5kZXh9YDtcblxuICAgIGZpbHRlcnMucHVzaChjb21waWxlQ29uZGl0aW9uKGtleSwgb3BlcmF0b3IsIHZhck5hbWUsIHZhbHVlKSk7XG4gICAgYXJncy5wdXNoKHZhck5hbWUpO1xuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfSk7XG5cbiAgYXJncy5wdXNoKGByZXR1cm4gKGRhdGEpID0+ICR7ZmlsdGVycy5qb2luKFwiICYmIFwiKX07YCk7XG5cbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBGdW5jdGlvbiguLi5hcmdzKTtcblxuICByZXR1cm4gZmFjdG9yeSguLi52YWx1ZXMpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwYXJzZWQgY29uZGl0aW9uIHRvIGEgZnVuY3Rpb25cbiAqXG4gKiBleGFtcGxlOiBrZXkgPSBcImRhdGEudGl0bGVcIiwgb3BlcmF0b3IgPSBcIj1cIiBuYW1lID0gXCJ2YWx1ZTBcIiB2YWx1ZSA9IFwiZm9vXCJcbiAqIHJldHVybnM6IGRhdGEudGl0bGUgPT09IHZhbHVlMFxuICovXG5mdW5jdGlvbiBjb21waWxlQ29uZGl0aW9uKFxuICBrZXk6IHN0cmluZyxcbiAgb3BlcmF0b3I6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbikge1xuICBrZXkgPSBrZXkucmVwbGFjZUFsbChcIi5cIiwgXCI/LlwiKTtcblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcIj1cIjpcbiAgICAgICAgcmV0dXJuIGBkYXRhLiR7a2V5fT8uZ2V0VGltZSgpID09PSAke25hbWV9LmdldFRpbWUoKWA7XG5cbiAgICAgIGNhc2UgXCIhPVwiOlxuICAgICAgICByZXR1cm4gYGRhdGEuJHtrZXl9Py5nZXRUaW1lKCkgIT09ICR7bmFtZX0uZ2V0VGltZSgpYDtcblxuICAgICAgY2FzZSBcIjxcIjpcbiAgICAgIGNhc2UgXCI8PVwiOlxuICAgICAgY2FzZSBcIj5cIjpcbiAgICAgIGNhc2UgXCI+PVwiOlxuICAgICAgICByZXR1cm4gYGRhdGEuJHtrZXl9Py5nZXRUaW1lKCkgJHtvcGVyYXRvcn0gJHtuYW1lfS5nZXRUaW1lKClgO1xuXG4gICAgICBjYXNlIFwiITxcIjpcbiAgICAgIGNhc2UgXCIhPD1cIjpcbiAgICAgIGNhc2UgXCIhPlwiOlxuICAgICAgY2FzZSBcIiE+PVwiOlxuICAgICAgICByZXR1cm4gYCEoZGF0YS4ke2tleX0/LmdldFRpbWUoKSAke1xuICAgICAgICAgIG9wZXJhdG9yLnN1YnN0cmluZygxKVxuICAgICAgICB9ICR7bmFtZX0uZ2V0VGltZSgpKWA7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0b3IgJHtvcGVyYXRvcn0gbm90IHZhbGlkIGZvciBEYXRlIHZhbHVlc2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgXCI9XCI6XG4gICAgICAgIHJldHVybiBgJHtuYW1lfS5zb21lKChpKSA9PiBkYXRhLiR7a2V5fSA9PT0gaSlgO1xuXG4gICAgICBjYXNlIFwiIT1cIjpcbiAgICAgICAgcmV0dXJuIGAke25hbWV9LnNvbWUoKGkpID0+IGRhdGEuJHtrZXl9ICE9PSBpKWA7XG5cbiAgICAgIGNhc2UgXCJePVwiOlxuICAgICAgICByZXR1cm4gYCR7bmFtZX0uc29tZSgoaSkgPT4gZGF0YS4ke2tleX0/LnN0YXJ0c1dpdGgoaSkpYDtcblxuICAgICAgY2FzZSBcIiFePVwiOlxuICAgICAgICByZXR1cm4gYCEke25hbWV9LnNvbWUoKGkpID0+IGRhdGEuJHtrZXl9Py5zdGFydHNXaXRoKGkpKWA7XG5cbiAgICAgIGNhc2UgXCIkPVwiOlxuICAgICAgICByZXR1cm4gYCR7bmFtZX0uc29tZSgoaSkgPT4gZGF0YS4ke2tleX0/LmVuZHNXaXRoKGkpKWA7XG5cbiAgICAgIGNhc2UgXCIhJD1cIjpcbiAgICAgICAgcmV0dXJuIGAhJHtuYW1lfS5zb21lKChpKSA9PiBkYXRhLiR7a2V5fT8uZW5kc1dpdGgoaSkpYDtcblxuICAgICAgY2FzZSBcIio9XCI6XG4gICAgICAgIHJldHVybiBgJHtuYW1lfS5zb21lKChpKSA9PiBkYXRhLiR7a2V5fT8uaW5jbHVkZXMoaSkpYDtcblxuICAgICAgY2FzZSBcIiEqPVwiOlxuICAgICAgICByZXR1cm4gYCR7bmFtZX0uc29tZSgoaSkgPT4gZGF0YS4ke2tleX0/LmluY2x1ZGVzKGkpKWA7XG5cbiAgICAgIGNhc2UgXCIhPFwiOlxuICAgICAgY2FzZSBcIiE8PVwiOlxuICAgICAgY2FzZSBcIiE+XCI6XG4gICAgICBjYXNlIFwiIT49XCI6XG4gICAgICAgIHJldHVybiBgISR7bmFtZX0uc29tZSgoaSkgPT4gZGF0YS4ke2tleX0gJHtvcGVyYXRvci5zdWJzdHJpbmcoMSl9IGkpYDtcblxuICAgICAgZGVmYXVsdDogLy8gPCA8PSA+ID49XG4gICAgICAgIHJldHVybiBgJHtuYW1lfS5zb21lKChpKSA9PiBkYXRhLiR7a2V5fSAke29wZXJhdG9yfSBpKWA7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgIGNhc2UgXCI9XCI6XG4gICAgICByZXR1cm4gYGRhdGEuJHtrZXl9ID09PSAke25hbWV9YDtcblxuICAgIGNhc2UgXCIhPVwiOlxuICAgICAgcmV0dXJuIGBkYXRhLiR7a2V5fSAhPT0gJHtuYW1lfWA7XG5cbiAgICBjYXNlIFwiXj1cIjpcbiAgICAgIHJldHVybiBgZGF0YS4ke2tleX0/LnN0YXJ0c1dpdGgoJHtuYW1lfSlgO1xuXG4gICAgY2FzZSBcIiFePVwiOlxuICAgICAgcmV0dXJuIGAhZGF0YS4ke2tleX0/LnN0YXJ0c1dpdGgoJHtuYW1lfSlgO1xuXG4gICAgY2FzZSBcIiQ9XCI6XG4gICAgICByZXR1cm4gYGRhdGEuJHtrZXl9Py5lbmRzV2l0aCgke25hbWV9KWA7XG5cbiAgICBjYXNlIFwiISQ9XCI6XG4gICAgICByZXR1cm4gYCFkYXRhLiR7a2V5fT8uZW5kc1dpdGgoJHtuYW1lfSlgO1xuXG4gICAgY2FzZSBcIio9XCI6XG4gICAgICByZXR1cm4gYGRhdGEuJHtrZXl9Py5pbmNsdWRlcygke25hbWV9KWA7XG5cbiAgICBjYXNlIFwiISo9XCI6XG4gICAgICByZXR1cm4gYCFkYXRhLiR7a2V5fT8uaW5jbHVkZXMoJHtuYW1lfSlgO1xuXG4gICAgY2FzZSBcIiE8XCI6XG4gICAgY2FzZSBcIiE8PVwiOlxuICAgIGNhc2UgXCIhPlwiOlxuICAgIGNhc2UgXCIhPj1cIjpcbiAgICAgIHJldHVybiBgIShkYXRhLiR7a2V5fSAke29wZXJhdG9yLnN1YnN0cmluZygxKX0gJHtuYW1lfSlgO1xuXG4gICAgZGVmYXVsdDogLy8gPCA8PSA+ID49XG4gICAgICByZXR1cm4gYGRhdGEuJHtrZXl9ICR7b3BlcmF0b3J9ICR7bmFtZX1gO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHZhbHVlIGFuZCByZXR1cm4gdGhlIHByb3BlciB0eXBlXG4gKlxuICogZXhhbXBsZTogXCJ0cnVlXCIgPT4gdHJ1ZVxuICogZXhhbXBsZTogXCJmb29cIiA9PiBcImZvb1wiXG4gKiBleGFtcGxlOiBcIjIwMjEtMDYtMTJcIiA9PiBuZXcgRGF0ZSgyMDIxLCAwNSwgMTIpXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdW5rbm93biB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBSZW1vdmUgcXVvdGVzXG4gIGNvbnN0IHF1b3RlZCA9ICEhdmFsdWUubWF0Y2goL14oJ3xcIikoLiopXFwxJC8pO1xuXG4gIGlmIChxdW90ZWQpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKTtcbiAgfVxuXG4gIGlmICh2YWx1ZS5pbmNsdWRlcyhcInxcIikpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoXCJ8XCIpLm1hcCgodmFsKSA9PiBjb21waWxlVmFsdWUodmFsKSk7XG4gIH1cblxuICBpZiAocXVvdGVkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwibnVsbFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZhbHVlLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH1cbiAgLy8gRGF0ZSBvciBkYXRldGltZSB2YWx1ZXM6XG4gIC8vIHl5eXktbW1cbiAgLy8geXl5eS1tbS1kZFxuICAvLyB5eXl5LW1tLWRkVGhoXG4gIC8vIHl5eXktbW0tZGRUaGg6aWlcbiAgLy8geXl5eS1tbS1kZFRoaDppaTpzc1xuICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKFxuICAgIC9eKFxcZHs0fSktKFxcZFxcZCkoPzotKFxcZFxcZCkpPyg/OlQoXFxkXFxkKSg/OjooXFxkXFxkKSk/KD86OihcXGRcXGQpKT8pPyQvaSxcbiAgKTtcblxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBtYXRjaDtcblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIHBhcnNlSW50KHllYXIpLFxuICAgICAgcGFyc2VJbnQobW9udGgpIC0gMSxcbiAgICAgIGRheSA/IHBhcnNlSW50KGRheSkgOiAxLFxuICAgICAgaG91ciA/IHBhcnNlSW50KGhvdXIpIDogMCxcbiAgICAgIG1pbnV0ZSA/IHBhcnNlSW50KG1pbnV0ZSkgOiAwLFxuICAgICAgc2Vjb25kID8gcGFyc2VJbnQoc2Vjb25kKSA6IDAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcXVlcnkgdG8gc29ydCB0byBhIGZ1bmN0aW9uXG4gKlxuICogZXhhbXBsZTogXCJ0aXRsZT1kZXNjXCJcbiAqIHJldHVybnM6IChhLCBiKSA9PiBhLnRpdGxlID4gYi50aXRsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTb3J0KHNvcnQ6IHN0cmluZyk6IChhOiBEYXRhLCBiOiBEYXRhKSA9PiBudW1iZXIge1xuICBsZXQgZm4gPSBcIjBcIjtcbiAgbGV0IGluaXQgPSBcIlwiO1xuXG4gIGNvbnN0IHBpZWNlcyA9IHNvcnQuc3BsaXQoL1xccysvKS5maWx0ZXIoKGFyZykgPT4gYXJnKTtcblxuICBwaWVjZXMucmV2ZXJzZSgpLmZvckVhY2goKGFyZykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKC8oW1xcdy4tXSspKD86PShhc2MtbG9jYWxlfGRlc2MtbG9jYWxlfGFzY3xkZXNjKSk/Lyk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IFssIGtleSwgZGlyZWN0aW9uXSA9IG1hdGNoO1xuICAgIGtleSA9IGtleS5yZXBsYWNlQWxsKFwiLlwiLCBcIj8uXCIpO1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlIFwiYXNjLWxvY2FsZVwiOlxuICAgICAgICBpbml0ID0gXCJjb25zdCBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKCk7XCI7XG4gICAgICAgIGZuID1cbiAgICAgICAgICBgKGEuJHtrZXl9ID09IGIuJHtrZXl9ID8gJHtmbn0gOiBjb2xsYXRvci5jb21wYXJlKGEuJHtrZXl9IHx8IFwiXCIsIGIuJHtrZXl9IHx8IFwiXCIpKWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRlc2MtbG9jYWxlXCI6XG4gICAgICAgIGluaXQgPSBcImNvbnN0IGNvbGxhdG9yID0gbmV3IEludGwuQ29sbGF0b3IoKTtcIjtcbiAgICAgICAgZm4gPVxuICAgICAgICAgIGAoYS4ke2tleX0gPT0gYi4ke2tleX0gPyAke2ZufSA6IGNvbGxhdG9yLmNvbXBhcmUoYi4ke2tleX0gfHwgXCJcIiwgYS4ke2tleX0gfHwgXCJcIikpYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGVzY1wiOlxuICAgICAgICBmbiA9XG4gICAgICAgICAgYChhLiR7a2V5fSA9PSBiLiR7a2V5fSA/ICR7Zm59IDogKGEuJHtrZXl9ID8/IFwiXCIpIDwgKGIuJHtrZXl9ID8/IFwiXCIpID8gMSA6IC0xKWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZm4gPVxuICAgICAgICAgIGAoYS4ke2tleX0gPT0gYi4ke2tleX0gPyAke2ZufSA6IChhLiR7a2V5fSA/PyBcIlwiKSA+IChiLiR7a2V5fSA/PyBcIlwiKSA/IDEgOiAtMSlgO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgRnVuY3Rpb24oYCR7aW5pdH0gcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAke2ZufTsgfWApKCkgYXMgKFxuICAgIGE6IERhdGEsXG4gICAgYjogRGF0YSxcbiAgKSA9PiBudW1iZXI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxZQUFZLFFBQVEsa0JBQWtCO0FBQy9DLFNBQVMsYUFBYSxRQUFRLGtCQUFrQjtBQXFCaEQsa0JBQWtCLEdBQ2xCLGVBQWUsTUFBTTtFQUNuQixDQUFBLEtBQU0sQ0FBUztFQUNmLENBQUEsS0FBTSxDQUFlO0VBQ3JCLENBQUEsVUFBVyxDQUE2QjtFQUN4QyxDQUFBLEtBQU0sR0FBRyxJQUFJLE1BQXNCO0VBQ25DLENBQUEsT0FBUSxDQUFXO0VBRW5CLFlBQVksT0FBZ0IsQ0FBRTtJQUM1QixJQUFJLENBQUMsQ0FBQSxLQUFNLEdBQUcsUUFBUSxLQUFLO0lBQzNCLElBQUksQ0FBQyxDQUFBLEtBQU0sR0FBRyxRQUFRLEtBQUs7SUFDM0IsSUFBSSxDQUFDLENBQUEsVUFBVyxHQUFHLFFBQVEsVUFBVTtJQUNyQyxJQUFJLENBQUMsQ0FBQSxPQUFRLEdBQUcsUUFBUSxPQUFPLElBQUksRUFBRTtFQUN2QztFQUVBLHdEQUF3RCxHQUN4RCxjQUFjO0lBQ1osSUFBSSxDQUFDLENBQUEsS0FBTSxDQUFDLEtBQUs7RUFDbkI7RUFFQTs7R0FFQyxHQUNELEtBQVEsT0FBTyxHQUFHLEVBQWlDO0lBQ2pELE1BQU0sYUFBYSxjQUFjO0lBQ2pDLE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBQSxVQUFXLENBQUMsR0FBRyxDQUFDO0lBRXJDLElBQUksU0FBUztNQUNYLE9BQU87SUFDVDtJQUVBLE1BQU0sU0FB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
+// denoCacheMetadata=2849395956312001327,8610230619214910862 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/bce94b4ca143a85aa1b121c00bc9a977cf51daf2f3b81b49a377d98ea6533d47.js b/vendor/gen/https/deno.land/bce94b4ca143a85aa1b121c00bc9a977cf51daf2f3b81b49a377d98ea6533d47.js
new file mode 100644
index 0000000..8afe015
--- /dev/null
+++ b/vendor/gen/https/deno.land/bce94b4ca143a85aa1b121c00bc9a977cf51daf2f3b81b49a377d98ea6533d47.js
@@ -0,0 +1,7 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * A parsed path object generated by path.parse() or consumed by path.format().
+ */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvX2ludGVyZmFjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIEEgcGFyc2VkIHBhdGggb2JqZWN0IGdlbmVyYXRlZCBieSBwYXRoLnBhcnNlKCkgb3IgY29uc3VtZWQgYnkgcGF0aC5mb3JtYXQoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQYXRoIHtcbiAgLyoqXG4gICAqIFRoZSByb290IG9mIHRoZSBwYXRoIHN1Y2ggYXMgJy8nIG9yICdjOlxcJ1xuICAgKi9cbiAgcm9vdDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZ1bGwgZGlyZWN0b3J5IHBhdGggc3VjaCBhcyAnL2hvbWUvdXNlci9kaXInIG9yICdjOlxccGF0aFxcZGlyJ1xuICAgKi9cbiAgZGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBuYW1lIGluY2x1ZGluZyBleHRlbnNpb24gKGlmIGFueSkgc3VjaCBhcyAnaW5kZXguaHRtbCdcbiAgICovXG4gIGJhc2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmaWxlIGV4dGVuc2lvbiAoaWYgYW55KSBzdWNoIGFzICcuaHRtbCdcbiAgICovXG4gIGV4dDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbiAoaWYgYW55KSBzdWNoIGFzICdpbmRleCdcbiAgICovXG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRm9ybWF0SW5wdXRQYXRoT2JqZWN0ID0gUGFydGlhbDxQYXJzZWRQYXRoPjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDOztDQUVDLEdBQ0QifQ==
+// denoCacheMetadata=13915160760061102832,10989933561520906721 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c29991ec35bcd4a12128c087485dbc7c75721547d27bfda98c9d4b939e1db61d.js b/vendor/gen/https/deno.land/c29991ec35bcd4a12128c087485dbc7c75721547d27bfda98c9d4b939e1db61d.js
new file mode 100644
index 0000000..415f273
--- /dev/null
+++ b/vendor/gen/https/deno.land/c29991ec35bcd4a12128c087485dbc7c75721547d27bfda98c9d4b939e1db61d.js
@@ -0,0 +1,365 @@
+import { getDefaultValue, getOption, matchWildCardOptions, paramCaseToCamelCase } from "./_utils.ts";
+import { DuplicateOptionError, InvalidOptionError, InvalidOptionValueError, MissingOptionValueError, UnexpectedArgumentAfterVariadicArgumentError, UnexpectedOptionValueError, UnexpectedRequiredArgumentError, UnknownConflictingOptionError, UnknownOptionError, UnknownRequiredOptionError, UnknownTypeError } from "./_errors.ts";
+import { OptionType } from "./deprecated.ts";
+import { boolean } from "./types/boolean.ts";
+import { number } from "./types/number.ts";
+import { string } from "./types/string.ts";
+import { validateFlags } from "./_validate_flags.ts";
+import { integer } from "./types/integer.ts";
+const DefaultTypes = {
+ string,
+ number,
+ integer,
+ boolean
+};
+/**
+ * Parse command line arguments.
+ * @param argsOrCtx Command line arguments e.g: `Deno.args` or parse context.
+ * @param opts Parse options.
+ *
+ * ```
+ * // examples/flags/flags.ts -x 3 -y.z -n5 -abc --beep=boop foo bar baz --deno.land --deno.com -- --cliffy
+ * parseFlags(Deno.args);
+ * ```
+ *
+ * Output:
+ *
+ * ```
+ * {
+ * flags: {
+ * x: "3",
+ * y: { z: true },
+ * n: "5",
+ * a: true,
+ * b: true,
+ * c: true,
+ * beep: "boop",
+ * deno: { land: true, com: true }
+ * },
+ * literal: [ "--cliffy" ],
+ * unknown: [ "foo", "bar", "baz" ],
+ * stopEarly: false,
+ * stopOnUnknown: false
+ * }
+ * ```
+ */ export function parseFlags(argsOrCtx, opts = {}) {
+ let args;
+ let ctx;
+ if (Array.isArray(argsOrCtx)) {
+ ctx = {};
+ args = argsOrCtx;
+ } else {
+ ctx = argsOrCtx;
+ args = argsOrCtx.unknown;
+ argsOrCtx.unknown = [];
+ }
+ args = args.slice();
+ ctx.flags ??= {};
+ ctx.literal ??= [];
+ ctx.unknown ??= [];
+ ctx.stopEarly = false;
+ ctx.stopOnUnknown = false;
+ opts.dotted ??= true;
+ validateOptions(opts);
+ const options = parseArgs(ctx, args, opts);
+ validateFlags(ctx, opts, options);
+ if (opts.dotted) {
+ parseDottedOptions(ctx);
+ }
+ return ctx;
+}
+function validateOptions(opts) {
+ opts.flags?.forEach((opt)=>{
+ opt.depends?.forEach((flag)=>{
+ if (!opts.flags || !getOption(opts.flags, flag)) {
+ throw new UnknownRequiredOptionError(flag, opts.flags ?? []);
+ }
+ });
+ opt.conflicts?.forEach((flag)=>{
+ if (!opts.flags || !getOption(opts.flags, flag)) {
+ throw new UnknownConflictingOptionError(flag, opts.flags ?? []);
+ }
+ });
+ });
+}
+function parseArgs(ctx, args, opts) {
+ /** Option name mapping: propertyName -> option.name */ const optionsMap = new Map();
+ let inLiteral = false;
+ for(let argsIndex = 0; argsIndex < args.length; argsIndex++){
+ let option;
+ let current = args[argsIndex];
+ let currentValue;
+ let negate = false;
+ // literal args after --
+ if (inLiteral) {
+ ctx.literal.push(current);
+ continue;
+ } else if (current === "--") {
+ inLiteral = true;
+ continue;
+ } else if (ctx.stopEarly || ctx.stopOnUnknown) {
+ ctx.unknown.push(current);
+ continue;
+ }
+ const isFlag = current.length > 1 && current[0] === "-";
+ if (!isFlag) {
+ if (opts.stopEarly) {
+ ctx.stopEarly = true;
+ }
+ ctx.unknown.push(current);
+ continue;
+ }
+ const isShort = current[1] !== "-";
+ const isLong = isShort ? false : current.length > 3 && current[2] !== "-";
+ if (!isShort && !isLong) {
+ throw new InvalidOptionError(current, opts.flags ?? []);
+ }
+ // normalize short flags: -abc => -a -b -c
+ if (isShort && current.length > 2 && current[2] !== ".") {
+ args.splice(argsIndex, 1, ...splitFlags(current));
+ current = args[argsIndex];
+ } else if (isLong && current.startsWith("--no-")) {
+ negate = true;
+ }
+ // split value: --foo="bar=baz" => --foo bar=baz
+ const equalSignIndex = current.indexOf("=");
+ if (equalSignIndex !== -1) {
+ currentValue = current.slice(equalSignIndex + 1) || undefined;
+ current = current.slice(0, equalSignIndex);
+ }
+ if (opts.flags) {
+ option = getOption(opts.flags, current);
+ if (!option) {
+ const name = current.replace(/^-+/, "");
+ option = matchWildCardOptions(name, opts.flags);
+ if (!option) {
+ if (opts.stopOnUnknown) {
+ ctx.stopOnUnknown = true;
+ ctx.unknown.push(args[argsIndex]);
+ continue;
+ }
+ throw new UnknownOptionError(current, opts.flags);
+ }
+ }
+ } else {
+ option = {
+ name: current.replace(/^-+/, ""),
+ optionalValue: true,
+ type: OptionType.STRING
+ };
+ }
+ if (option.standalone) {
+ ctx.standalone = option;
+ }
+ const positiveName = negate ? option.name.replace(/^no-?/, "") : option.name;
+ const propName = paramCaseToCamelCase(positiveName);
+ if (typeof ctx.flags[propName] !== "undefined") {
+ if (!opts.flags?.length) {
+ option.collect = true;
+ } else if (!option.collect) {
+ throw new DuplicateOptionError(current);
+ }
+ }
+ if (option.type && !option.args?.length) {
+ option.args = [
+ {
+ type: option.type,
+ requiredValue: option.requiredValue,
+ optionalValue: option.optionalValue,
+ variadic: option.variadic,
+ list: option.list,
+ separator: option.separator
+ }
+ ];
+ }
+ if (opts.flags?.length && !option.args?.length && typeof currentValue !== "undefined") {
+ throw new UnexpectedOptionValueError(option.name, currentValue);
+ }
+ let optionArgsIndex = 0;
+ let inOptionalArg = false;
+ const next = ()=>currentValue ?? args[argsIndex + 1];
+ const previous = ctx.flags[propName];
+ parseNext(option);
+ if (typeof ctx.flags[propName] === "undefined") {
+ if (option.args?.[optionArgsIndex]?.requiredValue) {
+ throw new MissingOptionValueError(option.name);
+ } else if (typeof option.default !== "undefined") {
+ ctx.flags[propName] = getDefaultValue(option);
+ } else {
+ ctx.flags[propName] = true;
+ }
+ }
+ if (option.value) {
+ ctx.flags[propName] = option.value(ctx.flags[propName], previous);
+ } else if (option.collect) {
+ const value = typeof previous !== "undefined" ? Array.isArray(previous) ? previous : [
+ previous
+ ] : [];
+ value.push(ctx.flags[propName]);
+ ctx.flags[propName] = value;
+ }
+ optionsMap.set(propName, option);
+ opts.option?.(option, ctx.flags[propName]);
+ /** Parse next argument for current option. */ // deno-lint-ignore no-inner-declarations
+ function parseNext(option) {
+ if (negate) {
+ ctx.flags[propName] = false;
+ return;
+ } else if (!option.args?.length) {
+ ctx.flags[propName] = undefined;
+ return;
+ }
+ const arg = option.args[optionArgsIndex];
+ if (!arg) {
+ const flag = next();
+ throw new UnknownOptionError(flag, opts.flags ?? []);
+ }
+ if (!arg.type) {
+ arg.type = OptionType.BOOLEAN;
+ }
+ if (option.args?.length && !option.type) {
+ // make all values required by default
+ if ((typeof arg.optionalValue === "undefined" || arg.optionalValue === false) && typeof arg.requiredValue === "undefined") {
+ arg.requiredValue = true;
+ }
+ } else {
+ // make non boolean value required by default
+ if (arg.type !== OptionType.BOOLEAN && (typeof arg.optionalValue === "undefined" || arg.optionalValue === false) && typeof arg.requiredValue === "undefined") {
+ arg.requiredValue = true;
+ }
+ }
+ if (!arg.requiredValue) {
+ inOptionalArg = true;
+ } else if (inOptionalArg) {
+ throw new UnexpectedRequiredArgumentError(option.name);
+ }
+ let result;
+ let increase = false;
+ if (arg.list && hasNext(arg)) {
+ const parsed = next().split(arg.separator || ",").map((nextValue)=>{
+ const value = parseValue(option, arg, nextValue);
+ if (typeof value === "undefined") {
+ throw new InvalidOptionValueError(option.name, arg.type ?? "?", nextValue);
+ }
+ return value;
+ });
+ if (parsed?.length) {
+ result = parsed;
+ }
+ } else {
+ if (hasNext(arg)) {
+ result = parseValue(option, arg, next());
+ } else if (arg.optionalValue && arg.type === OptionType.BOOLEAN) {
+ result = true;
+ }
+ }
+ if (increase && typeof currentValue === "undefined") {
+ argsIndex++;
+ if (!arg.variadic) {
+ optionArgsIndex++;
+ } else if (option.args[optionArgsIndex + 1]) {
+ throw new UnexpectedArgumentAfterVariadicArgumentError(next());
+ }
+ }
+ if (typeof result !== "undefined" && (option.args.length > 1 || arg.variadic)) {
+ if (!ctx.flags[propName]) {
+ ctx.flags[propName] = [];
+ }
+ ctx.flags[propName].push(result);
+ if (hasNext(arg)) {
+ parseNext(option);
+ }
+ } else {
+ ctx.flags[propName] = result;
+ }
+ /** Check if current option should have an argument. */ function hasNext(arg) {
+ if (!option.args?.length) {
+ return false;
+ }
+ const nextValue = currentValue ?? args[argsIndex + 1];
+ if (!nextValue) {
+ return false;
+ }
+ if (option.args.length > 1 && optionArgsIndex >= option.args.length) {
+ return false;
+ }
+ if (arg.requiredValue) {
+ return true;
+ }
+ // require optional values to be called with an equal sign: foo=bar
+ if (option.equalsSign && arg.optionalValue && !arg.variadic && typeof currentValue === "undefined") {
+ return false;
+ }
+ if (arg.optionalValue || arg.variadic) {
+ return nextValue[0] !== "-" || typeof currentValue !== "undefined" || arg.type === OptionType.NUMBER && !isNaN(Number(nextValue));
+ }
+ return false;
+ }
+ /** Parse argument value. */ function parseValue(option, arg, value) {
+ const result = opts.parse ? opts.parse({
+ label: "Option",
+ type: arg.type || OptionType.STRING,
+ name: `--${option.name}`,
+ value
+ }) : parseDefaultType(option, arg, value);
+ if (typeof result !== "undefined") {
+ increase = true;
+ }
+ return result;
+ }
+ }
+ }
+ return optionsMap;
+}
+function parseDottedOptions(ctx) {
+ // convert dotted option keys into nested objects
+ ctx.flags = Object.keys(ctx.flags).reduce((result, key)=>{
+ if (~key.indexOf(".")) {
+ key.split(".").reduce((// deno-lint-ignore no-explicit-any
+ result, subKey, index, parts)=>{
+ if (index === parts.length - 1) {
+ result[subKey] = ctx.flags[key];
+ } else {
+ result[subKey] = result[subKey] ?? {};
+ }
+ return result[subKey];
+ }, result);
+ } else {
+ result[key] = ctx.flags[key];
+ }
+ return result;
+ }, {});
+}
+function splitFlags(flag) {
+ flag = flag.slice(1);
+ const normalized = [];
+ const index = flag.indexOf("=");
+ const flags = (index !== -1 ? flag.slice(0, index) : flag).split("");
+ if (isNaN(Number(flag[flag.length - 1]))) {
+ flags.forEach((val)=>normalized.push(`-${val}`));
+ } else {
+ normalized.push(`-${flags.shift()}`);
+ if (flags.length) {
+ normalized.push(flags.join(""));
+ }
+ }
+ if (index !== -1) {
+ normalized[normalized.length - 1] += flag.slice(index);
+ }
+ return normalized;
+}
+function parseDefaultType(option, arg, value) {
+ const type = arg.type || OptionType.STRING;
+ const parseType = DefaultTypes[type];
+ if (!parseType) {
+ throw new UnknownTypeError(type, Object.keys(DefaultTypes));
+ }
+ return parseType({
+ label: "Option",
+ type,
+ name: `--${option.name}`,
+ value
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvZmxhZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdFZhbHVlLFxuICBnZXRPcHRpb24sXG4gIG1hdGNoV2lsZENhcmRPcHRpb25zLFxuICBwYXJhbUNhc2VUb0NhbWVsQ2FzZSxcbn0gZnJvbSBcIi4vX3V0aWxzLnRzXCI7XG5pbXBvcnQge1xuICBEdXBsaWNhdGVPcHRpb25FcnJvcixcbiAgSW52YWxpZE9wdGlvbkVycm9yLFxuICBJbnZhbGlkT3B0aW9uVmFsdWVFcnJvcixcbiAgTWlzc2luZ09wdGlvblZhbHVlRXJyb3IsXG4gIFVuZXhwZWN0ZWRBcmd1bWVudEFmdGVyVmFyaWFkaWNBcmd1bWVudEVycm9yLFxuICBVbmV4cGVjdGVkT3B0aW9uVmFsdWVFcnJvcixcbiAgVW5leHBlY3RlZFJlcXVpcmVkQXJndW1lbnRFcnJvcixcbiAgVW5rbm93bkNvbmZsaWN0aW5nT3B0aW9uRXJyb3IsXG4gIFVua25vd25PcHRpb25FcnJvcixcbiAgVW5rbm93blJlcXVpcmVkT3B0aW9uRXJyb3IsXG4gIFVua25vd25UeXBlRXJyb3IsXG59IGZyb20gXCIuL19lcnJvcnMudHNcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi9kZXByZWNhdGVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFyZ3VtZW50T3B0aW9ucyxcbiAgQXJndW1lbnRUeXBlLFxuICBGbGFnT3B0aW9ucyxcbiAgUGFyc2VGbGFnc0NvbnRleHQsXG4gIFBhcnNlRmxhZ3NPcHRpb25zLFxuICBUeXBlSGFuZGxlcixcbn0gZnJvbSBcIi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IGJvb2xlYW4gfSBmcm9tIFwiLi90eXBlcy9ib29sZWFuLnRzXCI7XG5pbXBvcnQgeyBudW1iZXIgfSBmcm9tIFwiLi90eXBlcy9udW1iZXIudHNcIjtcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gXCIuL3R5cGVzL3N0cmluZy50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGbGFncyB9IGZyb20gXCIuL192YWxpZGF0ZV9mbGFncy50c1wiO1xuaW1wb3J0IHsgaW50ZWdlciB9IGZyb20gXCIuL3R5cGVzL2ludGVnZXIudHNcIjtcblxuY29uc3QgRGVmYXVsdFR5cGVzOiBSZWNvcmQ8QXJndW1lbnRUeXBlLCBUeXBlSGFuZGxlcj4gPSB7XG4gIHN0cmluZyxcbiAgbnVtYmVyLFxuICBpbnRlZ2VyLFxuICBib29sZWFuLFxufTtcblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLlxuICogQHBhcmFtIGFyZ3NPckN0eCBDb21tYW5kIGxpbmUgYXJndW1lbnRzIGUuZzogYERlbm8uYXJnc2Agb3IgcGFyc2UgY29udGV4dC5cbiAqIEBwYXJhbSBvcHRzICAgICAgUGFyc2Ugb3B0aW9ucy5cbiAqXG4gKiBgYGBcbiAqIC8vIGV4YW1wbGVzL2ZsYWdzL2ZsYWdzLnRzIC14IDMgLXkueiAtbjUgLWFiYyAtLWJlZXA9Ym9vcCBmb28gYmFyIGJheiAtLWRlbm8ubGFuZCAtLWRlbm8uY29tIC0tIC0tY2xpZmZ5XG4gKiBwYXJzZUZsYWdzKERlbm8uYXJncyk7XG4gKiBgYGBcbiAqXG4gKiBPdXRwdXQ6XG4gKlxuICogYGBgXG4gKiB7XG4gKiAgIGZsYWdzOiB7XG4gKiAgICAgeDogXCIzXCIsXG4gKiAgICAgeTogeyB6OiB0cnVlIH0sXG4gKiAgICAgbjogXCI1XCIsXG4gKiAgICAgYTogdHJ1ZSxcbiAqICAgICBiOiB0cnVlLFxuICogICAgIGM6IHRydWUsXG4gKiAgICAgYmVlcDogXCJib29wXCIsXG4gKiAgICAgZGVubzogeyBsYW5kOiB0cnVlLCBjb206IHRydWUgfVxuICogICB9LFxuICogICBsaXRlcmFsOiBbIFwiLS1jbGlmZnlcIiBdLFxuICogICB1bmtub3duOiBbIFwiZm9vXCIsIFwiYmFyXCIsIFwiYmF6XCIgXSxcbiAqICAgc3RvcEVhcmx5OiBmYWxzZSxcbiAqICAgc3RvcE9uVW5rbm93bjogZmFsc2VcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGbGFnczxcbiAgVEZsYWdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRGbGFnT3B0aW9ucyBleHRlbmRzIEZsYWdPcHRpb25zLFxuICBURmxhZ3NSZXN1bHQgZXh0ZW5kcyBQYXJzZUZsYWdzQ29udGV4dCxcbj4oXG4gIGFyZ3NPckN0eDogc3RyaW5nW10gfCBURmxhZ3NSZXN1bHQsXG4gIG9wdHM6IFBhcnNlRmxhZ3NPcHRpb25zPFRGbGFnT3B0aW9ucz4gPSB7fSxcbik6IFRGbGFnc1Jlc3VsdCAmIFBhcnNlRmxhZ3NDb250ZXh0PFRGbGFncywgVEZsYWdPcHRpb25zPiB7XG4gIGxldCBhcmdzOiBBcnJheTxzdHJpbmc+O1xuICBsZXQgY3R4OiBQYXJzZUZsYWdzQ29udGV4dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc09yQ3R4KSkge1xuICAgIGN0eCA9IHt9IGFzIFBhcnNlRmxhZ3NDb250ZXh0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICBhcmdzID0gYXJnc09yQ3R4O1xuICB9IGVsc2Uge1xuICAgIGN0eCA9IGFyZ3NPckN0eDtcbiAgICBhcmdzID0gYXJnc09yQ3R4LnVua25vd247XG4gICAgYXJnc09yQ3R4LnVua25vd24gPSBbXTtcbiAgfVxuICBhcmdzID0gYXJncy5zbGljZSgpO1xuXG4gIGN0eC5mbGFncyA/Pz0ge307XG4gIGN0eC5saXRlcmFsID8/PSBbXTtcbiAgY3R4LnVua25vd24gPz89IFtdO1xuICBjdHguc3RvcEVhcmx5ID0gZmFsc2U7XG4gIGN0eC5zdG9wT25Vbmtub3duID0gZmFsc2U7XG5cbiAgb3B0cy5kb3R0ZWQgPz89IHRydWU7XG5cbiAgdmFsaWRhdGVPcHRpb25zKG9wdHMpO1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGN0eCwgYXJncywgb3B0cyk7XG4gIHZhbGlkYXRlRmxhZ3MoY3R4LCBvcHRzLCBvcHRpb25zKTtcblxuICBpZiAob3B0cy5kb3R0ZWQpIHtcbiAgICBwYXJzZURvdHRlZE9wdGlvbnMoY3R4KTtcbiAgfVxuXG4gIHJldHVybiBjdHggYXMgVEZsYWdzUmVzdWx0ICYgUGFyc2VGbGFnc0NvbnRleHQ8VEZsYWdzLCBURmxhZ09wdGlvbnM+O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbnM8VEZsYWdPcHRpb25zIGV4dGVuZHMgRmxhZ09wdGlvbnM+KFxuICBvcHRzOiBQYXJzZUZsYWdzT3B0aW9uczxURmxhZ09wdGlvbnM+LFxuKSB7XG4gIG9wdHMuZmxhZ3M/LmZvckVhY2goKG9wdCkgPT4ge1xuICAgIG9wdC5kZXBlbmRzPy5mb3JFYWNoKChmbGFnKSA9PiB7XG4gICAgICBpZiAoIW9wdHMuZmxhZ3MgfHwgIWdldE9wdGlvbihvcHRzLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5rbm93blJlcXVpcmVkT3B0aW9uRXJyb3IoZmxhZywgb3B0cy5mbGFncyA/PyBbXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb3B0LmNvbmZsaWN0cz8uZm9yRWFjaCgoZmxhZykgPT4ge1xuICAgICAgaWYgKCFvcHRzLmZsYWdzIHx8ICFnZXRPcHRpb24ob3B0cy5mbGFncywgZmxhZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVua25vd25Db25mbGljdGluZ09wdGlvbkVycm9yKGZsYWcsIG9wdHMuZmxhZ3MgPz8gW10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmdzPFRGbGFnT3B0aW9ucyBleHRlbmRzIEZsYWdPcHRpb25zPihcbiAgY3R4OiBQYXJzZUZsYWdzQ29udGV4dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIGFyZ3M6IEFycmF5PHN0cmluZz4sXG4gIG9wdHM6IFBhcnNlRmxhZ3NPcHRpb25zPFRGbGFnT3B0aW9ucz4sXG4pOiBNYXA8c3RyaW5nLCBGbGFnT3B0aW9ucz4ge1xuICAvKiogT3B0aW9uIG5hbWUgbWFwcGluZzogcHJvcGVydHlOYW1lIC0+IG9wdGlvbi5uYW1lICovXG4gIGNvbnN0IG9wdGlvbnNNYXA6IE1hcDxzdHJpbmcsIEZsYWdPcHRpb25zPiA9IG5ldyBNYXAoKTtcbiAgbGV0IGluTGl0ZXJhbCA9IGZhbHNlO1xuXG4gIGZvciAoXG4gICAgbGV0IGFyZ3NJbmRleCA9IDA7XG4gICAgYXJnc0luZGV4IDwgYXJncy5sZW5ndGg7XG4gICAgYXJnc0luZGV4KytcbiAgKSB7XG4gICAgbGV0IG9wdGlvbjogRmxhZ09wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGN1cnJlbnQ6IHN0cmluZyA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICBsZXQgY3VycmVudFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuXG4gICAgLy8gbGl0ZXJhbCBhcmdzIGFmdGVyIC0tXG4gICAgaWYgKGluTGl0ZXJhbCkge1xuICAgICAgY3R4LmxpdGVyYWwucHVzaChjdXJyZW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gXCItLVwiKSB7XG4gICAgICBpbkxpdGVyYWwgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChjdHguc3RvcEVhcmx5IHx8IGN0eC5zdG9wT25Vbmtub3duKSB7XG4gICAgICBjdHgudW5rbm93bi5wdXNoKGN1cnJlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGbGFnID0gY3VycmVudC5sZW5ndGggPiAxICYmIGN1cnJlbnRbMF0gPT09IFwiLVwiO1xuXG4gICAgaWYgKCFpc0ZsYWcpIHtcbiAgICAgIGlmIChvcHRzLnN0b3BFYXJseSkge1xuICAgICAgICBjdHguc3RvcEVhcmx5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGN0eC51bmtub3duLnB1c2goY3VycmVudCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTaG9ydCA9IGN1cnJlbnRbMV0gIT09IFwiLVwiO1xuICAgIGNvbnN0IGlzTG9uZyA9IGlzU2hvcnQgPyBmYWxzZSA6IGN1cnJlbnQubGVuZ3RoID4gMyAmJiBjdXJyZW50WzJdICE9PSBcIi1cIjtcblxuICAgIGlmICghaXNTaG9ydCAmJiAhaXNMb25nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkVycm9yKGN1cnJlbnQsIG9wdHMuZmxhZ3MgPz8gW10pO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBzaG9ydCBmbGFnczogLWFiYyA9PiAtYSAtYiAtY1xuICAgIGlmIChpc1Nob3J0ICYmIGN1cnJlbnQubGVuZ3RoID4gMiAmJiBjdXJyZW50WzJdICE9PSBcIi5cIikge1xuICAgICAgYXJncy5zcGxpY2UoYXJnc0luZGV4LCAxLCAuLi5zcGxpdEZsYWdzKGN1cnJlbnQpKTtcbiAgICAgIGN1cnJlbnQgPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfSBlbHNlIGlmIChpc0xvbmcgJiYgY3VycmVudC5zdGFydHNXaXRoKFwiLS1uby1cIikpIHtcbiAgICAgIG5lZ2F0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gc3BsaXQgdmFsdWU6IC0tZm9vPVwiYmFyPWJhelwiID0+IC0tZm9vIGJhcj1iYXpcbiAgICBjb25zdCBlcXVhbFNpZ25JbmRleCA9IGN1cnJlbnQuaW5kZXhPZihcIj1cIik7XG4gICAgaWYgKGVxdWFsU2lnbkluZGV4ICE9PSAtMSkge1xuICAgICAgY3VycmVudFZhbHVlID0gY3VycmVudC5zbGljZShlcXVhbFNpZ25JbmRleCArIDEpIHx8IHVuZGVmaW5lZDtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNsaWNlKDAsIGVxdWFsU2lnbkluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5mbGFncykge1xuICAgICAgb3B0aW9uID0gZ2V0T3B0aW9uKG9wdHMuZmxhZ3MsIGN1cnJlbnQpO1xuXG4gICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICBjb25zdCBuYW1lID0gY3VycmVudC5yZXBsYWNlKC9eLSsvLCBcIlwiKTtcbiAgICAgICAgb3B0aW9uID0gbWF0Y2hXaWxkQ2FyZE9wdGlvbnMobmFtZSwgb3B0cy5mbGFncyk7XG4gICAgICAgIGlmICghb3B0aW9uKSB7XG4gICAgICAgICAgaWYgKG9wdHMuc3RvcE9uVW5rbm93bikge1xuICAgICAgICAgICAgY3R4LnN0b3BPblVua25vd24gPSB0cnVlO1xuICAgICAgICAgICAgY3R4LnVua25vd24ucHVzaChhcmdzW2FyZ3NJbmRleF0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBVbmtub3duT3B0aW9uRXJyb3IoY3VycmVudCwgb3B0cy5mbGFncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uID0ge1xuICAgICAgICBuYW1lOiBjdXJyZW50LnJlcGxhY2UoL14tKy8sIFwiXCIpLFxuICAgICAgICBvcHRpb25hbFZhbHVlOiB0cnVlLFxuICAgICAgICB0eXBlOiBPcHRpb25UeXBlLlNUUklORyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbi5zdGFuZGFsb25lKSB7XG4gICAgICBjdHguc3RhbmRhbG9uZSA9IG9wdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGl2ZU5hbWU6IHN0cmluZyA9IG5lZ2F0ZVxuICAgICAgPyBvcHRpb24ubmFtZS5yZXBsYWNlKC9ebm8tPy8sIFwiXCIpXG4gICAgICA6IG9wdGlvbi5uYW1lO1xuICAgIGNvbnN0IHByb3BOYW1lOiBzdHJpbmcgPSBwYXJhbUNhc2VUb0NhbWVsQ2FzZShwb3NpdGl2ZU5hbWUpO1xuXG4gICAgaWYgKHR5cGVvZiBjdHguZmxhZ3NbcHJvcE5hbWVdICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoIW9wdHMuZmxhZ3M/Lmxlbmd0aCkge1xuICAgICAgICBvcHRpb24uY29sbGVjdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb24uY29sbGVjdCkge1xuICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlT3B0aW9uRXJyb3IoY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbi50eXBlICYmICFvcHRpb24uYXJncz8ubGVuZ3RoKSB7XG4gICAgICBvcHRpb24uYXJncyA9IFt7XG4gICAgICAgIHR5cGU6IG9wdGlvbi50eXBlLFxuICAgICAgICByZXF1aXJlZFZhbHVlOiBvcHRpb24ucmVxdWlyZWRWYWx1ZSxcbiAgICAgICAgb3B0aW9uYWxWYWx1ZTogb3B0aW9uLm9wdGlvbmFsVmFsdWUsXG4gICAgICAgIHZhcmlhZGljOiBvcHRpb24udmFyaWFkaWMsXG4gICAgICAgIGxpc3Q6IG9wdGlvbi5saXN0LFxuICAgICAgICBzZXBhcmF0b3I6IG9wdGlvbi5zZXBhcmF0b3IsXG4gICAgICB9XTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvcHRzLmZsYWdzPy5sZW5ndGggJiYgIW9wdGlvbi5hcmdzPy5sZW5ndGggJiZcbiAgICAgIHR5cGVvZiBjdXJyZW50VmFsdWUgIT09IFwidW5kZWZpbmVkXCJcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkT3B0aW9uVmFsdWVFcnJvcihvcHRpb24ubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBsZXQgb3B0aW9uQXJnc0luZGV4ID0gMDtcbiAgICBsZXQgaW5PcHRpb25hbEFyZyA9IGZhbHNlO1xuICAgIGNvbnN0IG5leHQgPSAoKSA9PiBjdXJyZW50VmFsdWUgPz8gYXJnc1thcmdzSW5kZXggKyAxXTtcbiAgICBjb25zdCBwcmV2aW91cyA9IGN0eC5mbGFnc1twcm9wTmFtZV07XG5cbiAgICBwYXJzZU5leHQob3B0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgY3R4LmZsYWdzW3Byb3BOYW1lXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKG9wdGlvbi5hcmdzPy5bb3B0aW9uQXJnc0luZGV4XT8ucmVxdWlyZWRWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ09wdGlvblZhbHVlRXJyb3Iob3B0aW9uLm5hbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uLmRlZmF1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY3R4LmZsYWdzW3Byb3BOYW1lXSA9IGdldERlZmF1bHRWYWx1ZShvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmZsYWdzW3Byb3BOYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbi52YWx1ZSkge1xuICAgICAgY3R4LmZsYWdzW3Byb3BOYW1lXSA9IG9wdGlvbi52YWx1ZShjdHguZmxhZ3NbcHJvcE5hbWVdLCBwcmV2aW91cyk7XG4gICAgfSBlbHNlIGlmIChvcHRpb24uY29sbGVjdCkge1xuICAgICAgY29uc3QgdmFsdWU6IHVua25vd25bXSA9IHR5cGVvZiBwcmV2aW91cyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IChBcnJheS5pc0FycmF5KHByZXZpb3VzKSA/IHByZXZpb3VzIDogW3ByZXZpb3VzXSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgdmFsdWUucHVzaChjdHguZmxhZ3NbcHJvcE5hbWVdKTtcbiAgICAgIGN0eC5mbGFnc1twcm9wTmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBvcHRpb25zTWFwLnNldChwcm9wTmFtZSwgb3B0aW9uKTtcblxuICAgIG9wdHMub3B0aW9uPy4ob3B0aW9uIGFzIFRGbGFnT3B0aW9ucywgY3R4LmZsYWdzW3Byb3BOYW1lXSk7XG5cbiAgICAvKiogUGFyc2UgbmV4dCBhcmd1bWVudCBmb3IgY3VycmVudCBvcHRpb24uICovXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1pbm5lci1kZWNsYXJhdGlvbnNcbiAgICBmdW5jdGlvbiBwYXJzZU5leHQob3B0aW9uOiBGbGFnT3B0aW9ucyk6IHZvaWQge1xuICAgICAgaWYgKG5lZ2F0ZSkge1xuICAgICAgICBjdHguZmxhZ3NbcHJvcE5hbWVdID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbi5hcmdzPy5sZW5ndGgpIHtcbiAgICAgICAgY3R4LmZsYWdzW3Byb3BOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYXJnOiBBcmd1bWVudE9wdGlvbnMgfCB1bmRlZmluZWQgPSBvcHRpb24uYXJnc1tvcHRpb25BcmdzSW5kZXhdO1xuXG4gICAgICBpZiAoIWFyZykge1xuICAgICAgICBjb25zdCBmbGFnID0gbmV4dCgpO1xuICAgICAgICB0aHJvdyBuZXcgVW5rbm93bk9wdGlvbkVycm9yKGZsYWcsIG9wdHMuZmxhZ3MgPz8gW10pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFyZy50eXBlKSB7XG4gICAgICAgIGFyZy50eXBlID0gT3B0aW9uVHlwZS5CT09MRUFOO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmFyZ3M/Lmxlbmd0aCAmJiAhb3B0aW9uLnR5cGUpIHtcbiAgICAgICAgLy8gbWFrZSBhbGwgdmFsdWVzIHJlcXVpcmVkIGJ5IGRlZmF1bHRcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0eXBlb2YgYXJnLm9wdGlvbmFsVmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgICAgIGFyZy5vcHRpb25hbFZhbHVlID09PSBmYWxzZSkgJiZcbiAgICAgICAgICB0eXBlb2YgYXJnLnJlcXVpcmVkVmFsdWUgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXJnLnJlcXVpcmVkVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYWtlIG5vbiBib29sZWFuIHZhbHVlIHJlcXVpcmVkIGJ5IGRlZmF1bHRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFyZy50eXBlICE9PSBPcHRpb25UeXBlLkJPT0xFQU4gJiZcbiAgICAgICAgICAodHlwZW9mIGFyZy5vcHRpb25hbFZhbHVlID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgICAgICBhcmcub3B0aW9uYWxWYWx1ZSA9PT0gZmFsc2UpICYmXG4gICAgICAgICAgdHlwZW9mIGFyZy5yZXF1aXJlZFZhbHVlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICkge1xuICAgICAgICAgIGFyZy5yZXF1aXJlZFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFyZy5yZXF1aXJlZFZhbHVlKSB7XG4gICAgICAgIGluT3B0aW9uYWxBcmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpbk9wdGlvbmFsQXJnKSB7XG4gICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkUmVxdWlyZWRBcmd1bWVudEVycm9yKG9wdGlvbi5uYW1lKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDogdW5rbm93bjtcbiAgICAgIGxldCBpbmNyZWFzZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoYXJnLmxpc3QgJiYgaGFzTmV4dChhcmcpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZDogdW5rbm93bltdID0gbmV4dCgpXG4gICAgICAgICAgLnNwbGl0KGFyZy5zZXBhcmF0b3IgfHwgXCIsXCIpXG4gICAgICAgICAgLm1hcCgobmV4dFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VWYWx1ZShvcHRpb24sIGFyZywgbmV4dFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25WYWx1ZUVycm9yKFxuICAgICAgICAgICAgICAgIG9wdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgIGFyZy50eXBlID8/IFwiP1wiLFxuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGFyc2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHQgPSBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChoYXNOZXh0KGFyZykpIHtcbiAgICAgICAgICByZXN1bHQgPSBwYXJzZVZhbHVlKG9wdGlvbiwgYXJnLCBuZXh0KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGFyZy5vcHRpb25hbFZhbHVlICYmIGFyZy50eXBlID09PSBPcHRpb25UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmNyZWFzZSAmJiB0eXBlb2YgY3VycmVudFZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGFyZ3NJbmRleCsrO1xuICAgICAgICBpZiAoIWFyZy52YXJpYWRpYykge1xuICAgICAgICAgIG9wdGlvbkFyZ3NJbmRleCsrO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5hcmdzW29wdGlvbkFyZ3NJbmRleCArIDFdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBcmd1bWVudEFmdGVyVmFyaWFkaWNBcmd1bWVudEVycm9yKG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmVzdWx0ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIChvcHRpb24uYXJncy5sZW5ndGggPiAxIHx8IGFyZy52YXJpYWRpYylcbiAgICAgICkge1xuICAgICAgICBpZiAoIWN0eC5mbGFnc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICBjdHguZmxhZ3NbcHJvcE5hbWVdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAoY3R4LmZsYWdzW3Byb3BOYW1lXSBhcyBBcnJheTx1bmtub3duPikucHVzaChyZXN1bHQpO1xuXG4gICAgICAgIGlmIChoYXNOZXh0KGFyZykpIHtcbiAgICAgICAgICBwYXJzZU5leHQob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmZsYWdzW3Byb3BOYW1lXSA9IHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLyoqIENoZWNrIGlmIGN1cnJlbnQgb3B0aW9uIHNob3VsZCBoYXZlIGFuIGFyZ3VtZW50LiAqL1xuICAgICAgZnVuY3Rpb24gaGFzTmV4dChhcmc6IEFyZ3VtZW50T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIW9wdGlvbi5hcmdzPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gY3VycmVudFZhbHVlID8/IGFyZ3NbYXJnc0luZGV4ICsgMV07XG4gICAgICAgIGlmICghbmV4dFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb24uYXJncy5sZW5ndGggPiAxICYmIG9wdGlvbkFyZ3NJbmRleCA+PSBvcHRpb24uYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZy5yZXF1aXJlZFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVxdWlyZSBvcHRpb25hbCB2YWx1ZXMgdG8gYmUgY2FsbGVkIHdpdGggYW4gZXF1YWwgc2lnbjogZm9vPWJhclxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9uLmVxdWFsc1NpZ24gJiYgYXJnLm9wdGlvbmFsVmFsdWUgJiYgIWFyZy52YXJpYWRpYyAmJlxuICAgICAgICAgIHR5cGVvZiBjdXJyZW50VmFsdWUgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmcub3B0aW9uYWxWYWx1ZSB8fCBhcmcudmFyaWFkaWMpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlWzBdICE9PSBcIi1cIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGN1cnJlbnRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICAgICAgKGFyZy50eXBlID09PSBPcHRpb25UeXBlLk5VTUJFUiAmJiAhaXNOYU4oTnVtYmVyKG5leHRWYWx1ZSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLyoqIFBhcnNlIGFyZ3VtZW50IHZhbHVlLiAgKi9cbiAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWUoXG4gICAgICAgIG9wdGlvbjogRmxhZ09wdGlvbnMsXG4gICAgICAgIGFyZzogQXJndW1lbnRPcHRpb25zLFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgKTogdW5rbm93biB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogdW5rbm93biA9IG9wdHMucGFyc2VcbiAgICAgICAgICA/IG9wdHMucGFyc2Uoe1xuICAgICAgICAgICAgbGFiZWw6IFwiT3B0aW9uXCIsXG4gICAgICAgICAgICB0eXBlOiBhcmcudHlwZSB8fCBPcHRpb25UeXBlLlNUUklORyxcbiAgICAgICAgICAgIG5hbWU6IGAtLSR7b3B0aW9uLm5hbWV9YCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwYXJzZURlZmF1bHRUeXBlKG9wdGlvbiwgYXJnLCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiByZXN1bHQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaW5jcmVhc2UgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3B0aW9uc01hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VEb3R0ZWRPcHRpb25zKGN0eDogUGFyc2VGbGFnc0NvbnRleHQpOiB2b2lkIHtcbiAgLy8gY29udmVydCBkb3R0ZWQgb3B0aW9uIGtleXMgaW50byBuZXN0ZWQgb2JqZWN0c1xuICBjdHguZmxhZ3MgPSBPYmplY3Qua2V5cyhjdHguZmxhZ3MpLnJlZHVjZShcbiAgICAocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh+a2V5LmluZGV4T2YoXCIuXCIpKSB7XG4gICAgICAgIGtleS5zcGxpdChcIi5cIikucmVkdWNlKFxuICAgICAgICAgIChcbiAgICAgICAgICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgICAgICBzdWJLZXk6IHN0cmluZyxcbiAgICAgICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICBwYXJ0czogc3RyaW5nW10sXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgcmVzdWx0W3N1YktleV0gPSBjdHguZmxhZ3Nba2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdFtzdWJLZXldID0gcmVzdWx0W3N1YktleV0gPz8ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0W3N1YktleV07XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHQsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IGN0eC5mbGFnc1trZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHt9LFxuICApO1xufVxuXG5mdW5jdGlvbiBzcGxpdEZsYWdzKGZsYWc6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBmbGFnID0gZmxhZy5zbGljZSgxKTtcbiAgY29uc3Qgbm9ybWFsaXplZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBjb25zdCBpbmRleCA9IGZsYWcuaW5kZXhPZihcIj1cIik7XG4gIGNvbnN0IGZsYWdzID0gKGluZGV4ICE9PSAtMSA/IGZsYWcuc2xpY2UoMCwgaW5kZXgpIDogZmxhZykuc3BsaXQoXCJcIik7XG5cbiAgaWYgKGlzTmFOKE51bWJlcihmbGFnW2ZsYWcubGVuZ3RoIC0gMV0pKSkge1xuICAgIGZsYWdzLmZvckVhY2goKHZhbCkgPT4gbm9ybWFsaXplZC5wdXNoKGAtJHt2YWx9YCkpO1xuICB9IGVsc2Uge1xuICAgIG5vcm1hbGl6ZWQucHVzaChgLSR7ZmxhZ3Muc2hpZnQoKX1gKTtcbiAgICBpZiAoZmxhZ3MubGVuZ3RoKSB7XG4gICAgICBub3JtYWxpemVkLnB1c2goZmxhZ3Muam9pbihcIlwiKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZC5sZW5ndGggLSAxXSArPSBmbGFnLnNsaWNlKGluZGV4KTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBwYXJzZURlZmF1bHRUeXBlKFxuICBvcHRpb246IEZsYWdPcHRpb25zLFxuICBhcmc6IEFyZ3VtZW50T3B0aW9ucyxcbiAgdmFsdWU6IHN0cmluZyxcbik6IHVua25vd24ge1xuICBjb25zdCB0eXBlOiBBcmd1bWVudFR5cGUgPSBhcmcudHlwZSBhcyBBcmd1bWVudFR5cGUgfHwgT3B0aW9uVHlwZS5TVFJJTkc7XG4gIGNvbnN0IHBhcnNlVHlwZSA9IERlZmF1bHRUeXBlc1t0eXBlXTtcblxuICBpZiAoIXBhcnNlVHlwZSkge1xuICAgIHRocm93IG5ldyBVbmtub3duVHlwZUVycm9yKHR5cGUsIE9iamVjdC5rZXlzKERlZmF1bHRUeXBlcykpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlVHlwZSh7XG4gICAgbGFiZWw6IFwiT3B0aW9uXCIsXG4gICAgdHlwZSxcbiAgICBuYW1lOiBgLS0ke29wdGlvbi5uYW1lfWAsXG4gICAgdmFsdWUsXG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0UsZUFBZSxFQUNmLFNBQVMsRUFDVCxvQkFBb0IsRUFDcEIsb0JBQW9CLFFBQ2YsY0FBYztBQUNyQixTQUNFLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2Qiw0Q0FBNEMsRUFDNUMsMEJBQTBCLEVBQzFCLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0Isa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixnQkFBZ0IsUUFDWCxlQUFlO0FBQ3RCLFNBQVMsVUFBVSxRQUFRLGtCQUFrQjtBQVM3QyxTQUFTLE9BQU8sUUFBUSxxQkFBcUI7QUFDN0MsU0FBUyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVMsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTLGFBQWEsUUFBUSx1QkFBdUI7QUFDckQsU0FBUyxPQUFPLFFBQVEscUJBQXFCO0FBRTdDLE1BQU0sZUFBa0Q7RUFDdEQ7RUFDQTtFQUNBO0VBQ0E7QUFDRjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QkMsR0FDRCxPQUFPLFNBQVMsV0FLZCxTQUFrQyxFQUNsQyxPQUF3QyxDQUFDLENBQUM7RUFFMUMsSUFBSTtFQUNKLElBQUk7RUFFSixJQUFJLE1BQU0sT0FBTyxDQUFDLFlBQVk7SUFDNUIsTUFBTSxDQUFDO0lBQ1AsT0FBTztFQUNULE9BQU87SUFDTCxNQUFNO0lBQ04sT0FBTyxVQUFVLE9BQU87SUFDeEIsVUFBVSxPQUFPLEdBQUcsRUFBRTtFQUN4QjtFQUNBLE9BQU8sS0FBSyxLQUFLO0VBRWpCLElBQUksS0FBSyxLQUFLLENBQUM7RUFDZixJQUFJLE9BQU8s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
+// denoCacheMetadata=8954887979831142167,9777150289833451421 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c421fbca3fa750ad5bd8ab518977815e39211072fa28843400e1abf98522894e.js b/vendor/gen/https/deno.land/c421fbca3fa750ad5bd8ab518977815e39211072fa28843400e1abf98522894e.js
new file mode 100644
index 0000000..75aba6c
--- /dev/null
+++ b/vendor/gen/https/deno.land/c421fbca3fa750ad5bd8ab518977815e39211072fa28843400e1abf98522894e.js
@@ -0,0 +1,263 @@
+import { GenericInput } from "./_generic_input.ts";
+import { bold, brightBlue, dim, stripColor } from "./deps.ts";
+import { Figures, getFiguresByKeys } from "./figures.ts";
+import { distance } from "../_utils/distance.ts";
+/** Generic list prompt representation. */ export class GenericList extends GenericInput {
+ options = this.settings.options;
+ listIndex = this.getListIndex();
+ listOffset = this.getPageOffset(this.listIndex);
+ /**
+ * Create list separator.
+ * @param label Separator label.
+ */ static separator(label = "------------") {
+ return {
+ value: label,
+ disabled: true
+ };
+ }
+ /**
+ * Set list option defaults.
+ * @param option List option.
+ */ static mapOption(option) {
+ return {
+ value: option.value,
+ name: typeof option.name === "undefined" ? option.value : option.name,
+ disabled: !!option.disabled
+ };
+ }
+ constructor(settings){
+ super({
+ ...settings,
+ keys: {
+ previous: settings.search ? [
+ "up"
+ ] : [
+ "up",
+ "u",
+ "p",
+ "8"
+ ],
+ next: settings.search ? [
+ "down"
+ ] : [
+ "down",
+ "d",
+ "n",
+ "2"
+ ],
+ previousPage: [
+ "pageup",
+ "left"
+ ],
+ nextPage: [
+ "pagedown",
+ "right"
+ ],
+ ...settings.keys ?? {}
+ }
+ });
+ }
+ match() {
+ const input = this.getCurrentInputValue().toLowerCase();
+ if (!input.length) {
+ this.options = this.settings.options.slice();
+ } else {
+ this.options = this.settings.options.filter((option)=>match(option.name) || option.name !== option.value && match(option.value)).sort((a, b)=>distance(a.name, input) - distance(b.name, input));
+ }
+ this.listIndex = Math.max(0, Math.min(this.options.length - 1, this.listIndex));
+ this.listOffset = Math.max(0, Math.min(this.options.length - this.getListHeight(), this.listOffset));
+ function match(value) {
+ return stripColor(value).toLowerCase().includes(input);
+ }
+ }
+ message() {
+ let message = `${this.settings.indent}${this.settings.prefix}` + bold(this.settings.message) + this.defaults();
+ if (this.settings.search) {
+ message += " " + this.settings.searchLabel + " ";
+ }
+ this.cursor.x = stripColor(message).length + this.inputIndex + 1;
+ return message + this.input();
+ }
+ /** Render options. */ body() {
+ return this.getList() + this.getInfo();
+ }
+ getInfo() {
+ if (!this.settings.info) {
+ return "";
+ }
+ const selected = this.listIndex + 1;
+ const actions = [
+ [
+ "Next",
+ getFiguresByKeys(this.settings.keys?.next ?? [])
+ ],
+ [
+ "Previous",
+ getFiguresByKeys(this.settings.keys?.previous ?? [])
+ ],
+ [
+ "Next Page",
+ getFiguresByKeys(this.settings.keys?.nextPage ?? [])
+ ],
+ [
+ "Previous Page",
+ getFiguresByKeys(this.settings.keys?.previousPage ?? [])
+ ],
+ [
+ "Submit",
+ getFiguresByKeys(this.settings.keys?.submit ?? [])
+ ]
+ ];
+ return "\n" + this.settings.indent + brightBlue(Figures.INFO) + bold(` ${selected}/${this.options.length} `) + actions.map((cur)=>`${cur[0]}: ${bold(cur[1].join(", "))}`).join(", ");
+ }
+ /** Render options list. */ getList() {
+ const list = [];
+ const height = this.getListHeight();
+ for(let i = this.listOffset; i < this.listOffset + height; i++){
+ list.push(this.getListItem(this.options[i], this.listIndex === i));
+ }
+ if (!list.length) {
+ list.push(this.settings.indent + dim(" No matches..."));
+ }
+ return list.join("\n");
+ }
+ /** Get options row height. */ getListHeight() {
+ return Math.min(this.options.length, this.settings.maxRows || this.options.length);
+ }
+ getListIndex(value) {
+ return Math.max(0, typeof value === "undefined" ? this.options.findIndex((item)=>!item.disabled) || 0 : this.options.findIndex((item)=>item.value === value) || 0);
+ }
+ getPageOffset(index) {
+ if (index === 0) {
+ return 0;
+ }
+ const height = this.getListHeight();
+ return Math.floor(index / height) * height;
+ }
+ /**
+ * Find option by value.
+ * @param value Value of the option.
+ */ getOptionByValue(value) {
+ return this.options.find((option)=>option.value === value);
+ }
+ /** Read user input. */ read() {
+ if (!this.settings.search) {
+ this.tty.cursorHide();
+ }
+ return super.read();
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case this.isKey(this.settings.keys, "previous", event):
+ this.selectPrevious();
+ break;
+ case this.isKey(this.settings.keys, "next", event):
+ this.selectNext();
+ break;
+ case this.isKey(this.settings.keys, "nextPage", event):
+ this.selectNextPage();
+ break;
+ case this.isKey(this.settings.keys, "previousPage", event):
+ this.selectPreviousPage();
+ break;
+ default:
+ await super.handleEvent(event);
+ }
+ }
+ moveCursorLeft() {
+ if (this.settings.search) {
+ super.moveCursorLeft();
+ }
+ }
+ moveCursorRight() {
+ if (this.settings.search) {
+ super.moveCursorRight();
+ }
+ }
+ deleteChar() {
+ if (this.settings.search) {
+ super.deleteChar();
+ }
+ }
+ deleteCharRight() {
+ if (this.settings.search) {
+ super.deleteCharRight();
+ this.match();
+ }
+ }
+ addChar(char) {
+ if (this.settings.search) {
+ super.addChar(char);
+ this.match();
+ }
+ }
+ /** Select previous option. */ selectPrevious() {
+ if (this.options.length < 2) {
+ return;
+ }
+ if (this.listIndex > 0) {
+ this.listIndex--;
+ if (this.listIndex < this.listOffset) {
+ this.listOffset--;
+ }
+ if (this.options[this.listIndex].disabled) {
+ this.selectPrevious();
+ }
+ } else {
+ this.listIndex = this.options.length - 1;
+ this.listOffset = this.options.length - this.getListHeight();
+ if (this.options[this.listIndex].disabled) {
+ this.selectPrevious();
+ }
+ }
+ }
+ /** Select next option. */ selectNext() {
+ if (this.options.length < 2) {
+ return;
+ }
+ if (this.listIndex < this.options.length - 1) {
+ this.listIndex++;
+ if (this.listIndex >= this.listOffset + this.getListHeight()) {
+ this.listOffset++;
+ }
+ if (this.options[this.listIndex].disabled) {
+ this.selectNext();
+ }
+ } else {
+ this.listIndex = this.listOffset = 0;
+ if (this.options[this.listIndex].disabled) {
+ this.selectNext();
+ }
+ }
+ }
+ /** Select previous page. */ selectPreviousPage() {
+ if (this.options?.length) {
+ const height = this.getListHeight();
+ if (this.listOffset >= height) {
+ this.listIndex -= height;
+ this.listOffset -= height;
+ } else if (this.listOffset > 0) {
+ this.listIndex -= this.listOffset;
+ this.listOffset = 0;
+ }
+ }
+ }
+ /** Select next page. */ selectNextPage() {
+ if (this.options?.length) {
+ const height = this.getListHeight();
+ if (this.listOffset + height + height < this.options.length) {
+ this.listIndex += height;
+ this.listOffset += height;
+ } else if (this.listOffset + height < this.options.length) {
+ const offset = this.options.length - height;
+ this.listIndex += offset - this.listOffset;
+ this.listOffset = offset;
+ }
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L19nZW5lcmljX2xpc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXlDb2RlIH0gZnJvbSBcIi4uL2tleWNvZGUva2V5X2NvZGUudHNcIjtcbmltcG9ydCB7XG4gIEdlbmVyaWNJbnB1dCxcbiAgR2VuZXJpY0lucHV0S2V5cyxcbiAgR2VuZXJpY0lucHV0UHJvbXB0T3B0aW9ucyxcbiAgR2VuZXJpY0lucHV0UHJvbXB0U2V0dGluZ3MsXG59IGZyb20gXCIuL19nZW5lcmljX2lucHV0LnRzXCI7XG5pbXBvcnQgeyBib2xkLCBicmlnaHRCbHVlLCBkaW0sIHN0cmlwQ29sb3IgfSBmcm9tIFwiLi9kZXBzLnRzXCI7XG5pbXBvcnQgeyBGaWd1cmVzLCBnZXRGaWd1cmVzQnlLZXlzIH0gZnJvbSBcIi4vZmlndXJlcy50c1wiO1xuaW1wb3J0IHsgZGlzdGFuY2UgfSBmcm9tIFwiLi4vX3V0aWxzL2Rpc3RhbmNlLnRzXCI7XG5cbi8qKiBTZWxlY3Qga2V5IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNMaXN0S2V5cyBleHRlbmRzIEdlbmVyaWNJbnB1dEtleXMge1xuICBwcmV2aW91cz86IHN0cmluZ1tdO1xuICBuZXh0Pzogc3RyaW5nW107XG4gIHByZXZpb3VzUGFnZT86IHN0cmluZ1tdO1xuICBuZXh0UGFnZT86IHN0cmluZ1tdO1xufVxuXG4vKiogR2VuZXJpYyBsaXN0IG9wdGlvbiBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljTGlzdE9wdGlvbiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqIEdlbmVyaWMgbGlzdCBvcHRpb24gc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNMaXN0T3B0aW9uU2V0dGluZ3MgZXh0ZW5kcyBHZW5lcmljTGlzdE9wdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEdlbmVyaWNMaXN0VmFsdWVPcHRpb25zID0gKHN0cmluZyB8IEdlbmVyaWNMaXN0T3B0aW9uKVtdO1xuZXhwb3J0IHR5cGUgR2VuZXJpY0xpc3RWYWx1ZVNldHRpbmdzID0gR2VuZXJpY0xpc3RPcHRpb25TZXR0aW5nc1tdO1xuXG50eXBlIFVuc3VwcG9ydGVkSW5wdXRPcHRpb25zID0gXCJzdWdnZXN0aW9uc1wiIHwgXCJsaXN0XCI7XG5cbi8qKiBHZW5lcmljIGxpc3QgcHJvbXB0IG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNMaXN0T3B0aW9uczxUVmFsdWUsIFRSYXdWYWx1ZT4gZXh0ZW5kc1xuICBPbWl0PFxuICAgIEdlbmVyaWNJbnB1dFByb21wdE9wdGlvbnM8VFZhbHVlLCBUUmF3VmFsdWU+LFxuICAgIFVuc3VwcG9ydGVkSW5wdXRPcHRpb25zXG4gID4ge1xuICBvcHRpb25zOiBHZW5lcmljTGlzdFZhbHVlT3B0aW9ucztcbiAga2V5cz86IEdlbmVyaWNMaXN0S2V5cztcbiAgaW5kZW50Pzogc3RyaW5nO1xuICBsaXN0UG9pbnRlcj86IHN0cmluZztcbiAgc2VhcmNoSWNvbj86IHN0cmluZztcbiAgbWF4Um93cz86IG51bWJlcjtcbiAgc2VhcmNoTGFiZWw/OiBzdHJpbmc7XG4gIHNlYXJjaD86IGJvb2xlYW47XG4gIGluZm8/OiBib29sZWFuO1xufVxuXG4vKiogR2VuZXJpYyBsaXN0IHByb21wdCBzZXR0aW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0xpc3RTZXR0aW5nczxUVmFsdWUsIFRSYXdWYWx1ZT5cbiAgZXh0ZW5kcyBHZW5lcmljSW5wdXRQcm9tcHRTZXR0aW5nczxUVmFsdWUsIFRSYXdWYWx1ZT4ge1xuICBvcHRpb25zOiBHZW5lcmljTGlzdFZhbHVlU2V0dGluZ3M7XG4gIGtleXM/OiBHZW5lcmljTGlzdEtleXM7XG4gIGluZGVudDogc3RyaW5nO1xuICBsaXN0UG9pbnRlcjogc3RyaW5nO1xuICBtYXhSb3dzOiBudW1iZXI7XG4gIHNlYXJjaExhYmVsOiBzdHJpbmc7XG4gIHNlYXJjaD86IGJvb2xlYW47XG4gIGluZm8/OiBib29sZWFuO1xufVxuXG4vKiogR2VuZXJpYyBsaXN0IHByb21wdCByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljTGlzdDxcbiAgVFZhbHVlLFxuICBUUmF3VmFsdWUsXG4gIFRTZXR0aW5ncyBleHRlbmRzIEdlbmVyaWNMaXN0U2V0dGluZ3M8VFZhbHVlLCBUUmF3VmFsdWU+LFxuPiBleHRlbmRzIEdlbmVyaWNJbnB1dDxUVmFsdWUsIFRSYXdWYWx1ZSwgVFNldHRpbmdzPiB7XG4gIHByb3RlY3RlZCBvcHRpb25zOiBUU2V0dGluZ3NbXCJvcHRpb25zXCJdID0gdGhpcy5zZXR0aW5ncy5vcHRpb25zO1xuICBwcm90ZWN0ZWQgbGlzdEluZGV4OiBudW1iZXIgPSB0aGlzLmdldExpc3RJbmRleCgpO1xuICBwcm90ZWN0ZWQgbGlzdE9mZnNldDogbnVtYmVyID0gdGhpcy5nZXRQYWdlT2Zmc2V0KHRoaXMubGlzdEluZGV4KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGxpc3Qgc2VwYXJhdG9yLlxuICAgKiBAcGFyYW0gbGFiZWwgU2VwYXJhdG9yIGxhYmVsLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXBhcmF0b3IobGFiZWwgPSBcIi0tLS0tLS0tLS0tLVwiKTogR2VuZXJpY0xpc3RPcHRpb24ge1xuICAgIHJldHVybiB7IHZhbHVlOiBsYWJlbCwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbGlzdCBvcHRpb24gZGVmYXVsdHMuXG4gICAqIEBwYXJhbSBvcHRpb24gTGlzdCBvcHRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIG1hcE9wdGlvbihcbiAgICBvcHRpb246IEdlbmVyaWNMaXN0T3B0aW9uLFxuICApOiBHZW5lcmljTGlzdE9wdGlvblNldHRpbmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBvcHRpb24ubmFtZSA9PT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5uYW1lLFxuICAgICAgZGlzYWJsZWQ6ICEhb3B0aW9uLmRpc2FibGVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzZXR0aW5nczogVFNldHRpbmdzKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICBrZXlzOiB7XG4gICAgICAgIHByZXZpb3VzOiBzZXR0aW5ncy5zZWFyY2ggPyBbXCJ1cFwiXSA6IFtcInVwXCIsIFwidVwiLCBcInBcIiwgXCI4XCJdLFxuICAgICAgICBuZXh0OiBzZXR0aW5ncy5zZWFyY2ggPyBbXCJkb3duXCJdIDogW1wiZG93blwiLCBcImRcIiwgXCJuXCIsIFwiMlwiXSxcbiAgICAgICAgcHJldmlvdXNQYWdlOiBbXCJwYWdldXBcIiwgXCJsZWZ0XCJdLFxuICAgICAgICBuZXh0UGFnZTogW1wicGFnZWRvd25cIiwgXCJyaWdodFwiXSxcbiAgICAgICAgLi4uKHNldHRpbmdzLmtleXMgPz8ge30pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXRjaCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dDogc3RyaW5nID0gdGhpcy5nZXRDdXJyZW50SW5wdXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0dGluZ3Mub3B0aW9ucy5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNldHRpbmdzLm9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigob3B0aW9uOiBHZW5lcmljTGlzdE9wdGlvblNldHRpbmdzKSA9PlxuICAgICAgICAgIG1hdGNoKG9wdGlvbi5uYW1lKSB8fFxuICAgICAgICAgIChvcHRpb24ubmFtZSAhPT0gb3B0aW9uLnZhbHVlICYmIG1hdGNoKG9wdGlvbi52YWx1ZSkpXG4gICAgICAgIClcbiAgICAgICAgLnNvcnQoKGE6IEdlbmVyaWNMaXN0T3B0aW9uU2V0dGluZ3MsIGI6IEdlbmVyaWNMaXN0T3B0aW9uU2V0dGluZ3MpID0+XG4gICAgICAgICAgZGlzdGFuY2UoYS5uYW1lLCBpbnB1dCkgLSBkaXN0YW5jZShiLm5hbWUsIGlucHV0KVxuICAgICAgICApO1xuICAgIH1cbiAgICB0aGlzLmxpc3RJbmRleCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKHRoaXMub3B0aW9ucy5sZW5ndGggLSAxLCB0aGlzLmxpc3RJbmRleCksXG4gICAgKTtcbiAgICB0aGlzLmxpc3RPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5vcHRpb25zLmxlbmd0aCAtIHRoaXMuZ2V0TGlzdEhlaWdodCgpLFxuICAgICAgICB0aGlzLmxpc3RPZmZzZXQsXG4gICAgICApLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gc3RyaXBDb2xvcih2YWx1ZSlcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLmluY2x1ZGVzKGlucHV0KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGxldCBtZXNzYWdlID0gYCR7dGhpcy5zZXR0aW5ncy5pbmRlbnR9JHt0aGlzLnNldHRpbmdzLnByZWZpeH1gICtcbiAgICAgIGJvbGQodGhpcy5zZXR0aW5ncy5tZXNzYWdlKSArXG4gICAgICB0aGlzLmRlZmF1bHRzKCk7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VhcmNoKSB7XG4gICAgICBtZXNzYWdlICs9IFwiIFwiICsgdGhpcy5zZXR0aW5ncy5zZWFyY2hMYWJlbCArIFwiIFwiO1xuICAgIH1cbiAgICB0aGlzLmN1cnNvci54ID0gc3RyaXBDb2xvcihtZXNzYWdlKS5sZW5ndGggKyB0aGlzLmlucHV0SW5kZXggKyAxO1xuICAgIHJldHVybiBtZXNzYWdlICsgdGhpcy5pbnB1dCgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciBvcHRpb25zLiAqL1xuICBwcm90ZWN0ZWQgYm9keSgpOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldExpc3QoKSArIHRoaXMuZ2V0SW5mbygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEluZm8oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuaW5mbykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkOiBudW1iZXIgPSB0aGlzLmxpc3RJbmRleCArIDE7XG4gICAgY29uc3QgYWN0aW9uczogQXJyYXk8W3N0cmluZywgQXJyYXk8c3RyaW5nPl0+ID0gW1xuICAgICAgW1wiTmV4dFwiLCBnZXRGaWd1cmVzQnlLZXlzKHRoaXMuc2V0dGluZ3Mua2V5cz8ubmV4dCA/PyBbXSldLFxuICAgICAgW1wiUHJldmlvdXNcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/LnByZXZpb3VzID8/IFtdKV0sXG4gICAgICBbXCJOZXh0IFBhZ2VcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/Lm5leHRQYWdlID8/IFtdKV0sXG4gICAgICBbXG4gICAgICAgIFwiUHJldmlvdXMgUGFnZVwiLFxuICAgICAgICBnZXRGaWd1cmVzQnlLZXlzKHRoaXMuc2V0dGluZ3Mua2V5cz8ucHJldmlvdXNQYWdlID8/IFtdKSxcbiAgICAgIF0sXG4gICAgICBbXCJTdWJtaXRcIiwgZ2V0RmlndXJlc0J5S2V5cyh0aGlzLnNldHRpbmdzLmtleXM/LnN1Ym1pdCA/PyBbXSldLFxuICAgIF07XG5cbiAgICByZXR1cm4gXCJcXG5cIiArIHRoaXMuc2V0dGluZ3MuaW5kZW50ICsgYnJpZ2h0Qmx1ZShGaWd1cmVzLklORk8pICtcbiAgICAgIGJvbGQoYCAke3NlbGVjdGVkfS8ke3RoaXMub3B0aW9ucy5sZW5ndGh9IGApICtcbiAgICAgIGFjdGlvbnNcbiAgICAgICAgLm1hcCgoY3VyKSA9PiBgJHtjdXJbMF19OiAke2JvbGQoY3VyWzFdLmpvaW4oXCIsIFwiKSl9YClcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgb3B0aW9ucyBsaXN0LiAqL1xuICBwcm90ZWN0ZWQgZ2V0TGlzdCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpc3Q6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBoZWlnaHQ6IG51bWJlciA9IHRoaXMuZ2V0TGlzdEhlaWdodCgpO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmxpc3RPZmZzZXQ7IGkgPCB0aGlzLmxpc3RPZmZzZXQgKyBoZWlnaHQ7IGkrKykge1xuICAgICAgbGlzdC5wdXNoKFxuICAgICAgICB0aGlzLmdldExpc3RJdGVtKFxuICAgICAgICAgIHRoaXMub3B0aW9uc1tpXSxcbiAgICAgICAgICB0aGlzLmxpc3RJbmRleCA9PT0gaSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgIGxpc3QucHVzaChcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5pbmRlbnQgKyBkaW0oXCIgIE5vIG1hdGNoZXMuLi5cIiksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdC5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBvcHRpb24uXG4gICAqIEBwYXJhbSBpdGVtICAgICAgICBPcHRpb24uXG4gICAqIEBwYXJhbSBpc1NlbGVjdGVkICBTZXQgdG8gdHJ1ZSBpZiBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0TGlzdEl0ZW0oXG4gICAgaXRlbTogR2VuZXJpY0xpc3RPcHRpb25TZXR0aW5ncyxcbiAgICBpc1NlbGVjdGVkPzogYm9vbGVhbixcbiAgKTogc3RyaW5nO1xuXG4gIC8qKiBHZXQgb3B0aW9ucyByb3cgaGVpZ2h0LiAqL1xuICBwcm90ZWN0ZWQgZ2V0TGlzdEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGgsXG4gICAgICB0aGlzLnNldHRpbmdzLm1heFJvd3MgfHwgdGhpcy5vcHRpb25zLmxlbmd0aCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldExpc3RJbmRleCh2YWx1ZT86IHN0cmluZykge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZmluZEluZGV4KChpdGVtOiBHZW5lcmljTGlzdE9wdGlvblNldHRpbmdzKSA9PlxuICAgICAgICAgICFpdGVtLmRpc2FibGVkXG4gICAgICAgICkgfHwgMFxuICAgICAgICA6IHRoaXMub3B0aW9ucy5maW5kSW5kZXgoKGl0ZW06IEdlbmVyaWNMaXN0T3B0aW9uU2V0dGluZ3MpID0+XG4gICAgICAgICAgaXRlbS52YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgKSB8fCAwLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZU9mZnNldChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgaGVpZ2h0OiBudW1iZXIgPSB0aGlzLmdldExpc3RIZWlnaHQoKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihpbmRleCAvIGhlaWdodCkgKiBoZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBvcHRpb24gYnkgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgb3B0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE9wdGlvbkJ5VmFsdWUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgKTogR2VuZXJpY0xpc3RPcHRpb25TZXR0aW5ncyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuICB9XG5cbiAgLyoqIFJlYWQgdXNlciBpbnB1dC4gKi9cbiAgcHJvdGVjdGVkIHJlYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLnNlYXJjaCkge1xuICAgICAgdGhpcy50dHkuY3Vyc29ySGlkZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucmVhZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB1c2VyIGlucHV0IGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgS2V5IGV2ZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUV2ZW50KGV2ZW50OiBLZXlDb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHRoaXMuaXNLZXkodGhpcy5zZXR0aW5ncy5rZXlzLCBcInByZXZpb3VzXCIsIGV2ZW50KTpcbiAgICAgICAgdGhpcy5zZWxlY3RQcmV2aW91cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwibmV4dFwiLCBldmVudCk6XG4gICAgICAgIHRoaXMuc2VsZWN0TmV4dCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwibmV4dFBhZ2VcIiwgZXZlbnQpOlxuICAgICAgICB0aGlzLnNlbGVjdE5leHRQYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJwcmV2aW91c1BhZ2VcIiwgZXZlbnQpOlxuICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzUGFnZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGF3YWl0IHN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbW92ZUN1cnNvckxlZnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VhcmNoKSB7XG4gICAgICBzdXBlci5tb3ZlQ3Vyc29yTGVmdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBtb3ZlQ3Vyc29yUmlnaHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VhcmNoKSB7XG4gICAgICBzdXBlci5tb3ZlQ3Vyc29yUmlnaHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlQ2hhcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5zZWFyY2gpIHtcbiAgICAgIHN1cGVyLmRlbGV0ZUNoYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlQ2hhclJpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnNlYXJjaCkge1xuICAgICAgc3VwZXIuZGVsZXRlQ2hhclJpZ2h0KCk7XG4gICAgICB0aGlzLm1hdGNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZENoYXIoY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VhcmNoKSB7XG4gICAgICBzdXBlci5hZGRDaGFyKGNoYXIpO1xuICAgICAgdGhpcy5tYXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3QgcHJldmlvdXMgb3B0aW9uLiAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0UHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxpc3RJbmRleCA+IDApIHtcbiAgICAgIHRoaXMubGlzdEluZGV4LS07XG4gICAgICBpZiAodGhpcy5saXN0SW5kZXggPCB0aGlzLmxpc3RPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5saXN0T2Zmc2V0LS07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zW3RoaXMubGlzdEluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdEluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB0aGlzLmxpc3RPZmZzZXQgPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gdGhpcy5nZXRMaXN0SGVpZ2h0KCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zW3RoaXMubGlzdEluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlbGVjdCBuZXh0IG9wdGlvbi4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdE5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxpc3RJbmRleCA8IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmxpc3RJbmRleCsrO1xuICAgICAgaWYgKHRoaXMubGlzdEluZGV4ID49IHRoaXMubGlzdE9mZnNldCArIHRoaXMuZ2V0TGlzdEhlaWdodCgpKSB7XG4gICAgICAgIHRoaXMubGlzdE9mZnNldCsrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9uc1t0aGlzLmxpc3RJbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3ROZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdEluZGV4ID0gdGhpcy5saXN0T2Zmc2V0ID0gMDtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnNbdGhpcy5saXN0SW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0TmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3QgcHJldmlvdXMgcGFnZS4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdFByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGhlaWdodDogbnVtYmVyID0gdGhpcy5nZXRMaXN0SGVpZ2h0KCk7XG4gICAgICBpZiAodGhpcy5saXN0T2Zmc2V0ID49IGhlaWdodCkge1xuICAgICAgICB0aGlzLmxpc3RJbmRleCAtPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMubGlzdE9mZnNldCAtPSBoZWlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGlzdE9mZnNldCA+IDApIHtcbiAgICAgICAgdGhpcy5saXN0SW5kZXggLT0gdGhpcy5saXN0T2Zmc2V0O1xuICAgICAgICB0aGlzLmxpc3RPZmZzZXQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3QgbmV4dCBwYWdlLiAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0TmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBoZWlnaHQ6IG51bWJlciA9IHRoaXMuZ2V0TGlzdEhlaWdodCgpO1xuICAgICAgaWYgKHRoaXMubGlzdE9mZnNldCArIGhlaWdodCArIGhlaWdodCA8IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5saXN0SW5kZXggKz0gaGVpZ2h0O1xuICAgICAgICB0aGlzLmxpc3RPZmZzZXQgKz0gaGVpZ2h0O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmxpc3RPZmZzZXQgKyBoZWlnaHQgPCB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSBoZWlnaHQ7XG4gICAgICAgIHRoaXMubGlzdEluZGV4ICs9IG9mZnNldCAtIHRoaXMubGlzdE9mZnNldDtcbiAgICAgICAgdGhpcy5saXN0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQ0UsWUFBWSxRQUlQLHNCQUFzQjtBQUM3QixTQUFTLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFVBQVUsUUFBUSxZQUFZO0FBQzlELFNBQVMsT0FBTyxFQUFFLGdCQUFnQixRQUFRLGVBQWU7QUFDekQsU0FBUyxRQUFRLFFBQVEsd0JBQXdCO0FBMkRqRCx3Q0FBd0MsR0FDeEMsT0FBTyxNQUFlLG9CQUlaO0VBQ0UsVUFBZ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7RUFDdEQsWUFBb0IsSUFBSSxDQUFDLFlBQVksR0FBRztFQUN4QyxhQUFxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFFbEU7OztHQUdDLEdBQ0QsT0FBYyxVQUFVLFFBQVEsY0FBYyxFQUFxQjtJQUNqRSxPQUFPO01BQUUsT0FBTztNQUFPLFVBQVU7SUFBSztFQUN4QztFQUVBOzs7R0FHQyxHQUNELE9BQWlCLFVBQ2YsTUFBeUIsRUFDRTtJQUMzQixPQUFPO01BQ0wsT0FBTyxPQUFPLEtBQUs7TUFDbkIsTUFBTSxPQUFPLE9BQU8sSUFBSSxLQUFLLGNBQWMsT0FBTyxLQUFLLEdBQUcsT0FBTyxJQUFJO01BQ3JFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sUUFBUTtJQUM3QjtFQUNGO0VBRUEsWUFBWSxRQUFtQixDQUFFO0lBQy9CLEtBQUssQ0FBQztNQUNKLEdBQUcsUUFBUTtNQUNYLE1BQU07UUFDSixVQUFVLFNBQVMsTUFBTSxHQUFHO1VBQUM7U0FBSyxHQUFHO1VBQUM7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
+// denoCacheMetadata=8910189736107196,4077302412524458352 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c4ef91eda37aa641a25cfd385328c9732b4221eec13d8b930ffa6b22cbf60e54.js b/vendor/gen/https/deno.land/c4ef91eda37aa641a25cfd385328c9732b4221eec13d8b930ffa6b22cbf60e54.js
new file mode 100644
index 0000000..ccf010c
--- /dev/null
+++ b/vendor/gen/https/deno.land/c4ef91eda37aa641a25cfd385328c9732b4221eec13d8b930ffa6b22cbf60e54.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/fmt@1.0.8/colors";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9jb2xvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImpzcjpAc3RkL2ZtdEAxLjAuOC9jb2xvcnNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QiJ9
+// denoCacheMetadata=966015928896968116,15061326194002891679 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c58677db7dd1da121aa6bbba12387b02c31d47527dfddf4f19a7be673985f6af.js b/vendor/gen/https/deno.land/c58677db7dd1da121aa6bbba12387b02c31d47527dfddf4f19a7be673985f6af.js
new file mode 100644
index 0000000..9c97a4d
--- /dev/null
+++ b/vendor/gen/https/deno.land/c58677db7dd1da121aa6bbba12387b02c31d47527dfddf4f19a7be673985f6af.js
@@ -0,0 +1,25 @@
+import { Command } from "../command.ts";
+import { UnknownCompletionCommandError } from "../_errors.ts";
+/** Execute auto completion method of command and action. */ export class CompleteCommand extends Command {
+ constructor(cmd){
+ super();
+ return this.description("Get completions for given action from given command.").noGlobals().arguments("<action:string> [command...:string]").action(async (_, action, ...commandNames)=>{
+ let parent;
+ const completeCommand = commandNames?.reduce((cmd, name)=>{
+ parent = cmd;
+ const childCmd = cmd.getCommand(name, false);
+ if (!childCmd) {
+ throw new UnknownCompletionCommandError(name, cmd.getCommands());
+ }
+ return childCmd;
+ }, cmd || this.getMainCommand()) ?? (cmd || this.getMainCommand());
+ const completion = completeCommand.getCompletion(action);
+ const result = await completion?.complete(completeCommand, parent) ?? [];
+ if (result?.length) {
+ Deno.stdout.writeSync(new TextEncoder().encode(result.join("\n")));
+ }
+ }).reset();
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9jb21wbGV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmQudHNcIjtcbmltcG9ydCB7IFVua25vd25Db21wbGV0aW9uQ29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL19lcnJvcnMudHNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGxldGlvbiB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xuXG4vKiogRXhlY3V0ZSBhdXRvIGNvbXBsZXRpb24gbWV0aG9kIG9mIGNvbW1hbmQgYW5kIGFjdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBDb21wbGV0ZUNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kPFxuICB2b2lkLFxuICB2b2lkLFxuICB2b2lkLFxuICBbYWN0aW9uOiBzdHJpbmcsIC4uLmNvbW1hbmROYW1lczogQXJyYXk8c3RyaW5nPl1cbj4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IoY21kPzogQ29tbWFuZCkge1xuICAgIHN1cGVyKCk7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5kZXNjcmlwdGlvbihcbiAgICAgICAgXCJHZXQgY29tcGxldGlvbnMgZm9yIGdpdmVuIGFjdGlvbiBmcm9tIGdpdmVuIGNvbW1hbmQuXCIsXG4gICAgICApXG4gICAgICAubm9HbG9iYWxzKClcbiAgICAgIC5hcmd1bWVudHMoXCI8YWN0aW9uOnN0cmluZz4gW2NvbW1hbmQuLi46c3RyaW5nXVwiKVxuICAgICAgLmFjdGlvbihhc3luYyAoXywgYWN0aW9uOiBzdHJpbmcsIC4uLmNvbW1hbmROYW1lczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgICAgICBsZXQgcGFyZW50OiBDb21tYW5kIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjb21wbGV0ZUNvbW1hbmQ6IENvbW1hbmQgPSBjb21tYW5kTmFtZXNcbiAgICAgICAgICA/LnJlZHVjZSgoY21kOiBDb21tYW5kLCBuYW1lOiBzdHJpbmcpOiBDb21tYW5kID0+IHtcbiAgICAgICAgICAgIHBhcmVudCA9IGNtZDtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkQ21kOiBDb21tYW5kIHwgdW5kZWZpbmVkID0gY21kLmdldENvbW1hbmQobmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFjaGlsZENtZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93bkNvbXBsZXRpb25Db21tYW5kRXJyb3IobmFtZSwgY21kLmdldENvbW1hbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkQ21kO1xuICAgICAgICAgIH0sIGNtZCB8fCB0aGlzLmdldE1haW5Db21tYW5kKCkpID8/IChjbWQgfHwgdGhpcy5nZXRNYWluQ29tbWFuZCgpKTtcblxuICAgICAgICBjb25zdCBjb21wbGV0aW9uOiBDb21wbGV0aW9uIHwgdW5kZWZpbmVkID0gY29tcGxldGVDb21tYW5kXG4gICAgICAgICAgLmdldENvbXBsZXRpb24oYWN0aW9uKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9XG4gICAgICAgICAgYXdhaXQgY29tcGxldGlvbj8uY29tcGxldGUoY29tcGxldGVDb21tYW5kLCBwYXJlbnQpID8/IFtdO1xuXG4gICAgICAgIGlmIChyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgIERlbm8uc3Rkb3V0LndyaXRlU3luYyhuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocmVzdWx0LmpvaW4oXCJcXG5cIikpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5yZXNldCgpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLFFBQVEsZ0JBQWdCO0FBQ3hDLFNBQVMsNkJBQTZCLFFBQVEsZ0JBQWdCO0FBRzlELDBEQUEwRCxHQUMxRCxPQUFPLE1BQU0sd0JBQXdCO0VBTW5DLFlBQW1CLEdBQWEsQ0FBRTtJQUNoQyxLQUFLO0lBQ0wsT0FBTyxJQUFJLENBQ1IsV0FBVyxDQUNWLHdEQUVELFNBQVMsR0FDVCxTQUFTLENBQUMsdUNBQ1YsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFnQixHQUFHO01BQ25DLElBQUk7TUFDSixNQUFNLGtCQUEyQixjQUM3QixPQUFPLENBQUMsS0FBYztRQUN0QixTQUFTO1FBQ1QsTUFBTSxXQUFnQyxJQUFJLFVBQVUsQ0FBQyxNQUFNO1FBQzNELElBQUksQ0FBQyxVQUFVO1VBQ2IsTUFBTSxJQUFJLDhCQUE4QixNQUFNLElBQUksV0FBVztRQUMvRDtRQUNBLE9BQU87TUFDVCxHQUFHLE9BQU8sSUFBSSxDQUFDLGNBQWMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRTtNQUVuRSxNQUFNLGFBQXFDLGdCQUN4QyxhQUFhLENBQUM7TUFDakIsTUFBTSxTQUNKLE1BQU0sWUFBWSxTQUFTLGlCQUFpQixXQUFXLEVBQUU7TUFFM0QsSUFBSSxRQUFRLFFBQVE7UUFDbEIsS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksY0FBYyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUM7TUFDN0Q7SUFDRixHQUNDLEtBQUs7RUFDVjtBQUNGIn0=
+// denoCacheMetadata=11474056545913792422,16087726906567537342 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c6b2811f36fa978537367cc3f928d87013f4bd005a8194a9c38c37e02a366ea9.js b/vendor/gen/https/deno.land/c6b2811f36fa978537367cc3f928d87013f4bd005a8194a9c38c37e02a366ea9.js
new file mode 100644
index 0000000..33b685b
--- /dev/null
+++ b/vendor/gen/https/deno.land/c6b2811f36fa978537367cc3f928d87013f4bd005a8194a9c38c37e02a366ea9.js
@@ -0,0 +1,9 @@
+import { read } from "../utils/read.ts";
+/** Load binary files, like images, audio, video, etc. */ export default async function binary(path) {
+ const content = await read(path, true);
+ return {
+ content
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9sb2FkZXJzL2JpbmFyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkIH0gZnJvbSBcIi4uL3V0aWxzL3JlYWQudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBSYXdEYXRhIH0gZnJvbSBcIi4uL2ZpbGUudHNcIjtcblxuLyoqIExvYWQgYmluYXJ5IGZpbGVzLCBsaWtlIGltYWdlcywgYXVkaW8sIHZpZGVvLCBldGMuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBiaW5hcnkocGF0aDogc3RyaW5nKTogUHJvbWlzZTxSYXdEYXRhPiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkKHBhdGgsIHRydWUpO1xuICByZXR1cm4geyBjb250ZW50IH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxJQUFJLFFBQVEsbUJBQW1CO0FBSXhDLHVEQUF1RCxHQUN2RCxlQUFlLGVBQWUsT0FBTyxJQUFZO0VBQy9DLE1BQU0sVUFBVSxNQUFNLEtBQUssTUFBTTtFQUNqQyxPQUFPO0lBQUU7RUFBUTtBQUNuQiJ9
+// denoCacheMetadata=3573475391158442298,12119431830607516521 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c81f2bcd15b421c959318ba5ed1f59535e7affded9151d30ff55d8132c10533d.js b/vendor/gen/https/deno.land/c81f2bcd15b421c959318ba5ed1f59535e7affded9151d30ff55d8132c10533d.js
new file mode 100644
index 0000000..3dbba72
--- /dev/null
+++ b/vendor/gen/https/deno.land/c81f2bcd15b421c959318ba5ed1f59535e7affded9151d30ff55d8132c10533d.js
@@ -0,0 +1,154 @@
+import { Node } from "./node.ts";
+import { HTMLCollection } from "./html-collection.ts";
+const NodeListFakeClass = (()=>{
+ var _computedKey;
+ _computedKey = Symbol.hasInstance;
+ return class NodeList {
+ constructor(){
+ throw new TypeError("Illegal constructor");
+ }
+ static [_computedKey](value) {
+ return value.constructor === NodeListClass;
+ }
+ };
+})();
+export const nodeListMutatorSym = Symbol("nodeListMutatorSym");
+const nodeListCachedMutator = Symbol("nodeListCachedMutator");
+// Array methods that we need for NodeList mutator implementation
+const { push, splice, slice, indexOf, filter } = Array.prototype;
+// Implementation of a NodeList mutator
+class NodeListMutatorImpl {
+ arrayInstance;
+ // There should only ever be one elementView per element. Element views
+ // are basically just the source of HTMLCollections/.children properties
+ // on elements that are always in sync with their .childNodes counterpart.
+ elementViews;
+ constructor(arrayInstance){
+ this.arrayInstance = arrayInstance;
+ this.elementViews = [];
+ }
+ push(...items) {
+ // Copy the new items to the element view (if any)
+ for (const view of this.elementViews){
+ for (const item of items){
+ if (item.nodeType === Node.ELEMENT_NODE) {
+ push.call(view, item);
+ }
+ }
+ }
+ return push.call(this.arrayInstance, ...items);
+ }
+ splice(index, deleteCount = 0, ...items) {
+ // Delete and insert new elements in an element view (if any)
+ for (const view of this.elementViews){
+ const toDelete = filter.call(slice.call(this.arrayInstance, index, index + deleteCount), (item)=>item.nodeType === Node.ELEMENT_NODE);
+ const toInsert = items.filter((item)=>item.nodeType === Node.ELEMENT_NODE);
+ // Find where to start splicing in the element view
+ let elementViewSpliceIndex = -1;
+ for(let idx = index; idx < this.arrayInstance.length; idx++){
+ const item = this.arrayInstance[idx];
+ if (item.nodeType === Node.ELEMENT_NODE) {
+ elementViewSpliceIndex = indexOf.call(view, item);
+ break;
+ }
+ }
+ // If no element is found just do everything at the end
+ // of the view
+ if (elementViewSpliceIndex === -1) {
+ elementViewSpliceIndex = view.length;
+ }
+ if (toDelete.length) {
+ splice.call(view, elementViewSpliceIndex, toDelete.length);
+ }
+ // Finally, insert all the found elements
+ splice.call(view, elementViewSpliceIndex, 0, ...toInsert);
+ }
+ return splice.call(this.arrayInstance, index, deleteCount, ...items);
+ }
+ indexOf(item, fromIndex = 0) {
+ return indexOf.call(this.arrayInstance, item, fromIndex);
+ }
+ indexOfElementsView(item, fromIndex = 0) {
+ return indexOf.call(this.elementsView(), item, fromIndex);
+ }
+ // Return the elements-only view for this NodeList. Creates one if
+ // it doesn't already exist.
+ elementsView() {
+ let view = this.elementViews[0];
+ if (!view) {
+ view = new HTMLCollection();
+ this.elementViews.push(view);
+ push.call(view, ...filter.call(this.arrayInstance, (item)=>item.nodeType === Node.ELEMENT_NODE));
+ }
+ return view;
+ }
+}
+// We define the `NodeList` inside a closure to ensure that its
+// `.name === "NodeList"` property stays intact, as we need to manipulate
+// its prototype and completely change its TypeScript-recognized type.
+const NodeListClass = (()=>{
+ // @ts-ignore
+ class NodeList extends Array {
+ forEach(cb, thisArg) {
+ super.forEach(cb, thisArg);
+ }
+ item(index) {
+ return this[index] ?? null;
+ }
+ [nodeListMutatorSym]() {
+ const cachedMutator = this[nodeListCachedMutator];
+ if (cachedMutator) {
+ return cachedMutator;
+ } else {
+ const cachedMutator = new NodeListMutatorImpl(this);
+ this[nodeListCachedMutator] = cachedMutator;
+ return cachedMutator;
+ }
+ }
+ toString() {
+ return "[object NodeList]";
+ }
+ }
+ return NodeList;
+})();
+for (const staticMethod of [
+ "from",
+ "isArray",
+ "of"
+]){
+ NodeListClass[staticMethod] = undefined;
+}
+for (const instanceMethod of [
+ "concat",
+ "copyWithin",
+ "every",
+ "fill",
+ "filter",
+ "find",
+ "findIndex",
+ "flat",
+ "flatMap",
+ "includes",
+ "indexOf",
+ "join",
+ "lastIndexOf",
+ "map",
+ "pop",
+ "push",
+ "reduce",
+ "reduceRight",
+ "reverse",
+ "shift",
+ "slice",
+ "some",
+ "sort",
+ "splice",
+ "toLocaleString",
+ "unshift"
+]){
+ NodeListClass.prototype[instanceMethod] = undefined;
+}
+export const NodeList = NodeListClass;
+export const NodeListPublic = NodeListFakeClass;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL25vZGUtbGlzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS50c1wiO1xuaW1wb3J0IHsgSFRNTENvbGxlY3Rpb24gfSBmcm9tIFwiLi9odG1sLWNvbGxlY3Rpb24udHNcIjtcblxuY29uc3QgTm9kZUxpc3RGYWtlQ2xhc3M6IGFueSA9ICgoKSA9PiB7XG4gIHJldHVybiBjbGFzcyBOb2RlTGlzdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0odmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNvbnN0cnVjdG9yID09PSBOb2RlTGlzdENsYXNzO1xuICAgIH1cbiAgfTtcbn0pKCk7XG5cbmV4cG9ydCBjb25zdCBub2RlTGlzdE11dGF0b3JTeW0gPSBTeW1ib2woXCJub2RlTGlzdE11dGF0b3JTeW1cIik7XG5jb25zdCBub2RlTGlzdENhY2hlZE11dGF0b3IgPSBTeW1ib2woXCJub2RlTGlzdENhY2hlZE11dGF0b3JcIik7XG5cbi8vIEFycmF5IG1ldGhvZHMgdGhhdCB3ZSBuZWVkIGZvciBOb2RlTGlzdCBtdXRhdG9yIGltcGxlbWVudGF0aW9uXG5jb25zdCB7IHB1c2gsIHNwbGljZSwgc2xpY2UsIGluZGV4T2YsIGZpbHRlciB9ID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBJbXBsZW1lbnRhdGlvbiBvZiBhIE5vZGVMaXN0IG11dGF0b3JcbmNsYXNzIE5vZGVMaXN0TXV0YXRvckltcGwge1xuICAvLyBUaGVyZSBzaG91bGQgb25seSBldmVyIGJlIG9uZSBlbGVtZW50VmlldyBwZXIgZWxlbWVudC4gRWxlbWVudCB2aWV3c1xuICAvLyBhcmUgYmFzaWNhbGx5IGp1c3QgdGhlIHNvdXJjZSBvZiBIVE1MQ29sbGVjdGlvbnMvLmNoaWxkcmVuIHByb3BlcnRpZXNcbiAgLy8gb24gZWxlbWVudHMgdGhhdCBhcmUgYWx3YXlzIGluIHN5bmMgd2l0aCB0aGVpciAuY2hpbGROb2RlcyBjb3VudGVycGFydC5cbiAgZWxlbWVudFZpZXdzOiBhbnlbXVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFycmF5SW5zdGFuY2U6IGFueVtdLFxuICApIHt9XG5cbiAgcHVzaCguLi5pdGVtczogYW55W10pIHtcbiAgICAvLyBDb3B5IHRoZSBuZXcgaXRlbXMgdG8gdGhlIGVsZW1lbnQgdmlldyAoaWYgYW55KVxuICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLmVsZW1lbnRWaWV3cykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChpdGVtLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHB1c2guY2FsbCh2aWV3LCBpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdXNoLmNhbGwodGhpcy5hcnJheUluc3RhbmNlLCAuLi5pdGVtcyk7XG4gIH1cblxuICBzcGxpY2UoaW5kZXg6IG51bWJlciwgZGVsZXRlQ291bnQgPSAwLCAuLi5pdGVtczogYW55W10pIHtcbiAgICAvLyBEZWxldGUgYW5kIGluc2VydCBuZXcgZWxlbWVudHMgaW4gYW4gZWxlbWVudCB2aWV3IChpZiBhbnkpXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHRoaXMuZWxlbWVudFZpZXdzKSB7XG4gICAgICBjb25zdCB0b0RlbGV0ZSA9IGZpbHRlci5jYWxsKFxuICAgICAgICBzbGljZS5jYWxsKHRoaXMuYXJyYXlJbnN0YW5jZSwgaW5kZXgsIGluZGV4ICsgZGVsZXRlQ291bnQpLFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0b0luc2VydCA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgaXRlbS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICk7XG5cbiAgICAgIC8vIEZpbmQgd2hlcmUgdG8gc3RhcnQgc3BsaWNpbmcgaW4gdGhlIGVsZW1lbnQgdmlld1xuICAgICAgbGV0IGVsZW1lbnRWaWV3U3BsaWNlSW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGlkeCA9IGluZGV4OyBpZHggPCB0aGlzLmFycmF5SW5zdGFuY2UubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5hcnJheUluc3RhbmNlW2lkeF07XG5cbiAgICAgICAgaWYgKGl0ZW0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZWxlbWVudFZpZXdTcGxpY2VJbmRleCA9IGluZGV4T2YuY2FsbCh2aWV3LCBpdGVtKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBlbGVtZW50IGlzIGZvdW5kIGp1c3QgZG8gZXZlcnl0aGluZyBhdCB0aGUgZW5kXG4gICAgICAvLyBvZiB0aGUgdmlld1xuICAgICAgaWYgKGVsZW1lbnRWaWV3U3BsaWNlSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGVsZW1lbnRWaWV3U3BsaWNlSW5kZXggPSB2aWV3Lmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvRGVsZXRlLmxlbmd0aCkge1xuICAgICAgICBzcGxpY2UuY2FsbCh2aWV3LCBlbGVtZW50Vmlld1NwbGljZUluZGV4LCB0b0RlbGV0ZS5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgYWxsIHRoZSBmb3VuZCBlbGVtZW50c1xuICAgICAgc3BsaWNlLmNhbGwodmlldywgZWxlbWVudFZpZXdTcGxpY2VJbmRleCwgMCwgLi4udG9JbnNlcnQpO1xuICAgIH1cblxuICAgIHJldHVybiBzcGxpY2UuY2FsbCh0aGlzLmFycmF5SW5zdGFuY2UsIGluZGV4LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpO1xuICB9XG5cbiAgaW5kZXhPZihpdGVtOiBhbnksIGZyb21JbmRleCA9IDApIHtcbiAgICByZXR1cm4gaW5kZXhPZi5jYWxsKHRoaXMuYXJyYXlJbnN0YW5jZSwgaXRlbSwgZnJvbUluZGV4KTtcbiAgfVxuXG4gIGluZGV4T2ZFbGVtZW50c1ZpZXcoaXRlbTogYW55LCBmcm9tSW5kZXggPSAwKSB7XG4gICAgcmV0dXJuIGluZGV4T2YuY2FsbCh0aGlzLmVsZW1lbnRzVmlldygpLCBpdGVtLCBmcm9tSW5kZXgpO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBlbGVtZW50cy1vbmx5IHZpZXcgZm9yIHRoaXMgTm9kZUxpc3QuIENyZWF0ZXMgb25lIGlmXG4gIC8vIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cbiAgZWxlbWVudHNWaWV3KCkge1xuICAgIGxldCB2aWV3ID0gdGhpcy5lbGVtZW50Vmlld3NbMF07XG5cbiAgICBpZiAoIXZpZXcpIHtcbiAgICAgIHZpZXcgPSBuZXcgSFRNTENvbGxlY3Rpb24oKSBhcyBhbnkgYXMgYW55W107XG4gICAgICB0aGlzLmVsZW1lbnRWaWV3cy5wdXNoKHZpZXcpO1xuICAgICAgcHVzaC5jYWxsKFxuICAgICAgICB2aWV3LFxuICAgICAgICAuLi5maWx0ZXIuY2FsbChcbiAgICAgICAgICB0aGlzLmFycmF5SW5zdGFuY2UsXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmlldztcbiAgfVxufVxuXG4vLyBXZSBkZWZpbmUgdGhlIGBOb2RlTGlzdGAgaW5zaWRlIGEgY2xvc3VyZSB0byBlbnN1cmUgdGhhdCBpdHNcbi8vIGAubmFtZSA9PT0gXCJOb2RlTGlzdFwiYCBwcm9wZXJ0eSBzdGF5cyBpbnRhY3QsIGFzIHdlIG5lZWQgdG8gbWFuaXB1bGF0ZVxuLy8gaXRzIHByb3RvdHlwZSBhbmQgY29tcGxldGVseSBjaGFuZ2UgaXRzIFR5cGVTY3JpcHQtcmVjb2duaXplZCB0eXBlLlxuY29uc3QgTm9kZUxpc3RDbGFzczogYW55ID0gKCgpID0+IHtcbiAgLy8gQHRzLWlnbm9yZVxuICBjbGFzcyBOb2RlTGlzdDxUID0gTm9kZT4gZXh0ZW5kcyBBcnJheTxUPiB7XG4gICAgb3ZlcnJpZGUgZm9yRWFjaChcbiAgICAgIGNiOiAobm9kZTogVCwgaW5kZXg6IG51bWJlciwgbm9kZUxpc3Q6IFRbXSkgPT4gdm9pZCxcbiAgICAgIHRoaXNBcmc/OiB1bmtub3duLFxuICAgICkge1xuICAgICAgc3VwZXIuZm9yRWFjaChjYiwgdGhpc0FyZyk7XG4gICAgfVxuXG4gICAgaXRlbShpbmRleDogbnVtYmVyKTogVCB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXNbaW5kZXhdID8/IG51bGw7XG4gICAgfVxuXG4gICAgW25vZGVMaXN0TXV0YXRvclN5bV0oKSB7XG4gICAgICBjb25zdCBjYWNoZWRNdXRhdG9yID0gKHRoaXMgYXMgYW55KVtub2RlTGlzdENhY2hlZE11dGF0b3JdO1xuXG4gICAgICBpZiAoY2FjaGVkTXV0YXRvcikge1xuICAgICAgICByZXR1cm4gY2FjaGVkTXV0YXRvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZE11dGF0b3IgPSBuZXcgTm9kZUxpc3RNdXRhdG9ySW1wbCh0aGlzKTtcbiAgICAgICAgKHRoaXMgYXMgYW55KVtub2RlTGlzdENhY2hlZE11dGF0b3JdID0gY2FjaGVkTXV0YXRvcjtcbiAgICAgICAgcmV0dXJuIGNhY2hlZE11dGF0b3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJbb2JqZWN0IE5vZGVMaXN0XVwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBOb2RlTGlzdDtcbn0pKCk7XG5cbmZvciAoXG4gIGNvbnN0IHN0YXRpY01ldGhvZCBvZiBbXG4gICAgXCJmcm9tXCIsXG4gICAgXCJpc0FycmF5XCIsXG4gICAgXCJvZlwiLFxuICBdXG4pIHtcbiAgTm9kZUxpc3RDbGFzc1tzdGF0aWNNZXRob2RdID0gdW5kZWZpbmVkO1xufVxuXG5mb3IgKFxuICBjb25zdCBpbnN0YW5jZU1ldGhvZCBvZiBbXG4gICAgXCJjb25jYXRcIixcbiAgICBcImNvcHlXaXRoaW5cIixcbiAgICBcImV2ZXJ5XCIsXG4gICAgXCJmaWxsXCIsXG4gICAgXCJmaWx0ZXJcIixcbiAgICBcImZpbmRcIixcbiAgICBcImZpbmRJbmRleFwiLFxuICAgIFwiZmxhdFwiLFxuICAgIFwiZmxhdE1hcFwiLFxuICAgIFwiaW5jbHVkZXNcIixcbiAgICBcImluZGV4T2ZcIixcbiAgICBcImpvaW5cIixcbiAgICBcImxhc3RJbmRleE9mXCIsXG4gICAgXCJtYXBcIixcbiAgICBcInBvcFwiLFxuICAgIFwicHVzaFwiLFxuICAgIFwicmVkdWNlXCIsXG4gICAgXCJyZWR1Y2VSaWdodFwiLFxuICAgIFwicmV2ZXJzZVwiLFxuICAgIFwic2hpZnRcIixcbiAgICBcInNsaWNlXCIsXG4gICAgXCJzb21lXCIsXG4gICAgXCJzb3J0XCIsXG4gICAgXCJzcGxpY2VcIixcbiAgICBcInRvTG9jYWxlU3RyaW5nXCIsXG4gICAgXCJ1bnNoaWZ0XCIsXG4gIF1cbikge1xuICBOb2RlTGlzdENsYXNzLnByb3RvdHlwZVtpbnN0YW5jZU1ldGhvZF0gPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUxpc3Q8VCBleHRlbmRzIE5vZGUgPSBOb2RlPiB7XG4gIG5ldyAoKTogTm9kZUxpc3Q7XG4gIHJlYWRvbmx5IFtpbmRleDogbnVtYmVyXTogVDtcbiAgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG4gIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEdlbmVyYXRvcjxUPjtcblxuICBpdGVtKGluZGV4OiBudW1iZXIpOiBUO1xuICBmb3JFYWNoKFxuICAgIGNiOiAobm9kZTogVCwgaW5kZXg6IG51bWJlciwgbm9kZUxpc3Q6IFRbXSkgPT4gdm9pZCxcbiAgICB0aGlzQXJnPzogTm9kZUxpc3QgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQ7XG4gIFtub2RlTGlzdE11dGF0b3JTeW1dKCk6IE5vZGVMaXN0TXV0YXRvcjtcbn1cblxuZXhwb3J0IHR5cGUgTm9kZUxpc3RQdWJsaWMgPSBPbWl0PE5vZGVMaXN0LCB0eXBlb2Ygbm9kZUxpc3RNdXRhdG9yU3ltPjtcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUxpc3RNdXRhdG9yIHtcbiAgcHVzaCguLi5ub2RlczogTm9kZVtdKTogbnVtYmVyO1xuICBzcGxpY2Uoc3RhcnQ6IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBOb2RlW10pOiBOb2RlW107XG4gIGluZGV4T2Yobm9kZTogTm9kZSwgZnJvbUluZGV4PzogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyO1xuICBpbmRleE9mRWxlbWVudHNWaWV3KG5vZGU6IE5vZGUsIGZyb21JbmRleD86IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlcjtcbiAgZWxlbWVudHNWaWV3KCk6IEhUTUxDb2xsZWN0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgTm9kZUxpc3QgPSA8Tm9kZUxpc3Q+IE5vZGVMaXN0Q2xhc3M7XG5leHBvcnQgY29uc3QgTm9kZUxpc3RQdWJsaWMgPSA8Tm9kZUxpc3RQdWJsaWM+IE5vZGVMaXN0RmFrZUNsYXNzO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxjQUFjLFFBQVEsdUJBQXVCO0FBRXRELE1BQU0sb0JBQXlCLENBQUM7O2lCQU1wQixPQUFPLFdBQVc7RUFMNUIsT0FBTyxNQUFNO0lBQ1gsYUFBYztNQUNaLE1BQU0sSUFBSSxVQUFVO0lBQ3RCO0lBRUEsc0JBQTRCLEtBQVUsRUFBRTtNQUN0QyxP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
+// denoCacheMetadata=17738515758738854473,1878776856068035289 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/c8a4ba18f007f8fce03e4d69e94fe7ac343998375f340b66b9ec791160b032f7.js b/vendor/gen/https/deno.land/c8a4ba18f007f8fce03e4d69e94fe7ac343998375f340b66b9ec791160b032f7.js
new file mode 100644
index 0000000..0955f15
--- /dev/null
+++ b/vendor/gen/https/deno.land/c8a4ba18f007f8fce03e4d69e94fe7ac343998375f340b66b9ec791160b032f7.js
@@ -0,0 +1,19 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(importTag);
+ };
+}
+function importTag(env, code) {
+ if (!code.startsWith("import ")) {
+ return;
+ }
+ const match = code?.match(/^import\s+(\{[\s|\S]*\}|\w+)\s+from\s+(.+)$/);
+ if (!match) {
+ throw new Error(`Invalid import: ${code}`);
+ }
+ const [, vars, file] = match;
+ const { dataVarname } = env.options;
+ return `let ${vars} = await __env.run(${file}, {...${dataVarname}}, __file);`;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2ltcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudmlyb25tZW50LCBQbHVnaW4gfSBmcm9tIFwiLi4vc3JjL2Vudmlyb25tZW50LnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBQbHVnaW4ge1xuICByZXR1cm4gKGVudjogRW52aXJvbm1lbnQpID0+IHtcbiAgICBlbnYudGFncy5wdXNoKGltcG9ydFRhZyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGltcG9ydFRhZyhcbiAgZW52OiBFbnZpcm9ubWVudCxcbiAgY29kZTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb2RlLnN0YXJ0c1dpdGgoXCJpbXBvcnQgXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBjb2RlPy5tYXRjaChcbiAgICAvXmltcG9ydFxccysoXFx7W1xcc3xcXFNdKlxcfXxcXHcrKVxccytmcm9tXFxzKyguKykkLyxcbiAgKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGltcG9ydDogJHtjb2RlfWApO1xuICB9XG5cbiAgY29uc3QgWywgdmFycywgZmlsZV0gPSBtYXRjaDtcbiAgY29uc3QgeyBkYXRhVmFybmFtZSB9ID0gZW52Lm9wdGlvbnM7XG4gIHJldHVybiBgbGV0ICR7dmFyc30gPSBhd2FpdCBfX2Vudi5ydW4oJHtmaWxlfSwgey4uLiR7ZGF0YVZhcm5hbWV9fSwgX19maWxlKTtgO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7RUFDYixPQUFPLENBQUM7SUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7QUFDRjtBQUVBLFNBQVMsVUFDUCxHQUFnQixFQUNoQixJQUFZO0VBRVosSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLFlBQVk7SUFDL0I7RUFDRjtFQUVBLE1BQU0sUUFBUSxNQUFNLE1BQ2xCO0VBR0YsSUFBSSxDQUFDLE9BQU87SUFDVixNQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLE1BQU07RUFDM0M7RUFFQSxNQUFNLEdBQUcsTUFBTSxLQUFLLEdBQUc7RUFDdkIsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksT0FBTztFQUNuQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssbUJBQW1CLEVBQUUsS0FBSyxNQUFNLEVBQUUsWUFBWSxXQUFXLENBQUM7QUFDL0UifQ==
+// denoCacheMetadata=7803614320253404675,2092031223443666434 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ca1ca5971235e65015567cd6b776958e0c5202d4d0cd423f01b497ee04b199c6.js b/vendor/gen/https/deno.land/ca1ca5971235e65015567cd6b776958e0c5202d4d0cd423f01b497ee04b199c6.js
new file mode 100644
index 0000000..13deef3
--- /dev/null
+++ b/vendor/gen/https/deno.land/ca1ca5971235e65015567cd6b776958e0c5202d4d0cd423f01b497ee04b199c6.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/toml@1.0.6";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy90b21sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJqc3I6QHN0ZC90b21sQDEuMC42XCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IifQ==
+// denoCacheMetadata=2417987387083674366,18354590075118759347 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/cdce2b3c5cbf354be962968c408d5adf43c4648dd285c23f64d5dc447c75d6d5.js b/vendor/gen/https/deno.land/cdce2b3c5cbf354be962968c408d5adf43c4648dd285c23f64d5dc447c75d6d5.js
new file mode 100644
index 0000000..df276ca
--- /dev/null
+++ b/vendor/gen/https/deno.land/cdce2b3c5cbf354be962968c408d5adf43c4648dd285c23f64d5dc447c75d6d5.js
@@ -0,0 +1,55 @@
+import { emptyDir, ensureDir } from "../deps/fs.ts";
+import { posix } from "../deps/path.ts";
+import { md5 } from "./utils/digest.ts";
+/**
+ * Class to manage cache in the _cache folder
+ */ export default class Cache {
+ #folder;
+ constructor(options){
+ this.#folder = options.folder;
+ }
+ /** Save some content in the cache folder */ async set(key, value) {
+ const path = await this.getPath(key);
+ await ensureDir(posix.dirname(path));
+ if (typeof value === "string") {
+ Deno.writeTextFileSync(path, value);
+ } else {
+ Deno.writeFileSync(path, value);
+ }
+ }
+ /** Remove content from the cache folder */ async remove(key) {
+ try {
+ Deno.removeSync(await this.getPath(key));
+ } catch {
+ // Ignore
+ }
+ }
+ async getPath(key) {
+ const paths = await Promise.all(key.map((value)=>{
+ if (value instanceof Uint8Array || typeof value === "string") {
+ return md5(value);
+ }
+ return md5(JSON.stringify(value));
+ }));
+ return posix.join(this.#folder, ...paths);
+ }
+ /** Get the content from the cache folder as Uint8Array */ async getBytes(key) {
+ try {
+ return Deno.readFileSync(await this.getPath(key));
+ } catch {
+ // Ignore
+ }
+ }
+ /** Get the content from the cache folder as string */ async getText(key) {
+ try {
+ return Deno.readTextFileSync(await this.getPath(key));
+ } catch {
+ // Ignore
+ }
+ }
+ /** Empty the cache folder */ async clear() {
+ await emptyDir(this.#folder);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9jYWNoZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbXB0eURpciwgZW5zdXJlRGlyIH0gZnJvbSBcIi4uL2RlcHMvZnMudHNcIjtcbmltcG9ydCB7IHBvc2l4IH0gZnJvbSBcIi4uL2RlcHMvcGF0aC50c1wiO1xuaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4vdXRpbHMvZGlnZXN0LnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKiBUaGUgZm9sZGVyIHRvIGxvYWQgdGhlIGZpbGVzIGZyb20gKi9cbiAgZm9sZGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgdG8gbWFuYWdlIGNhY2hlIGluIHRoZSBfY2FjaGUgZm9sZGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhY2hlIHtcbiAgI2ZvbGRlcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLiNmb2xkZXIgPSBvcHRpb25zLmZvbGRlcjtcbiAgfVxuXG4gIC8qKiBTYXZlIHNvbWUgY29udGVudCBpbiB0aGUgY2FjaGUgZm9sZGVyICovXG4gIGFzeW5jIHNldChcbiAgICBrZXk6IHVua25vd25bXSxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IHRoaXMuZ2V0UGF0aChrZXkpO1xuXG4gICAgYXdhaXQgZW5zdXJlRGlyKHBvc2l4LmRpcm5hbWUocGF0aCkpO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgRGVuby53cml0ZVRleHRGaWxlU3luYyhwYXRoLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIERlbm8ud3JpdGVGaWxlU3luYyhwYXRoLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbW92ZSBjb250ZW50IGZyb20gdGhlIGNhY2hlIGZvbGRlciAqL1xuICBhc3luYyByZW1vdmUoa2V5OiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgRGVuby5yZW1vdmVTeW5jKGF3YWl0IHRoaXMuZ2V0UGF0aChrZXkpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFBhdGgoa2V5OiB1bmtub3duW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHBhdGhzID0gYXdhaXQgUHJvbWlzZS5hbGwoa2V5Lm1hcCgodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBtZDUodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1kNShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gcG9zaXguam9pbih0aGlzLiNmb2xkZXIsIC4uLnBhdGhzKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbnRlbnQgZnJvbSB0aGUgY2FjaGUgZm9sZGVyIGFzIFVpbnQ4QXJyYXkgKi9cbiAgYXN5bmMgZ2V0Qnl0ZXMoa2V5OiB1bmtub3duW10pOiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIERlbm8ucmVhZEZpbGVTeW5jKGF3YWl0IHRoaXMuZ2V0UGF0aChrZXkpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbnRlbnQgZnJvbSB0aGUgY2FjaGUgZm9sZGVyIGFzIHN0cmluZyAqL1xuICBhc3luYyBnZXRUZXh0KGtleTogdW5rbm93bltdKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIERlbm8ucmVhZFRleHRGaWxlU3luYyhhd2FpdCB0aGlzLmdldFBhdGgoa2V5KSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKiogRW1wdHkgdGhlIGNhY2hlIGZvbGRlciAqL1xuICBhc3luYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBlbXB0eURpcih0aGlzLiNmb2xkZXIpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxRQUFRLEVBQUUsU0FBUyxRQUFRLGdCQUFnQjtBQUNwRCxTQUFTLEtBQUssUUFBUSxrQkFBa0I7QUFDeEMsU0FBUyxHQUFHLFFBQVEsb0JBQW9CO0FBT3hDOztDQUVDLEdBQ0QsZUFBZSxNQUFNO0VBQ25CLENBQUEsTUFBTyxDQUFTO0VBRWhCLFlBQVksT0FBZ0IsQ0FBRTtJQUM1QixJQUFJLENBQUMsQ0FBQSxNQUFPLEdBQUcsUUFBUSxNQUFNO0VBQy9CO0VBRUEsMENBQTBDLEdBQzFDLE1BQU0sSUFDSixHQUFjLEVBQ2QsS0FBMEIsRUFDWDtJQUNmLE1BQU0sT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUM7SUFFaEMsTUFBTSxVQUFVLE1BQU0sT0FBTyxDQUFDO0lBRTlCLElBQUksT0FBTyxVQUFVLFVBQVU7TUFDN0IsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO0lBQy9CLE9BQU87TUFDTCxLQUFLLGFBQWEsQ0FBQyxNQUFNO0lBQzNCO0VBQ0Y7RUFFQSx5Q0FBeUMsR0FDekMsTUFBTSxPQUFPLEdBQWMsRUFBaUI7SUFDMUMsSUFBSTtNQUNGLEtBQUssVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNyQyxFQUFFLE9BQU07SUFDTixTQUFTO0lBQ1g7RUFDRjtFQUVBLE1BQU0sUUFBUSxHQUFjLEVBQW1CO0lBQzdDLE1BQU0sUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7TUFDdkMsSUFBSSxpQkFBaUIsY0FBYyxPQUFPLFVBQVUsVUFBVTtRQUM1RCxPQUFPLElBQUk7TUFDYjtNQUNBLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQztJQUM1QjtJQUNBLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUEsTUFBTyxLQUFLO0VBQ3JDO0VBRUEsd0RBQXdELEdBQ3hELE1BQU0sU0FBUyxHQUFjLEVBQW1DO0lBQzlELElBQUk7TUFDRixPQUFPLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM5QyxFQUFFLE9BQU07SUFDTixTQUFTO0lBQ1g7RUFDRjtFQUVBLG9EQUFvRCxHQUNwRCxNQUFNLFFBQVEsR0FBYyxFQUErQjtJQUN6RCxJQUFJO01BQ0YsT0FBTyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNsRCxFQUFFLE9BQU07SUFDTixTQUFTO0lBQ1g7RUFDRjtFQUVBLDJCQUEyQixHQUMzQixNQUFNLFFBQXVCO0lBQzNCLE1BQU0sU0FBUyxJQUFJLENBQUMsQ0FBQSxNQUFPO0VBQzdCO0FBQ0YifQ==
+// denoCacheMetadata=8087946915304457175,18047961257805549373 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/cde923fbb86c5b350acd4c9ea35da65c063787df78adfe038efb54a1e5548fbd.js b/vendor/gen/https/deno.land/cde923fbb86c5b350acd4c9ea35da65c063787df78adfe038efb54a1e5548fbd.js
new file mode 100644
index 0000000..7653a4f
--- /dev/null
+++ b/vendor/gen/https/deno.land/cde923fbb86c5b350acd4c9ea35da65c063787df78adfe038efb54a1e5548fbd.js
@@ -0,0 +1,4 @@
+export * from "./key_code.ts";
+export * from "./key_codes.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1Ljcva2V5Y29kZS9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4va2V5X2NvZGUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2tleV9jb2Rlcy50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCIn0=
+// denoCacheMetadata=4309246912485632301,11561302231802313271 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ce6ebdf888d5ac271720481c38a41e348b8ec9615375f66167d2b8a65da0e629.js b/vendor/gen/https/deno.land/ce6ebdf888d5ac271720481c38a41e348b8ec9615375f66167d2b8a65da0e629.js
new file mode 100644
index 0000000..86dff04
--- /dev/null
+++ b/vendor/gen/https/deno.land/ce6ebdf888d5ac271720481c38a41e348b8ec9615375f66167d2b8a65da0e629.js
@@ -0,0 +1,9 @@
+/**
+ * Ugly solution to circular imports... FIXME: Make this better
+ */ export default {
+ Element: null,
+ Document: null,
+ DocumentFragment: null
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3V0aWxzLXR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdW1lbnQgfSBmcm9tIFwiLi9kb2N1bWVudC50c1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudEZyYWdtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZnJhZ21lbnQudHNcIjtcblxuLyoqXG4gKiBVZ2x5IHNvbHV0aW9uIHRvIGNpcmN1bGFyIGltcG9ydHMuLi4gRklYTUU6IE1ha2UgdGhpcyBiZXR0ZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICBFbGVtZW50OiBudWxsIGFzIGFueSBhcyB0eXBlb2YgRWxlbWVudCxcbiAgRG9jdW1lbnQ6IG51bGwgYXMgYW55IGFzIHR5cGVvZiBEb2N1bWVudCxcbiAgRG9jdW1lbnRGcmFnbWVudDogbnVsbCBhcyBhbnkgYXMgdHlwZW9mIERvY3VtZW50RnJhZ21lbnQsXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBOztDQUVDLEdBQ0QsZUFBZTtFQUNiLFNBQVM7RUFDVCxVQUFVO0VBQ1Ysa0JBQWtCO0FBQ3BCLEVBQUUifQ==
+// denoCacheMetadata=2165924506836172908,10767109706866710134 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ce75e5f4eb4244400bc774cee099115d5ff39780ead41332f7e0adaf3750dc07.js b/vendor/gen/https/deno.land/ce75e5f4eb4244400bc774cee099115d5ff39780ead41332f7e0adaf3750dc07.js
new file mode 100644
index 0000000..11081ba
--- /dev/null
+++ b/vendor/gen/https/deno.land/ce75e5f4eb4244400bc774cee099115d5ff39780ead41332f7e0adaf3750dc07.js
@@ -0,0 +1,152 @@
+import { getDefaultValue, getOption, paramCaseToCamelCase } from "./_utils.ts";
+import { ConflictingOptionError, DependingOptionError, MissingOptionValueError, MissingRequiredOptionError, OptionNotCombinableError, UnknownOptionError } from "./_errors.ts";
+/**
+ * Flags post validation. Validations that are not already done by the parser.
+ *
+ * @param ctx Parse context.
+ * @param opts Parse options.
+ * @param options Option name mappings: propertyName -> option
+ */ export function validateFlags(ctx, opts, options = new Map()) {
+ if (!opts.flags) {
+ return;
+ }
+ const defaultValues = setDefaultValues(ctx, opts);
+ const optionNames = Object.keys(ctx.flags);
+ if (!optionNames.length && opts.allowEmpty) {
+ return;
+ }
+ if (ctx.standalone) {
+ validateStandaloneOption(ctx, options, optionNames, defaultValues);
+ return;
+ }
+ for (const [name, option] of options){
+ validateUnknownOption(option, opts);
+ validateConflictingOptions(ctx, option);
+ validateDependingOptions(ctx, option, defaultValues);
+ validateRequiredValues(ctx, option, name);
+ }
+ validateRequiredOptions(ctx, options, opts);
+}
+function validateUnknownOption(option, opts) {
+ if (!getOption(opts.flags ?? [], option.name)) {
+ throw new UnknownOptionError(option.name, opts.flags ?? []);
+ }
+}
+/**
+ * Adds all default values to ctx.flags and returns a boolean object map with
+ * only the default option names `{ [OptionName: string]: boolean }`.
+ */ function setDefaultValues(ctx, opts) {
+ const defaultValues = {};
+ if (!opts.flags?.length) {
+ return defaultValues;
+ }
+ // Set default values
+ for (const option of opts.flags){
+ let name;
+ let defaultValue = undefined;
+ // if --no-[flag] is present set --[flag] default value to true
+ if (option.name.startsWith("no-")) {
+ const propName = option.name.replace(/^no-/, "");
+ if (typeof ctx.flags[propName] !== "undefined") {
+ continue;
+ }
+ const positiveOption = getOption(opts.flags, propName);
+ if (positiveOption) {
+ continue;
+ }
+ name = paramCaseToCamelCase(propName);
+ defaultValue = true;
+ }
+ if (!name) {
+ name = paramCaseToCamelCase(option.name);
+ }
+ const hasDefaultValue = (!opts.ignoreDefaults || typeof opts.ignoreDefaults[name] === "undefined") && typeof ctx.flags[name] === "undefined" && (typeof option.default !== "undefined" || typeof defaultValue !== "undefined");
+ if (hasDefaultValue) {
+ ctx.flags[name] = getDefaultValue(option) ?? defaultValue;
+ defaultValues[option.name] = true;
+ if (typeof option.value === "function") {
+ ctx.flags[name] = option.value(ctx.flags[name]);
+ }
+ }
+ }
+ return defaultValues;
+}
+function validateStandaloneOption(ctx, options, optionNames, defaultValues) {
+ if (!ctx.standalone || optionNames.length === 1) {
+ return;
+ }
+ // Don't throw an error if all values are coming from the default option.
+ for (const [_, opt] of options){
+ if (!defaultValues[opt.name] && opt !== ctx.standalone) {
+ throw new OptionNotCombinableError(ctx.standalone.name);
+ }
+ }
+}
+function validateConflictingOptions(ctx, option) {
+ if (!option.conflicts?.length) {
+ return;
+ }
+ for (const flag of option.conflicts){
+ if (isset(flag, ctx.flags)) {
+ throw new ConflictingOptionError(option.name, flag);
+ }
+ }
+}
+function validateDependingOptions(ctx, option, defaultValues) {
+ if (!option.depends) {
+ return;
+ }
+ for (const flag of option.depends){
+ // Don't throw an error if the value is coming from the default option.
+ if (!isset(flag, ctx.flags) && !defaultValues[option.name]) {
+ throw new DependingOptionError(option.name, flag);
+ }
+ }
+}
+function validateRequiredValues(ctx, option, name) {
+ if (!option.args) {
+ return;
+ }
+ const isArray = option.args.length > 1;
+ for(let i = 0; i < option.args.length; i++){
+ const arg = option.args[i];
+ if (!arg.requiredValue) {
+ continue;
+ }
+ const hasValue = isArray ? typeof ctx.flags[name][i] !== "undefined" : typeof ctx.flags[name] !== "undefined";
+ if (!hasValue) {
+ throw new MissingOptionValueError(option.name);
+ }
+ }
+}
+function validateRequiredOptions(ctx, options, opts) {
+ if (!opts.flags?.length) {
+ return;
+ }
+ const optionsValues = [
+ ...options.values()
+ ];
+ for (const option of opts.flags){
+ if (!option.required || paramCaseToCamelCase(option.name) in ctx.flags) {
+ continue;
+ }
+ const conflicts = option.conflicts ?? [];
+ const hasConflict = conflicts.find((flag)=>!!ctx.flags[flag]);
+ const hasConflicts = hasConflict || optionsValues.find((opt)=>opt.conflicts?.find((flag)=>flag === option.name));
+ if (hasConflicts) {
+ continue;
+ }
+ throw new MissingRequiredOptionError(option.name);
+ }
+}
+/**
+ * Check if value exists for flag.
+ * @param flagName Flag name.
+ * @param flags Parsed values.
+ */ function isset(flagName, flags) {
+ const name = paramCaseToCamelCase(flagName);
+ // return typeof values[ name ] !== 'undefined' && values[ name ] !== false;
+ return typeof flags[name] !== "undefined";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvX3ZhbGlkYXRlX2ZsYWdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSwgZ2V0T3B0aW9uLCBwYXJhbUNhc2VUb0NhbWVsQ2FzZSB9IGZyb20gXCIuL191dGlscy50c1wiO1xuaW1wb3J0IHtcbiAgQ29uZmxpY3RpbmdPcHRpb25FcnJvcixcbiAgRGVwZW5kaW5nT3B0aW9uRXJyb3IsXG4gIE1pc3NpbmdPcHRpb25WYWx1ZUVycm9yLFxuICBNaXNzaW5nUmVxdWlyZWRPcHRpb25FcnJvcixcbiAgT3B0aW9uTm90Q29tYmluYWJsZUVycm9yLFxuICBVbmtub3duT3B0aW9uRXJyb3IsXG59IGZyb20gXCIuL19lcnJvcnMudHNcIjtcbmltcG9ydCB7IFBhcnNlRmxhZ3NDb250ZXh0LCBQYXJzZUZsYWdzT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50T3B0aW9ucywgRmxhZ09wdGlvbnMgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG4vKipcbiAqIEZsYWdzIHBvc3QgdmFsaWRhdGlvbi4gVmFsaWRhdGlvbnMgdGhhdCBhcmUgbm90IGFscmVhZHkgZG9uZSBieSB0aGUgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSBjdHggICAgIFBhcnNlIGNvbnRleHQuXG4gKiBAcGFyYW0gb3B0cyAgICBQYXJzZSBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uIG5hbWUgbWFwcGluZ3M6IHByb3BlcnR5TmFtZSAtPiBvcHRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmxhZ3M8VCBleHRlbmRzIEZsYWdPcHRpb25zID0gRmxhZ09wdGlvbnM+KFxuICBjdHg6IFBhcnNlRmxhZ3NDb250ZXh0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgb3B0czogUGFyc2VGbGFnc09wdGlvbnM8VD4sXG4gIG9wdGlvbnM6IE1hcDxzdHJpbmcsIEZsYWdPcHRpb25zPiA9IG5ldyBNYXAoKSxcbik6IHZvaWQge1xuICBpZiAoIW9wdHMuZmxhZ3MpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHNldERlZmF1bHRWYWx1ZXMoY3R4LCBvcHRzKTtcblxuICBjb25zdCBvcHRpb25OYW1lcyA9IE9iamVjdC5rZXlzKGN0eC5mbGFncyk7XG4gIGlmICghb3B0aW9uTmFtZXMubGVuZ3RoICYmIG9wdHMuYWxsb3dFbXB0eSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjdHguc3RhbmRhbG9uZSkge1xuICAgIHZhbGlkYXRlU3RhbmRhbG9uZU9wdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvcHRpb25OYW1lcyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IFtuYW1lLCBvcHRpb25dIG9mIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZVVua25vd25PcHRpb24ob3B0aW9uLCBvcHRzKTtcbiAgICB2YWxpZGF0ZUNvbmZsaWN0aW5nT3B0aW9ucyhjdHgsIG9wdGlvbik7XG4gICAgdmFsaWRhdGVEZXBlbmRpbmdPcHRpb25zKGN0eCwgb3B0aW9uLCBkZWZhdWx0VmFsdWVzKTtcbiAgICB2YWxpZGF0ZVJlcXVpcmVkVmFsdWVzKGN0eCwgb3B0aW9uLCBuYW1lKTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVxdWlyZWRPcHRpb25zKGN0eCwgb3B0aW9ucywgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVW5rbm93bk9wdGlvbjxUIGV4dGVuZHMgRmxhZ09wdGlvbnMgPSBGbGFnT3B0aW9ucz4oXG4gIG9wdGlvbjogRmxhZ09wdGlvbnMsXG4gIG9wdHM6IFBhcnNlRmxhZ3NPcHRpb25zPFQ+LFxuKSB7XG4gIGlmICghZ2V0T3B0aW9uKG9wdHMuZmxhZ3MgPz8gW10sIG9wdGlvbi5uYW1lKSkge1xuICAgIHRocm93IG5ldyBVbmtub3duT3B0aW9uRXJyb3Iob3B0aW9uLm5hbWUsIG9wdHMuZmxhZ3MgPz8gW10pO1xuICB9XG59XG5cbi8qKlxuICogQWRkcyBhbGwgZGVmYXVsdCB2YWx1ZXMgdG8gY3R4LmZsYWdzIGFuZCByZXR1cm5zIGEgYm9vbGVhbiBvYmplY3QgbWFwIHdpdGhcbiAqIG9ubHkgdGhlIGRlZmF1bHQgb3B0aW9uIG5hbWVzIGB7IFtPcHRpb25OYW1lOiBzdHJpbmddOiBib29sZWFuIH1gLlxuICovXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzPFQgZXh0ZW5kcyBGbGFnT3B0aW9ucyA9IEZsYWdPcHRpb25zPihcbiAgY3R4OiBQYXJzZUZsYWdzQ29udGV4dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIG9wdHM6IFBhcnNlRmxhZ3NPcHRpb25zPFQ+LFxuKSB7XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIGlmICghb3B0cy5mbGFncz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXM7XG4gIH1cblxuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXNcbiAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0cy5mbGFncykge1xuICAgIGxldCBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogdW5rbm93biA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGlmIC0tbm8tW2ZsYWddIGlzIHByZXNlbnQgc2V0IC0tW2ZsYWddIGRlZmF1bHQgdmFsdWUgdG8gdHJ1ZVxuICAgIGlmIChvcHRpb24ubmFtZS5zdGFydHNXaXRoKFwibm8tXCIpKSB7XG4gICAgICBjb25zdCBwcm9wTmFtZSA9IG9wdGlvbi5uYW1lLnJlcGxhY2UoL15uby0vLCBcIlwiKTtcbiAgICAgIGlmICh0eXBlb2YgY3R4LmZsYWdzW3Byb3BOYW1lXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc2l0aXZlT3B0aW9uID0gZ2V0T3B0aW9uKG9wdHMuZmxhZ3MsIHByb3BOYW1lKTtcbiAgICAgIGlmIChwb3NpdGl2ZU9wdGlvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSBwYXJhbUNhc2VUb0NhbWVsQ2FzZShwcm9wTmFtZSk7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghbmFtZSkge1xuICAgICAgbmFtZSA9IHBhcmFtQ2FzZVRvQ2FtZWxDYXNlKG9wdGlvbi5uYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNEZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSAoIW9wdHMuaWdub3JlRGVmYXVsdHMgfHxcbiAgICAgIHR5cGVvZiBvcHRzLmlnbm9yZURlZmF1bHRzW25hbWVdID09PSBcInVuZGVmaW5lZFwiKSAmJlxuICAgICAgdHlwZW9mIGN0eC5mbGFnc1tuYW1lXSA9PT0gXCJ1bmRlZmluZWRcIiAmJiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb24uZGVmYXVsdCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2YgZGVmYXVsdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApO1xuXG4gICAgaWYgKGhhc0RlZmF1bHRWYWx1ZSkge1xuICAgICAgY3R4LmZsYWdzW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKG9wdGlvbikgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgZGVmYXVsdFZhbHVlc1tvcHRpb24ubmFtZV0gPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24udmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjdHguZmxhZ3NbbmFtZV0gPSBvcHRpb24udmFsdWUoY3R4LmZsYWdzW25hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGFuZGFsb25lT3B0aW9uKFxuICBjdHg6IFBhcnNlRmxhZ3NDb250ZXh0LFxuICBvcHRpb25zOiBNYXA8c3RyaW5nLCBGbGFnT3B0aW9ucz4sXG4gIG9wdGlvbk5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICBkZWZhdWx0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbik6IHZvaWQge1xuICBpZiAoIWN0eC5zdGFuZGFsb25lIHx8IG9wdGlvbk5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERvbid0IHRocm93IGFuIGVycm9yIGlmIGFsbCB2YWx1ZXMgYXJlIGNvbWluZyBmcm9tIHRoZSBkZWZhdWx0IG9wdGlvbi5cbiAgZm9yIChjb25zdCBbXywgb3B0XSBvZiBvcHRpb25zKSB7XG4gICAgaWYgKCFkZWZhdWx0VmFsdWVzW29wdC5uYW1lXSAmJiBvcHQgIT09IGN0eC5zdGFuZGFsb25lKSB7XG4gICAgICB0aHJvdyBuZXcgT3B0aW9uTm90Q29tYmluYWJsZUVycm9yKGN0eC5zdGFuZGFsb25lLm5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbmZsaWN0aW5nT3B0aW9ucyhcbiAgY3R4OiBQYXJzZUZsYWdzQ29udGV4dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIG9wdGlvbjogRmxhZ09wdGlvbnMsXG4pOiB2b2lkIHtcbiAgaWYgKCFvcHRpb24uY29uZmxpY3RzPy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBmbGFnIG9mIG9wdGlvbi5jb25mbGljdHMpIHtcbiAgICBpZiAoaXNzZXQoZmxhZywgY3R4LmZsYWdzKSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nT3B0aW9uRXJyb3Iob3B0aW9uLm5hbWUsIGZsYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURlcGVuZGluZ09wdGlvbnMoXG4gIGN0eDogUGFyc2VGbGFnc0NvbnRleHQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBvcHRpb246IEZsYWdPcHRpb25zLFxuICBkZWZhdWx0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbik6IHZvaWQge1xuICBpZiAoIW9wdGlvbi5kZXBlbmRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3QgZmxhZyBvZiBvcHRpb24uZGVwZW5kcykge1xuICAgIC8vIERvbid0IHRocm93IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyBjb21pbmcgZnJvbSB0aGUgZGVmYXVsdCBvcHRpb24uXG4gICAgaWYgKCFpc3NldChmbGFnLCBjdHguZmxhZ3MpICYmICFkZWZhdWx0VmFsdWVzW29wdGlvbi5uYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IERlcGVuZGluZ09wdGlvbkVycm9yKG9wdGlvbi5uYW1lLCBmbGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXF1aXJlZFZhbHVlcyhcbiAgY3R4OiBQYXJzZUZsYWdzQ29udGV4dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIG9wdGlvbjogRmxhZ09wdGlvbnMsXG4gIG5hbWU6IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAoIW9wdGlvbi5hcmdzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGlzQXJyYXkgPSBvcHRpb24uYXJncy5sZW5ndGggPiAxO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9uLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmc6IEFyZ3VtZW50T3B0aW9ucyA9IG9wdGlvbi5hcmdzW2ldO1xuICAgIGlmICghYXJnLnJlcXVpcmVkVmFsdWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBoYXNWYWx1ZSA9IGlzQXJyYXlcbiAgICAgID8gdHlwZW9mIChjdHguZmxhZ3NbbmFtZV0gYXMgQXJyYXk8dW5rbm93bj4pW2ldICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICA6IHR5cGVvZiBjdHguZmxhZ3NbbmFtZV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgTWlzc2luZ09wdGlvblZhbHVlRXJyb3Iob3B0aW9uLm5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkT3B0aW9uczxUIGV4dGVuZHMgRmxhZ09wdGlvbnMgPSBGbGFnT3B0aW9ucz4oXG4gIGN0eDogUGFyc2VGbGFnc0NvbnRleHQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBvcHRpb25zOiBNYXA8c3RyaW5nLCBGbGFnT3B0aW9ucz4sXG4gIG9wdHM6IFBhcnNlRmxhZ3NPcHRpb25zPFQ+LFxuKTogdm9pZCB7XG4gIGlmICghb3B0cy5mbGFncz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9wdGlvbnNWYWx1ZXMgPSBbLi4ub3B0aW9ucy52YWx1ZXMoKV07XG5cbiAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0cy5mbGFncykge1xuICAgIGlmICghb3B0aW9uLnJlcXVpcmVkIHx8IHBhcmFtQ2FzZVRvQ2FtZWxDYXNlKG9wdGlvbi5uYW1lKSBpbiBjdHguZmxhZ3MpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjb25mbGljdHMgPSBvcHRpb24uY29uZmxpY3RzID8/IFtdO1xuICAgIGNvbnN0IGhhc0NvbmZsaWN0ID0gY29uZmxpY3RzLmZpbmQoKGZsYWc6IHN0cmluZykgPT4gISFjdHguZmxhZ3NbZmxhZ10pO1xuICAgIGNvbnN0IGhhc0NvbmZsaWN0cyA9IGhhc0NvbmZsaWN0IHx8XG4gICAgICBvcHRpb25zVmFsdWVzLmZpbmQoKG9wdCkgPT5cbiAgICAgICAgb3B0LmNvbmZsaWN0cz8uZmluZCgoZmxhZzogc3RyaW5nKSA9PiBmbGFnID09PSBvcHRpb24ubmFtZSlcbiAgICAgICk7XG5cbiAgICBpZiAoaGFzQ29uZmxpY3RzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IE1pc3NpbmdSZXF1aXJlZE9wdGlvbkVycm9yKG9wdGlvbi5uYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGV4aXN0cyBmb3IgZmxhZy5cbiAqIEBwYXJhbSBmbGFnTmFtZSAgRmxhZyBuYW1lLlxuICogQHBhcmFtIGZsYWdzICAgICBQYXJzZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBpc3NldChmbGFnTmFtZTogc3RyaW5nLCBmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtQ2FzZVRvQ2FtZWxDYXNlKGZsYWdOYW1lKTtcbiAgLy8gcmV0dXJuIHR5cGVvZiB2YWx1ZXNbIG5hbWUgXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWVzWyBuYW1lIF0gIT09IGZhbHNlO1xuICByZXR1cm4gdHlwZW9mIGZsYWdzW25hbWVdICE9PSBcInVuZGVmaW5lZFwiO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsZUFBZSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsUUFBUSxjQUFjO0FBQy9FLFNBQ0Usc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixrQkFBa0IsUUFDYixlQUFlO0FBSXRCOzs7Ozs7Q0FNQyxHQUNELE9BQU8sU0FBUyxjQUNkLEdBQStDLEVBQy9DLElBQTBCLEVBQzFCLFVBQW9DLElBQUksS0FBSztFQUU3QyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7SUFDZjtFQUNGO0VBQ0EsTUFBTSxnQkFBZ0IsaUJBQWlCLEtBQUs7RUFFNUMsTUFBTSxjQUFjLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSztFQUN6QyxJQUFJLENBQUMsWUFBWSxNQUFNLElBQUksS0FBSyxVQUFVLEVBQUU7SUFDMUM7RUFDRjtFQUVBLElBQUksSUFBSSxVQUFVLEVBQUU7SUFDbEIseUJBQ0UsS0FDQSxT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
+// denoCacheMetadata=9446537035450063229,8325896337654213266 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/cf2ac3e390878267b518e05a7a89fdcc4bfdc09f204332b5ec6db49b66da6f66.js b/vendor/gen/https/deno.land/cf2ac3e390878267b518e05a7a89fdcc4bfdc09f204332b5ec6db49b66da6f66.js
new file mode 100644
index 0000000..c9682e5
--- /dev/null
+++ b/vendor/gen/https/deno.land/cf2ac3e390878267b518e05a7a89fdcc4bfdc09f204332b5ec6db49b66da6f66.js
@@ -0,0 +1,27 @@
+/**
+ * @module
+ *
+ * This module exposes the Deno DOM API with the WASM (Web Assembly) backend
+ *
+ * @example
+ * ```typescript
+ * import { DOMParser, Element } from "jsr:@b-fuze/deno-dom";
+ *
+ * const doc = new DOMParser().parseFromString(
+ * `
+ * <h1>Hello World!</h1>
+ * <p>Hello from <a href="https://deno.land/">Deno!</a></p>
+ * `,
+ * "text/html",
+ * );
+ *
+ * const p = doc.querySelector("p")!;
+ * console.log(p.textContent); // "Hello from Deno!"
+ * ```
+ */ import init, { parse, parse_frag } from "./build/deno-wasm/deno-wasm.js";
+import { register } from "./src/parser.ts";
+await init();
+register(parse, parse_frag);
+export * from "./src/api.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9kZW5vLWRvbS13YXNtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9zZXMgdGhlIERlbm8gRE9NIEFQSSB3aXRoIHRoZSBXQVNNIChXZWIgQXNzZW1ibHkpIGJhY2tlbmRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRE9NUGFyc2VyLCBFbGVtZW50IH0gZnJvbSBcImpzcjpAYi1mdXplL2Rlbm8tZG9tXCI7XG4gKlxuICogY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcbiAqICAgYFxuICogICAgIDxoMT5IZWxsbyBXb3JsZCE8L2gxPlxuICogICAgIDxwPkhlbGxvIGZyb20gPGEgaHJlZj1cImh0dHBzOi8vZGVuby5sYW5kL1wiPkRlbm8hPC9hPjwvcD5cbiAqICAgYCxcbiAqICAgXCJ0ZXh0L2h0bWxcIixcbiAqICk7XG4gKlxuICogY29uc3QgcCA9IGRvYy5xdWVyeVNlbGVjdG9yKFwicFwiKSE7XG4gKiBjb25zb2xlLmxvZyhwLnRleHRDb250ZW50KTsgLy8gXCJIZWxsbyBmcm9tIERlbm8hXCJcbiAqIGBgYFxuICovXG5cbmltcG9ydCBpbml0LCB7IHBhcnNlLCBwYXJzZV9mcmFnIH0gZnJvbSBcIi4vYnVpbGQvZGVuby13YXNtL2Rlbm8td2FzbS5qc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9zcmMvcGFyc2VyLnRzXCI7XG5cbmF3YWl0IGluaXQoKTtcbnJlZ2lzdGVyKFxuICBwYXJzZSxcbiAgcGFyc2VfZnJhZyBhcyB1bmtub3duIGFzIChcbiAgICBodG1sOiBzdHJpbmcsXG4gICAgY29udGV4dF9sb2NhbF9uYW1lPzogc3RyaW5nLFxuICApID0+IHN0cmluZyxcbik7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9hcGkudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FFRCxPQUFPLFFBQVEsS0FBSyxFQUFFLFVBQVUsUUFBUSxpQ0FBaUM7QUFDekUsU0FBUyxRQUFRLFFBQVEsa0JBQWtCO0FBRTNDLE1BQU07QUFDTixTQUNFLE9BQ0E7QUFNRixjQUFjLGVBQWUifQ==
+// denoCacheMetadata=14312711765057321658,8032870759545700304 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d0cd986227f092828793c6d13996684c76badd525af6e252685bfcddbeb5defd.js b/vendor/gen/https/deno.land/d0cd986227f092828793c6d13996684c76badd525af6e252685bfcddbeb5defd.js
new file mode 100644
index 0000000..5cb82d3
--- /dev/null
+++ b/vendor/gen/https/deno.land/d0cd986227f092828793c6d13996684c76badd525af6e252685bfcddbeb5defd.js
@@ -0,0 +1,11 @@
+/**
+ * Check if the content variable is a generator.
+ */ export function isGenerator(content) {
+ if (typeof content !== "function") {
+ return false;
+ }
+ const name = content.constructor.name;
+ return name === "GeneratorFunction" || name === "AsyncGeneratorFunction";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVjayBpZiB0aGUgY29udGVudCB2YXJpYWJsZSBpcyBhIGdlbmVyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VuZXJhdG9yKFxuICBjb250ZW50OiB1bmtub3duLFxuKTogY29udGVudCBpcyBHZW5lcmF0b3JGdW5jdGlvbiB8IEFzeW5jR2VuZXJhdG9yRnVuY3Rpb24ge1xuICBpZiAodHlwZW9mIGNvbnRlbnQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSBjb250ZW50LmNvbnN0cnVjdG9yLm5hbWU7XG4gIHJldHVybiAobmFtZSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiIHx8IG5hbWUgPT09IFwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Q0FFQyxHQUNELE9BQU8sU0FBUyxZQUNkLE9BQWdCO0VBRWhCLElBQUksT0FBTyxZQUFZLFlBQVk7SUFDakMsT0FBTztFQUNUO0VBRUEsTUFBTSxPQUFPLFFBQVEsV0FBVyxDQUFDLElBQUk7RUFDckMsT0FBUSxTQUFTLHVCQUF1QixTQUFTO0FBQ25EIn0=
+// denoCacheMetadata=6542558327228171726,6924956484584296855 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d12174d1bd572035c0e166e17b57cb58410c7e8657c072c48eaa37a43526b583.js b/vendor/gen/https/deno.land/d12174d1bd572035c0e166e17b57cb58410c7e8657c072c48eaa37a43526b583.js
new file mode 100644
index 0000000..03b7225
--- /dev/null
+++ b/vendor/gen/https/deno.land/d12174d1bd572035c0e166e17b57cb58410c7e8657c072c48eaa37a43526b583.js
@@ -0,0 +1,199 @@
+import { resolveInclude } from "./utils/path.ts";
+import { isGenerator } from "./utils/generator.ts";
+import { concurrent } from "./utils/concurrent.ts";
+import { mergeData } from "./utils/merge_data.ts";
+import { getBasename, getPageUrl } from "./utils/page_url.ts";
+import { getPageDate } from "./utils/page_date.ts";
+import { posix } from "../deps/path.ts";
+/**
+ * The renderer is responsible for rendering the site pages
+ * in the right order and using the right template engine.
+ */ export default class Renderer {
+ /** The default folder to include the layouts */ includes;
+ /** The filesystem instance used to read the layouts */ fs;
+ /** To convert the urls to pretty /example.html => /example/ */ prettyUrls;
+ /** All preprocessors */ preprocessors;
+ /** Available file formats */ formats;
+ /** The registered helpers */ helpers = new Map();
+ constructor(options){
+ this.includes = options.includes;
+ this.prettyUrls = options.prettyUrls;
+ this.preprocessors = options.preprocessors;
+ this.formats = options.formats;
+ this.fs = options.fs;
+ }
+ /** Register a new helper used by the template engines */ addHelper(name, fn, options) {
+ this.helpers.set(name, [
+ fn,
+ options
+ ]);
+ for (const format of this.formats.entries.values()){
+ format.engines?.forEach((engine)=>engine.addHelper(name, fn, options));
+ }
+ return this;
+ }
+ /** Render the provided pages */ async renderPages(from, to) {
+ const renderedPages = [];
+ for (const group of this.#groupPages(from)){
+ const pages = [];
+ const generators = [];
+ // Split regular pages and generators
+ for (const page of group){
+ if (isGenerator(page.data.content)) {
+ generators.push(page);
+ continue;
+ }
+ pages.push(page);
+ }
+ // Preprocess the pages and add them to site.pages
+ await this.preprocessors.run(pages);
+ to.push(...pages);
+ const generatedPages = [];
+ for (const page of generators){
+ const data = {
+ ...page.data
+ };
+ const { content } = data;
+ delete data.content;
+ const generator = await this.render(content, data, page.src.path + page.src.ext);
+ let index = 0;
+ const basePath = posix.dirname(page.data.url);
+ for await (const data of generator){
+ if (!data.content) {
+ data.content = undefined;
+ }
+ const newPage = page.duplicate(index++, mergeData(page.data, data));
+ let base = basePath;
+ if (data.url === false) {
+ continue;
+ }
+ if (!data.url && data.basename !== undefined) {
+ // @ts-ignore: The url is added later
+ delete newPage.data.url;
+ base = posix.dirname(page.outputPath);
+ }
+ const url = getPageUrl(newPage, this.prettyUrls, base);
+ if (!url) {
+ continue;
+ }
+ newPage.data.url = url;
+ newPage.data.basename = getBasename(url);
+ newPage.data.date = getPageDate(newPage);
+ // Prevent running the layout if the page is not HTML
+ if (!data.layout && !newPage.outputPath.endsWith(".html")) {
+ delete newPage.data.layout;
+ }
+ generatedPages.push(newPage);
+ }
+ }
+ // Preprocess the generators and add them to site.pages
+ await this.preprocessors.run(generatedPages);
+ to.push(...generatedPages);
+ // Render the pages content
+ await concurrent(pages.concat(generatedPages), async (page)=>{
+ try {
+ const content = await this.#renderPage(page);
+ // Save the children to render the layout later
+ if (page.data.layout || page.outputPath.endsWith(".html")) {
+ page.data.children = content;
+ renderedPages.push(page);
+ } else {
+ page.content = content;
+ }
+ } catch (cause) {
+ throw new Error(`Error rendering the page: ${page.sourcePath}`, {
+ cause
+ });
+ }
+ });
+ }
+ // Render the pages layouts at the end
+ await concurrent(renderedPages, async (page)=>{
+ try {
+ page.content = await this.#renderLayout(page, page.data.children);
+ } catch (cause) {
+ throw new Error(`Error rendering the layout of the page ${page.sourcePath}`, {
+ cause
+ });
+ }
+ });
+ }
+ /** Render a template */ async render(content, data, filename, isLayout = false) {
+ const engines = this.#getEngine(filename, data, isLayout);
+ if (engines) {
+ for (const engine of engines){
+ content = await engine.render(content, data, filename);
+ }
+ }
+ return content;
+ }
+ /** Group the pages by renderOrder */ #groupPages(pages) {
+ const renderOrder = {};
+ for (const page of pages){
+ const order = page.data.renderOrder || 0;
+ renderOrder[order] = renderOrder[order] || [];
+ renderOrder[order].push(page);
+ }
+ return Object.keys(renderOrder).sort().map((order)=>renderOrder[order]);
+ }
+ /** Render a page */ async #renderPage(page) {
+ const data = {
+ ...page.data
+ };
+ const { content } = data;
+ delete data.content;
+ return await this.render(content, data, page.src.path + page.src.ext);
+ }
+ /** Render the page layout */ async #renderLayout(page, content) {
+ let data = {
+ ...page.data
+ };
+ let path = page.src.path + page.src.ext;
+ let layout = data.layout;
+ // Render the layouts recursively
+ while(layout){
+ const format = this.formats.search(layout);
+ if (!format || !format.loader) {
+ throw new Error(`The layout format "${layout}" doesn't exist`);
+ }
+ const includesPath = format.engines?.[0].includes;
+ if (!includesPath) {
+ throw new Error(`The layout format "${layout}" doesn't support includes`);
+ }
+ const layoutPath = resolveInclude(layout, includesPath, posix.dirname(path));
+ const entry = this.fs.entries.get(layoutPath);
+ if (!entry) {
+ throw new Error(`The layout file "${layoutPath}" doesn't exist`);
+ }
+ const layoutData = await entry.getContent(format.loader);
+ delete data.layout;
+ delete data.templateEngine;
+ data = mergeData(layoutData, data, {
+ content
+ });
+ content = await this.render(layoutData.content, data, layoutPath, true);
+ layout = layoutData.layout;
+ path = layoutPath;
+ }
+ return content;
+ }
+ /** Get the engines assigned to an extension or configured in the data */ #getEngine(path, data, isLayout) {
+ let { templateEngine } = data;
+ if (templateEngine) {
+ templateEngine = Array.isArray(templateEngine) ? templateEngine : templateEngine.split(",");
+ return templateEngine.reduce((engines, name)=>{
+ const format = this.formats.get(`.${name.trim()}`);
+ if (format?.engines) {
+ return engines.concat(format.engines);
+ }
+ throw new Error(`The template engine "${name}" doesn't exist`);
+ }, []);
+ }
+ const format = this.formats.search(path);
+ if (isLayout || format?.isPage) {
+ return format?.engines;
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9yZW5kZXJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlSW5jbHVkZSB9IGZyb20gXCIuL3V0aWxzL3BhdGgudHNcIjtcbmltcG9ydCB7IGlzR2VuZXJhdG9yIH0gZnJvbSBcIi4vdXRpbHMvZ2VuZXJhdG9yLnRzXCI7XG5pbXBvcnQgeyBjb25jdXJyZW50IH0gZnJvbSBcIi4vdXRpbHMvY29uY3VycmVudC50c1wiO1xuaW1wb3J0IHsgbWVyZ2VEYXRhIH0gZnJvbSBcIi4vdXRpbHMvbWVyZ2VfZGF0YS50c1wiO1xuaW1wb3J0IHsgZ2V0QmFzZW5hbWUsIGdldFBhZ2VVcmwgfSBmcm9tIFwiLi91dGlscy9wYWdlX3VybC50c1wiO1xuaW1wb3J0IHsgZ2V0UGFnZURhdGUgfSBmcm9tIFwiLi91dGlscy9wYWdlX2RhdGUudHNcIjtcbmltcG9ydCB7IFBhZ2UgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5pbXBvcnQgeyBwb3NpeCB9IGZyb20gXCIuLi9kZXBzL3BhdGgudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBDb250ZW50LCBEYXRhLCBSYXdEYXRhIH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgUHJvY2Vzc29ycyBmcm9tIFwiLi9wcm9jZXNzb3JzLnRzXCI7XG5pbXBvcnQgdHlwZSBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMudHNcIjtcbmltcG9ydCB0eXBlIEZTIGZyb20gXCIuL2ZzLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGluY2x1ZGVzOiBzdHJpbmc7XG4gIHByZXR0eVVybHM6IGJvb2xlYW47XG4gIHByZXByb2Nlc3NvcnM6IFByb2Nlc3NvcnM7XG4gIGZvcm1hdHM6IEZvcm1hdHM7XG4gIGZzOiBGUztcbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyB0aGUgc2l0ZSBwYWdlc1xuICogaW4gdGhlIHJpZ2h0IG9yZGVyIGFuZCB1c2luZyB0aGUgcmlnaHQgdGVtcGxhdGUgZW5naW5lLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJlciB7XG4gIC8qKiBUaGUgZGVmYXVsdCBmb2xkZXIgdG8gaW5jbHVkZSB0aGUgbGF5b3V0cyAqL1xuICBpbmNsdWRlczogc3RyaW5nO1xuXG4gIC8qKiBUaGUgZmlsZXN5c3RlbSBpbnN0YW5jZSB1c2VkIHRvIHJlYWQgdGhlIGxheW91dHMgKi9cbiAgZnM6IEZTO1xuXG4gIC8qKiBUbyBjb252ZXJ0IHRoZSB1cmxzIHRvIHByZXR0eSAvZXhhbXBsZS5odG1sID0+IC9leGFtcGxlLyAqL1xuICBwcmV0dHlVcmxzOiBib29sZWFuO1xuXG4gIC8qKiBBbGwgcHJlcHJvY2Vzc29ycyAqL1xuICBwcmVwcm9jZXNzb3JzOiBQcm9jZXNzb3JzO1xuXG4gIC8qKiBBdmFpbGFibGUgZmlsZSBmb3JtYXRzICovXG4gIGZvcm1hdHM6IEZvcm1hdHM7XG5cbiAgLyoqIFRoZSByZWdpc3RlcmVkIGhlbHBlcnMgKi9cbiAgaGVscGVycyA9IG5ldyBNYXA8c3RyaW5nLCBbSGVscGVyLCBIZWxwZXJPcHRpb25zXT4oKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5pbmNsdWRlcyA9IG9wdGlvbnMuaW5jbHVkZXM7XG4gICAgdGhpcy5wcmV0dHlVcmxzID0gb3B0aW9ucy5wcmV0dHlVcmxzO1xuICAgIHRoaXMucHJlcHJvY2Vzc29ycyA9IG9wdGlvbnMucHJlcHJvY2Vzc29ycztcbiAgICB0aGlzLmZvcm1hdHMgPSBvcHRpb25zLmZvcm1hdHM7XG4gICAgdGhpcy5mcyA9IG9wdGlvbnMuZnM7XG4gIH1cblxuICAvKiogUmVnaXN0ZXIgYSBuZXcgaGVscGVyIHVzZWQgYnkgdGhlIHRlbXBsYXRlIGVuZ2luZXMgKi9cbiAgYWRkSGVscGVyKG5hbWU6IHN0cmluZywgZm46IEhlbHBlciwgb3B0aW9uczogSGVscGVyT3B0aW9ucykge1xuICAgIHRoaXMuaGVscGVycy5zZXQobmFtZSwgW2ZuLCBvcHRpb25zXSk7XG5cbiAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiB0aGlzLmZvcm1hdHMuZW50cmllcy52YWx1ZXMoKSkge1xuICAgICAgZm9ybWF0LmVuZ2luZXM/LmZvckVhY2goKGVuZ2luZSkgPT4gZW5naW5lLmFkZEhlbHBlcihuYW1lLCBmbiwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgcHJvdmlkZWQgcGFnZXMgKi9cbiAgYXN5bmMgcmVuZGVyUGFnZXMoZnJvbTogUGFnZVtdLCB0bzogUGFnZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVuZGVyZWRQYWdlczogUGFnZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuI2dyb3VwUGFnZXMoZnJvbSkpIHtcbiAgICAgIGNvbnN0IHBhZ2VzOiBQYWdlW10gPSBbXTtcbiAgICAgIGNvbnN0IGdlbmVyYXRvcnM6IFBhZ2VbXSA9IFtdO1xuXG4gICAgICAvLyBTcGxpdCByZWd1bGFyIHBhZ2VzIGFuZCBnZW5lcmF0b3JzXG4gICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgZ3JvdXApIHtcbiAgICAgICAgaWYgKGlzR2VuZXJhdG9yKHBhZ2UuZGF0YS5jb250ZW50KSkge1xuICAgICAgICAgIGdlbmVyYXRvcnMucHVzaChwYWdlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VzLnB1c2gocGFnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXByb2Nlc3MgdGhlIHBhZ2VzIGFuZCBhZGQgdGhlbSB0byBzaXRlLnBhZ2VzXG4gICAgICBhd2FpdCB0aGlzLnByZXByb2Nlc3NvcnMucnVuKHBhZ2VzKTtcbiAgICAgIHRvLnB1c2goLi4ucGFnZXMpO1xuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRQYWdlczogUGFnZVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgZ2VuZXJhdG9ycykge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi5wYWdlLmRhdGEgfTtcbiAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSBkYXRhO1xuICAgICAgICBkZWxldGUgZGF0YS5jb250ZW50O1xuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IGF3YWl0IHRoaXMucmVuZGVyPEdlbmVyYXRvcjxSYXdEYXRhLCBSYXdEYXRhPj4oXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHBhZ2Uuc3JjLnBhdGggKyBwYWdlLnNyYy5leHQsXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBwb3NpeC5kaXJuYW1lKHBhZ2UuZGF0YS51cmwpO1xuXG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZGF0YSBvZiBnZW5lcmF0b3IpIHtcbiAgICAgICAgICBpZiAoIWRhdGEuY29udGVudCkge1xuICAgICAgICAgICAgZGF0YS5jb250ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdQYWdlID0gcGFnZS5kdXBsaWNhdGUoXG4gICAgICAgICAgICBpbmRleCsrLFxuICAgICAgICAgICAgbWVyZ2VEYXRhKHBhZ2UuZGF0YSwgZGF0YSkgYXMgRGF0YSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgbGV0IGJhc2UgPSBiYXNlUGF0aDtcblxuICAgICAgICAgIGlmIChkYXRhLnVybCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGF0YS51cmwgJiYgZGF0YS5iYXNlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBUaGUgdXJsIGlzIGFkZGVkIGxhdGVyXG4gICAgICAgICAgICBkZWxldGUgbmV3UGFnZS5kYXRhLnVybDtcbiAgICAgICAgICAgIGJhc2UgPSBwb3NpeC5kaXJuYW1lKHBhZ2Uub3V0cHV0UGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFnZVVybChuZXdQYWdlLCB0aGlzLnByZXR0eVVybHMsIGJhc2UpO1xuXG4gICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld1BhZ2UuZGF0YS51cmwgPSB1cmw7XG4gICAgICAgICAgbmV3UGFnZS5kYXRhLmJhc2VuYW1lID0gZ2V0QmFzZW5hbWUodXJsKTtcbiAgICAgICAgICBuZXdQYWdlLmRhdGEuZGF0ZSA9IGdldFBhZ2VEYXRlKG5ld1BhZ2UpO1xuXG4gICAgICAgICAgLy8gUHJldmVudCBydW5uaW5nIHRoZSBsYXlvdXQgaWYgdGhlIHBhZ2UgaXMgbm90IEhUTUxcbiAgICAgICAgICBpZiAoIWRhdGEubGF5b3V0ICYmICFuZXdQYWdlLm91dHB1dFBhdGguZW5kc1dpdGgoXCIuaHRtbFwiKSkge1xuICAgICAgICAgICAgZGVsZXRlIG5ld1BhZ2UuZGF0YS5sYXlvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGdlbmVyYXRlZFBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUHJlcHJvY2VzcyB0aGUgZ2VuZXJhdG9ycyBhbmQgYWRkIHRoZW0gdG8gc2l0ZS5wYWdlc1xuICAgICAgYXdhaXQgdGhpcy5wcmVwcm9jZXNzb3JzLnJ1bihnZW5lcmF0ZWRQYWdlcyk7XG4gICAgICB0by5wdXNoKC4uLmdlbmVyYXRlZFBhZ2VzKTtcblxuICAgICAgLy8gUmVuZGVyIHRoZSBwYWdlcyBjb250ZW50XG4gICAgICBhd2FpdCBjb25jdXJyZW50KFxuICAgICAgICBwYWdlcy5jb25jYXQoZ2VuZXJhdGVkUGFnZXMpLFxuICAgICAgICBhc3luYyAocGFnZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy4jcmVuZGVyUGFnZShwYWdlKTtcblxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY2hpbGRyZW4gdG8gcmVuZGVyIHRoZSBsYXlvdXQgbGF0ZXJcbiAgICAgICAgICAgIGlmIChwYWdlLmRhdGEubGF5b3V0IHx8IHBhZ2Uub3V0cHV0UGF0aC5lbmRzV2l0aChcIi5odG1sXCIpKSB7XG4gICAgICAgICAgICAgIHBhZ2UuZGF0YS5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gICAgICAgICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaChwYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhZ2UuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcmVuZGVyaW5nIHRoZSBwYWdlOiAke3BhZ2Uuc291cmNlUGF0aH1gLCB7XG4gICAgICAgICAgICAgIGNhdXNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgdGhlIHBhZ2VzIGxheW91dHMgYXQgdGhlIGVuZFxuICAgIGF3YWl0IGNvbmN1cnJlbnQoXG4gICAgICByZW5kZXJlZFBhZ2VzLFxuICAgICAgYXN5bmMgKHBhZ2UpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYWdlLmNvbnRlbnQgPSBhd2FpdCB0aGlzLiNyZW5kZXJMYXlvdXQoXG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGFnZS5kYXRhLmNoaWxkcmVuIGFzIENvbnRlbnQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXJyb3IgcmVuZGVyaW5nIHRoZSBsYXlvdXQgb2YgdGhlIHBhZ2UgJHtwYWdlLnNvdXJjZVBhdGh9YCxcbiAgICAgICAgICAgIHsgY2F1c2UgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKiogUmVuZGVyIGEgdGVtcGxhdGUgKi9cbiAgYXN5bmMgcmVuZGVyPFQ+KFxuICAgIGNvbnRlbnQ6IHVua25vd24sXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICBpc0xheW91dCA9IGZhbHNlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBlbmdpbmVzID0gdGhpcy4jZ2V0RW5naW5lKGZpbGVuYW1lLCBkYXRhLCBpc0xheW91dCk7XG5cbiAgICBpZiAoZW5naW5lcykge1xuICAgICAgZm9yIChjb25zdCBlbmdpbmUgb2YgZW5naW5lcykge1xuICAgICAgICBjb250ZW50ID0gYXdhaXQgZW5naW5lLnJlbmRlcihjb250ZW50LCBkYXRhLCBmaWxlbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnQgYXMgVDtcbiAgfVxuXG4gIC8qKiBHcm91cCB0aGUgcGFnZXMgYnkgcmVuZGVyT3JkZXIgKi9cbiAgI2dyb3VwUGFnZXMocGFnZXM6IFBhZ2VbXSk6IFBhZ2VbXVtdIHtcbiAgICBjb25zdCByZW5kZXJPcmRlcjogUmVjb3JkPG51bWJlciB8IHN0cmluZywgUGFnZVtdPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSB7XG4gICAgICBjb25zdCBvcmRlciA9IHBhZ2UuZGF0YS5yZW5kZXJPcmRlciB8fCAwO1xuICAgICAgcmVuZGVyT3JkZXJbb3JkZXJdID0gcmVuZGVyT3JkZXJbb3JkZXJdIHx8IFtdO1xuICAgICAgcmVuZGVyT3JkZXJbb3JkZXJdLnB1c2gocGFnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlbmRlck9yZGVyKS5zb3J0KCkubWFwKChvcmRlcikgPT4gcmVuZGVyT3JkZXJbb3JkZXJdKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgYSBwYWdlICovXG4gIGFzeW5jICNyZW5kZXJQYWdlKHBhZ2U6IFBhZ2UpOiBQcm9taXNlPENvbnRlbnQ+IHtcbiAgICBjb25zdCBkYXRhID0geyAuLi5wYWdlLmRhdGEgfTtcbiAgICBjb25zdCB7IGNvbnRlbnQgfSA9IGRhdGE7XG4gICAgZGVsZXRlIGRhdGEuY29udGVudDtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbmRlcjxDb250ZW50PihcbiAgICAgIGNvbnRlbnQsXG4gICAgICBkYXRhLFxuICAgICAgcGFnZS5zcmMucGF0aCArIHBhZ2Uuc3JjLmV4dCxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgcGFnZSBsYXlvdXQgKi9cbiAgYXN5bmMgI3JlbmRlckxheW91dChwYWdlOiBQYWdlLCBjb250ZW50OiBDb250ZW50KTogUHJvbWlzZTxDb250ZW50PiB7XG4gICAgbGV0IGRhdGEgPSB7IC4uLnBhZ2UuZGF0YSB9O1xuICAgIGxldCBwYXRoID0gcGFnZS5zcmMucGF0aCArIHBhZ2Uuc3JjLmV4dDtcbiAgICBsZXQgbGF5b3V0ID0gZGF0YS5sYXlvdXQ7XG5cbiAgICAvLyBSZW5kZXIgdGhlIGxheW91dHMgcmVjdXJzaXZlbHlcbiAgICB3aGlsZSAobGF5b3V0KSB7XG4gICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmZvcm1hdHMuc2VhcmNoKGxheW91dCk7XG5cbiAgICAgIGlmICghZm9ybWF0IHx8ICFmb3JtYXQubG9hZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGxheW91dCBmb3JtYXQgXCIke2xheW91dH1cIiBkb2Vzbid0IGV4aXN0YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluY2x1ZGVzUGF0aCA9IGZvcm1hdC5lbmdpbmVzPy5bMF0uaW5jbHVkZXM7XG5cbiAgICAgIGlmICghaW5jbHVkZXNQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGxheW91dCBmb3JtYXQgXCIke2xheW91dH1cIiBkb2Vzbid0IHN1cHBvcnQgaW5jbHVkZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXlvdXRQYXRoID0gcmVzb2x2ZUluY2x1ZGUoXG4gICAgICAgIGxheW91dCxcbiAgICAgICAgaW5jbHVkZXNQYXRoLFxuICAgICAgICBwb3NpeC5kaXJuYW1lKHBhdGgpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5mcy5lbnRyaWVzLmdldChsYXlvdXRQYXRoKTtcblxuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBsYXlvdXQgZmlsZSBcIiR7bGF5b3V0UGF0aH1cIiBkb2Vzbid0IGV4aXN0YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheW91dERhdGEgPSBhd2FpdCBlbnRyeS5nZXRDb250ZW50KGZvcm1hdC5sb2FkZXIpO1xuXG4gICAgICBkZWxldGUgZGF0YS5sYXlvdXQ7XG4gICAgICBkZWxldGUgZGF0YS50ZW1wbGF0ZUVuZ2luZTtcblxuICAgICAgZGF0YSA9IG1lcmdlRGF0YShcbiAgICAgICAgbGF5b3V0RGF0YSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgeyBjb250ZW50IH0sXG4gICAgICApIGFzIERhdGE7XG5cbiAgICAgIGNvbnRlbnQgPSBhd2FpdCB0aGlzLnJlbmRlcjxDb250ZW50PihcbiAgICAgICAgbGF5b3V0RGF0YS5jb250ZW50LFxuICAgICAgICBkYXRhLFxuICAgICAgICBsYXlvdXRQYXRoLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICAgIGxheW91dCA9IGxheW91dERhdGEubGF5b3V0O1xuICAgICAgcGF0aCA9IGxheW91dFBhdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICAvKiogR2V0IHRoZSBlbmdpbmVzIGFzc2lnbmVkIHRvIGFuIGV4dGVuc2lvbiBvciBjb25maWd1cmVkIGluIHRoZSBkYXRhICovXG4gICNnZXRFbmdpbmUoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IFBhcnRpYWw8RGF0YT4sXG4gICAgaXNMYXlvdXQ6IGJvb2xlYW4sXG4gICk6IEVuZ2luZVtdIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZUVuZ2luZSB9ID0gZGF0YTtcblxuICAgIGlmICh0ZW1wbGF0ZUVuZ2luZSkge1xuICAgICAgdGVtcGxhdGVFbmdpbmUgPSBBcnJheS5pc0FycmF5KHRlbXBsYXRlRW5naW5lKVxuICAgICAgICA/IHRlbXBsYXRlRW5naW5lXG4gICAgICAgIDogdGVtcGxhdGVFbmdpbmUuc3BsaXQoXCIsXCIpO1xuXG4gICAgICByZXR1cm4gdGVtcGxhdGVFbmdpbmUucmVkdWNlKChlbmdpbmVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuZm9ybWF0cy5nZXQoYC4ke25hbWUudHJpbSgpfWApO1xuXG4gICAgICAgIGlmIChmb3JtYXQ/LmVuZ2luZXMpIHtcbiAgICAgICAgICByZXR1cm4gZW5naW5lcy5jb25jYXQoZm9ybWF0LmVuZ2luZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdGVtcGxhdGUgZW5naW5lIFwiJHtuYW1lfVwiIGRvZXNuJ3QgZXhpc3RgKTtcbiAgICAgIH0sIFtdIGFzIEVuZ2luZVtdKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmZvcm1hdHMuc2VhcmNoKHBhdGgpO1xuXG4gICAgaWYgKGlzTGF5b3V0IHx8IGZvcm1hdD8uaXNQYWdlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Py5lbmdpbmVzO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQW4gaW50ZXJmYWNlIHVzZWQgYnkgYWxsIHRlbXBsYXRlIGVuZ2luZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lPFQgPSBzdHJpbmcgfCB7IHRvU3RyaW5nKCk6IHN0cmluZyB9PiB7XG4gIC8qKiBUaGUgZm9sZGVyIG5hbWUgb2YgdGhlIGluY2x1ZGVzICovXG4gIGluY2x1ZGVzPzogc3RyaW5nO1xuXG4gIC8qKiBEZWxldGUgYSBjYWNoZWQgdGVtcGxhdGUgKi9cbiAgZGVsZXRlQ2FjaGUoZmlsZTogc3RyaW5nKTogdm9pZDtcblxuICAvKiogUmVuZGVyIGEgdGVtcGxhdGUgKHVzZWQgdG8gcmVuZGVyIHBhZ2VzKSAqL1xuICByZW5kZXIoXG4gICAgY29udGVudDogdW5rbm93bixcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gICk6IFQgfCBQcm9taXNlPFQ+O1xuXG4gIC8qKiBBZGQgYSBoZWxwZXIgdG8gdGhlIHRlbXBsYXRlIGVuZ2luZSAqL1xuICBhZGRIZWxwZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZuOiBIZWxwZXIsXG4gICAgb3B0aW9uczogSGVscGVyT3B0aW9ucyxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEEgZ2VuZXJpYyBoZWxwZXIgdG8gYmUgdXNlZCBpbiB0ZW1wbGF0ZSBlbmdpbmVzICovXG5leHBvcnQgaW50ZXJmYWNlIEhlbHBlclRoaXMge1xuICBkYXRhPzogRGF0YTtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEhlbHBlciA9ICh0aGlzOiBIZWxwZXJUaGlzIHwgdm9pZCwgLi4uYXJnczogYW55W10pID0+IGFueTtcblxuLyoqIFRoZSBvcHRpb25zIGZvciBhIHRlbXBsYXRlIGhlbHBlciAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWxwZXJPcHRpb25zIHtcbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSBoZWxwZXIgKHRhZywgZmlsdGVyLCBldGMpICovXG4gIHR5cGU6IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgaGVscGVyIHJldHVybnMgYW4gaW5zdGFuY2Ugb3Igbm90ICovXG4gIGFzeW5jPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgaGVscGVyIGhhcyBhIGJvZHkgb3Igbm90ICh1c2VkIGZvciB0YWcgdHlwZXMpICovXG4gIGJvZHk/OiBib29sZWFuO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsY0FBYyxRQUFRLGtCQUFrQjtBQUNqRCxTQUFTLFdBQVcsUUFBUSx1QkFBdUI7QUFDbkQsU0FBUyxVQUFVLFFBQVEsd0JBQXdCO0FBQ25ELFNBQVMsU0FBUyxRQUFRLHdCQUF3QjtBQUNsRCxTQUFTLFdBQVcsRUFBRSxVQUFVLFFBQVEsc0JBQXNCO0FBQzlELFNBQVMsV0FBVyxRQUFRLHVCQUF1QjtBQUVuRCxTQUFTLEtBQUssUUFBUSxrQkFBa0I7QUFleEM7OztDQUdDLEdBQ0QsZUFBZSxNQUFNO0VBQ25CLDhDQUE4QyxHQUM5QyxTQUFpQjtFQUVqQixxREFBcUQsR0FDckQsR0FBTztFQUVQLDZEQUE2RCxHQUM3RCxXQUFvQjtFQUVwQixzQkFBc0IsR0FDdEIsY0FBMEI7RUFFMUIsMkJBQTJCLEdBQzNCLFFBQWlCO0VBRWpCLDJCQUEyQixHQUMzQixVQUFVLElBQUksTUFBdUM7RUFFckQsWUFBWSxPQUFnQixDQUFFO0lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxRQUFRO0lBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxVQUFVO0lBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxhQUFhO0lBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxPQUFPO0lBQzlCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFO0VBQ3RCO0VBRUEsdURBQXVELEdBQ3ZELFVBQVUsSUFBWSxFQUFFLEVBQVUsRUFBRSxPQUFzQixFQUFFO0lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07TUFBQztNQUFJO0tBQVE7SUFFcEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFB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
+// denoCacheMetadata=4787150038423855534,1908837370687385200 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d211b9fc75c5154e48599a5b8007ba854f6e3f037b83dae06373f1a55c18d846.js b/vendor/gen/https/deno.land/d211b9fc75c5154e48599a5b8007ba854f6e3f037b83dae06373f1a55c18d846.js
new file mode 100644
index 0000000..da12833
--- /dev/null
+++ b/vendor/gen/https/deno.land/d211b9fc75c5154e48599a5b8007ba854f6e3f037b83dae06373f1a55c18d846.js
@@ -0,0 +1,3 @@
+export { serveFile } from "jsr:@std/http@1.0.16/file-server";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9odHRwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHNlcnZlRmlsZSB9IGZyb20gXCJqc3I6QHN0ZC9odHRwQDEuMC4xNi9maWxlLXNlcnZlclwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsU0FBUyxRQUFRLG1DQUFtQyJ9
+// denoCacheMetadata=339717819398617715,16966349399010671215 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d251f9a3376cfcfbcbada46a892fa72002f1a96e91a74e7946bbfb94dd756abe.js b/vendor/gen/https/deno.land/d251f9a3376cfcfbcbada46a892fa72002f1a96e91a74e7946bbfb94dd756abe.js
new file mode 100644
index 0000000..64c7ff0
--- /dev/null
+++ b/vendor/gen/https/deno.land/d251f9a3376cfcfbcbada46a892fa72002f1a96e91a74e7946bbfb94dd756abe.js
@@ -0,0 +1,97 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH, CHAR_DOT, CHAR_FORWARD_SLASH, CHAR_LOWERCASE_A, CHAR_LOWERCASE_Z, CHAR_UPPERCASE_A, CHAR_UPPERCASE_Z } from "./_constants.ts";
+export function assertPath(path) {
+ if (typeof path !== "string") {
+ throw new TypeError(`Path must be a string. Received ${JSON.stringify(path)}`);
+ }
+}
+export function isPosixPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH;
+}
+export function isPathSeparator(code) {
+ return isPosixPathSeparator(code) || code === CHAR_BACKWARD_SLASH;
+}
+export function isWindowsDeviceRoot(code) {
+ return code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z || code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z;
+}
+// Resolves . and .. elements in a path with directory names
+export function normalizeString(path, allowAboveRoot, separator, isPathSeparator) {
+ let res = "";
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let code;
+ for(let i = 0, len = path.length; i <= len; ++i){
+ if (i < len) code = path.charCodeAt(i);
+ else if (isPathSeparator(code)) break;
+ else code = CHAR_FORWARD_SLASH;
+ if (isPathSeparator(code)) {
+ if (lastSlash === i - 1 || dots === 1) {
+ // NOOP
+ } else if (lastSlash !== i - 1 && dots === 2) {
+ if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf(separator);
+ if (lastSlashIndex === -1) {
+ res = "";
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
+ }
+ lastSlash = i;
+ dots = 0;
+ continue;
+ } else if (res.length === 2 || res.length === 1) {
+ res = "";
+ lastSegmentLength = 0;
+ lastSlash = i;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ if (res.length > 0) res += `${separator}..`;
+ else res = "..";
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);
+ else res = path.slice(lastSlash + 1, i);
+ lastSegmentLength = i - lastSlash - 1;
+ }
+ lastSlash = i;
+ dots = 0;
+ } else if (code === CHAR_DOT && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+}
+export function _format(sep, pathObject) {
+ const dir = pathObject.dir || pathObject.root;
+ const base = pathObject.base || (pathObject.name || "") + (pathObject.ext || "");
+ if (!dir) return base;
+ if (dir === pathObject.root) return dir + base;
+ return dir + sep + base;
+}
+const WHITESPACE_ENCODINGS = {
+ "\u0009": "%09",
+ "\u000A": "%0A",
+ "\u000B": "%0B",
+ "\u000C": "%0C",
+ "\u000D": "%0D",
+ "\u0020": "%20"
+};
+export function encodeWhitespace(string) {
+ return string.replaceAll(/[\s]/g, (c)=>{
+ return WHITESPACE_ENCODINGS[c] ?? c;
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvX3V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBGb3JtYXRJbnB1dFBhdGhPYmplY3QgfSBmcm9tIFwiLi9faW50ZXJmYWNlLnRzXCI7XG5pbXBvcnQge1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILFxuICBDSEFSX0RPVCxcbiAgQ0hBUl9GT1JXQVJEX1NMQVNILFxuICBDSEFSX0xPV0VSQ0FTRV9BLFxuICBDSEFSX0xPV0VSQ0FTRV9aLFxuICBDSEFSX1VQUEVSQ0FTRV9BLFxuICBDSEFSX1VQUEVSQ0FTRV9aLFxufSBmcm9tIFwiLi9fY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGg6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShwYXRoKX1gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9zaXhQYXRoU2VwYXJhdG9yKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoU2VwYXJhdG9yKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNQb3NpeFBhdGhTZXBhcmF0b3IoY29kZSkgfHwgY29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93c0RldmljZVJvb3QoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gQ0hBUl9MT1dFUkNBU0VfQSAmJiBjb2RlIDw9IENIQVJfTE9XRVJDQVNFX1opIHx8XG4gICAgKGNvZGUgPj0gQ0hBUl9VUFBFUkNBU0VfQSAmJiBjb2RlIDw9IENIQVJfVVBQRVJDQVNFX1opXG4gICk7XG59XG5cbi8vIFJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCB3aXRoIGRpcmVjdG9yeSBuYW1lc1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhcbiAgcGF0aDogc3RyaW5nLFxuICBhbGxvd0Fib3ZlUm9vdDogYm9vbGVhbixcbiAgc2VwYXJhdG9yOiBzdHJpbmcsXG4gIGlzUGF0aFNlcGFyYXRvcjogKGNvZGU6IG51bWJlcikgPT4gYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIGxldCByZXMgPSBcIlwiO1xuICBsZXQgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICBsZXQgbGFzdFNsYXNoID0gLTE7XG4gIGxldCBkb3RzID0gMDtcbiAgbGV0IGNvZGU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhdGgubGVuZ3RoOyBpIDw9IGxlbjsgKytpKSB7XG4gICAgaWYgKGkgPCBsZW4pIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUhKSkgYnJlYWs7XG4gICAgZWxzZSBjb2RlID0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuXG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlISkpIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIHtcbiAgICAgICAgLy8gTk9PUFxuICAgICAgfSBlbHNlIGlmIChsYXN0U2xhc2ggIT09IGkgLSAxICYmIGRvdHMgPT09IDIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcy5sZW5ndGggPCAyIHx8XG4gICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHxcbiAgICAgICAgICByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMSkgIT09IENIQVJfRE9UIHx8XG4gICAgICAgICAgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDIpICE9PSBDSEFSX0RPVFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHJlcyA9IFwiXCI7XG4gICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCk7XG4gICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA9PT0gMiB8fCByZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkgcmVzICs9IGAke3NlcGFyYXRvcn0uLmA7XG4gICAgICAgICAgZWxzZSByZXMgPSBcIi4uXCI7XG4gICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHJlcyArPSBzZXBhcmF0b3IgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlIHJlcyA9IHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaSk7XG4gICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaSAtIGxhc3RTbGFzaCAtIDE7XG4gICAgICB9XG4gICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgZG90cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSBDSEFSX0RPVCAmJiBkb3RzICE9PSAtMSkge1xuICAgICAgKytkb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZm9ybWF0KFxuICBzZXA6IHN0cmluZyxcbiAgcGF0aE9iamVjdDogRm9ybWF0SW5wdXRQYXRoT2JqZWN0LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7XG4gIGNvbnN0IGJhc2U6IHN0cmluZyA9IHBhdGhPYmplY3QuYmFzZSB8fFxuICAgIChwYXRoT2JqZWN0Lm5hbWUgfHwgXCJcIikgKyAocGF0aE9iamVjdC5leHQgfHwgXCJcIik7XG4gIGlmICghZGlyKSByZXR1cm4gYmFzZTtcbiAgaWYgKGRpciA9PT0gcGF0aE9iamVjdC5yb290KSByZXR1cm4gZGlyICsgYmFzZTtcbiAgcmV0dXJuIGRpciArIHNlcCArIGJhc2U7XG59XG5cbmNvbnN0IFdISVRFU1BBQ0VfRU5DT0RJTkdTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcIlxcdTAwMDlcIjogXCIlMDlcIixcbiAgXCJcXHUwMDBBXCI6IFwiJTBBXCIsXG4gIFwiXFx1MDAwQlwiOiBcIiUwQlwiLFxuICBcIlxcdTAwMENcIjogXCIlMENcIixcbiAgXCJcXHUwMDBEXCI6IFwiJTBEXCIsXG4gIFwiXFx1MDAyMFwiOiBcIiUyMFwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVdoaXRlc3BhY2Uoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2VBbGwoL1tcXHNdL2csIChjKSA9PiB7XG4gICAgcmV0dXJuIFdISVRFU1BBQ0VfRU5DT0RJTkdTW2NdID8/IGM7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUdyQyxTQUNFLG1CQUFtQixFQUNuQixRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixRQUNYLGtCQUFrQjtBQUV6QixPQUFPLFNBQVMsV0FBVyxJQUFZO0VBQ3JDLElBQUksT0FBTyxTQUFTLFVBQVU7SUFDNUIsTUFBTSxJQUFJLFVBQ1IsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLFNBQVMsQ0FBQyxPQUFPO0VBRTdEO0FBQ0Y7QUFFQSxPQUFPLFNBQVMscUJBQXFCLElBQVk7RUFDL0MsT0FBTyxTQUFTO0FBQ2xCO0FBRUEsT0FBTyxTQUFTLGdCQUFnQixJQUFZO0VBQzFDLE9BQU8scUJBQXFCLFNBQVMsU0FBUztBQUNoRDtBQUVBLE9BQU8sU0FBUyxvQkFBb0IsSUFBWTtFQUM5QyxPQUNFLEFB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
+// denoCacheMetadata=11412284728440055182,4202569615071368919 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d2a67f3ca20f6cf16e975c3cc103aa7a0cf7bd0f349334c452d3fb21d3a7e901.js b/vendor/gen/https/deno.land/d2a67f3ca20f6cf16e975c3cc103aa7a0cf7bd0f349334c452d3fb21d3a7e901.js
new file mode 100644
index 0000000..929d50d
--- /dev/null
+++ b/vendor/gen/https/deno.land/d2a67f3ca20f6cf16e975c3cc103aa7a0cf7bd0f349334c452d3fb21d3a7e901.js
@@ -0,0 +1,188 @@
+import { FileType } from "../types/file.ts";
+/** Generates bash completions script. */ export class BashCompletionsGenerator {
+ cmd;
+ /** Generates bash completions script for given command. */ static generate(cmd) {
+ return new BashCompletionsGenerator(cmd).generate();
+ }
+ constructor(cmd){
+ this.cmd = cmd;
+ }
+ /** Generates bash completions code. */ generate() {
+ const path = this.cmd.getPath();
+ const version = this.cmd.getVersion() ? ` v${this.cmd.getVersion()}` : "";
+ return `#!/usr/bin/env bash
+# bash completion support for ${path}${version}
+
+_${replaceSpecialChars(path)}() {
+ local word cur prev listFiles
+ local -a opts
+ COMPREPLY=()
+ cur="\${COMP_WORDS[COMP_CWORD]}"
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
+ cmd="_"
+ opts=()
+ listFiles=0
+
+ _${replaceSpecialChars(this.cmd.getName())}_complete() {
+ local action="$1"; shift
+ mapfile -t values < <( ${this.cmd.getName()} completions complete "\${action}" "\${@}" )
+ for i in "\${values[@]}"; do
+ opts+=("$i")
+ done
+ }
+
+ _${replaceSpecialChars(this.cmd.getName())}_expand() {
+ [ "$cur" != "\${cur%\\\\}" ] && cur="$cur\\\\"
+
+ # expand ~username type directory specifications
+ if [[ "$cur" == \\~*/* ]]; then
+ # shellcheck disable=SC2086
+ eval cur=$cur
+
+ elif [[ "$cur" == \\~* ]]; then
+ cur=\${cur#\\~}
+ # shellcheck disable=SC2086,SC2207
+ COMPREPLY=( $( compgen -P '~' -u $cur ) )
+ return \${#COMPREPLY[@]}
+ fi
+ }
+
+ # shellcheck disable=SC2120
+ _${replaceSpecialChars(this.cmd.getName())}_file_dir() {
+ listFiles=1
+ local IFS=$'\\t\\n' xspec #glob
+ _${replaceSpecialChars(this.cmd.getName())}_expand || return 0
+
+ if [ "\${1:-}" = -d ]; then
+ # shellcheck disable=SC2206,SC2207,SC2086
+ COMPREPLY=( \${COMPREPLY[@]:-} $( compgen -d -- $cur ) )
+ #eval "$glob" # restore glob setting.
+ return 0
+ fi
+
+ xspec=\${1:+"!*.$1"} # set only if glob passed in as $1
+ # shellcheck disable=SC2206,SC2207
+ COMPREPLY=( \${COMPREPLY[@]:-} $( compgen -f -X "$xspec" -- "$cur" ) \
+ $( compgen -d -- "$cur" ) )
+ }
+
+ ${this.generateCompletions(this.cmd).trim()}
+
+ for word in "\${COMP_WORDS[@]}"; do
+ case "\${word}" in
+ -*) ;;
+ *)
+ cmd_tmp="\${cmd}_\${word//[^[:alnum:]]/_}"
+ if type "\${cmd_tmp}" &>/dev/null; then
+ cmd="\${cmd_tmp}"
+ fi
+ esac
+ done
+
+ \${cmd}
+
+ if [[ listFiles -eq 1 ]]; then
+ return 0
+ fi
+
+ if [[ \${#opts[@]} -eq 0 ]]; then
+ # shellcheck disable=SC2207
+ COMPREPLY=($(compgen -f "\${cur}"))
+ return 0
+ fi
+
+ local values
+ values="$( printf "\\n%s" "\${opts[@]}" )"
+ local IFS=$'\\n'
+ # shellcheck disable=SC2207
+ local result=($(compgen -W "\${values[@]}" -- "\${cur}"))
+ if [[ \${#result[@]} -eq 0 ]]; then
+ # shellcheck disable=SC2207
+ COMPREPLY=($(compgen -f "\${cur}"))
+ else
+ # shellcheck disable=SC2207
+ COMPREPLY=($(printf '%q\\n' "\${result[@]}"))
+ fi
+
+ return 0
+}
+
+complete -F _${replaceSpecialChars(path)} -o bashdefault -o default ${path}`;
+ }
+ /** Generates bash completions method for given command and child commands. */ generateCompletions(command, path = "", index = 1) {
+ path = (path ? path + " " : "") + command.getName();
+ const commandCompletions = this.generateCommandCompletions(command, path, index);
+ const childCommandCompletions = command.getCommands(false).filter((subCommand)=>subCommand !== command).map((subCommand)=>this.generateCompletions(subCommand, path, index + 1)).join("");
+ return `${commandCompletions}
+
+${childCommandCompletions}`;
+ }
+ generateCommandCompletions(command, path, index) {
+ const flags = this.getFlags(command);
+ const childCommandNames = command.getCommands(false).map((childCommand)=>childCommand.getName());
+ const completionsPath = ~path.indexOf(" ") ? " " + path.split(" ").slice(1).join(" ") : "";
+ const optionArguments = this.generateOptionArguments(command, completionsPath);
+ const completionsCmd = this.generateCommandCompletionsCommand(command, completionsPath);
+ return ` __${replaceSpecialChars(path)}() {
+ opts=(${[
+ ...flags,
+ ...childCommandNames
+ ].join(" ")})
+ ${completionsCmd}
+ if [[ \${cur} == -* || \${COMP_CWORD} -eq ${index} ]] ; then
+ return 0
+ fi
+ ${optionArguments}
+ }`;
+ }
+ getFlags(command) {
+ return command.getOptions(false).map((option)=>option.flags).flat();
+ }
+ generateOptionArguments(command, completionsPath) {
+ let opts = "";
+ const options = command.getOptions(false);
+ if (options.length) {
+ opts += 'case "${prev}" in';
+ for (const option of options){
+ const flags = option.flags.map((flag)=>flag.trim()).join("|");
+ const completionsCmd = this.generateOptionCompletionsCommand(command, option.args, completionsPath, {
+ standalone: option.standalone
+ });
+ opts += `\n ${flags}) ${completionsCmd} ;;`;
+ }
+ opts += "\n esac";
+ }
+ return opts;
+ }
+ generateCommandCompletionsCommand(command, path) {
+ const args = command.getArguments();
+ if (args.length) {
+ const type = command.getType(args[0].type);
+ if (type && type.handler instanceof FileType) {
+ return `_${replaceSpecialChars(this.cmd.getName())}_file_dir`;
+ }
+ // @TODO: add support for multiple arguments
+ return `_${replaceSpecialChars(this.cmd.getName())}_complete ${args[0].action}${path}`;
+ }
+ return "";
+ }
+ generateOptionCompletionsCommand(command, args, path, opts) {
+ if (args.length) {
+ const type = command.getType(args[0].type);
+ if (type && type.handler instanceof FileType) {
+ return `opts=(); _${replaceSpecialChars(this.cmd.getName())}_file_dir`;
+ }
+ // @TODO: add support for multiple arguments
+ return `opts=(); _${replaceSpecialChars(this.cmd.getName())}_complete ${args[0].action}${path}`;
+ }
+ if (opts?.standalone) {
+ return "opts=()";
+ }
+ return "";
+ }
+}
+function replaceSpecialChars(str) {
+ return str.replace(/[^a-zA-Z0-9]/g, "_");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC9jb21wbGV0aW9ucy9fYmFzaF9jb21wbGV0aW9uc19nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmQudHNcIjtcbmltcG9ydCB0eXBlIHsgQXJndW1lbnQgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSBcIi4uL3R5cGVzL2ZpbGUudHNcIjtcblxuLyoqIEdlbmVyYXRlcyBiYXNoIGNvbXBsZXRpb25zIHNjcmlwdC4gKi9cbmV4cG9ydCBjbGFzcyBCYXNoQ29tcGxldGlvbnNHZW5lcmF0b3Ige1xuICAvKiogR2VuZXJhdGVzIGJhc2ggY29tcGxldGlvbnMgc2NyaXB0IGZvciBnaXZlbiBjb21tYW5kLiAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlKGNtZDogQ29tbWFuZCkge1xuICAgIHJldHVybiBuZXcgQmFzaENvbXBsZXRpb25zR2VuZXJhdG9yKGNtZCkuZ2VuZXJhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvdGVjdGVkIGNtZDogQ29tbWFuZCkge31cblxuICAvKiogR2VuZXJhdGVzIGJhc2ggY29tcGxldGlvbnMgY29kZS4gKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmNtZC5nZXRQYXRoKCk7XG4gICAgY29uc3QgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jbWQuZ2V0VmVyc2lvbigpXG4gICAgICA/IGAgdiR7dGhpcy5jbWQuZ2V0VmVyc2lvbigpfWBcbiAgICAgIDogXCJcIjtcblxuICAgIHJldHVybiBgIyEvdXNyL2Jpbi9lbnYgYmFzaFxuIyBiYXNoIGNvbXBsZXRpb24gc3VwcG9ydCBmb3IgJHtwYXRofSR7dmVyc2lvbn1cblxuXyR7cmVwbGFjZVNwZWNpYWxDaGFycyhwYXRoKX0oKSB7XG4gIGxvY2FsIHdvcmQgY3VyIHByZXYgbGlzdEZpbGVzXG4gIGxvY2FsIC1hIG9wdHNcbiAgQ09NUFJFUExZPSgpXG4gIGN1cj1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gIHByZXY9XCJcXCR7Q09NUF9XT1JEU1tDT01QX0NXT1JELTFdfVwiXG4gIGNtZD1cIl9cIlxuICBvcHRzPSgpXG4gIGxpc3RGaWxlcz0wXG5cbiAgXyR7cmVwbGFjZVNwZWNpYWxDaGFycyh0aGlzLmNtZC5nZXROYW1lKCkpfV9jb21wbGV0ZSgpIHtcbiAgICBsb2NhbCBhY3Rpb249XCIkMVwiOyBzaGlmdFxuICAgIG1hcGZpbGUgLXQgdmFsdWVzIDwgPCggJHt0aGlzLmNtZC5nZXROYW1lKCl9IGNvbXBsZXRpb25zIGNvbXBsZXRlIFwiXFwke2FjdGlvbn1cIiBcIlxcJHtAfVwiIClcbiAgICBmb3IgaSBpbiBcIlxcJHt2YWx1ZXNbQF19XCI7IGRvXG4gICAgICBvcHRzKz0oXCIkaVwiKVxuICAgIGRvbmVcbiAgfVxuXG4gIF8ke3JlcGxhY2VTcGVjaWFsQ2hhcnModGhpcy5jbWQuZ2V0TmFtZSgpKX1fZXhwYW5kKCkge1xuICAgIFsgXCIkY3VyXCIgIT0gXCJcXCR7Y3VyJVxcXFxcXFxcfVwiIF0gJiYgY3VyPVwiJGN1clxcXFxcXFxcXCJcbiAgXG4gICAgIyBleHBhbmQgfnVzZXJuYW1lIHR5cGUgZGlyZWN0b3J5IHNwZWNpZmljYXRpb25zXG4gICAgaWYgW1sgXCIkY3VyXCIgPT0gXFxcXH4qLyogXV07IHRoZW5cbiAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA4NlxuICAgICAgZXZhbCBjdXI9JGN1clxuICAgICAgXG4gICAgZWxpZiBbWyBcIiRjdXJcIiA9PSBcXFxcfiogXV07IHRoZW5cbiAgICAgIGN1cj1cXCR7Y3VyI1xcXFx+fVxuICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2LFNDMjIwN1xuICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtUCAnficgLXUgJGN1ciApIClcbiAgICAgIHJldHVybiBcXCR7I0NPTVBSRVBMWVtAXX1cbiAgICBmaVxuICB9XG5cbiAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTIwXG4gIF8ke3JlcGxhY2VTcGVjaWFsQ2hhcnModGhpcy5jbWQuZ2V0TmFtZSgpKX1fZmlsZV9kaXIoKSB7XG4gICAgbGlzdEZpbGVzPTFcbiAgICBsb2NhbCBJRlM9JCdcXFxcdFxcXFxuJyB4c3BlYyAjZ2xvYlxuICAgIF8ke3JlcGxhY2VTcGVjaWFsQ2hhcnModGhpcy5jbWQuZ2V0TmFtZSgpKX1fZXhwYW5kIHx8IHJldHVybiAwXG4gIFxuICAgIGlmIFsgXCJcXCR7MTotfVwiID0gLWQgXTsgdGhlblxuICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMjA2LFNDMjIwNyxTQzIwODZcbiAgICAgIENPTVBSRVBMWT0oIFxcJHtDT01QUkVQTFlbQF06LX0gJCggY29tcGdlbiAtZCAtLSAkY3VyICkgKVxuICAgICAgI2V2YWwgXCIkZ2xvYlwiICAgICMgcmVzdG9yZSBnbG9iIHNldHRpbmcuXG4gICAgICByZXR1cm4gMFxuICAgIGZpXG4gIFxuICAgIHhzcGVjPVxcJHsxOitcIiEqLiQxXCJ9XHQjIHNldCBvbmx5IGlmIGdsb2IgcGFzc2VkIGluIGFzICQxXG4gICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMjA2LFNDMjIwN1xuICAgIENPTVBSRVBMWT0oIFxcJHtDT01QUkVQTFlbQF06LX0gJCggY29tcGdlbiAtZiAtWCBcIiR4c3BlY1wiIC0tIFwiJGN1clwiICkgXFxcbiAgICAgICAgICAkKCBjb21wZ2VuIC1kIC0tIFwiJGN1clwiICkgKVxuICB9XG5cbiAgJHt0aGlzLmdlbmVyYXRlQ29tcGxldGlvbnModGhpcy5jbWQpLnRyaW0oKX1cblxuICBmb3Igd29yZCBpbiBcIlxcJHtDT01QX1dPUkRTW0BdfVwiOyBkb1xuICAgIGNhc2UgXCJcXCR7d29yZH1cIiBpblxuICAgICAgLSopIDs7XG4gICAgICAqKVxuICAgICAgICBjbWRfdG1wPVwiXFwke2NtZH1fXFwke3dvcmQvL1teWzphbG51bTpdXS9ffVwiXG4gICAgICAgIGlmIHR5cGUgXCJcXCR7Y21kX3RtcH1cIiAmPi9kZXYvbnVsbDsgdGhlblxuICAgICAgICAgIGNtZD1cIlxcJHtjbWRfdG1wfVwiXG4gICAgICAgIGZpXG4gICAgZXNhY1xuICBkb25lXG5cbiAgXFwke2NtZH1cblxuICBpZiBbWyBsaXN0RmlsZXMgLWVxIDEgXV07IHRoZW5cbiAgICByZXR1cm4gMFxuICBmaVxuXG4gIGlmIFtbIFxcJHsjb3B0c1tAXX0gLWVxIDAgXV07IHRoZW5cbiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIyMDdcbiAgICBDT01QUkVQTFk9KCQoY29tcGdlbiAtZiBcIlxcJHtjdXJ9XCIpKVxuICAgIHJldHVybiAwXG4gIGZpXG5cbiAgbG9jYWwgdmFsdWVzXG4gIHZhbHVlcz1cIiQoIHByaW50ZiBcIlxcXFxuJXNcIiBcIlxcJHtvcHRzW0BdfVwiIClcIlxuICBsb2NhbCBJRlM9JCdcXFxcbidcbiAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMjA3XG4gIGxvY2FsIHJlc3VsdD0oJChjb21wZ2VuIC1XIFwiXFwke3ZhbHVlc1tAXX1cIiAtLSBcIlxcJHtjdXJ9XCIpKVxuICBpZiBbWyBcXCR7I3Jlc3VsdFtAXX0gLWVxIDAgXV07IHRoZW5cbiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIyMDdcbiAgICBDT01QUkVQTFk9KCQoY29tcGdlbiAtZiBcIlxcJHtjdXJ9XCIpKVxuICBlbHNlXG4gICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMjA3XG4gICAgQ09NUFJFUExZPSgkKHByaW50ZiAnJXFcXFxcbicgXCJcXCR7cmVzdWx0W0BdfVwiKSlcbiAgZmlcblxuICByZXR1cm4gMFxufVxuXG5jb21wbGV0ZSAtRiBfJHtyZXBsYWNlU3BlY2lhbENoYXJzKHBhdGgpfSAtbyBiYXNoZGVmYXVsdCAtbyBkZWZhdWx0ICR7cGF0aH1gO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlcyBiYXNoIGNvbXBsZXRpb25zIG1ldGhvZCBmb3IgZ2l2ZW4gY29tbWFuZCBhbmQgY2hpbGQgY29tbWFuZHMuICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDb21wbGV0aW9ucyhjb21tYW5kOiBDb21tYW5kLCBwYXRoID0gXCJcIiwgaW5kZXggPSAxKTogc3RyaW5nIHtcbiAgICBwYXRoID0gKHBhdGggPyBwYXRoICsgXCIgXCIgOiBcIlwiKSArIGNvbW1hbmQuZ2V0TmFtZSgpO1xuICAgIGNvbnN0IGNvbW1hbmRDb21wbGV0aW9ucyA9IHRoaXMuZ2VuZXJhdGVDb21tYW5kQ29tcGxldGlvbnMoXG4gICAgICBjb21tYW5kLFxuICAgICAgcGF0aCxcbiAgICAgIGluZGV4LFxuICAgICk7XG4gICAgY29uc3QgY2hpbGRDb21tYW5kQ29tcGxldGlvbnM6IHN0cmluZyA9IGNvbW1hbmQuZ2V0Q29tbWFuZHMoZmFsc2UpXG4gICAgICAuZmlsdGVyKChzdWJDb21tYW5kOiBDb21tYW5kKSA9PiBzdWJDb21tYW5kICE9PSBjb21tYW5kKVxuICAgICAgLm1hcCgoc3ViQ29tbWFuZDogQ29tbWFuZCkgPT5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNvbXBsZXRpb25zKHN1YkNvbW1hbmQsIHBhdGgsIGluZGV4ICsgMSlcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgcmV0dXJuIGAke2NvbW1hbmRDb21wbGV0aW9uc31cblxuJHtjaGlsZENvbW1hbmRDb21wbGV0aW9uc31gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbW1hbmRDb21wbGV0aW9ucyhcbiAgICBjb21tYW5kOiBDb21tYW5kLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGZsYWdzOiBzdHJpbmdbXSA9IHRoaXMuZ2V0RmxhZ3MoY29tbWFuZCk7XG5cbiAgICBjb25zdCBjaGlsZENvbW1hbmROYW1lczogc3RyaW5nW10gPSBjb21tYW5kLmdldENvbW1hbmRzKGZhbHNlKVxuICAgICAgLm1hcCgoY2hpbGRDb21tYW5kOiBDb21tYW5kKSA9PiBjaGlsZENvbW1hbmQuZ2V0TmFtZSgpKTtcblxuICAgIGNvbnN0IGNvbXBsZXRpb25zUGF0aDogc3RyaW5nID0gfnBhdGguaW5kZXhPZihcIiBcIilcbiAgICAgID8gXCIgXCIgKyBwYXRoLnNwbGl0KFwiIFwiKS5zbGljZSgxKS5qb2luKFwiIFwiKVxuICAgICAgOiBcIlwiO1xuXG4gICAgY29uc3Qgb3B0aW9uQXJndW1lbnRzID0gdGhpcy5nZW5lcmF0ZU9wdGlvbkFyZ3VtZW50cyhcbiAgICAgIGNvbW1hbmQsXG4gICAgICBjb21wbGV0aW9uc1BhdGgsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbXBsZXRpb25zQ21kOiBzdHJpbmcgPSB0aGlzLmdlbmVyYXRlQ29tbWFuZENvbXBsZXRpb25zQ29tbWFuZChcbiAgICAgIGNvbW1hbmQsXG4gICAgICBjb21wbGV0aW9uc1BhdGgsXG4gICAgKTtcblxuICAgIHJldHVybiBgICBfXyR7cmVwbGFjZVNwZWNpYWxDaGFycyhwYXRoKX0oKSB7XG4gICAgb3B0cz0oJHtbLi4uZmxhZ3MsIC4uLmNoaWxkQ29tbWFuZE5hbWVzXS5qb2luKFwiIFwiKX0pXG4gICAgJHtjb21wbGV0aW9uc0NtZH1cbiAgICBpZiBbWyBcXCR7Y3VyfSA9PSAtKiB8fCBcXCR7Q09NUF9DV09SRH0gLWVxICR7aW5kZXh9IF1dIDsgdGhlblxuICAgICAgcmV0dXJuIDBcbiAgICBmaVxuICAgICR7b3B0aW9uQXJndW1lbnRzfVxuICB9YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmxhZ3MoY29tbWFuZDogQ29tbWFuZCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gY29tbWFuZC5nZXRPcHRpb25zKGZhbHNlKVxuICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uZmxhZ3MpXG4gICAgICAuZmxhdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZU9wdGlvbkFyZ3VtZW50cyhcbiAgICBjb21tYW5kOiBDb21tYW5kLFxuICAgIGNvbXBsZXRpb25zUGF0aDogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGxldCBvcHRzID0gXCJcIjtcbiAgICBjb25zdCBvcHRpb25zID0gY29tbWFuZC5nZXRPcHRpb25zKGZhbHNlKTtcbiAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG9wdHMgKz0gJ2Nhc2UgXCIke3ByZXZ9XCIgaW4nO1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBjb25zdCBmbGFnczogc3RyaW5nID0gb3B0aW9uLmZsYWdzXG4gICAgICAgICAgLm1hcCgoZmxhZzogc3RyaW5nKSA9PiBmbGFnLnRyaW0oKSlcbiAgICAgICAgICAuam9pbihcInxcIik7XG5cbiAgICAgICAgY29uc3QgY29tcGxldGlvbnNDbWQ6IHN0cmluZyA9IHRoaXMuZ2VuZXJhdGVPcHRpb25Db21wbGV0aW9uc0NvbW1hbmQoXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICBvcHRpb24uYXJncyxcbiAgICAgICAgICBjb21wbGV0aW9uc1BhdGgsXG4gICAgICAgICAgeyBzdGFuZGFsb25lOiBvcHRpb24uc3RhbmRhbG9uZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIG9wdHMgKz0gYFxcbiAgICAgICR7ZmxhZ3N9KSAke2NvbXBsZXRpb25zQ21kfSA7O2A7XG4gICAgICB9XG4gICAgICBvcHRzICs9IFwiXFxuICAgIGVzYWNcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0cztcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVDb21tYW5kQ29tcGxldGlvbnNDb21tYW5kKFxuICAgIGNvbW1hbmQ6IENvbW1hbmQsXG4gICAgcGF0aDogc3RyaW5nLFxuICApIHtcbiAgICBjb25zdCBhcmdzOiBBcmd1bWVudFtdID0gY29tbWFuZC5nZXRBcmd1bWVudHMoKTtcbiAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBjb21tYW5kLmdldFR5cGUoYXJnc1swXS50eXBlKTtcbiAgICAgIGlmICh0eXBlICYmIHR5cGUuaGFuZGxlciBpbnN0YW5jZW9mIEZpbGVUeXBlKSB7XG4gICAgICAgIHJldHVybiBgXyR7cmVwbGFjZVNwZWNpYWxDaGFycyh0aGlzLmNtZC5nZXROYW1lKCkpfV9maWxlX2RpcmA7XG4gICAgICB9XG4gICAgICAvLyBAVE9ETzogYWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGFyZ3VtZW50c1xuICAgICAgcmV0dXJuIGBfJHtyZXBsYWNlU3BlY2lhbENoYXJzKHRoaXMuY21kLmdldE5hbWUoKSl9X2NvbXBsZXRlICR7XG4gICAgICAgIGFyZ3NbMF0uYWN0aW9uXG4gICAgICB9JHtwYXRofWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlT3B0aW9uQ29tcGxldGlvbnNDb21tYW5kKFxuICAgIGNvbW1hbmQ6IENvbW1hbmQsXG4gICAgYXJnczogQXJndW1lbnRbXSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHsgc3RhbmRhbG9uZT86IGJvb2xlYW4gfSxcbiAgKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0eXBlID0gY29tbWFuZC5nZXRUeXBlKGFyZ3NbMF0udHlwZSk7XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmhhbmRsZXIgaW5zdGFuY2VvZiBGaWxlVHlwZSkge1xuICAgICAgICByZXR1cm4gYG9wdHM9KCk7IF8ke3JlcGxhY2VTcGVjaWFsQ2hhcnModGhpcy5jbWQuZ2V0TmFtZSgpKX1fZmlsZV9kaXJgO1xuICAgICAgfVxuICAgICAgLy8gQFRPRE86IGFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBhcmd1bWVudHNcbiAgICAgIHJldHVybiBgb3B0cz0oKTsgXyR7cmVwbGFjZVNwZWNpYWxDaGFycyh0aGlzLmNtZC5nZXROYW1lKCkpfV9jb21wbGV0ZSAke1xuICAgICAgICBhcmdzWzBdLmFjdGlvblxuICAgICAgfSR7cGF0aH1gO1xuICAgIH1cblxuICAgIGlmIChvcHRzPy5zdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gXCJvcHRzPSgpXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxDaGFycyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiX1wiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxTQUFTLFFBQVEsUUFBUSxtQkFBbUI7QUFFNUMsdUNBQXVDLEdBQ3ZDLE9BQU8sTUFBTTs7RUFDWCx5REFBeUQsR0FDekQsT0FBYyxTQUFTLEdBQVksRUFBRTtJQUNuQyxPQUFPLElBQUkseUJBQXlCLEtBQUssUUFBUTtFQUNuRDtFQUVBLFlBQW9CLEFBQVUsR0FBWSxDQUFFO1NBQWQsTUFBQTtFQUFlO0VBRTdDLHFDQUFxQyxHQUNyQyxBQUFRLFdBQW1CO0lBQ3pCLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDN0IsTUFBTSxVQUE4QixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FDbkQsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FDNUI7SUFFSixPQUFPLENBQUM7OEJBQ2tCLEVBQUUsT0FBTyxRQUFROztDQUU5QyxFQUFFLG9CQUFvQixNQUFNOzs7Ozs7Ozs7O0dBVTFCLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJOzsyQkFFbEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRzs7Ozs7O0dBTTdDLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCMUMsRUFBRSxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUk7OztLQUd4QyxFQUFFLG9CQUFvQixJ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
+// denoCacheMetadata=230095213699864418,14683930732332696699 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d51312a103219438e4b7584cb897e47f0938ec37f40c6dab8e55b3dd3262275d.js b/vendor/gen/https/deno.land/d51312a103219438e4b7584cb897e47f0938ec37f40c6dab8e55b3dd3262275d.js
new file mode 100644
index 0000000..47c734a
--- /dev/null
+++ b/vendor/gen/https/deno.land/d51312a103219438e4b7584cb897e47f0938ec37f40c6dab8e55b3dd3262275d.js
@@ -0,0 +1,3 @@
+export const specifier = "https://cdn.jsdelivr.net/gh/lumeland/bar@0.1.4/lume-bar.js";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9kZWJ1Z2Jhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7XG4gIENvbGxlY3Rpb24sXG4gIEl0ZW0sXG59IGZyb20gXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvbHVtZWxhbmQvYmFyQDAuMS40L3R5cGVzLnRzXCI7XG5leHBvcnQgY29uc3Qgc3BlY2lmaWVyID1cbiAgXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvbHVtZWxhbmQvYmFyQDAuMS40L2x1bWUtYmFyLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxNQUFNLFlBQ1gsNkRBQTZEIn0=
+// denoCacheMetadata=5935628692306340201,1883460399652556543 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d6813b59e015f107c0a8367217770b111bf9f55ef06bdf428a94e413a42c5d64.js b/vendor/gen/https/deno.land/d6813b59e015f107c0a8367217770b111bf9f55ef06bdf428a94e413a42c5d64.js
new file mode 100644
index 0000000..5b23ebd
--- /dev/null
+++ b/vendor/gen/https/deno.land/d6813b59e015f107c0a8367217770b111bf9f55ef06bdf428a94e413a42c5d64.js
@@ -0,0 +1,11 @@
+export function insertContent(content, newContent, placeholder) {
+ if (content) {
+ if (placeholder && content.includes(placeholder)) {
+ return content.replace(placeholder, newContent);
+ }
+ return `${content}\n${newContent}`;
+ }
+ return newContent;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9wYWdlX2NvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGluc2VydENvbnRlbnQoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgbmV3Q29udGVudDogc3RyaW5nLFxuICBwbGFjZWhvbGRlcj86IHN0cmluZyxcbikge1xuICBpZiAoY29udGVudCkge1xuICAgIGlmIChwbGFjZWhvbGRlciAmJiBjb250ZW50LmluY2x1ZGVzKHBsYWNlaG9sZGVyKSkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIG5ld0NvbnRlbnQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYCR7Y29udGVudH1cXG4ke25ld0NvbnRlbnR9YDtcbiAgfVxuXG4gIHJldHVybiBuZXdDb250ZW50O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxjQUNkLE9BQWUsRUFDZixVQUFrQixFQUNsQixXQUFvQjtFQUVwQixJQUFJLFNBQVM7SUFDWCxJQUFJLGVBQWUsUUFBUSxRQUFRLENBQUMsY0FBYztNQUNoRCxPQUFPLFFBQVEsT0FBTyxDQUNwQixhQUNBO0lBRUo7SUFDQSxPQUFPLEdBQUcsUUFBUSxFQUFFLEVBQUUsWUFBWTtFQUNwQztFQUVBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=9640916408444850329,17591206303582923743 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d83074ffc62bbad072e50e64df7a17cc4c4ec4206af1dbdced23b7c68bb89b82.js b/vendor/gen/https/deno.land/d83074ffc62bbad072e50e64df7a17cc4c4ec4206af1dbdced23b7c68bb89b82.js
new file mode 100644
index 0000000..757de56
--- /dev/null
+++ b/vendor/gen/https/deno.land/d83074ffc62bbad072e50e64df7a17cc4c4ec4206af1dbdced23b7c68bb89b82.js
@@ -0,0 +1,21 @@
+import { parse } from "../../deps/jsonc.ts";
+import { isPlainObject } from "../utils/object.ts";
+import { read } from "../utils/read.ts";
+/** Load and parse a JSON / JSONC file */ export default async function json(path) {
+ const text = await read(path, false);
+ if (!text.trim()) {
+ return {};
+ }
+ const content = path.endsWith(".jsonc") ? parse(text) : JSON.parse(text);
+ if (!content) {
+ return {};
+ }
+ if (isPlainObject(content)) {
+ return content;
+ }
+ return {
+ content
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9sb2FkZXJzL2pzb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi4vLi4vZGVwcy9qc29uYy50c1wiO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gXCIuLi91dGlscy9vYmplY3QudHNcIjtcbmltcG9ydCB7IHJlYWQgfSBmcm9tIFwiLi4vdXRpbHMvcmVhZC50c1wiO1xuXG5pbXBvcnQgdHlwZSB7IFJhd0RhdGEgfSBmcm9tIFwiLi4vZmlsZS50c1wiO1xuXG4vKiogTG9hZCBhbmQgcGFyc2UgYSBKU09OIC8gSlNPTkMgZmlsZSAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24ganNvbihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJhd0RhdGE+IHtcbiAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWQocGF0aCwgZmFsc2UpO1xuXG4gIGlmICghdGV4dC50cmltKCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gcGF0aC5lbmRzV2l0aChcIi5qc29uY1wiKSA/IHBhcnNlKHRleHQpIDogSlNPTi5wYXJzZSh0ZXh0KTtcblxuICBpZiAoIWNvbnRlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdChjb250ZW50KSkge1xuICAgIHJldHVybiBjb250ZW50IGFzIFJhd0RhdGE7XG4gIH1cblxuICByZXR1cm4geyBjb250ZW50IH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFLLFFBQVEsc0JBQXNCO0FBQzVDLFNBQVMsYUFBYSxRQUFRLHFCQUFxQjtBQUNuRCxTQUFTLElBQUksUUFBUSxtQkFBbUI7QUFJeEMsdUNBQXVDLEdBQ3ZDLGVBQWUsZUFBZSxLQUFLLElBQVk7RUFDN0MsTUFBTSxPQUFPLE1BQU0sS0FBSyxNQUFNO0VBRTlCLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSTtJQUNoQixPQUFPLENBQUM7RUFDVjtFQUVBLE1BQU0sVUFBVSxLQUFLLFFBQVEsQ0FBQyxZQUFZLE1BQU0sUUFBUSxLQUFLLEtBQUssQ0FBQztFQUVuRSxJQUFJLENBQUMsU0FBUztJQUNaLE9BQU8sQ0FBQztFQUNWO0VBRUEsSUFBSSxjQUFjLFVBQVU7SUFDMUIsT0FBTztFQUNUO0VBRUEsT0FBTztJQUFFO0VBQVE7QUFDbkIifQ==
+// denoCacheMetadata=4438634572977741856,14554790375917566062 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d89a261d566c18ca648e5048a6db5c13d40b0f4c87d46d7cbb5e356886806dce.js b/vendor/gen/https/deno.land/d89a261d566c18ca648e5048a6db5c13d40b0f4c87d46d7cbb5e356886806dce.js
new file mode 100644
index 0000000..103c4d5
--- /dev/null
+++ b/vendor/gen/https/deno.land/d89a261d566c18ca648e5048a6db5c13d40b0f4c87d46d7cbb5e356886806dce.js
@@ -0,0 +1,138 @@
+// deno-lint-ignore-file no-explicit-any ban-types
+import { tty } from "../ansi/tty.ts";
+import { GenericPrompt } from "./_generic_prompt.ts";
+export function prompt(prompts, options) {
+ return new PromptList(prompts, options).run(options?.initial);
+}
+let injected = {};
+/**
+ * Inject prompt values. Can be used for unit tests or pre selections.
+ * @param values Input values object.
+ */ export function inject(values) {
+ injected = values;
+}
+class PromptList {
+ prompts;
+ options;
+ result;
+ index;
+ names;
+ isInBeforeHook;
+ get prompt() {
+ return this.prompts[this.index];
+ }
+ constructor(prompts, options){
+ this.prompts = prompts;
+ this.options = options;
+ this.result = {};
+ this.index = -1;
+ this.isInBeforeHook = false;
+ this.names = this.prompts.map((prompt)=>prompt.name);
+ }
+ async run(name) {
+ this.index = -1;
+ this.result = {};
+ this.isInBeforeHook = false;
+ await this.next(name);
+ return this.result;
+ }
+ async next(name) {
+ if (this.updateIndex(name)) {
+ await this.runBeforeHook(async ()=>{
+ this.isInBeforeHook = false;
+ await this.runPrompt();
+ await this.runAfterHook();
+ });
+ }
+ }
+ updateIndex(name) {
+ if (name && typeof name === "string") {
+ this.index = this.names.indexOf(name);
+ if (this.index === -1) {
+ throw new Error(`Invalid prompt name: ${name}, allowed prompt names: ${this.names.join(", ")}`);
+ }
+ } else if (typeof name === "number") {
+ if (name < 0 || name > this.names.length) {
+ throw new Error(`Invalid prompt index: ${name}, prompt length: ${this.names.length}`);
+ }
+ this.index = name;
+ } else if (name === true && !this.isInBeforeHook) {
+ this.index++;
+ if (this.index < this.names.length - 1) {
+ this.index++;
+ }
+ } else {
+ this.index++;
+ }
+ this.isInBeforeHook = false;
+ if (this.index < this.names.length) {
+ return true;
+ } else if (this.index === this.names.length) {
+ return false;
+ } else {
+ throw new Error("next() called multiple times");
+ }
+ }
+ async runBeforeHook(run) {
+ this.isInBeforeHook = true;
+ const next = async (name)=>{
+ if (name || typeof name === "number") {
+ return this.next(name);
+ }
+ await run();
+ };
+ if (this.options?.before) {
+ await this.options.before(this.prompt.name, this.result, async (name)=>{
+ if (name || typeof name === "number") {
+ return this.next(name);
+ } else if (this.prompt.before) {
+ await this.prompt.before(this.result, next);
+ } else {
+ await run();
+ }
+ });
+ return;
+ } else if (this.prompt.before) {
+ await this.prompt.before(this.result, next);
+ return;
+ }
+ await run();
+ }
+ async runPrompt() {
+ const prompt = this.prompt.type;
+ if (typeof injected[this.prompt.name] !== "undefined") {
+ if (prompt.inject) {
+ prompt.inject(injected[this.prompt.name]);
+ } else {
+ GenericPrompt.inject(injected[this.prompt.name]);
+ }
+ }
+ try {
+ this.result[this.prompt.name] = await prompt.prompt({
+ cbreak: this.options?.cbreak,
+ ...this.prompt
+ });
+ } finally{
+ tty.cursorShow();
+ }
+ }
+ async runAfterHook() {
+ if (this.options?.after) {
+ await this.options.after(this.prompt.name, this.result, async (name)=>{
+ if (name) {
+ return this.next(name);
+ } else if (this.prompt.after) {
+ await this.prompt.after(this.result, (name)=>this.next(name));
+ } else {
+ await this.next();
+ }
+ });
+ } else if (this.prompt.after) {
+ await this.prompt.after(this.result, (name)=>this.next(name));
+ } else {
+ await this.next();
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L3Byb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkZW5vLWxpbnQtaWdub3JlLWZpbGUgbm8tZXhwbGljaXQtYW55IGJhbi10eXBlc1xuXG5pbXBvcnQgeyB0dHkgfSBmcm9tIFwiLi4vYW5zaS90dHkudHNcIjtcbmltcG9ydCB7XG4gIEdlbmVyaWNQcm9tcHQsXG4gIEdlbmVyaWNQcm9tcHRPcHRpb25zLFxuICBTdGF0aWNHZW5lcmljUHJvbXB0LFxufSBmcm9tIFwiLi9fZ2VuZXJpY19wcm9tcHQudHNcIjtcblxudHlwZSBOZXh0PFROYW1lIGV4dGVuZHMga2V5b2YgYW55PiA9IChcbiAgbmV4dD86IFROYW1lIHwgbnVtYmVyIHwgdHJ1ZSB8IG51bGwsXG4pID0+IFByb21pc2U8dm9pZD47XG5cbnR5cGUgUHJvbXB0T3B0aW9uczxcbiAgVE5hbWUgZXh0ZW5kcyBzdHJpbmcsXG4gIFRTdGF0aWNQcm9tcHQgZXh0ZW5kcyBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBhbnksIGFueSwgYW55PiB8IHZvaWQsXG4gIFRSZXN1bHQsXG4gIFRPcHRpb25zID0gVFN0YXRpY1Byb21wdCBleHRlbmRzIFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIGFueSwgYW55LCBhbnk+XG4gICAgPyBQYXJhbWV0ZXJzPFRTdGF0aWNQcm9tcHRbXCJwcm9tcHRcIl0+WzBdXG4gICAgOiBuZXZlcixcbj4gPSBUU3RhdGljUHJvbXB0IGV4dGVuZHMgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgYW55LCBhbnksIGFueT4gPyBcbiAgICAmIHtcbiAgICAgIG5hbWU6IFROYW1lO1xuICAgICAgdHlwZTogVFN0YXRpY1Byb21wdDtcbiAgICAgIGJlZm9yZT86IChcbiAgICAgICAgb3B0czogVFJlc3VsdCxcbiAgICAgICAgbmV4dDogTmV4dDxFeGNsdWRlPGtleW9mIFRSZXN1bHQsIHN5bWJvbD4+LFxuICAgICAgKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICAgIGFmdGVyPzogKFxuICAgICAgICBvcHRzOiBUUmVzdWx0LFxuICAgICAgICBuZXh0OiBOZXh0PEV4Y2x1ZGU8a2V5b2YgVFJlc3VsdCwgc3ltYm9sPj4sXG4gICAgICApID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIH1cbiAgICAvLyBleGNsdWRlIG5vbmUgb3B0aW9ucyBwYXJhbWV0ZXJcbiAgICAmIChUT3B0aW9ucyBleHRlbmRzIEdlbmVyaWNQcm9tcHRPcHRpb25zPGFueSwgYW55PiA/IFRPcHRpb25zIDoge30pXG4gIDogbmV2ZXI7XG5cbnR5cGUgUHJvbXB0UmVzdWx0PFxuICBOIGV4dGVuZHMgc3RyaW5nLFxuICBHIGV4dGVuZHMgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgYW55LCBhbnksIGFueT4gfCB2b2lkLFxuPiA9IEcgZXh0ZW5kcyBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBhbnksIGFueSwgYW55PiA/IHtcbiAgICBbSyBpbiBOXT86IEF3YWl0ZWQ8UmV0dXJuVHlwZTxHW1wicHJvbXB0XCJdPj47XG4gIH1cbiAgOiB7fTtcblxuaW50ZXJmYWNlIFByb21wdExpc3RPcHRpb25zPFIsIE4gZXh0ZW5kcyBrZXlvZiBSID0ga2V5b2YgUj4ge1xuICBjYnJlYWs/OiBib29sZWFuO1xuICBiZWZvcmU/OiAoXG4gICAgbmFtZTogTixcbiAgICBvcHRzOiBSLFxuICAgIG5leHQ6IE5leHQ8RXhjbHVkZTxOLCBzeW1ib2w+PixcbiAgKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgYWZ0ZXI/OiAoXG4gICAgbmFtZTogTixcbiAgICBvcHRzOiBSLFxuICAgIG5leHQ6IE5leHQ8RXhjbHVkZTxOLCBzeW1ib2w+PixcbiAgKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIEdsb2JhbCBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsUHJvbXB0T3B0aW9uczxSLCBOIGV4dGVuZHMga2V5b2YgUiA9IGtleW9mIFI+XG4gIGV4dGVuZHMgUHJvbXB0TGlzdE9wdGlvbnM8UiwgTj4ge1xuICBpbml0aWFsPzogTiBleHRlbmRzIHN5bWJvbCA/IG5ldmVyIDogTjtcbn1cblxudHlwZSBJZDxUPiA9IFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICA/IFQgZXh0ZW5kcyBpbmZlciBVID8geyBbSyBpbiBrZXlvZiBVXTogSWQ8VVtLXT4gfSA6IG5ldmVyXG4gIDogVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb21wdDxcbiAgVE5hbWUwIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTEgZXh0ZW5kcyBzdHJpbmcsXG4gIFROYW1lMiBleHRlbmRzIHN0cmluZyxcbiAgVE5hbWUzIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTQgZXh0ZW5kcyBzdHJpbmcsXG4gIFROYW1lNSBleHRlbmRzIHN0cmluZyxcbiAgVE5hbWU2IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTcgZXh0ZW5kcyBzdHJpbmcsXG4gIFROYW1lOCBleHRlbmRzIHN0cmluZyxcbiAgVE5hbWU5IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTEwIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTExIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTEyIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTEzIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTE0IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTE1IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTE2IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTE3IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTE4IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTE5IGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTIwIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTIxIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTIyIGV4dGVuZHMgc3RyaW5nLFxuICBUTmFtZTIzIGV4dGVuZHMgc3RyaW5nLFxuICBUT3B0aW9uczAgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMSBleHRlbmRzIEdlbmVyaWNQcm9tcHRPcHRpb25zPGFueSwgYW55PixcbiAgVE9wdGlvbnMyIGV4dGVuZHMgR2VuZXJpY1Byb21wdE9wdGlvbnM8YW55LCBhbnk+LFxuICBUT3B0aW9uczMgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zNCBleHRlbmRzIEdlbmVyaWNQcm9tcHRPcHRpb25zPGFueSwgYW55PixcbiAgVE9wdGlvbnM1IGV4dGVuZHMgR2VuZXJpY1Byb21wdE9wdGlvbnM8YW55LCBhbnk+LFxuICBUT3B0aW9uczYgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zNyBleHRlbmRzIEdlbmVyaWNQcm9tcHRPcHRpb25zPGFueSwgYW55PixcbiAgVE9wdGlvbnM4IGV4dGVuZHMgR2VuZXJpY1Byb21wdE9wdGlvbnM8YW55LCBhbnk+LFxuICBUT3B0aW9uczkgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTAgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTEgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTIgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTMgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTQgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTUgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTYgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTcgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTggZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMTkgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMjAgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMjEgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMjIgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRPcHRpb25zMjMgZXh0ZW5kcyBHZW5lcmljUHJvbXB0T3B0aW9uczxhbnksIGFueT4sXG4gIFRTdGF0aWNQcm9tcHQwIGV4dGVuZHMgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMwLCBhbnksIGFueT4sXG4gIFRTdGF0aWNQcm9tcHQxIGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zMSwgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDIgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMyLCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0MyBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczMsIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQ0IGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zNCwgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDUgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnM1LCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0NiBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczYsIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQ3IGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zNywgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDggZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnM4LCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0OSBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczksIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQxMCBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczEwLCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0MTEgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMxMSwgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDEyIGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zMTIsIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQxMyBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczEzLCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0MTQgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMxNCwgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDE1IGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zMTUsIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQxNiBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczE2LCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0MTcgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMxNywgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDE4IGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zMTgsIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQxOSBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczE5LCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0MjAgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMyMCwgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFN0YXRpY1Byb21wdDIxIGV4dGVuZHNcbiAgICB8IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIFRPcHRpb25zMjEsIGFueSwgYW55PlxuICAgIHwgdm9pZCA9IHZvaWQsXG4gIFRTdGF0aWNQcm9tcHQyMiBleHRlbmRzXG4gICAgfCBTdGF0aWNHZW5lcmljUHJvbXB0PGFueSwgYW55LCBUT3B0aW9uczIyLCBhbnksIGFueT5cbiAgICB8IHZvaWQgPSB2b2lkLFxuICBUU3RhdGljUHJvbXB0MjMgZXh0ZW5kc1xuICAgIHwgU3RhdGljR2VuZXJpY1Byb21wdDxhbnksIGFueSwgVE9wdGlvbnMyMywgYW55LCBhbnk+XG4gICAgfCB2b2lkID0gdm9pZCxcbiAgVFJlc3VsdCA9IElkPFxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMCwgVFN0YXRpY1Byb21wdDA+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWUxLCBUU3RhdGljUHJvbXB0MT5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTIsIFRTdGF0aWNQcm9tcHQyPlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMywgVFN0YXRpY1Byb21wdDM+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWU0LCBUU3RhdGljUHJvbXB0ND5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTUsIFRTdGF0aWNQcm9tcHQ1PlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lNiwgVFN0YXRpY1Byb21wdDY+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWU3LCBUU3RhdGljUHJvbXB0Nz5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTgsIFRTdGF0aWNQcm9tcHQ4PlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lOSwgVFN0YXRpY1Byb21wdDk+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWUxMCwgVFN0YXRpY1Byb21wdDEwPlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMTEsIFRTdGF0aWNQcm9tcHQxMT5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTEyLCBUU3RhdGljUHJvbXB0MTI+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWUxMywgVFN0YXRpY1Byb21wdDEzPlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMTQsIFRTdGF0aWNQcm9tcHQxND5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTE1LCBUU3RhdGljUHJvbXB0MTU+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWUxNiwgVFN0YXRpY1Byb21wdDE2PlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMTcsIFRTdGF0aWNQcm9tcHQxNz5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTE4LCBUU3RhdGljUHJvbXB0MTg+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWUxOSwgVFN0YXRpY1Byb21wdDE5PlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMjAsIFRTdGF0aWNQcm9tcHQyMD5cbiAgICAmIFByb21wdFJlc3VsdDxUTmFtZTIxLCBUU3RhdGljUHJvbXB0MjE+XG4gICAgJiBQcm9tcHRSZXN1bHQ8VE5hbWUyMiwgVFN0YXRpY1Byb21wdDIyPlxuICAgICYgUHJvbXB0UmVzdWx0PFROYW1lMjMsIFRTdGF0aWNQcm9tcHQyMz5cbiAgPixcbj4ocHJvbXB0czogW1xuICBQcm9tcHRPcHRpb25zPFROYW1lMCwgVFN0YXRpY1Byb21wdDAsIFRSZXN1bHQ+LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMSwgVFN0YXRpY1Byb21wdDEsIFRSZXN1bHQ+PyxcbiAgUHJvbXB0T3B0aW9uczxUTmFtZTIsIFRTdGF0aWNQcm9tcHQyLCBUUmVzdWx0Pj8sXG4gIFByb21wdE9wdGlvbnM8VE5hbWUzLCBUU3RhdGljUHJvbXB0MywgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lNCwgVFN0YXRpY1Byb21wdDQsIFRSZXN1bHQ+PyxcbiAgUHJvbXB0T3B0aW9uczxUTmFtZTUsIFRTdGF0aWNQcm9tcHQ1LCBUUmVzdWx0Pj8sXG4gIFByb21wdE9wdGlvbnM8VE5hbWU2LCBUU3RhdGljUHJvbXB0NiwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lNywgVFN0YXRpY1Byb21wdDcsIFRSZXN1bHQ+PyxcbiAgUHJvbXB0T3B0aW9uczxUTmFtZTgsIFRTdGF0aWNQcm9tcHQ4LCBUUmVzdWx0Pj8sXG4gIFByb21wdE9wdGlvbnM8VE5hbWU5LCBUU3RhdGljUHJvbXB0OSwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTAsIFRTdGF0aWNQcm9tcHQxMCwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTEsIFRTdGF0aWNQcm9tcHQxMSwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTIsIFRTdGF0aWNQcm9tcHQxMiwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTMsIFRTdGF0aWNQcm9tcHQxMywgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTQsIFRTdGF0aWNQcm9tcHQxNCwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTUsIFRTdGF0aWNQcm9tcHQxNSwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTYsIFRTdGF0aWNQcm9tcHQxNiwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTcsIFRTdGF0aWNQcm9tcHQxNywgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTgsIFRTdGF0aWNQcm9tcHQxOCwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMTksIFRTdGF0aWNQcm9tcHQxOSwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMjAsIFRTdGF0aWNQcm9tcHQyMCwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMjEsIFRTdGF0aWNQcm9tcHQyMSwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMjIsIFRTdGF0aWNQcm9tcHQyMiwgVFJlc3VsdD4/LFxuICBQcm9tcHRPcHRpb25zPFROYW1lMjMsIFRTdGF0aWNQcm9tcHQyMywgVFJlc3VsdD4/LFxuXSwgb3B0aW9ucz86IEdsb2JhbFByb21wdE9wdGlvbnM8VFJlc3VsdD4pOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9tcHRMaXN0KFxuICAgIHByb21wdHMgYXMgUHJvbXB0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnk+LFxuICAgIG9wdGlvbnMgYXMgUHJvbXB0TGlzdE9wdGlvbnM8YW55PixcbiAgKS5ydW4ob3B0aW9ucz8uaW5pdGlhbCkgYXMgUHJvbWlzZTxUUmVzdWx0Pjtcbn1cblxubGV0IGluamVjdGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbi8qKlxuICogSW5qZWN0IHByb21wdCB2YWx1ZXMuIENhbiBiZSB1c2VkIGZvciB1bml0IHRlc3RzIG9yIHByZSBzZWxlY3Rpb25zLlxuICogQHBhcmFtIHZhbHVlcyBJbnB1dCB2YWx1ZXMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KHZhbHVlczogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICBpbmplY3RlZCA9IHZhbHVlcztcbn1cblxuY2xhc3MgUHJvbXB0TGlzdCB7XG4gIHByaXZhdGUgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHByaXZhdGUgaW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBuYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBpc0luQmVmb3JlSG9vayA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZ2V0IHByb21wdCgpOiBQcm9tcHRPcHRpb25zPHN0cmluZywgYW55LCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9tcHRzW3RoaXMuaW5kZXhdO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcHJvbXB0czogQXJyYXk8UHJvbXB0T3B0aW9uczxzdHJpbmcsIGFueSwgYW55Pj4sXG4gICAgcHJpdmF0ZSBvcHRpb25zPzogUHJvbXB0TGlzdE9wdGlvbnM8YW55PixcbiAgKSB7XG4gICAgdGhpcy5uYW1lcyA9IHRoaXMucHJvbXB0cy5tYXAoKHByb21wdCkgPT4gcHJvbXB0Lm5hbWUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bihcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVtYmVyIHwgdHJ1ZSxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgdGhpcy5pbmRleCA9IC0xO1xuICAgIHRoaXMucmVzdWx0ID0ge307XG4gICAgdGhpcy5pc0luQmVmb3JlSG9vayA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMubmV4dChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG5leHQobmFtZT86IHN0cmluZyB8IG51bWJlciB8IHRydWUgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudXBkYXRlSW5kZXgobmFtZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuQmVmb3JlSG9vayhhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbkJlZm9yZUhvb2sgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5Qcm9tcHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5BZnRlckhvb2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5kZXgobmFtZT86IHN0cmluZyB8IG51bWJlciB8IHRydWUgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuaW5kZXggPSB0aGlzLm5hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgICBpZiAodGhpcy5pbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIHByb21wdCBuYW1lOiAke25hbWV9LCBhbGxvd2VkIHByb21wdCBuYW1lczogJHtcbiAgICAgICAgICAgIHRoaXMubmFtZXMuam9pbihcIiwgXCIpXG4gICAgICAgICAgfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKG5hbWUgPCAwIHx8IG5hbWUgPiB0aGlzLm5hbWVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcHJvbXB0IGluZGV4OiAke25hbWV9LCBwcm9tcHQgbGVuZ3RoOiAke3RoaXMubmFtZXMubGVuZ3RofWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmluZGV4ID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09IHRydWUgJiYgIXRoaXMuaXNJbkJlZm9yZUhvb2spIHtcbiAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIGlmICh0aGlzLmluZGV4IDwgdGhpcy5uYW1lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgIH1cblxuICAgIHRoaXMuaXNJbkJlZm9yZUhvb2sgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdGhpcy5uYW1lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbmRleCA9PT0gdGhpcy5uYW1lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibmV4dCgpIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bkJlZm9yZUhvb2socnVuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0luQmVmb3JlSG9vayA9IHRydWU7XG5cbiAgICBjb25zdCBuZXh0ID0gYXN5bmMgKG5hbWU/OiBzdHJpbmcgfCBudW1iZXIgfCB0cnVlIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKG5hbWUgfHwgdHlwZW9mIG5hbWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dChuYW1lIGFzIChzdHJpbmcgfCBudW1iZXIgfCB0cnVlKSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBydW4oKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYmVmb3JlKSB7XG4gICAgICBhd2FpdCB0aGlzLm9wdGlvbnMuYmVmb3JlKFxuICAgICAgICB0aGlzLnByb21wdC5uYW1lLFxuICAgICAgICB0aGlzLnJlc3VsdCxcbiAgICAgICAgYXN5bmMgKG5hbWU/OiBzdHJpbmcgfCBudW1iZXIgfCB0cnVlIHwgbnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lIHx8IHR5cGVvZiBuYW1lID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0KG5hbWUgYXMgKHN0cmluZyB8IG51bWJlciB8IHRydWUpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvbXB0LmJlZm9yZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9tcHQuYmVmb3JlKHRoaXMucmVzdWx0LCBuZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgcnVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9tcHQuYmVmb3JlKSB7XG4gICAgICBhd2FpdCB0aGlzLnByb21wdC5iZWZvcmUodGhpcy5yZXN1bHQsIG5leHQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgcnVuKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blByb21wdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9tcHQ6IFN0YXRpY0dlbmVyaWNQcm9tcHQ8YW55LCBhbnksIGFueSwgYW55LCBhbnk+ID1cbiAgICAgIHRoaXMucHJvbXB0LnR5cGU7XG5cbiAgICBpZiAodHlwZW9mIGluamVjdGVkW3RoaXMucHJvbXB0Lm5hbWVdICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAocHJvbXB0LmluamVjdCkge1xuICAgICAgICBwcm9tcHQuaW5qZWN0KGluamVjdGVkW3RoaXMucHJvbXB0Lm5hbWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEdlbmVyaWNQcm9tcHQuaW5qZWN0KGluamVjdGVkW3RoaXMucHJvbXB0Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZXN1bHRbdGhpcy5wcm9tcHQubmFtZV0gPSBhd2FpdCBwcm9tcHQucHJvbXB0KHtcbiAgICAgICAgY2JyZWFrOiB0aGlzLm9wdGlvbnM/LmNicmVhayxcbiAgICAgICAgLi4udGhpcy5wcm9tcHQsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHR5LmN1cnNvclNob3coKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bkFmdGVySG9vaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hZnRlcikge1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLmFmdGVyKHRoaXMucHJvbXB0Lm5hbWUsIHRoaXMucmVzdWx0LCBhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQobmFtZSBhcyBzdHJpbmcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvbXB0LmFmdGVyKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm9tcHQuYWZ0ZXIodGhpcy5yZXN1bHQsIChuYW1lKSA9PiB0aGlzLm5leHQobmFtZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvbXB0LmFmdGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLnByb21wdC5hZnRlcih0aGlzLnJlc3VsdCwgKG5hbWUpID0+IHRoaXMubmV4dChuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUVsRCxTQUFTLEdBQUcsUUFBUSxpQkFBaUI7QUFDckMsU0FDRSxhQUFhLFFBR1IsdUJBQXVCO0FBOEQ5QixPQUFPLFNBQVMsT0FpSmQsT0F5QkQsRUFBRSxPQUFzQztFQUN2QyxPQUFPLElBQUksV0FDVCxTQUNBLFNBQ0EsR0FBRyxDQUFDLFNBQVM7QUFDakI7QUFFQSxJQUFJLFdBQWdDLENBQUM7QUFFckM7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sTUFBMkI7RUFDaEQsV0FBVztBQUNiO0FBRUEsTUFBTTs7O0VBQ0ksT0FBaUM7RUFDakMsTUFBVztFQUNYLE1BQXFCO0VBQ3JCLGVBQXVCO0VBRS9CLElBQVksU0FBMEM7SUFDcEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDakM7RUFFQSxZQUNFLEFBQVEsT0FBK0MsRUFDdkQsQUFBUSxPQUFnQyxDQUN4QztTQUZRLFVBQUE7U0FDQSxVQUFBO1NBWEYsU0FBOEIsQ0FBQztTQUMvQixRQUFRLENBQUM7U0FFVCxpQkFBaUI7SUFVdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVcsT0FBTyxJQUFJO0VBQ3ZEO0VBRUEsTUFBYSxJQUNYLElBQTZCLEVBQ0M7SUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO0lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0lBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRztJQUN0QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTTtFQUNwQjtFQUVBLE1BQWMsS0FBSyxJQUFvQyxFQUFpQjtJQUN0RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztNQUMx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
+// denoCacheMetadata=5008812463605529626,10229207304719289772 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d94627d92746845093fa21805116112485063409239d2ff1806d4c41c278fab9.js b/vendor/gen/https/deno.land/d94627d92746845093fa21805116112485063409239d2ff1806d4c41c278fab9.js
new file mode 100644
index 0000000..61687e7
--- /dev/null
+++ b/vendor/gen/https/deno.land/d94627d92746845093fa21805116112485063409239d2ff1806d4c41c278fab9.js
@@ -0,0 +1,20 @@
+import { crypto } from "../../deps/crypto.ts";
+import { encodeHex } from "../../deps/hex.ts";
+const decoder = new TextDecoder();
+const encoder = new TextEncoder();
+/** Digest a message using SHA-1 algorithm */ export async function sha1(message) {
+ if (typeof message === "string") {
+ message = encoder.encode(message);
+ }
+ const hash = await crypto.subtle.digest("SHA-1", message);
+ return decoder.decode(hash);
+}
+/** Digest a message using MD5 algorithm */ export async function md5(message) {
+ if (typeof message === "string") {
+ message = encoder.encode(message);
+ }
+ const hash = await crypto.subtle.digest("MD5", message);
+ return encodeHex(hash);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS91dGlscy9kaWdlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3J5cHRvIH0gZnJvbSBcIi4uLy4uL2RlcHMvY3J5cHRvLnRzXCI7XG5pbXBvcnQgeyBlbmNvZGVIZXggfSBmcm9tIFwiLi4vLi4vZGVwcy9oZXgudHNcIjtcblxuY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKiogRGlnZXN0IGEgbWVzc2FnZSB1c2luZyBTSEEtMSBhbGdvcml0aG0gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaGExKG1lc3NhZ2U6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtZXNzYWdlID0gZW5jb2Rlci5lbmNvZGUobWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCBoYXNoID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMVwiLCBtZXNzYWdlKTtcbiAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGhhc2gpO1xufVxuXG4vKiogRGlnZXN0IGEgbWVzc2FnZSB1c2luZyBNRDUgYWxnb3JpdGhtICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWQ1KG1lc3NhZ2U6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtZXNzYWdlID0gZW5jb2Rlci5lbmNvZGUobWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCBoYXNoID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJNRDVcIiwgbWVzc2FnZSk7XG4gIHJldHVybiBlbmNvZGVIZXgoaGFzaCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxNQUFNLFFBQVEsdUJBQXVCO0FBQzlDLFNBQVMsU0FBUyxRQUFRLG9CQUFvQjtBQUU5QyxNQUFNLFVBQVUsSUFBSTtBQUNwQixNQUFNLFVBQVUsSUFBSTtBQUVwQiwyQ0FBMkMsR0FDM0MsT0FBTyxlQUFlLEtBQUssT0FBNEI7RUFDckQsSUFBSSxPQUFPLFlBQVksVUFBVTtJQUMvQixVQUFVLFFBQVEsTUFBTSxDQUFDO0VBQzNCO0VBRUEsTUFBTSxPQUFPLE1BQU0sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVM7RUFDakQsT0FBTyxRQUFRLE1BQU0sQ0FBQztBQUN4QjtBQUVBLHlDQUF5QyxHQUN6QyxPQUFPLGVBQWUsSUFBSSxPQUE0QjtFQUNwRCxJQUFJLE9BQU8sWUFBWSxVQUFVO0lBQy9CLFVBQVUsUUFBUSxNQUFNLENBQUM7RUFDM0I7RUFFQSxNQUFNLE9BQU8sTUFBTSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTztFQUMvQyxPQUFPLFVBQVU7QUFDbkIifQ==
+// denoCacheMetadata=2684540572809471232,8686837891101210833 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/d9d653821e9f1717cbd7eb811e53650fb78255a6526ba2f1ee18f438dc840517.js b/vendor/gen/https/deno.land/d9d653821e9f1717cbd7eb811e53650fb78255a6526ba2f1ee18f438dc840517.js
new file mode 100644
index 0000000..35caf1b
--- /dev/null
+++ b/vendor/gen/https/deno.land/d9d653821e9f1717cbd7eb811e53650fb78255a6526ba2f1ee18f438dc840517.js
@@ -0,0 +1,9 @@
+import { Type } from "../type.ts";
+import { integer } from "../../flags/types/integer.ts";
+/** Integer type. */ export class IntegerType extends Type {
+ /** Parse integer type. */ parse(type) {
+ return integer(type);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9pbnRlZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudFZhbHVlIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBpbnRlZ2VyIH0gZnJvbSBcIi4uLy4uL2ZsYWdzL3R5cGVzL2ludGVnZXIudHNcIjtcblxuLyoqIEludGVnZXIgdHlwZS4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ2VyVHlwZSBleHRlbmRzIFR5cGU8bnVtYmVyPiB7XG4gIC8qKiBQYXJzZSBpbnRlZ2VyIHR5cGUuICovXG4gIHB1YmxpYyBwYXJzZSh0eXBlOiBBcmd1bWVudFZhbHVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW50ZWdlcih0eXBlKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxRQUFRLGFBQWE7QUFFbEMsU0FBUyxPQUFPLFFBQVEsK0JBQStCO0FBRXZELGtCQUFrQixHQUNsQixPQUFPLE1BQU0sb0JBQW9CO0VBQy9CLHdCQUF3QixHQUN4QixBQUFPLE1BQU0sSUFBbUIsRUFBVTtJQUN4QyxPQUFPLFFBQVE7RUFDakI7QUFDRiJ9
+// denoCacheMetadata=12545180727166727837,11319682507756441535 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/da191e04599bc403f4efba8fce8427aef969431bff7a6f72bcdb883003a981e6.js b/vendor/gen/https/deno.land/da191e04599bc403f4efba8fce8427aef969431bff7a6f72bcdb883003a981e6.js
new file mode 100644
index 0000000..d02c412
--- /dev/null
+++ b/vendor/gen/https/deno.land/da191e04599bc403f4efba8fce8427aef969431bff7a6f72bcdb883003a981e6.js
@@ -0,0 +1,6 @@
+export { deflate, inflate, gzip, gunzip, zlib, unzlib } from "./pkg/denoflate.js";
+import init from "./pkg/denoflate.js";
+import { wasm } from "./pkg/denoflate_bg.wasm.js";
+await init(wasm);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub2ZsYXRlQDEuMi4xL21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBkZWZsYXRlLFxuICBpbmZsYXRlLFxuICBnemlwLFxuICBndW56aXAsXG4gIHpsaWIsXG4gIHVuemxpYixcbn0gZnJvbSBcIi4vcGtnL2Rlbm9mbGF0ZS5qc1wiO1xuXG5pbXBvcnQgaW5pdCBmcm9tIFwiLi9wa2cvZGVub2ZsYXRlLmpzXCI7XG5pbXBvcnQgeyB3YXNtIH0gZnJvbSBcIi4vcGtnL2Rlbm9mbGF0ZV9iZy53YXNtLmpzXCI7XG5cbmF3YWl0IGluaXQod2FzbSk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRSxPQUFPLEVBQ1AsT0FBTyxFQUNQLElBQUksRUFDSixNQUFNLEVBQ04sSUFBSSxFQUNKLE1BQU0sUUFDRCxxQkFBcUI7QUFFNUIsT0FBTyxVQUFVLHFCQUFxQjtBQUN0QyxTQUFTLElBQUksUUFBUSw2QkFBNkI7QUFFbEQsTUFBTSxLQUFLIn0=
+// denoCacheMetadata=7003155876221575681,13008824904001605273 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/da5cde75ecd58bfc9df9cf6e8ac10f2871c184dfd68fedbdd0ebe1dba6e1b598.js b/vendor/gen/https/deno.land/da5cde75ecd58bfc9df9cf6e8ac10f2871c184dfd68fedbdd0ebe1dba6e1b598.js
new file mode 100644
index 0000000..3f241fb
--- /dev/null
+++ b/vendor/gen/https/deno.land/da5cde75ecd58bfc9df9cf6e8ac10f2871c184dfd68fedbdd0ebe1dba6e1b598.js
@@ -0,0 +1,7 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "../_util/os.ts";
+export const SEP = isWindows ? "\\" : "/";
+export const SEP_PATTERN = isWindows ? /[\\/]+/ : /\/+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvc2VwYXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuLi9fdXRpbC9vcy50c1wiO1xuXG5leHBvcnQgY29uc3QgU0VQID0gaXNXaW5kb3dzID8gXCJcXFxcXCIgOiBcIi9cIjtcbmV4cG9ydCBjb25zdCBTRVBfUEFUVEVSTiA9IGlzV2luZG93cyA/IC9bXFxcXC9dKy8gOiAvXFwvKy87XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxpQkFBaUI7QUFFM0MsT0FBTyxNQUFNLE1BQU0sWUFBWSxPQUFPLElBQUk7QUFDMUMsT0FBTyxNQUFNLGNBQWMsWUFBWSxXQUFXLE1BQU0ifQ==
+// denoCacheMetadata=2599654808639539181,14346142432040228099 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/db0b2d75d0ac611a2e0bb54cffae722ff107d36bd76c5cbac2c78fd57aec1a17.js b/vendor/gen/https/deno.land/db0b2d75d0ac611a2e0bb54cffae722ff107d36bd76c5cbac2c78fd57aec1a17.js
new file mode 100644
index 0000000..066cf29
--- /dev/null
+++ b/vendor/gen/https/deno.land/db0b2d75d0ac611a2e0bb54cffae722ff107d36bd76c5cbac2c78fd57aec1a17.js
@@ -0,0 +1,44 @@
+class VentoBaseError extends Error {
+ name = this.constructor.name;
+}
+export class TemplateError extends VentoBaseError {
+ path;
+ source;
+ position;
+ constructor(path = "<unknown>", source = "<empty file>", position = 0, cause){
+ const { line, column, code } = errorLine(source, position);
+ super(`Error in template ${path}:${line}:${column}\n\n${code.trim()}\n\n`, {
+ cause
+ }), this.path = path, this.source = source, this.position = position;
+ }
+}
+export class TransformError extends VentoBaseError {
+ position;
+ constructor(message, position = 0, cause){
+ super(message, {
+ cause
+ }), this.position = position;
+ }
+}
+/** Returns the number and code of the errored line */ export function errorLine(source, position) {
+ let line = 1;
+ let column = 1;
+ for(let index = 0; index < position; index++){
+ if (source[index] === "\n" || source[index] === "\r" && source[index + 1] === "\n") {
+ line++;
+ column = 1;
+ if (source[index] === "\r") {
+ index++;
+ }
+ } else {
+ column++;
+ }
+ }
+ return {
+ line,
+ column,
+ code: source.split("\n")[line - 1]
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9zcmMvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIFZlbnRvQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSBuYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVFcnJvciBleHRlbmRzIFZlbnRvQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhdGg6IHN0cmluZyA9IFwiPHVua25vd24+XCIsXG4gICAgcHVibGljIHNvdXJjZTogc3RyaW5nID0gXCI8ZW1wdHkgZmlsZT5cIixcbiAgICBwdWJsaWMgcG9zaXRpb246IG51bWJlciA9IDAsXG4gICAgY2F1c2U/OiBFcnJvcixcbiAgKSB7XG4gICAgY29uc3QgeyBsaW5lLCBjb2x1bW4sIGNvZGUgfSA9IGVycm9yTGluZShzb3VyY2UsIHBvc2l0aW9uKTtcbiAgICBzdXBlcihcbiAgICAgIGBFcnJvciBpbiB0ZW1wbGF0ZSAke3BhdGh9OiR7bGluZX06JHtjb2x1bW59XFxuXFxuJHtjb2RlLnRyaW0oKX1cXG5cXG5gLFxuICAgICAgeyBjYXVzZSB9LFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgVmVudG9CYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHBvc2l0aW9uOiBudW1iZXIgPSAwLFxuICAgIGNhdXNlPzogRXJyb3IsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdGhlIG51bWJlciBhbmQgY29kZSBvZiB0aGUgZXJyb3JlZCBsaW5lICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JMaW5lKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgcG9zaXRpb246IG51bWJlcixcbik6IHsgbGluZTogbnVtYmVyOyBjb2x1bW46IG51bWJlcjsgY29kZTogc3RyaW5nIH0ge1xuICBsZXQgbGluZSA9IDE7XG4gIGxldCBjb2x1bW4gPSAxO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbjsgaW5kZXgrKykge1xuICAgIGlmIChcbiAgICAgIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIgfHxcbiAgICAgIChzb3VyY2VbaW5kZXhdID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleCArIDFdID09PSBcIlxcblwiKVxuICAgICkge1xuICAgICAgbGluZSsrO1xuICAgICAgY29sdW1uID0gMTtcblxuICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09IFwiXFxyXCIpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uKys7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbGluZSwgY29sdW1uLCBjb2RlOiBzb3VyY2Uuc3BsaXQoXCJcXG5cIilbbGluZSAtIDFdIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSx1QkFBdUI7RUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUN4QztBQUVBLE9BQU8sTUFBTSxzQkFBc0I7Ozs7RUFDakMsWUFDRSxBQUFPLE9BQWUsV0FBVyxFQUNqQyxBQUFPLFNBQWlCLGNBQWMsRUFDdEMsQUFBTyxXQUFtQixDQUFDLEVBQzNCLEtBQWEsQ0FDYjtJQUNBLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsUUFBUTtJQUNqRCxLQUFLLENBQ0gsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsRUFDbkU7TUFBRTtJQUFNLFNBUkgsT0FBQSxXQUNBLFNBQUEsYUFDQSxXQUFBO0VBUVQ7QUFDRjtBQUVBLE9BQU8sTUFBTSx1QkFBdUI7O0VBQ2xDLFlBQ0UsT0FBZSxFQUNmLEFBQU8sV0FBbUIsQ0FBQyxFQUMzQixLQUFhLENBQ2I7SUFDQSxLQUFLLENBQUMsU0FBUztNQUFFO0lBQU0sU0FIaEIsV0FBQTtFQUlUO0FBQ0Y7QUFFQSxvREFBb0QsR0FDcEQsT0FBTyxTQUFTLFVBQ2QsTUFBYyxFQUNkLFFBQWdCO0VBRWhCLElBQUksT0FBTztFQUNYLElBQUksU0FBUztFQUViLElBQUssSUFBSSxRQUFRLEdBQUcsUUFBUSxVQUFVLFFBQVM7SUFDN0MsSUFDRSxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQ2pCLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssTUFDakQ7TUFDQTtNQUNBLFNBQVM7TUFFVCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTTtRQUMxQjtNQUNGO0lBQ0YsT0FBTztNQUNMO0lBQ0Y7RUFDRjtFQUVBLE9BQU87SUFBRTtJQUFNO0lBQVEsTUFBTSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO0VBQUM7QUFDNUQifQ==
+// denoCacheMetadata=3002498879481372295,1768270274336382248 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/dc17962467533991133f70ea8148335749ee94c09706f4ad12e0e1eac11b748d.js b/vendor/gen/https/deno.land/dc17962467533991133f70ea8148335749ee94c09706f4ad12e0e1eac11b748d.js
new file mode 100644
index 0000000..84fea21
--- /dev/null
+++ b/vendor/gen/https/deno.land/dc17962467533991133f70ea8148335749ee94c09706f4ad12e0e1eac11b748d.js
@@ -0,0 +1,134 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+/**
+ * {@linkcode encode} and {@linkcode decode} for
+ * [base64](https://en.wikipedia.org/wiki/Base64) encoding.
+ *
+ * This module is browser compatible.
+ *
+ * @example
+ * ```ts
+ * import {
+ * decode,
+ * encode,
+ * } from "https://deno.land/std@$STD_VERSION/encoding/base64.ts";
+ *
+ * const b64Repr = "Zm9vYg==";
+ *
+ * const binaryData = decode(b64Repr);
+ * console.log(binaryData);
+ * // => Uint8Array [ 102, 111, 111, 98 ]
+ *
+ * console.log(encode(binaryData));
+ * // => Zm9vYg==
+ * ```
+ *
+ * @module
+ */ const base64abc = [
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "+",
+ "/"
+];
+/**
+ * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
+ * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation
+ * @param data
+ */ export function encode(data) {
+ const uint8 = typeof data === "string" ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);
+ let result = "", i;
+ const l = uint8.length;
+ for(i = 2; i < l; i += 3){
+ result += base64abc[uint8[i - 2] >> 2];
+ result += base64abc[(uint8[i - 2] & 0x03) << 4 | uint8[i - 1] >> 4];
+ result += base64abc[(uint8[i - 1] & 0x0f) << 2 | uint8[i] >> 6];
+ result += base64abc[uint8[i] & 0x3f];
+ }
+ if (i === l + 1) {
+ // 1 octet yet to write
+ result += base64abc[uint8[i - 2] >> 2];
+ result += base64abc[(uint8[i - 2] & 0x03) << 4];
+ result += "==";
+ }
+ if (i === l) {
+ // 2 octets yet to write
+ result += base64abc[uint8[i - 2] >> 2];
+ result += base64abc[(uint8[i - 2] & 0x03) << 4 | uint8[i - 1] >> 4];
+ result += base64abc[(uint8[i - 1] & 0x0f) << 2];
+ result += "=";
+ }
+ return result;
+}
+/**
+ * Decodes a given RFC4648 base64 encoded string
+ * @param b64
+ */ export function decode(b64) {
+ const binString = atob(b64);
+ const size = binString.length;
+ const bytes = new Uint8Array(size);
+ for(let i = 0; i < size; i++){
+ bytes[i] = binString.charCodeAt(i);
+ }
+ return bytes;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL2VuY29kaW5nL2Jhc2U2NC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG4vKipcbiAqIHtAbGlua2NvZGUgZW5jb2RlfSBhbmQge0BsaW5rY29kZSBkZWNvZGV9IGZvclxuICogW2Jhc2U2NF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0KSBlbmNvZGluZy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQge1xuICogICBkZWNvZGUsXG4gKiAgIGVuY29kZSxcbiAqIH0gZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAkU1REX1ZFUlNJT04vZW5jb2RpbmcvYmFzZTY0LnRzXCI7XG4gKlxuICogY29uc3QgYjY0UmVwciA9IFwiWm05dllnPT1cIjtcbiAqXG4gKiBjb25zdCBiaW5hcnlEYXRhID0gZGVjb2RlKGI2NFJlcHIpO1xuICogY29uc29sZS5sb2coYmluYXJ5RGF0YSk7XG4gKiAvLyA9PiBVaW50OEFycmF5IFsgMTAyLCAxMTEsIDExMSwgOTggXVxuICpcbiAqIGNvbnNvbGUubG9nKGVuY29kZShiaW5hcnlEYXRhKSk7XG4gKiAvLyA9PiBabTl2WWc9PVxuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmNvbnN0IGJhc2U2NGFiYyA9IFtcbiAgXCJBXCIsXG4gIFwiQlwiLFxuICBcIkNcIixcbiAgXCJEXCIsXG4gIFwiRVwiLFxuICBcIkZcIixcbiAgXCJHXCIsXG4gIFwiSFwiLFxuICBcIklcIixcbiAgXCJKXCIsXG4gIFwiS1wiLFxuICBcIkxcIixcbiAgXCJNXCIsXG4gIFwiTlwiLFxuICBcIk9cIixcbiAgXCJQXCIsXG4gIFwiUVwiLFxuICBcIlJcIixcbiAgXCJTXCIsXG4gIFwiVFwiLFxuICBcIlVcIixcbiAgXCJWXCIsXG4gIFwiV1wiLFxuICBcIlhcIixcbiAgXCJZXCIsXG4gIFwiWlwiLFxuICBcImFcIixcbiAgXCJiXCIsXG4gIFwiY1wiLFxuICBcImRcIixcbiAgXCJlXCIsXG4gIFwiZlwiLFxuICBcImdcIixcbiAgXCJoXCIsXG4gIFwiaVwiLFxuICBcImpcIixcbiAgXCJrXCIsXG4gIFwibFwiLFxuICBcIm1cIixcbiAgXCJuXCIsXG4gIFwib1wiLFxuICBcInBcIixcbiAgXCJxXCIsXG4gIFwiclwiLFxuICBcInNcIixcbiAgXCJ0XCIsXG4gIFwidVwiLFxuICBcInZcIixcbiAgXCJ3XCIsXG4gIFwieFwiLFxuICBcInlcIixcbiAgXCJ6XCIsXG4gIFwiMFwiLFxuICBcIjFcIixcbiAgXCIyXCIsXG4gIFwiM1wiLFxuICBcIjRcIixcbiAgXCI1XCIsXG4gIFwiNlwiLFxuICBcIjdcIixcbiAgXCI4XCIsXG4gIFwiOVwiLFxuICBcIitcIixcbiAgXCIvXCIsXG5dO1xuXG4vKipcbiAqIENSRURJVDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZW5lcG9tbnlhc2NoaWgvNzJjNDIzZjcyN2QzOTVlZWFhMDk2OTcwNTgyMzg3MjdcbiAqIEVuY29kZXMgYSBnaXZlbiBVaW50OEFycmF5LCBBcnJheUJ1ZmZlciBvciBzdHJpbmcgaW50byBSRkM0NjQ4IGJhc2U2NCByZXByZXNlbnRhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShkYXRhOiBBcnJheUJ1ZmZlciB8IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVpbnQ4ID0gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCJcbiAgICA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKVxuICAgIDogZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgICA/IGRhdGFcbiAgICA6IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICBsZXQgcmVzdWx0ID0gXCJcIixcbiAgICBpO1xuICBjb25zdCBsID0gdWludDgubGVuZ3RoO1xuICBmb3IgKGkgPSAyOyBpIDwgbDsgaSArPSAzKSB7XG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1t1aW50OFtpIC0gMl0gPj4gMl07XG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1soKHVpbnQ4W2kgLSAyXSAmIDB4MDMpIDw8IDQpIHwgKHVpbnQ4W2kgLSAxXSA+PiA0KV07XG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1soKHVpbnQ4W2kgLSAxXSAmIDB4MGYpIDw8IDIpIHwgKHVpbnQ4W2ldID4+IDYpXTtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2ldICYgMHgzZl07XG4gIH1cbiAgaWYgKGkgPT09IGwgKyAxKSB7XG4gICAgLy8gMSBvY3RldCB5ZXQgdG8gd3JpdGVcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2kgLSAyXSA+PiAyXTtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjWyh1aW50OFtpIC0gMl0gJiAweDAzKSA8PCA0XTtcbiAgICByZXN1bHQgKz0gXCI9PVwiO1xuICB9XG4gIGlmIChpID09PSBsKSB7XG4gICAgLy8gMiBvY3RldHMgeWV0IHRvIHdyaXRlXG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1t1aW50OFtpIC0gMl0gPj4gMl07XG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1soKHVpbnQ4W2kgLSAyXSAmIDB4MDMpIDw8IDQpIHwgKHVpbnQ4W2kgLSAxXSA+PiA0KV07XG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1sodWludDhbaSAtIDFdICYgMHgwZikgPDwgMl07XG4gICAgcmVzdWx0ICs9IFwiPVwiO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIGdpdmVuIFJGQzQ2NDggYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gKiBAcGFyYW0gYjY0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgY29uc3QgYmluU3RyaW5nID0gYXRvYihiNjQpO1xuICBjb25zdCBzaXplID0gYmluU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBieXRlc1tpXSA9IGJpblN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIHJldHVybiBieXRlcztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFFMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXdCQyxHQUVELE1BQU0sWUFBWTtFQUNoQjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNEO0FBRUQ7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBUyxPQUFPLElBQTBCO0VBQy9DLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FDMUIsSUFBSSxjQUFjLE1BQU0sQ0FBQyxRQUN6QixnQkFBZ0IsYUFDaEIsT0FDQSxJQUFJLFdBQVc7RUFDbkIsSUFBSSxTQUFTLElBQ1g7RUFDRixNQUFNLElBQUksTUFBTSxNQUFNO0VBQ3RCLElBQUssSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUc7SUFDekIsVUFBVSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDdEMsVUFBVSxTQUFTLENBQUMsQUFBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssSUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRztJQUN2RSxVQUFVLFNBQVMsQ0FBQyxBQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxJQUFNLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRztJQUNuRSxVQUFVLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUs7RUFDdEM7RUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHO0lBQ2YsdUJBQXVCO0lBQ3ZCLFVBQVUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ3RDLFVBQVUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFO0lBQy9DLFVBQVU7RUFDWjtFQUNBLElBQUksTUFBTSxHQUFHO0lBQ1gsd0JBQXdCO0lBQ3hCLFVBQVUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ3RDLFVBQVUsU0FBUyxDQUFDLEFBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxLQUFLLElBQU0sS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUc7SUFDdkUsVUFBVSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUU7SUFDL0MsVUFBVTtFQUNaO0VBQ0EsT0FBTztBQUNUO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sR0FBVztFQUNoQyxNQUFNLFlBQVksS0FBSztFQUN2QixNQUFNLE9BQU8sVUFBVSxNQUFNO0VBQzdCLE1BQU0sUUFBUSxJQUFJLFdBQVc7RUFDN0IsSUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sSUFBSztJQUM3QixLQUFLLENBQUMsRUFBRSxHQUFHLFVBQVUsVUFBVSxDQUFDO0VBQ2xDO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=15008789603030840279,3226718108940260178 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/dd8c23b12196ccee33022cfaae7ed223c72b26c1d78e3e991bceb9daa070f691.js b/vendor/gen/https/deno.land/dd8c23b12196ccee33022cfaae7ed223c72b26c1d78e3e991bceb9daa070f691.js
new file mode 100644
index 0000000..0ebf69a
--- /dev/null
+++ b/vendor/gen/https/deno.land/dd8c23b12196ccee33022cfaae7ed223c72b26c1d78e3e991bceb9daa070f691.js
@@ -0,0 +1,4 @@
+export * from "jsr:@std/front-matter@1.0.9/any";
+export { test } from "jsr:@std/front-matter@1.0.9";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9mcm9udF9tYXR0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImpzcjpAc3RkL2Zyb250LW1hdHRlckAxLjAuOS9hbnlcIjtcbmV4cG9ydCB7IHRlc3QgfSBmcm9tIFwianNyOkBzdGQvZnJvbnQtbWF0dGVyQDEuMC45XCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0M7QUFDaEQsU0FBUyxJQUFJLFFBQVEsOEJBQThCIn0=
+// denoCacheMetadata=15937107815626275135,1695647080784804054 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/de234168948ad2f16752540df5d771bc45aea48a509c5bbf5bf5aa0b09b6bd58.js b/vendor/gen/https/deno.land/de234168948ad2f16752540df5d771bc45aea48a509c5bbf5bf5aa0b09b6bd58.js
new file mode 100644
index 0000000..cf8288a
--- /dev/null
+++ b/vendor/gen/https/deno.land/de234168948ad2f16752540df5d771bc45aea48a509c5bbf5bf5aa0b09b6bd58.js
@@ -0,0 +1,53 @@
+/**
+ * Get next words from the beginning of [content] until all words have a length lower or equal then [length].
+ *
+ * @param length Max length of all words.
+ * @param content The text content.
+ */ import { Cell } from "./cell.ts";
+import { stripColor } from "./deps.ts";
+export function consumeWords(length, content) {
+ let consumed = "";
+ const words = content.split("\n")[0]?.split(/ /g);
+ for(let i = 0; i < words.length; i++){
+ const word = words[i];
+ // consume minimum one word
+ if (consumed) {
+ const nextLength = strLength(word);
+ const consumedLength = strLength(consumed);
+ if (consumedLength + nextLength >= length) {
+ break;
+ }
+ }
+ consumed += (i > 0 ? " " : "") + word;
+ }
+ return consumed;
+}
+/**
+ * Get longest cell from given row index.
+ */ export function longest(index, rows, maxWidth) {
+ const cellLengths = rows.map((row)=>{
+ const cell = row[index];
+ const cellValue = cell instanceof Cell && cell.getColSpan() > 1 ? "" : cell?.toString() || "";
+ return cellValue.split("\n").map((line)=>{
+ const str = typeof maxWidth === "undefined" ? line : consumeWords(maxWidth, line);
+ return strLength(str) || 0;
+ });
+ }).flat();
+ return Math.max(...cellLengths);
+}
+export const strLength = (str)=>{
+ str = stripColor(str);
+ let length = 0;
+ for(let i = 0; i < str.length; i++){
+ const charCode = str.charCodeAt(i);
+ // Check for chinese characters: \u4e00 - \u9fa5
+ if (charCode >= 19968 && charCode <= 40869) {
+ length += 2;
+ } else {
+ length += 1;
+ }
+ }
+ return length;
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXQgbmV4dCB3b3JkcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgW2NvbnRlbnRdIHVudGlsIGFsbCB3b3JkcyBoYXZlIGEgbGVuZ3RoIGxvd2VyIG9yIGVxdWFsIHRoZW4gW2xlbmd0aF0uXG4gKlxuICogQHBhcmFtIGxlbmd0aCAgICBNYXggbGVuZ3RoIG9mIGFsbCB3b3Jkcy5cbiAqIEBwYXJhbSBjb250ZW50ICAgVGhlIHRleHQgY29udGVudC5cbiAqL1xuaW1wb3J0IHsgQ2VsbCwgSUNlbGwgfSBmcm9tIFwiLi9jZWxsLnRzXCI7XG5pbXBvcnQgeyBzdHJpcENvbG9yIH0gZnJvbSBcIi4vZGVwcy50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZVdvcmRzKGxlbmd0aDogbnVtYmVyLCBjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY29uc3VtZWQgPSBcIlwiO1xuICBjb25zdCB3b3Jkczogc3RyaW5nW10gPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdPy5zcGxpdCgvIC9nKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgd29yZDogc3RyaW5nID0gd29yZHNbaV07XG5cbiAgICAvLyBjb25zdW1lIG1pbmltdW0gb25lIHdvcmRcbiAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgIGNvbnN0IG5leHRMZW5ndGggPSBzdHJMZW5ndGgod29yZCk7XG4gICAgICBjb25zdCBjb25zdW1lZExlbmd0aCA9IHN0ckxlbmd0aChjb25zdW1lZCk7XG4gICAgICBpZiAoY29uc3VtZWRMZW5ndGggKyBuZXh0TGVuZ3RoID49IGxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lZCArPSAoaSA+IDAgPyBcIiBcIiA6IFwiXCIpICsgd29yZDtcbiAgfVxuXG4gIHJldHVybiBjb25zdW1lZDtcbn1cblxuLyoqXG4gKiBHZXQgbG9uZ2VzdCBjZWxsIGZyb20gZ2l2ZW4gcm93IGluZGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9uZ2VzdChcbiAgaW5kZXg6IG51bWJlcixcbiAgcm93czogSUNlbGxbXVtdLFxuICBtYXhXaWR0aD86IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IGNlbGxMZW5ndGhzID0gcm93cy5tYXAoKHJvdykgPT4ge1xuICAgIGNvbnN0IGNlbGwgPSByb3dbaW5kZXhdO1xuICAgIGNvbnN0IGNlbGxWYWx1ZSA9IGNlbGwgaW5zdGFuY2VvZiBDZWxsICYmIGNlbGwuZ2V0Q29sU3BhbigpID4gMVxuICAgICAgPyBcIlwiXG4gICAgICA6IGNlbGw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcblxuICAgIHJldHVybiBjZWxsVmFsdWVcbiAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgLm1hcCgobGluZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ciA9IHR5cGVvZiBtYXhXaWR0aCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgID8gbGluZVxuICAgICAgICAgIDogY29uc3VtZVdvcmRzKG1heFdpZHRoLCBsaW5lKTtcblxuICAgICAgICByZXR1cm4gc3RyTGVuZ3RoKHN0cikgfHwgMDtcbiAgICAgIH0pO1xuICB9KS5mbGF0KCk7XG5cbiAgcmV0dXJuIE1hdGgubWF4KC4uLmNlbGxMZW5ndGhzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0ckxlbmd0aCA9IChzdHI6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gIHN0ciA9IHN0cmlwQ29sb3Ioc3RyKTtcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAvLyBDaGVjayBmb3IgY2hpbmVzZSBjaGFyYWN0ZXJzOiBcXHU0ZTAwIC0gXFx1OWZhNVxuICAgIGlmIChjaGFyQ29kZSA+PSAxOTk2OCAmJiBjaGFyQ29kZSA8PSA0MDg2OSkge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCArPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Q0FLQyxHQUNELFNBQVMsSUFBSSxRQUFlLFlBQVk7QUFDeEMsU0FBUyxVQUFVLFFBQVEsWUFBWTtBQUV2QyxPQUFPLFNBQVMsYUFBYSxNQUFjLEVBQUUsT0FBZTtFQUMxRCxJQUFJLFdBQVc7RUFDZixNQUFNLFFBQWtCLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTTtFQUV0RCxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsSUFBSztJQUNyQyxNQUFNLE9BQWUsS0FBSyxDQUFDLEVBQUU7SUFFN0IsMkJBQTJCO0lBQzNCLElBQUksVUFBVTtNQUNaLE1BQU0sYUFBYSxVQUFVO01BQzdCLE1BQU0saUJBQWlCLFVBQVU7TUFDakMsSUFBSSxpQkFBaUIsY0FBYyxRQUFRO1FBQ3pDO01BQ0Y7SUFDRjtJQUVBLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLElBQUk7RUFDbkM7RUFFQSxPQUFPO0FBQ1Q7QUFFQTs7Q0FFQyxHQUNELE9BQU8sU0FBUyxRQUNkLEtBQWEsRUFDYixJQUFlLEVBQ2YsUUFBaUI7RUFFakIsTUFBTSxjQUFjLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDNUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNO0lBQ3ZCLE1BQU0sWUFBWSxnQkFBZ0IsUUFBUSxLQUFLLFVBQVUsS0FBSyxJQUMxRCxLQUNBLE1BQU0sY0FBYztJQUV4QixPQUFPLFVBQ0osS0FBSyxDQUFDLE1BQ04sR0FBRyxDQUFDLENBQUM7TUFDSixNQUFNLE1BQU0sT0FBTyxhQUFhLGNBQzVCLE9BQ0EsYUFBYSxVQUFVO01BRTNCLE9BQU8sVUFBVSxRQUFRO0lBQzNCO0VBQ0osR0FBRyxJQUFJO0VBRVAsT0FBTyxLQUFLLEdBQUcsSUFBSTtBQUNyQjtBQUVBLE9BQU8sTUFBTSxZQUFZLENBQUM7RUFDeEIsTUFBTSxXQUFXO0VBQ2pCLElBQUksU0FBUztFQUNiLElBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRSxJQUFLO0lBQ25DLE1BQU0sV0FBVyxJQUFJLFVBQVUsQ0FBQztJQUNoQyxnREFBZ0Q7SUFDaEQsSUFBSSxZQUFZLFNBQVMsWUFBWSxPQUFPO01BQzFDLFVBQVU7SUFDWixPQUFPO01BQ0wsVUFBVTtJQUNaO0VBQ0Y7RUFDQSxPQUFPO0FBQ1QsRUFBRSJ9
+// denoCacheMetadata=3363781928723257597,17718208346879488347 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/e373f2347336fe56eca5d0409c355d64c8d56c249db6412279b7fae7e78816bd.js b/vendor/gen/https/deno.land/e373f2347336fe56eca5d0409c355d64c8d56c249db6412279b7fae7e78816bd.js
new file mode 100644
index 0000000..b5c6312
--- /dev/null
+++ b/vendor/gen/https/deno.land/e373f2347336fe56eca5d0409c355d64c8d56c249db6412279b7fae7e78816bd.js
@@ -0,0 +1,68 @@
+import { specifier } from "../deps/debugbar.ts";
+/**
+ * DebugBar is a class that manages collections of items to be displayed in a debug bar.
+ */ export default class DebugBar {
+ #url;
+ collections = [];
+ constructor(options = {}){
+ this.#url = options.url || specifier;
+ }
+ get url() {
+ return this.#url;
+ }
+ /**
+ * Clear all collections
+ */ clear() {
+ this.collections.forEach((collection)=>collection.items = []);
+ }
+ /**
+ * Get a collection by name or create a new one if it doesn't exist
+ */ collection(name) {
+ const collection = this.collections.find((c)=>c.name === name);
+ if (collection) {
+ return collection;
+ }
+ const newCollection = name === "Build" ? buildCollection() : {
+ name,
+ items: []
+ };
+ this.collections.push(newCollection);
+ return newCollection;
+ }
+ /**
+ * Add a new item to the "Build" collection and return it
+ */ buildItem(title, context = "info") {
+ const collection = this.collection("Build");
+ const item = {
+ title,
+ context
+ };
+ collection.items.push(item);
+ return item;
+ }
+}
+/** Build collection created automatically by Lume */ function buildCollection() {
+ const collection = {
+ name: "Build",
+ icon: "fire",
+ empty: "No build messages found",
+ contexts: {
+ fatal: {
+ background: "important"
+ },
+ error: {
+ background: "error"
+ },
+ warn: {
+ background: "warning"
+ },
+ info: {
+ background: "info"
+ }
+ },
+ items: []
+ };
+ return collection;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9kZWJ1Z2Jhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGVjaWZpZXIgfSBmcm9tIFwiLi4vZGVwcy9kZWJ1Z2Jhci50c1wiO1xuXG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb24sIEl0ZW0gfSBmcm9tIFwiLi4vZGVwcy9kZWJ1Z2Jhci50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgZGVidWdiYXIgc2NyaXB0XG4gICAqL1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVidWdCYXIgaXMgYSBjbGFzcyB0aGF0IG1hbmFnZXMgY29sbGVjdGlvbnMgb2YgaXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIGEgZGVidWcgYmFyLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWJ1Z0JhciB7XG4gICN1cmw6IHN0cmluZztcbiAgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuI3VybCA9IG9wdGlvbnMudXJsIHx8IHNwZWNpZmllcjtcbiAgfVxuXG4gIGdldCB1cmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY29sbGVjdGlvbnNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaCgoY29sbGVjdGlvbikgPT4gY29sbGVjdGlvbi5pdGVtcyA9IFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBjb2xsZWN0aW9uIGJ5IG5hbWUgb3IgY3JlYXRlIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBjb2xsZWN0aW9uKG5hbWU6IHN0cmluZyk6IENvbGxlY3Rpb24ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSk7XG5cbiAgICBpZiAoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q29sbGVjdGlvbjogQ29sbGVjdGlvbiA9IG5hbWUgPT09IFwiQnVpbGRcIiA/IGJ1aWxkQ29sbGVjdGlvbigpIDoge1xuICAgICAgbmFtZSxcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICB9O1xuXG4gICAgdGhpcy5jb2xsZWN0aW9ucy5wdXNoKG5ld0NvbGxlY3Rpb24pO1xuICAgIHJldHVybiBuZXdDb2xsZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpdGVtIHRvIHRoZSBcIkJ1aWxkXCIgY29sbGVjdGlvbiBhbmQgcmV0dXJuIGl0XG4gICAqL1xuICBidWlsZEl0ZW0odGl0bGU6IHN0cmluZywgY29udGV4dDogQnVpbGRDb250ZXh0ID0gXCJpbmZvXCIpOiBJdGVtIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uKFwiQnVpbGRcIik7XG4gICAgY29uc3QgaXRlbTogSXRlbSA9IHtcbiAgICAgIHRpdGxlLFxuICAgICAgY29udGV4dCxcbiAgICB9O1xuXG4gICAgY29sbGVjdGlvbi5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG59XG5cbnR5cGUgQnVpbGRDb250ZXh0ID0gXCJmYXRhbFwiIHwgXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcImluZm9cIjtcblxuLyoqIEJ1aWxkIGNvbGxlY3Rpb24gY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IEx1bWUgKi9cbmZ1bmN0aW9uIGJ1aWxkQ29sbGVjdGlvbigpOiBDb2xsZWN0aW9uIHtcbiAgY29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbiA9IHtcbiAgICBuYW1lOiBcIkJ1aWxkXCIsXG4gICAgaWNvbjogXCJmaXJlXCIsXG4gICAgZW1wdHk6IFwiTm8gYnVpbGQgbWVzc2FnZXMgZm91bmRcIixcbiAgICBjb250ZXh0czoge1xuICAgICAgZmF0YWw6IHtcbiAgICAgICAgYmFja2dyb3VuZDogXCJpbXBvcnRhbnRcIixcbiAgICAgIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBiYWNrZ3JvdW5kOiBcImVycm9yXCIsXG4gICAgICB9LFxuICAgICAgd2Fybjoge1xuICAgICAgICBiYWNrZ3JvdW5kOiBcIndhcm5pbmdcIixcbiAgICAgIH0sXG4gICAgICBpbmZvOiB7XG4gICAgICAgIGJhY2tncm91bmQ6IFwiaW5mb1wiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGl0ZW1zOiBbXSxcbiAgfTtcblxuICByZXR1cm4gY29sbGVjdGlvbjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFNBQVMsUUFBUSxzQkFBc0I7QUFXaEQ7O0NBRUMsR0FDRCxlQUFlLE1BQU07RUFDbkIsQ0FBQSxHQUFJLENBQVM7RUFDYixjQUE0QixFQUFFLENBQUM7RUFFL0IsWUFBWSxVQUFtQixDQUFDLENBQUMsQ0FBRTtJQUNqQyxJQUFJLENBQUMsQ0FBQSxHQUFJLEdBQUcsUUFBUSxHQUFHLElBQUk7RUFDN0I7RUFFQSxJQUFJLE1BQU07SUFDUixPQUFPLElBQUksQ0FBQyxDQUFBLEdBQUk7RUFDbEI7RUFFQTs7R0FFQyxHQUNELFFBQVE7SUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWUsV0FBVyxLQUFLLEdBQUcsRUFBRTtFQUNoRTtFQUVBOztHQUVDLEdBQ0QsV0FBVyxJQUFZLEVBQWM7SUFDbkMsTUFBTSxhQUFhLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBTSxFQUFFLElBQUksS0FBSztJQUUzRCxJQUFJLFlBQVk7TUFDZCxPQUFPO0lBQ1Q7SUFFQSxNQUFNLGdCQUE0QixTQUFTLFVBQVUsb0JBQW9CO01BQ3ZFO01BQ0EsT0FBTyxFQUFFO0lBQ1g7SUFFQSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUN0QixPQUFPO0VBQ1Q7RUFFQTs7R0FFQyxHQUNELFVBQVUsS0FBYSxFQUFFLFVBQXdCLE1BQU0sRUFBUTtJQUM3RCxNQUFNLGFBQWEsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNuQyxNQUFNLE9BQWE7TUFDakI7TUFDQTtJQUNGO0lBRUEsV0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3RCLE9BQU87RUFDVDtBQUNGO0FBSUEsbURBQW1ELEdBQ25ELFNBQVM7RUFDUCxNQUFNLGFBQXlCO0lBQzdCLE1BQU07SUFDTixNQUFNO0lBQ04sT0FBTztJQUNQLFVBQVU7TUFDUixPQUFPO1FBQ0wsWUFBWTtNQUNkO01BQ0EsT0FBTztRQUNMLFlBQVk7TUFDZDtNQUNBLE1BQU07UUFDSixZQUFZO01BQ2Q7TUFDQSxNQUFNO1FBQ0osWUFBWTtNQUNkO0lBQ0Y7SUFDQSxPQUFPLEVBQUU7RUFDWDtFQUVBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=1769371486322726175,11564725590287215499 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/e4c8e4b371b67de364d0d508d4e1301bb691dbfc4fa99f37a5a32e017c69ad30.js b/vendor/gen/https/deno.land/e4c8e4b371b67de364d0d508d4e1301bb691dbfc4fa99f37a5a32e017c69ad30.js
new file mode 100644
index 0000000..cfc16da
--- /dev/null
+++ b/vendor/gen/https/deno.land/e4c8e4b371b67de364d0d508d4e1301bb691dbfc4fa99f37a5a32e017c69ad30.js
@@ -0,0 +1,5 @@
+/** String type handler. Excepts any value. */ export const string = ({ value })=>{
+ return value;
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvdHlwZXMvc3RyaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXJndW1lbnRWYWx1ZSwgVHlwZUhhbmRsZXIgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqIFN0cmluZyB0eXBlIGhhbmRsZXIuIEV4Y2VwdHMgYW55IHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZzogVHlwZUhhbmRsZXI8c3RyaW5nPiA9IChcbiAgeyB2YWx1ZSB9OiBBcmd1bWVudFZhbHVlLFxuKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSw0Q0FBNEMsR0FDNUMsT0FBTyxNQUFNLFNBQThCLENBQ3pDLEVBQUUsS0FBSyxFQUFpQjtFQUV4QixPQUFPO0FBQ1QsRUFBRSJ9
+// denoCacheMetadata=8414343569222381439,9500255748461623515 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/e7bceb0bf728eb749e9c145128c9520b662a295ecadd239f363a05c52f178b5f.js b/vendor/gen/https/deno.land/e7bceb0bf728eb749e9c145128c9520b662a295ecadd239f363a05c52f178b5f.js
new file mode 100644
index 0000000..8e71e4a
--- /dev/null
+++ b/vendor/gen/https/deno.land/e7bceb0bf728eb749e9c145128c9520b662a295ecadd239f363a05c52f178b5f.js
@@ -0,0 +1,10 @@
+export * from "./flags.ts";
+export * from "./types.ts";
+export * from "./types/boolean.ts";
+export * from "./types/integer.ts";
+export * from "./types/number.ts";
+export * from "./types/string.ts";
+export * from "./deprecated.ts";
+export { ValidationError } from "./_errors.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZsYWdzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvYm9vbGVhbi50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvaW50ZWdlci50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvbnVtYmVyLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9zdHJpbmcudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlcHJlY2F0ZWQudHNcIjtcbmV4cG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL19lcnJvcnMudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWE7QUFDM0IsY0FBYyxhQUFhO0FBQzNCLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsa0JBQWtCO0FBQ2hDLFNBQVMsZUFBZSxRQUFRLGVBQWUifQ==
+// denoCacheMetadata=2527565331018455288,18268326891733127118 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/e81338b01519599c2e66a798b892305c443ca2ffb64f85cb4287a76d893b2650.js b/vendor/gen/https/deno.land/e81338b01519599c2e66a798b892305c443ca2ffb64f85cb4287a76d893b2650.js
new file mode 100644
index 0000000..56fc1b9
--- /dev/null
+++ b/vendor/gen/https/deno.land/e81338b01519599c2e66a798b892305c443ca2ffb64f85cb4287a76d893b2650.js
@@ -0,0 +1,10 @@
+import { InvalidTypeError } from "../_errors.ts";
+/** Number type handler. Excepts any numeric value. */ export const number = (type)=>{
+ const value = Number(type.value);
+ if (Number.isFinite(value)) {
+ return value;
+ }
+ throw new InvalidTypeError(type);
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvdHlwZXMvbnVtYmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXJndW1lbnRWYWx1ZSwgVHlwZUhhbmRsZXIgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IEludmFsaWRUeXBlRXJyb3IgfSBmcm9tIFwiLi4vX2Vycm9ycy50c1wiO1xuXG4vKiogTnVtYmVyIHR5cGUgaGFuZGxlci4gRXhjZXB0cyBhbnkgbnVtZXJpYyB2YWx1ZS4gKi9cbmV4cG9ydCBjb25zdCBudW1iZXI6IFR5cGVIYW5kbGVyPG51bWJlcj4gPSAodHlwZTogQXJndW1lbnRWYWx1ZSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHZhbHVlID0gTnVtYmVyKHR5cGUudmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHRocm93IG5ldyBJbnZhbGlkVHlwZUVycm9yKHR5cGUpO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxTQUFTLGdCQUFnQixRQUFRLGdCQUFnQjtBQUVqRCxvREFBb0QsR0FDcEQsT0FBTyxNQUFNLFNBQThCLENBQUM7RUFDMUMsTUFBTSxRQUFRLE9BQU8sS0FBSyxLQUFLO0VBQy9CLElBQUksT0FBTyxRQUFRLENBQUMsUUFBUTtJQUMxQixPQUFPO0VBQ1Q7RUFFQSxNQUFNLElBQUksaUJBQWlCO0FBQzdCLEVBQUUifQ==
+// denoCacheMetadata=9648384051611906888,12881446463467088110 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/eb8f80b56106578add3c34d4a67149cce6779fec8fbebb17a7ecbcca2ef41a52.js b/vendor/gen/https/deno.land/eb8f80b56106578add3c34d4a67149cce6779fec8fbebb17a7ecbcca2ef41a52.js
new file mode 100644
index 0000000..b932f2a
--- /dev/null
+++ b/vendor/gen/https/deno.land/eb8f80b56106578add3c34d4a67149cce6779fec8fbebb17a7ecbcca2ef41a52.js
@@ -0,0 +1,163 @@
+import { GenericPrompt } from "./_generic_prompt.ts";
+import { GenericSuggestions } from "./_generic_suggestions.ts";
+import { parseNumber } from "./_utils.ts";
+import { brightBlue, yellow } from "./deps.ts";
+import { Figures } from "./figures.ts";
+/** Number prompt representation. */ export class Number extends GenericSuggestions {
+ /** Execute the prompt and show cursor on end. */ static prompt(options) {
+ if (typeof options === "string") {
+ options = {
+ message: options
+ };
+ }
+ return new this({
+ pointer: brightBlue(Figures.POINTER_SMALL),
+ prefix: yellow("? "),
+ indent: " ",
+ listPointer: brightBlue(Figures.POINTER),
+ maxRows: 8,
+ min: -Infinity,
+ max: Infinity,
+ float: false,
+ round: 2,
+ ...options,
+ files: false,
+ keys: {
+ increaseValue: [
+ "up",
+ "u",
+ "+"
+ ],
+ decreaseValue: [
+ "down",
+ "d",
+ "-"
+ ],
+ ...options.keys ?? {}
+ }
+ }).prompt();
+ }
+ /**
+ * Inject prompt value. Can be used for unit tests or pre selections.
+ * @param value Input value.
+ */ static inject(value) {
+ GenericPrompt.inject(value);
+ }
+ success(value) {
+ this.saveSuggestions(value);
+ return super.success(value);
+ }
+ /**
+ * Handle user input event.
+ * @param event Key event.
+ */ async handleEvent(event) {
+ switch(true){
+ case this.settings.suggestions && this.isKey(this.settings.keys, "next", event):
+ if (this.settings.list) {
+ this.selectPreviousSuggestion();
+ } else {
+ this.selectNextSuggestion();
+ }
+ break;
+ case this.settings.suggestions && this.isKey(this.settings.keys, "previous", event):
+ if (this.settings.list) {
+ this.selectNextSuggestion();
+ } else {
+ this.selectPreviousSuggestion();
+ }
+ break;
+ case this.isKey(this.settings.keys, "increaseValue", event):
+ this.increaseValue();
+ break;
+ case this.isKey(this.settings.keys, "decreaseValue", event):
+ this.decreaseValue();
+ break;
+ default:
+ await super.handleEvent(event);
+ }
+ }
+ /** Increase input number. */ increaseValue() {
+ this.manipulateIndex(false);
+ }
+ /** Decrease input number. */ decreaseValue() {
+ this.manipulateIndex(true);
+ }
+ /** Decrease/increase input number. */ manipulateIndex(decrease) {
+ if (this.inputValue[this.inputIndex] === "-") {
+ this.inputIndex++;
+ }
+ if (this.inputValue.length && this.inputIndex > this.inputValue.length - 1) {
+ this.inputIndex--;
+ }
+ const decimalIndex = this.inputValue.indexOf(".");
+ const [abs, dec] = this.inputValue.split(".");
+ if (dec && this.inputIndex === decimalIndex) {
+ this.inputIndex--;
+ }
+ const inDecimal = decimalIndex !== -1 && this.inputIndex > decimalIndex;
+ let value = (inDecimal ? dec : abs) || "0";
+ const oldLength = this.inputValue.length;
+ const index = inDecimal ? this.inputIndex - decimalIndex - 1 : this.inputIndex;
+ const increaseValue = Math.pow(10, value.length - index - 1);
+ value = (parseInt(value) + (decrease ? -increaseValue : increaseValue)).toString();
+ this.inputValue = !dec ? value : this.inputIndex > decimalIndex ? abs + "." + value : value + "." + dec;
+ if (this.inputValue.length > oldLength) {
+ this.inputIndex++;
+ } else if (this.inputValue.length < oldLength && this.inputValue[this.inputIndex - 1] !== "-") {
+ this.inputIndex--;
+ }
+ this.inputIndex = Math.max(0, Math.min(this.inputIndex, this.inputValue.length - 1));
+ }
+ /**
+ * Add char to input.
+ * @param char Char.
+ */ addChar(char) {
+ if (isNumeric(char)) {
+ super.addChar(char);
+ } else if (this.settings.float && char === "." && this.inputValue.indexOf(".") === -1 && (this.inputValue[0] === "-" ? this.inputIndex > 1 : this.inputIndex > 0)) {
+ super.addChar(char);
+ }
+ }
+ /**
+ * Validate input value.
+ * @param value User input value.
+ * @return True on success, false or error message on error.
+ */ validate(value) {
+ if (!isNumeric(value)) {
+ return false;
+ }
+ const val = parseFloat(value);
+ if (val > this.settings.max) {
+ return `Value must be lower or equal than ${this.settings.max}`;
+ }
+ if (val < this.settings.min) {
+ return `Value must be greater or equal than ${this.settings.min}`;
+ }
+ return true;
+ }
+ /**
+ * Map input value to output value.
+ * @param value Input value.
+ * @return Output value.
+ */ transform(value) {
+ const val = parseFloat(value);
+ if (this.settings.float) {
+ return parseFloat(val.toFixed(this.settings.round));
+ }
+ return val;
+ }
+ /**
+ * Format output value.
+ * @param value Output value.
+ */ format(value) {
+ return value.toString();
+ }
+ /** Get input input. */ getValue() {
+ return this.inputValue;
+ }
+}
+function isNumeric(value) {
+ return typeof value === "number" || !!value && !isNaN(parseNumber(value));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvcHJvbXB0L251bWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEtleUNvZGUgfSBmcm9tIFwiLi4va2V5Y29kZS9rZXlfY29kZS50c1wiO1xuaW1wb3J0IHsgR2VuZXJpY1Byb21wdCB9IGZyb20gXCIuL19nZW5lcmljX3Byb21wdC50c1wiO1xuaW1wb3J0IHtcbiAgR2VuZXJpY1N1Z2dlc3Rpb25zLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNLZXlzLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNPcHRpb25zLFxuICBHZW5lcmljU3VnZ2VzdGlvbnNTZXR0aW5ncyxcbn0gZnJvbSBcIi4vX2dlbmVyaWNfc3VnZ2VzdGlvbnMudHNcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vX3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBicmlnaHRCbHVlLCB5ZWxsb3cgfSBmcm9tIFwiLi9kZXBzLnRzXCI7XG5pbXBvcnQgeyBGaWd1cmVzIH0gZnJvbSBcIi4vZmlndXJlcy50c1wiO1xuXG4vKiogTnVtYmVyIGtleSBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdW1iZXJLZXlzIGV4dGVuZHMgR2VuZXJpY1N1Z2dlc3Rpb25zS2V5cyB7XG4gIGluY3JlYXNlVmFsdWU/OiBzdHJpbmdbXTtcbiAgZGVjcmVhc2VWYWx1ZT86IHN0cmluZ1tdO1xufVxuXG50eXBlIFVuc3VwcG9ydGVkT3B0aW9ucyA9IFwiZmlsZXNcIjtcblxuLyoqIE51bWJlciBwcm9tcHQgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyT3B0aW9uc1xuICBleHRlbmRzIE9taXQ8R2VuZXJpY1N1Z2dlc3Rpb25zT3B0aW9uczxudW1iZXIsIHN0cmluZz4sIFVuc3VwcG9ydGVkT3B0aW9ucz4ge1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgZmxvYXQ/OiBib29sZWFuO1xuICByb3VuZD86IG51bWJlcjtcbiAga2V5cz86IE51bWJlcktleXM7XG59XG5cbi8qKiBOdW1iZXIgcHJvbXB0IHNldHRpbmdzLiAqL1xuaW50ZXJmYWNlIE51bWJlclNldHRpbmdzIGV4dGVuZHMgR2VuZXJpY1N1Z2dlc3Rpb25zU2V0dGluZ3M8bnVtYmVyLCBzdHJpbmc+IHtcbiAgbWluOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xuICBmbG9hdDogYm9vbGVhbjtcbiAgcm91bmQ6IG51bWJlcjtcbiAga2V5cz86IE51bWJlcktleXM7XG59XG5cbi8qKiBOdW1iZXIgcHJvbXB0IHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IGNsYXNzIE51bWJlciBleHRlbmRzIEdlbmVyaWNTdWdnZXN0aW9uczxudW1iZXIsIHN0cmluZywgTnVtYmVyU2V0dGluZ3M+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHByb21wdCBhbmQgc2hvdyBjdXJzb3Igb24gZW5kLiAqL1xuICBwdWJsaWMgc3RhdGljIHByb21wdChvcHRpb25zOiBzdHJpbmcgfCBOdW1iZXJPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB7IG1lc3NhZ2U6IG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgcG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVJfU01BTEwpLFxuICAgICAgcHJlZml4OiB5ZWxsb3coXCI/IFwiKSxcbiAgICAgIGluZGVudDogXCIgXCIsXG4gICAgICBsaXN0UG9pbnRlcjogYnJpZ2h0Qmx1ZShGaWd1cmVzLlBPSU5URVIpLFxuICAgICAgbWF4Um93czogOCxcbiAgICAgIG1pbjogLUluZmluaXR5LFxuICAgICAgbWF4OiBJbmZpbml0eSxcbiAgICAgIGZsb2F0OiBmYWxzZSxcbiAgICAgIHJvdW5kOiAyLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGZpbGVzOiBmYWxzZSxcbiAgICAgIGtleXM6IHtcbiAgICAgICAgaW5jcmVhc2VWYWx1ZTogW1widXBcIiwgXCJ1XCIsIFwiK1wiXSxcbiAgICAgICAgZGVjcmVhc2VWYWx1ZTogW1wiZG93blwiLCBcImRcIiwgXCItXCJdLFxuICAgICAgICAuLi4ob3B0aW9ucy5rZXlzID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfSkucHJvbXB0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0IHByb21wdCB2YWx1ZS4gQ2FuIGJlIHVzZWQgZm9yIHVuaXQgdGVzdHMgb3IgcHJlIHNlbGVjdGlvbnMuXG4gICAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW5qZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBHZW5lcmljUHJvbXB0LmluamVjdCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VjY2Vzcyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICB0aGlzLnNhdmVTdWdnZXN0aW9ucyh2YWx1ZSk7XG4gICAgcmV0dXJuIHN1cGVyLnN1Y2Nlc3ModmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB1c2VyIGlucHV0IGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgS2V5IGV2ZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUV2ZW50KGV2ZW50OiBLZXlDb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHRoaXMuc2V0dGluZ3Muc3VnZ2VzdGlvbnMgJiZcbiAgICAgICAgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwibmV4dFwiLCBldmVudCk6XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxpc3QpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzU3VnZ2VzdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5zZXR0aW5ncy5zdWdnZXN0aW9ucyAmJlxuICAgICAgICB0aGlzLmlzS2V5KHRoaXMuc2V0dGluZ3Mua2V5cywgXCJwcmV2aW91c1wiLCBldmVudCk6XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxpc3QpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE5leHRTdWdnZXN0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RQcmV2aW91c1N1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwiaW5jcmVhc2VWYWx1ZVwiLCBldmVudCk6XG4gICAgICAgIHRoaXMuaW5jcmVhc2VWYWx1ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0tleSh0aGlzLnNldHRpbmdzLmtleXMsIFwiZGVjcmVhc2VWYWx1ZVwiLCBldmVudCk6XG4gICAgICAgIHRoaXMuZGVjcmVhc2VWYWx1ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGF3YWl0IHN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiogSW5jcmVhc2UgaW5wdXQgbnVtYmVyLiAqL1xuICBwdWJsaWMgaW5jcmVhc2VWYWx1ZSgpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGVJbmRleChmYWxzZSk7XG4gIH1cblxuICAvKiogRGVjcmVhc2UgaW5wdXQgbnVtYmVyLiAqL1xuICBwdWJsaWMgZGVjcmVhc2VWYWx1ZSgpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGVJbmRleCh0cnVlKTtcbiAgfVxuXG4gIC8qKiBEZWNyZWFzZS9pbmNyZWFzZSBpbnB1dCBudW1iZXIuICovXG4gIHByb3RlY3RlZCBtYW5pcHVsYXRlSW5kZXgoZGVjcmVhc2U/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRWYWx1ZVt0aGlzLmlucHV0SW5kZXhdID09PSBcIi1cIikge1xuICAgICAgdGhpcy5pbnB1dEluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCAmJiAodGhpcy5pbnB1dEluZGV4ID4gdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCAtIDEpXG4gICAgKSB7XG4gICAgICB0aGlzLmlucHV0SW5kZXgtLTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNpbWFsSW5kZXg6IG51bWJlciA9IHRoaXMuaW5wdXRWYWx1ZS5pbmRleE9mKFwiLlwiKTtcbiAgICBjb25zdCBbYWJzLCBkZWNdID0gdGhpcy5pbnB1dFZhbHVlLnNwbGl0KFwiLlwiKTtcblxuICAgIGlmIChkZWMgJiYgdGhpcy5pbnB1dEluZGV4ID09PSBkZWNpbWFsSW5kZXgpIHtcbiAgICAgIHRoaXMuaW5wdXRJbmRleC0tO1xuICAgIH1cblxuICAgIGNvbnN0IGluRGVjaW1hbDogYm9vbGVhbiA9IGRlY2ltYWxJbmRleCAhPT0gLTEgJiZcbiAgICAgIHRoaXMuaW5wdXRJbmRleCA+IGRlY2ltYWxJbmRleDtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IChpbkRlY2ltYWwgPyBkZWMgOiBhYnMpIHx8IFwiMFwiO1xuICAgIGNvbnN0IG9sZExlbmd0aDogbnVtYmVyID0gdGhpcy5pbnB1dFZhbHVlLmxlbmd0aDtcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gaW5EZWNpbWFsXG4gICAgICA/IHRoaXMuaW5wdXRJbmRleCAtIGRlY2ltYWxJbmRleCAtIDFcbiAgICAgIDogdGhpcy5pbnB1dEluZGV4O1xuICAgIGNvbnN0IGluY3JlYXNlVmFsdWUgPSBNYXRoLnBvdygxMCwgdmFsdWUubGVuZ3RoIC0gaW5kZXggLSAxKTtcblxuICAgIHZhbHVlID0gKHBhcnNlSW50KHZhbHVlKSArIChkZWNyZWFzZSA/IC1pbmNyZWFzZVZhbHVlIDogaW5jcmVhc2VWYWx1ZSkpXG4gICAgICAudG9TdHJpbmcoKTtcblxuICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICFkZWNcbiAgICAgID8gdmFsdWVcbiAgICAgIDogKHRoaXMuaW5wdXRJbmRleCA+IGRlY2ltYWxJbmRleFxuICAgICAgICA/IGFicyArIFwiLlwiICsgdmFsdWVcbiAgICAgICAgOiB2YWx1ZSArIFwiLlwiICsgZGVjKTtcblxuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoID4gb2xkTGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0SW5kZXgrKztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCA8IG9sZExlbmd0aCAmJlxuICAgICAgdGhpcy5pbnB1dFZhbHVlW3RoaXMuaW5wdXRJbmRleCAtIDFdICE9PSBcIi1cIlxuICAgICkge1xuICAgICAgdGhpcy5pbnB1dEluZGV4LS07XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dEluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4odGhpcy5pbnB1dEluZGV4LCB0aGlzLmlucHV0VmFsdWUubGVuZ3RoIC0gMSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY2hhciB0byBpbnB1dC5cbiAgICogQHBhcmFtIGNoYXIgQ2hhci5cbiAgICovXG4gIHByb3RlY3RlZCBhZGRDaGFyKGNoYXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChpc051bWVyaWMoY2hhcikpIHtcbiAgICAgIHN1cGVyLmFkZENoYXIoY2hhcik7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuc2V0dGluZ3MuZmxvYXQgJiZcbiAgICAgIGNoYXIgPT09IFwiLlwiICYmXG4gICAgICB0aGlzLmlucHV0VmFsdWUuaW5kZXhPZihcIi5cIikgPT09IC0xICYmXG4gICAgICAodGhpcy5pbnB1dFZhbHVlWzBdID09PSBcIi1cIiA/IHRoaXMuaW5wdXRJbmRleCA+IDEgOiB0aGlzLmlucHV0SW5kZXggPiAwKVxuICAgICkge1xuICAgICAgc3VwZXIuYWRkQ2hhcihjaGFyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgaW5wdXQgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBVc2VyIGlucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3IgZXJyb3IgbWVzc2FnZSBvbiBlcnJvci5cbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB8IHN0cmluZyB7XG4gICAgaWYgKCFpc051bWVyaWModmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsOiBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblxuICAgIGlmICh2YWwgPiB0aGlzLnNldHRpbmdzLm1heCkge1xuICAgICAgcmV0dXJuIGBWYWx1ZSBtdXN0IGJlIGxvd2VyIG9yIGVxdWFsIHRoYW4gJHt0aGlzLnNldHRpbmdzLm1heH1gO1xuICAgIH1cblxuICAgIGlmICh2YWwgPCB0aGlzLnNldHRpbmdzLm1pbikge1xuICAgICAgcmV0dXJuIGBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAke3RoaXMuc2V0dGluZ3MubWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGlucHV0IHZhbHVlIHRvIG91dHB1dCB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlLlxuICAgKiBAcmV0dXJuIE91dHB1dCB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsOiBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmZsb2F0KSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwudG9GaXhlZCh0aGlzLnNldHRpbmdzLnJvdW5kKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgb3V0cHV0IHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgT3V0cHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKiBHZXQgaW5wdXQgaW5wdXQuICovXG4gIHByb3RlY3RlZCBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlucHV0VmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOdW1lcmljKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB2YWx1ZSBpcyBudW1iZXIgfCBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8ICghIXZhbHVlICYmICFpc05hTihwYXJzZU51bWJlcih2YWx1ZSkpKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxTQUFTLGFBQWEsUUFBUSx1QkFBdUI7QUFDckQsU0FDRSxrQkFBa0IsUUFJYiw0QkFBNEI7QUFDbkMsU0FBUyxXQUFXLFFBQVEsY0FBYztBQUMxQyxTQUFTLFVBQVUsRUFBRSxNQUFNLFFBQVEsWUFBWTtBQUMvQyxTQUFTLE9BQU8sUUFBUSxlQUFlO0FBNkJ2QyxrQ0FBa0MsR0FDbEMsT0FBTyxNQUFNLGVBQWU7RUFDMUIsK0NBQStDLEdBQy9DLE9BQWMsT0FBTyxPQUErQixFQUFtQjtJQUNyRSxJQUFJLE9BQU8sWUFBWSxVQUFVO01BQy9CLFVBQVU7UUFBRSxTQUFTO01BQVE7SUFDL0I7SUFFQSxPQUFPLElBQUksSUFBSSxDQUFDO01BQ2QsU0FBUyxXQUFXLFFBQVEsYUFBYTtNQUN6QyxRQUFRLE9BQU87TUFDZixRQUFRO01BQ1IsYUFBYSxXQUFXLFFBQVEsT0FBTztNQUN2QyxT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
+// denoCacheMetadata=1904135058651224109,14320392943239601583 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ed1f5033c2c651877a8a846f864c21d6250a6a1b470777a89b1579a83b93de0b.js b/vendor/gen/https/deno.land/ed1f5033c2c651877a8a846f864c21d6250a6a1b470777a89b1579a83b93de0b.js
new file mode 100644
index 0000000..dd843ba
--- /dev/null
+++ b/vendor/gen/https/deno.land/ed1f5033c2c651877a8a846f864c21d6250a6a1b470777a89b1579a83b93de0b.js
@@ -0,0 +1,387 @@
+import { posix } from "../deps/path.ts";
+import { getExtension, normalizePath } from "./utils/path.ts";
+import { mergeData } from "./utils/merge_data.ts";
+import { getBasename, getPageUrl } from "./utils/page_url.ts";
+import { getPageDate } from "./utils/page_date.ts";
+import { Page, StaticFile } from "./file.ts";
+import { toProxy } from "./components.ts";
+/**
+ * Scan and load files from the source folder
+ * with the data, pages, assets and static files
+ */ export default class Source {
+ /** Filesystem reader to scan folders */ fs;
+ /** To load all _data files */ dataLoader;
+ /** To load all components */ componentLoader;
+ /** Info about how to handle different file formats */ formats;
+ /** The list of paths to ignore */ ignored = new Set();
+ /** The path filters to ignore */ filters = [];
+ /** The data assigned per path */ scopedData;
+ /** The pages assigned per path */ scopedPages;
+ /** The components assigned per path */ scopedComponents;
+ /** Use pretty URLs */ prettyUrls;
+ /** Extra code generated by components */ extraCode = new Map();
+ components;
+ /** The data assigned per path */ data = new Map();
+ /** Custom parsers for basenames */ basenameParsers = [];
+ /** Files added with `site.add()` or `site.copy()` */ addedFiles = new Map();
+ constructor(options){
+ this.dataLoader = options.dataLoader;
+ this.componentLoader = options.componentLoader;
+ this.fs = options.fs;
+ this.formats = options.formats;
+ this.components = options.components;
+ this.scopedData = options.scopedData;
+ this.scopedPages = options.scopedPages;
+ this.scopedComponents = options.scopedComponents;
+ this.prettyUrls = options.prettyUrls;
+ this.basenameParsers = options.basenameParsers;
+ }
+ addIgnoredPath(path) {
+ this.ignored.add(normalizePath(path));
+ }
+ addIgnoreFilter(filter) {
+ this.filters.push(filter);
+ }
+ addFile(from, to, isCopy = false) {
+ if (from.startsWith(".")) {
+ if (typeof to !== "function") {
+ throw new Error(`Added files by extensions like "${from}" expects a function to calculate the destination but got a string "${to}"`);
+ }
+ } else {
+ from = normalizePath(from);
+ }
+ if (typeof to === "string") {
+ if (to.endsWith("/")) {
+ to = to.slice(0, -1);
+ }
+ to = normalizePath(to);
+ }
+ this.addedFiles.set(from, [
+ to,
+ isCopy
+ ]);
+ }
+ async build(...buildFilters) {
+ const pages = [];
+ const staticFiles = [];
+ this.data.clear();
+ await this.#addDirectory(buildFilters, this.fs.entries.get("/"), "/", new Map(), {}, pages, staticFiles);
+ return [
+ pages,
+ staticFiles
+ ];
+ }
+ /** Returns the pages with extra code generated by the components */ *getComponentsExtraCode() {
+ const files = {
+ css: {
+ path: this.components.cssFile,
+ entries: new Map()
+ },
+ js: {
+ path: this.components.jsFile,
+ entries: new Map()
+ }
+ };
+ for (const [path, content] of this.extraCode){
+ if (path.endsWith(".css")) {
+ files.css.entries.set(path, content);
+ continue;
+ }
+ if (path.endsWith(".js") || path.endsWith(".ts")) {
+ files.js.entries.set(path, content);
+ continue;
+ }
+ throw new Error(`Unknown component asset extension: ${path}`);
+ }
+ for (const { path, entries } of Object.values(files)){
+ if (entries.size) {
+ yield {
+ path,
+ entries
+ };
+ }
+ }
+ }
+ async #addDirectory(buildFilters, dir, parentPath, parentComponents, parentData, pages, staticFiles, destination) {
+ if (buildFilters.some((filter)=>!filter(dir))) {
+ return;
+ }
+ // Load _data
+ const dirData = await this.#loadDirData(dir, parentData);
+ let dirPath = posix.join(parentPath, dirData.basename);
+ // Load _components
+ const dirComponents = await this.#loadDirComponents(dir, parentComponents, dirData);
+ // Create the components proxy only if new components were found
+ if (dirComponents !== parentComponents) {
+ dirData.comp = toProxy(dirComponents, this.extraCode);
+ }
+ // Store the directory data to be used by other plugins
+ this.data.set(dir.path, dirData);
+ this.data.set(dirPath, dirData);
+ // Load pages created with `site.page()`
+ for await (const page of this.#getDirPages(dir.path, dirData)){
+ if (buildFilters.some((filter)=>!filter(dir, page))) {
+ continue;
+ }
+ pages.push(page);
+ }
+ // The folder is added with `site.add("folder")`
+ const added = this.addedFiles.get(dir.path) || this.addedFiles.get(dirPath) || this.addedFiles.get(`${dir.path}/`) || this.addedFiles.get(`${dirPath}/`);
+ if (added) {
+ const [dest, isCopy] = added;
+ if (typeof dest === "function") {
+ const prev = destination?.[0];
+ destination = [
+ prev ? (path)=>dest(prev(path)) : dest,
+ isCopy
+ ];
+ } else {
+ dirPath = dest;
+ destination ??= [
+ (path)=>path,
+ isCopy
+ ];
+ }
+ }
+ // Iterate over the directory entries
+ for (const entry of dir.children.values()){
+ if (buildFilters.some((filter)=>!filter(entry))) {
+ continue;
+ }
+ if (entry.type === "file") {
+ await this.#addFile(buildFilters, entry, dirPath, dirData, pages, staticFiles, destination);
+ continue;
+ }
+ if (entry.type === "directory") {
+ if (this.#isIgnored(entry)) {
+ // Add possible inner entries
+ // For example: site.ignore("folder").add("folder/file.ext")
+ for (const path of this.addedFiles.keys()){
+ if (path !== entry.path && !path.startsWith(`${entry.path}/`)) {
+ continue;
+ }
+ const subEntry = this.fs.entries.get(path);
+ if (!subEntry) {
+ continue;
+ }
+ if (subEntry.type === "file") {
+ await this.#addFile(buildFilters, subEntry, dirPath, dirData, pages, staticFiles, destination);
+ continue;
+ }
+ if (subEntry.type === "directory") {
+ await this.#addDirectory(buildFilters, subEntry, dirPath, dirComponents, dirData, pages, staticFiles, destination);
+ }
+ }
+ continue;
+ }
+ await this.#addDirectory(buildFilters, entry, dirPath, dirComponents, dirData, pages, staticFiles, destination);
+ }
+ }
+ }
+ async #addFile(buildFilters, file, dirPath, dirData, pages, staticFiles, destination) {
+ // The file is added with `site.add("file.ext")`
+ const added = this.addedFiles.get(file.path);
+ let [dest, isCopy] = added ?? destination ?? [];
+ // Merge the destination with the parent folder
+ if (added) {
+ const [addedDest] = added;
+ if (typeof addedDest === "function") {
+ const parentDest = destination?.[0];
+ dest = parentDest ? (path)=>addedDest(parentDest(path)) : addedDest;
+ }
+ } else if (this.#isIgnored(file)) {
+ // The file or parent folder is ignored and the file not explicitly added
+ return;
+ }
+ const format = this.formats.search(file.path);
+ // The format is a page `site.loadPages([".ext"])`
+ if (format?.isPage && !isCopy) {
+ const page = await this.#loadPage(file, format, dirData, dirPath, dest);
+ if (page && (!buildFilters.length || buildFilters.every((filter)=>filter(file, page)))) {
+ pages.push(page);
+ }
+ return;
+ }
+ const ext = format?.ext || getExtension(file.name);
+ // The file is added explicitly with `site.add()` or `site.copy()`
+ if (added) {
+ const staticFile = createFile(file, ext, dirPath, dirData, dest);
+ staticFile.isCopy = !!isCopy;
+ staticFiles.push(staticFile);
+ return;
+ }
+ // The file is added with `site.add([".ext"])`
+ const addedExt = this.addedFiles.get(ext);
+ if (addedExt) {
+ const [addedExtDest, addedExtCopy] = addedExt;
+ if (typeof addedExtDest === "function") {
+ const parentDest = dest;
+ dest = typeof parentDest === "function" ? (path)=>addedExtDest(parentDest(path)) : addedExtDest;
+ }
+ if (addedExtCopy) {
+ isCopy = true;
+ }
+ }
+ // If `dest` exists is because:
+ // - the file was added with `site.add([".ext"])`
+ // - or any parent folder with `site.add("folder")`
+ if (dest) {
+ const staticFile = createFile(file, ext, dirPath, dirData, dest);
+ staticFile.isCopy = !!isCopy;
+ staticFiles.push(staticFile);
+ }
+ }
+ /** Check if the entry must be ignored by Lume */ #isIgnored(entry) {
+ return entry.name.startsWith(".") && (entry.type !== "directory" || !entry.path.endsWith("/.well-known")) || entry.name.startsWith("_") || this.ignored.has(entry.path) || this.filters.some((filter)=>filter(entry.path));
+ }
+ /** Load a folder's _data and merge it with the parent data */ async #loadDirData(dir, parentData) {
+ // Parse the directory's basename
+ const { basename, ...parsedData } = runBasenameParsers(dir.name, this.basenameParsers);
+ // Load _data files
+ const dirDatas = [];
+ for (const entry of dir.children.values()){
+ if (entry.type === "file" && entry.name.startsWith("_data.") || entry.type === "directory" && entry.name === "_data") {
+ const loaded = await this.dataLoader.load(entry);
+ if (loaded) {
+ dirDatas.push(loaded);
+ }
+ }
+ }
+ // Data registered from site.data()
+ const scopedData = this.scopedData.get(dir.path) || {};
+ // Merge directory data
+ return mergeData(parentData, {
+ basename
+ }, scopedData, parsedData, ...dirDatas);
+ }
+ /**
+ * Load _components, merge them with the parent components
+ * and store on the data object
+ */ async #loadDirComponents(dir, parentComponents, data) {
+ // Components registered from site.component()
+ const scopedComponents = this.scopedComponents.get(dir.path);
+ let loadedComponents;
+ // Load _components files
+ for (const entry of dir.children.values()){
+ if (entry.type === "directory" && entry.name === "_components") {
+ loadedComponents = await this.componentLoader.load(entry, data);
+ break;
+ }
+ }
+ // Merge the components
+ if (scopedComponents || loadedComponents) {
+ parentComponents = mergeComponents(parentComponents, scopedComponents || new Map(), loadedComponents || new Map());
+ }
+ return parentComponents;
+ }
+ async *#getDirPages(path, dirData) {
+ const pages = this.scopedPages.get(path);
+ if (!pages) {
+ return;
+ }
+ for (const data of pages){
+ const basename = posix.basename(data.url).replace(/\.[\w.]+$/, "");
+ const page = new Page();
+ page.data = mergeData(dirData, {
+ basename,
+ date: new Date()
+ }, data);
+ const url = getPageUrl(page, this.prettyUrls, path);
+ if (!url) {
+ continue;
+ }
+ page.data.url = url;
+ page.data.basename = getBasename(url);
+ page.data.date = getPageDate(page);
+ page.data.page = page;
+ // Prevent running the layout if the page is an asset
+ if (!data.layout && !page.outputPath.endsWith(".html")) {
+ delete page.data.layout;
+ }
+ yield page;
+ }
+ }
+ /** Load a page from a file entry */ async #loadPage(entry, format, dirData, dirPath, destination) {
+ // The format is a page or asset
+ const { loader, ext } = format;
+ if (!loader) {
+ throw new Error(`Missing loader for the page ${entry.path}`);
+ }
+ const { basename, ...parsedData } = runBasenameParsers(entry.name.slice(0, -ext.length), this.basenameParsers);
+ // Create the page
+ const page = new Page({
+ path: entry.path.slice(0, -ext.length),
+ ext,
+ entry
+ });
+ // Load and merge the page data
+ const pageData = await entry.getContent(loader);
+ page.data = mergeData(dirData, {
+ basename
+ }, this.scopedData.get(entry.path) || {}, parsedData, pageData);
+ // Calculate the page URL
+ const url = getPageUrl(page, this.prettyUrls, dirPath, destination);
+ if (!url) {
+ return;
+ }
+ page.data.url = url;
+ page.data.basename = getBasename(url);
+ // Calculate the page date
+ page.data.date = getPageDate(page);
+ // Save the page object in the data object
+ page.data.page = page;
+ // Prevent running the layout if the page is not HTML
+ if (!pageData.layout && !page.outputPath.endsWith(".html")) {
+ delete page.data.layout;
+ }
+ return page;
+ }
+}
+/** Merge the cascade components */ function mergeComponents(...components) {
+ return components.reduce((previous, current)=>{
+ const components = new Map(previous);
+ for (const [key, value] of current){
+ if (components.has(key)) {
+ const previousValue = components.get(key);
+ if (previousValue instanceof Map && value instanceof Map) {
+ components.set(key, mergeComponents(value, previousValue));
+ } else {
+ components.set(key, value);
+ }
+ } else {
+ components.set(key, value);
+ }
+ }
+ return components;
+ });
+}
+function runBasenameParsers(basename, basenameParsers) {
+ const data = {
+ basename
+ };
+ for (const parser of basenameParsers){
+ const res = parser(basename);
+ if (res === undefined) {
+ continue;
+ }
+ res.basename ??= basename;
+ Object.assign(data, res);
+ if (res.basename === "") {
+ break;
+ }
+ }
+ return data;
+}
+function createFile(entry, ext, dirPath, dirData, destination) {
+ const url = typeof destination === "string" ? destination : typeof destination === "function" ? destination(posix.join(dirPath, entry.name)) : posix.join(dirPath, entry.name);
+ return StaticFile.create({
+ ...dirData,
+ url
+ }, {
+ ext,
+ path: entry.path.slice(0, -ext.length),
+ entry
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9zb3VyY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcG9zaXggfSBmcm9tIFwiLi4vZGVwcy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBnZXRFeHRlbnNpb24sIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwiLi91dGlscy9wYXRoLnRzXCI7XG5pbXBvcnQgeyBtZXJnZURhdGEgfSBmcm9tIFwiLi91dGlscy9tZXJnZV9kYXRhLnRzXCI7XG5pbXBvcnQgeyBnZXRCYXNlbmFtZSwgZ2V0UGFnZVVybCB9IGZyb20gXCIuL3V0aWxzL3BhZ2VfdXJsLnRzXCI7XG5pbXBvcnQgeyBnZXRQYWdlRGF0ZSB9IGZyb20gXCIuL3V0aWxzL3BhZ2VfZGF0ZS50c1wiO1xuaW1wb3J0IHsgUGFnZSwgU3RhdGljRmlsZSB9IGZyb20gXCIuL2ZpbGUudHNcIjtcbmltcG9ydCB7IHRvUHJveHkgfSBmcm9tIFwiLi9jb21wb25lbnRzLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgRGF0YSwgUmF3RGF0YSB9IGZyb20gXCIuL2ZpbGUudHNcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBGUywgRW50cnkgfSBmcm9tIFwiLi9mcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEZvcm1hdHMsIEZvcm1hdCB9IGZyb20gXCIuL2Zvcm1hdHMudHNcIjtcbmltcG9ydCB0eXBlIERhdGFMb2FkZXIgZnJvbSBcIi4vZGF0YV9sb2FkZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgU2NvcGVGaWx0ZXIgfSBmcm9tIFwiLi9zY29wZXMudHNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50TG9hZGVyLCBDb21wb25lbnRzIH0gZnJvbSBcIi4vY29tcG9uZW50cy50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBmb3JtYXRzOiBGb3JtYXRzO1xuICBkYXRhTG9hZGVyOiBEYXRhTG9hZGVyO1xuICBjb21wb25lbnRMb2FkZXI6IENvbXBvbmVudExvYWRlcjtcbiAgc2NvcGVkRGF0YTogTWFwPHN0cmluZywgUmF3RGF0YT47XG4gIHNjb3BlZFBhZ2VzOiBNYXA8c3RyaW5nLCBSYXdEYXRhW10+O1xuICBzY29wZWRDb21wb25lbnRzOiBNYXA8c3RyaW5nLCBDb21wb25lbnRzPjtcbiAgYmFzZW5hbWVQYXJzZXJzOiBCYXNlbmFtZVBhcnNlcltdO1xuICBmczogRlM7XG4gIHByZXR0eVVybHM6IGJvb2xlYW47XG4gIGNvbXBvbmVudHM6IHtcbiAgICBjc3NGaWxlOiBzdHJpbmc7XG4gICAganNGaWxlOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogU2NhbiBhbmQgbG9hZCBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgZm9sZGVyXG4gKiB3aXRoIHRoZSBkYXRhLCBwYWdlcywgYXNzZXRzIGFuZCBzdGF0aWMgZmlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291cmNlIHtcbiAgLyoqIEZpbGVzeXN0ZW0gcmVhZGVyIHRvIHNjYW4gZm9sZGVycyAqL1xuICBmczogRlM7XG5cbiAgLyoqIFRvIGxvYWQgYWxsIF9kYXRhIGZpbGVzICovXG4gIGRhdGFMb2FkZXI6IERhdGFMb2FkZXI7XG5cbiAgLyoqIFRvIGxvYWQgYWxsIGNvbXBvbmVudHMgKi9cbiAgY29tcG9uZW50TG9hZGVyOiBDb21wb25lbnRMb2FkZXI7XG5cbiAgLyoqIEluZm8gYWJvdXQgaG93IHRvIGhhbmRsZSBkaWZmZXJlbnQgZmlsZSBmb3JtYXRzICovXG4gIGZvcm1hdHM6IEZvcm1hdHM7XG5cbiAgLyoqIFRoZSBsaXN0IG9mIHBhdGhzIHRvIGlnbm9yZSAqL1xuICBpZ25vcmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqIFRoZSBwYXRoIGZpbHRlcnMgdG8gaWdub3JlICovXG4gIGZpbHRlcnM6IFNjb3BlRmlsdGVyW10gPSBbXTtcblxuICAvKiogVGhlIGRhdGEgYXNzaWduZWQgcGVyIHBhdGggKi9cbiAgc2NvcGVkRGF0YTogTWFwPHN0cmluZywgUmF3RGF0YT47XG5cbiAgLyoqIFRoZSBwYWdlcyBhc3NpZ25lZCBwZXIgcGF0aCAqL1xuICBzY29wZWRQYWdlczogTWFwPHN0cmluZywgUmF3RGF0YVtdPjtcblxuICAvKiogVGhlIGNvbXBvbmVudHMgYXNzaWduZWQgcGVyIHBhdGggKi9cbiAgc2NvcGVkQ29tcG9uZW50czogTWFwPHN0cmluZywgQ29tcG9uZW50cz47XG5cbiAgLyoqIFVzZSBwcmV0dHkgVVJMcyAqL1xuICBwcmV0dHlVcmxzOiBib29sZWFuO1xuXG4gIC8qKiBFeHRyYSBjb2RlIGdlbmVyYXRlZCBieSBjb21wb25lbnRzICovXG4gIGV4dHJhQ29kZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCBFbnRyeT4oKTtcblxuICBjb21wb25lbnRzOiB7XG4gICAgLyoqIEZpbGUgbmFtZSB1c2VkIHRvIG91dHB1dCB0aGUgZXh0cmEgQ1NTIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb25lbnRzICovXG4gICAgY3NzRmlsZTogc3RyaW5nO1xuXG4gICAgLyoqIEZpbGUgbmFtZSB1c2VkIHRvIG91dHB1dCB0aGUgZXh0cmEgSmF2YVNjcmlwdCBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcG9uZW50cyAqL1xuICAgIGpzRmlsZTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBUaGUgZGF0YSBhc3NpZ25lZCBwZXIgcGF0aCAqL1xuICBkYXRhID0gbmV3IE1hcDxzdHJpbmcsIFBhcnRpYWw8RGF0YT4+KCk7XG5cbiAgLyoqIEN1c3RvbSBwYXJzZXJzIGZvciBiYXNlbmFtZXMgKi9cbiAgYmFzZW5hbWVQYXJzZXJzOiBCYXNlbmFtZVBhcnNlcltdID0gW107XG5cbiAgLyoqIEZpbGVzIGFkZGVkIHdpdGggYHNpdGUuYWRkKClgIG9yIGBzaXRlLmNvcHkoKWAgKi9cbiAgYWRkZWRGaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBbc3RyaW5nIHwgRGVzdGluYXRpb24sIGJvb2xlYW5dPigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLmRhdGFMb2FkZXIgPSBvcHRpb25zLmRhdGFMb2FkZXI7XG4gICAgdGhpcy5jb21wb25lbnRMb2FkZXIgPSBvcHRpb25zLmNvbXBvbmVudExvYWRlcjtcbiAgICB0aGlzLmZzID0gb3B0aW9ucy5mcztcbiAgICB0aGlzLmZvcm1hdHMgPSBvcHRpb25zLmZvcm1hdHM7XG4gICAgdGhpcy5jb21wb25lbnRzID0gb3B0aW9ucy5jb21wb25lbnRzO1xuICAgIHRoaXMuc2NvcGVkRGF0YSA9IG9wdGlvbnMuc2NvcGVkRGF0YTtcbiAgICB0aGlzLnNjb3BlZFBhZ2VzID0gb3B0aW9ucy5zY29wZWRQYWdlcztcbiAgICB0aGlzLnNjb3BlZENvbXBvbmVudHMgPSBvcHRpb25zLnNjb3BlZENvbXBvbmVudHM7XG4gICAgdGhpcy5wcmV0dHlVcmxzID0gb3B0aW9ucy5wcmV0dHlVcmxzO1xuICAgIHRoaXMuYmFzZW5hbWVQYXJzZXJzID0gb3B0aW9ucy5iYXNlbmFtZVBhcnNlcnM7XG4gIH1cblxuICBhZGRJZ25vcmVkUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlnbm9yZWQuYWRkKG5vcm1hbGl6ZVBhdGgocGF0aCkpO1xuICB9XG5cbiAgYWRkSWdub3JlRmlsdGVyKGZpbHRlcjogU2NvcGVGaWx0ZXIpIHtcbiAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICB9XG5cbiAgYWRkRmlsZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcgfCBEZXN0aW5hdGlvbiwgaXNDb3B5ID0gZmFsc2UpIHtcbiAgICBpZiAoZnJvbS5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgaWYgKHR5cGVvZiB0byAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQWRkZWQgZmlsZXMgYnkgZXh0ZW5zaW9ucyBsaWtlIFwiJHtmcm9tfVwiIGV4cGVjdHMgYSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGJ1dCBnb3QgYSBzdHJpbmcgXCIke3RvfVwiYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbSA9IG5vcm1hbGl6ZVBhdGgoZnJvbSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHRvLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0byA9IHRvLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cblxuICAgICAgdG8gPSBub3JtYWxpemVQYXRoKHRvKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZGVkRmlsZXMuc2V0KGZyb20sIFt0bywgaXNDb3B5XSk7XG4gIH1cblxuICBhc3luYyBidWlsZCguLi5idWlsZEZpbHRlcnM6IEJ1aWxkRmlsdGVyW10pOiBQcm9taXNlPFtQYWdlW10sIFN0YXRpY0ZpbGVbXV0+IHtcbiAgICBjb25zdCBwYWdlczogUGFnZVtdID0gW107XG4gICAgY29uc3Qgc3RhdGljRmlsZXM6IFN0YXRpY0ZpbGVbXSA9IFtdO1xuICAgIHRoaXMuZGF0YS5jbGVhcigpO1xuXG4gICAgYXdhaXQgdGhpcy4jYWRkRGlyZWN0b3J5KFxuICAgICAgYnVpbGRGaWx0ZXJzLFxuICAgICAgdGhpcy5mcy5lbnRyaWVzLmdldChcIi9cIikhLFxuICAgICAgXCIvXCIsXG4gICAgICBuZXcgTWFwKCksXG4gICAgICB7fSxcbiAgICAgIHBhZ2VzLFxuICAgICAgc3RhdGljRmlsZXMsXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBwYWdlcyxcbiAgICAgIHN0YXRpY0ZpbGVzLFxuICAgIF07XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcGFnZXMgd2l0aCBleHRyYSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcG9uZW50cyAqL1xuICAqZ2V0Q29tcG9uZW50c0V4dHJhQ29kZSgpOiBHZW5lcmF0b3I8XG4gICAgeyBwYXRoOiBzdHJpbmc7IGVudHJpZXM6IE1hcDxzdHJpbmcsIHN0cmluZyB8IEVudHJ5PiB9XG4gID4ge1xuICAgIGNvbnN0IGZpbGVzID0ge1xuICAgICAgY3NzOiB7XG4gICAgICAgIHBhdGg6IHRoaXMuY29tcG9uZW50cy5jc3NGaWxlLFxuICAgICAgICBlbnRyaWVzOiBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgRW50cnk+KCksXG4gICAgICB9LFxuICAgICAganM6IHtcbiAgICAgICAgcGF0aDogdGhpcy5jb21wb25lbnRzLmpzRmlsZSxcbiAgICAgICAgZW50cmllczogbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IEVudHJ5PigpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgY29udGVudF0gb2YgdGhpcy5leHRyYUNvZGUpIHtcbiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLmNzc1wiKSkge1xuICAgICAgICBmaWxlcy5jc3MuZW50cmllcy5zZXQocGF0aCwgY29udGVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5qc1wiKSB8fCBwYXRoLmVuZHNXaXRoKFwiLnRzXCIpKSB7XG4gICAgICAgIGZpbGVzLmpzLmVudHJpZXMuc2V0KHBhdGgsIGNvbnRlbnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbXBvbmVudCBhc3NldCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHsgcGF0aCwgZW50cmllcyB9IG9mIE9iamVjdC52YWx1ZXMoZmlsZXMpKSB7XG4gICAgICBpZiAoZW50cmllcy5zaXplKSB7XG4gICAgICAgIHlpZWxkIHsgcGF0aCwgZW50cmllcyB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jICNhZGREaXJlY3RvcnkoXG4gICAgYnVpbGRGaWx0ZXJzOiBCdWlsZEZpbHRlcltdLFxuICAgIGRpcjogRW50cnksXG4gICAgcGFyZW50UGF0aDogc3RyaW5nLFxuICAgIHBhcmVudENvbXBvbmVudHM6IENvbXBvbmVudHMsXG4gICAgcGFyZW50RGF0YTogUGFydGlhbDxEYXRhPixcbiAgICBwYWdlczogUGFnZVtdLFxuICAgIHN0YXRpY0ZpbGVzOiBTdGF0aWNGaWxlW10sXG4gICAgZGVzdGluYXRpb24/OiBbRGVzdGluYXRpb24sIGJvb2xlYW5dLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYnVpbGRGaWx0ZXJzLnNvbWUoKGZpbHRlcikgPT4gIWZpbHRlcihkaXIpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIExvYWQgX2RhdGFcbiAgICBjb25zdCBkaXJEYXRhID0gYXdhaXQgdGhpcy4jbG9hZERpckRhdGEoZGlyLCBwYXJlbnREYXRhKTtcbiAgICBsZXQgZGlyUGF0aCA9IHBvc2l4LmpvaW4ocGFyZW50UGF0aCwgZGlyRGF0YS5iYXNlbmFtZSEpO1xuXG4gICAgLy8gTG9hZCBfY29tcG9uZW50c1xuICAgIGNvbnN0IGRpckNvbXBvbmVudHMgPSBhd2FpdCB0aGlzLiNsb2FkRGlyQ29tcG9uZW50cyhcbiAgICAgIGRpcixcbiAgICAgIHBhcmVudENvbXBvbmVudHMsXG4gICAgICBkaXJEYXRhLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGNvbXBvbmVudHMgcHJveHkgb25seSBpZiBuZXcgY29tcG9uZW50cyB3ZXJlIGZvdW5kXG4gICAgaWYgKGRpckNvbXBvbmVudHMgIT09IHBhcmVudENvbXBvbmVudHMpIHtcbiAgICAgIGRpckRhdGEuY29tcCA9IHRvUHJveHkoXG4gICAgICAgIGRpckNvbXBvbmVudHMsXG4gICAgICAgIHRoaXMuZXh0cmFDb2RlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSB0aGUgZGlyZWN0b3J5IGRhdGEgdG8gYmUgdXNlZCBieSBvdGhlciBwbHVnaW5zXG4gICAgdGhpcy5kYXRhLnNldChkaXIucGF0aCwgZGlyRGF0YSk7XG4gICAgdGhpcy5kYXRhLnNldChkaXJQYXRoLCBkaXJEYXRhKTtcblxuICAgIC8vIExvYWQgcGFnZXMgY3JlYXRlZCB3aXRoIGBzaXRlLnBhZ2UoKWBcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgdGhpcy4jZ2V0RGlyUGFnZXMoZGlyLnBhdGgsIGRpckRhdGEpKSB7XG4gICAgICBpZiAoYnVpbGRGaWx0ZXJzLnNvbWUoKGZpbHRlcikgPT4gIWZpbHRlcihkaXIsIHBhZ2UpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHBhZ2VzLnB1c2gocGFnZSk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGZvbGRlciBpcyBhZGRlZCB3aXRoIGBzaXRlLmFkZChcImZvbGRlclwiKWBcbiAgICBjb25zdCBhZGRlZCA9IHRoaXMuYWRkZWRGaWxlcy5nZXQoZGlyLnBhdGgpIHx8XG4gICAgICB0aGlzLmFkZGVkRmlsZXMuZ2V0KGRpclBhdGgpIHx8XG4gICAgICB0aGlzLmFkZGVkRmlsZXMuZ2V0KGAke2Rpci5wYXRofS9gKSB8fFxuICAgICAgdGhpcy5hZGRlZEZpbGVzLmdldChgJHtkaXJQYXRofS9gKTtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgY29uc3QgW2Rlc3QsIGlzQ29weV0gPSBhZGRlZDtcblxuICAgICAgaWYgKHR5cGVvZiBkZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc3QgcHJldiA9IGRlc3RpbmF0aW9uPy5bMF07XG4gICAgICAgIGRlc3RpbmF0aW9uID0gW1xuICAgICAgICAgIHByZXYgPyAocGF0aDogc3RyaW5nKSA9PiBkZXN0KHByZXYocGF0aCkpIDogZGVzdCxcbiAgICAgICAgICBpc0NvcHksXG4gICAgICAgIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJQYXRoID0gZGVzdDtcbiAgICAgICAgZGVzdGluYXRpb24gPz89IFsocGF0aDogc3RyaW5nKSA9PiBwYXRoLCBpc0NvcHldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZGlyZWN0b3J5IGVudHJpZXNcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGRpci5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgaWYgKGJ1aWxkRmlsdGVycy5zb21lKChmaWx0ZXIpID0+ICFmaWx0ZXIoZW50cnkpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2FkZEZpbGUoXG4gICAgICAgICAgYnVpbGRGaWx0ZXJzLFxuICAgICAgICAgIGVudHJ5LFxuICAgICAgICAgIGRpclBhdGgsXG4gICAgICAgICAgZGlyRGF0YSxcbiAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICBzdGF0aWNGaWxlcyxcbiAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgICAgaWYgKHRoaXMuI2lzSWdub3JlZChlbnRyeSkpIHtcbiAgICAgICAgICAvLyBBZGQgcG9zc2libGUgaW5uZXIgZW50cmllc1xuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBzaXRlLmlnbm9yZShcImZvbGRlclwiKS5hZGQoXCJmb2xkZXIvZmlsZS5leHRcIilcbiAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5hZGRlZEZpbGVzLmtleXMoKSkge1xuICAgICAgICAgICAgaWYgKHBhdGggIT09IGVudHJ5LnBhdGggJiYgIXBhdGguc3RhcnRzV2l0aChgJHtlbnRyeS5wYXRofS9gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3ViRW50cnkgPSB0aGlzLmZzLmVudHJpZXMuZ2V0KHBhdGgpO1xuXG4gICAgICAgICAgICBpZiAoIXN1YkVudHJ5KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ViRW50cnkudHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jYWRkRmlsZShcbiAgICAgICAgICAgICAgICBidWlsZEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgc3ViRW50cnksXG4gICAgICAgICAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgICAgICAgICBkaXJEYXRhLFxuICAgICAgICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgICAgICAgIHN0YXRpY0ZpbGVzLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1YkVudHJ5LnR5cGUgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jYWRkRGlyZWN0b3J5KFxuICAgICAgICAgICAgICAgIGJ1aWxkRmlsdGVycyxcbiAgICAgICAgICAgICAgICBzdWJFbnRyeSxcbiAgICAgICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIGRpckNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgZGlyRGF0YSxcbiAgICAgICAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICAgICAgICBzdGF0aWNGaWxlcyxcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuI2FkZERpcmVjdG9yeShcbiAgICAgICAgICBidWlsZEZpbHRlcnMsXG4gICAgICAgICAgZW50cnksXG4gICAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgICBkaXJDb21wb25lbnRzLFxuICAgICAgICAgIGRpckRhdGEsXG4gICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgc3RhdGljRmlsZXMsXG4gICAgICAgICAgZGVzdGluYXRpb24sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgI2FkZEZpbGUoXG4gICAgYnVpbGRGaWx0ZXJzOiBCdWlsZEZpbHRlcltdLFxuICAgIGZpbGU6IEVudHJ5LFxuICAgIGRpclBhdGg6IHN0cmluZyxcbiAgICBkaXJEYXRhOiBQYXJ0aWFsPERhdGE+LFxuICAgIHBhZ2VzOiBQYWdlW10sXG4gICAgc3RhdGljRmlsZXM6IFN0YXRpY0ZpbGVbXSxcbiAgICBkZXN0aW5hdGlvbj86IFtEZXN0aW5hdGlvbiwgYm9vbGVhbl0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRoZSBmaWxlIGlzIGFkZGVkIHdpdGggYHNpdGUuYWRkKFwiZmlsZS5leHRcIilgXG4gICAgY29uc3QgYWRkZWQgPSB0aGlzLmFkZGVkRmlsZXMuZ2V0KGZpbGUucGF0aCk7XG4gICAgbGV0IFtkZXN0LCBpc0NvcHldID0gYWRkZWQgPz8gZGVzdGluYXRpb24gPz8gW107XG5cbiAgICAvLyBNZXJnZSB0aGUgZGVzdGluYXRpb24gd2l0aCB0aGUgcGFyZW50IGZvbGRlclxuICAgIGlmIChhZGRlZCkge1xuICAgICAgY29uc3QgW2FkZGVkRGVzdF0gPSBhZGRlZDtcblxuICAgICAgaWYgKHR5cGVvZiBhZGRlZERlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBwYXJlbnREZXN0ID0gZGVzdGluYXRpb24/LlswXTtcbiAgICAgICAgZGVzdCA9IHBhcmVudERlc3QgPyAocGF0aCkgPT4gYWRkZWREZXN0KHBhcmVudERlc3QocGF0aCkpIDogYWRkZWREZXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy4jaXNJZ25vcmVkKGZpbGUpKSB7XG4gICAgICAvLyBUaGUgZmlsZSBvciBwYXJlbnQgZm9sZGVyIGlzIGlnbm9yZWQgYW5kIHRoZSBmaWxlIG5vdCBleHBsaWNpdGx5IGFkZGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb3JtYXRzLnNlYXJjaChmaWxlLnBhdGgpO1xuXG4gICAgLy8gVGhlIGZvcm1hdCBpcyBhIHBhZ2UgYHNpdGUubG9hZFBhZ2VzKFtcIi5leHRcIl0pYFxuICAgIGlmIChmb3JtYXQ/LmlzUGFnZSAmJiAhaXNDb3B5KSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy4jbG9hZFBhZ2UoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGZvcm1hdCxcbiAgICAgICAgZGlyRGF0YSxcbiAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgZGVzdCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFnZSAmJlxuICAgICAgICAoIWJ1aWxkRmlsdGVycy5sZW5ndGggfHxcbiAgICAgICAgICBidWlsZEZpbHRlcnMuZXZlcnkoKGZpbHRlcikgPT4gZmlsdGVyKGZpbGUsIHBhZ2UpKSlcbiAgICAgICkge1xuICAgICAgICBwYWdlcy5wdXNoKHBhZ2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ID0gZm9ybWF0Py5leHQgfHwgZ2V0RXh0ZW5zaW9uKGZpbGUubmFtZSk7XG5cbiAgICAvLyBUaGUgZmlsZSBpcyBhZGRlZCBleHBsaWNpdGx5IHdpdGggYHNpdGUuYWRkKClgIG9yIGBzaXRlLmNvcHkoKWBcbiAgICBpZiAoYWRkZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRpY0ZpbGUgPSBjcmVhdGVGaWxlKFxuICAgICAgICBmaWxlLFxuICAgICAgICBleHQsXG4gICAgICAgIGRpclBhdGgsXG4gICAgICAgIGRpckRhdGEsXG4gICAgICAgIGRlc3QsXG4gICAgICApO1xuICAgICAgc3RhdGljRmlsZS5pc0NvcHkgPSAhIWlzQ29weTtcbiAgICAgIHN0YXRpY0ZpbGVzLnB1c2goc3RhdGljRmlsZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIGZpbGUgaXMgYWRkZWQgd2l0aCBgc2l0ZS5hZGQoW1wiLmV4dFwiXSlgXG4gICAgY29uc3QgYWRkZWRFeHQgPSB0aGlzLmFkZGVkRmlsZXMuZ2V0KGV4dCk7XG5cbiAgICBpZiAoYWRkZWRFeHQpIHtcbiAgICAgIGNvbnN0IFthZGRlZEV4dERlc3QsIGFkZGVkRXh0Q29weV0gPSBhZGRlZEV4dDtcblxuICAgICAgaWYgKHR5cGVvZiBhZGRlZEV4dERlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBwYXJlbnREZXN0ID0gZGVzdDtcbiAgICAgICAgZGVzdCA9IHR5cGVvZiBwYXJlbnREZXN0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IChwYXRoKSA9PiBhZGRlZEV4dERlc3QocGFyZW50RGVzdChwYXRoKSlcbiAgICAgICAgICA6IGFkZGVkRXh0RGVzdDtcbiAgICAgIH1cbiAgICAgIGlmIChhZGRlZEV4dENvcHkpIHtcbiAgICAgICAgaXNDb3B5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBgZGVzdGAgZXhpc3RzIGlzIGJlY2F1c2U6XG4gICAgLy8gLSB0aGUgZmlsZSB3YXMgYWRkZWQgd2l0aCBgc2l0ZS5hZGQoW1wiLmV4dFwiXSlgXG4gICAgLy8gLSBvciBhbnkgcGFyZW50IGZvbGRlciB3aXRoIGBzaXRlLmFkZChcImZvbGRlclwiKWBcbiAgICBpZiAoZGVzdCkge1xuICAgICAgY29uc3Qgc3RhdGljRmlsZSA9IGNyZWF0ZUZpbGUoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGV4dCxcbiAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgZGlyRGF0YSxcbiAgICAgICAgZGVzdCxcbiAgICAgICk7XG4gICAgICBzdGF0aWNGaWxlLmlzQ29weSA9ICEhaXNDb3B5O1xuICAgICAgc3RhdGljRmlsZXMucHVzaChzdGF0aWNGaWxlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGhlIGVudHJ5IG11c3QgYmUgaWdub3JlZCBieSBMdW1lICovXG4gICNpc0lnbm9yZWQoZW50cnk6IEVudHJ5KSB7XG4gICAgcmV0dXJuIChlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoXCIuXCIpICYmXG4gICAgICAoZW50cnkudHlwZSAhPT0gXCJkaXJlY3RvcnlcIiB8fCAhZW50cnkucGF0aC5lbmRzV2l0aChcIi8ud2VsbC1rbm93blwiKSkpIHx8XG4gICAgICBlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpIHx8XG4gICAgICB0aGlzLmlnbm9yZWQuaGFzKGVudHJ5LnBhdGgpIHx8XG4gICAgICB0aGlzLmZpbHRlcnMuc29tZSgoZmlsdGVyKSA9PiBmaWx0ZXIoZW50cnkucGF0aCkpO1xuICB9XG5cbiAgLyoqIExvYWQgYSBmb2xkZXIncyBfZGF0YSBhbmQgbWVyZ2UgaXQgd2l0aCB0aGUgcGFyZW50IGRhdGEgICovXG4gIGFzeW5jICNsb2FkRGlyRGF0YShkaXI6IEVudHJ5LCBwYXJlbnREYXRhOiBSYXdEYXRhKTogUHJvbWlzZTxQYXJ0aWFsPERhdGE+PiB7XG4gICAgLy8gUGFyc2UgdGhlIGRpcmVjdG9yeSdzIGJhc2VuYW1lXG4gICAgY29uc3QgeyBiYXNlbmFtZSwgLi4ucGFyc2VkRGF0YSB9ID0gcnVuQmFzZW5hbWVQYXJzZXJzKFxuICAgICAgZGlyLm5hbWUsXG4gICAgICB0aGlzLmJhc2VuYW1lUGFyc2VycyxcbiAgICApO1xuXG4gICAgLy8gTG9hZCBfZGF0YSBmaWxlc1xuICAgIGNvbnN0IGRpckRhdGFzOiBSYXdEYXRhW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZGlyLmNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChlbnRyeS50eXBlID09PSBcImZpbGVcIiAmJiBlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoXCJfZGF0YS5cIikpIHx8XG4gICAgICAgIChlbnRyeS50eXBlID09PSBcImRpcmVjdG9yeVwiICYmIGVudHJ5Lm5hbWUgPT09IFwiX2RhdGFcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCB0aGlzLmRhdGFMb2FkZXIubG9hZChlbnRyeSk7XG4gICAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgICBkaXJEYXRhcy5wdXNoKGxvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXRhIHJlZ2lzdGVyZWQgZnJvbSBzaXRlLmRhdGEoKVxuICAgIGNvbnN0IHNjb3BlZERhdGEgPSB0aGlzLnNjb3BlZERhdGEuZ2V0KGRpci5wYXRoKSB8fCB7fTtcblxuICAgIC8vIE1lcmdlIGRpcmVjdG9yeSBkYXRhXG4gICAgcmV0dXJuIG1lcmdlRGF0YShcbiAgICAgIHBhcmVudERhdGEsXG4gICAgICB7IGJhc2VuYW1lIH0sXG4gICAgICBzY29wZWREYXRhLFxuICAgICAgcGFyc2VkRGF0YSxcbiAgICAgIC4uLmRpckRhdGFzLFxuICAgICkgYXMgUGFydGlhbDxEYXRhPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIF9jb21wb25lbnRzLCBtZXJnZSB0aGVtIHdpdGggdGhlIHBhcmVudCBjb21wb25lbnRzXG4gICAqIGFuZCBzdG9yZSBvbiB0aGUgZGF0YSBvYmplY3RcbiAgICovXG4gIGFzeW5jICNsb2FkRGlyQ29tcG9uZW50cyhcbiAgICBkaXI6IEVudHJ5LFxuICAgIHBhcmVudENvbXBvbmVudHM6IENvbXBvbmVudHMsXG4gICAgZGF0YTogUGFydGlhbDxEYXRhPixcbiAgKTogUHJvbWlzZTxDb21wb25lbnRzPiB7XG4gICAgLy8gQ29tcG9uZW50cyByZWdpc3RlcmVkIGZyb20gc2l0ZS5jb21wb25lbnQoKVxuICAgIGNvbnN0IHNjb3BlZENvbXBvbmVudHMgPSB0aGlzLnNjb3BlZENvbXBvbmVudHMuZ2V0KGRpci5wYXRoKTtcbiAgICBsZXQgbG9hZGVkQ29tcG9uZW50czogQ29tcG9uZW50cyB8IHVuZGVmaW5lZDtcblxuICAgIC8vIExvYWQgX2NvbXBvbmVudHMgZmlsZXNcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGRpci5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiZGlyZWN0b3J5XCIgJiYgZW50cnkubmFtZSA9PT0gXCJfY29tcG9uZW50c1wiKSB7XG4gICAgICAgIGxvYWRlZENvbXBvbmVudHMgPSBhd2FpdCB0aGlzLmNvbXBvbmVudExvYWRlci5sb2FkKGVudHJ5LCBkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgdGhlIGNvbXBvbmVudHNcbiAgICBpZiAoc2NvcGVkQ29tcG9uZW50cyB8fCBsb2FkZWRDb21wb25lbnRzKSB7XG4gICAgICBwYXJlbnRDb21wb25lbnRzID0gbWVyZ2VDb21wb25lbnRzKFxuICAgICAgICBwYXJlbnRDb21wb25lbnRzLFxuICAgICAgICBzY29wZWRDb21wb25lbnRzIHx8IG5ldyBNYXAoKSxcbiAgICAgICAgbG9hZGVkQ29tcG9uZW50cyB8fCBuZXcgTWFwKCksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRDb21wb25lbnRzO1xuICB9XG5cbiAgYXN5bmMgKiNnZXREaXJQYWdlcyhcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZGlyRGF0YTogUGFydGlhbDxEYXRhPixcbiAgKTogQXN5bmNHZW5lcmF0b3I8UGFnZT4ge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5zY29wZWRQYWdlcy5nZXQocGF0aCk7XG4gICAgaWYgKCFwYWdlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBwYWdlcykge1xuICAgICAgY29uc3QgYmFzZW5hbWUgPSBwb3NpeC5iYXNlbmFtZShkYXRhLnVybCBhcyBzdHJpbmcpLnJlcGxhY2UoXG4gICAgICAgIC9cXC5bXFx3Ll0rJC8sXG4gICAgICAgIFwiXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgcGFnZSA9IG5ldyBQYWdlKCk7XG4gICAgICBwYWdlLmRhdGEgPSBtZXJnZURhdGEoXG4gICAgICAgIGRpckRhdGEsXG4gICAgICAgIHsgYmFzZW5hbWUsIGRhdGU6IG5ldyBEYXRlKCkgfSxcbiAgICAgICAgZGF0YSxcbiAgICAgICkgYXMgRGF0YTtcblxuICAgICAgY29uc3QgdXJsID0gZ2V0UGFnZVVybChwYWdlLCB0aGlzLnByZXR0eVVybHMsIHBhdGgpO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwYWdlLmRhdGEudXJsID0gdXJsO1xuICAgICAgcGFnZS5kYXRhLmJhc2VuYW1lID0gZ2V0QmFzZW5hbWUodXJsKTtcbiAgICAgIHBhZ2UuZGF0YS5kYXRlID0gZ2V0UGFnZURhdGUocGFnZSk7XG4gICAgICBwYWdlLmRhdGEucGFnZSA9IHBhZ2U7XG5cbiAgICAgIC8vIFByZXZlbnQgcnVubmluZyB0aGUgbGF5b3V0IGlmIHRoZSBwYWdlIGlzIGFuIGFzc2V0XG4gICAgICBpZiAoIWRhdGEubGF5b3V0ICYmICFwYWdlLm91dHB1dFBhdGguZW5kc1dpdGgoXCIuaHRtbFwiKSkge1xuICAgICAgICBkZWxldGUgcGFnZS5kYXRhLmxheW91dDtcbiAgICAgIH1cblxuICAgICAgeWllbGQgcGFnZTtcbiAgICB9XG4gIH1cblxuICAvKiogTG9hZCBhIHBhZ2UgZnJvbSBhIGZpbGUgZW50cnkgKi9cbiAgYXN5bmMgI2xvYWRQYWdlKFxuICAgIGVudHJ5OiBFbnRyeSxcbiAgICBmb3JtYXQ6IEZvcm1hdCxcbiAgICBkaXJEYXRhOiBQYXJ0aWFsPERhdGE+LFxuICAgIGRpclBhdGg6IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvbj86IERlc3RpbmF0aW9uIHwgc3RyaW5nLFxuICApOiBQcm9taXNlPFBhZ2UgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBUaGUgZm9ybWF0IGlzIGEgcGFnZSBvciBhc3NldFxuICAgIGNvbnN0IHsgbG9hZGVyLCBleHQgfSA9IGZvcm1hdDtcblxuICAgIGlmICghbG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIGxvYWRlciBmb3IgdGhlIHBhZ2UgJHtlbnRyeS5wYXRofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmFzZW5hbWUsIC4uLnBhcnNlZERhdGEgfSA9IHJ1bkJhc2VuYW1lUGFyc2VycyhcbiAgICAgIGVudHJ5Lm5hbWUuc2xpY2UoMCwgLWV4dC5sZW5ndGgpLFxuICAgICAgdGhpcy5iYXNlbmFtZVBhcnNlcnMsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgcGFnZVxuICAgIGNvbnN0IHBhZ2UgPSBuZXcgUGFnZSh7XG4gICAgICBwYXRoOiBlbnRyeS5wYXRoLnNsaWNlKDAsIC1leHQubGVuZ3RoKSxcbiAgICAgIGV4dCxcbiAgICAgIGVudHJ5LFxuICAgIH0pO1xuXG4gICAgLy8gTG9hZCBhbmQgbWVyZ2UgdGhlIHBhZ2UgZGF0YVxuICAgIGNvbnN0IHBhZ2VEYXRhID0gYXdhaXQgZW50cnkuZ2V0Q29udGVudChsb2FkZXIpO1xuICAgIHBhZ2UuZGF0YSA9IG1lcmdlRGF0YShcbiAgICAgIGRpckRhdGEsXG4gICAgICB7IGJhc2VuYW1lIH0sXG4gICAgICB0aGlzLnNjb3BlZERhdGEuZ2V0KGVudHJ5LnBhdGgpIHx8IHt9LFxuICAgICAgcGFyc2VkRGF0YSxcbiAgICAgIHBhZ2VEYXRhLFxuICAgICkgYXMgRGF0YTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcGFnZSBVUkxcbiAgICBjb25zdCB1cmwgPSBnZXRQYWdlVXJsKHBhZ2UsIHRoaXMucHJldHR5VXJscywgZGlyUGF0aCwgZGVzdGluYXRpb24pO1xuXG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFnZS5kYXRhLnVybCA9IHVybDtcbiAgICBwYWdlLmRhdGEuYmFzZW5hbWUgPSBnZXRCYXNlbmFtZSh1cmwpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBwYWdlIGRhdGVcbiAgICBwYWdlLmRhdGEuZGF0ZSA9IGdldFBhZ2VEYXRlKHBhZ2UpO1xuXG4gICAgLy8gU2F2ZSB0aGUgcGFnZSBvYmplY3QgaW4gdGhlIGRhdGEgb2JqZWN0XG4gICAgcGFnZS5kYXRhLnBhZ2UgPSBwYWdlO1xuXG4gICAgLy8gUHJldmVudCBydW5uaW5nIHRoZSBsYXlvdXQgaWYgdGhlIHBhZ2UgaXMgbm90IEhUTUxcbiAgICBpZiAoIXBhZ2VEYXRhLmxheW91dCAmJiAhcGFnZS5vdXRwdXRQYXRoLmVuZHNXaXRoKFwiLmh0bWxcIikpIHtcbiAgICAgIGRlbGV0ZSBwYWdlLmRhdGEubGF5b3V0O1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIERlc3RpbmF0aW9uID0gKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xuXG5leHBvcnQgdHlwZSBCdWlsZEZpbHRlciA9IChlbnRyeTogRW50cnksIHBhZ2U/OiBQYWdlKSA9PiBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBCYXNlbmFtZVBhcnNlciA9IChmaWxlbmFtZTogc3RyaW5nKSA9PiBSYXdEYXRhIHwgdW5kZWZpbmVkO1xuXG4vKiogTWVyZ2UgdGhlIGNhc2NhZGUgY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gbWVyZ2VDb21wb25lbnRzKC4uLmNvbXBvbmVudHM6IENvbXBvbmVudHNbXSk6IENvbXBvbmVudHMge1xuICByZXR1cm4gY29tcG9uZW50cy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IG5ldyBNYXAocHJldmlvdXMpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgY3VycmVudCkge1xuICAgICAgaWYgKGNvbXBvbmVudHMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGNvbXBvbmVudHMuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUgaW5zdGFuY2VvZiBNYXAgJiYgdmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICBjb21wb25lbnRzLnNldChrZXksIG1lcmdlQ29tcG9uZW50cyh2YWx1ZSwgcHJldmlvdXNWYWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBvbmVudHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnRzLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5CYXNlbmFtZVBhcnNlcnMoXG4gIGJhc2VuYW1lOiBzdHJpbmcsXG4gIGJhc2VuYW1lUGFyc2VyczogQmFzZW5hbWVQYXJzZXJbXSxcbik6IFJhd0RhdGEge1xuICBjb25zdCBkYXRhOiBSYXdEYXRhID0geyBiYXNlbmFtZSB9O1xuXG4gIGZvciAoY29uc3QgcGFyc2VyIG9mIGJhc2VuYW1lUGFyc2Vycykge1xuICAgIGNvbnN0IHJlcyA9IHBhcnNlcihiYXNlbmFtZSk7XG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmVzLmJhc2VuYW1lID8/PSBiYXNlbmFtZTtcbiAgICBPYmplY3QuYXNzaWduKGRhdGEsIHJlcyk7XG4gICAgaWYgKHJlcy5iYXNlbmFtZSA9PT0gXCJcIikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGUoXG4gIGVudHJ5OiBFbnRyeSxcbiAgZXh0OiBzdHJpbmcsXG4gIGRpclBhdGg6IHN0cmluZyxcbiAgZGlyRGF0YTogUGFydGlhbDxEYXRhPixcbiAgZGVzdGluYXRpb24/OiBzdHJpbmcgfCBEZXN0aW5hdGlvbixcbik6IFN0YXRpY0ZpbGUge1xuICBjb25zdCB1cmwgPSB0eXBlb2YgZGVzdGluYXRpb24gPT09IFwic3RyaW5nXCJcbiAgICA/IGRlc3RpbmF0aW9uXG4gICAgOiB0eXBlb2YgZGVzdGluYXRpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgID8gZGVzdGluYXRpb24ocG9zaXguam9pbihkaXJQYXRoLCBlbnRyeS5uYW1lKSlcbiAgICA6IHBvc2l4LmpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG5cbiAgcmV0dXJuIFN0YXRpY0ZpbGUuY3JlYXRlKHtcbiAgICAuLi5kaXJEYXRhLFxuICAgIHVybCxcbiAgfSwge1xuICAgIGV4dCxcbiAgICBwYXRoOiBlbnRyeS5wYXRoLnNsaWNlKDAsIC1leHQubGVuZ3RoKSxcbiAgICBlbnRyeSxcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFLLFFBQVEsa0JBQWtCO0FBQ3hDLFNBQVMsWUFBWSxFQUFFLGFBQWEsUUFBUSxrQkFBa0I7QUFDOUQsU0FBUyxTQUFTLFFBQVEsd0JBQXdCO0FBQ2xELFNBQVMsV0FBVyxFQUFFLFVBQVUsUUFBUSxzQkFBc0I7QUFDOUQsU0FBUyxXQUFXLFFBQVEsdUJBQXVCO0FBQ25ELFNBQVMsSUFBSSxFQUFFLFVBQVUsUUFBUSxZQUFZO0FBQzdDLFNBQVMsT0FBTyxRQUFRLGtCQUFrQjtBQXlCMUM7OztDQUdDLEdBQ0QsZUFBZSxNQUFNO0VBQ25CLHNDQUFzQyxHQUN0QyxHQUFPO0VBRVAsNEJBQTRCLEdBQzVCLFdBQXVCO0VBRXZCLDJCQUEyQixHQUMzQixnQkFBaUM7RUFFakMsb0RBQW9ELEdBQ3BELFFBQWlCO0VBRWpCLGdDQUFnQyxHQUNoQyxVQUFVLElBQUksTUFBYztFQUU1QiwrQkFBK0IsR0FDL0IsVUFBeUIsRUFBRSxDQUFDO0VBRTVCLCtCQUErQixHQUMvQixXQUFpQztFQUVqQyxnQ0FBZ0MsR0FDaEMsWUFBb0M7RUFFcEMscUNBQXFDLEdBQ3JDLGlCQUEwQztFQUUxQyxvQkFBb0IsR0FDcEIsV0FBb0I7RUFFcEIsdUNBQXVDLEdBQ3ZDLFlBQVksSUFBSSxNQUE4QjtFQUU5QyxXQU1FO0VBRUYsK0JBQStCLEdBQy9CLE9BQU8sSUFBSSxN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
+// denoCacheMetadata=13709729320847836260,5002082971697085197 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ed630f2b8500d6bda96430c93688cb4fbac733b20fd72c0d8a15328b95852453.js b/vendor/gen/https/deno.land/ed630f2b8500d6bda96430c93688cb4fbac733b20fd72c0d8a15328b95852453.js
new file mode 100644
index 0000000..c0de4e1
--- /dev/null
+++ b/vendor/gen/https/deno.land/ed630f2b8500d6bda96430c93688cb4fbac733b20fd72c0d8a15328b95852453.js
@@ -0,0 +1,10 @@
+// deno-lint-ignore-file no-explicit-any
+/** @deprecated Use `ArgumentType` instead. */ export var OptionType = /*#__PURE__*/ function(OptionType) {
+ OptionType["STRING"] = "string";
+ OptionType["NUMBER"] = "number";
+ OptionType["INTEGER"] = "integer";
+ OptionType["BOOLEAN"] = "boolean";
+ return OptionType;
+}({});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvZmxhZ3MvZGVwcmVjYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkZW5vLWxpbnQtaWdub3JlLWZpbGUgbm8tZXhwbGljaXQtYW55XG5cbmltcG9ydCB0eXBlIHtcbiAgQXJndW1lbnRPcHRpb25zLFxuICBBcmd1bWVudFZhbHVlLFxuICBEZWZhdWx0VmFsdWUsXG4gIEZsYWdPcHRpb25zLFxuICBQYXJzZUZsYWdzQ29udGV4dCxcbiAgUGFyc2VGbGFnc09wdGlvbnMsXG4gIFR5cGVIYW5kbGVyLFxuICBWYWx1ZUhhbmRsZXIsXG59IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYFBhcnNlRmxhZ3NPcHRpb25zYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSVBhcnNlT3B0aW9uczxURmxhZ09wdGlvbnMgZXh0ZW5kcyBGbGFnT3B0aW9ucyA9IEZsYWdPcHRpb25zPiA9XG4gIFBhcnNlRmxhZ3NPcHRpb25zPFRGbGFnT3B0aW9ucz47XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEZsYWdPcHRpb25zYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSUZsYWdPcHRpb25zID0gRmxhZ09wdGlvbnM7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYEFyZ3VtZW50T3B0aW9uc2AgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElGbGFnQXJndW1lbnQgPSBBcmd1bWVudE9wdGlvbnM7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYERlZmF1bHRWYWx1ZWAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElEZWZhdWx0VmFsdWU8VFZhbHVlID0gdW5rbm93bj4gPSBEZWZhdWx0VmFsdWU8VFZhbHVlPjtcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgVmFsdWVIYW5kbGVyYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSUZsYWdWYWx1ZUhhbmRsZXI8VFZhbHVlID0gYW55LCBUUmV0dXJuID0gVFZhbHVlPiA9IFZhbHVlSGFuZGxlcjxcbiAgVFZhbHVlLFxuICBUUmV0dXJuXG4+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBQYXJzZUZsYWdzQ29udGV4dGAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElGbGFnc1Jlc3VsdDxcbiAgVEZsYWdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIFRTdGFuZGFsb25lT3B0aW9uIGV4dGVuZHMgRmxhZ09wdGlvbnMgPSBGbGFnT3B0aW9ucyxcbj4gPSBQYXJzZUZsYWdzQ29udGV4dDxURmxhZ3MsIFRTdGFuZGFsb25lT3B0aW9uPjtcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgQXJndW1lbnRWYWx1ZWAgaW5zdGVhZC4gKi9cbmV4cG9ydCB0eXBlIElUeXBlSW5mbyA9IEFyZ3VtZW50VmFsdWU7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYFR5cGVIYW5kbGVyYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IHR5cGUgSVR5cGVIYW5kbGVyPFRSZXR1cm4gPSB1bmtub3duPiA9IFR5cGVIYW5kbGVyPFRSZXR1cm4+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBBcmd1bWVudFR5cGVgIGluc3RlYWQuICovXG5leHBvcnQgZW51bSBPcHRpb25UeXBlIHtcbiAgU1RSSU5HID0gXCJzdHJpbmdcIixcbiAgTlVNQkVSID0gXCJudW1iZXJcIixcbiAgSU5URUdFUiA9IFwiaW50ZWdlclwiLFxuICBCT09MRUFOID0gXCJib29sZWFuXCIsXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBNEN4Qyw0Q0FBNEMsR0FDNUMsT0FBTyxJQUFBLEFBQUssb0NBQUE7Ozs7O1NBQUE7TUFLWCJ9
+// denoCacheMetadata=16068955283463829186,15909498969210643143 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ed797ca86734190a29b9cc9a04450e54abb1935e4b18b4808e890bfd2ab9e793.js b/vendor/gen/https/deno.land/ed797ca86734190a29b9cc9a04450e54abb1935e4b18b4808e890bfd2ab9e793.js
new file mode 100644
index 0000000..ced5473
--- /dev/null
+++ b/vendor/gen/https/deno.land/ed797ca86734190a29b9cc9a04450e54abb1935e4b18b4808e890bfd2ab9e793.js
@@ -0,0 +1,198 @@
+import { border } from "./border.ts";
+import { Cell } from "./cell.ts";
+import { TableLayout } from "./layout.ts";
+import { Row } from "./row.ts";
+/** Table representation. */ export class Table extends Array {
+ static _chars = {
+ ...border
+ };
+ options = {
+ indent: 0,
+ border: false,
+ maxColWidth: Infinity,
+ minColWidth: 0,
+ padding: 1,
+ chars: {
+ ...Table._chars
+ }
+ };
+ headerRow;
+ /**
+ * Create a new table. If rows is a table, all rows and options of the table
+ * will be copied to the new table.
+ * @param rows
+ */ static from(rows) {
+ const table = new this(...rows);
+ if (rows instanceof Table) {
+ table.options = {
+ ...rows.options
+ };
+ table.headerRow = rows.headerRow ? Row.from(rows.headerRow) : undefined;
+ }
+ return table;
+ }
+ /**
+ * Create a new table from an array of json objects. An object represents a
+ * row and each property a column.
+ * @param rows Array of objects.
+ */ static fromJson(rows) {
+ return new this().fromJson(rows);
+ }
+ /**
+ * Set global default border characters.
+ * @param chars Border options.
+ */ static chars(chars) {
+ Object.assign(this._chars, chars);
+ return this;
+ }
+ /**
+ * Write table or rows to stdout.
+ * @param rows Table or rows.
+ */ static render(rows) {
+ Table.from(rows).render();
+ }
+ /**
+ * Read data from an array of json objects. An object represents a
+ * row and each property a column.
+ * @param rows Array of objects.
+ */ fromJson(rows) {
+ this.header(Object.keys(rows[0]));
+ this.body(rows.map((row)=>Object.values(row)));
+ return this;
+ }
+ /**
+ * Set table header.
+ * @param header Header row or cells.
+ */ header(header) {
+ this.headerRow = header instanceof Row ? header : Row.from(header);
+ return this;
+ }
+ /**
+ * Set table body.
+ * @param rows Table rows.
+ */ body(rows) {
+ this.length = 0;
+ this.push(...rows);
+ return this;
+ }
+ /** Clone table recursively with header and options. */ clone() {
+ const table = new Table(...this.map((row)=>row instanceof Row ? row.clone() : Row.from(row).clone()));
+ table.options = {
+ ...this.options
+ };
+ table.headerRow = this.headerRow?.clone();
+ return table;
+ }
+ /** Generate table string. */ toString() {
+ return new TableLayout(this, this.options).toString();
+ }
+ /** Write table to stdout. */ render() {
+ console.log(this.toString());
+ return this;
+ }
+ /**
+ * Set max col with.
+ * @param width Max col width.
+ * @param override Override existing value.
+ */ maxColWidth(width, override = true) {
+ if (override || typeof this.options.maxColWidth === "undefined") {
+ this.options.maxColWidth = width;
+ }
+ return this;
+ }
+ /**
+ * Set min col width.
+ * @param width Min col width.
+ * @param override Override existing value.
+ */ minColWidth(width, override = true) {
+ if (override || typeof this.options.minColWidth === "undefined") {
+ this.options.minColWidth = width;
+ }
+ return this;
+ }
+ /**
+ * Set table indentation.
+ * @param width Indent width.
+ * @param override Override existing value.
+ */ indent(width, override = true) {
+ if (override || typeof this.options.indent === "undefined") {
+ this.options.indent = width;
+ }
+ return this;
+ }
+ /**
+ * Set cell padding.
+ * @param padding Cell padding.
+ * @param override Override existing value.
+ */ padding(padding, override = true) {
+ if (override || typeof this.options.padding === "undefined") {
+ this.options.padding = padding;
+ }
+ return this;
+ }
+ /**
+ * Enable/disable cell border.
+ * @param enable Enable/disable cell border.
+ * @param override Override existing value.
+ */ border(enable, override = true) {
+ if (override || typeof this.options.border === "undefined") {
+ this.options.border = enable;
+ }
+ return this;
+ }
+ /**
+ * Align table content.
+ * @param direction Align direction.
+ * @param override Override existing value.
+ */ align(direction, override = true) {
+ if (override || typeof this.options.align === "undefined") {
+ this.options.align = direction;
+ }
+ return this;
+ }
+ /**
+ * Set border characters.
+ * @param chars Border options.
+ */ chars(chars) {
+ Object.assign(this.options.chars, chars);
+ return this;
+ }
+ /** Get table header. */ getHeader() {
+ return this.headerRow;
+ }
+ /** Get table body. */ getBody() {
+ return [
+ ...this
+ ];
+ }
+ /** Get mac col widrth. */ getMaxColWidth() {
+ return this.options.maxColWidth;
+ }
+ /** Get min col width. */ getMinColWidth() {
+ return this.options.minColWidth;
+ }
+ /** Get table indentation. */ getIndent() {
+ return this.options.indent;
+ }
+ /** Get cell padding. */ getPadding() {
+ return this.options.padding;
+ }
+ /** Check if table has border. */ getBorder() {
+ return this.options.border === true;
+ }
+ /** Check if header row has border. */ hasHeaderBorder() {
+ const hasBorder = this.headerRow?.hasBorder();
+ return hasBorder === true || this.getBorder() && hasBorder !== false;
+ }
+ /** Check if table bordy has border. */ hasBodyBorder() {
+ return this.getBorder() || this.some((row)=>row instanceof Row ? row.hasBorder() : row.some((cell)=>cell instanceof Cell ? cell.getBorder : false));
+ }
+ /** Check if table header or body has border. */ hasBorder() {
+ return this.hasHeaderBorder() || this.hasBodyBorder();
+ }
+ /** Get table alignment. */ getAlign() {
+ return this.options.align ?? "left";
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvdGFibGUvdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYm9yZGVyLCBJQm9yZGVyIH0gZnJvbSBcIi4vYm9yZGVyLnRzXCI7XG5pbXBvcnQgeyBDZWxsLCBEaXJlY3Rpb24gfSBmcm9tIFwiLi9jZWxsLnRzXCI7XG5pbXBvcnQgeyBUYWJsZUxheW91dCB9IGZyb20gXCIuL2xheW91dC50c1wiO1xuaW1wb3J0IHsgSURhdGFSb3csIElSb3csIFJvdyB9IGZyb20gXCIuL3Jvdy50c1wiO1xuXG4vKiogQm9yZGVyIGNoYXJhY3RlcnMgc2V0dGluZ3MuICovXG5leHBvcnQgdHlwZSBJQm9yZGVyT3B0aW9ucyA9IFBhcnRpYWw8SUJvcmRlcj47XG5cbi8qKiBUYWJsZSBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVGFibGVPcHRpb25zIHtcbiAgaW5kZW50PzogbnVtYmVyO1xuICBib3JkZXI/OiBib29sZWFuO1xuICBhbGlnbj86IERpcmVjdGlvbjtcbiAgbWF4Q29sV2lkdGg/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgbWluQ29sV2lkdGg/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgcGFkZGluZz86IG51bWJlciB8IG51bWJlcltdO1xuICBjaGFycz86IElCb3JkZXJPcHRpb25zO1xufVxuXG4vKiogVGFibGUgc2V0dGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVNldHRpbmdzIGV4dGVuZHMgUmVxdWlyZWQ8T21pdDxJVGFibGVPcHRpb25zLCBcImFsaWduXCI+PiB7XG4gIGNoYXJzOiBJQm9yZGVyO1xuICBhbGlnbj86IERpcmVjdGlvbjtcbn1cblxuLyoqIFRhYmxlIHR5cGUuICovXG5leHBvcnQgdHlwZSBJVGFibGU8VCBleHRlbmRzIElSb3cgPSBJUm93PiA9IFRbXSB8IFRhYmxlPFQ+O1xuXG4vKiogVGFibGUgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgY2xhc3MgVGFibGU8VCBleHRlbmRzIElSb3cgPSBJUm93PiBleHRlbmRzIEFycmF5PFQ+IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyBfY2hhcnM6IElCb3JkZXIgPSB7IC4uLmJvcmRlciB9O1xuICBwcm90ZWN0ZWQgb3B0aW9uczogSVRhYmxlU2V0dGluZ3MgPSB7XG4gICAgaW5kZW50OiAwLFxuICAgIGJvcmRlcjogZmFsc2UsXG4gICAgbWF4Q29sV2lkdGg6IEluZmluaXR5LFxuICAgIG1pbkNvbFdpZHRoOiAwLFxuICAgIHBhZGRpbmc6IDEsXG4gICAgY2hhcnM6IHsgLi4uVGFibGUuX2NoYXJzIH0sXG4gIH07XG4gIHByaXZhdGUgaGVhZGVyUm93PzogUm93O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdGFibGUuIElmIHJvd3MgaXMgYSB0YWJsZSwgYWxsIHJvd3MgYW5kIG9wdGlvbnMgb2YgdGhlIHRhYmxlXG4gICAqIHdpbGwgYmUgY29waWVkIHRvIHRoZSBuZXcgdGFibGUuXG4gICAqIEBwYXJhbSByb3dzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb208VCBleHRlbmRzIElSb3c+KHJvd3M6IElUYWJsZTxUPik6IFRhYmxlPFQ+IHtcbiAgICBjb25zdCB0YWJsZSA9IG5ldyB0aGlzKC4uLnJvd3MpO1xuICAgIGlmIChyb3dzIGluc3RhbmNlb2YgVGFibGUpIHtcbiAgICAgIHRhYmxlLm9wdGlvbnMgPSB7IC4uLihyb3dzIGFzIFRhYmxlKS5vcHRpb25zIH07XG4gICAgICB0YWJsZS5oZWFkZXJSb3cgPSByb3dzLmhlYWRlclJvdyA/IFJvdy5mcm9tKHJvd3MuaGVhZGVyUm93KSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyB0YWJsZSBmcm9tIGFuIGFycmF5IG9mIGpzb24gb2JqZWN0cy4gQW4gb2JqZWN0IHJlcHJlc2VudHMgYVxuICAgKiByb3cgYW5kIGVhY2ggcHJvcGVydHkgYSBjb2x1bW4uXG4gICAqIEBwYXJhbSByb3dzIEFycmF5IG9mIG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKHJvd3M6IElEYXRhUm93W10pOiBUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKCkuZnJvbUpzb24ocm93cyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGdsb2JhbCBkZWZhdWx0IGJvcmRlciBjaGFyYWN0ZXJzLlxuICAgKiBAcGFyYW0gY2hhcnMgQm9yZGVyIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNoYXJzKGNoYXJzOiBJQm9yZGVyT3B0aW9ucyk6IHR5cGVvZiBUYWJsZSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jaGFycywgY2hhcnMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRhYmxlIG9yIHJvd3MgdG8gc3Rkb3V0LlxuICAgKiBAcGFyYW0gcm93cyBUYWJsZSBvciByb3dzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZW5kZXI8VCBleHRlbmRzIElSb3c+KHJvd3M6IElUYWJsZTxUPik6IHZvaWQge1xuICAgIFRhYmxlLmZyb20ocm93cykucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBkYXRhIGZyb20gYW4gYXJyYXkgb2YganNvbiBvYmplY3RzLiBBbiBvYmplY3QgcmVwcmVzZW50cyBhXG4gICAqIHJvdyBhbmQgZWFjaCBwcm9wZXJ0eSBhIGNvbHVtbi5cbiAgICogQHBhcmFtIHJvd3MgQXJyYXkgb2Ygb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyBmcm9tSnNvbihyb3dzOiBJRGF0YVJvd1tdKTogdGhpcyB7XG4gICAgdGhpcy5oZWFkZXIoT2JqZWN0LmtleXMocm93c1swXSkpO1xuICAgIHRoaXMuYm9keShyb3dzLm1hcCgocm93KSA9PiBPYmplY3QudmFsdWVzKHJvdykgYXMgVCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0YWJsZSBoZWFkZXIuXG4gICAqIEBwYXJhbSBoZWFkZXIgSGVhZGVyIHJvdyBvciBjZWxscy5cbiAgICovXG4gIHB1YmxpYyBoZWFkZXIoaGVhZGVyOiBJUm93KTogdGhpcyB7XG4gICAgdGhpcy5oZWFkZXJSb3cgPSBoZWFkZXIgaW5zdGFuY2VvZiBSb3cgPyBoZWFkZXIgOiBSb3cuZnJvbShoZWFkZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0YWJsZSBib2R5LlxuICAgKiBAcGFyYW0gcm93cyBUYWJsZSByb3dzLlxuICAgKi9cbiAgcHVibGljIGJvZHkocm93czogVFtdKTogdGhpcyB7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMucHVzaCguLi5yb3dzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBDbG9uZSB0YWJsZSByZWN1cnNpdmVseSB3aXRoIGhlYWRlciBhbmQgb3B0aW9ucy4gKi9cbiAgcHVibGljIGNsb25lKCk6IFRhYmxlIHtcbiAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZShcbiAgICAgIC4uLnRoaXMubWFwKChyb3c6IFQpID0+XG4gICAgICAgIHJvdyBpbnN0YW5jZW9mIFJvdyA/IHJvdy5jbG9uZSgpIDogUm93LmZyb20ocm93KS5jbG9uZSgpXG4gICAgICApLFxuICAgICk7XG4gICAgdGFibGUub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zIH07XG4gICAgdGFibGUuaGVhZGVyUm93ID0gdGhpcy5oZWFkZXJSb3c/LmNsb25lKCk7XG4gICAgcmV0dXJuIHRhYmxlO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlIHRhYmxlIHN0cmluZy4gKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBUYWJsZUxheW91dCh0aGlzLCB0aGlzLm9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKiogV3JpdGUgdGFibGUgdG8gc3Rkb3V0LiAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IHRoaXMge1xuICAgIGNvbnNvbGUubG9nKHRoaXMudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1heCBjb2wgd2l0aC5cbiAgICogQHBhcmFtIHdpZHRoICAgICBNYXggY29sIHdpZHRoLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG1heENvbFdpZHRoKHdpZHRoOiBudW1iZXIgfCBudW1iZXJbXSwgb3ZlcnJpZGUgPSB0cnVlKTogdGhpcyB7XG4gICAgaWYgKG92ZXJyaWRlIHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMubWF4Q29sV2lkdGggPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5tYXhDb2xXaWR0aCA9IHdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWluIGNvbCB3aWR0aC5cbiAgICogQHBhcmFtIHdpZHRoICAgICBNaW4gY29sIHdpZHRoLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG1pbkNvbFdpZHRoKHdpZHRoOiBudW1iZXIgfCBudW1iZXJbXSwgb3ZlcnJpZGUgPSB0cnVlKTogdGhpcyB7XG4gICAgaWYgKG92ZXJyaWRlIHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMubWluQ29sV2lkdGggPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5taW5Db2xXaWR0aCA9IHdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGFibGUgaW5kZW50YXRpb24uXG4gICAqIEBwYXJhbSB3aWR0aCAgICAgSW5kZW50IHdpZHRoLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGluZGVudCh3aWR0aDogbnVtYmVyLCBvdmVycmlkZSA9IHRydWUpOiB0aGlzIHtcbiAgICBpZiAob3ZlcnJpZGUgfHwgdHlwZW9mIHRoaXMub3B0aW9ucy5pbmRlbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5pbmRlbnQgPSB3aWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNlbGwgcGFkZGluZy5cbiAgICogQHBhcmFtIHBhZGRpbmcgICBDZWxsIHBhZGRpbmcuXG4gICAqIEBwYXJhbSBvdmVycmlkZSAgT3ZlcnJpZGUgZXhpc3RpbmcgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcGFkZGluZyhwYWRkaW5nOiBudW1iZXIgfCBudW1iZXJbXSwgb3ZlcnJpZGUgPSB0cnVlKTogdGhpcyB7XG4gICAgaWYgKG92ZXJyaWRlIHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMucGFkZGluZyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5vcHRpb25zLnBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBjZWxsIGJvcmRlci5cbiAgICogQHBhcmFtIGVuYWJsZSAgICBFbmFibGUvZGlzYWJsZSBjZWxsIGJvcmRlci5cbiAgICogQHBhcmFtIG92ZXJyaWRlICBPdmVycmlkZSBleGlzdGluZyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBib3JkZXIoZW5hYmxlOiBib29sZWFuLCBvdmVycmlkZSA9IHRydWUpOiB0aGlzIHtcbiAgICBpZiAob3ZlcnJpZGUgfHwgdHlwZW9mIHRoaXMub3B0aW9ucy5ib3JkZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5ib3JkZXIgPSBlbmFibGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaWduIHRhYmxlIGNvbnRlbnQuXG4gICAqIEBwYXJhbSBkaXJlY3Rpb24gQWxpZ24gZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0gb3ZlcnJpZGUgIE92ZXJyaWRlIGV4aXN0aW5nIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGFsaWduKGRpcmVjdGlvbjogRGlyZWN0aW9uLCBvdmVycmlkZSA9IHRydWUpOiB0aGlzIHtcbiAgICBpZiAob3ZlcnJpZGUgfHwgdHlwZW9mIHRoaXMub3B0aW9ucy5hbGlnbiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5vcHRpb25zLmFsaWduID0gZGlyZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYm9yZGVyIGNoYXJhY3RlcnMuXG4gICAqIEBwYXJhbSBjaGFycyBCb3JkZXIgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBjaGFycyhjaGFyczogSUJvcmRlck9wdGlvbnMpOiB0aGlzIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucy5jaGFycywgY2hhcnMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEdldCB0YWJsZSBoZWFkZXIuICovXG4gIHB1YmxpYyBnZXRIZWFkZXIoKTogUm93IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJSb3c7XG4gIH1cblxuICAvKiogR2V0IHRhYmxlIGJvZHkuICovXG4gIHB1YmxpYyBnZXRCb2R5KCk6IFRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzXTtcbiAgfVxuXG4gIC8qKiBHZXQgbWFjIGNvbCB3aWRydGguICovXG4gIHB1YmxpYyBnZXRNYXhDb2xXaWR0aCgpOiBudW1iZXIgfCBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tYXhDb2xXaWR0aDtcbiAgfVxuXG4gIC8qKiBHZXQgbWluIGNvbCB3aWR0aC4gKi9cbiAgcHVibGljIGdldE1pbkNvbFdpZHRoKCk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbkNvbFdpZHRoO1xuICB9XG5cbiAgLyoqIEdldCB0YWJsZSBpbmRlbnRhdGlvbi4gKi9cbiAgcHVibGljIGdldEluZGVudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50O1xuICB9XG5cbiAgLyoqIEdldCBjZWxsIHBhZGRpbmcuICovXG4gIHB1YmxpYyBnZXRQYWRkaW5nKCk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBhZGRpbmc7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGFibGUgaGFzIGJvcmRlci4gKi9cbiAgcHVibGljIGdldEJvcmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmJvcmRlciA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBoZWFkZXIgcm93IGhhcyBib3JkZXIuICovXG4gIHB1YmxpYyBoYXNIZWFkZXJCb3JkZXIoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQm9yZGVyID0gdGhpcy5oZWFkZXJSb3c/Lmhhc0JvcmRlcigpO1xuICAgIHJldHVybiBoYXNCb3JkZXIgPT09IHRydWUgfHwgKHRoaXMuZ2V0Qm9yZGVyKCkgJiYgaGFzQm9yZGVyICE9PSBmYWxzZSk7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGFibGUgYm9yZHkgaGFzIGJvcmRlci4gKi9cbiAgcHVibGljIGhhc0JvZHlCb3JkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9yZGVyKCkgfHxcbiAgICAgIHRoaXMuc29tZSgocm93KSA9PlxuICAgICAgICByb3cgaW5zdGFuY2VvZiBSb3dcbiAgICAgICAgICA/IHJvdy5oYXNCb3JkZXIoKVxuICAgICAgICAgIDogcm93LnNvbWUoKGNlbGwpID0+IGNlbGwgaW5zdGFuY2VvZiBDZWxsID8gY2VsbC5nZXRCb3JkZXIgOiBmYWxzZSlcbiAgICAgICk7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGFibGUgaGVhZGVyIG9yIGJvZHkgaGFzIGJvcmRlci4gKi9cbiAgcHVibGljIGhhc0JvcmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNIZWFkZXJCb3JkZXIoKSB8fCB0aGlzLmhhc0JvZHlCb3JkZXIoKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGFibGUgYWxpZ25tZW50LiAqL1xuICBwdWJsaWMgZ2V0QWxpZ24oKTogRGlyZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFsaWduID8/IFwibGVmdFwiO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxNQUFNLFFBQWlCLGNBQWM7QUFDOUMsU0FBUyxJQUFJLFFBQW1CLFlBQVk7QUFDNUMsU0FBUyxXQUFXLFFBQVEsY0FBYztBQUMxQyxTQUF5QixHQUFHLFFBQVEsV0FBVztBQXlCL0MsMEJBQTBCLEdBQzFCLE9BQU8sTUFBTSxjQUFxQztFQUNoRCxPQUFpQixTQUFrQjtJQUFFLEdBQUcsTUFBTTtFQUFDLEVBQUU7RUFDdkMsVUFBMEI7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLFNBQVM7SUFDVCxPQUFPO01BQUUsR0FBRyxNQUFNLE1BQU07SUFBQztFQUMzQixFQUFFO0VBQ00sVUFBZ0I7RUFFeEI7Ozs7R0FJQyxHQUNELE9BQWMsS0FBcUIsSUFBZSxFQUFZO0lBQzVELE1BQU0sUUFBUSxJQUFJLElBQUksSUFBSTtJQUMxQixJQUFJLGdCQUFnQixPQUFPO01BQ3pCLE1BQU0sT0FBTyxHQUFHO1FBQUUsR0FBRyxBQUFDLEtBQWUsT0FBTztNQUFDO01BQzdDLE1BQU0sU0FBUyxHQUFHLEtBQUssU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJO0lBQ2hFO0lBQ0EsT0FBTztFQUNUO0VBRUE7Ozs7R0FJQyxHQUNELE9BQWMsU0FBUyxJQUFnQixFQUFTO0lBQzlDLE9BQU8sSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0VBQzdCO0VBRUE7OztHQUdDLEdBQ0Qs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
+// denoCacheMetadata=114928163088947130,2896490680958758969 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ed86b2884f587966d7603fa9d467a38520fdd0d9a0f8c97c7231d8aa8425e08e.js b/vendor/gen/https/deno.land/ed86b2884f587966d7603fa9d467a38520fdd0d9a0f8c97c7231d8aa8425e08e.js
new file mode 100644
index 0000000..b58c0ef
--- /dev/null
+++ b/vendor/gen/https/deno.land/ed86b2884f587966d7603fa9d467a38520fdd0d9a0f8c97c7231d8aa8425e08e.js
@@ -0,0 +1,37 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { SEP } from "./separator.ts";
+/** Determines the common path from a set of paths, using an optional separator,
+ * which defaults to the OS default separator.
+ *
+ * ```ts
+ * import { common } from "https://deno.land/std@$STD_VERSION/path/mod.ts";
+ * const p = common([
+ * "./deno/std/path/mod.ts",
+ * "./deno/std/fs/mod.ts",
+ * ]);
+ * console.log(p); // "./deno/std/"
+ * ```
+ */ export function common(paths, sep = SEP) {
+ const [first = "", ...remaining] = paths;
+ if (first === "" || remaining.length === 0) {
+ return first.substring(0, first.lastIndexOf(sep) + 1);
+ }
+ const parts = first.split(sep);
+ let endOfPrefix = parts.length;
+ for (const path of remaining){
+ const compare = path.split(sep);
+ for(let i = 0; i < endOfPrefix; i++){
+ if (compare[i] !== parts[i]) {
+ endOfPrefix = i;
+ }
+ }
+ if (endOfPrefix === 0) {
+ return "";
+ }
+ }
+ const prefix = parts.slice(0, endOfPrefix).join(sep);
+ return prefix.endsWith(sep) ? prefix : `${prefix}${sep}`;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3MC4wL3BhdGgvY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IFNFUCB9IGZyb20gXCIuL3NlcGFyYXRvci50c1wiO1xuXG4vKiogRGV0ZXJtaW5lcyB0aGUgY29tbW9uIHBhdGggZnJvbSBhIHNldCBvZiBwYXRocywgdXNpbmcgYW4gb3B0aW9uYWwgc2VwYXJhdG9yLFxuICogd2hpY2ggZGVmYXVsdHMgdG8gdGhlIE9TIGRlZmF1bHQgc2VwYXJhdG9yLlxuICpcbiAqIGBgYHRzXG4gKiAgICAgICBpbXBvcnQgeyBjb21tb24gfSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQCRTVERfVkVSU0lPTi9wYXRoL21vZC50c1wiO1xuICogICAgICAgY29uc3QgcCA9IGNvbW1vbihbXG4gKiAgICAgICAgIFwiLi9kZW5vL3N0ZC9wYXRoL21vZC50c1wiLFxuICogICAgICAgICBcIi4vZGVuby9zdGQvZnMvbW9kLnRzXCIsXG4gKiAgICAgICBdKTtcbiAqICAgICAgIGNvbnNvbGUubG9nKHApOyAvLyBcIi4vZGVuby9zdGQvXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uKHBhdGhzOiBzdHJpbmdbXSwgc2VwID0gU0VQKTogc3RyaW5nIHtcbiAgY29uc3QgW2ZpcnN0ID0gXCJcIiwgLi4ucmVtYWluaW5nXSA9IHBhdGhzO1xuICBpZiAoZmlyc3QgPT09IFwiXCIgfHwgcmVtYWluaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmaXJzdC5zdWJzdHJpbmcoMCwgZmlyc3QubGFzdEluZGV4T2Yoc2VwKSArIDEpO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gZmlyc3Quc3BsaXQoc2VwKTtcblxuICBsZXQgZW5kT2ZQcmVmaXggPSBwYXJ0cy5sZW5ndGg7XG4gIGZvciAoY29uc3QgcGF0aCBvZiByZW1haW5pbmcpIHtcbiAgICBjb25zdCBjb21wYXJlID0gcGF0aC5zcGxpdChzZXApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kT2ZQcmVmaXg7IGkrKykge1xuICAgICAgaWYgKGNvbXBhcmVbaV0gIT09IHBhcnRzW2ldKSB7XG4gICAgICAgIGVuZE9mUHJlZml4ID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kT2ZQcmVmaXggPT09IDApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuICBjb25zdCBwcmVmaXggPSBwYXJ0cy5zbGljZSgwLCBlbmRPZlByZWZpeCkuam9pbihzZXApO1xuICByZXR1cm4gcHJlZml4LmVuZHNXaXRoKHNlcCkgPyBwcmVmaXggOiBgJHtwcmVmaXh9JHtzZXB9YDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsR0FBRyxRQUFRLGlCQUFpQjtBQUVyQzs7Ozs7Ozs7Ozs7Q0FXQyxHQUNELE9BQU8sU0FBUyxPQUFPLEtBQWUsRUFBRSxNQUFNLEdBQUc7RUFDL0MsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsVUFBVSxHQUFHO0VBQ25DLElBQUksVUFBVSxNQUFNLFVBQVUsTUFBTSxLQUFLLEdBQUc7SUFDMUMsT0FBTyxNQUFNLFNBQVMsQ0FBQyxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU87RUFDckQ7RUFDQSxNQUFNLFFBQVEsTUFBTSxLQUFLLENBQUM7RUFFMUIsSUFBSSxjQUFjLE1BQU0sTUFBTTtFQUM5QixLQUFLLE1BQU0sUUFBUSxVQUFXO0lBQzVCLE1BQU0sVUFBVSxLQUFLLEtBQUssQ0FBQztJQUMzQixJQUFLLElBQUksSUFBSSxHQUFHLElBQUksYUFBYSxJQUFLO01BQ3BDLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzNCLGNBQWM7TUFDaEI7SUFDRjtJQUVBLElBQUksZ0JBQWdCLEdBQUc7TUFDckIsT0FBTztJQUNUO0VBQ0Y7RUFDQSxNQUFNLFNBQVMsTUFBTSxLQUFLLENBQUMsR0FBRyxhQUFhLElBQUksQ0FBQztFQUNoRCxPQUFPLE9BQU8sUUFBUSxDQUFDLE9BQU8sU0FBUyxHQUFHLFNBQVMsS0FBSztBQUMxRCJ9
+// denoCacheMetadata=13151805853932857385,17089560130007283071 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/ee461dcf7bc911e1ae7f7325e06420f386fc9da6ca7120580368c1f192bf34ac.js b/vendor/gen/https/deno.land/ee461dcf7bc911e1ae7f7325e06420f386fc9da6ca7120580368c1f192bf34ac.js
new file mode 100644
index 0000000..c8a6ffb
--- /dev/null
+++ b/vendor/gen/https/deno.land/ee461dcf7bc911e1ae7f7325e06420f386fc9da6ca7120580368c1f192bf34ac.js
@@ -0,0 +1,18 @@
+import { parse } from "../../deps/yaml.ts";
+import { isPlainObject } from "../utils/object.ts";
+import { read } from "../utils/read.ts";
+/** Load and parse a YAML file */ export default async function yaml(path) {
+ const text = await read(path, false);
+ const content = parse(text);
+ if (!content) {
+ return {};
+ }
+ if (isPlainObject(content)) {
+ return content;
+ }
+ return {
+ content
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY29yZS9sb2FkZXJzL3lhbWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi4vLi4vZGVwcy95YW1sLnRzXCI7XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIi4uL3V0aWxzL29iamVjdC50c1wiO1xuaW1wb3J0IHsgcmVhZCB9IGZyb20gXCIuLi91dGlscy9yZWFkLnRzXCI7XG5cbmltcG9ydCB0eXBlIHsgUmF3RGF0YSB9IGZyb20gXCIuLi9maWxlLnRzXCI7XG5cbi8qKiBMb2FkIGFuZCBwYXJzZSBhIFlBTUwgZmlsZSAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24geWFtbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJhd0RhdGE+IHtcbiAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWQocGF0aCwgZmFsc2UpO1xuICBjb25zdCBjb250ZW50ID0gcGFyc2UodGV4dCk7XG5cbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QoY29udGVudCkpIHtcbiAgICByZXR1cm4gY29udGVudCBhcyBSYXdEYXRhO1xuICB9XG5cbiAgcmV0dXJuIHsgY29udGVudCB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsS0FBSyxRQUFRLHFCQUFxQjtBQUMzQyxTQUFTLGFBQWEsUUFBUSxxQkFBcUI7QUFDbkQsU0FBUyxJQUFJLFFBQVEsbUJBQW1CO0FBSXhDLCtCQUErQixHQUMvQixlQUFlLGVBQWUsS0FBSyxJQUFZO0VBQzdDLE1BQU0sT0FBTyxNQUFNLEtBQUssTUFBTTtFQUM5QixNQUFNLFVBQVUsTUFBTTtFQUV0QixJQUFJLENBQUMsU0FBUztJQUNaLE9BQU8sQ0FBQztFQUNWO0VBRUEsSUFBSSxjQUFjLFVBQVU7SUFDMUIsT0FBTztFQUNUO0VBRUEsT0FBTztJQUFFO0VBQVE7QUFDbkIifQ==
+// denoCacheMetadata=6554171975770041103,10379854333678606252 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f077dc9f645c546d47a82c55a975266381b30c45d73900e03bb18e702d746344.js b/vendor/gen/https/deno.land/f077dc9f645c546d47a82c55a975266381b30c45d73900e03bb18e702d746344.js
new file mode 100644
index 0000000..cbce20d
--- /dev/null
+++ b/vendor/gen/https/deno.land/f077dc9f645c546d47a82c55a975266381b30c45d73900e03bb18e702d746344.js
@@ -0,0 +1,116 @@
+import analyze from "./js.ts";
+export default function tokenize(source) {
+ const tokens = [];
+ let type = "string";
+ let position = 0;
+ try {
+ while(source.length > 0){
+ if (type === "string") {
+ const index = source.indexOf("{{");
+ const code = index === -1 ? source : source.slice(0, index);
+ tokens.push([
+ type,
+ code,
+ position
+ ]);
+ if (index === -1) {
+ break;
+ }
+ position += index;
+ source = source.slice(index);
+ type = source.startsWith("{{#") ? "comment" : "tag";
+ continue;
+ }
+ if (type === "comment") {
+ source = source.slice(3);
+ const index = source.indexOf("#}}");
+ const comment = index === -1 ? source : source.slice(0, index);
+ tokens.push([
+ type,
+ comment,
+ position
+ ]);
+ if (index === -1) {
+ break;
+ }
+ position += index + 3;
+ source = source.slice(index + 3);
+ type = "string";
+ continue;
+ }
+ if (type === "tag") {
+ const indexes = parseTag(source);
+ const lastIndex = indexes.length - 1;
+ let tag;
+ indexes.reduce((prev, curr, index)=>{
+ const code = source.slice(prev, curr - 2);
+ // Tag
+ if (index === 1) {
+ tag = [
+ type,
+ code,
+ position
+ ];
+ tokens.push(tag);
+ return curr;
+ }
+ // Filters
+ tokens.push([
+ "filter",
+ code
+ ]);
+ return curr;
+ });
+ position += indexes[lastIndex];
+ source = source.slice(indexes[lastIndex]);
+ type = "string";
+ // Search the closing echo tag {{ /echo }}
+ if (tag?.[1].match(/^\-?\s*echo\s*\-?$/)) {
+ const end = source.match(/{{\-?\s*\/echo\s*\-?}}/);
+ if (!end) {
+ throw new Error("Unclosed echo tag");
+ }
+ const rawCode = source.slice(0, end.index);
+ tag[1] = `echo ${JSON.stringify(rawCode)}`;
+ const length = Number(end.index) + end[0].length;
+ source = source.slice(length);
+ position += length;
+ }
+ continue;
+ }
+ }
+ } catch (error) {
+ return {
+ tokens,
+ position,
+ error: error
+ };
+ }
+ return {
+ tokens,
+ position,
+ error: undefined
+ };
+}
+/**
+ * Parse a tag and return the indexes of the start and end brackets, and the filters between.
+ * For example: {{ tag |> filter1 |> filter2 }} => [2, 9, 20, 31]
+ */ export function parseTag(source) {
+ const indexes = [
+ 2
+ ];
+ analyze(source, (type, index)=>{
+ if (type === "close") {
+ indexes.push(index);
+ return false;
+ }
+ if (type === "new-filter") {
+ indexes.push(index);
+ } else if (type === "unclosed") {
+ throw new Error("Unclosed tag");
+ }
+ });
+ return indexes;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9zcmMvdG9rZW5pemVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmFseXplIGZyb20gXCIuL2pzLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFRva2VuVHlwZSA9IFwic3RyaW5nXCIgfCBcInRhZ1wiIHwgXCJmaWx0ZXJcIiB8IFwiY29tbWVudFwiO1xuZXhwb3J0IHR5cGUgVG9rZW4gPSBbVG9rZW5UeXBlLCBzdHJpbmcsIG51bWJlcj9dO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuaXplUmVzdWx0IHtcbiAgdG9rZW5zOiBUb2tlbltdO1xuICBwb3NpdGlvbjogbnVtYmVyO1xuICBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRva2VuaXplKHNvdXJjZTogc3RyaW5nKTogVG9rZW5pemVSZXN1bHQge1xuICBjb25zdCB0b2tlbnM6IFRva2VuW10gPSBbXTtcbiAgbGV0IHR5cGU6IFRva2VuVHlwZSA9IFwic3RyaW5nXCI7XG4gIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAoc291cmNlLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc291cmNlLmluZGV4T2YoXCJ7e1wiKTtcbiAgICAgICAgY29uc3QgY29kZSA9IGluZGV4ID09PSAtMSA/IHNvdXJjZSA6IHNvdXJjZS5zbGljZSgwLCBpbmRleCk7XG5cbiAgICAgICAgdG9rZW5zLnB1c2goW3R5cGUsIGNvZGUsIHBvc2l0aW9uXSk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24gKz0gaW5kZXg7XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zbGljZShpbmRleCk7XG4gICAgICAgIHR5cGUgPSBzb3VyY2Uuc3RhcnRzV2l0aChcInt7I1wiKSA/IFwiY29tbWVudFwiIDogXCJ0YWdcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNvbW1lbnRcIikge1xuICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc2xpY2UoMyk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc291cmNlLmluZGV4T2YoXCIjfX1cIik7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSBpbmRleCA9PT0gLTEgPyBzb3VyY2UgOiBzb3VyY2Uuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB0b2tlbnMucHVzaChbdHlwZSwgY29tbWVudCwgcG9zaXRpb25dKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwb3NpdGlvbiArPSBpbmRleCArIDM7XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zbGljZShpbmRleCArIDMpO1xuICAgICAgICB0eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInRhZ1wiKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBwYXJzZVRhZyhzb3VyY2UpO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBpbmRleGVzLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCB0YWc6IFRva2VuIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGluZGV4ZXMucmVkdWNlKChwcmV2LCBjdXJyLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvZGUgPSBzb3VyY2Uuc2xpY2UocHJldiwgY3VyciAtIDIpO1xuXG4gICAgICAgICAgLy8gVGFnXG4gICAgICAgICAgaWYgKGluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICB0YWcgPSBbdHlwZSwgY29kZSwgcG9zaXRpb25dO1xuICAgICAgICAgICAgdG9rZW5zLnB1c2godGFnKTtcbiAgICAgICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbHRlcnNcbiAgICAgICAgICB0b2tlbnMucHVzaChbXCJmaWx0ZXJcIiwgY29kZV0pO1xuICAgICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgICB9KTtcblxuICAgICAgICBwb3NpdGlvbiArPSBpbmRleGVzW2xhc3RJbmRleF07XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zbGljZShpbmRleGVzW2xhc3RJbmRleF0pO1xuICAgICAgICB0eXBlID0gXCJzdHJpbmdcIjtcblxuICAgICAgICAvLyBTZWFyY2ggdGhlIGNsb3NpbmcgZWNobyB0YWcge3sgL2VjaG8gfX1cbiAgICAgICAgaWYgKHRhZz8uWzFdLm1hdGNoKC9eXFwtP1xccyplY2hvXFxzKlxcLT8kLykpIHtcbiAgICAgICAgICBjb25zdCBlbmQgPSBzb3VyY2UubWF0Y2goL3t7XFwtP1xccypcXC9lY2hvXFxzKlxcLT99fS8pO1xuXG4gICAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuY2xvc2VkIGVjaG8gdGFnXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhd0NvZGUgPSBzb3VyY2Uuc2xpY2UoMCwgZW5kLmluZGV4KTtcbiAgICAgICAgICB0YWdbMV0gPSBgZWNobyAke0pTT04uc3RyaW5naWZ5KHJhd0NvZGUpfWA7XG4gICAgICAgICAgY29uc3QgbGVuZ3RoID0gTnVtYmVyKGVuZC5pbmRleCkgKyBlbmRbMF0ubGVuZ3RoO1xuICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zbGljZShsZW5ndGgpO1xuICAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyB0b2tlbnMsIHBvc2l0aW9uLCBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfCB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIHJldHVybiB7IHRva2VucywgcG9zaXRpb24sIGVycm9yOiB1bmRlZmluZWQgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRhZyBhbmQgcmV0dXJuIHRoZSBpbmRleGVzIG9mIHRoZSBzdGFydCBhbmQgZW5kIGJyYWNrZXRzLCBhbmQgdGhlIGZpbHRlcnMgYmV0d2Vlbi5cbiAqIEZvciBleGFtcGxlOiB7eyB0YWcgfD4gZmlsdGVyMSB8PiBmaWx0ZXIyIH19ID0+IFsyLCA5LCAyMCwgMzFdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRhZyhzb3VyY2U6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgaW5kZXhlczogbnVtYmVyW10gPSBbMl07XG5cbiAgYW5hbHl6ZShzb3VyY2UsICh0eXBlLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlID09PSBcImNsb3NlXCIpIHtcbiAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFwibmV3LWZpbHRlclwiKSB7XG4gICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ1bmNsb3NlZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmNsb3NlZCB0YWdcIik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5kZXhlcztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGFBQWEsVUFBVTtBQVc5QixlQUFlLFNBQVMsU0FBUyxNQUFjO0VBQzdDLE1BQU0sU0FBa0IsRUFBRTtFQUMxQixJQUFJLE9BQWtCO0VBQ3RCLElBQUksV0FBVztFQUVmLElBQUk7SUFDRixNQUFPLE9BQU8sTUFBTSxHQUFHLEVBQUc7TUFDeEIsSUFBSSxTQUFTLFVBQVU7UUFDckIsTUFBTSxRQUFRLE9BQU8sT0FBTyxDQUFDO1FBQzdC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
+// denoCacheMetadata=4919684051523569975,4133447679794853030 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f1561e684b27ff55faacd9771405941bd912fc01fa66fcf29258f32063199bd6.js b/vendor/gen/https/deno.land/f1561e684b27ff55faacd9771405941bd912fc01fa66fcf29258f32063199bd6.js
new file mode 100644
index 0000000..5b3f6a8
--- /dev/null
+++ b/vendor/gen/https/deno.land/f1561e684b27ff55faacd9771405941bd912fc01fa66fcf29258f32063199bd6.js
@@ -0,0 +1,4 @@
+import Sizzle from "./sizzle.js";
+export const DOM = Sizzle;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvZGVub19kb21AdjAuMS40OS9zcmMvZG9tL3NlbGVjdG9ycy9zaXp6bGUtdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNpenpsZSBmcm9tIFwiLi9zaXp6bGUuanNcIjtcbmltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50LnRzXCI7XG5pbXBvcnQgdHlwZSB7IERvY3VtZW50IH0gZnJvbSBcIi4uL2RvY3VtZW50LnRzXCI7XG5cbmV4cG9ydCBjb25zdCBET006IChkb2M6IERvY3VtZW50KSA9PiB7XG4gIGZpcnN0KFxuICAgIHNlbGVjdG9yOiBzdHJpbmcsXG4gICAgY29udGV4dDogRWxlbWVudCB8IERvY3VtZW50LFxuICApOiBFbGVtZW50IHwgbnVsbDtcbiAgbWF0Y2goXG4gICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICBjb250ZXh0OiBFbGVtZW50IHwgRG9jdW1lbnQsXG4gICk6IGJvb2xlYW47XG4gIHNlbGVjdChcbiAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgIGNvbnRleHQ6IEVsZW1lbnQgfCBEb2N1bWVudCxcbiAgKTogRWxlbWVudFtdO1xufSA9IFNpenpsZSBhcyBhbnk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLGNBQWM7QUFJakMsT0FBTyxNQUFNLE1BYVQsT0FBYyJ9
+// denoCacheMetadata=14759262006530515638,10229695178846719273 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f182e676d52341f44023b0b0e7f431da35821eed8c08bc4dfa93983aeca96e38.js b/vendor/gen/https/deno.land/f182e676d52341f44023b0b0e7f431da35821eed8c08bc4dfa93983aeca96e38.js
new file mode 100644
index 0000000..f973f15
--- /dev/null
+++ b/vendor/gen/https/deno.land/f182e676d52341f44023b0b0e7f431da35821eed8c08bc4dfa93983aeca96e38.js
@@ -0,0 +1,51 @@
+export default function() {
+ return (env)=>{
+ env.tags.push(exportTag);
+ };
+}
+function exportTag(env, code, _output, tokens) {
+ if (!code.startsWith("export ")) {
+ return;
+ }
+ const expression = code.replace(/^export\s+/, "");
+ const { dataVarname } = env.options;
+ // Value is set (e.g. {{ export foo = "bar" }})
+ if (expression.includes("=")) {
+ const match = code.match(/^export\s+([\w]+)\s*=\s*([\s\S]+)$/);
+ if (!match) {
+ throw new Error(`Invalid export tag: ${code}`);
+ }
+ const [, variable, value] = match;
+ const val = env.compileFilters(tokens, value);
+ return `if (${dataVarname}.hasOwnProperty("${variable}")) {
+ ${variable} = ${val};
+ } else {
+ var ${variable} = ${val};
+ }
+ ${dataVarname}["${variable}"] = ${variable};
+ __exports["${variable}"] = ${variable};
+ `;
+ }
+ // Value is captured (eg: {{ export foo }}bar{{ /export }})
+ const compiled = [];
+ const compiledFilters = env.compileFilters(tokens, expression);
+ compiled.push(`if (${dataVarname}.hasOwnProperty("${expression}")) {
+ ${expression} = "";
+ } else {
+ var ${expression} = "";
+ }
+ `);
+ compiled.push(...env.compileTokens(tokens, expression, [
+ "/export"
+ ]));
+ if (tokens.length && (tokens[0][0] !== "tag" || tokens[0][1] !== "/export")) {
+ throw new Error(`Missing closing tag for export tag: ${code}`);
+ }
+ tokens.shift();
+ compiled.push(`${expression} = ${compiledFilters};`);
+ compiled.push(`${dataVarname}["${expression.trim()}"] = ${expression};`);
+ compiled.push(`__exports["${expression.trim()}"] = ${expression};`);
+ return compiled.join("\n");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9wbHVnaW5zL2V4cG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4uL3NyYy90b2tlbml6ZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIFBsdWdpbiB9IGZyb20gXCIuLi9zcmMvZW52aXJvbm1lbnQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCk6IFBsdWdpbiB7XG4gIHJldHVybiAoZW52OiBFbnZpcm9ubWVudCkgPT4ge1xuICAgIGVudi50YWdzLnB1c2goZXhwb3J0VGFnKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb3J0VGFnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjb2RlOiBzdHJpbmcsXG4gIF9vdXRwdXQ6IHN0cmluZyxcbiAgdG9rZW5zOiBUb2tlbltdLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb2RlLnN0YXJ0c1dpdGgoXCJleHBvcnQgXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGNvZGUucmVwbGFjZSgvXmV4cG9ydFxccysvLCBcIlwiKTtcbiAgY29uc3QgeyBkYXRhVmFybmFtZSB9ID0gZW52Lm9wdGlvbnM7XG5cbiAgLy8gVmFsdWUgaXMgc2V0IChlLmcuIHt7IGV4cG9ydCBmb28gPSBcImJhclwiIH19KVxuICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICBjb25zdCBtYXRjaCA9IGNvZGUubWF0Y2goL15leHBvcnRcXHMrKFtcXHddKylcXHMqPVxccyooW1xcc1xcU10rKSQvKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBleHBvcnQgdGFnOiAke2NvZGV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgWywgdmFyaWFibGUsIHZhbHVlXSA9IG1hdGNoO1xuICAgIGNvbnN0IHZhbCA9IGVudi5jb21waWxlRmlsdGVycyh0b2tlbnMsIHZhbHVlKTtcblxuICAgIHJldHVybiBgaWYgKCR7ZGF0YVZhcm5hbWV9Lmhhc093blByb3BlcnR5KFwiJHt2YXJpYWJsZX1cIikpIHtcbiAgICAgICR7dmFyaWFibGV9ID0gJHt2YWx9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgJHt2YXJpYWJsZX0gPSAke3ZhbH07XG4gICAgfVxuICAgICR7ZGF0YVZhcm5hbWV9W1wiJHt2YXJpYWJsZX1cIl0gPSAke3ZhcmlhYmxlfTtcbiAgICBfX2V4cG9ydHNbXCIke3ZhcmlhYmxlfVwiXSA9ICR7dmFyaWFibGV9O1xuICAgIGA7XG4gIH1cblxuICAvLyBWYWx1ZSBpcyBjYXB0dXJlZCAoZWc6IHt7IGV4cG9ydCBmb28gfX1iYXJ7eyAvZXhwb3J0IH19KVxuICBjb25zdCBjb21waWxlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY29tcGlsZWRGaWx0ZXJzID0gZW52LmNvbXBpbGVGaWx0ZXJzKHRva2VucywgZXhwcmVzc2lvbik7XG5cbiAgY29tcGlsZWQucHVzaChgaWYgKCR7ZGF0YVZhcm5hbWV9Lmhhc093blByb3BlcnR5KFwiJHtleHByZXNzaW9ufVwiKSkge1xuICAgICR7ZXhwcmVzc2lvbn0gPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHZhciAke2V4cHJlc3Npb259ID0gXCJcIjtcbiAgfVxuICBgKTtcblxuICBjb21waWxlZC5wdXNoKC4uLmVudi5jb21waWxlVG9rZW5zKHRva2VucywgZXhwcmVzc2lvbiwgW1wiL2V4cG9ydFwiXSkpO1xuXG4gIGlmICh0b2tlbnMubGVuZ3RoICYmICh0b2tlbnNbMF1bMF0gIT09IFwidGFnXCIgfHwgdG9rZW5zWzBdWzFdICE9PSBcIi9leHBvcnRcIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2xvc2luZyB0YWcgZm9yIGV4cG9ydCB0YWc6ICR7Y29kZX1gKTtcbiAgfVxuXG4gIHRva2Vucy5zaGlmdCgpO1xuICBjb21waWxlZC5wdXNoKGAke2V4cHJlc3Npb259ID0gJHtjb21waWxlZEZpbHRlcnN9O2ApO1xuICBjb21waWxlZC5wdXNoKGAke2RhdGFWYXJuYW1lfVtcIiR7ZXhwcmVzc2lvbi50cmltKCl9XCJdID0gJHtleHByZXNzaW9ufTtgKTtcbiAgY29tcGlsZWQucHVzaChgX19leHBvcnRzW1wiJHtleHByZXNzaW9uLnRyaW0oKX1cIl0gPSAke2V4cHJlc3Npb259O2ApO1xuICByZXR1cm4gY29tcGlsZWQuam9pbihcIlxcblwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxlQUFlO0VBQ2IsT0FBTyxDQUFDO0lBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2hCO0FBQ0Y7QUFFQSxTQUFTLFVBQ1AsR0FBZ0IsRUFDaEIsSUFBWSxFQUNaLE9BQWUsRUFDZixNQUFlO0VBRWYsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLFlBQVk7SUFDL0I7RUFDRjtFQUVBLE1BQU0sYUFBYSxLQUFLLE9BQU8sQ0FBQyxjQUFjO0VBQzlDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLE9BQU87RUFFbkMsK0NBQStDO0VBQy9DLElBQUksV0FBVyxRQUFRLENBQUMsTUFBTTtJQUM1QixNQUFNLFFBQVEsS0FBSyxLQUFLLENBQUM7SUFFekIsSUFBSSxDQUFDLE9BQU87TUFDVixNQUFNLElBQUksTUFBTSxDQUFDLG9CQUFvQixFQUFFLE1BQU07SUFDL0M7SUFFQSxNQUFNLEdBQUcsVUFBVSxNQUFNLEdBQUc7SUFDNUIsTUFBTSxNQUFNLElBQUksY0FBYyxDQUFDLFFBQVE7SUFFdkMsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLGlCQUFpQixFQUFFLFNBQVM7TUFDcEQsRUFBRSxTQUFTLEdBQUcsRUFBRSxJQUFJOztVQUVoQixFQUFFLFNBQVMsR0FBRyxFQUFFLElBQUk7O0lBRTFCLEVBQUUsWUFBWSxFQUFFLEVBQUUsU0FBUyxLQUFLLEVBQUUsU0FBUztlQUNoQyxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVM7SUFDdEMsQ0FBQztFQUNIO0VBRUEsMkRBQTJEO0VBQzNELE1BQU0sV0FBcUIsRUFBRTtFQUM3QixNQUFNLGtCQUFrQixJQUFJLGNBQWMsQ0FBQyxRQUFRO0VBRW5ELFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksaUJBQWlCLEVBQUUsV0FBVztJQUM3RCxFQUFFLFdBQVc7O1FBRVQsRUFBRSxXQUFXOztFQUVuQixDQUFDO0VBRUQsU0FBUyxJQUFJLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxZQUFZO0lBQUM7R0FBVTtFQUVsRSxJQUFJLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUc7SUFDM0UsTUFBTSxJQUFJLE1BQU0sQ0FBQyxvQ0FBb0MsRUFBRSxNQUFNO0VBQy9EO0VBRUEsT0FBTyxLQUFLO0VBQ1osU0FBUyxJQUFJLENBQUMsR0FBRyxXQUFXLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ25ELFNBQVMsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsV0FBVyxJQUFJLEdBQUcsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0VBQ3ZFLFNBQVMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsSUFBSSxHQUFHLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztFQUNsRSxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBQ3ZCIn0=
+// denoCacheMetadata=9442748214727048622,591656589154776256 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f5ab6a7e6b26573f6cb96ffcf1cb5c4eba0a44d7737754299ecf5ebb12af5906.js b/vendor/gen/https/deno.land/f5ab6a7e6b26573f6cb96ffcf1cb5c4eba0a44d7737754299ecf5ebb12af5906.js
new file mode 100644
index 0000000..48d728b
--- /dev/null
+++ b/vendor/gen/https/deno.land/f5ab6a7e6b26573f6cb96ffcf1cb5c4eba0a44d7737754299ecf5ebb12af5906.js
@@ -0,0 +1,4 @@
+export * from "https://deno.land/x/esbuild@v0.25.4/mod.js";
+export { denoPlugins } from "jsr:@luca/esbuild-deno-loader@0.11.1";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9lc2J1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC94L2VzYnVpbGRAdjAuMjUuNC9tb2QuanNcIjtcbmV4cG9ydCB7IGRlbm9QbHVnaW5zIH0gZnJvbSBcImpzcjpAbHVjYS9lc2J1aWxkLWRlbm8tbG9hZGVyQDAuMTEuMVwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkNBQTZDO0FBQzNELFNBQVMsV0FBVyxRQUFRLHVDQUF1QyJ9
+// denoCacheMetadata=47152614018096681,18106692563007830614 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f64818ea7796afb334b74e1511bde33341be04316575a248563f571b7eae772b.js b/vendor/gen/https/deno.land/f64818ea7796afb334b74e1511bde33341be04316575a248563f571b7eae772b.js
new file mode 100644
index 0000000..4c6cb33
--- /dev/null
+++ b/vendor/gen/https/deno.land/f64818ea7796afb334b74e1511bde33341be04316575a248563f571b7eae772b.js
@@ -0,0 +1,171 @@
+import { encodeBase64 } from "./deps.ts";
+/** Escape sequence: `\x1B` */ const ESC = "\x1B";
+/** Control sequence intro: `\x1B[` */ const CSI = `${ESC}[`;
+/** Operating system command: `\x1B]` */ const OSC = `${ESC}]`;
+/** Link separator */ const SEP = ";";
+/** Ring audio bell: `\u0007` */ export const bel = "\u0007";
+/** Get cursor position. */ export const cursorPosition = `${CSI}6n`;
+/**
+ * Move cursor to x, y, counting from the top left corner.
+ * @param x Position left.
+ * @param y Position top.
+ */ export function cursorTo(x, y) {
+ if (typeof y !== "number") {
+ return `${CSI}${x}G`;
+ }
+ return `${CSI}${y};${x}H`;
+}
+/**
+ * Move cursor by offset.
+ * @param x Offset left.
+ * @param y Offset top.
+ */ export function cursorMove(x, y) {
+ let ret = "";
+ if (x < 0) {
+ ret += `${CSI}${-x}D`;
+ } else if (x > 0) {
+ ret += `${CSI}${x}C`;
+ }
+ if (y < 0) {
+ ret += `${CSI}${-y}A`;
+ } else if (y > 0) {
+ ret += `${CSI}${y}B`;
+ }
+ return ret;
+}
+/**
+ * Move cursor up by n lines.
+ * @param count Number of lines.
+ */ export function cursorUp(count = 1) {
+ return `${CSI}${count}A`;
+}
+/**
+ * Move cursor down by n lines.
+ * @param count Number of lines.
+ */ export function cursorDown(count = 1) {
+ return `${CSI}${count}B`;
+}
+/**
+ * Move cursor forward by n lines.
+ * @param count Number of lines.
+ */ export function cursorForward(count = 1) {
+ return `${CSI}${count}C`;
+}
+/**
+ * Move cursor backward by n lines.
+ * @param count Number of lines.
+ */ export function cursorBackward(count = 1) {
+ return `${CSI}${count}D`;
+}
+/**
+ * Move cursor to the beginning of the line n lines down.
+ * @param count Number of lines.
+ */ export function cursorNextLine(count = 1) {
+ return `${CSI}E`.repeat(count);
+}
+/**
+ * Move cursor to the beginning of the line n lines up.
+ * @param count Number of lines.
+ */ export function cursorPrevLine(count = 1) {
+ return `${CSI}F`.repeat(count);
+}
+/** Move cursor to first column of current row. */ export const cursorLeft = `${CSI}G`;
+/** Hide cursor. */ export const cursorHide = `${CSI}?25l`;
+/** Show cursor. */ export const cursorShow = `${CSI}?25h`;
+/** Save cursor. */ export const cursorSave = `${ESC}7`;
+/** Restore cursor. */ export const cursorRestore = `${ESC}8`;
+/**
+ * Scroll window up by n lines.
+ * @param count Number of lines.
+ */ export function scrollUp(count = 1) {
+ return `${CSI}S`.repeat(count);
+}
+/**
+ * Scroll window down by n lines.
+ * @param count Number of lines.
+ */ export function scrollDown(count = 1) {
+ return `${CSI}T`.repeat(count);
+}
+/** Clear screen. */ export const eraseScreen = `${CSI}2J`;
+/**
+ * Clear screen up by n lines.
+ * @param count Number of lines.
+ */ export function eraseUp(count = 1) {
+ return `${CSI}1J`.repeat(count);
+}
+/**
+ * Clear screen down by n lines.
+ * @param count Number of lines.
+ */ export function eraseDown(count = 1) {
+ return `${CSI}0J`.repeat(count);
+}
+/** Clear current line. */ export const eraseLine = `${CSI}2K`;
+/** Clear to line end. */ export const eraseLineEnd = `${CSI}0K`;
+/** Clear to line start. */ export const eraseLineStart = `${CSI}1K`;
+/**
+ * Clear screen and move cursor by n lines up and move cursor to first column.
+ * @param count Number of lines.
+ */ export function eraseLines(count) {
+ let clear = "";
+ for(let i = 0; i < count; i++){
+ clear += eraseLine + (i < count - 1 ? cursorUp() : "");
+ }
+ clear += cursorLeft;
+ return clear;
+}
+/** Clear the terminal screen. (Viewport) */ export const clearScreen = "\u001Bc";
+/**
+ * Clear the whole terminal, including scrollback buffer.
+ * (Not just the visible part of it).
+ */ export const clearTerminal = Deno.build.os === "windows" ? `${eraseScreen}${CSI}0f` : `${eraseScreen}${CSI}3J${CSI}H`;
+/**
+ * Create link.
+ * @param text Link text.
+ * @param url Link url.
+ * ```
+ * console.log(
+ * ansi.link("Click me.", "https://deno.land"),
+ * );
+ * ```
+ */ export function link(text, url) {
+ return [
+ OSC,
+ "8",
+ SEP,
+ SEP,
+ url,
+ bel,
+ text,
+ OSC,
+ "8",
+ SEP,
+ SEP,
+ bel
+ ].join("");
+}
+/**
+ * Create image.
+ * @param buffer Image buffer.
+ * @param options Image options.
+ * ```
+ * const response = await fetch("https://deno.land/images/hashrock_simple.png");
+ * const imageBuffer: ArrayBuffer = await response.arrayBuffer();
+ * console.log(
+ * ansi.image(imageBuffer),
+ * );
+ * ```
+ */ export function image(buffer, options) {
+ let ret = `${OSC}1337;File=inline=1`;
+ if (options?.width) {
+ ret += `;width=${options.width}`;
+ }
+ if (options?.height) {
+ ret += `;height=${options.height}`;
+ }
+ if (options?.preserveAspectRatio === false) {
+ ret += ";preserveAspectRatio=0";
+ }
+ return ret + ":" + encodeBase64(buffer) + bel;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvYW5zaS9hbnNpX2VzY2FwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5jb2RlQmFzZTY0IH0gZnJvbSBcIi4vZGVwcy50c1wiO1xuXG4vKiogRXNjYXBlIHNlcXVlbmNlOiBgXFx4MUJgICovXG5jb25zdCBFU0MgPSBcIlxceDFCXCI7XG4vKiogQ29udHJvbCBzZXF1ZW5jZSBpbnRybzogYFxceDFCW2AgKi9cbmNvbnN0IENTSSA9IGAke0VTQ31bYDtcbi8qKiBPcGVyYXRpbmcgc3lzdGVtIGNvbW1hbmQ6IGBcXHgxQl1gICovXG5jb25zdCBPU0MgPSBgJHtFU0N9XWA7XG4vKiogTGluayBzZXBhcmF0b3IgKi9cbmNvbnN0IFNFUCA9IFwiO1wiO1xuXG4vKiogUmluZyBhdWRpbyBiZWxsOiBgXFx1MDAwN2AgKi9cbmV4cG9ydCBjb25zdCBiZWwgPSBcIlxcdTAwMDdcIjtcbi8qKiBHZXQgY3Vyc29yIHBvc2l0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGN1cnNvclBvc2l0aW9uID0gYCR7Q1NJfTZuYDtcblxuLyoqXG4gKiBNb3ZlIGN1cnNvciB0byB4LCB5LCBjb3VudGluZyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIuXG4gKiBAcGFyYW0geCBQb3NpdGlvbiBsZWZ0LlxuICogQHBhcmFtIHkgUG9zaXRpb24gdG9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3Vyc29yVG8oeDogbnVtYmVyLCB5PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB5ICE9PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke3h9R2A7XG4gIH1cbiAgcmV0dXJuIGAke0NTSX0ke3l9OyR7eH1IYDtcbn1cblxuLyoqXG4gKiBNb3ZlIGN1cnNvciBieSBvZmZzZXQuXG4gKiBAcGFyYW0geCBPZmZzZXQgbGVmdC5cbiAqIEBwYXJhbSB5IE9mZnNldCB0b3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJzb3JNb3ZlKHg6IG51bWJlciwgeTogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IHJldCA9IFwiXCI7XG5cbiAgaWYgKHggPCAwKSB7XG4gICAgcmV0ICs9IGAke0NTSX0key14fURgO1xuICB9IGVsc2UgaWYgKHggPiAwKSB7XG4gICAgcmV0ICs9IGAke0NTSX0ke3h9Q2A7XG4gIH1cblxuICBpZiAoeSA8IDApIHtcbiAgICByZXQgKz0gYCR7Q1NJfSR7LXl9QWA7XG4gIH0gZWxzZSBpZiAoeSA+IDApIHtcbiAgICByZXQgKz0gYCR7Q1NJfSR7eX1CYDtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgdXAgYnkgbiBsaW5lcy5cbiAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJzb3JVcChjb3VudCA9IDEpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9QWA7XG59XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgZG93biBieSBuIGxpbmVzLlxuICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnNvckRvd24oY291bnQgPSAxKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0NTSX0ke2NvdW50fUJgO1xufVxuXG4vKipcbiAqIE1vdmUgY3Vyc29yIGZvcndhcmQgYnkgbiBsaW5lcy5cbiAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJzb3JGb3J3YXJkKGNvdW50ID0gMSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDU0l9JHtjb3VudH1DYDtcbn1cblxuLyoqXG4gKiBNb3ZlIGN1cnNvciBiYWNrd2FyZCBieSBuIGxpbmVzLlxuICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnNvckJhY2t3YXJkKGNvdW50ID0gMSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDU0l9JHtjb3VudH1EYDtcbn1cblxuLyoqXG4gKiBNb3ZlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIG4gbGluZXMgZG93bi5cbiAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJzb3JOZXh0TGluZShjb3VudCA9IDEpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Q1NJfUVgLnJlcGVhdChjb3VudCk7XG59XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSBuIGxpbmVzIHVwLlxuICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnNvclByZXZMaW5lKGNvdW50ID0gMSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDU0l9RmAucmVwZWF0KGNvdW50KTtcbn1cblxuLyoqIE1vdmUgY3Vyc29yIHRvIGZpcnN0IGNvbHVtbiBvZiBjdXJyZW50IHJvdy4gKi9cbmV4cG9ydCBjb25zdCBjdXJzb3JMZWZ0ID0gYCR7Q1NJfUdgO1xuLyoqIEhpZGUgY3Vyc29yLiAqL1xuZXhwb3J0IGNvbnN0IGN1cnNvckhpZGUgPSBgJHtDU0l9PzI1bGA7XG4vKiogU2hvdyBjdXJzb3IuICovXG5leHBvcnQgY29uc3QgY3Vyc29yU2hvdyA9IGAke0NTSX0/MjVoYDtcbi8qKiBTYXZlIGN1cnNvci4gKi9cbmV4cG9ydCBjb25zdCBjdXJzb3JTYXZlID0gYCR7RVNDfTdgO1xuLyoqIFJlc3RvcmUgY3Vyc29yLiAqL1xuZXhwb3J0IGNvbnN0IGN1cnNvclJlc3RvcmUgPSBgJHtFU0N9OGA7XG5cbi8qKlxuICogU2Nyb2xsIHdpbmRvdyB1cCBieSBuIGxpbmVzLlxuICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFVwKGNvdW50ID0gMSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDU0l9U2AucmVwZWF0KGNvdW50KTtcbn1cblxuLyoqXG4gKiBTY3JvbGwgd2luZG93IGRvd24gYnkgbiBsaW5lcy5cbiAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgbGluZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxEb3duKGNvdW50ID0gMSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDU0l9VGAucmVwZWF0KGNvdW50KTtcbn1cblxuLyoqIENsZWFyIHNjcmVlbi4gKi9cbmV4cG9ydCBjb25zdCBlcmFzZVNjcmVlbiA9IGAke0NTSX0ySmA7XG5cbi8qKlxuICogQ2xlYXIgc2NyZWVuIHVwIGJ5IG4gbGluZXMuXG4gKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGxpbmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJhc2VVcChjb3VudCA9IDEpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Q1NJfTFKYC5yZXBlYXQoY291bnQpO1xufVxuXG4vKipcbiAqIENsZWFyIHNjcmVlbiBkb3duIGJ5IG4gbGluZXMuXG4gKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGxpbmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJhc2VEb3duKGNvdW50ID0gMSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDU0l9MEpgLnJlcGVhdChjb3VudCk7XG59XG5cbi8qKiBDbGVhciBjdXJyZW50IGxpbmUuICovXG5leHBvcnQgY29uc3QgZXJhc2VMaW5lID0gYCR7Q1NJfTJLYDtcbi8qKiBDbGVhciB0byBsaW5lIGVuZC4gKi9cbmV4cG9ydCBjb25zdCBlcmFzZUxpbmVFbmQgPSBgJHtDU0l9MEtgO1xuLyoqIENsZWFyIHRvIGxpbmUgc3RhcnQuICovXG5leHBvcnQgY29uc3QgZXJhc2VMaW5lU3RhcnQgPSBgJHtDU0l9MUtgO1xuXG4vKipcbiAqIENsZWFyIHNjcmVlbiBhbmQgbW92ZSBjdXJzb3IgYnkgbiBsaW5lcyB1cCBhbmQgbW92ZSBjdXJzb3IgdG8gZmlyc3QgY29sdW1uLlxuICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBsaW5lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVyYXNlTGluZXMoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBjbGVhciA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGNsZWFyICs9IGVyYXNlTGluZSArIChpIDwgY291bnQgLSAxID8gY3Vyc29yVXAoKSA6IFwiXCIpO1xuICB9XG4gIGNsZWFyICs9IGN1cnNvckxlZnQ7XG4gIHJldHVybiBjbGVhcjtcbn1cblxuLyoqIENsZWFyIHRoZSB0ZXJtaW5hbCBzY3JlZW4uIChWaWV3cG9ydCkgKi9cbmV4cG9ydCBjb25zdCBjbGVhclNjcmVlbiA9IFwiXFx1MDAxQmNcIjtcblxuLyoqXG4gKiBDbGVhciB0aGUgd2hvbGUgdGVybWluYWwsIGluY2x1ZGluZyBzY3JvbGxiYWNrIGJ1ZmZlci5cbiAqIChOb3QganVzdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIGl0KS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyVGVybWluYWwgPSBEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIlxuICA/IGAke2VyYXNlU2NyZWVufSR7Q1NJfTBmYFxuICAvLyAxLiBFcmFzZXMgdGhlIHNjcmVlbiAoT25seSBkb25lIGluIGNhc2UgYDJgIGlzIG5vdCBzdXBwb3J0ZWQpXG4gIC8vIDIuIEVyYXNlcyB0aGUgd2hvbGUgc2NyZWVuIGluY2x1ZGluZyBzY3JvbGxiYWNrIGJ1ZmZlclxuICAvLyAzLiBNb3ZlcyBjdXJzb3IgdG8gdGhlIHRvcC1sZWZ0IHBvc2l0aW9uXG4gIC8vIE1vcmUgaW5mbzogaHR0cHM6Ly93d3cucmVhbC13b3JsZC1zeXN0ZW1zLmNvbS9kb2NzL0FOU0ljb2RlLmh0bWxcbiAgOiBgJHtlcmFzZVNjcmVlbn0ke0NTSX0zSiR7Q1NJfUhgO1xuXG4vKipcbiAqIENyZWF0ZSBsaW5rLlxuICogQHBhcmFtIHRleHQgTGluayB0ZXh0LlxuICogQHBhcmFtIHVybCBMaW5rIHVybC5cbiAqIGBgYFxuICogY29uc29sZS5sb2coXG4gKiAgIGFuc2kubGluayhcIkNsaWNrIG1lLlwiLCBcImh0dHBzOi8vZGVuby5sYW5kXCIpLFxuICogKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGluayh0ZXh0OiBzdHJpbmcsIHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBPU0MsXG4gICAgXCI4XCIsXG4gICAgU0VQLFxuICAgIFNFUCxcbiAgICB1cmwsXG4gICAgYmVsLFxuICAgIHRleHQsXG4gICAgT1NDLFxuICAgIFwiOFwiLFxuICAgIFNFUCxcbiAgICBTRVAsXG4gICAgYmVsLFxuICBdLmpvaW4oXCJcIik7XG59XG5cbi8qKiBJbWFnZSBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZU9wdGlvbnMge1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgaW1hZ2UuXG4gKiBAcGFyYW0gYnVmZmVyICBJbWFnZSBidWZmZXIuXG4gKiBAcGFyYW0gb3B0aW9ucyBJbWFnZSBvcHRpb25zLlxuICogYGBgXG4gKiBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9kZW5vLmxhbmQvaW1hZ2VzL2hhc2hyb2NrX3NpbXBsZS5wbmdcIik7XG4gKiBjb25zdCBpbWFnZUJ1ZmZlcjogQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICogY29uc29sZS5sb2coXG4gKiAgIGFuc2kuaW1hZ2UoaW1hZ2VCdWZmZXIpLFxuICogKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2UoXG4gIGJ1ZmZlcjogc3RyaW5nIHwgQXJyYXlCdWZmZXIsXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMsXG4pOiBzdHJpbmcge1xuICBsZXQgcmV0ID0gYCR7T1NDfTEzMzc7RmlsZT1pbmxpbmU9MWA7XG5cbiAgaWYgKG9wdGlvbnM/LndpZHRoKSB7XG4gICAgcmV0ICs9IGA7d2lkdGg9JHtvcHRpb25zLndpZHRofWA7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uaGVpZ2h0KSB7XG4gICAgcmV0ICs9IGA7aGVpZ2h0PSR7b3B0aW9ucy5oZWlnaHR9YDtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5wcmVzZXJ2ZUFzcGVjdFJhdGlvID09PSBmYWxzZSkge1xuICAgIHJldCArPSBcIjtwcmVzZXJ2ZUFzcGVjdFJhdGlvPTBcIjtcbiAgfVxuXG4gIHJldHVybiByZXQgKyBcIjpcIiArIGVuY29kZUJhc2U2NChidWZmZXIpICsgYmVsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsWUFBWSxRQUFRLFlBQVk7QUFFekMsNEJBQTRCLEdBQzVCLE1BQU0sTUFBTTtBQUNaLG9DQUFvQyxHQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNyQixzQ0FBc0MsR0FDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDckIsbUJBQW1CLEdBQ25CLE1BQU0sTUFBTTtBQUVaLDhCQUE4QixHQUM5QixPQUFPLE1BQU0sTUFBTSxTQUFTO0FBQzVCLHlCQUF5QixHQUN6QixPQUFPLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUV6Qzs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsQ0FBUyxFQUFFLENBQVU7RUFDNUMsSUFBSSxPQUFPLE1BQU0sVUFBVTtJQUN6QixPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztFQUN0QjtFQUNBLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNCO0FBRUE7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBUyxXQUFXLENBQVMsRUFBRSxDQUFTO0VBQzdDLElBQUksTUFBTTtFQUVWLElBQUksSUFBSSxHQUFHO0lBQ1QsT0FBTyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN2QixPQUFPLElBQUksSUFBSSxHQUFHO0lBQ2hCLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCO0VBRUEsSUFBSSxJQUFJLEdBQUc7SUFDVCxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCLE9BQU8sSUFBSSxJQUFJLEdBQUc7SUFDaEIsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7RUFDdEI7RUFFQSxPQUFPO0FBQ1Q7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsU0FBUyxRQUFRLENBQUM7RUFDaEMsT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsV0FBVyxRQUFRLENBQUM7RUFDbEMsT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsY0FBYyxRQUFRLENBQUM7RUFDckMsT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsZUFBZSxRQUFRLENBQUM7RUFDdEMsT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsZUFBZSxRQUFRLENBQUM7RUFDdEMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzFCO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLGVBQWUsUUFBUSxDQUFDO0VBQ3RDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxQjtBQUVBLGdEQUFnRCxHQUNoRCxPQUFPLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEMsaUJBQWlCLEdBQ2pCLE9BQU8sTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN2QyxpQkFBaUIsR0FDakIsT0FBTyxNQUFNLGFBQWEsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLGlCQUFpQixHQUNqQixPQUFPLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLEdBQ3BCLE9BQU8sTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXZDOzs7Q0FHQyxHQUNELE9BQU8sU0FBUyxTQUFTLFFBQVEsQ0FBQztFQUNoQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsV0FBVyxRQUFRLENBQUM7RUFDbEMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzFCO0FBRUEsa0JBQWtCLEdBQ2xCLE9BQU8sTUFBTSxjQUFjLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUV0Qzs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsUUFBUSxRQUFRLENBQUM7RUFDL0IsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNCO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLFVBQVUsUUFBUSxDQUFDO0VBQ2pDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMzQjtBQUVBLHdCQUF3QixHQUN4QixPQUFPLE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7QUFDcEMsdUJBQXVCLEdBQ3ZCLE9BQU8sTUFBTSxlQUFlLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2Qyx5QkFBeUIsR0FDekIsT0FBTyxNQUFNLGlCQUFpQixHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7QUFFekM7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLFdBQVcsS0FBYTtFQUN0QyxJQUFJLFFBQVE7RUFDWixJQUFLLElBQUksSUFBSSxHQUFHLElBQUksT0FBTyxJQUFLO0lBQzlCLFNBQVMsWUFBWSxDQUFDLElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRTtFQUN2RDtFQUNBLFNBQVM7RUFDVCxPQUFPO0FBQ1Q7QUFFQSwwQ0FBMEMsR0FDMUMsT0FBTyxNQUFNLGNBQWMsVUFBVTtBQUVyQzs7O0NBR0MsR0FDRCxPQUFPLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyxDQUFDLEVBQUUsS0FBSyxZQUMzQyxHQUFHLGNBQWMsSUFBSSxFQUFFLENBQUMsR0FLeEIsR0FBRyxjQUFjLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFcEM7Ozs7Ozs7OztDQVNDLEdBQ0QsT0FBTyxTQUFTLEtBQUssSUFBWSxFQUFFLEdBQVc7RUFDNUMsT0FBTztJQUNMO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtHQUNELENBQUMsSUFBSSxDQUFDO0FBQ1Q7QUFTQTs7Ozs7Ozs7Ozs7Q0FXQyxHQUNELE9BQU8sU0FBUyxNQUNkLE1BQTRCLEVBQzVCLE9BQXNCO0VBRXRCLElBQUksTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUM7RUFFcEMsSUFBSSxTQUFTLE9BQU87SUFDbEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLEtBQUssRUFBRTtFQUNsQztFQUVBLElBQUksU0FBUyxRQUFRO0lBQ25CLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxNQUFNLEVBQUU7RUFDcEM7RUFFQSxJQUFJLFNBQVMsd0JBQXdCLE9BQU87SUFDMUMsT0FBTztFQUNUO0VBRUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxVQUFVO0FBQzVDIn0=
+// denoCacheMetadata=13163747317120128472,15437401025873900096 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f6b9b2bd96618d6fbd88b97b38a1f5c50174bb785acbc29de06f1535dd58f755.js b/vendor/gen/https/deno.land/f6b9b2bd96618d6fbd88b97b38a1f5c50174bb785acbc29de06f1535dd58f755.js
new file mode 100644
index 0000000..1b4e45f
--- /dev/null
+++ b/vendor/gen/https/deno.land/f6b9b2bd96618d6fbd88b97b38a1f5c50174bb785acbc29de06f1535dd58f755.js
@@ -0,0 +1,40 @@
+import { Provider } from "../provider.ts";
+export class NestLandProvider extends Provider {
+ name = "nest.land";
+ repositoryUrl = "https://nest.land/package/";
+ registryUrl = "https://x.nest.land/";
+ moduleName;
+ constructor({ name } = {}){
+ super();
+ this.moduleName = name;
+ }
+ async getVersions(name) {
+ const response = await fetch(`https://nest.land/api/package-client`, {
+ method: "post",
+ body: JSON.stringify({
+ data: {
+ name: this.moduleName ?? name
+ }
+ }),
+ headers: {
+ "Content-Type": "application/json"
+ }
+ });
+ if (!response.ok) {
+ throw new Error("couldn't fetch the latest version - try again after sometime");
+ }
+ const { body: { latestVersion, packageUploadNames } } = await response.json();
+ return {
+ latest: latestVersion,
+ versions: packageUploadNames.map((version)=>version.replace(new RegExp(`^${this.moduleName ?? name}@`), "")).reverse()
+ };
+ }
+ getRepositoryUrl(name) {
+ return new URL(`${this.moduleName ?? name}/`, this.repositoryUrl).href;
+ }
+ getRegistryUrl(name, version) {
+ return new URL(`${this.moduleName ?? name}@${version}/`, this.registryUrl).href;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC91cGdyYWRlL3Byb3ZpZGVyL25lc3RfbGFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgVmVyc2lvbnMgfSBmcm9tIFwiLi4vcHJvdmlkZXIudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXN0TGFuZFByb3ZpZGVyT3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBOZXN0TGFuZFByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXIge1xuICBuYW1lID0gXCJuZXN0LmxhbmRcIjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3J5VXJsID0gXCJodHRwczovL25lc3QubGFuZC9wYWNrYWdlL1wiO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5VXJsID0gXCJodHRwczovL3gubmVzdC5sYW5kL1wiO1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZU5hbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoeyBuYW1lIH06IE5lc3RMYW5kUHJvdmlkZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubW9kdWxlTmFtZSA9IG5hbWU7XG4gIH1cblxuICBhc3luYyBnZXRWZXJzaW9ucyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8VmVyc2lvbnM+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL25lc3QubGFuZC9hcGkvcGFja2FnZS1jbGllbnRgLCB7XG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkYXRhOiB7IG5hbWU6IHRoaXMubW9kdWxlTmFtZSA/PyBuYW1lIH0gfSksXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNvdWxkbid0IGZldGNoIHRoZSBsYXRlc3QgdmVyc2lvbiAtIHRyeSBhZ2FpbiBhZnRlciBzb21ldGltZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGJvZHk6IHsgbGF0ZXN0VmVyc2lvbiwgcGFja2FnZVVwbG9hZE5hbWVzIH0gfSA9IGF3YWl0IHJlc3BvbnNlXG4gICAgICAuanNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdGVzdDogbGF0ZXN0VmVyc2lvbixcbiAgICAgIHZlcnNpb25zOiBwYWNrYWdlVXBsb2FkTmFtZXMubWFwKFxuICAgICAgICAodmVyc2lvbjogc3RyaW5nKSA9PlxuICAgICAgICAgIHZlcnNpb24ucmVwbGFjZShuZXcgUmVnRXhwKGBeJHt0aGlzLm1vZHVsZU5hbWUgPz8gbmFtZX1AYCksIFwiXCIpLFxuICAgICAgKS5yZXZlcnNlKCksXG4gICAgfTtcbiAgfVxuXG4gIGdldFJlcG9zaXRvcnlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFVSTChgJHt0aGlzLm1vZHVsZU5hbWUgPz8gbmFtZX0vYCwgdGhpcy5yZXBvc2l0b3J5VXJsKS5ocmVmO1xuICB9XG5cbiAgZ2V0UmVnaXN0cnlVcmwobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVVJMKGAke3RoaXMubW9kdWxlTmFtZSA/PyBuYW1lfUAke3ZlcnNpb259L2AsIHRoaXMucmVnaXN0cnlVcmwpXG4gICAgICAuaHJlZjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsUUFBUSxRQUFrQixpQkFBaUI7QUFNcEQsT0FBTyxNQUFNLHlCQUF5QjtFQUNwQyxPQUFPLFlBQVk7RUFDRixnQkFBZ0IsNkJBQTZCO0VBQzdDLGNBQWMsdUJBQXVCO0VBQ3JDLFdBQW9CO0VBRXJDLFlBQVksRUFBRSxJQUFJLEVBQTJCLEdBQUcsQ0FBQyxDQUFDLENBQUU7SUFDbEQsS0FBSztJQUNMLElBQUksQ0FBQyxVQUFVLEdBQUc7RUFDcEI7RUFFQSxNQUFNLFlBQ0osSUFBWSxFQUNPO0lBQ25CLE1BQU0sV0FBVyxNQUFNLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFO01BQ25FLFFBQVE7TUFDUixNQUFNLEtBQUssU0FBUyxDQUFDO1FBQUUsTUFBTTtVQUFFLE1BQU0sSUFBSSxDQUFDLFVBQVUsSUFBSTtRQUFLO01BQUU7TUFDL0QsU0FBUztRQUFFLGdCQUFnQjtNQUFtQjtJQUNoRDtJQUNBLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtNQUNoQixNQUFNLElBQUksTUFDUjtJQUVKO0lBRUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLE1BQU0sU0FDM0QsSUFBSTtJQUVQLE9BQU87TUFDTCxRQUFRO01BQ1IsVUFBVSxtQkFBbUIsR0FBRyxDQUM5QixDQUFDLFVBQ0MsUUFBUSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxLQUM5RCxPQUFPO0lBQ1g7RUFDRjtFQUVBLGlCQUFpQixJQUFZLEVBQVU7SUFDckMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJO0VBQ3hFO0VBRUEsZUFBZSxJQUFZLEVBQUUsT0FBZSxFQUFVO0lBQ3BELE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQ3RFLElBQUk7RUFDVDtBQUNGIn0=
+// denoCacheMetadata=14023167665678013032,16272080554233527 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/f934b190b693fc774b58f2eb8cfd39ef420d11cd108028b71a788a4f975c05a4.js b/vendor/gen/https/deno.land/f934b190b693fc774b58f2eb8cfd39ef420d11cd108028b71a788a4f975c05a4.js
new file mode 100644
index 0000000..511c729
--- /dev/null
+++ b/vendor/gen/https/deno.land/f934b190b693fc774b58f2eb8cfd39ef420d11cd108028b71a788a4f975c05a4.js
@@ -0,0 +1,9 @@
+import { number } from "../../flags/types/number.ts";
+import { Type } from "../type.ts";
+/** Number type. */ export class NumberType extends Type {
+ /** Parse number type. */ parse(type) {
+ return number(type);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvY2xpZmZ5QHYwLjI1LjcvY29tbWFuZC90eXBlcy9udW1iZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbnVtYmVyIH0gZnJvbSBcIi4uLy4uL2ZsYWdzL3R5cGVzL251bWJlci50c1wiO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50VmFsdWUgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqIE51bWJlciB0eXBlLiAqL1xuZXhwb3J0IGNsYXNzIE51bWJlclR5cGUgZXh0ZW5kcyBUeXBlPG51bWJlcj4ge1xuICAvKiogUGFyc2UgbnVtYmVyIHR5cGUuICovXG4gIHB1YmxpYyBwYXJzZSh0eXBlOiBBcmd1bWVudFZhbHVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbnVtYmVyKHR5cGUpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxNQUFNLFFBQVEsOEJBQThCO0FBQ3JELFNBQVMsSUFBSSxRQUFRLGFBQWE7QUFHbEMsaUJBQWlCLEdBQ2pCLE9BQU8sTUFBTSxtQkFBbUI7RUFDOUIsdUJBQXVCLEdBQ3ZCLEFBQU8sTUFBTSxJQUFtQixFQUFVO0lBQ3hDLE9BQU8sT0FBTztFQUNoQjtBQUNGIn0=
+// denoCacheMetadata=17418560466108694433,17056633641924312807 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/fc05666a60f1512f32e3b7e8552b2385add292079bd266bc201dbf7f087411cb.js b/vendor/gen/https/deno.land/fc05666a60f1512f32e3b7e8552b2385add292079bd266bc201dbf7f087411cb.js
new file mode 100644
index 0000000..042974d
--- /dev/null
+++ b/vendor/gen/https/deno.land/fc05666a60f1512f32e3b7e8552b2385add292079bd266bc201dbf7f087411cb.js
@@ -0,0 +1,3 @@
+export * from "jsr:@std/crypto@1.0.5";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvZGVwcy9jcnlwdG8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcImpzcjpAc3RkL2NyeXB0b0AxLjAuNVwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCIn0=
+// denoCacheMetadata=5202012748752243782,18071772491568230034 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/fdaf1203a8e5af8f885066836e1b4da9dedd6ff81f3dabb347d119a209ebc6a3.js b/vendor/gen/https/deno.land/fdaf1203a8e5af8f885066836e1b4da9dedd6ff81f3dabb347d119a209ebc6a3.js
new file mode 100644
index 0000000..11aa023
--- /dev/null
+++ b/vendor/gen/https/deno.land/fdaf1203a8e5af8f885066836e1b4da9dedd6ff81f3dabb347d119a209ebc6a3.js
@@ -0,0 +1,23 @@
+import { path } from "../deps.ts";
+export class FileLoader {
+ #root;
+ constructor(root = Deno.cwd()){
+ this.#root = root;
+ }
+ async load(file) {
+ return {
+ source: await Deno.readTextFile(file)
+ };
+ }
+ resolve(from, file) {
+ if (file.startsWith(".")) {
+ return path.join(path.dirname(from), file);
+ }
+ if (file.startsWith(this.#root)) {
+ return file;
+ }
+ return path.join(this.#root, file);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvdmVudG9AdjEuMTMuMC9zcmMvbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhdGggfSBmcm9tIFwiLi4vZGVwcy50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlU291cmNlIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FkZXIge1xuICBsb2FkKGZpbGU6IHN0cmluZyk6IFRlbXBsYXRlU291cmNlIHwgUHJvbWlzZTxUZW1wbGF0ZVNvdXJjZT47XG4gIHJlc29sdmUoZnJvbTogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWxlTG9hZGVyIGltcGxlbWVudHMgTG9hZGVyIHtcbiAgI3Jvb3Q6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihyb290ID0gRGVuby5jd2QoKSkge1xuICAgIHRoaXMuI3Jvb3QgPSByb290O1xuICB9XG5cbiAgYXN5bmMgbG9hZChmaWxlOiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlU291cmNlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogYXdhaXQgRGVuby5yZWFkVGV4dEZpbGUoZmlsZSksXG4gICAgfTtcbiAgfVxuXG4gIHJlc29sdmUoZnJvbTogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmaWxlLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKHBhdGguZGlybmFtZShmcm9tKSwgZmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuc3RhcnRzV2l0aCh0aGlzLiNyb290KSkge1xuICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLiNyb290LCBmaWxlKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBSSxRQUFRLGFBQWE7QUFZbEMsT0FBTyxNQUFNO0VBQ1gsQ0FBQSxJQUFLLENBQVM7RUFFZCxZQUFZLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBRTtJQUM3QixJQUFJLENBQUMsQ0FBQSxJQUFLLEdBQUc7RUFDZjtFQUVBLE1BQU0sS0FBSyxJQUFZLEVBQTJCO0lBQ2hELE9BQU87TUFDTCxRQUFRLE1BQU0sS0FBSyxZQUFZLENBQUM7SUFDbEM7RUFDRjtFQUVBLFFBQVEsSUFBWSxFQUFFLElBQVksRUFBVTtJQUMxQyxJQUFJLEtBQUssVUFBVSxDQUFDLE1BQU07TUFDeEIsT0FBTyxLQUFLLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxPQUFPO0lBQ3ZDO0lBRUEsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQSxJQUFLLEdBQUc7TUFDL0IsT0FBTztJQUNUO0lBRUEsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxJQUFLLEVBQUU7RUFDL0I7QUFDRiJ9
+// denoCacheMetadata=13559671411018262912,4342862516494239873 \ No newline at end of file
diff --git a/vendor/gen/https/deno.land/fe21d44375cf065a9abcbcf926f7f4583ceb12e84f57f12b6d2149919d79d05b.js b/vendor/gen/https/deno.land/fe21d44375cf065a9abcbcf926f7f4583ceb12e84f57f12b6d2149919d79d05b.js
new file mode 100644
index 0000000..026d3ff
--- /dev/null
+++ b/vendor/gen/https/deno.land/fe21d44375cf065a9abcbcf926f7f4583ceb12e84f57f12b6d2149919d79d05b.js
@@ -0,0 +1,54 @@
+// deno-lint-ignore-file no-explicit-any
+class S {
+ #length = 0;
+ #type;
+ constructor(type){
+ this.#type = type;
+ }
+ get length() {
+ return this.#length;
+ }
+ clear() {
+ this.#length = 0;
+ Object.keys(this).forEach((key)=>{
+ delete this[key];
+ });
+ this.#sync("clear");
+ }
+ getItem(key) {
+ return this[key] ?? null;
+ }
+ key(index) {
+ return Object.keys(this)[index] ?? null;
+ }
+ removeItem(key) {
+ delete this[key];
+ this.#length--;
+ this.#sync("removeItem", key);
+ }
+ setItem(key, value) {
+ this[key] = value;
+ this.#length++;
+ this.#sync("setItem", key, value);
+ }
+ #sync(method, ...args) {
+ if (this.#type) {
+ globalThis.postMessage({
+ type: this.#type,
+ method,
+ args
+ });
+ }
+ }
+}
+// sessionStorage is always empty
+globalThis.sessionStorage = new S();
+export function initLocalStorage(data) {
+ const storage = new S("localStorage");
+ for (const [key, value] of Object.entries(data)){
+ storage.setItem(key, value);
+ }
+ globalThis.localStorage = storage;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3gvbHVtZUB2My4wLjIvY2xpL21pc3Npbmdfd29ya2VyX2FwaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZGVuby1saW50LWlnbm9yZS1maWxlIG5vLWV4cGxpY2l0LWFueVxuXG5jbGFzcyBTIGltcGxlbWVudHMgU3RvcmFnZSB7XG4gICNsZW5ndGg6IG51bWJlciA9IDA7XG4gICN0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgY29uc3RydWN0b3IodHlwZT86IHN0cmluZykge1xuICAgIHRoaXMuI3R5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy4jbGVuZ3RoO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy4jbGVuZ3RoID0gMDtcbiAgICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgfSk7XG4gICAgdGhpcy4jc3luYyhcImNsZWFyXCIpO1xuICB9XG5cbiAgZ2V0SXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzW2tleV0gPz8gbnVsbDtcbiAgfVxuXG4gIGtleShpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMpW2luZGV4XSA/PyBudWxsO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgdGhpcy4jbGVuZ3RoLS07XG4gICAgdGhpcy4jc3luYyhcInJlbW92ZUl0ZW1cIiwga2V5KTtcbiAgfVxuXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICB0aGlzLiNsZW5ndGgrKztcbiAgICB0aGlzLiNzeW5jKFwic2V0SXRlbVwiLCBrZXksIHZhbHVlKTtcbiAgfVxuXG4gICNzeW5jKG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICBpZiAodGhpcy4jdHlwZSkge1xuICAgICAgZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IHRoaXMuI3R5cGUsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgYXJncyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBzZXNzaW9uU3RvcmFnZSBpcyBhbHdheXMgZW1wdHlcbmdsb2JhbFRoaXMuc2Vzc2lvblN0b3JhZ2UgPSBuZXcgUygpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdExvY2FsU3RvcmFnZShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSBuZXcgUyhcImxvY2FsU3RvcmFnZVwiKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIHN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlID0gc3RvcmFnZTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFFeEMsTUFBTTtFQUNKLENBQUEsTUFBTyxHQUFXLEVBQUU7RUFDcEIsQ0FBQSxJQUFLLENBQXNCO0VBRzNCLFlBQVksSUFBYSxDQUFFO0lBQ3pCLElBQUksQ0FBQyxDQUFBLElBQUssR0FBRztFQUNmO0VBRUEsSUFBSSxTQUFTO0lBQ1gsT0FBTyxJQUFJLENBQUMsQ0FBQSxNQUFPO0VBQ3JCO0VBRUEsUUFBUTtJQUNOLElBQUksQ0FBQyxDQUFBLE1BQU8sR0FBRztJQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztNQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJO0lBQ2xCO0lBQ0EsSUFBSSxDQUFDLENBQUEsSUFBSyxDQUFDO0VBQ2I7RUFFQSxRQUFRLEdBQVcsRUFBaUI7SUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJO0VBQ3RCO0VBRUEsSUFBSSxLQUFhLEVBQWlCO0lBQ2hDLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJO0VBQ3JDO0VBRUEsV0FBVyxHQUFXLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSTtJQUNoQixJQUFJLENBQUMsQ0FBQSxNQUFPO0lBQ1osSUFBSSxDQUFDLENBQUEsSUFBSyxDQUFDLGNBQWM7RUFDM0I7RUFFQSxRQUFRLEdBQVcsRUFBRSxLQUFVLEVBQUU7SUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRztJQUNaLElBQUksQ0FBQyxDQUFBLE1BQU87SUFDWixJQUFJLENBQUMsQ0FBQSxJQUFLLENBQUMsV0FBVyxLQUFLO0VBQzdCO0VBRUEsQ0FBQSxJQUFLLENBQUMsTUFBYyxFQUFFLEdBQUcsSUFBZTtJQUN0QyxJQUFJLElBQUksQ0FBQyxDQUFBLElBQUssRUFBRTtNQUNkLFdBQVcsV0FBVyxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLENBQUEsSUFBSztRQUNoQjtRQUNBO01BQ0Y7SUFDRjtFQUNGO0FBQ0Y7QUFFQSxpQ0FBaUM7QUFDakMsV0FBVyxjQUFjLEdBQUcsSUFBSTtBQUVoQyxPQUFPLFNBQVMsaUJBQWlCLElBQTRCO0VBQzNELE1BQU0sVUFBVSxJQUFJLEVBQUU7RUFFdEIsS0FBSyxNQUFNLENBQUMsS0FBSyxNQUFNLElBQUksT0FBTyxPQUFPLENBQUMsTUFBTztJQUMvQyxRQUFRLE9BQU8sQ0FBQyxLQUFLO0VBQ3ZCO0VBRUEsV0FBVyxZQUFZLEdBQUc7QUFDNUIifQ==
+// denoCacheMetadata=671101722071726688,16024146587975248583 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0048572f7e9d90059453f4d0e932f038e6b729b85f2790af70a5744efde0a290.js b/vendor/gen/https/jsr.io/0048572f7e9d90059453f4d0e932f038e6b729b85f2790af70a5744efde0a290.js
new file mode 100644
index 0000000..1b97b71
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0048572f7e9d90059453f4d0e932f038e6b729b85f2790af70a5744efde0a290.js
@@ -0,0 +1,117 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH } from "../_common/constants.ts";
+import { resolve } from "./resolve.ts";
+import { assertArgs } from "../_common/relative.ts";
+/**
+ * Return the relative path from `from` to `to` based on current working directory.
+ *
+ * An example in windws, for instance:
+ * from = 'C:\\orandea\\test\\aaa'
+ * to = 'C:\\orandea\\impl\\bbb'
+ * The output of the function should be: '..\\..\\impl\\bbb'
+ *
+ * @example Usage
+ * ```ts
+ * import { relative } from "@std/path/windows/relative";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const relativePath = relative("C:\\foobar\\test\\aaa", "C:\\foobar\\impl\\bbb");
+ * assertEquals(relativePath, "..\\..\\impl\\bbb");
+ * ```
+ *
+ * @param from The path from which to calculate the relative path
+ * @param to The path to which to calculate the relative path
+ * @returns The relative path from `from` to `to`
+ */ export function relative(from, to) {
+ assertArgs(from, to);
+ const fromOrig = resolve(from);
+ const toOrig = resolve(to);
+ if (fromOrig === toOrig) return "";
+ from = fromOrig.toLowerCase();
+ to = toOrig.toLowerCase();
+ if (from === to) return "";
+ // Trim any leading backslashes
+ let fromStart = 0;
+ let fromEnd = from.length;
+ for(; fromStart < fromEnd; ++fromStart){
+ if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break;
+ }
+ // Trim trailing backslashes (applicable to UNC paths only)
+ for(; fromEnd - 1 > fromStart; --fromEnd){
+ if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break;
+ }
+ const fromLen = fromEnd - fromStart;
+ // Trim any leading backslashes
+ let toStart = 0;
+ let toEnd = to.length;
+ for(; toStart < toEnd; ++toStart){
+ if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break;
+ }
+ // Trim trailing backslashes (applicable to UNC paths only)
+ for(; toEnd - 1 > toStart; --toEnd){
+ if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break;
+ }
+ const toLen = toEnd - toStart;
+ // Compare paths to find the longest common path from root
+ const length = fromLen < toLen ? fromLen : toLen;
+ let lastCommonSep = -1;
+ let i = 0;
+ for(; i <= length; ++i){
+ if (i === length) {
+ if (toLen > length) {
+ if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
+ // We get here if `from` is the exact base path for `to`.
+ // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz'
+ return toOrig.slice(toStart + i + 1);
+ } else if (i === 2) {
+ // We get here if `from` is the device root.
+ // For example: from='C:\\'; to='C:\\foo'
+ return toOrig.slice(toStart + i);
+ }
+ }
+ if (fromLen > length) {
+ if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='C:\\foo\\bar'; to='C:\\foo'
+ lastCommonSep = i;
+ } else if (i === 2) {
+ // We get here if `to` is the device root.
+ // For example: from='C:\\foo\\bar'; to='C:\\'
+ lastCommonSep = 3;
+ }
+ }
+ break;
+ }
+ const fromCode = from.charCodeAt(fromStart + i);
+ const toCode = to.charCodeAt(toStart + i);
+ if (fromCode !== toCode) break;
+ else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i;
+ }
+ // We found a mismatch before the first common path separator was seen, so
+ // return the original `to`.
+ if (i !== length && lastCommonSep === -1) {
+ return toOrig;
+ }
+ let out = "";
+ if (lastCommonSep === -1) lastCommonSep = 0;
+ // Generate the relative path based on the path difference between `to` and
+ // `from`
+ for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
+ if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
+ if (out.length === 0) out += "..";
+ else out += "\\..";
+ }
+ }
+ // Lastly, append the rest of the destination (`to`) path that comes after
+ // the common path parts
+ if (out.length > 0) {
+ return out + toOrig.slice(toStart + lastCommonSep, toEnd);
+ } else {
+ toStart += lastCommonSep;
+ if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart;
+ return toOrig.slice(toStart, toEnd);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL3JlbGF0aXZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfQkFDS1dBUkRfU0xBU0ggfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9yZXNvbHZlLnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRBcmdzIH0gZnJvbSBcIi4uL19jb21tb24vcmVsYXRpdmUudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYCBiYXNlZCBvbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICpcbiAqIEFuIGV4YW1wbGUgaW4gd2luZHdzLCBmb3IgaW5zdGFuY2U6XG4gKiAgZnJvbSA9ICdDOlxcXFxvcmFuZGVhXFxcXHRlc3RcXFxcYWFhJ1xuICogIHRvID0gJ0M6XFxcXG9yYW5kZWFcXFxcaW1wbFxcXFxiYmInXG4gKiBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBzaG91bGQgYmU6ICcuLlxcXFwuLlxcXFxpbXBsXFxcXGJiYidcbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL3JlbGF0aXZlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShcIkM6XFxcXGZvb2JhclxcXFx0ZXN0XFxcXGFhYVwiLCBcIkM6XFxcXGZvb2JhclxcXFxpbXBsXFxcXGJiYlwiKTtcbiAqIGFzc2VydEVxdWFscyhyZWxhdGl2ZVBhdGgsIFwiLi5cXFxcLi5cXFxcaW1wbFxcXFxiYmJcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZnJvbSBUaGUgcGF0aCBmcm9tIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgcGF0aFxuICogQHBhcmFtIHRvIFRoZSBwYXRoIHRvIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgcGF0aFxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJncyhmcm9tLCB0byk7XG5cbiAgY29uc3QgZnJvbU9yaWcgPSByZXNvbHZlKGZyb20pO1xuICBjb25zdCB0b09yaWcgPSByZXNvbHZlKHRvKTtcblxuICBpZiAoZnJvbU9yaWcgPT09IHRvT3JpZykgcmV0dXJuIFwiXCI7XG5cbiAgZnJvbSA9IGZyb21PcmlnLnRvTG93ZXJDYXNlKCk7XG4gIHRvID0gdG9PcmlnLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCBmcm9tU3RhcnQgPSAwO1xuICBsZXQgZnJvbUVuZCA9IGZyb20ubGVuZ3RoO1xuICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbUVuZDsgKytmcm9tU3RhcnQpIHtcbiAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIC8vIFRyaW0gdHJhaWxpbmcgYmFja3NsYXNoZXMgKGFwcGxpY2FibGUgdG8gVU5DIHBhdGhzIG9ubHkpXG4gIGZvciAoOyBmcm9tRW5kIC0gMSA+IGZyb21TdGFydDsgLS1mcm9tRW5kKSB7XG4gICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tRW5kIC0gMSkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgbGV0IHRvU3RhcnQgPSAwO1xuICBsZXQgdG9FbmQgPSB0by5sZW5ndGg7XG4gIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICAvLyBUcmltIHRyYWlsaW5nIGJhY2tzbGFzaGVzIChhcHBsaWNhYmxlIHRvIFVOQyBwYXRocyBvbmx5KVxuICBmb3IgKDsgdG9FbmQgLSAxID4gdG9TdGFydDsgLS10b0VuZCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvRW5kIC0gMSkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICBsZXQgbGFzdENvbW1vblNlcCA9IC0xO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXGZvb1xcXFxiYXJcXFxcYmF6J1xuICAgICAgICAgIHJldHVybiB0b09yaWcuc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBkZXZpY2Ugcm9vdC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcJzsgdG89J0M6XFxcXGZvbydcbiAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXGZvbydcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgZGV2aWNlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209J0M6XFxcXGZvb1xcXFxiYXInOyB0bz0nQzpcXFxcJ1xuICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgY29uc3QgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpIGJyZWFrO1xuICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBsYXN0Q29tbW9uU2VwID0gaTtcbiAgfVxuXG4gIC8vIFdlIGZvdW5kIGEgbWlzbWF0Y2ggYmVmb3JlIHRoZSBmaXJzdCBjb21tb24gcGF0aCBzZXBhcmF0b3Igd2FzIHNlZW4sIHNvXG4gIC8vIHJldHVybiB0aGUgb3JpZ2luYWwgYHRvYC5cbiAgaWYgKGkgIT09IGxlbmd0aCAmJiBsYXN0Q29tbW9uU2VwID09PSAtMSkge1xuICAgIHJldHVybiB0b09yaWc7XG4gIH1cblxuICBsZXQgb3V0ID0gXCJcIjtcbiAgaWYgKGxhc3RDb21tb25TZXAgPT09IC0xKSBsYXN0Q29tbW9uU2VwID0gMDtcbiAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2AgYW5kXG4gIC8vIGBmcm9tYFxuICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKSBvdXQgKz0gXCIuLlwiO1xuICAgICAgZWxzZSBvdXQgKz0gXCJcXFxcLi5cIjtcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0bHksIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgZGVzdGluYXRpb24gKGB0b2ApIHBhdGggdGhhdCBjb21lcyBhZnRlclxuICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgaWYgKG91dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG91dCArIHRvT3JpZy5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCwgdG9FbmQpO1xuICB9IGVsc2Uge1xuICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICBpZiAodG9PcmlnLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpICsrdG9TdGFydDtcbiAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQsIHRvRW5kKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxtQkFBbUIsUUFBUSwwQkFBMEI7QUFDOUQsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTLFVBQVUsUUFBUSx5QkFBeUI7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0JDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsSUFBWSxFQUFFLEVBQVU7RUFDL0MsV0FBVyxNQUFNO0VBRWpCLE1BQU0sV0FBVyxRQUFRO0VBQ3pCLE1BQU0sU0FBUyxRQUFRO0VBRXZCLElBQUksYUFBYSxRQUFRLE9BQU87RUFFaEMsT0FBTyxTQUFTLFdBQVc7RUFDM0IsS0FBSyxPQUFPLFdBQVc7RUFFdkIsSUFBSSxTQUFTLElBQUksT0FBTztFQUV4QiwrQkFBK0I7RUFDL0IsSUFBSSxZQUFZO0VBQ2hCLElBQUksVUFBVSxLQUFLLE1BQU07RUFDekIsTUFBTyxZQUFZLFNBQVMsRUFBRSxVQUFXO0lBQ3ZDLElBQUksS0FBSyxVQUFVLENBQUMsZUFBZSxxQkFBcUI7RUFDMUQ7RUFDQSwyREFBMkQ7RUFDM0QsTUFBTyxVQUFVLElBQUksV0FBVyxFQUFFLFFBQVM7SUFDekMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxVQUFVLE9BQU8scUJBQXFCO0VBQzVEO0VBQ0EsTUFBTSxVQUFVLFVBQVU7RUFFMUIsK0JBQStCO0VBQy9CLElBQUksVUFBVTtFQUNkLElBQUksUUFBUSxHQUFHLE1BQU07RUFDckIsTUFBTyxVQUFVLE9BQU8sRUFBRSxRQUFTO0lBQ2pDLElBQUksR0FBRyxVQUFVLENBQUMsYUFBYSxxQkFBcUI7RUFDdEQ7RUFDQSwyREFBMkQ7RUFDM0QsTUFBTyxRQUFRLElBQUksU0FBUyxFQUFFLE1BQU87SUFDbkMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLE9BQU8scUJBQXFCO0VBQ3hEO0VBQ0EsTUFBTSxRQUFRLFFBQVE7RUFFdEIsMERBQTBEO0VBQzFELE1BQU0sU0FBUyxVQUFVLFFBQVEsVUFBVTtFQUMzQyxJQUFJLGdCQUFnQixDQUFDO0VBQ3JCLElBQUksSUFBSTtFQUNSLE1BQU8sS0FBSyxRQUFRLEVBQUUsRUFBRztJQUN2QixJQUFJLE1BQU0sUUFBUTtNQUNoQixJQUFJLFFBQVEsUUFBUTtRQUNsQixJQUFJLEdBQUcsVUFBVSxDQUFDLFVBQVUsT0FBTyxxQkFBcUI7VUFDdEQseURBQXlEO1VBQ3pELDJEQUEyRDtVQUMzRCxPQUFPLE9BQU8sS0FBSyxDQUFDLFVBQVUsSUFBSTtRQUNwQyxPQUFPLElBQUksTUFBTSxHQUFHO1VBQ2xCLDRDQUE0QztVQUM1Qyx5Q0FBeUM7VUFDekMsT0FBTyxPQUFPLEtBQUssQ0FBQyxVQUFVO1FBQ2hDO01BQ0Y7TUFDQSxJQUFJLFVBQVUsUUFBUTtRQUNwQixJQUFJLEtBQUssVUFBVSxDQUFDLFlBQVksT0FBTyxxQkFBcUI7VUFDMUQseURBQXlEO1VBQ3pELGlEQUFpRDtVQUNqRCxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLE1BQU0sR0FBRztVQUNsQiwwQ0FBMEM7VUFDMUMsOENBQThDO1VBQzlDLGdCQUFnQjtRQUNsQjtNQUNGO01BQ0E7SUFDRjtJQUNBLE1BQU0sV0FBVyxLQUFLLFVBQVUsQ0FBQyxZQUFZO0lBQzdDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxVQUFVO0lBQ3ZDLElBQUksYUFBYSxRQUFRO1NBQ3BCLElBQUksYUFBYSxxQkFBcUIsZ0JBQWdCO0VBQzdEO0VBRUEsMEVBQTBFO0VBQzFFLDRCQUE0QjtFQUM1QixJQUFJLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFHO0lBQ3hDLE9BQU87RUFDVDtFQUVBLElBQUksTUFBTTtFQUNWLElBQUksa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0I7RUFDMUMsMkVBQTJFO0VBQzNFLFNBQVM7RUFDVCxJQUFLLElBQUksWUFBWSxnQkFBZ0IsR0FBRyxLQUFLLFNBQVMsRUFBRSxFQUFHO0lBQ3pELElBQUksTUFBTSxXQUFXLEtBQUssVUFBVSxDQUFDLE9BQU8scUJBQXFCO01BQy9ELElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxPQUFPO1dBQ3hCLE9BQU87SUFDZDtFQUNGO0VBRUEsMEVBQTBFO0VBQzFFLHdCQUF3QjtFQUN4QixJQUFJLElBQUksTUFBTSxHQUFHLEdBQUc7SUFDbEIsT0FBTyxNQUFNLE9BQU8sS0FBSyxDQUFDLFVBQVUsZUFBZTtFQUNyRCxPQUFPO0lBQ0wsV0FBVztJQUNYLElBQUksT0FBTyxVQUFVLENBQUMsYUFBYSxxQkFBcUIsRUFBRTtJQUMxRCxPQUFPLE9BQU8sS0FBSyxDQUFDLFNBQVM7RUFDL0I7QUFDRiJ9
+// denoCacheMetadata=5543987685683672443,18039060282610121701 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/015c88c241d68e20fcbdb0dd94cb199af1fa83ad2cbe5064cb25e36dcdf406e5.js b/vendor/gen/https/jsr.io/015c88c241d68e20fcbdb0dd94cb199af1fa83ad2cbe5064cb25e36dcdf406e5.js
new file mode 100644
index 0000000..88e262e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/015c88c241d68e20fcbdb0dd94cb199af1fa83ad2cbe5064cb25e36dcdf406e5.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { extname as posixExtname } from "./posix/extname.ts";
+import { extname as windowsExtname } from "./windows/extname.ts";
+/**
+ * Return the extension of the path with leading period (".").
+ *
+ * @example Usage
+ * ```ts
+ * import { extname } from "@std/path/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(extname("C:\\home\\user\\Documents\\image.png"), ".png");
+ * } else {
+ * assertEquals(extname("/home/user/Documents/image.png"), ".png");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `extname` from `@std/path/unstable-extname`.
+ *
+ * @param path Path with extension.
+ * @returns The file extension. E.g. returns `.ts` for `file.ts`.
+ */ export function extname(path) {
+ return isWindows ? windowsExtname(path) : posixExtname(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9leHRuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgZXh0bmFtZSBhcyBwb3NpeEV4dG5hbWUgfSBmcm9tIFwiLi9wb3NpeC9leHRuYW1lLnRzXCI7XG5pbXBvcnQgeyBleHRuYW1lIGFzIHdpbmRvd3NFeHRuYW1lIH0gZnJvbSBcIi4vd2luZG93cy9leHRuYW1lLnRzXCI7XG4vKipcbiAqIFJldHVybiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBwYXRoIHdpdGggbGVhZGluZyBwZXJpb2QgKFwiLlwiKS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGV4dG5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL2V4dG5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoZXh0bmFtZShcIkM6XFxcXGhvbWVcXFxcdXNlclxcXFxEb2N1bWVudHNcXFxcaW1hZ2UucG5nXCIpLCBcIi5wbmdcIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMoZXh0bmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL2ltYWdlLnBuZ1wiKSwgXCIucG5nXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgZXh0bmFtZWAgZnJvbSBgQHN0ZC9wYXRoL3Vuc3RhYmxlLWV4dG5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggd2l0aCBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBleHRlbnNpb24uIEUuZy4gcmV0dXJucyBgLnRzYCBmb3IgYGZpbGUudHNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0V4dG5hbWUocGF0aCkgOiBwb3NpeEV4dG5hbWUocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsV0FBVyxZQUFZLFFBQVEscUJBQXFCO0FBQzdELFNBQVMsV0FBVyxjQUFjLFFBQVEsdUJBQXVCO0FBQ2pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxRQUFRLElBQVk7RUFDbEMsT0FBTyxZQUFZLGVBQWUsUUFBUSxhQUFhO0FBQ3pEIn0=
+// denoCacheMetadata=7911667330114746305,16002204069946144952 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/016dfa2b631fd2ff95f5f0da03575c1a3e85c532e60ac5a50208fb4ab606b893.js b/vendor/gen/https/jsr.io/016dfa2b631fd2ff95f5f0da03575c1a3e85c532e60ac5a50208fb4ab606b893.js
new file mode 100644
index 0000000..d4e099d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/016dfa2b631fd2ff95f5f0da03575c1a3e85c532e60ac5a50208fb4ab606b893.js
@@ -0,0 +1,71 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * A transform stream that only transforms from the zero-indexed `start` and
+ * `end` bytes (both inclusive).
+ *
+ * @example Basic usage
+ * ```ts
+ * import { ByteSliceStream } from "@std/streams/byte-slice-stream";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const stream = ReadableStream.from([
+ * new Uint8Array([0, 1]),
+ * new Uint8Array([2, 3, 4]),
+ * ]);
+ * const slicedStream = stream.pipeThrough(new ByteSliceStream(1, 3));
+ *
+ * assertEquals(
+ * await Array.fromAsync(slicedStream),
+ * [new Uint8Array([1]), new Uint8Array([2, 3])]
+ * );
+ * ```
+ *
+ * @example Get a range of bytes from a fetch response body
+ * ```ts
+ * import { ByteSliceStream } from "@std/streams/byte-slice-stream";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const response = await fetch("https://example.com");
+ * const rangedStream = response.body!
+ * .pipeThrough(new ByteSliceStream(3, 8));
+ * const collected = await Array.fromAsync(rangedStream);
+ * assertEquals(collected[0]?.length, 6);
+ * ```
+ */ export class ByteSliceStream extends TransformStream {
+ #offsetStart = 0;
+ #offsetEnd = 0;
+ /**
+ * Constructs a new instance.
+ *
+ * @param start The zero-indexed byte index to start reading from.
+ * @param end The zero-indexed byte index to stop reading at. Inclusive.
+ */ constructor(start = 0, end = Infinity){
+ super({
+ start: ()=>{
+ if (start < 0) {
+ throw new RangeError(`Cannot construct ByteSliceStream as start must be >= 0: received ${start}`);
+ }
+ end += 1;
+ },
+ transform: (chunk, controller)=>{
+ this.#offsetStart = this.#offsetEnd;
+ this.#offsetEnd += chunk.byteLength;
+ if (this.#offsetEnd > start) {
+ if (this.#offsetStart < start) {
+ chunk = chunk.slice(start - this.#offsetStart);
+ }
+ if (this.#offsetEnd >= end) {
+ chunk = chunk.slice(0, chunk.byteLength - this.#offsetEnd + end);
+ controller.enqueue(chunk);
+ controller.terminate();
+ } else {
+ controller.enqueue(chunk);
+ }
+ }
+ }
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvc3RyZWFtcy8xLjAuOS9ieXRlX3NsaWNlX3N0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIEEgdHJhbnNmb3JtIHN0cmVhbSB0aGF0IG9ubHkgdHJhbnNmb3JtcyBmcm9tIHRoZSB6ZXJvLWluZGV4ZWQgYHN0YXJ0YCBhbmRcbiAqIGBlbmRgIGJ5dGVzIChib3RoIGluY2x1c2l2ZSkuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBCeXRlU2xpY2VTdHJlYW0gfSBmcm9tIFwiQHN0ZC9zdHJlYW1zL2J5dGUtc2xpY2Utc3RyZWFtXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBzdHJlYW0gPSBSZWFkYWJsZVN0cmVhbS5mcm9tKFtcbiAqICAgbmV3IFVpbnQ4QXJyYXkoWzAsIDFdKSxcbiAqICAgbmV3IFVpbnQ4QXJyYXkoWzIsIDMsIDRdKSxcbiAqIF0pO1xuICogY29uc3Qgc2xpY2VkU3RyZWFtID0gc3RyZWFtLnBpcGVUaHJvdWdoKG5ldyBCeXRlU2xpY2VTdHJlYW0oMSwgMykpO1xuICpcbiAqIGFzc2VydEVxdWFscyhcbiAqICAgYXdhaXQgQXJyYXkuZnJvbUFzeW5jKHNsaWNlZFN0cmVhbSksXG4gKiAgW25ldyBVaW50OEFycmF5KFsxXSksIG5ldyBVaW50OEFycmF5KFsyLCAzXSldXG4gKiApO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgR2V0IGEgcmFuZ2Ugb2YgYnl0ZXMgZnJvbSBhIGZldGNoIHJlc3BvbnNlIGJvZHlcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBCeXRlU2xpY2VTdHJlYW0gfSBmcm9tIFwiQHN0ZC9zdHJlYW1zL2J5dGUtc2xpY2Utc3RyZWFtXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiKTtcbiAqIGNvbnN0IHJhbmdlZFN0cmVhbSA9IHJlc3BvbnNlLmJvZHkhXG4gKiAgIC5waXBlVGhyb3VnaChuZXcgQnl0ZVNsaWNlU3RyZWFtKDMsIDgpKTtcbiAqIGNvbnN0IGNvbGxlY3RlZCA9IGF3YWl0IEFycmF5LmZyb21Bc3luYyhyYW5nZWRTdHJlYW0pO1xuICogYXNzZXJ0RXF1YWxzKGNvbGxlY3RlZFswXT8ubGVuZ3RoLCA2KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQnl0ZVNsaWNlU3RyZWFtIGV4dGVuZHMgVHJhbnNmb3JtU3RyZWFtPFVpbnQ4QXJyYXksIFVpbnQ4QXJyYXk+IHtcbiAgI29mZnNldFN0YXJ0ID0gMDtcbiAgI29mZnNldEVuZCA9IDA7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzdGFydCBUaGUgemVyby1pbmRleGVkIGJ5dGUgaW5kZXggdG8gc3RhcnQgcmVhZGluZyBmcm9tLlxuICAgKiBAcGFyYW0gZW5kIFRoZSB6ZXJvLWluZGV4ZWQgYnl0ZSBpbmRleCB0byBzdG9wIHJlYWRpbmcgYXQuIEluY2x1c2l2ZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0ID0gMCwgZW5kOiBudW1iZXIgPSBJbmZpbml0eSkge1xuICAgIHN1cGVyKHtcbiAgICAgIHN0YXJ0OiAoKSA9PiB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgY29uc3RydWN0IEJ5dGVTbGljZVN0cmVhbSBhcyBzdGFydCBtdXN0IGJlID49IDA6IHJlY2VpdmVkICR7c3RhcnR9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVuZCArPSAxO1xuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybTogKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgIHRoaXMuI29mZnNldFN0YXJ0ID0gdGhpcy4jb2Zmc2V0RW5kO1xuICAgICAgICB0aGlzLiNvZmZzZXRFbmQgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuI29mZnNldEVuZCA+IHN0YXJ0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuI29mZnNldFN0YXJ0IDwgc3RhcnQpIHtcbiAgICAgICAgICAgIGNodW5rID0gY2h1bmsuc2xpY2Uoc3RhcnQgLSB0aGlzLiNvZmZzZXRTdGFydCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLiNvZmZzZXRFbmQgPj0gZW5kKSB7XG4gICAgICAgICAgICBjaHVuayA9IGNodW5rLnNsaWNlKDAsIGNodW5rLmJ5dGVMZW5ndGggLSB0aGlzLiNvZmZzZXRFbmQgKyBlbmQpO1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQ0MsR0FDRCxPQUFPLE1BQU0sd0JBQXdCO0VBQ25DLENBQUEsV0FBWSxHQUFHLEVBQUU7RUFDakIsQ0FBQSxTQUFVLEdBQUcsRUFBRTtFQUVmOzs7OztHQUtDLEdBQ0QsWUFBWSxRQUFRLENBQUMsRUFBRSxNQUFjLFFBQVEsQ0FBRTtJQUM3QyxLQUFLLENBQUM7TUFDSixPQUFPO1FBQ0wsSUFBSSxRQUFRLEdBQUc7VUFDYixNQUFNLElBQUksV0FDUixDQUFDLGlFQUFpRSxFQUFFLE9BQU87UUFFL0U7UUFDQSxPQUFPO01BQ1Q7TUFDQSxXQUFXLENBQUMsT0FBTztRQUNqQixJQUFJLENBQUMsQ0FBQSxXQUFZLEdBQUcsSUFBSSxDQUFDLENBQUEsU0FBVTtRQUNuQyxJQUFJLENBQUMsQ0FBQSxTQUFVLElBQUksTUFBTSxVQUFVO1FBQ25DLElBQUksSUFBSSxDQUFDLENBQUEsU0FBVSxHQUFHLE9BQU87VUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQSxXQUFZLEdBQUcsT0FBTztZQUM3QixRQUFRLE1BQU0sS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUEsV0FBWTtVQUMvQztVQUNBLElBQUksSUFBSSxDQUFDLENBQUEsU0FBVSxJQUFJLEtBQUs7WUFDMUIsUUFBUSxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFBLFNBQVUsR0FBRztZQUM1RCxXQUFXLE9BQU8sQ0FBQztZQUNuQixXQUFXLFNBQVM7VUFDdEIsT0FBTztZQUNMLFdBQVcsT0FBTyxDQUFDO1VBQ3JCO1FBQ0Y7TUFDRjtJQUNGO0VBQ0Y7QUFDRiJ9
+// denoCacheMetadata=65000068033875156,9656424773187970768 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/04da19a95e47f74a8bbf4e6444261cdbbf6b41168a7ef4686aeeeb41244e6364.js b/vendor/gen/https/jsr.io/04da19a95e47f74a8bbf4e6444261cdbbf6b41168a7ef4686aeeeb41244e6364.js
new file mode 100644
index 0000000..4a701d4
--- /dev/null
+++ b/vendor/gen/https/jsr.io/04da19a95e47f74a8bbf4e6444261cdbbf6b41168a7ef4686aeeeb41244e6364.js
@@ -0,0 +1,39 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+/**
+ * Gets the IPv4 or IPv6 network address of the machine.
+ *
+ * @experimental **UNSTABLE**: New API, yet to be vetted.
+
+ *
+ * This is inspired by the util of the same name in
+ * {@linkcode https://www.npmjs.com/package/serve | npm:serve}.
+ *
+ * For more advanced use, use {@linkcode Deno.networkInterfaces} directly.
+ *
+ * @see {@link https://github.com/vercel/serve/blob/1ea55b1b5004f468159b54775e4fb3090fedbb2b/source/utilities/http.ts#L33}
+ *
+ * @param family The IP protocol version of the interface to get the address of.
+ * @returns The IPv4 network address of the machine or `undefined` if not found.
+ *
+ * @example Get the IPv4 network address (default)
+ * ```ts no-assert no-eval
+ * import { getNetworkAddress } from "@std/net/unstable-get-network-address";
+ *
+ * const hostname = getNetworkAddress()!;
+ *
+ * Deno.serve({ port: 0, hostname }, () => new Response("Hello, world!"));
+ * ```
+ *
+ * @example Get the IPv6 network address
+ * ```ts no-assert no-eval
+ * import { getNetworkAddress } from "@std/net/unstable-get-network-address";
+ *
+ * const hostname = getNetworkAddress("IPv6")!;
+ *
+ * Deno.serve({ port: 0, hostname }, () => new Response("Hello, world!"));
+ * ```
+ */ export function getNetworkAddress(family = "IPv4") {
+ return Deno.networkInterfaces().find((i)=>i.family === family && i.mac !== "00:00:00:00:00:00" && (family === "IPv4" ? !i.address.startsWith("127") : !(i.address === "::1" || i.address === "fe80::1") && i.scopeid === 0))?.address;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbmV0LzEuMC40L3Vuc3RhYmxlX2dldF9uZXR3b3JrX2FkZHJlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8qKlxuICogR2V0cyB0aGUgSVB2NCBvciBJUHY2IG5ldHdvcmsgYWRkcmVzcyBvZiB0aGUgbWFjaGluZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsICoqVU5TVEFCTEUqKjogTmV3IEFQSSwgeWV0IHRvIGJlIHZldHRlZC5cblxuICpcbiAqIFRoaXMgaXMgaW5zcGlyZWQgYnkgdGhlIHV0aWwgb2YgdGhlIHNhbWUgbmFtZSBpblxuICoge0BsaW5rY29kZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9zZXJ2ZSB8IG5wbTpzZXJ2ZX0uXG4gKlxuICogRm9yIG1vcmUgYWR2YW5jZWQgdXNlLCB1c2Uge0BsaW5rY29kZSBEZW5vLm5ldHdvcmtJbnRlcmZhY2VzfSBkaXJlY3RseS5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3NlcnZlL2Jsb2IvMWVhNTViMWI1MDA0ZjQ2ODE1OWI1NDc3NWU0ZmIzMDkwZmVkYmIyYi9zb3VyY2UvdXRpbGl0aWVzL2h0dHAudHMjTDMzfVxuICpcbiAqIEBwYXJhbSBmYW1pbHkgVGhlIElQIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIGludGVyZmFjZSB0byBnZXQgdGhlIGFkZHJlc3Mgb2YuXG4gKiBAcmV0dXJucyBUaGUgSVB2NCBuZXR3b3JrIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICpcbiAqIEBleGFtcGxlIEdldCB0aGUgSVB2NCBuZXR3b3JrIGFkZHJlc3MgKGRlZmF1bHQpXG4gKiBgYGB0cyBuby1hc3NlcnQgbm8tZXZhbFxuICogaW1wb3J0IHsgZ2V0TmV0d29ya0FkZHJlc3MgfSBmcm9tIFwiQHN0ZC9uZXQvdW5zdGFibGUtZ2V0LW5ldHdvcmstYWRkcmVzc1wiO1xuICpcbiAqIGNvbnN0IGhvc3RuYW1lID0gZ2V0TmV0d29ya0FkZHJlc3MoKSE7XG4gKlxuICogRGVuby5zZXJ2ZSh7IHBvcnQ6IDAsIGhvc3RuYW1lIH0sICgpID0+IG5ldyBSZXNwb25zZShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgR2V0IHRoZSBJUHY2IG5ldHdvcmsgYWRkcmVzc1xuICogYGBgdHMgbm8tYXNzZXJ0IG5vLWV2YWxcbiAqIGltcG9ydCB7IGdldE5ldHdvcmtBZGRyZXNzIH0gZnJvbSBcIkBzdGQvbmV0L3Vuc3RhYmxlLWdldC1uZXR3b3JrLWFkZHJlc3NcIjtcbiAqXG4gKiBjb25zdCBob3N0bmFtZSA9IGdldE5ldHdvcmtBZGRyZXNzKFwiSVB2NlwiKSE7XG4gKlxuICogRGVuby5zZXJ2ZSh7IHBvcnQ6IDAsIGhvc3RuYW1lIH0sICgpID0+IG5ldyBSZXNwb25zZShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXR3b3JrQWRkcmVzcyhcbiAgZmFtaWx5OiBEZW5vLk5ldHdvcmtJbnRlcmZhY2VJbmZvW1wiZmFtaWx5XCJdID0gXCJJUHY0XCIsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gRGVuby5uZXR3b3JrSW50ZXJmYWNlcygpXG4gICAgLmZpbmQoKGkpID0+XG4gICAgICBpLmZhbWlseSA9PT0gZmFtaWx5ICYmXG4gICAgICBpLm1hYyAhPT0gXCIwMDowMDowMDowMDowMDowMFwiICYmXG4gICAgICAoZmFtaWx5ID09PSBcIklQdjRcIlxuICAgICAgICAvLyBDYW5ub3QgbGllIHdpdGhpbiAxMjcuMC4wLjAvOFxuICAgICAgICA/ICFpLmFkZHJlc3Muc3RhcnRzV2l0aChcIjEyN1wiKVxuICAgICAgICAvLyBDYW5ub3QgYmUgbG9vcGJhY2sgb3IgbGluay1sb2NhbCBhZGRyZXNzZXNcbiAgICAgICAgOiAhKGkuYWRkcmVzcyA9PT0gXCI6OjFcIiB8fCBpLmFkZHJlc3MgPT09IFwiZmU4MDo6MVwiKSAmJiBpLnNjb3BlaWQgPT09IDApXG4gICAgKVxuICAgID8uYWRkcmVzcztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWlDQyxHQUNELE9BQU8sU0FBUyxrQkFDZCxTQUE4QyxNQUFNO0VBRXBELE9BQU8sS0FBSyxpQkFBaUIsR0FDMUIsSUFBSSxDQUFDLENBQUMsSUFDTCxFQUFFLE1BQU0sS0FBSyxVQUNiLEVBQUUsR0FBRyxLQUFLLHVCQUNWLENBQUMsV0FBVyxTQUVSLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLFNBRXRCLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsT0FBTyxLQUFLLFNBQVMsS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBRXhFO0FBQ04ifQ==
+// denoCacheMetadata=8742219564818071545,10713096536573211212 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/057a32a8a2a061c80fc3ac3cfd0ae77b08f46dd05a750d3db5775d2d7ebaa39a.js b/vendor/gen/https/jsr.io/057a32a8a2a061c80fc3ac3cfd0ae77b08f46dd05a750d3db5775d2d7ebaa39a.js
new file mode 100644
index 0000000..f621484
--- /dev/null
+++ b/vendor/gen/https/jsr.io/057a32a8a2a061c80fc3ac3cfd0ae77b08f46dd05a750d3db5775d2d7ebaa39a.js
@@ -0,0 +1,16 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH, CHAR_FORWARD_SLASH, CHAR_LOWERCASE_A, CHAR_LOWERCASE_Z, CHAR_UPPERCASE_A, CHAR_UPPERCASE_Z } from "../_common/constants.ts";
+export function isPosixPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH;
+}
+export function isPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+}
+export function isWindowsDeviceRoot(code) {
+ return code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z || code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL191dGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7XG4gIENIQVJfQkFDS1dBUkRfU0xBU0gsXG4gIENIQVJfRk9SV0FSRF9TTEFTSCxcbiAgQ0hBUl9MT1dFUkNBU0VfQSxcbiAgQ0hBUl9MT1dFUkNBU0VfWixcbiAgQ0hBUl9VUFBFUkNBU0VfQSxcbiAgQ0hBUl9VUFBFUkNBU0VfWixcbn0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFNlcGFyYXRvcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSCB8fCBjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSBDSEFSX0xPV0VSQ0FTRV9BICYmIGNvZGUgPD0gQ0hBUl9MT1dFUkNBU0VfWikgfHxcbiAgICAoY29kZSA+PSBDSEFSX1VQUEVSQ0FTRV9BICYmIGNvZGUgPD0gQ0hBUl9VUFBFUkNBU0VfWilcbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUsaURBQWlEO0FBQ2pELDZEQUE2RDtBQUM3RCxxQ0FBcUM7QUFFckMsU0FDRSxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixRQUNYLDBCQUEwQjtBQUVqQyxPQUFPLFNBQVMscUJBQXFCLElBQVk7RUFDL0MsT0FBTyxTQUFTO0FBQ2xCO0FBRUEsT0FBTyxTQUFTLGdCQUFnQixJQUFZO0VBQzFDLE9BQU8sU0FBUyxzQkFBc0IsU0FBUztBQUNqRDtBQUVBLE9BQU8sU0FBUyxvQkFBb0IsSUFBWTtFQUM5QyxPQUNFLEFBQUMsUUFBUSxvQkFBb0IsUUFBUSxvQkFDcEMsUUFBUSxvQkFBb0IsUUFBUTtBQUV6QyJ9
+// denoCacheMetadata=995808612164581303,10752406681973636287 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0593e0ab0c93abb5a17250ca2b65b8a7b5d23a9253f8a163f6fdc115396ef93d.js b/vendor/gen/https/jsr.io/0593e0ab0c93abb5a17250ca2b65b8a7b5d23a9253f8a163f6fdc115396ef93d.js
new file mode 100644
index 0000000..ba5a5df
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0593e0ab0c93abb5a17250ca2b65b8a7b5d23a9253f8a163f6fdc115396ef93d.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { parse as posixParse } from "./posix/parse.ts";
+import { parse as windowsParse } from "./windows/parse.ts";
+/**
+ * Return an object containing the parsed components of the path.
+ *
+ * Use {@linkcode https://jsr.io/@std/path/doc/~/format | format()} to reverse
+ * the result.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/path/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const parsedPathObj = parse("C:\\path\\to\\script.ts");
+ * assertEquals(parsedPathObj.root, "C:\\");
+ * assertEquals(parsedPathObj.dir, "C:\\path\\to");
+ * assertEquals(parsedPathObj.base, "script.ts");
+ * assertEquals(parsedPathObj.ext, ".ts");
+ * assertEquals(parsedPathObj.name, "script");
+ * } else {
+ * const parsedPathObj = parse("/path/to/dir/script.ts");
+ * parsedPathObj.root; // "/"
+ * parsedPathObj.dir; // "/path/to/dir"
+ * parsedPathObj.base; // "script.ts"
+ * parsedPathObj.ext; // ".ts"
+ * parsedPathObj.name; // "script"
+ * }
+ * ```
+ *
+ * @param path Path to process
+ * @returns An object with the parsed path components.
+ */ export function parse(path) {
+ return isWindows ? windowsParse(path) : posixParse(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wYXJzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkUGF0aCB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBwYXJzZSBhcyBwb3NpeFBhcnNlIH0gZnJvbSBcIi4vcG9zaXgvcGFyc2UudHNcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHdpbmRvd3NQYXJzZSB9IGZyb20gXCIuL3dpbmRvd3MvcGFyc2UudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBQYXJzZWRQYXRoIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBjb21wb25lbnRzIG9mIHRoZSBwYXRoLlxuICpcbiAqIFVzZSB7QGxpbmtjb2RlIGh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC9kb2Mvfi9mb3JtYXQgfCBmb3JtYXQoKX0gdG8gcmV2ZXJzZVxuICogdGhlIHJlc3VsdC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBzdGQvcGF0aC9wYXJzZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGNvbnN0IHBhcnNlZFBhdGhPYmogPSBwYXJzZShcIkM6XFxcXHBhdGhcXFxcdG9cXFxcc2NyaXB0LnRzXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUGF0aE9iai5yb290LCBcIkM6XFxcXFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhcnNlZFBhdGhPYmouZGlyLCBcIkM6XFxcXHBhdGhcXFxcdG9cIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXJzZWRQYXRoT2JqLmJhc2UsIFwic2NyaXB0LnRzXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUGF0aE9iai5leHQsIFwiLnRzXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUGF0aE9iai5uYW1lLCBcInNjcmlwdFwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnN0IHBhcnNlZFBhdGhPYmogPSBwYXJzZShcIi9wYXRoL3RvL2Rpci9zY3JpcHQudHNcIik7XG4gKiAgIHBhcnNlZFBhdGhPYmoucm9vdDsgLy8gXCIvXCJcbiAqICAgcGFyc2VkUGF0aE9iai5kaXI7IC8vIFwiL3BhdGgvdG8vZGlyXCJcbiAqICAgcGFyc2VkUGF0aE9iai5iYXNlOyAvLyBcInNjcmlwdC50c1wiXG4gKiAgIHBhcnNlZFBhdGhPYmouZXh0OyAvLyBcIi50c1wiXG4gKiAgIHBhcnNlZFBhdGhPYmoubmFtZTsgLy8gXCJzY3JpcHRcIlxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggUGF0aCB0byBwcm9jZXNzXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkIHBhdGggY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c1BhcnNlKHBhdGgpIDogcG9zaXhQYXJzZShwYXRoKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFFckMsU0FBUyxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFDdkQsU0FBUyxTQUFTLFlBQVksUUFBUSxxQkFBcUI7QUFJM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThCQyxHQUNELE9BQU8sU0FBUyxNQUFNLElBQVk7RUFDaEMsT0FBTyxZQUFZLGFBQWEsUUFBUSxXQUFXO0FBQ3JEIn0=
+// denoCacheMetadata=13383546776027254442,10475310697389530189 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/069edb2631331d75ad72b912ca478f8a30a5d043879d0059987ff081a47d25e5.js b/vendor/gen/https/jsr.io/069edb2631331d75ad72b912ca478f8a30a5d043879d0059987ff081a47d25e5.js
new file mode 100644
index 0000000..df7dd07
--- /dev/null
+++ b/vendor/gen/https/jsr.io/069edb2631331d75ad72b912ca478f8a30a5d043879d0059987ff081a47d25e5.js
@@ -0,0 +1,181 @@
+export async function rootInfo() {
+ if (!tmpDir) tmpDir = Deno.makeTempDirSync();
+ const opts = {
+ args: [
+ "info",
+ "--json",
+ "--no-config",
+ "--no-lock"
+ ],
+ cwd: tmpDir,
+ env: {
+ DENO_NO_PACKAGE_JSON: "true"
+ },
+ stdout: "piped",
+ stderr: "inherit"
+ };
+ const output = await new Deno.Command(Deno.execPath(), opts).output();
+ if (!output.success) {
+ throw new Error(`Failed to call 'deno info'`);
+ }
+ const txt = new TextDecoder().decode(output.stdout);
+ return JSON.parse(txt);
+}
+let tmpDir;
+async function info(specifier, options) {
+ const args = [
+ "info",
+ "--json"
+ ];
+ if (!Deno.version.deno.startsWith("1.")) {
+ args.push("--allow-import");
+ }
+ const opts = {
+ args,
+ cwd: undefined,
+ env: {
+ DENO_NO_PACKAGE_JSON: "true"
+ },
+ stdout: "piped",
+ stderr: "inherit"
+ };
+ if (typeof options.config === "string") {
+ opts.args.push("--config", options.config);
+ } else {
+ opts.args.push("--no-config");
+ }
+ if (options.importMap) {
+ opts.args.push("--import-map", options.importMap);
+ }
+ if (typeof options.lock === "string") {
+ opts.args.push("--lock", options.lock);
+ } else if (!options.cwd) {
+ opts.args.push("--no-lock");
+ }
+ if (options.nodeModulesDir !== undefined) {
+ if (Deno.version.deno.startsWith("1.")) {
+ if (options.nodeModulesDir === "auto") {
+ opts.args.push("--node-modules-dir");
+ } else if (options.nodeModulesDir === "manual") {
+ opts.args.push("--unstable-byonm");
+ }
+ } else {
+ opts.args.push(`--node-modules-dir=${options.nodeModulesDir}`);
+ }
+ }
+ if (options.cwd) {
+ opts.cwd = options.cwd;
+ } else {
+ if (!tmpDir) tmpDir = Deno.makeTempDirSync();
+ opts.cwd = tmpDir;
+ }
+ opts.args.push(specifier);
+ const output = await new Deno.Command(Deno.execPath(), opts).output();
+ if (!output.success) {
+ throw new Error(`Failed to call 'deno info' on '${specifier}'`);
+ }
+ const txt = new TextDecoder().decode(output.stdout);
+ return JSON.parse(txt);
+}
+export class InfoCache {
+ #options;
+ #pending = null;
+ #modules = new Map();
+ #redirects = new Map();
+ #npmPackages = new Map();
+ constructor(options = {}){
+ this.#options = options;
+ }
+ async get(specifier) {
+ let entry = this.#getCached(specifier);
+ if (entry !== undefined) return entry;
+ await this.#queueLoad(specifier);
+ entry = this.#getCached(specifier);
+ if (entry === undefined) {
+ throw new Error(`Unreachable: '${specifier}' loaded but not reachable`);
+ }
+ return entry;
+ }
+ getNpmPackage(id) {
+ return this.#npmPackages.get(id);
+ }
+ #resolve(specifier) {
+ const original = specifier;
+ let counter = 0;
+ while(counter++ < 10){
+ const redirect = this.#redirects.get(specifier);
+ if (redirect === undefined) return specifier;
+ specifier = redirect;
+ }
+ throw new Error(`Too many redirects for '${original}'`);
+ }
+ #getCached(specifier) {
+ specifier = this.#resolve(specifier);
+ return this.#modules.get(specifier);
+ }
+ async #queueLoad(specifier) {
+ while(true){
+ if (this.#pending === null) {
+ this.#pending = {
+ specifiers: new Set([
+ specifier
+ ]),
+ done: (async ()=>{
+ await new Promise((r)=>setTimeout(r, 5));
+ const specifiers = this.#pending.specifiers;
+ this.#pending.specifiers = null;
+ await this.#load([
+ ...specifiers
+ ]);
+ this.#pending = null;
+ })()
+ };
+ await this.#pending.done;
+ return;
+ } else if (this.#pending.specifiers !== null) {
+ this.#pending.specifiers.add(specifier);
+ await this.#pending.done;
+ return;
+ } else {
+ await this.#pending.done;
+ }
+ }
+ }
+ async #load(specifiers) {
+ await this.#populate(specifiers);
+ for (let specifier of specifiers){
+ specifier = this.#resolve(specifier);
+ const entry = this.#modules.get(specifier);
+ if (entry === undefined && specifier.startsWith("npm:")) {
+ // we hit https://github.com/denoland/deno/issues/18043, so we have to
+ // perform another load to get the actual data of the redirected specifier
+ await this.#populate([
+ specifier
+ ]);
+ }
+ }
+ }
+ async #populate(specifiers) {
+ let specifier;
+ if (specifiers.length === 1) {
+ specifier = specifiers[0];
+ } else {
+ specifier = `data:application/javascript,${encodeURIComponent(specifiers.map((s)=>`import ${JSON.stringify(s)};`).join(""))}`;
+ }
+ const { modules, redirects, npmPackages } = await info(specifier, this.#options);
+ for (const module of modules){
+ if (specifiers.length !== 1 && module.specifier === specifier) continue;
+ this.#modules.set(module.specifier, module);
+ }
+ for (const [from, to] of Object.entries(redirects)){
+ this.#redirects.set(from, to);
+ }
+ if (npmPackages !== undefined) {
+ for (const [id, npmPackage] of Object.entries(npmPackages)){
+ this.#npmPackages.set(id, npmPackage);
+ }
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL3NyYy9kZW5vLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUm9vdEluZm9PdXRwdXQge1xuICBkZW5vRGlyOiBzdHJpbmc7XG4gIG5wbUNhY2hlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByb290SW5mbygpOiBQcm9taXNlPFJvb3RJbmZvT3V0cHV0PiB7XG4gIGlmICghdG1wRGlyKSB0bXBEaXIgPSBEZW5vLm1ha2VUZW1wRGlyU3luYygpO1xuICBjb25zdCBvcHRzID0ge1xuICAgIGFyZ3M6IFtcImluZm9cIiwgXCItLWpzb25cIiwgXCItLW5vLWNvbmZpZ1wiLCBcIi0tbm8tbG9ja1wiXSxcbiAgICBjd2Q6IHRtcERpcixcbiAgICBlbnY6IHsgREVOT19OT19QQUNLQUdFX0pTT046IFwidHJ1ZVwiIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBzdGRvdXQ6IFwicGlwZWRcIixcbiAgICBzdGRlcnI6IFwiaW5oZXJpdFwiLFxuICB9O1xuXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBEZW5vLkNvbW1hbmQoXG4gICAgRGVuby5leGVjUGF0aCgpLFxuICAgIG9wdHMgYXMgRGVuby5Db21tYW5kT3B0aW9ucyxcbiAgKS5vdXRwdXQoKTtcbiAgaWYgKCFvdXRwdXQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNhbGwgJ2Rlbm8gaW5mbydgKTtcbiAgfVxuICBjb25zdCB0eHQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUob3V0cHV0LnN0ZG91dCk7XG4gIHJldHVybiBKU09OLnBhcnNlKHR4dCk7XG59XG5cbi8vIExpZnRlZCBmcm9tIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZW5vbGFuZC9kZW5vX2dyYXBoLzg5YWZmZTQzYzlkM2Q1YzkxNjVjODA4OTY4N2MxMDdkNTNlZDhmZTEvbGliL21lZGlhX3R5cGUudHNcbmV4cG9ydCB0eXBlIE1lZGlhVHlwZSA9XG4gIHwgXCJKYXZhU2NyaXB0XCJcbiAgfCBcIk1qc1wiXG4gIHwgXCJDanNcIlxuICB8IFwiSlNYXCJcbiAgfCBcIlR5cGVTY3JpcHRcIlxuICB8IFwiTXRzXCJcbiAgfCBcIkN0c1wiXG4gIHwgXCJEdHNcIlxuICB8IFwiRG10c1wiXG4gIHwgXCJEY3RzXCJcbiAgfCBcIlRTWFwiXG4gIHwgXCJKc29uXCJcbiAgfCBcIldhc21cIlxuICB8IFwiVHNCdWlsZEluZm9cIlxuICB8IFwiU291cmNlTWFwXCJcbiAgfCBcIlVua25vd25cIjtcblxuaW50ZXJmYWNlIEluZm9PdXRwdXQge1xuICByb290czogc3RyaW5nW107XG4gIG1vZHVsZXM6IE1vZHVsZUVudHJ5W107XG4gIHJlZGlyZWN0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbnBtUGFja2FnZXM/OiBSZWNvcmQ8c3RyaW5nLCBOcG1QYWNrYWdlPjtcbn1cblxuZXhwb3J0IHR5cGUgTW9kdWxlRW50cnkgPVxuICB8IE1vZHVsZUVudHJ5RXJyb3JcbiAgfCBNb2R1bGVFbnRyeUVzbVxuICB8IE1vZHVsZUVudHJ5SnNvblxuICB8IE1vZHVsZUVudHJ5TnBtXG4gIHwgTW9kdWxlRW50cnlOb2RlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUVudHJ5QmFzZSB7XG4gIHNwZWNpZmllcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUVudHJ5RXJyb3IgZXh0ZW5kcyBNb2R1bGVFbnRyeUJhc2Uge1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUVudHJ5RXNtIGV4dGVuZHMgTW9kdWxlRW50cnlCYXNlIHtcbiAga2luZDogXCJlc21cIjtcbiAgbG9jYWw6IHN0cmluZyB8IG51bGw7XG4gIGVtaXQ6IHN0cmluZyB8IG51bGw7XG4gIG1hcDogc3RyaW5nIHwgbnVsbDtcbiAgbWVkaWFUeXBlOiBNZWRpYVR5cGU7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVFbnRyeUpzb24gZXh0ZW5kcyBNb2R1bGVFbnRyeUJhc2Uge1xuICBraW5kOiBcImFzc2VydGVkXCIgfCBcImpzb25cIjtcbiAgbG9jYWw6IHN0cmluZyB8IG51bGw7XG4gIG1lZGlhVHlwZTogTWVkaWFUeXBlO1xuICBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlRW50cnlOcG0gZXh0ZW5kcyBNb2R1bGVFbnRyeUJhc2Uge1xuICBraW5kOiBcIm5wbVwiO1xuICBucG1QYWNrYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlRW50cnlOb2RlIGV4dGVuZHMgTW9kdWxlRW50cnlCYXNlIHtcbiAga2luZDogXCJub2RlXCI7XG4gIG1vZHVsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOcG1QYWNrYWdlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHJlZ2lzdHJ5VXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZm9PcHRpb25zIHtcbiAgY3dkPzogc3RyaW5nO1xuICBjb25maWc/OiBzdHJpbmc7XG4gIGltcG9ydE1hcD86IHN0cmluZztcbiAgbG9jaz86IHN0cmluZztcbiAgbm9kZU1vZHVsZXNEaXI/OiBcImF1dG9cIiB8IFwibWFudWFsXCIgfCBcIm5vbmVcIjtcbn1cblxubGV0IHRtcERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5hc3luYyBmdW5jdGlvbiBpbmZvKFxuICBzcGVjaWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogSW5mb09wdGlvbnMsXG4pOiBQcm9taXNlPEluZm9PdXRwdXQ+IHtcbiAgY29uc3QgYXJncyA9IFtcImluZm9cIiwgXCItLWpzb25cIl07XG4gIGlmICghRGVuby52ZXJzaW9uLmRlbm8uc3RhcnRzV2l0aChcIjEuXCIpKSB7XG4gICAgYXJncy5wdXNoKFwiLS1hbGxvdy1pbXBvcnRcIik7XG4gIH1cbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhcmdzLFxuICAgIGN3ZDogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBlbnY6IHsgREVOT19OT19QQUNLQUdFX0pTT046IFwidHJ1ZVwiIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBzdGRvdXQ6IFwicGlwZWRcIixcbiAgICBzdGRlcnI6IFwiaW5oZXJpdFwiLFxuICB9O1xuICBpZiAodHlwZW9mIG9wdGlvbnMuY29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgb3B0cy5hcmdzLnB1c2goXCItLWNvbmZpZ1wiLCBvcHRpb25zLmNvbmZpZyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5hcmdzLnB1c2goXCItLW5vLWNvbmZpZ1wiKTtcbiAgfVxuICBpZiAob3B0aW9ucy5pbXBvcnRNYXApIHtcbiAgICBvcHRzLmFyZ3MucHVzaChcIi0taW1wb3J0LW1hcFwiLCBvcHRpb25zLmltcG9ydE1hcCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2sgPT09IFwic3RyaW5nXCIpIHtcbiAgICBvcHRzLmFyZ3MucHVzaChcIi0tbG9ja1wiLCBvcHRpb25zLmxvY2spO1xuICB9IGVsc2UgaWYgKCFvcHRpb25zLmN3ZCkge1xuICAgIG9wdHMuYXJncy5wdXNoKFwiLS1uby1sb2NrXCIpO1xuICB9XG4gIGlmIChvcHRpb25zLm5vZGVNb2R1bGVzRGlyICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoRGVuby52ZXJzaW9uLmRlbm8uc3RhcnRzV2l0aChcIjEuXCIpKSB7XG4gICAgICBpZiAob3B0aW9ucy5ub2RlTW9kdWxlc0RpciA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgb3B0cy5hcmdzLnB1c2goXCItLW5vZGUtbW9kdWxlcy1kaXJcIik7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubm9kZU1vZHVsZXNEaXIgPT09IFwibWFudWFsXCIpIHtcbiAgICAgICAgb3B0cy5hcmdzLnB1c2goXCItLXVuc3RhYmxlLWJ5b25tXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLmFyZ3MucHVzaChgLS1ub2RlLW1vZHVsZXMtZGlyPSR7b3B0aW9ucy5ub2RlTW9kdWxlc0Rpcn1gKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnMuY3dkKSB7XG4gICAgb3B0cy5jd2QgPSBvcHRpb25zLmN3ZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRtcERpcikgdG1wRGlyID0gRGVuby5tYWtlVGVtcERpclN5bmMoKTtcbiAgICBvcHRzLmN3ZCA9IHRtcERpcjtcbiAgfVxuXG4gIG9wdHMuYXJncy5wdXNoKHNwZWNpZmllcik7XG5cbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IERlbm8uQ29tbWFuZChcbiAgICBEZW5vLmV4ZWNQYXRoKCksXG4gICAgb3B0cyBhcyBEZW5vLkNvbW1hbmRPcHRpb25zLFxuICApLm91dHB1dCgpO1xuICBpZiAoIW91dHB1dC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY2FsbCAnZGVubyBpbmZvJyBvbiAnJHtzcGVjaWZpZXJ9J2ApO1xuICB9XG4gIGNvbnN0IHR4dCA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShvdXRwdXQuc3Rkb3V0KTtcbiAgcmV0dXJuIEpTT04ucGFyc2UodHh0KTtcbn1cblxuZXhwb3J0IGNsYXNzIEluZm9DYWNoZSB7XG4gICNvcHRpb25zOiBJbmZvT3B0aW9ucztcblxuICAjcGVuZGluZzogeyBkb25lOiBQcm9taXNlPHZvaWQ+OyBzcGVjaWZpZXJzOiBTZXQ8c3RyaW5nPiB8IG51bGwgfSB8IG51bGwgPVxuICAgIG51bGw7XG5cbiAgI21vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgI3JlZGlyZWN0czogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgI25wbVBhY2thZ2VzOiBNYXA8c3RyaW5nLCBOcG1QYWNrYWdlPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbmZvT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy4jb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBhc3luYyBnZXQoc3BlY2lmaWVyOiBzdHJpbmcpOiBQcm9taXNlPE1vZHVsZUVudHJ5PiB7XG4gICAgbGV0IGVudHJ5ID0gdGhpcy4jZ2V0Q2FjaGVkKHNwZWNpZmllcik7XG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHJldHVybiBlbnRyeTtcblxuICAgIGF3YWl0IHRoaXMuI3F1ZXVlTG9hZChzcGVjaWZpZXIpO1xuXG4gICAgZW50cnkgPSB0aGlzLiNnZXRDYWNoZWQoc3BlY2lmaWVyKTtcbiAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlYWNoYWJsZTogJyR7c3BlY2lmaWVyfScgbG9hZGVkIGJ1dCBub3QgcmVhY2hhYmxlYCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGdldE5wbVBhY2thZ2UoaWQ6IHN0cmluZyk6IE5wbVBhY2thZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNucG1QYWNrYWdlcy5nZXQoaWQpO1xuICB9XG5cbiAgI3Jlc29sdmUoc3BlY2lmaWVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gc3BlY2lmaWVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICB3aGlsZSAoY291bnRlcisrIDwgMTApIHtcbiAgICAgIGNvbnN0IHJlZGlyZWN0ID0gdGhpcy4jcmVkaXJlY3RzLmdldChzcGVjaWZpZXIpO1xuICAgICAgaWYgKHJlZGlyZWN0ID09PSB1bmRlZmluZWQpIHJldHVybiBzcGVjaWZpZXI7XG4gICAgICBzcGVjaWZpZXIgPSByZWRpcmVjdDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb28gbWFueSByZWRpcmVjdHMgZm9yICcke29yaWdpbmFsfSdgKTtcbiAgfVxuXG4gICNnZXRDYWNoZWQoc3BlY2lmaWVyOiBzdHJpbmcpOiBNb2R1bGVFbnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgc3BlY2lmaWVyID0gdGhpcy4jcmVzb2x2ZShzcGVjaWZpZXIpO1xuICAgIHJldHVybiB0aGlzLiNtb2R1bGVzLmdldChzcGVjaWZpZXIpO1xuICB9XG5cbiAgYXN5bmMgI3F1ZXVlTG9hZChzcGVjaWZpZXI6IHN0cmluZykge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy4jcGVuZGluZyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLiNwZW5kaW5nID0ge1xuICAgICAgICAgIHNwZWNpZmllcnM6IG5ldyBTZXQoW3NwZWNpZmllcl0pLFxuICAgICAgICAgIGRvbmU6IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1KSk7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWZpZXJzID0gdGhpcy4jcGVuZGluZyEuc3BlY2lmaWVycyE7XG4gICAgICAgICAgICB0aGlzLiNwZW5kaW5nIS5zcGVjaWZpZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2xvYWQoWy4uLnNwZWNpZmllcnNdKTtcbiAgICAgICAgICAgIHRoaXMuI3BlbmRpbmcgPSBudWxsO1xuICAgICAgICAgIH0pKCksXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMuI3BlbmRpbmcuZG9uZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiNwZW5kaW5nLnNwZWNpZmllcnMgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy4jcGVuZGluZy5zcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIpO1xuICAgICAgICBhd2FpdCB0aGlzLiNwZW5kaW5nLmRvbmU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3BlbmRpbmcuZG9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyAjbG9hZChzcGVjaWZpZXJzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuI3BvcHVsYXRlKHNwZWNpZmllcnMpO1xuICAgIGZvciAobGV0IHNwZWNpZmllciBvZiBzcGVjaWZpZXJzKSB7XG4gICAgICBzcGVjaWZpZXIgPSB0aGlzLiNyZXNvbHZlKHNwZWNpZmllcik7XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuI21vZHVsZXMuZ2V0KHNwZWNpZmllcik7XG4gICAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCAmJiBzcGVjaWZpZXIuc3RhcnRzV2l0aChcIm5wbTpcIikpIHtcbiAgICAgICAgLy8gd2UgaGl0IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2lzc3Vlcy8xODA0Mywgc28gd2UgaGF2ZSB0b1xuICAgICAgICAvLyBwZXJmb3JtIGFub3RoZXIgbG9hZCB0byBnZXQgdGhlIGFjdHVhbCBkYXRhIG9mIHRoZSByZWRpcmVjdGVkIHNwZWNpZmllclxuICAgICAgICBhd2FpdCB0aGlzLiNwb3B1bGF0ZShbc3BlY2lmaWVyXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgI3BvcHVsYXRlKHNwZWNpZmllcnM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHNwZWNpZmllcjtcbiAgICBpZiAoc3BlY2lmaWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNwZWNpZmllciA9IHNwZWNpZmllcnNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwZWNpZmllciA9IGBkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQsJHtcbiAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIHNwZWNpZmllcnMubWFwKChzKSA9PiBgaW1wb3J0ICR7SlNPTi5zdHJpbmdpZnkocyl9O2ApLmpvaW4oXCJcIiksXG4gICAgICAgIClcbiAgICAgIH1gO1xuICAgIH1cbiAgICBjb25zdCB7IG1vZHVsZXMsIHJlZGlyZWN0cywgbnBtUGFja2FnZXMgfSA9IGF3YWl0IGluZm8oXG4gICAgICBzcGVjaWZpZXIsXG4gICAgICB0aGlzLiNvcHRpb25zLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgaWYgKHNwZWNpZmllcnMubGVuZ3RoICE9PSAxICYmIG1vZHVsZS5zcGVjaWZpZXIgPT09IHNwZWNpZmllcikgY29udGludWU7XG4gICAgICB0aGlzLiNtb2R1bGVzLnNldChtb2R1bGUuc3BlY2lmaWVyLCBtb2R1bGUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtmcm9tLCB0b10gb2YgT2JqZWN0LmVudHJpZXMocmVkaXJlY3RzKSkge1xuICAgICAgdGhpcy4jcmVkaXJlY3RzLnNldChmcm9tLCB0byk7XG4gICAgfVxuICAgIGlmIChucG1QYWNrYWdlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpZCwgbnBtUGFja2FnZV0gb2YgT2JqZWN0LmVudHJpZXMobnBtUGFja2FnZXMpKSB7XG4gICAgICAgIHRoaXMuI25wbVBhY2thZ2VzLnNldChpZCwgbnBtUGFja2FnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxlQUFlO0VBQ3BCLElBQUksQ0FBQyxRQUFRLFNBQVMsS0FBSyxlQUFlO0VBQzFDLE1BQU0sT0FBTztJQUNYLE1BQU07TUFBQztNQUFRO01BQVU7TUFBZTtLQUFZO0lBQ3BELEtBQUs7SUFDTCxLQUFLO01BQUUsc0JBQXNCO0lBQU87SUFDcEMsUUFBUTtJQUNSLFFBQVE7RUFDVjtFQUVBLE1BQU0sU0FBUyxNQUFNLElBQUksS0FBSyxPQUFPLENBQ25DLEtBQUssUUFBUSxJQUNiLE1BQ0EsTUFBTTtFQUNSLElBQUksQ0FBQyxPQUFPLE9BQU8sRUFB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
+// denoCacheMetadata=6143771484644692677,18158484726321119823 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/081236b688f80c0c99d298ab430a6547867a10504949c43e730bc01c7d00a232.js b/vendor/gen/https/jsr.io/081236b688f80c0c99d298ab430a6547867a10504949c43e730bc01c7d00a232.js
new file mode 100644
index 0000000..fb6c701
--- /dev/null
+++ b/vendor/gen/https/jsr.io/081236b688f80c0c99d298ab430a6547867a10504949c43e730bc01c7d00a232.js
@@ -0,0 +1,17 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+export function _format(sep, pathObject) {
+ const dir = pathObject.dir || pathObject.root;
+ const base = pathObject.base || (pathObject.name ?? "") + (pathObject.ext ?? "");
+ if (!dir) return base;
+ if (base === sep) return dir;
+ if (dir === pathObject.root) return dir + base;
+ return dir + sep + base;
+}
+export function assertArg(pathObject) {
+ if (pathObject === null || typeof pathObject !== "object") {
+ throw new TypeError(`The "pathObject" argument must be of type Object, received type "${typeof pathObject}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2Zvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9mb3JtYXQoXG4gIHNlcDogc3RyaW5nLFxuICBwYXRoT2JqZWN0OiBQYXJ0aWFsPFBhcnNlZFBhdGg+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7XG4gIGNvbnN0IGJhc2U6IHN0cmluZyA9IHBhdGhPYmplY3QuYmFzZSB8fFxuICAgIChwYXRoT2JqZWN0Lm5hbWUgPz8gXCJcIikgKyAocGF0aE9iamVjdC5leHQgPz8gXCJcIik7XG4gIGlmICghZGlyKSByZXR1cm4gYmFzZTtcbiAgaWYgKGJhc2UgPT09IHNlcCkgcmV0dXJuIGRpcjtcbiAgaWYgKGRpciA9PT0gcGF0aE9iamVjdC5yb290KSByZXR1cm4gZGlyICsgYmFzZTtcbiAgcmV0dXJuIGRpciArIHNlcCArIGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBcmcocGF0aE9iamVjdDogUGFydGlhbDxQYXJzZWRQYXRoPikge1xuICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QsIHJlY2VpdmVkIHR5cGUgXCIke3R5cGVvZiBwYXRoT2JqZWN0fVwiYCxcbiAgICApO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUlyQyxPQUFPLFNBQVMsUUFDZCxHQUFXLEVBQ1gsVUFBK0I7RUFFL0IsTUFBTSxNQUEwQixXQUFXLEdBQUcsSUFBSSxXQUFXLElBQUk7RUFDakUsTUFBTSxPQUFlLFdBQVcsSUFBSSxJQUNsQyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEVBQUU7RUFDakQsSUFBSSxDQUFDLEtBQUssT0FBTztFQUNqQixJQUFJLFNBQVMsS0FBSyxPQUFPO0VBQ3pCLElBQUksUUFBUSxXQUFXLElBQUksRUFBRSxPQUFPLE1BQU07RUFDMUMsT0FBTyxNQUFNLE1BQU07QUFDckI7QUFFQSxPQUFPLFNBQVMsVUFBVSxVQUErQjtFQUN2RCxJQUFJLGVBQWUsUUFBUSxPQUFPLGVBQWUsVUFBVTtJQUN6RCxNQUFNLElBQUksVUFDUixDQUFDLGlFQUFpRSxFQUFFLE9BQU8sV0FBVyxDQUFDLENBQUM7RUFFNUY7QUFDRiJ9
+// denoCacheMetadata=5458619976571249189,14553661700719468948 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0a5487698f5644dfd1a0f393d451106e457ee09ddce0b2f0fab8ef8678a6625a.js b/vendor/gen/https/jsr.io/0a5487698f5644dfd1a0f393d451106e457ee09ddce0b2f0fab8ef8678a6625a.js
new file mode 100644
index 0000000..e2f1943
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0a5487698f5644dfd1a0f393d451106e457ee09ddce0b2f0fab8ef8678a6625a.js
@@ -0,0 +1,82 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { globToRegExp as posixGlobToRegExp } from "./posix/glob_to_regexp.ts";
+import { globToRegExp as windowsGlobToRegExp } from "./windows/glob_to_regexp.ts";
+/**
+ * Converts a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment.
+ *
+ * @example Usage
+ * ```ts
+ * import { globToRegExp } from "@std/path/glob-to-regexp";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(globToRegExp("*.js"), /^[^\\/]*\.js(?:\\|\/)*$/);
+ * } else {
+ * assertEquals(globToRegExp("*.js"), /^[^/]*\.js\/*$/);
+ * }
+ * ```
+ *
+ * @param glob Glob string to convert.
+ * @param options Conversion options.
+ * @returns The regular expression equivalent to the glob.
+ */ export function globToRegExp(glob, options = {}) {
+ return isWindows ? windowsGlobToRegExp(glob, options) : posixGlobToRegExp(glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9nbG9iX3RvX3JlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH0gZnJvbSBcIi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuXG5pbXBvcnQgeyBnbG9iVG9SZWdFeHAgYXMgcG9zaXhHbG9iVG9SZWdFeHAgfSBmcm9tIFwiLi9wb3NpeC9nbG9iX3RvX3JlZ2V4cC50c1wiO1xuaW1wb3J0IHtcbiAgZ2xvYlRvUmVnRXhwIGFzIHdpbmRvd3NHbG9iVG9SZWdFeHAsXG59IGZyb20gXCIuL3dpbmRvd3MvZ2xvYl90b19yZWdleHAudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBHbG9iT3B0aW9ucyB9O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZ2xvYiBzdHJpbmcgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogVHJpZXMgdG8gbWF0Y2ggYmFzaCBnbG9iIGV4cGFuc2lvbiBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEJhc2ljIGdsb2Igc3ludGF4OlxuICogLSBgKmAgLSBNYXRjaGVzIGV2ZXJ5dGhpbmcgd2l0aG91dCBsZWF2aW5nIHRoZSBwYXRoIHNlZ21lbnQuXG4gKiAtIGA/YCAtIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiAtIGB7Zm9vLGJhcn1gIC0gTWF0Y2hlcyBgZm9vYCBvciBgYmFyYC5cbiAqIC0gYFthYmNkXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW2EtZF1gIC0gTWF0Y2hlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFshYWJjZF1gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBiZXNpZGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW1s6PGNsYXNzPjpdXWAgLSBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIGA8Y2xhc3M+YC5cbiAqICAgICAtIGBbWzphbG51bTpdXWAgLSBNYXRjaGVzIGFueSBkaWdpdCBvciBsZXR0ZXIuXG4gKiAgICAgLSBgW1s6ZGlnaXQ6XWFiY11gIC0gTWF0Y2hlcyBhbnkgZGlnaXQsIGBhYCwgYGJgIG9yIGBjYC5cbiAqICAgICAtIFNlZSBodHRwczovL2ZhY2VsZXNzdXNlci5naXRodWIuaW8vd2NtYXRjaC9nbG9iLyNwb3NpeC1jaGFyYWN0ZXItY2xhc3Nlc1xuICogICAgICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG4gKiAtIGBcXGAgLSBFc2NhcGVzIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgYW4gYG9zYCBvdGhlciB0aGFuIGBcIndpbmRvd3NcImAuXG4gKiAtIFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICogLSBgL2AgLSBQYXRoIHNlcGFyYXRvci5cbiAqIC0gYFxcYCAtIEFkZGl0aW9uYWwgcGF0aCBzZXBhcmF0b3Igb25seSBmb3IgYG9zYCBzZXQgdG8gYFwid2luZG93c1wiYC5cbiAqXG4gKiBFeHRlbmRlZCBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGV4dGVuZGVkOiB0cnVlIH1gLlxuICogLSBgPyhmb298YmFyKWAgLSBNYXRjaGVzIDAgb3IgMSBpbnN0YW5jZSBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYEAoZm9vfGJhcilgIC0gTWF0Y2hlcyAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLiBUaGV5IGJlaGF2ZSB0aGUgc2FtZS5cbiAqIC0gYCooZm9vfGJhcilgIC0gTWF0Y2hlcyBfbl8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgKyhmb298YmFyKWAgLSBNYXRjaGVzIF9uID4gMF8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgIShmb298YmFyKWAgLSBNYXRjaGVzIGFueXRoaW5nIG90aGVyIHRoYW4gYHtmb28sYmFyfWAuXG4gKiAtIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvYmFzaC1leHRlbmRlZC1nbG9iYmluZy5cbiAqXG4gKiBHbG9ic3RhciBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGdsb2JzdGFyOiB0cnVlIH1gLlxuICogLSBgKipgIC0gTWF0Y2hlcyBhbnkgbnVtYmVyIG9mIGFueSBwYXRoIHNlZ21lbnRzLlxuICogICAgIC0gTXVzdCBjb21wcmlzZSBpdHMgZW50aXJlIHBhdGggc2VnbWVudCBpbiB0aGUgcHJvdmlkZWQgZ2xvYi5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gKlxuICogTm90ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIFRoZSBnZW5lcmF0ZWQgYFJlZ0V4cGAgaXMgYW5jaG9yZWQgYXQgYm90aCBzdGFydCBhbmQgZW5kLlxuICogLSBSZXBlYXRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHRvbGVyYXRlZC4gVHJhaWxpbmcgc2VwYXJhdG9ycyBpbiB0aGVcbiAqICAgcHJvdmlkZWQgZ2xvYiBoYXZlIG5vIG1lYW5pbmcgYW5kIGFyZSBkaXNjYXJkZWQuXG4gKiAtIEFic29sdXRlIGdsb2JzIHdpbGwgb25seSBtYXRjaCBhYnNvbHV0ZSBwYXRocywgZXRjLlxuICogLSBFbXB0eSBnbG9icyB3aWxsIG1hdGNoIG5vdGhpbmcuXG4gKiAtIEFueSBzcGVjaWFsIGdsb2Igc3ludGF4IG11c3QgYmUgY29udGFpbmVkIHRvIG9uZSBwYXRoIHNlZ21lbnQuIEZvciBleGFtcGxlLFxuICogICBgPyhmb298YmFyL2JheilgIGlzIGludmFsaWQuIFRoZSBzZXBhcmF0b3Igd2lsbCB0YWtlIHByZWNlZGVuY2UgYW5kIHRoZVxuICogICBmaXJzdCBzZWdtZW50IGVuZHMgd2l0aCBhbiB1bmNsb3NlZCBncm91cC5cbiAqIC0gSWYgYSBwYXRoIHNlZ21lbnQgZW5kcyB3aXRoIHVuY2xvc2VkIGdyb3VwcyBvciBhIGRhbmdsaW5nIGVzY2FwZSBwcmVmaXgsIGFcbiAqICAgcGFyc2UgZXJyb3IgaGFzIG9jY3VycmVkLiBFdmVyeSBjaGFyYWN0ZXIgZm9yIHRoYXQgc2VnbWVudCBpcyB0YWtlblxuICogICBsaXRlcmFsbHkgaW4gdGhpcyBldmVudC5cbiAqXG4gKiBMaW1pdGF0aW9uczpcbiAqIC0gQSBuZWdhdGl2ZSBncm91cCBsaWtlIGAhKGZvb3xiYXIpYCB3aWxsIHdyb25nbHkgYmUgY29udmVydGVkIHRvIGEgbmVnYXRpdmVcbiAqICAgbG9vay1haGVhZCBmb2xsb3dlZCBieSBhIHdpbGRjYXJkLiBUaGlzIG1lYW5zIHRoYXQgYCEoZm9vKS5qc2Agd2lsbCB3cm9uZ2x5XG4gKiAgIGZhaWwgdG8gbWF0Y2ggYGZvb2Jhci5qc2AsIGV2ZW4gdGhvdWdoIGBmb29iYXJgIGlzIG5vdCBgZm9vYC4gRWZmZWN0aXZlbHksXG4gKiAgIGAhKGZvb3xiYXIpYCBpcyB0cmVhdGVkIGxpa2UgYCEoQChmb298YmFyKSopYC4gVGhpcyB3aWxsIHdvcmsgY29ycmVjdGx5IGlmXG4gKiAgIHRoZSBncm91cCBvY2N1cnMgbm90IG5lc3RlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZ2xvYlRvUmVnRXhwIH0gZnJvbSBcIkBzdGQvcGF0aC9nbG9iLXRvLXJlZ2V4cFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhnbG9iVG9SZWdFeHAoXCIqLmpzXCIpLCAvXlteXFxcXC9dKlxcLmpzKD86XFxcXHxcXC8pKiQvKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhnbG9iVG9SZWdFeHAoXCIqLmpzXCIpLCAvXlteL10qXFwuanNcXC8qJC8pO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIGdsb2IgR2xvYiBzdHJpbmcgdG8gY29udmVydC5cbiAqIEBwYXJhbSBvcHRpb25zIENvbnZlcnNpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZXF1aXZhbGVudCB0byB0aGUgZ2xvYi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdsb2JUb1JlZ0V4cChcbiAgZ2xvYjogc3RyaW5nLFxuICBvcHRpb25zOiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogUmVnRXhwIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c0dsb2JUb1JlZ0V4cChnbG9iLCBvcHRpb25zKVxuICAgIDogcG9zaXhHbG9iVG9SZWdFeHAoZ2xvYiwgb3B0aW9ucyk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUdyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBRXJDLFNBQVMsZ0JBQWdCLGlCQUFpQixRQUFRLDRCQUE0QjtBQUM5RSxTQUNFLGdCQUFnQixtQkFBbUIsUUFDOUIsOEJBQThCO0FBSXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3RUMsR0FDRCxPQUFPLFNBQVMsYUFDZCxJQUFZLEVBQ1osVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sWUFDSCxvQkFBb0IsTUFBTSxXQUMxQixrQkFBa0IsTUFBTTtBQUM5QiJ9
+// denoCacheMetadata=4065142243584942294,6630785705735499786 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0a97246903f0a65f9d85f5bd92a9fc811546233af84935178147a3841cc915ed.js b/vendor/gen/https/jsr.io/0a97246903f0a65f9d85f5bd92a9fc811546233af84935178147a3841cc915ed.js
new file mode 100644
index 0000000..557f954
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0a97246903f0a65f9d85f5bd92a9fc811546233af84935178147a3841cc915ed.js
@@ -0,0 +1,53 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { normalizeString } from "../_common/normalize_string.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Resolves path segments into a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { resolve } from "@std/path/posix/resolve";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = resolve("/foo", "bar", "baz/asdf", "quux", "..");
+ * assertEquals(path, "/foo/bar/baz/asdf");
+ * ```
+ *
+ * @param pathSegments The path segments to resolve.
+ * @returns The resolved path.
+ */ export function resolve(...pathSegments) {
+ let resolvedPath = "";
+ let resolvedAbsolute = false;
+ for(let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--){
+ let path;
+ if (i >= 0) path = pathSegments[i];
+ else {
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a relative path without a current working directory (CWD)");
+ }
+ path = Deno.cwd();
+ }
+ assertPath(path);
+ // Skip empty entries
+ if (path.length === 0) {
+ continue;
+ }
+ resolvedPath = `${path}/${resolvedPath}`;
+ resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ }
+ // At this point the path should be resolved to a full absolute path, but
+ // handle relative paths to be safe (might happen when Deno.cwd() fails)
+ // Normalize the path
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
+ if (resolvedAbsolute) {
+ if (resolvedPath.length > 0) return `/${resolvedPath}`;
+ else return "/";
+ } else if (resolvedPath.length > 0) return resolvedPath;
+ else return ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9yZXNvbHZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gXCIuLi9fY29tbW9uL25vcm1hbGl6ZV9zdHJpbmcudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQb3NpeFBhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggc2VnbWVudHMgaW50byBhIGBwYXRoYC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L3Jlc29sdmVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSByZXNvbHZlKFwiL2Zvb1wiLCBcImJhclwiLCBcImJhei9hc2RmXCIsIFwicXV1eFwiLCBcIi4uXCIpO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiL2Zvby9iYXIvYmF6L2FzZGZcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZFBhdGggPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgbGV0IHBhdGg6IHN0cmluZztcblxuICAgIGlmIChpID49IDApIHBhdGggPSBwYXRoU2VnbWVudHNbaV0hO1xuICAgIGVsc2Uge1xuICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gICAgICBpZiAodHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGVudHJpZXNcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzUG9zaXhQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgwKSk7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBEZW5vLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcoXG4gICAgcmVzb2x2ZWRQYXRoLFxuICAgICFyZXNvbHZlZEFic29sdXRlLFxuICAgIFwiL1wiLFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIGlmIChyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSByZXR1cm4gYC8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIGVsc2UgcmV0dXJuIFwiL1wiO1xuICB9IGVsc2UgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZWRQYXRoO1xuICBlbHNlIHJldHVybiBcIi5cIjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsZUFBZSxRQUFRLGlDQUFpQztBQUNqRSxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxvQkFBb0IsUUFBUSxhQUFhO0FBRWxEOzs7Ozs7Ozs7Ozs7OztDQWNDLEdBQ0QsT0FBTyxTQUFTLFFBQVEsR0FBRyxZQUFzQjtFQUMvQyxJQUFJLGVBQWU7RUFDbkIsSUFBSSxtQkFBbUI7RUFFdkIsSUFBSyxJQUFJLElBQUksYUFBYSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixJQUFLO0lBQ3ZFLElBQUk7SUFFSixJQUFJLEtBQUssR0FBRyxPQUFPLFlBQVksQ0FBQyxFQUFFO1NBQzdCO01BQ0gsbUNBQW1DO01BQ25DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRztNQUNqQixJQUFJLE9BQU8sTUFBTSxRQUFRLFlBQVk7UUFDbkMsTUFBTSxJQUFJLFVBQ1I7TUFFSjtNQUNBLE9BQU8sS0FBSyxHQUFHO0lBQ2pCO0lBRUEsV0FBVztJQUVYLHFCQUFxQjtJQUNyQixJQUFJLEtBQUssTUFBTSxLQUFLLEdBQUc7TUFDckI7SUFDRjtJQUVBLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRSxjQUFjO0lBQ3hDLG1CQUFtQixxQkFBcUIsS0FBSyxVQUFVLENBQUM7RUFDMUQ7RUFFQSx5RUFBeUU7RUFDekUsd0VBQXdFO0VBRXhFLHFCQUFxQjtFQUNyQixlQUFlLGdCQUNiLGNBQ0EsQ0FBQyxrQkFDRCxLQUNBO0VBR0YsSUFBSSxrQkFBa0I7SUFDcEIsSUFBSSxhQUFhLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsY0FBYztTQUNqRCxPQUFPO0VBQ2QsT0FBTyxJQUFJLGFBQWEsTUFBTSxHQUFHLEdBQUcsT0FBTztPQUN0QyxPQUFPO0FBQ2QifQ==
+// denoCacheMetadata=5383713626755671370,14741270772440329704 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0bc2c76582e1b8a41cb5a25cac9c0a9f93939f069c0738a0944227ae078f0834.js b/vendor/gen/https/jsr.io/0bc2c76582e1b8a41cb5a25cac9c0a9f93939f069c0738a0944227ae078f0834.js
new file mode 100644
index 0000000..1a2f060
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0bc2c76582e1b8a41cb5a25cac9c0a9f93939f069c0738a0944227ae078f0834.js
@@ -0,0 +1,134 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { isSubdir } from "./_is_subdir.ts";
+import { isSamePath } from "./_is_same_path.ts";
+const EXISTS_ERROR = new Deno.errors.AlreadyExists("dest already exists.");
+/**
+ * Asynchronously moves a file or directory (along with its contents).
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param src The source file or directory as a string or URL.
+ * @param dest The destination file or directory as a string or URL.
+ * @param options Options for the move operation.
+ * @throws {Deno.errors.AlreadyExists} If `dest` already exists and
+ * `options.overwrite` is `false`.
+ * @throws {Deno.errors.NotSupported} If `src` is a sub-directory of `dest`.
+ *
+ * @returns A void promise that resolves once the operation completes.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { move } from "@std/fs/move";
+ *
+ * await move("./foo", "./bar");
+ * ```
+ *
+ * This will move the file or directory at `./foo` to `./bar` without
+ * overwriting.
+ *
+ * @example Overwriting
+ * ```ts ignore
+ * import { move } from "@std/fs/move";
+ *
+ * await move("./foo", "./bar", { overwrite: true });
+ * ```
+ *
+ * This will move the file or directory at `./foo` to `./bar`, overwriting
+ * `./bar` if it already exists.
+ */ export async function move(src, dest, options) {
+ const { overwrite = false } = options ?? {};
+ const srcStat = await Deno.stat(src);
+ if (srcStat.isDirectory && (isSubdir(src, dest) || isSamePath(src, dest))) {
+ throw new Deno.errors.NotSupported(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`);
+ }
+ if (overwrite) {
+ if (isSamePath(src, dest)) return;
+ try {
+ await Deno.remove(dest, {
+ recursive: true
+ });
+ } catch (error) {
+ if (!(error instanceof Deno.errors.NotFound)) {
+ throw error;
+ }
+ }
+ } else {
+ try {
+ await Deno.lstat(dest);
+ return Promise.reject(EXISTS_ERROR);
+ } catch {
+ // Do nothing...
+ }
+ }
+ await Deno.rename(src, dest);
+}
+/**
+ * Synchronously moves a file or directory (along with its contents).
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param src The source file or directory as a string or URL.
+ * @param dest The destination file or directory as a string or URL.
+ * @param options Options for the move operation.
+ * @throws {Deno.errors.AlreadyExists} If `dest` already exists and
+ * `options.overwrite` is `false`.
+ * @throws {Deno.errors.NotSupported} If `src` is a sub-directory of `dest`.
+ *
+ * @returns A void value that returns once the operation completes.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { moveSync } from "@std/fs/move";
+ *
+ * moveSync("./foo", "./bar");
+ * ```
+ *
+ * This will move the file or directory at `./foo` to `./bar` without
+ * overwriting.
+ *
+ * @example Overwriting
+ * ```ts ignore
+ * import { moveSync } from "@std/fs/move";
+ *
+ * moveSync("./foo", "./bar", { overwrite: true });
+ * ```
+ *
+ * This will move the file or directory at `./foo` to `./bar`, overwriting
+ * `./bar` if it already exists.
+ */ export function moveSync(src, dest, options) {
+ const { overwrite = false } = options ?? {};
+ const srcStat = Deno.statSync(src);
+ if (srcStat.isDirectory && (isSubdir(src, dest) || isSamePath(src, dest))) {
+ throw new Deno.errors.NotSupported(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`);
+ }
+ if (overwrite) {
+ if (isSamePath(src, dest)) return;
+ try {
+ Deno.removeSync(dest, {
+ recursive: true
+ });
+ } catch (error) {
+ if (!(error instanceof Deno.errors.NotFound)) {
+ throw error;
+ }
+ }
+ } else {
+ try {
+ Deno.lstatSync(dest);
+ throw EXISTS_ERROR;
+ } catch (error) {
+ if (error === EXISTS_ERROR) {
+ throw error;
+ }
+ }
+ }
+ Deno.renameSync(src, dest);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L21vdmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbmltcG9ydCB7IGlzU3ViZGlyIH0gZnJvbSBcIi4vX2lzX3N1YmRpci50c1wiO1xuaW1wb3J0IHsgaXNTYW1lUGF0aCB9IGZyb20gXCIuL19pc19zYW1lX3BhdGgudHNcIjtcblxuY29uc3QgRVhJU1RTX0VSUk9SID0gbmV3IERlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHMoXCJkZXN0IGFscmVhZHkgZXhpc3RzLlwiKTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgbW92ZX0gYW5kIHtAbGlua2NvZGUgbW92ZVN5bmN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb3ZlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHNob3VsZCBiZSBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBtb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IChhbG9uZyB3aXRoIGl0cyBjb250ZW50cykuXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctcmVhZGAgYW5kIGAtLWFsbG93LXdyaXRlYCBwZXJtaXNzaW9ucy5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHNyYyBUaGUgc291cmNlIGZpbGUgb3IgZGlyZWN0b3J5IGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBmaWxlIG9yIGRpcmVjdG9yeSBhcyBhIHN0cmluZyBvciBVUkwuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgbW92ZSBvcGVyYXRpb24uXG4gKiBAdGhyb3dzIHtEZW5vLmVycm9ycy5BbHJlYWR5RXhpc3RzfSBJZiBgZGVzdGAgYWxyZWFkeSBleGlzdHMgYW5kXG4gKiBgb3B0aW9ucy5vdmVyd3JpdGVgIGlzIGBmYWxzZWAuXG4gKiBAdGhyb3dzIHtEZW5vLmVycm9ycy5Ob3RTdXBwb3J0ZWR9IElmIGBzcmNgIGlzIGEgc3ViLWRpcmVjdG9yeSBvZiBgZGVzdGAuXG4gKlxuICogQHJldHVybnMgQSB2b2lkIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IG1vdmUgfSBmcm9tIFwiQHN0ZC9mcy9tb3ZlXCI7XG4gKlxuICogYXdhaXQgbW92ZShcIi4vZm9vXCIsIFwiLi9iYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgbW92ZSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYC4vZm9vYCB0byBgLi9iYXJgIHdpdGhvdXRcbiAqIG92ZXJ3cml0aW5nLlxuICpcbiAqIEBleGFtcGxlIE92ZXJ3cml0aW5nXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IG1vdmUgfSBmcm9tIFwiQHN0ZC9mcy9tb3ZlXCI7XG4gKlxuICogYXdhaXQgbW92ZShcIi4vZm9vXCIsIFwiLi9iYXJcIiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgbW92ZSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYC4vZm9vYCB0byBgLi9iYXJgLCBvdmVyd3JpdGluZ1xuICogYC4vYmFyYCBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vdmUoXG4gIHNyYzogc3RyaW5nIHwgVVJMLFxuICBkZXN0OiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM/OiBNb3ZlT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IG92ZXJ3cml0ZSA9IGZhbHNlIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gIGNvbnN0IHNyY1N0YXQgPSBhd2FpdCBEZW5vLnN0YXQoc3JjKTtcblxuICBpZiAoXG4gICAgc3JjU3RhdC5pc0RpcmVjdG9yeSAmJlxuICAgIChpc1N1YmRpcihzcmMsIGRlc3QpIHx8IGlzU2FtZVBhdGgoc3JjLCBkZXN0KSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IERlbm8uZXJyb3JzLk5vdFN1cHBvcnRlZChcbiAgICAgIGBDYW5ub3QgbW92ZSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gLFxuICAgICk7XG4gIH1cblxuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgaWYgKGlzU2FtZVBhdGgoc3JjLCBkZXN0KSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBEZW5vLnJlbW92ZShkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBEZW5vLmxzdGF0KGRlc3QpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEVYSVNUU19FUlJPUik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBEbyBub3RoaW5nLi4uXG4gICAgfVxuICB9XG5cbiAgYXdhaXQgRGVuby5yZW5hbWUoc3JjLCBkZXN0KTtcbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IG1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgKGFsb25nIHdpdGggaXRzIGNvbnRlbnRzKS5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctd3JpdGVgIHBlcm1pc3Npb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kZW5vLmNvbS9ydW50aW1lL21hbnVhbC9iYXNpY3MvcGVybWlzc2lvbnMjZmlsZS1zeXN0ZW0tYWNjZXNzfVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVubydzIHBlcm1pc3Npb25zIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gc3JjIFRoZSBzb3VyY2UgZmlsZSBvciBkaXJlY3RvcnkgYXMgYSBzdHJpbmcgb3IgVVJMLlxuICogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGZpbGUgb3IgZGlyZWN0b3J5IGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBtb3ZlIG9wZXJhdGlvbi5cbiAqIEB0aHJvd3Mge0Rlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHN9IElmIGBkZXN0YCBhbHJlYWR5IGV4aXN0cyBhbmRcbiAqIGBvcHRpb25zLm92ZXJ3cml0ZWAgaXMgYGZhbHNlYC5cbiAqIEB0aHJvd3Mge0Rlbm8uZXJyb3JzLk5vdFN1cHBvcnRlZH0gSWYgYHNyY2AgaXMgYSBzdWItZGlyZWN0b3J5IG9mIGBkZXN0YC5cbiAqXG4gKiBAcmV0dXJucyBBIHZvaWQgdmFsdWUgdGhhdCByZXR1cm5zIG9uY2UgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgbW92ZVN5bmMgfSBmcm9tIFwiQHN0ZC9mcy9tb3ZlXCI7XG4gKlxuICogbW92ZVN5bmMoXCIuL2Zvb1wiLCBcIi4vYmFyXCIpO1xuICogYGBgXG4gKlxuICogVGhpcyB3aWxsIG1vdmUgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IGAuL2Zvb2AgdG8gYC4vYmFyYCB3aXRob3V0XG4gKiBvdmVyd3JpdGluZy5cbiAqXG4gKiBAZXhhbXBsZSBPdmVyd3JpdGluZ1xuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBtb3ZlU3luYyB9IGZyb20gXCJAc3RkL2ZzL21vdmVcIjtcbiAqXG4gKiBtb3ZlU3luYyhcIi4vZm9vXCIsIFwiLi9iYXJcIiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgbW92ZSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYC4vZm9vYCB0byBgLi9iYXJgLCBvdmVyd3JpdGluZ1xuICogYC4vYmFyYCBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vdmVTeW5jKFxuICBzcmM6IHN0cmluZyB8IFVSTCxcbiAgZGVzdDogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zPzogTW92ZU9wdGlvbnMsXG4pOiB2b2lkIHtcbiAgY29uc3QgeyBvdmVyd3JpdGUgPSBmYWxzZSB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICBjb25zdCBzcmNTdGF0ID0gRGVuby5zdGF0U3luYyhzcmMpO1xuXG4gIGlmIChcbiAgICBzcmNTdGF0LmlzRGlyZWN0b3J5ICYmXG4gICAgKGlzU3ViZGlyKHNyYywgZGVzdCkgfHwgaXNTYW1lUGF0aChzcmMsIGRlc3QpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRGVuby5lcnJvcnMuTm90U3VwcG9ydGVkKFxuICAgICAgYENhbm5vdCBtb3ZlICcke3NyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7ZGVzdH0nLmAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChvdmVyd3JpdGUpIHtcbiAgICBpZiAoaXNTYW1lUGF0aChzcmMsIGRlc3QpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIERlbm8ucmVtb3ZlU3luYyhkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBEZW5vLmxzdGF0U3luYyhkZXN0KTtcbiAgICAgIHRocm93IEVYSVNUU19FUlJPUjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yID09PSBFWElTVFNfRVJST1IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgRGVuby5yZW5hbWVTeW5jKHNyYywgZGVzdCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELFNBQVMsUUFBUSxRQUFRLGtCQUFrQjtBQUMzQyxTQUFTLFVBQVUsUUFBUSxxQkFBcUI7QUFFaEQsTUFBTSxlQUFlLElBQUksS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDO0FBWW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQ0MsR0FDRCxPQUFPLGVBQWUsS0FDcEIsR0FBaUIsRUFDakIsSUFBa0IsRUFDbEIsT0FBcUI7RUFFckIsTUFBTSxFQUFFLFlBQVksS0FBSyxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBRTFDLE1BQU0sVUFBVSxNQUFNLEtBQUssSUFBSSxDQUFDO0VBRWhDLElBQ0UsUUFBUSxXQUFXLElBQ25CLENBQUMsU0FBUyxLQUFLLFNBQVMsV0FBVyxLQUFLLEtBQUssR0FDN0M7SUFDQSxNQUFNLElBQUksS0FBSyxNQUFNLENBQUMsWUFBWSxDQUNoQyxDQUFDLGFBQWEsRUFBRSxJQUFJLGdDQUFnQyxFQUFFLEtBQUssRUFBRSxDQUFDO0VBRWxFO0VBRUEsSUFBSSxXQUFXO0lBQ2IsSUFBSSxXQUFXLEtBQUssT0FBTztJQUMzQixJQUFJO01BQ0YsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1FBQUUsV0FBVztNQUFLO0lBQzVDLEVBQUUsT0FBTyxPQUFPO01BQ2QsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEtBQUssTUFBTSxDQUFDLFFBQVEsR0FBRztRQUM1QyxNQUFNO01BQ1I7SUFDRjtFQUNGLE9BQU87SUFDTCxJQUFJO01BQ0YsTUFBTSxLQUFLLEtBQUssQ0FBQztNQUNqQixPQUFPLFFBQVEsTUFBTSxDQUFDO0lBQ3hCLEVBQUUsT0FBTTtJQUNOLGdCQUFnQjtJQUNsQjtFQUNGO0VBRUEsTUFBTSxLQUFLLE1BQU0sQ0FBQyxLQUFLO0FBQ3pCO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DQyxHQUNELE9BQU8sU0FBUyxTQUNkLEdBQWlCLEVBQ2pCLElBQWtCLEVBQ2xCLE9BQXFCO0VBRXJCLE1BQU0sRUFBRSxZQUFZLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUUxQyxNQUFNLFVBQVUsS0FBSyxRQUFRLENBQUM7RUFFOUIsSUFDRSxRQUFRLFdBQVcsSUFDbkIsQ0FBQyxTQUFTLEtBQUssU0FBUyxXQUFXLEtBQUssS0FBSyxHQUM3QztJQUNBLE1BQU0sSUFBSSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQ2hDLENBQUMsYUFBYSxFQUFFLElBQUksZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFFbEU7RUFFQSxJQUFJLFdBQVc7SUFDYixJQUFJLFdBQVcsS0FBSyxPQUFPO0lBQzNCLElBQUk7TUFDRixLQUFLLFVBQVUsQ0FBQyxNQUFNO1FBQUUsV0FBVztNQUFLO0lBQzFDLEVBQUUsT0FBTyxPQUFPO01BQ2QsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEtBQUssTUFBTSxDQUFDLFFBQVEsR0FBRztRQUM1QyxNQUFNO01BQ1I7SUFDRjtFQUNGLE9BQU87SUFDTCxJQUFJO01BQ0YsS0FBSyxTQUFTLENBQUM7TUFDZixNQUFNO0lBQ1IsRUFBRSxPQUFPLE9BQU87TUFDZCxJQUFJLFVBQVUsY0FBYztRQUMxQixNQUFNO01BQ1I7SUFDRjtFQUNGO0VBRUEsS0FBSyxVQUFVLENBQUMsS0FBSztBQUN2QiJ9
+// denoCacheMetadata=806473274462951643,2715127819446038078 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0c4d9698d06eda300c8819213081f7e749cce45215b2584b8ad836b846a1436f.js b/vendor/gen/https/jsr.io/0c4d9698d06eda300c8819213081f7e749cce45215b2584b8ad836b846a1436f.js
new file mode 100644
index 0000000..741d7b3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0c4d9698d06eda300c8819213081f7e749cce45215b2584b8ad836b846a1436f.js
@@ -0,0 +1,859 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+// This module is generated from {@link https://www.iana.org/assignments/http-fields/http-fields.xhtml#field-names | IANA Hypertext Transfer Protocol (HTTP) Field Name Registry}
+/**
+ * HTTP Headers with status permanent
+ *
+ * @experimental **UNSTABLE**: New API, yet to be vetted.
+ *
+ * @see {@link https://www.iana.org/assignments/http-fields/http-fields.xhtml#field-names | IANA Hypertext Transfer Protocol (HTTP) Field Name Registry}
+ */ export const HEADER = {
+ /**
+ * HTTP Header A-IM
+ *
+ * @see {@link https://www.iana.org/go/rfc3229 | RFC 3229: Delta encoding in HTTP}
+ */ AIm: "A-IM",
+ /**
+ * HTTP Header Accept
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 12.5.1: HTTP Semantics}
+ */ Accept: "Accept",
+ /**
+ * HTTP Header Accept-Additions
+ *
+ * @see {@link https://www.iana.org/go/rfc2324 | RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)}
+ */ AcceptAdditions: "Accept-Additions",
+ /**
+ * HTTP Header Accept-CH
+ *
+ * @see {@link https://www.iana.org/go/rfc8942 | RFC 8942, Section 3.1: HTTP Client Hints}
+ */ AcceptCh: "Accept-CH",
+ /**
+ * HTTP Header Accept-Datetime
+ *
+ * @see {@link https://www.iana.org/go/rfc7089 | RFC 7089: HTTP Framework for Time-Based Access to Resource States -- Memento}
+ */ AcceptDatetime: "Accept-Datetime",
+ /**
+ * HTTP Header Accept-Encoding
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 12.5.3: HTTP Semantics}
+ */ AcceptEncoding: "Accept-Encoding",
+ /**
+ * HTTP Header Accept-Features
+ *
+ * @see {@link https://www.iana.org/go/rfc2295 | RFC 2295: Transparent Content Negotiation in HTTP}
+ */ AcceptFeatures: "Accept-Features",
+ /**
+ * HTTP Header Accept-Language
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 12.5.4: HTTP Semantics}
+ */ AcceptLanguage: "Accept-Language",
+ /**
+ * HTTP Header Accept-Patch
+ *
+ * @see {@link https://www.iana.org/go/rfc5789 | RFC 5789: PATCH Method for HTTP}
+ */ AcceptPatch: "Accept-Patch",
+ /**
+ * HTTP Header Accept-Post
+ *
+ * @see {@link https://www.w3.org/TR/ldp | Linked Data Platform 1.0}
+ */ AcceptPost: "Accept-Post",
+ /**
+ * HTTP Header Accept-Ranges
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 14.3: HTTP Semantics}
+ */ AcceptRanges: "Accept-Ranges",
+ /**
+ * HTTP Header Accept-Signature
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-message-signatures-19 | RFC-ietf-httpbis-message-signatures-19, Section 5.1: HTTP Message Signatures}
+ */ AcceptSignature: "Accept-Signature",
+ /**
+ * HTTP Header Access-Control-Allow-Credentials
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-allow-credentials | Fetch}
+ */ AccessControlAllowCredentials: "Access-Control-Allow-Credentials",
+ /**
+ * HTTP Header Access-Control-Allow-Headers
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-allow-headers | Fetch}
+ */ AccessControlAllowHeaders: "Access-Control-Allow-Headers",
+ /**
+ * HTTP Header Access-Control-Allow-Methods
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-allow-methods | Fetch}
+ */ AccessControlAllowMethods: "Access-Control-Allow-Methods",
+ /**
+ * HTTP Header Access-Control-Allow-Origin
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-allow-origin | Fetch}
+ */ AccessControlAllowOrigin: "Access-Control-Allow-Origin",
+ /**
+ * HTTP Header Access-Control-Expose-Headers
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-expose-headers | Fetch}
+ */ AccessControlExposeHeaders: "Access-Control-Expose-Headers",
+ /**
+ * HTTP Header Access-Control-Max-Age
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-max-age | Fetch}
+ */ AccessControlMaxAge: "Access-Control-Max-Age",
+ /**
+ * HTTP Header Access-Control-Request-Headers
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-request-headers | Fetch}
+ */ AccessControlRequestHeaders: "Access-Control-Request-Headers",
+ /**
+ * HTTP Header Access-Control-Request-Method
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#http-access-control-request-method | Fetch}
+ */ AccessControlRequestMethod: "Access-Control-Request-Method",
+ /**
+ * HTTP Header Age
+ *
+ * @see {@link https://www.iana.org/go/rfc9111 | RFC9111, Section 5.1: HTTP Caching}
+ */ Age: "Age",
+ /**
+ * HTTP Header Allow
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.2.1: HTTP Semantics}
+ */ Allow: "Allow",
+ /**
+ * HTTP Header ALPN
+ *
+ * @see {@link https://www.iana.org/go/rfc7639 | RFC 7639, Section 2: The ALPN HTTP Header Field}
+ */ ALPN: "ALPN",
+ /**
+ * HTTP Header Alt-Svc
+ *
+ * @see {@link https://www.iana.org/go/rfc7838 | RFC 7838: HTTP Alternative Services}
+ */ AltSvc: "Alt-Svc",
+ /**
+ * HTTP Header Alt-Used
+ *
+ * @see {@link https://www.iana.org/go/rfc7838 | RFC 7838: HTTP Alternative Services}
+ */ AltUsed: "Alt-Used",
+ /**
+ * HTTP Header Alternates
+ *
+ * @see {@link https://www.iana.org/go/rfc2295 | RFC 2295: Transparent Content Negotiation in HTTP}
+ */ Alternates: "Alternates",
+ /**
+ * HTTP Header Apply-To-Redirect-Ref
+ *
+ * @see {@link https://www.iana.org/go/rfc4437 | RFC 4437: Web Distributed Authoring and Versioning (WebDAV) Redirect Reference Resources}
+ */ ApplyToRedirectRef: "Apply-To-Redirect-Ref",
+ /**
+ * HTTP Header Authentication-Control
+ *
+ * @see {@link https://www.iana.org/go/rfc8053 | RFC 8053, Section 4: HTTP Authentication Extensions for Interactive Clients}
+ */ AuthenticationControl: "Authentication-Control",
+ /**
+ * HTTP Header Authentication-Info
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 11.6.3: HTTP Semantics}
+ */ AuthenticationInfo: "Authentication-Info",
+ /**
+ * HTTP Header Authorization
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 11.6.2: HTTP Semantics}
+ */ Authorization: "Authorization",
+ /**
+ * HTTP Header Cache-Control
+ *
+ * @see {@link https://www.iana.org/go/rfc9111 | RFC9111, Section 5.2}
+ */ CacheControl: "Cache-Control",
+ /**
+ * HTTP Header Cache-Status
+ *
+ * @see {@link https://www.iana.org/go/rfc9211 | RFC9211: The Cache-Status HTTP Response Header Field}
+ */ CacheStatus: "Cache-Status",
+ /**
+ * HTTP Header Cal-Managed-ID
+ *
+ * @see {@link https://www.iana.org/go/rfc8607 | RFC 8607, Section 5.1: Calendaring Extensions to WebDAV (CalDAV): Managed Attachments}
+ */ CalManagedId: "Cal-Managed-ID",
+ /**
+ * HTTP Header CalDAV-Timezones
+ *
+ * @see {@link https://www.iana.org/go/rfc7809 | RFC 7809, Section 7.1: Calendaring Extensions to WebDAV (CalDAV): Time Zones by Reference}
+ */ CaldavTimezones: "CalDAV-Timezones",
+ /**
+ * HTTP Header Capsule-Protocol
+ *
+ * @see {@link https://www.iana.org/go/rfc9297 | RFC9297}
+ */ CapsuleProtocol: "Capsule-Protocol",
+ /**
+ * HTTP Header CDN-Cache-Control
+ *
+ * @see {@link https://www.iana.org/go/rfc9213 | RFC9213: Targeted HTTP Cache Control}
+ */ CdnCacheControl: "CDN-Cache-Control",
+ /**
+ * HTTP Header CDN-Loop
+ *
+ * @see {@link https://www.iana.org/go/rfc8586 | RFC 8586: Loop Detection in Content Delivery Networks (CDNs)}
+ */ CdnLoop: "CDN-Loop",
+ /**
+ * HTTP Header Cert-Not-After
+ *
+ * @see {@link https://www.iana.org/go/rfc8739 | RFC 8739, Section 3.3: Support for Short-Term, Automatically Renewed (STAR) Certificates in the Automated Certificate Management Environment (ACME)}
+ */ CertNotAfter: "Cert-Not-After",
+ /**
+ * HTTP Header Cert-Not-Before
+ *
+ * @see {@link https://www.iana.org/go/rfc8739 | RFC 8739, Section 3.3: Support for Short-Term, Automatically Renewed (STAR) Certificates in the Automated Certificate Management Environment (ACME)}
+ */ CertNotBefore: "Cert-Not-Before",
+ /**
+ * HTTP Header Clear-Site-Data
+ *
+ * @see {@link https://w3.org/TR/clear-site-data/#header | Clear Site Data}
+ */ ClearSiteData: "Clear-Site-Data",
+ /**
+ * HTTP Header Client-Cert
+ *
+ * @see {@link https://www.iana.org/go/rfc9440 | RFC9440, Section 2: Client-Cert HTTP Header Field}
+ */ ClientCert: "Client-Cert",
+ /**
+ * HTTP Header Client-Cert-Chain
+ *
+ * @see {@link https://www.iana.org/go/rfc9440 | RFC9440, Section 2: Client-Cert HTTP Header Field}
+ */ ClientCertChain: "Client-Cert-Chain",
+ /**
+ * HTTP Header Close
+ *
+ * @see {@link https://www.iana.org/go/rfc9112 | RFC9112, Section 9.6: HTTP/1.1}
+ */ Close: "Close",
+ /**
+ * HTTP Header Connection
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 7.6.1: HTTP Semantics}
+ */ Connection: "Connection",
+ /**
+ * HTTP Header Content-Digest
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-digest-headers-13 | RFC-ietf-httpbis-digest-headers-13, Section 2: Digest Fields}
+ */ ContentDigest: "Content-Digest",
+ /**
+ * HTTP Header Content-Disposition
+ *
+ * @see {@link https://www.iana.org/go/rfc6266 | RFC 6266: Use of the Content-Disposition Header Field in the
+ Hypertext Transfer Protocol (HTTP)}
+ */ ContentDisposition: "Content-Disposition",
+ /**
+ * HTTP Header Content-Encoding
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.4: HTTP Semantics}
+ */ ContentEncoding: "Content-Encoding",
+ /**
+ * HTTP Header Content-Language
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.5: HTTP Semantics}
+ */ ContentLanguage: "Content-Language",
+ /**
+ * HTTP Header Content-Length
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.6: HTTP Semantics}
+ */ ContentLength: "Content-Length",
+ /**
+ * HTTP Header Content-Location
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.7: HTTP Semantics}
+ */ ContentLocation: "Content-Location",
+ /**
+ * HTTP Header Content-Range
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 14.4: HTTP Semantics}
+ */ ContentRange: "Content-Range",
+ /**
+ * HTTP Header Content-Security-Policy
+ *
+ * @see {@link https://www.w3.org/TR/CSP/#csp-header | Content Security Policy Level 3}
+ */ ContentSecurityPolicy: "Content-Security-Policy",
+ /**
+ * HTTP Header Content-Security-Policy-Report-Only
+ *
+ * @see {@link https://www.w3.org/TR/CSP/#cspro-header | Content Security Policy Level 3}
+ */ ContentSecurityPolicyReportOnly: "Content-Security-Policy-Report-Only",
+ /**
+ * HTTP Header Content-Type
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.3: HTTP Semantics}
+ */ ContentType: "Content-Type",
+ /**
+ * HTTP Header Cookie
+ *
+ * @see {@link https://www.iana.org/go/rfc6265 | RFC 6265: HTTP State Management Mechanism}
+ */ Cookie: "Cookie",
+ /**
+ * HTTP Header Cross-Origin-Embedder-Policy
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/origin.html#cross-origin-embedder-policy | HTML}
+ */ CrossOriginEmbedderPolicy: "Cross-Origin-Embedder-Policy",
+ /**
+ * HTTP Header Cross-Origin-Embedder-Policy-Report-Only
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/origin.html#cross-origin-embedder-policy-report-only | HTML}
+ */ CrossOriginEmbedderPolicyReportOnly: "Cross-Origin-Embedder-Policy-Report-Only",
+ /**
+ * HTTP Header Cross-Origin-Opener-Policy
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/origin.html#cross-origin-opener-policy-2 | HTML}
+ */ CrossOriginOpenerPolicy: "Cross-Origin-Opener-Policy",
+ /**
+ * HTTP Header Cross-Origin-Opener-Policy-Report-Only
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/origin.html#cross-origin-opener-policy-report-only | HTML}
+ */ CrossOriginOpenerPolicyReportOnly: "Cross-Origin-Opener-Policy-Report-Only",
+ /**
+ * HTTP Header Cross-Origin-Resource-Policy
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#cross-origin-resource-policy-header | Fetch}
+ */ CrossOriginResourcePolicy: "Cross-Origin-Resource-Policy",
+ /**
+ * HTTP Header DASL
+ *
+ * @see {@link https://www.iana.org/go/rfc5323 | RFC 5323: Web Distributed Authoring and Versioning (WebDAV) SEARCH}
+ */ DASL: "DASL",
+ /**
+ * HTTP Header Date
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 6.6.1: HTTP Semantics}
+ */ Date: "Date",
+ /**
+ * HTTP Header DAV
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ DAV: "DAV",
+ /**
+ * HTTP Header Delta-Base
+ *
+ * @see {@link https://www.iana.org/go/rfc3229 | RFC 3229: Delta encoding in HTTP}
+ */ DeltaBase: "Delta-Base",
+ /**
+ * HTTP Header Depth
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ Depth: "Depth",
+ /**
+ * HTTP Header Destination
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ Destination: "Destination",
+ /**
+ * HTTP Header DPoP
+ *
+ * @see {@link https://www.iana.org/go/rfc9449 | RFC9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)}
+ */ DPoP: "DPoP",
+ /**
+ * HTTP Header DPoP-Nonce
+ *
+ * @see {@link https://www.iana.org/go/rfc9449 | RFC9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)}
+ */ DpopNonce: "DPoP-Nonce",
+ /**
+ * HTTP Header Early-Data
+ *
+ * @see {@link https://www.iana.org/go/rfc8470 | RFC 8470: Using Early Data in HTTP}
+ */ EarlyData: "Early-Data",
+ /**
+ * HTTP Header ETag
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.8.3: HTTP Semantics}
+ */ ETag: "ETag",
+ /**
+ * HTTP Header Expect
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.1.1: HTTP Semantics}
+ */ Expect: "Expect",
+ /**
+ * HTTP Header Expires
+ *
+ * @see {@link https://www.iana.org/go/rfc9111 | RFC9111, Section 5.3: HTTP Caching}
+ */ Expires: "Expires",
+ /**
+ * HTTP Header Forwarded
+ *
+ * @see {@link https://www.iana.org/go/rfc7239 | RFC 7239: Forwarded HTTP Extension}
+ */ Forwarded: "Forwarded",
+ /**
+ * HTTP Header From
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.1.2: HTTP Semantics}
+ */ From: "From",
+ /**
+ * HTTP Header Hobareg
+ *
+ * @see {@link https://www.iana.org/go/rfc7486 | RFC 7486, Section 6.1.1: HTTP Origin-Bound Authentication (HOBA)}
+ */ Hobareg: "Hobareg",
+ /**
+ * HTTP Header Host
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 7.2: HTTP Semantics}
+ */ Host: "Host",
+ /**
+ * HTTP Header If
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ If: "If",
+ /**
+ * HTTP Header If-Match
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 13.1.1: HTTP Semantics}
+ */ IfMatch: "If-Match",
+ /**
+ * HTTP Header If-Modified-Since
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 13.1.3: HTTP Semantics}
+ */ IfModifiedSince: "If-Modified-Since",
+ /**
+ * HTTP Header If-None-Match
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 13.1.2: HTTP Semantics}
+ */ IfNoneMatch: "If-None-Match",
+ /**
+ * HTTP Header If-Range
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 13.1.5: HTTP Semantics}
+ */ IfRange: "If-Range",
+ /**
+ * HTTP Header If-Schedule-Tag-Match
+ *
+ * @see {@link https://www.iana.org/go/rfc6638 | RFC 6338: Scheduling Extensions to CalDAV}
+ */ IfScheduleTagMatch: "If-Schedule-Tag-Match",
+ /**
+ * HTTP Header If-Unmodified-Since
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 13.1.4: HTTP Semantics}
+ */ IfUnmodifiedSince: "If-Unmodified-Since",
+ /**
+ * HTTP Header IM
+ *
+ * @see {@link https://www.iana.org/go/rfc3229 | RFC 3229: Delta encoding in HTTP}
+ */ IM: "IM",
+ /**
+ * HTTP Header Include-Referred-Token-Binding-ID
+ *
+ * @see {@link https://www.iana.org/go/rfc8473 | RFC 8473: Token Binding over HTTP}
+ */ IncludeReferredTokenBindingId: "Include-Referred-Token-Binding-ID",
+ /**
+ * HTTP Header Keep-Alive
+ *
+ * @see {@link https://www.iana.org/go/rfc2068 | RFC 2068: Hypertext Transfer Protocol -- HTTP/1.1}
+ */ KeepAlive: "Keep-Alive",
+ /**
+ * HTTP Header Label
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC 3253: Versioning Extensions to WebDAV: (Web Distributed Authoring and Versioning)}
+ */ Label: "Label",
+ /**
+ * HTTP Header Last-Event-ID
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/server-sent-events.html#last-event-id | HTML}
+ */ LastEventId: "Last-Event-ID",
+ /**
+ * HTTP Header Last-Modified
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 8.8.2: HTTP Semantics}
+ */ LastModified: "Last-Modified",
+ /**
+ * HTTP Header Link
+ *
+ * @see {@link https://www.iana.org/go/rfc8288 | RFC 8288: Web Linking}
+ */ Link: "Link",
+ /**
+ * HTTP Header Location
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.2.2: HTTP Semantics}
+ */ Location: "Location",
+ /**
+ * HTTP Header Lock-Token
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ LockToken: "Lock-Token",
+ /**
+ * HTTP Header Max-Forwards
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 7.6.2: HTTP Semantics}
+ */ MaxForwards: "Max-Forwards",
+ /**
+ * HTTP Header Memento-Datetime
+ *
+ * @see {@link https://www.iana.org/go/rfc7089 | RFC 7089: HTTP Framework for Time-Based Access to Resource States -- Memento}
+ */ MementoDatetime: "Memento-Datetime",
+ /**
+ * HTTP Header Meter
+ *
+ * @see {@link https://www.iana.org/go/rfc2227 | RFC 2227: Simple Hit-Metering and Usage-Limiting for HTTP}
+ */ Meter: "Meter",
+ /**
+ * HTTP Header MIME-Version
+ *
+ * @see {@link https://www.iana.org/go/rfc9112 | RFC9112, Appendix B.1: HTTP/1.1}
+ */ MimeVersion: "MIME-Version",
+ /**
+ * HTTP Header Negotiate
+ *
+ * @see {@link https://www.iana.org/go/rfc2295 | RFC 2295: Transparent Content Negotiation in HTTP}
+ */ Negotiate: "Negotiate",
+ /**
+ * HTTP Header NEL
+ *
+ * @see {@link https://www.w3.org/TR/network-error-logging/ | Network Error Logging}
+ */ NEL: "NEL",
+ /**
+ * HTTP Header OData-EntityId
+ *
+ * @see {@link http://docs.oasis-open.org/odata/odata/v4.01/csprd05/part1-protocol/odata-v4.01-csprd05-part1-protocol.html#_Toc14172735 | OData Version 4.01 Part 1: Protocol}
+ * @see {@link #OASIS | OASIS}
+ * @see {@link #Chet_Ensign | Chet_Ensign}
+ */ OdataEntityid: "OData-EntityId",
+ /**
+ * HTTP Header OData-Isolation
+ *
+ * @see {@link http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_HeaderIsolationODataIsolation | OData Version 4.01 Part 1: Protocol}
+ * @see {@link #OASIS | OASIS}
+ * @see {@link #Chet_Ensign | Chet_Ensign}
+ */ OdataIsolation: "OData-Isolation",
+ /**
+ * HTTP Header OData-MaxVersion
+ *
+ * @see {@link http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_HeaderODataMaxVersion | OData Version 4.01 Part 1: Protocol}
+ * @see {@link #OASIS | OASIS}
+ * @see {@link #Chet_Ensign | Chet_Ensign}
+ */ OdataMaxversion: "OData-MaxVersion",
+ /**
+ * HTTP Header OData-Version
+ *
+ * @see {@link http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_HeaderODataVersion | OData Version 4.01 Part 1: Protocol}
+ * @see {@link #OASIS | OASIS}
+ * @see {@link #Chet_Ensign | Chet_Ensign}
+ */ OdataVersion: "OData-Version",
+ /**
+ * HTTP Header Optional-WWW-Authenticate
+ *
+ * @see {@link https://www.iana.org/go/rfc8053 | RFC 8053, Section 3: HTTP Authentication Extensions for Interactive Clients}
+ */ OptionalWwwAuthenticate: "Optional-WWW-Authenticate",
+ /**
+ * HTTP Header Ordering-Type
+ *
+ * @see {@link https://www.iana.org/go/rfc3648 | RFC 3648: Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol}
+ */ OrderingType: "Ordering-Type",
+ /**
+ * HTTP Header Origin
+ *
+ * @see {@link https://www.iana.org/go/rfc6454 | RFC 6454: The Web Origin Concept}
+ */ Origin: "Origin",
+ /**
+ * HTTP Header Origin-Agent-Cluster
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/origin.html#origin-agent-cluster | HTML}
+ */ OriginAgentCluster: "Origin-Agent-Cluster",
+ /**
+ * HTTP Header OSCORE
+ *
+ * @see {@link https://www.iana.org/go/rfc8613 | RFC 8613, Section 11.1: Object Security for Constrained RESTful Environments (OSCORE)}
+ */ OSCORE: "OSCORE",
+ /**
+ * HTTP Header OSLC-Core-Version
+ *
+ * @see {@link https://docs.oasis-open-projects.org/oslc-op/core/v3.0/oslc-core.html | OASIS Project Specification 01}
+ * @see {@link #OASIS | OASIS}
+ * @see {@link #Chet_Ensign | Chet_Ensign}
+ */ OslcCoreVersion: "OSLC-Core-Version",
+ /**
+ * HTTP Header Overwrite
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ Overwrite: "Overwrite",
+ /**
+ * HTTP Header Ping-From
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/links.html#ping-from | HTML}
+ */ PingFrom: "Ping-From",
+ /**
+ * HTTP Header Ping-To
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/links.html#ping-to | HTML}
+ */ PingTo: "Ping-To",
+ /**
+ * HTTP Header Position
+ *
+ * @see {@link https://www.iana.org/go/rfc3648 | RFC 3648: Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol}
+ */ Position: "Position",
+ /**
+ * HTTP Header Prefer
+ *
+ * @see {@link https://www.iana.org/go/rfc7240 | RFC 7240: Prefer Header for HTTP}
+ */ Prefer: "Prefer",
+ /**
+ * HTTP Header Preference-Applied
+ *
+ * @see {@link https://www.iana.org/go/rfc7240 | RFC 7240: Prefer Header for HTTP}
+ */ PreferenceApplied: "Preference-Applied",
+ /**
+ * HTTP Header Priority
+ *
+ * @see {@link https://www.iana.org/go/rfc9218 | RFC9218: Extensible Prioritization Scheme for HTTP}
+ */ Priority: "Priority",
+ /**
+ * HTTP Header Proxy-Authenticate
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 11.7.1: HTTP Semantics}
+ */ ProxyAuthenticate: "Proxy-Authenticate",
+ /**
+ * HTTP Header Proxy-Authentication-Info
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 11.7.3: HTTP Semantics}
+ */ ProxyAuthenticationInfo: "Proxy-Authentication-Info",
+ /**
+ * HTTP Header Proxy-Authorization
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 11.7.2: HTTP Semantics}
+ */ ProxyAuthorization: "Proxy-Authorization",
+ /**
+ * HTTP Header Proxy-Status
+ *
+ * @see {@link https://www.iana.org/go/rfc9209 | RFC9209: The Proxy-Status HTTP Response Header Field}
+ */ ProxyStatus: "Proxy-Status",
+ /**
+ * HTTP Header Public-Key-Pins
+ *
+ * @see {@link https://www.iana.org/go/rfc7469 | RFC 7469: Public Key Pinning Extension for HTTP}
+ */ PublicKeyPins: "Public-Key-Pins",
+ /**
+ * HTTP Header Public-Key-Pins-Report-Only
+ *
+ * @see {@link https://www.iana.org/go/rfc7469 | RFC 7469: Public Key Pinning Extension for HTTP}
+ */ PublicKeyPinsReportOnly: "Public-Key-Pins-Report-Only",
+ /**
+ * HTTP Header Range
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 14.2: HTTP Semantics}
+ */ Range: "Range",
+ /**
+ * HTTP Header Redirect-Ref
+ *
+ * @see {@link https://www.iana.org/go/rfc4437 | RFC 4437: Web Distributed Authoring and Versioning (WebDAV) Redirect Reference Resources}
+ */ RedirectRef: "Redirect-Ref",
+ /**
+ * HTTP Header Referer
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.1.3: HTTP Semantics}
+ */ Referer: "Referer",
+ /**
+ * HTTP Header Refresh
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/browsing-the-web.html#refresh | HTML}
+ */ Refresh: "Refresh",
+ /**
+ * HTTP Header Replay-Nonce
+ *
+ * @see {@link https://www.iana.org/go/rfc8555 | RFC 8555, Section 6.5.1: Automatic Certificate Management Environment (ACME)}
+ */ ReplayNonce: "Replay-Nonce",
+ /**
+ * HTTP Header Repr-Digest
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-digest-headers-13 | RFC-ietf-httpbis-digest-headers-13, Section 3: Digest Fields}
+ */ ReprDigest: "Repr-Digest",
+ /**
+ * HTTP Header Retry-After
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.2.3: HTTP Semantics}
+ */ RetryAfter: "Retry-After",
+ /**
+ * HTTP Header Schedule-Reply
+ *
+ * @see {@link https://www.iana.org/go/rfc6638 | RFC 6638: Scheduling Extensions to CalDAV}
+ */ ScheduleReply: "Schedule-Reply",
+ /**
+ * HTTP Header Schedule-Tag
+ *
+ * @see {@link https://www.iana.org/go/rfc6638 | RFC 6338: Scheduling Extensions to CalDAV}
+ */ ScheduleTag: "Schedule-Tag",
+ /**
+ * HTTP Header Sec-Purpose
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#sec-purpose-header | Fetch}
+ */ SecPurpose: "Sec-Purpose",
+ /**
+ * HTTP Header Sec-Token-Binding
+ *
+ * @see {@link https://www.iana.org/go/rfc8473 | RFC 8473: Token Binding over HTTP}
+ */ SecTokenBinding: "Sec-Token-Binding",
+ /**
+ * HTTP Header Sec-WebSocket-Accept
+ *
+ * @see {@link https://www.iana.org/go/rfc6455 | RFC 6455: The WebSocket Protocol}
+ */ SecWebsocketAccept: "Sec-WebSocket-Accept",
+ /**
+ * HTTP Header Sec-WebSocket-Extensions
+ *
+ * @see {@link https://www.iana.org/go/rfc6455 | RFC 6455: The WebSocket Protocol}
+ */ SecWebsocketExtensions: "Sec-WebSocket-Extensions",
+ /**
+ * HTTP Header Sec-WebSocket-Key
+ *
+ * @see {@link https://www.iana.org/go/rfc6455 | RFC 6455: The WebSocket Protocol}
+ */ SecWebsocketKey: "Sec-WebSocket-Key",
+ /**
+ * HTTP Header Sec-WebSocket-Protocol
+ *
+ * @see {@link https://www.iana.org/go/rfc6455 | RFC 6455: The WebSocket Protocol}
+ */ SecWebsocketProtocol: "Sec-WebSocket-Protocol",
+ /**
+ * HTTP Header Sec-WebSocket-Version
+ *
+ * @see {@link https://www.iana.org/go/rfc6455 | RFC 6455: The WebSocket Protocol}
+ */ SecWebsocketVersion: "Sec-WebSocket-Version",
+ /**
+ * HTTP Header Server
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.2.4: HTTP Semantics}
+ */ Server: "Server",
+ /**
+ * HTTP Header Server-Timing
+ *
+ * @see {@link https://www.w3.org/TR/server-timing/ | Server Timing}
+ */ ServerTiming: "Server-Timing",
+ /**
+ * HTTP Header Set-Cookie
+ *
+ * @see {@link https://www.iana.org/go/rfc6265 | RFC 6265: HTTP State Management Mechanism}
+ */ SetCookie: "Set-Cookie",
+ /**
+ * HTTP Header Signature
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-message-signatures-19 | RFC-ietf-httpbis-message-signatures-19, Section 4.2: HTTP Message Signatures}
+ */ Signature: "Signature",
+ /**
+ * HTTP Header Signature-Input
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-message-signatures-19 | RFC-ietf-httpbis-message-signatures-19, Section 4.1: HTTP Message Signatures}
+ */ SignatureInput: "Signature-Input",
+ /**
+ * HTTP Header SLUG
+ *
+ * @see {@link https://www.iana.org/go/rfc5023 | RFC 5023: The Atom Publishing Protocol}
+ */ SLUG: "SLUG",
+ /**
+ * HTTP Header SoapAction
+ *
+ * @see {@link https://www.w3.org/TR/2000/NOTE-SOAP-20000508 | Simple Object Access Protocol (SOAP) 1.1}
+ */ SoapAction: "SoapAction",
+ /**
+ * HTTP Header Status-URI
+ *
+ * @see {@link https://www.iana.org/go/rfc2518 | RFC 2518: HTTP Extensions for Distributed Authoring -- WEBDAV}
+ */ StatusUri: "Status-URI",
+ /**
+ * HTTP Header Strict-Transport-Security
+ *
+ * @see {@link https://www.iana.org/go/rfc6797 | RFC 6797: HTTP Strict Transport Security (HSTS)}
+ */ StrictTransportSecurity: "Strict-Transport-Security",
+ /**
+ * HTTP Header Sunset
+ *
+ * @see {@link https://www.iana.org/go/rfc8594 | RFC 8594: The Sunset HTTP Header Field}
+ */ Sunset: "Sunset",
+ /**
+ * HTTP Header TCN
+ *
+ * @see {@link https://www.iana.org/go/rfc2295 | RFC 2295: Transparent Content Negotiation in HTTP}
+ */ TCN: "TCN",
+ /**
+ * HTTP Header TE
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.1.4: HTTP Semantics}
+ */ TE: "TE",
+ /**
+ * HTTP Header Timeout
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)}
+ */ Timeout: "Timeout",
+ /**
+ * HTTP Header Topic
+ *
+ * @see {@link https://www.iana.org/go/rfc8030 | RFC 8030, Section 5.4: Generic Event Delivery Using HTTP Push}
+ */ Topic: "Topic",
+ /**
+ * HTTP Header Traceparent
+ *
+ * @see {@link https://www.w3.org/TR/trace-context/#traceparent-header | Trace Context}
+ */ Traceparent: "Traceparent",
+ /**
+ * HTTP Header Tracestate
+ *
+ * @see {@link https://www.w3.org/TR/trace-context/#tracestate-header | Trace Context}
+ */ Tracestate: "Tracestate",
+ /**
+ * HTTP Header Trailer
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 6.6.2: HTTP Semantics}
+ */ Trailer: "Trailer",
+ /**
+ * HTTP Header Transfer-Encoding
+ *
+ * @see {@link https://www.iana.org/go/rfc9112 | RFC9112, Section 6.1: HTTP Semantics}
+ */ TransferEncoding: "Transfer-Encoding",
+ /**
+ * HTTP Header TTL
+ *
+ * @see {@link https://www.iana.org/go/rfc8030 | RFC 8030, Section 5.2: Generic Event Delivery Using HTTP Push}
+ */ TTL: "TTL",
+ /**
+ * HTTP Header Upgrade
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 7.8: HTTP Semantics}
+ */ Upgrade: "Upgrade",
+ /**
+ * HTTP Header Urgency
+ *
+ * @see {@link https://www.iana.org/go/rfc8030 | RFC 8030, Section 5.3: Generic Event Delivery Using HTTP Push}
+ */ Urgency: "Urgency",
+ /**
+ * HTTP Header User-Agent
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 10.1.5: HTTP Semantics}
+ */ UserAgent: "User-Agent",
+ /**
+ * HTTP Header Variant-Vary
+ *
+ * @see {@link https://www.iana.org/go/rfc2295 | RFC 2295: Transparent Content Negotiation in HTTP}
+ */ VariantVary: "Variant-Vary",
+ /**
+ * HTTP Header Vary
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 12.5.5: HTTP Semantics}
+ */ Vary: "Vary",
+ /**
+ * HTTP Header Via
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 7.6.3: HTTP Semantics}
+ */ Via: "Via",
+ /**
+ * HTTP Header Want-Content-Digest
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-digest-headers-13 | RFC-ietf-httpbis-digest-headers-13, Section 4: Digest Fields}
+ */ WantContentDigest: "Want-Content-Digest",
+ /**
+ * HTTP Header Want-Repr-Digest
+ *
+ * @see {@link https://www.iana.org/go/draft-ietf-httpbis-digest-headers-13 | RFC-ietf-httpbis-digest-headers-13, Section 4: Digest Fields}
+ */ WantReprDigest: "Want-Repr-Digest",
+ /**
+ * HTTP Header WWW-Authenticate
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 11.6.1: HTTP Semantics}
+ */ WwwAuthenticate: "WWW-Authenticate",
+ /**
+ * HTTP Header X-Content-Type-Options
+ *
+ * @see {@link https://fetch.spec.whatwg.org/#x-content-type-options-header | Fetch}
+ */ XContentTypeOptions: "X-Content-Type-Options",
+ /**
+ * HTTP Header X-Frame-Options
+ *
+ * @see {@link https://html.spec.whatwg.org/multipage/browsing-the-web.html#x-frame-options | HTML}
+ */ XFrameOptions: "X-Frame-Options"
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHR0cC8xLjAuMTYvdW5zdGFibGVfaGVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4vLyBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1maWVsZHMvaHR0cC1maWVsZHMueGh0bWwjZmllbGQtbmFtZXMgfCBJQU5BIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCAoSFRUUCkgRmllbGQgTmFtZSBSZWdpc3RyeX1cblxuLyoqXG4gKiBIVFRQIEhlYWRlcnMgd2l0aCBzdGF0dXMgcGVybWFuZW50XG4gKlxuICogQGV4cGVyaW1lbnRhbCAqKlVOU1RBQkxFKio6IE5ldyBBUEksIHlldCB0byBiZSB2ZXR0ZWQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1maWVsZHMvaHR0cC1maWVsZHMueGh0bWwjZmllbGQtbmFtZXMgfCBJQU5BIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCAoSFRUUCkgRmllbGQgTmFtZSBSZWdpc3RyeX1cbiAqL1xuZXhwb3J0IGNvbnN0IEhFQURFUiA9IHtcbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEEtSU1cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMzIyOSB8IFJGQyAzMjI5OiBEZWx0YSBlbmNvZGluZyBpbiBIVFRQfVxuICAgKi9cbiAgQUltOiBcIkEtSU1cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXB0XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDEyLjUuMTogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBBY2NlcHQ6IFwiQWNjZXB0XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEFjY2VwdC1BZGRpdGlvbnNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMjMyNCB8IFJGQyAyMzI0OiBIeXBlciBUZXh0IENvZmZlZSBQb3QgQ29udHJvbCBQcm90b2NvbCAoSFRDUENQLzEuMCl9XG4gICAqL1xuICBBY2NlcHRBZGRpdGlvbnM6IFwiQWNjZXB0LUFkZGl0aW9uc1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBY2NlcHQtQ0hcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODk0MiB8IFJGQyA4OTQyLCBTZWN0aW9uIDMuMTogSFRUUCBDbGllbnQgSGludHN9XG4gICAqL1xuICBBY2NlcHRDaDogXCJBY2NlcHQtQ0hcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXB0LURhdGV0aW1lXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzcwODkgfCBSRkMgNzA4OTogSFRUUCBGcmFtZXdvcmsgZm9yIFRpbWUtQmFzZWQgQWNjZXNzIHRvIFJlc291cmNlIFN0YXRlcyAtLSBNZW1lbnRvfVxuICAgKi9cbiAgQWNjZXB0RGF0ZXRpbWU6IFwiQWNjZXB0LURhdGV0aW1lXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEFjY2VwdC1FbmNvZGluZ1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMi41LjM6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgQWNjZXB0RW5jb2Rpbmc6IFwiQWNjZXB0LUVuY29kaW5nXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEFjY2VwdC1GZWF0dXJlc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMyMjk1IHwgUkZDIDIyOTU6IFRyYW5zcGFyZW50IENvbnRlbnQgTmVnb3RpYXRpb24gaW4gSFRUUH1cbiAgICovXG4gIEFjY2VwdEZlYXR1cmVzOiBcIkFjY2VwdC1GZWF0dXJlc1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBY2NlcHQtTGFuZ3VhZ2VcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTIuNS40OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIEFjY2VwdExhbmd1YWdlOiBcIkFjY2VwdC1MYW5ndWFnZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBY2NlcHQtUGF0Y2hcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNTc4OSB8IFJGQyA1Nzg5OiBQQVRDSCBNZXRob2QgZm9yIEhUVFB9XG4gICAqL1xuICBBY2NlcHRQYXRjaDogXCJBY2NlcHQtUGF0Y2hcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXB0LVBvc3RcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2xkcCB8IExpbmtlZCBEYXRhIFBsYXRmb3JtIDEuMH1cbiAgICovXG4gIEFjY2VwdFBvc3Q6IFwiQWNjZXB0LVBvc3RcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXB0LVJhbmdlc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxNC4zOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIEFjY2VwdFJhbmdlczogXCJBY2NlcHQtUmFuZ2VzXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEFjY2VwdC1TaWduYXR1cmVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vZHJhZnQtaWV0Zi1odHRwYmlzLW1lc3NhZ2Utc2lnbmF0dXJlcy0xOSB8IFJGQy1pZXRmLWh0dHBiaXMtbWVzc2FnZS1zaWduYXR1cmVzLTE5LCBTZWN0aW9uIDUuMTogSFRUUCBNZXNzYWdlIFNpZ25hdHVyZXN9XG4gICAqL1xuICBBY2NlcHRTaWduYXR1cmU6IFwiQWNjZXB0LVNpZ25hdHVyZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1hY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyB8IEZldGNofVxuICAgKi9cbiAgQWNjZXNzQ29udHJvbEFsbG93Q3JlZGVudGlhbHM6IFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1hY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzIHwgRmV0Y2h9XG4gICAqL1xuICBBY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzOiBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1hY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzIHwgRmV0Y2h9XG4gICAqL1xuICBBY2Nlc3NDb250cm9sQWxsb3dNZXRob2RzOiBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiB8IEZldGNofVxuICAgKi9cbiAgQWNjZXNzQ29udHJvbEFsbG93T3JpZ2luOiBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1hY2Nlc3MtY29udHJvbC1leHBvc2UtaGVhZGVycyB8IEZldGNofVxuICAgKi9cbiAgQWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnM6IFwiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXNzLUNvbnRyb2wtTWF4LUFnZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1hY2Nlc3MtY29udHJvbC1tYXgtYWdlIHwgRmV0Y2h9XG4gICAqL1xuICBBY2Nlc3NDb250cm9sTWF4QWdlOiBcIkFjY2Vzcy1Db250cm9sLU1heC1BZ2VcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWFjY2Vzcy1jb250cm9sLXJlcXVlc3QtaGVhZGVycyB8IEZldGNofVxuICAgKi9cbiAgQWNjZXNzQ29udHJvbFJlcXVlc3RIZWFkZXJzOiBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVyc1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1hY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZCB8IEZldGNofVxuICAgKi9cbiAgQWNjZXNzQ29udHJvbFJlcXVlc3RNZXRob2Q6IFwiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2RcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWdlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTEgfCBSRkM5MTExLCBTZWN0aW9uIDUuMTogSFRUUCBDYWNoaW5nfVxuICAgKi9cbiAgQWdlOiBcIkFnZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBbGxvd1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMC4yLjE6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgQWxsb3c6IFwiQWxsb3dcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQUxQTlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM3NjM5IHwgUkZDIDc2MzksIFNlY3Rpb24gMjogVGhlIEFMUE4gSFRUUCBIZWFkZXIgRmllbGR9XG4gICAqL1xuICBBTFBOOiBcIkFMUE5cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQWx0LVN2Y1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM3ODM4IHwgUkZDIDc4Mzg6IEhUVFAgQWx0ZXJuYXRpdmUgU2VydmljZXN9XG4gICAqL1xuICBBbHRTdmM6IFwiQWx0LVN2Y1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBbHQtVXNlZFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM3ODM4IHwgUkZDIDc4Mzg6IEhUVFAgQWx0ZXJuYXRpdmUgU2VydmljZXN9XG4gICAqL1xuICBBbHRVc2VkOiBcIkFsdC1Vc2VkXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEFsdGVybmF0ZXNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMjI5NSB8IFJGQyAyMjk1OiBUcmFuc3BhcmVudCBDb250ZW50IE5lZ290aWF0aW9uIGluIEhUVFB9XG4gICAqL1xuICBBbHRlcm5hdGVzOiBcIkFsdGVybmF0ZXNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQXBwbHktVG8tUmVkaXJlY3QtUmVmXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ0MzcgfCBSRkMgNDQzNzogV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyAoV2ViREFWKSBSZWRpcmVjdCBSZWZlcmVuY2UgUmVzb3VyY2VzfVxuICAgKi9cbiAgQXBwbHlUb1JlZGlyZWN0UmVmOiBcIkFwcGx5LVRvLVJlZGlyZWN0LVJlZlwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBdXRoZW50aWNhdGlvbi1Db250cm9sXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzgwNTMgfCBSRkMgODA1MywgU2VjdGlvbiA0OiBIVFRQIEF1dGhlbnRpY2F0aW9uIEV4dGVuc2lvbnMgZm9yIEludGVyYWN0aXZlIENsaWVudHN9XG4gICAqL1xuICBBdXRoZW50aWNhdGlvbkNvbnRyb2w6IFwiQXV0aGVudGljYXRpb24tQ29udHJvbFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBdXRoZW50aWNhdGlvbi1JbmZvXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDExLjYuMzogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBBdXRoZW50aWNhdGlvbkluZm86IFwiQXV0aGVudGljYXRpb24tSW5mb1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBBdXRob3JpemF0aW9uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDExLjYuMjogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBBdXRob3JpemF0aW9uOiBcIkF1dGhvcml6YXRpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ2FjaGUtQ29udHJvbFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTExIHwgUkZDOTExMSwgU2VjdGlvbiA1LjJ9XG4gICAqL1xuICBDYWNoZUNvbnRyb2w6IFwiQ2FjaGUtQ29udHJvbFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDYWNoZS1TdGF0dXNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTIxMSB8IFJGQzkyMTE6IFRoZSBDYWNoZS1TdGF0dXMgSFRUUCBSZXNwb25zZSBIZWFkZXIgRmllbGR9XG4gICAqL1xuICBDYWNoZVN0YXR1czogXCJDYWNoZS1TdGF0dXNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ2FsLU1hbmFnZWQtSURcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODYwNyB8IFJGQyA4NjA3LCBTZWN0aW9uIDUuMTogQ2FsZW5kYXJpbmcgRXh0ZW5zaW9ucyB0byBXZWJEQVYgKENhbERBVik6IE1hbmFnZWQgQXR0YWNobWVudHN9XG4gICAqL1xuICBDYWxNYW5hZ2VkSWQ6IFwiQ2FsLU1hbmFnZWQtSURcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ2FsREFWLVRpbWV6b25lc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM3ODA5IHwgUkZDIDc4MDksIFNlY3Rpb24gNy4xOiBDYWxlbmRhcmluZyBFeHRlbnNpb25zIHRvIFdlYkRBViAoQ2FsREFWKTogVGltZSBab25lcyBieSBSZWZlcmVuY2V9XG4gICAqL1xuICBDYWxkYXZUaW1lem9uZXM6IFwiQ2FsREFWLVRpbWV6b25lc1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDYXBzdWxlLVByb3RvY29sXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkyOTcgfCBSRkM5Mjk3fVxuICAgKi9cbiAgQ2Fwc3VsZVByb3RvY29sOiBcIkNhcHN1bGUtUHJvdG9jb2xcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ0ROLUNhY2hlLUNvbnRyb2xcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTIxMyB8IFJGQzkyMTM6IFRhcmdldGVkIEhUVFAgQ2FjaGUgQ29udHJvbH1cbiAgICovXG4gIENkbkNhY2hlQ29udHJvbDogXCJDRE4tQ2FjaGUtQ29udHJvbFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDRE4tTG9vcFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4NTg2IHwgUkZDIDg1ODY6IExvb3AgRGV0ZWN0aW9uIGluIENvbnRlbnQgRGVsaXZlcnkgTmV0d29ya3MgKENETnMpfVxuICAgKi9cbiAgQ2RuTG9vcDogXCJDRE4tTG9vcFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDZXJ0LU5vdC1BZnRlclxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4NzM5IHwgUkZDIDg3MzksIFNlY3Rpb24gMy4zOiBTdXBwb3J0IGZvciBTaG9ydC1UZXJtLCBBdXRvbWF0aWNhbGx5IFJlbmV3ZWQgKFNUQVIpIENlcnRpZmljYXRlcyBpbiB0aGUgQXV0b21hdGVkIENlcnRpZmljYXRlIE1hbmFnZW1lbnQgRW52aXJvbm1lbnQgKEFDTUUpfVxuICAgKi9cbiAgQ2VydE5vdEFmdGVyOiBcIkNlcnQtTm90LUFmdGVyXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENlcnQtTm90LUJlZm9yZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4NzM5IHwgUkZDIDg3MzksIFNlY3Rpb24gMy4zOiBTdXBwb3J0IGZvciBTaG9ydC1UZXJtLCBBdXRvbWF0aWNhbGx5IFJlbmV3ZWQgKFNUQVIpIENlcnRpZmljYXRlcyBpbiB0aGUgQXV0b21hdGVkIENlcnRpZmljYXRlIE1hbmFnZW1lbnQgRW52aXJvbm1lbnQgKEFDTUUpfVxuICAgKi9cbiAgQ2VydE5vdEJlZm9yZTogXCJDZXJ0LU5vdC1CZWZvcmVcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ2xlYXItU2l0ZS1EYXRhXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzMub3JnL1RSL2NsZWFyLXNpdGUtZGF0YS8jaGVhZGVyIHwgQ2xlYXIgU2l0ZSBEYXRhfVxuICAgKi9cbiAgQ2xlYXJTaXRlRGF0YTogXCJDbGVhci1TaXRlLURhdGFcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ2xpZW50LUNlcnRcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTQ0MCB8IFJGQzk0NDAsIFNlY3Rpb24gMjogQ2xpZW50LUNlcnQgSFRUUCBIZWFkZXIgRmllbGR9XG4gICAqL1xuICBDbGllbnRDZXJ0OiBcIkNsaWVudC1DZXJ0XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENsaWVudC1DZXJ0LUNoYWluXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzk0NDAgfCBSRkM5NDQwLCBTZWN0aW9uIDI6IENsaWVudC1DZXJ0IEhUVFAgSGVhZGVyIEZpZWxkfVxuICAgKi9cbiAgQ2xpZW50Q2VydENoYWluOiBcIkNsaWVudC1DZXJ0LUNoYWluXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENsb3NlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTIgfCBSRkM5MTEyLCBTZWN0aW9uIDkuNjogSFRUUC8xLjF9XG4gICAqL1xuICBDbG9zZTogXCJDbG9zZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDb25uZWN0aW9uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDcuNi4xOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIENvbm5lY3Rpb246IFwiQ29ubmVjdGlvblwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDb250ZW50LURpZ2VzdFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9kcmFmdC1pZXRmLWh0dHBiaXMtZGlnZXN0LWhlYWRlcnMtMTMgfCBSRkMtaWV0Zi1odHRwYmlzLWRpZ2VzdC1oZWFkZXJzLTEzLCBTZWN0aW9uIDI6IERpZ2VzdCBGaWVsZHN9XG4gICAqL1xuICBDb250ZW50RGlnZXN0OiBcIkNvbnRlbnQtRGlnZXN0XCIsXG5cbiAgLyoqXG4gKiBIVFRQIEhlYWRlciBDb250ZW50LURpc3Bvc2l0aW9uXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNjI2NiB8IFJGQyA2MjY2OiBVc2Ugb2YgdGhlIENvbnRlbnQtRGlzcG9zaXRpb24gSGVhZGVyIEZpZWxkIGluIHRoZVxuICAgICAgICBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgKEhUVFApfVxuICovXG4gIENvbnRlbnREaXNwb3NpdGlvbjogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENvbnRlbnQtRW5jb2RpbmdcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gOC40OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIENvbnRlbnRFbmNvZGluZzogXCJDb250ZW50LUVuY29kaW5nXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENvbnRlbnQtTGFuZ3VhZ2VcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gOC41OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIENvbnRlbnRMYW5ndWFnZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENvbnRlbnQtTGVuZ3RoXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDguNjogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBDb250ZW50TGVuZ3RoOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENvbnRlbnQtTG9jYXRpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gOC43OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIENvbnRlbnRMb2NhdGlvbjogXCJDb250ZW50LUxvY2F0aW9uXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENvbnRlbnQtUmFuZ2VcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTQuNDogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBDb250ZW50UmFuZ2U6IFwiQ29udGVudC1SYW5nZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDb250ZW50LVNlY3VyaXR5LVBvbGljeVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQLyNjc3AtaGVhZGVyIHwgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgTGV2ZWwgM31cbiAgICovXG4gIENvbnRlbnRTZWN1cml0eVBvbGljeTogXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQLyNjc3Byby1oZWFkZXIgfCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZlbCAzfVxuICAgKi9cbiAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVwb3J0T25seTogXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDb250ZW50LVR5cGVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gOC4zOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIENvbnRlbnRUeXBlOiBcIkNvbnRlbnQtVHlwZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDb29raWVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNjI2NSB8IFJGQyA2MjY1OiBIVFRQIFN0YXRlIE1hbmFnZW1lbnQgTWVjaGFuaXNtfVxuICAgKi9cbiAgQ29va2llOiBcIkNvb2tpZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kgfCBIVE1MfVxuICAgKi9cbiAgQ3Jvc3NPcmlnaW5FbWJlZGRlclBvbGljeTogXCJDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIENyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3ktUmVwb3J0LU9ubHlcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS1yZXBvcnQtb25seSB8IEhUTUx9XG4gICAqL1xuICBDcm9zc09yaWdpbkVtYmVkZGVyUG9saWN5UmVwb3J0T25seTpcbiAgICBcIkNyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3ktUmVwb3J0LU9ubHlcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3lcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjY3Jvc3Mtb3JpZ2luLW9wZW5lci1wb2xpY3ktMiB8IEhUTUx9XG4gICAqL1xuICBDcm9zc09yaWdpbk9wZW5lclBvbGljeTogXCJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeS1SZXBvcnQtT25seVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjcm9zcy1vcmlnaW4tb3BlbmVyLXBvbGljeS1yZXBvcnQtb25seSB8IEhUTUx9XG4gICAqL1xuICBDcm9zc09yaWdpbk9wZW5lclBvbGljeVJlcG9ydE9ubHk6IFwiQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3ktUmVwb3J0LU9ubHlcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeS1oZWFkZXIgfCBGZXRjaH1cbiAgICovXG4gIENyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3k6IFwiQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBEQVNMXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzUzMjMgfCBSRkMgNTMyMzogV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyAoV2ViREFWKSBTRUFSQ0h9XG4gICAqL1xuICBEQVNMOiBcIkRBU0xcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgRGF0ZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiA2LjYuMTogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBEYXRlOiBcIkRhdGVcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgREFWXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkMgNDkxODogSFRUUCBFeHRlbnNpb25zIGZvciBXZWIgRGlzdHJpYnV0ZWQgQXV0aG9yaW5nIGFuZCBWZXJzaW9uaW5nIChXZWJEQVYpfVxuICAgKi9cbiAgREFWOiBcIkRBVlwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBEZWx0YS1CYXNlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzMyMjkgfCBSRkMgMzIyOTogRGVsdGEgZW5jb2RpbmcgaW4gSFRUUH1cbiAgICovXG4gIERlbHRhQmFzZTogXCJEZWx0YS1CYXNlXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIERlcHRoXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkMgNDkxODogSFRUUCBFeHRlbnNpb25zIGZvciBXZWIgRGlzdHJpYnV0ZWQgQXV0aG9yaW5nIGFuZCBWZXJzaW9uaW5nIChXZWJEQVYpfVxuICAgKi9cbiAgRGVwdGg6IFwiRGVwdGhcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgRGVzdGluYXRpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNDkxOCB8IFJGQyA0OTE4OiBIVFRQIEV4dGVuc2lvbnMgZm9yIFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcgKFdlYkRBVil9XG4gICAqL1xuICBEZXN0aW5hdGlvbjogXCJEZXN0aW5hdGlvblwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBEUG9QXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzk0NDkgfCBSRkM5NDQ5OiBPQXV0aCAyLjAgRGVtb25zdHJhdGluZyBQcm9vZiBvZiBQb3NzZXNzaW9uIChEUG9QKX1cbiAgICovXG4gIERQb1A6IFwiRFBvUFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBEUG9QLU5vbmNlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzk0NDkgfCBSRkM5NDQ5OiBPQXV0aCAyLjAgRGVtb25zdHJhdGluZyBQcm9vZiBvZiBQb3NzZXNzaW9uIChEUG9QKX1cbiAgICovXG4gIERwb3BOb25jZTogXCJEUG9QLU5vbmNlXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEVhcmx5LURhdGFcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODQ3MCB8IFJGQyA4NDcwOiBVc2luZyBFYXJseSBEYXRhIGluIEhUVFB9XG4gICAqL1xuICBFYXJseURhdGE6IFwiRWFybHktRGF0YVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBFVGFnXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDguOC4zOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIEVUYWc6IFwiRVRhZ1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBFeHBlY3RcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTAuMS4xOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIEV4cGVjdDogXCJFeHBlY3RcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgRXhwaXJlc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTExIHwgUkZDOTExMSwgU2VjdGlvbiA1LjM6IEhUVFAgQ2FjaGluZ31cbiAgICovXG4gIEV4cGlyZXM6IFwiRXhwaXJlc1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBGb3J3YXJkZWRcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNzIzOSB8IFJGQyA3MjM5OiBGb3J3YXJkZWQgSFRUUCBFeHRlbnNpb259XG4gICAqL1xuICBGb3J3YXJkZWQ6IFwiRm9yd2FyZGVkXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEZyb21cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTAuMS4yOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIEZyb206IFwiRnJvbVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBIb2JhcmVnXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzc0ODYgfCBSRkMgNzQ4NiwgU2VjdGlvbiA2LjEuMTogSFRUUCBPcmlnaW4tQm91bmQgQXV0aGVudGljYXRpb24gKEhPQkEpfVxuICAgKi9cbiAgSG9iYXJlZzogXCJIb2JhcmVnXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIEhvc3RcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gNy4yOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIEhvc3Q6IFwiSG9zdFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBJZlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM0OTE4IHwgUkZDIDQ5MTg6IEhUVFAgRXh0ZW5zaW9ucyBmb3IgV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyAoV2ViREFWKX1cbiAgICovXG4gIElmOiBcIklmXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIElmLU1hdGNoXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDEzLjEuMTogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBJZk1hdGNoOiBcIklmLU1hdGNoXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIElmLU1vZGlmaWVkLVNpbmNlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDEzLjEuMzogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBJZk1vZGlmaWVkU2luY2U6IFwiSWYtTW9kaWZpZWQtU2luY2VcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgSWYtTm9uZS1NYXRjaFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMy4xLjI6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgSWZOb25lTWF0Y2g6IFwiSWYtTm9uZS1NYXRjaFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBJZi1SYW5nZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMy4xLjU6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgSWZSYW5nZTogXCJJZi1SYW5nZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBJZi1TY2hlZHVsZS1UYWctTWF0Y2hcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNjYzOCB8ICBSRkMgNjMzODogU2NoZWR1bGluZyBFeHRlbnNpb25zIHRvIENhbERBVn1cbiAgICovXG4gIElmU2NoZWR1bGVUYWdNYXRjaDogXCJJZi1TY2hlZHVsZS1UYWctTWF0Y2hcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgSWYtVW5tb2RpZmllZC1TaW5jZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMy4xLjQ6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgSWZVbm1vZGlmaWVkU2luY2U6IFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBJTVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMzMjI5IHwgUkZDIDMyMjk6IERlbHRhIGVuY29kaW5nIGluIEhUVFB9XG4gICAqL1xuICBJTTogXCJJTVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBJbmNsdWRlLVJlZmVycmVkLVRva2VuLUJpbmRpbmctSURcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODQ3MyB8IFJGQyA4NDczOiBUb2tlbiBCaW5kaW5nIG92ZXIgSFRUUH1cbiAgICovXG4gIEluY2x1ZGVSZWZlcnJlZFRva2VuQmluZGluZ0lkOiBcIkluY2x1ZGUtUmVmZXJyZWQtVG9rZW4tQmluZGluZy1JRFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBLZWVwLUFsaXZlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzIwNjggfCBSRkMgMjA2ODogSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xfVxuICAgKi9cbiAgS2VlcEFsaXZlOiBcIktlZXAtQWxpdmVcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgTGFiZWxcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMzI1MyB8IFJGQyAzMjUzOiBWZXJzaW9uaW5nIEV4dGVuc2lvbnMgdG8gV2ViREFWOiAoV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyl9XG4gICAqL1xuICBMYWJlbDogXCJMYWJlbFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBMYXN0LUV2ZW50LUlEXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI2xhc3QtZXZlbnQtaWQgfCBIVE1MfVxuICAgKi9cbiAgTGFzdEV2ZW50SWQ6IFwiTGFzdC1FdmVudC1JRFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBMYXN0LU1vZGlmaWVkXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDguOC4yOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIExhc3RNb2RpZmllZDogXCJMYXN0LU1vZGlmaWVkXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIExpbmtcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODI4OCB8IFJGQyA4Mjg4OiBXZWIgTGlua2luZ31cbiAgICovXG4gIExpbms6IFwiTGlua1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBMb2NhdGlvblxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMC4yLjI6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgTG9jYXRpb246IFwiTG9jYXRpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgTG9jay1Ub2tlblxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM0OTE4IHwgUkZDIDQ5MTg6IEhUVFAgRXh0ZW5zaW9ucyBmb3IgV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyAoV2ViREFWKX1cbiAgICovXG4gIExvY2tUb2tlbjogXCJMb2NrLVRva2VuXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIE1heC1Gb3J3YXJkc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiA3LjYuMjogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBNYXhGb3J3YXJkczogXCJNYXgtRm9yd2FyZHNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgTWVtZW50by1EYXRldGltZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM3MDg5IHwgUkZDIDcwODk6IEhUVFAgRnJhbWV3b3JrIGZvciBUaW1lLUJhc2VkIEFjY2VzcyB0byBSZXNvdXJjZSBTdGF0ZXMgLS0gTWVtZW50b31cbiAgICovXG4gIE1lbWVudG9EYXRldGltZTogXCJNZW1lbnRvLURhdGV0aW1lXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIE1ldGVyXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzIyMjcgfCBSRkMgMjIyNzogU2ltcGxlIEhpdC1NZXRlcmluZyBhbmQgVXNhZ2UtTGltaXRpbmcgZm9yIEhUVFB9XG4gICAqL1xuICBNZXRlcjogXCJNZXRlclwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBNSU1FLVZlcnNpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMiB8IFJGQzkxMTIsIEFwcGVuZGl4IEIuMTogSFRUUC8xLjF9XG4gICAqL1xuICBNaW1lVmVyc2lvbjogXCJNSU1FLVZlcnNpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgTmVnb3RpYXRlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzIyOTUgfCBSRkMgMjI5NTogVHJhbnNwYXJlbnQgQ29udGVudCBOZWdvdGlhdGlvbiBpbiBIVFRQfVxuICAgKi9cbiAgTmVnb3RpYXRlOiBcIk5lZ290aWF0ZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBORUxcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL25ldHdvcmstZXJyb3ItbG9nZ2luZy8gfCBOZXR3b3JrIEVycm9yIExvZ2dpbmd9XG4gICAqL1xuICBORUw6IFwiTkVMXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIE9EYXRhLUVudGl0eUlkXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL2NzcHJkMDUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMDEtY3NwcmQwNS1wYXJ0MS1wcm90b2NvbC5odG1sI19Ub2MxNDE3MjczNSB8IE9EYXRhIFZlcnNpb24gNC4wMSBQYXJ0IDE6IFByb3RvY29sfVxuICAgKiBAc2VlIHtAbGluayAjT0FTSVMgfCBPQVNJU31cbiAgICogQHNlZSB7QGxpbmsgI0NoZXRfRW5zaWduIHwgQ2hldF9FbnNpZ259XG4gICAqL1xuICBPZGF0YUVudGl0eWlkOiBcIk9EYXRhLUVudGl0eUlkXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIE9EYXRhLUlzb2xhdGlvblxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0MS1wcm90b2NvbC5odG1sI3NlY19IZWFkZXJJc29sYXRpb25PRGF0YUlzb2xhdGlvbiB8IE9EYXRhIFZlcnNpb24gNC4wMSBQYXJ0IDE6IFByb3RvY29sfVxuICAgKiBAc2VlIHtAbGluayAjT0FTSVMgfCBPQVNJU31cbiAgICogQHNlZSB7QGxpbmsgI0NoZXRfRW5zaWduIHwgQ2hldF9FbnNpZ259XG4gICAqL1xuICBPZGF0YUlzb2xhdGlvbjogXCJPRGF0YS1Jc29sYXRpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT0RhdGEtTWF4VmVyc2lvblxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0MS1wcm90b2NvbC5odG1sI3NlY19IZWFkZXJPRGF0YU1heFZlcnNpb24gfCBPRGF0YSBWZXJzaW9uIDQuMDEgUGFydCAxOiBQcm90b2NvbH1cbiAgICogQHNlZSB7QGxpbmsgI09BU0lTIHwgT0FTSVN9XG4gICAqIEBzZWUge0BsaW5rICNDaGV0X0Vuc2lnbiB8IENoZXRfRW5zaWdufVxuICAgKi9cbiAgT2RhdGFNYXh2ZXJzaW9uOiBcIk9EYXRhLU1heFZlcnNpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT0RhdGEtVmVyc2lvblxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0MS1wcm90b2NvbC5odG1sI3NlY19IZWFkZXJPRGF0YVZlcnNpb24gfCBPRGF0YSBWZXJzaW9uIDQuMDEgUGFydCAxOiBQcm90b2NvbH1cbiAgICogQHNlZSB7QGxpbmsgI09BU0lTIHwgT0FTSVN9XG4gICAqIEBzZWUge0BsaW5rICNDaGV0X0Vuc2lnbiB8IENoZXRfRW5zaWdufVxuICAgKi9cbiAgT2RhdGFWZXJzaW9uOiBcIk9EYXRhLVZlcnNpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT3B0aW9uYWwtV1dXLUF1dGhlbnRpY2F0ZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4MDUzIHwgUkZDIDgwNTMsIFNlY3Rpb24gMzogSFRUUCBBdXRoZW50aWNhdGlvbiBFeHRlbnNpb25zIGZvciBJbnRlcmFjdGl2ZSBDbGllbnRzfVxuICAgKi9cbiAgT3B0aW9uYWxXd3dBdXRoZW50aWNhdGU6IFwiT3B0aW9uYWwtV1dXLUF1dGhlbnRpY2F0ZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBPcmRlcmluZy1UeXBlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzM2NDggfCBSRkMgMzY0ODogV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyAoV2ViREFWKSBPcmRlcmVkIENvbGxlY3Rpb25zIFByb3RvY29sfVxuICAgKi9cbiAgT3JkZXJpbmdUeXBlOiBcIk9yZGVyaW5nLVR5cGVcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT3JpZ2luXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzY0NTQgfCBSRkMgNjQ1NDogVGhlIFdlYiBPcmlnaW4gQ29uY2VwdH1cbiAgICovXG4gIE9yaWdpbjogXCJPcmlnaW5cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT3JpZ2luLUFnZW50LUNsdXN0ZXJcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjb3JpZ2luLWFnZW50LWNsdXN0ZXIgfCBIVE1MfVxuICAgKi9cbiAgT3JpZ2luQWdlbnRDbHVzdGVyOiBcIk9yaWdpbi1BZ2VudC1DbHVzdGVyXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIE9TQ09SRVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4NjEzIHwgUkZDIDg2MTMsIFNlY3Rpb24gMTEuMTogT2JqZWN0IFNlY3VyaXR5IGZvciBDb25zdHJhaW5lZCBSRVNUZnVsIEVudmlyb25tZW50cyAoT1NDT1JFKX1cbiAgICovXG4gIE9TQ09SRTogXCJPU0NPUkVcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT1NMQy1Db3JlLVZlcnNpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4tcHJvamVjdHMub3JnL29zbGMtb3AvY29yZS92My4wL29zbGMtY29yZS5odG1sIHwgT0FTSVMgUHJvamVjdCBTcGVjaWZpY2F0aW9uIDAxfVxuICAgKiBAc2VlIHtAbGluayAjT0FTSVMgfCBPQVNJU31cbiAgICogQHNlZSB7QGxpbmsgI0NoZXRfRW5zaWduIHwgQ2hldF9FbnNpZ259XG4gICAqL1xuICBPc2xjQ29yZVZlcnNpb246IFwiT1NMQy1Db3JlLVZlcnNpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgT3ZlcndyaXRlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkMgNDkxODogSFRUUCBFeHRlbnNpb25zIGZvciBXZWIgRGlzdHJpYnV0ZWQgQXV0aG9yaW5nIGFuZCBWZXJzaW9uaW5nIChXZWJEQVYpfVxuICAgKi9cbiAgT3ZlcndyaXRlOiBcIk92ZXJ3cml0ZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBQaW5nLUZyb21cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbGlua3MuaHRtbCNwaW5nLWZyb20gfCBIVE1MfVxuICAgKi9cbiAgUGluZ0Zyb206IFwiUGluZy1Gcm9tXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFBpbmctVG9cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbGlua3MuaHRtbCNwaW5nLXRvIHwgSFRNTH1cbiAgICovXG4gIFBpbmdUbzogXCJQaW5nLVRvXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFBvc2l0aW9uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzM2NDggfCBSRkMgMzY0ODogV2ViIERpc3RyaWJ1dGVkIEF1dGhvcmluZyBhbmQgVmVyc2lvbmluZyAoV2ViREFWKSBPcmRlcmVkIENvbGxlY3Rpb25zIFByb3RvY29sfVxuICAgKi9cbiAgUG9zaXRpb246IFwiUG9zaXRpb25cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgUHJlZmVyXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzcyNDAgfCBSRkMgNzI0MDogUHJlZmVyIEhlYWRlciBmb3IgSFRUUH1cbiAgICovXG4gIFByZWZlcjogXCJQcmVmZXJcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgUHJlZmVyZW5jZS1BcHBsaWVkXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzcyNDAgfCBSRkMgNzI0MDogUHJlZmVyIEhlYWRlciBmb3IgSFRUUH1cbiAgICovXG4gIFByZWZlcmVuY2VBcHBsaWVkOiBcIlByZWZlcmVuY2UtQXBwbGllZFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBQcmlvcml0eVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MjE4IHwgUkZDOTIxODogRXh0ZW5zaWJsZSBQcmlvcml0aXphdGlvbiBTY2hlbWUgZm9yIEhUVFB9XG4gICAqL1xuICBQcmlvcml0eTogXCJQcmlvcml0eVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBQcm94eS1BdXRoZW50aWNhdGVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTEuNy4xOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFByb3h5QXV0aGVudGljYXRlOiBcIlByb3h5LUF1dGhlbnRpY2F0ZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBQcm94eS1BdXRoZW50aWNhdGlvbi1JbmZvXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDExLjcuMzogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBQcm94eUF1dGhlbnRpY2F0aW9uSW5mbzogXCJQcm94eS1BdXRoZW50aWNhdGlvbi1JbmZvXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFByb3h5LUF1dGhvcml6YXRpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTEuNy4yOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFByb3h5QXV0aG9yaXphdGlvbjogXCJQcm94eS1BdXRob3JpemF0aW9uXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFByb3h5LVN0YXR1c1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MjA5IHwgUkZDOTIwOTogVGhlIFByb3h5LVN0YXR1cyBIVFRQIFJlc3BvbnNlIEhlYWRlciBGaWVsZH1cbiAgICovXG4gIFByb3h5U3RhdHVzOiBcIlByb3h5LVN0YXR1c1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBQdWJsaWMtS2V5LVBpbnNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNzQ2OSB8IFJGQyA3NDY5OiBQdWJsaWMgS2V5IFBpbm5pbmcgRXh0ZW5zaW9uIGZvciBIVFRQfVxuICAgKi9cbiAgUHVibGljS2V5UGluczogXCJQdWJsaWMtS2V5LVBpbnNcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgUHVibGljLUtleS1QaW5zLVJlcG9ydC1Pbmx5XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzc0NjkgfCBSRkMgNzQ2OTogUHVibGljIEtleSBQaW5uaW5nIEV4dGVuc2lvbiBmb3IgSFRUUH1cbiAgICovXG4gIFB1YmxpY0tleVBpbnNSZXBvcnRPbmx5OiBcIlB1YmxpYy1LZXktUGlucy1SZXBvcnQtT25seVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBSYW5nZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxNC4yOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFJhbmdlOiBcIlJhbmdlXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFJlZGlyZWN0LVJlZlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM0NDM3IHwgUkZDIDQ0Mzc6IFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcgKFdlYkRBVikgUmVkaXJlY3QgUmVmZXJlbmNlIFJlc291cmNlc31cbiAgICovXG4gIFJlZGlyZWN0UmVmOiBcIlJlZGlyZWN0LVJlZlwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBSZWZlcmVyXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDEwLjEuMzogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBSZWZlcmVyOiBcIlJlZmVyZXJcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgUmVmcmVzaFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2luZy10aGUtd2ViLmh0bWwjcmVmcmVzaCB8IEhUTUx9XG4gICAqL1xuICBSZWZyZXNoOiBcIlJlZnJlc2hcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgUmVwbGF5LU5vbmNlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzg1NTUgfCBSRkMgODU1NSwgU2VjdGlvbiA2LjUuMTogQXV0b21hdGljIENlcnRpZmljYXRlIE1hbmFnZW1lbnQgRW52aXJvbm1lbnQgKEFDTUUpfVxuICAgKi9cbiAgUmVwbGF5Tm9uY2U6IFwiUmVwbGF5LU5vbmNlXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFJlcHItRGlnZXN0XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL2RyYWZ0LWlldGYtaHR0cGJpcy1kaWdlc3QtaGVhZGVycy0xMyB8IFJGQy1pZXRmLWh0dHBiaXMtZGlnZXN0LWhlYWRlcnMtMTMsIFNlY3Rpb24gMzogRGlnZXN0IEZpZWxkc31cbiAgICovXG4gIFJlcHJEaWdlc3Q6IFwiUmVwci1EaWdlc3RcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgUmV0cnktQWZ0ZXJcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTAuMi4zOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFJldHJ5QWZ0ZXI6IFwiUmV0cnktQWZ0ZXJcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgU2NoZWR1bGUtUmVwbHlcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNjYzOCB8IFJGQyA2NjM4OiBTY2hlZHVsaW5nIEV4dGVuc2lvbnMgdG8gQ2FsREFWfVxuICAgKi9cbiAgU2NoZWR1bGVSZXBseTogXCJTY2hlZHVsZS1SZXBseVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBTY2hlZHVsZS1UYWdcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNjYzOCB8IFJGQyA2MzM4OiBTY2hlZHVsaW5nIEV4dGVuc2lvbnMgdG8gQ2FsREFWfVxuICAgKi9cbiAgU2NoZWR1bGVUYWc6IFwiU2NoZWR1bGUtVGFnXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFNlYy1QdXJwb3NlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzZWMtcHVycG9zZS1oZWFkZXIgfCBGZXRjaH1cbiAgICovXG4gIFNlY1B1cnBvc2U6IFwiU2VjLVB1cnBvc2VcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgU2VjLVRva2VuLUJpbmRpbmdcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODQ3MyB8IFJGQyA4NDczOiBUb2tlbiBCaW5kaW5nIG92ZXIgSFRUUH1cbiAgICovXG4gIFNlY1Rva2VuQmluZGluZzogXCJTZWMtVG9rZW4tQmluZGluZ1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBTZWMtV2ViU29ja2V0LUFjY2VwdFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM2NDU1IHwgUkZDIDY0NTU6IFRoZSBXZWJTb2NrZXQgUHJvdG9jb2x9XG4gICAqL1xuICBTZWNXZWJzb2NrZXRBY2NlcHQ6IFwiU2VjLVdlYlNvY2tldC1BY2NlcHRcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzY0NTUgfCBSRkMgNjQ1NTogVGhlIFdlYlNvY2tldCBQcm90b2NvbH1cbiAgICovXG4gIFNlY1dlYnNvY2tldEV4dGVuc2lvbnM6IFwiU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFNlYy1XZWJTb2NrZXQtS2V5XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzY0NTUgfCBSRkMgNjQ1NTogVGhlIFdlYlNvY2tldCBQcm90b2NvbH1cbiAgICovXG4gIFNlY1dlYnNvY2tldEtleTogXCJTZWMtV2ViU29ja2V0LUtleVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBTZWMtV2ViU29ja2V0LVByb3RvY29sXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzY0NTUgfCBSRkMgNjQ1NTogVGhlIFdlYlNvY2tldCBQcm90b2NvbH1cbiAgICovXG4gIFNlY1dlYnNvY2tldFByb3RvY29sOiBcIlNlYy1XZWJTb2NrZXQtUHJvdG9jb2xcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgU2VjLVdlYlNvY2tldC1WZXJzaW9uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzY0NTUgfCBSRkMgNjQ1NTogVGhlIFdlYlNvY2tldCBQcm90b2NvbH1cbiAgICovXG4gIFNlY1dlYnNvY2tldFZlcnNpb246IFwiU2VjLVdlYlNvY2tldC1WZXJzaW9uXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiAxMC4yLjQ6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgU2VydmVyOiBcIlNlcnZlclwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBTZXJ2ZXItVGltaW5nXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZXJ2ZXItdGltaW5nLyB8IFNlcnZlciBUaW1pbmd9XG4gICAqL1xuICBTZXJ2ZXJUaW1pbmc6IFwiU2VydmVyLVRpbWluZ1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBTZXQtQ29va2llXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzYyNjUgfCBSRkMgNjI2NTogSFRUUCBTdGF0ZSBNYW5hZ2VtZW50IE1lY2hhbmlzbX1cbiAgICovXG4gIFNldENvb2tpZTogXCJTZXQtQ29va2llXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFNpZ25hdHVyZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9kcmFmdC1pZXRmLWh0dHBiaXMtbWVzc2FnZS1zaWduYXR1cmVzLTE5IHwgUkZDLWlldGYtaHR0cGJpcy1tZXNzYWdlLXNpZ25hdHVyZXMtMTksIFNlY3Rpb24gNC4yOiBIVFRQIE1lc3NhZ2UgU2lnbmF0dXJlc31cbiAgICovXG4gIFNpZ25hdHVyZTogXCJTaWduYXR1cmVcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgU2lnbmF0dXJlLUlucHV0XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL2RyYWZ0LWlldGYtaHR0cGJpcy1tZXNzYWdlLXNpZ25hdHVyZXMtMTkgfCBSRkMtaWV0Zi1odHRwYmlzLW1lc3NhZ2Utc2lnbmF0dXJlcy0xOSwgU2VjdGlvbiA0LjE6IEhUVFAgTWVzc2FnZSBTaWduYXR1cmVzfVxuICAgKi9cbiAgU2lnbmF0dXJlSW5wdXQ6IFwiU2lnbmF0dXJlLUlucHV0XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFNMVUdcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNTAyMyB8IFJGQyA1MDIzOiBUaGUgQXRvbSBQdWJsaXNoaW5nIFByb3RvY29sfVxuICAgKi9cbiAgU0xVRzogXCJTTFVHXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFNvYXBBY3Rpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDAvTk9URS1TT0FQLTIwMDAwNTA4IHwgU2ltcGxlIE9iamVjdCBBY2Nlc3MgUHJvdG9jb2wgKFNPQVApIDEuMX1cbiAgICovXG4gIFNvYXBBY3Rpb246IFwiU29hcEFjdGlvblwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBTdGF0dXMtVVJJXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzI1MTggfCBSRkMgMjUxODogSFRUUCBFeHRlbnNpb25zIGZvciBEaXN0cmlidXRlZCBBdXRob3JpbmcgLS0gV0VCREFWfVxuICAgKi9cbiAgU3RhdHVzVXJpOiBcIlN0YXR1cy1VUklcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM2Nzk3IHwgUkZDIDY3OTc6IEhUVFAgU3RyaWN0IFRyYW5zcG9ydCBTZWN1cml0eSAoSFNUUyl9XG4gICAqL1xuICBTdHJpY3RUcmFuc3BvcnRTZWN1cml0eTogXCJTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFN1bnNldFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4NTk0IHwgUkZDIDg1OTQ6IFRoZSBTdW5zZXQgSFRUUCBIZWFkZXIgRmllbGR9XG4gICAqL1xuICBTdW5zZXQ6IFwiU3Vuc2V0XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFRDTlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMyMjk1IHwgUkZDIDIyOTU6IFRyYW5zcGFyZW50IENvbnRlbnQgTmVnb3RpYXRpb24gaW4gSFRUUH1cbiAgICovXG4gIFRDTjogXCJUQ05cIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgVEVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTAuMS40OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFRFOiBcIlRFXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFRpbWVvdXRcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNDkxOCB8IFJGQyA0OTE4OiBIVFRQIEV4dGVuc2lvbnMgZm9yIFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcgKFdlYkRBVil9XG4gICAqL1xuICBUaW1lb3V0OiBcIlRpbWVvdXRcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgVG9waWNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODAzMCB8IFJGQyA4MDMwLCBTZWN0aW9uIDUuNDogR2VuZXJpYyBFdmVudCBEZWxpdmVyeSBVc2luZyBIVFRQIFB1c2h9XG4gICAqL1xuICBUb3BpYzogXCJUb3BpY1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBUcmFjZXBhcmVudFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvdHJhY2UtY29udGV4dC8jdHJhY2VwYXJlbnQtaGVhZGVyIHwgVHJhY2UgQ29udGV4dH1cbiAgICovXG4gIFRyYWNlcGFyZW50OiBcIlRyYWNlcGFyZW50XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFRyYWNlc3RhdGVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvI3RyYWNlc3RhdGUtaGVhZGVyIHwgVHJhY2UgQ29udGV4dH1cbiAgICovXG4gIFRyYWNlc3RhdGU6IFwiVHJhY2VzdGF0ZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBUcmFpbGVyXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDYuNi4yOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFRyYWlsZXI6IFwiVHJhaWxlclwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBUcmFuc2Zlci1FbmNvZGluZ1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEyIHwgUkZDOTExMiwgU2VjdGlvbiA2LjE6IEhUVFAgU2VtYW50aWNzfVxuICAgKi9cbiAgVHJhbnNmZXJFbmNvZGluZzogXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBUVExcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODAzMCB8IFJGQyA4MDMwLCBTZWN0aW9uIDUuMjogR2VuZXJpYyBFdmVudCBEZWxpdmVyeSBVc2luZyBIVFRQIFB1c2h9XG4gICAqL1xuICBUVEw6IFwiVFRMXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFVwZ3JhZGVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gNy44OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFVwZ3JhZGU6IFwiVXBncmFkZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBVcmdlbmN5XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzgwMzAgfCBSRkMgODAzMCwgU2VjdGlvbiA1LjM6IEdlbmVyaWMgRXZlbnQgRGVsaXZlcnkgVXNpbmcgSFRUUCBQdXNofVxuICAgKi9cbiAgVXJnZW5jeTogXCJVcmdlbmN5XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFVzZXItQWdlbnRcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gMTAuMS41OiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFVzZXJBZ2VudDogXCJVc2VyLUFnZW50XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFZhcmlhbnQtVmFyeVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMyMjk1IHwgUkZDIDIyOTU6IFRyYW5zcGFyZW50IENvbnRlbnQgTmVnb3RpYXRpb24gaW4gSFRUUH1cbiAgICovXG4gIFZhcmlhbnRWYXJ5OiBcIlZhcmlhbnQtVmFyeVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBWYXJ5XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDEyLjUuNTogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBWYXJ5OiBcIlZhcnlcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgVmlhXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDcuNi4zOiBIVFRQIFNlbWFudGljc31cbiAgICovXG4gIFZpYTogXCJWaWFcIixcblxuICAvKipcbiAgICogSFRUUCBIZWFkZXIgV2FudC1Db250ZW50LURpZ2VzdFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9kcmFmdC1pZXRmLWh0dHBiaXMtZGlnZXN0LWhlYWRlcnMtMTMgfCBSRkMtaWV0Zi1odHRwYmlzLWRpZ2VzdC1oZWFkZXJzLTEzLCBTZWN0aW9uIDQ6IERpZ2VzdCBGaWVsZHN9XG4gICAqL1xuICBXYW50Q29udGVudERpZ2VzdDogXCJXYW50LUNvbnRlbnQtRGlnZXN0XCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFdhbnQtUmVwci1EaWdlc3RcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vZHJhZnQtaWV0Zi1odHRwYmlzLWRpZ2VzdC1oZWFkZXJzLTEzIHwgUkZDLWlldGYtaHR0cGJpcy1kaWdlc3QtaGVhZGVycy0xMywgU2VjdGlvbiA0OiBEaWdlc3QgRmllbGRzfVxuICAgKi9cbiAgV2FudFJlcHJEaWdlc3Q6IFwiV2FudC1SZXByLURpZ2VzdFwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBXV1ctQXV0aGVudGljYXRlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDExLjYuMTogSFRUUCBTZW1hbnRpY3N9XG4gICAqL1xuICBXd3dBdXRoZW50aWNhdGU6IFwiV1dXLUF1dGhlbnRpY2F0ZVwiLFxuXG4gIC8qKlxuICAgKiBIVFRQIEhlYWRlciBYLUNvbnRlbnQtVHlwZS1PcHRpb25zXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN4LWNvbnRlbnQtdHlwZS1vcHRpb25zLWhlYWRlciB8IEZldGNofVxuICAgKi9cbiAgWENvbnRlbnRUeXBlT3B0aW9uczogXCJYLUNvbnRlbnQtVHlwZS1PcHRpb25zXCIsXG5cbiAgLyoqXG4gICAqIEhUVFAgSGVhZGVyIFgtRnJhbWUtT3B0aW9uc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2luZy10aGUtd2ViLmh0bWwjeC1mcmFtZS1vcHRpb25zIHwgSFRNTH1cbiAgICovXG4gIFhGcmFtZU9wdGlvbnM6IFwiWC1GcmFtZS1PcHRpb25zXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEEgSFRUUCBIZWFkZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsICoqVU5TVEFCTEUqKjogTmV3IEFQSSwgeWV0IHRvIGJlIHZldHRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgSGVhZGVyID0gdHlwZW9mIEhFQURFUltrZXlvZiB0eXBlb2YgSEVBREVSXTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBQ3JDLGlMQUFpTDtBQUVqTDs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU0sU0FBUztFQUNwQjs7OztHQUlDLEdBQ0QsS0FBSztFQUVMOzs7O0dBSUMsR0FDRCxRQUFRO0VBRVI7Ozs7R0FJQyxHQUNELGlCQUFpQjtFQUVqQjs7OztHQUlDLEdBQ0QsVUFBVTtFQUVWOzs7O0dBSUMsR0FDRCxnQkFBZ0I7RUFFaEI7Ozs7R0FJQyxHQUNELGdCQUFnQjtFQUVoQjs7OztHQUlDLEdBQ0QsZ0JBQWdCO0VBRWhCOzs7O0dBSUMsR0FDRCxnQkFBZ0I7RUFF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
+// denoCacheMetadata=3671378470241720507,4838857949902680540 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0d09955d261f90a3e9026087e0ef08c617c90c39a9d0f19465e0ef5d9f597d15.js b/vendor/gen/https/jsr.io/0d09955d261f90a3e9026087e0ef08c617c90c39a9d0f19465e0ef5d9f597d15.js
new file mode 100644
index 0000000..f50fee1
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0d09955d261f90a3e9026087e0ef08c617c90c39a9d0f19465e0ef5d9f597d15.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Returns `true` if the prefix array appears at the start of the source array,
+ * `false` otherwise.
+ *
+ * The complexity of this function is `O(prefix.length)`.
+ *
+ * @param source Source array to check.
+ * @param prefix Prefix array to check for.
+ * @returns `true` if the prefix array appears at the start of the source array,
+ * `false` otherwise.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { startsWith } from "@std/bytes/starts-with";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const prefix = new Uint8Array([0, 1, 2]);
+ *
+ * assertEquals(startsWith(source, prefix), true);
+ * ```
+ */ export function startsWith(source, prefix) {
+ if (prefix.length > source.length) {
+ return false;
+ }
+ for(let i = 0; i < prefix.length; i++){
+ if (source[i] !== prefix[i]) return false;
+ }
+ return true;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvc3RhcnRzX3dpdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJlZml4IGFycmF5IGFwcGVhcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzb3VyY2UgYXJyYXksXG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBUaGUgY29tcGxleGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGBPKHByZWZpeC5sZW5ndGgpYC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFNvdXJjZSBhcnJheSB0byBjaGVjay5cbiAqIEBwYXJhbSBwcmVmaXggUHJlZml4IGFycmF5IHRvIGNoZWNrIGZvci5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJlZml4IGFycmF5IGFwcGVhcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzb3VyY2UgYXJyYXksXG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHN0YXJ0c1dpdGggfSBmcm9tIFwiQHN0ZC9ieXRlcy9zdGFydHMtd2l0aFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IHByZWZpeCA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyXSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHN0YXJ0c1dpdGgoc291cmNlLCBwcmVmaXgpLCB0cnVlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aChzb3VyY2U6IFVpbnQ4QXJyYXksIHByZWZpeDogVWludDhBcnJheSk6IGJvb2xlYW4ge1xuICBpZiAocHJlZml4Lmxlbmd0aCA+IHNvdXJjZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHByZWZpeC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VbaV0gIT09IHByZWZpeFtpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCQyxHQUNELE9BQU8sU0FBUyxXQUFXLE1BQWtCLEVBQUUsTUFBa0I7RUFDL0QsSUFBSSxPQUFPLE1BQU0sR0FBRyxPQUFPLE1BQU0sRUFBRTtJQUNqQyxPQUFPO0VBQ1Q7RUFFQSxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksT0FBTyxNQUFNLEVBQUUsSUFBSztJQUN0QyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPO0VBQ3RDO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=1253292498248986327,16669658808768210622 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0fa0ca839dbb298b989195e7b6298a1f91f3a831335f6e1c56ac264ab3065575.js b/vendor/gen/https/jsr.io/0fa0ca839dbb298b989195e7b6298a1f91f3a831335f6e1c56ac264ab3065575.js
new file mode 100644
index 0000000..b5f9dcb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0fa0ca839dbb298b989195e7b6298a1f91f3a831335f6e1c56ac264ab3065575.js
@@ -0,0 +1,109 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_DOT } from "../_common/constants.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return a `ParsedPath` object of the `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/path/posix/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = parse("/home/user/file.txt");
+ * assertEquals(path, {
+ * root: "/",
+ * dir: "/home/user",
+ * base: "file.txt",
+ * ext: ".txt",
+ * name: "file"
+ * });
+ * ```
+ *
+ * @param path The path to parse.
+ * @returns The parsed path object.
+ */ export function parse(path) {
+ assertPath(path);
+ const ret = {
+ root: "",
+ dir: "",
+ base: "",
+ ext: "",
+ name: ""
+ };
+ if (path.length === 0) return ret;
+ const isAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ let start;
+ if (isAbsolute) {
+ ret.root = "/";
+ start = 1;
+ } else {
+ start = 0;
+ }
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ let i = path.length - 1;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Get non-dir info
+ for(; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (isPosixPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ if (end !== -1) {
+ if (startPart === 0 && isAbsolute) {
+ ret.base = ret.name = path.slice(1, end);
+ } else {
+ ret.base = ret.name = path.slice(startPart, end);
+ }
+ }
+ // Fallback to '/' in case there is no basename
+ ret.base = ret.base || "/";
+ } else {
+ if (startPart === 0 && isAbsolute) {
+ ret.name = path.slice(1, startDot);
+ ret.base = path.slice(1, end);
+ } else {
+ ret.name = path.slice(startPart, startDot);
+ ret.base = path.slice(startPart, end);
+ }
+ ret.ext = path.slice(startDot, end);
+ }
+ if (startPart > 0) {
+ ret.dir = stripTrailingSeparators(path.slice(0, startPart - 1), isPosixPathSeparator);
+ } else if (isAbsolute) ret.dir = "/";
+ return ret;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9wYXJzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBDSEFSX0RPVCB9IGZyb20gXCIuLi9fY29tbW9uL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRQYXRoIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyB9IGZyb20gXCIuLi9fY29tbW9uL3N0cmlwX3RyYWlsaW5nX3NlcGFyYXRvcnMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQb3NpeFBhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG5leHBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gYSBgUGFyc2VkUGF0aGAgb2JqZWN0IG9mIHRoZSBgcGF0aGAuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvcGFyc2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSBwYXJzZShcIi9ob21lL3VzZXIvZmlsZS50eHRcIik7XG4gKiBhc3NlcnRFcXVhbHMocGF0aCwge1xuICogICByb290OiBcIi9cIixcbiAqICAgZGlyOiBcIi9ob21lL3VzZXJcIixcbiAqICAgYmFzZTogXCJmaWxlLnR4dFwiLFxuICogICBleHQ6IFwiLnR4dFwiLFxuICogICBuYW1lOiBcImZpbGVcIlxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGF0aCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShwYXRoOiBzdHJpbmcpOiBQYXJzZWRQYXRoIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBjb25zdCByZXQ6IFBhcnNlZFBhdGggPSB7IHJvb3Q6IFwiXCIsIGRpcjogXCJcIiwgYmFzZTogXCJcIiwgZXh0OiBcIlwiLCBuYW1lOiBcIlwiIH07XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcbiAgY29uc3QgaXNBYnNvbHV0ZSA9IGlzUG9zaXhQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgwKSk7XG4gIGxldCBzdGFydDogbnVtYmVyO1xuICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgIHJldC5yb290ID0gXCIvXCI7XG4gICAgc3RhcnQgPSAxO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBpID0gcGF0aC5sZW5ndGggLSAxO1xuXG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcblxuICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gIGZvciAoOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byAnLycgaW4gY2FzZSB0aGVyZSBpcyBubyBiYXNlbmFtZVxuICAgIHJldC5iYXNlID0gcmV0LmJhc2UgfHwgXCIvXCI7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSB7XG4gICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKDEsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgfVxuICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICB9XG5cbiAgaWYgKHN0YXJ0UGFydCA+IDApIHtcbiAgICByZXQuZGlyID0gc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMoXG4gICAgICBwYXRoLnNsaWNlKDAsIHN0YXJ0UGFydCAtIDEpLFxuICAgICAgaXNQb3NpeFBhdGhTZXBhcmF0b3IsXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gXCIvXCI7XG5cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsUUFBUSxRQUFRLDBCQUEwQjtBQUVuRCxTQUFTLHVCQUF1QixRQUFRLDBDQUEwQztBQUNsRixTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxvQkFBb0IsUUFBUSxhQUFhO0FBSWxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxNQUFNLElBQVk7RUFDaEMsV0FBVztFQUVYLE1BQU0sTUFBa0I7SUFBRSxNQUFNO0lBQUksS0FBSztJQUFJLE1BQU07SUFBSSxLQUFLO0lBQUksTUFBTTtFQUFHO0VBQ3pFLElBQUksS0FBSyxNQUFNLEtBQUssR0FBRyxPQUFPO0VBQzlCLE1BQU0sYUFBYSxxQkFBcUIsS0FBSyxVQUFVLENBQUM7RUFDeEQsSUFBSTtFQUNKLElBQUksWUFBWTtJQUNkLElBQUksSUFBSSxHQUFHO0lBQ1gsUUFBUTtFQUNWLE9BQU87SUFDTCxRQUFRO0VBQ1Y7RUFDQSxJQUFJLFdBQVcsQ0FBQztFQUNoQixJQUFJLFlBQVk7RUFDaEIsSUFBSSxNQUFNLENBQUM7RUFDWCxJQUFJLGVBQWU7RUFDbkIsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0VBRXRCLHlFQUF5RTtFQUN6RSxtQ0FBbUM7RUFDbkMsSUFBSSxjQUFjO0VBRWxCLG1CQUFtQjtFQUNuQixNQUFPLEtBQUssT0FBTyxFQUFFLEVBQUc7SUFDdEIsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzdCLElBQUkscUJBQXFCLE9BQU87TUFDOUIsb0VBQW9FO01BQ3BFLGdEQUFnRDtNQUNoRCxJQUFJLENBQUMsY0FBYztRQUNqQixZQUFZLElBQUk7UUFDaEI7TUFDRjtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO01BQ2QsbUVBQW1FO01BQ25FLFlBQVk7TUFDWixlQUFlO01BQ2YsTUFBTSxJQUFJO0lBQ1o7SUFDQSxJQUFJLFNBQVMsVUFBVTtNQUNyQixrRUFBa0U7TUFDbEUsSUFBSSxhQUFhLENBQUMsR0FBRyxXQUFXO1dBQzNCLElBQUksZ0JBQWdCLEdBQUcsY0FBYztJQUM1QyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUc7TUFDMUIsdUVBQXVFO01BQ3ZFLHFEQUFxRDtNQUNyRCxjQUFjLENBQUM7SUFDakI7RUFDRjtFQUVBLElBQ0UsYUFBYSxDQUFDLEtBQ2QsUUFBUSxDQUFDLEtBQ1Qsd0RBQXdEO0VBQ3hELGdCQUFnQixLQUNoQiwwREFBMEQ7RUFDekQsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0lBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztNQUNkLElBQUksY0FBYyxLQUFLLFlBQVk7UUFDakMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRztNQUN0QyxPQUFPO1FBQ0wsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsV0FBVztNQUM5QztJQUNGO0lBQ0EsK0NBQStDO0lBQy9DLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJO0VBQ3pCLE9BQU87SUFDTCxJQUFJLGNBQWMsS0FBSyxZQUFZO01BQ2pDLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUc7TUFDekIsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRztJQUMzQixPQUFPO01BQ0wsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsV0FBVztNQUNqQyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxXQUFXO0lBQ25DO0lBQ0EsSUFBSSxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsVUFBVTtFQUNqQztFQUVBLElBQUksWUFBWSxHQUFHO0lBQ2pCLElBQUksR0FBRyxHQUFHLHdCQUNSLEtBQUssS0FBSyxDQUFDLEdBQUcsWUFBWSxJQUMxQjtFQUVKLE9BQU8sSUFBSSxZQUFZLElBQUksR0FBRyxHQUFHO0VBRWpDLE9BQU87QUFDVCJ9
+// denoCacheMetadata=11989369226527532725,10013800609034690049 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0fc017f09bf1a62205dd12c68444f7489a60d91780e13e119bf99a190da44eb3.js b/vendor/gen/https/jsr.io/0fc017f09bf1a62205dd12c68444f7489a60d91780e13e119bf99a190da44eb3.js
new file mode 100644
index 0000000..3d34783
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0fc017f09bf1a62205dd12c68444f7489a60d91780e13e119bf99a190da44eb3.js
@@ -0,0 +1,43 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { indexOfNeedle } from "./index_of_needle.ts";
+/**
+ * Determines whether the source array contains the needle array.
+ *
+ * The complexity of this function is `O(source.length * needle.length)`.
+ *
+ * @param source Source array to check.
+ * @param needle Needle array to check for.
+ * @param start Start index in the source array to begin the search. Defaults to
+ * 0.
+ * @returns `true` if the source array contains the needle array, `false`
+ * otherwise.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { includesNeedle } from "@std/bytes/includes-needle";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const needle = new Uint8Array([1, 2]);
+ *
+ * assertEquals(includesNeedle(source, needle), true);
+ * ```
+ *
+ * @example Start index
+ * ```ts
+ * import { includesNeedle } from "@std/bytes/includes-needle";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const needle = new Uint8Array([1, 2]);
+ *
+ * assertEquals(includesNeedle(source, needle, 3), true);
+ * assertEquals(includesNeedle(source, needle, 6), false);
+ * ```
+ * The search will start at the specified index in the source array.
+ */ export function includesNeedle(source, needle, start = 0) {
+ return indexOfNeedle(source, needle, start) !== -1;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvaW5jbHVkZXNfbmVlZGxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGluZGV4T2ZOZWVkbGUgfSBmcm9tIFwiLi9pbmRleF9vZl9uZWVkbGUudHNcIjtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNvdXJjZSBhcnJheSBjb250YWlucyB0aGUgbmVlZGxlIGFycmF5LlxuICpcbiAqIFRoZSBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgYE8oc291cmNlLmxlbmd0aCAqIG5lZWRsZS5sZW5ndGgpYC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFNvdXJjZSBhcnJheSB0byBjaGVjay5cbiAqIEBwYXJhbSBuZWVkbGUgTmVlZGxlIGFycmF5IHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSBzdGFydCBTdGFydCBpbmRleCBpbiB0aGUgc291cmNlIGFycmF5IHRvIGJlZ2luIHRoZSBzZWFyY2guIERlZmF1bHRzIHRvXG4gKiAwLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzb3VyY2UgYXJyYXkgY29udGFpbnMgdGhlIG5lZWRsZSBhcnJheSwgYGZhbHNlYFxuICogb3RoZXJ3aXNlLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW5jbHVkZXNOZWVkbGUgfSBmcm9tIFwiQHN0ZC9ieXRlcy9pbmNsdWRlcy1uZWVkbGVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAxLCAyLCAxLCAyLCAzXSk7XG4gKiBjb25zdCBuZWVkbGUgPSBuZXcgVWludDhBcnJheShbMSwgMl0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhpbmNsdWRlc05lZWRsZShzb3VyY2UsIG5lZWRsZSksIHRydWUpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU3RhcnQgaW5kZXhcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbmNsdWRlc05lZWRsZSB9IGZyb20gXCJAc3RkL2J5dGVzL2luY2x1ZGVzLW5lZWRsZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IG5lZWRsZSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGluY2x1ZGVzTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCAzKSwgdHJ1ZSk7XG4gKiBhc3NlcnRFcXVhbHMoaW5jbHVkZXNOZWVkbGUoc291cmNlLCBuZWVkbGUsIDYpLCBmYWxzZSk7XG4gKiBgYGBcbiAqIFRoZSBzZWFyY2ggd2lsbCBzdGFydCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGluIHRoZSBzb3VyY2UgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlc05lZWRsZShcbiAgc291cmNlOiBVaW50OEFycmF5LFxuICBuZWVkbGU6IFVpbnQ4QXJyYXksXG4gIHN0YXJ0ID0gMCxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSwgc3RhcnQpICE9PSAtMTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsYUFBYSxRQUFRLHVCQUF1QjtBQUVyRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQ0MsR0FDRCxPQUFPLFNBQVMsZUFDZCxNQUFrQixFQUNsQixNQUFrQixFQUNsQixRQUFRLENBQUM7RUFFVCxPQUFPLGNBQWMsUUFBUSxRQUFRLFdBQVcsQ0FBQztBQUNuRCJ9
+// denoCacheMetadata=14077613187559187765,14514656645531185404 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/0fd081c84bc9d4e5df142cdf1f33522ed70a5b80565ebe3bb6e43e367ab6931a.js b/vendor/gen/https/jsr.io/0fd081c84bc9d4e5df142cdf1f33522ed70a5b80565ebe3bb6e43e367ab6931a.js
new file mode 100644
index 0000000..1e41145
--- /dev/null
+++ b/vendor/gen/https/jsr.io/0fd081c84bc9d4e5df142cdf1f33522ed70a5b80565ebe3bb6e43e367ab6931a.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { _format, assertArg } from "../_common/format.ts";
+/**
+ * Generate a path from `ParsedPath` object.
+ *
+ * @example Usage
+ * ```ts
+ * import { format } from "@std/path/posix/format";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = format({
+ * root: "/",
+ * dir: "/path/dir",
+ * base: "file.txt",
+ * ext: ".txt",
+ * name: "file"
+ * });
+ * assertEquals(path, "/path/dir/file.txt");
+ * ```
+ *
+ * @param pathObject The path object to format.
+ * @returns The formatted path.
+ */ export function format(pathObject) {
+ assertArg(pathObject);
+ return _format("/", pathObject);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgX2Zvcm1hdCwgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vZm9ybWF0LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHBhdGggZnJvbSBgUGFyc2VkUGF0aGAgb2JqZWN0LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9mb3JtYXRcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSBmb3JtYXQoe1xuICogICByb290OiBcIi9cIixcbiAqICAgZGlyOiBcIi9wYXRoL2RpclwiLFxuICogICBiYXNlOiBcImZpbGUudHh0XCIsXG4gKiAgIGV4dDogXCIudHh0XCIsXG4gKiAgIG5hbWU6IFwiZmlsZVwiXG4gKiB9KTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi9wYXRoL2Rpci9maWxlLnR4dFwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoT2JqZWN0IFRoZSBwYXRoIG9iamVjdCB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdDogUGFydGlhbDxQYXJzZWRQYXRoPik6IHN0cmluZyB7XG4gIGFzc2VydEFyZyhwYXRoT2JqZWN0KTtcbiAgcmV0dXJuIF9mb3JtYXQoXCIvXCIsIHBhdGhPYmplY3QpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxPQUFPLEVBQUUsU0FBUyxRQUFRLHVCQUF1QjtBQUcxRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FDRCxPQUFPLFNBQVMsT0FBTyxVQUErQjtFQUNwRCxVQUFVO0VBQ1YsT0FBTyxRQUFRLEtBQUs7QUFDdEIifQ==
+// denoCacheMetadata=12601032765621314918,8234236310090286298 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1032cb573d730ec0e72a1a1cf5caae0f5c1a05814e04acfb8822bdeaae948ce2.js b/vendor/gen/https/jsr.io/1032cb573d730ec0e72a1a1cf5caae0f5c1a05814e04acfb8822bdeaae948ce2.js
new file mode 100644
index 0000000..afa0bf9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1032cb573d730ec0e72a1a1cf5caae0f5c1a05814e04acfb8822bdeaae948ce2.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { normalize } from "./normalize.ts";
+import { SEPARATOR_PATTERN } from "./constants.ts";
+/**
+ * Like normalize(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalizeGlob } from "@std/path/windows/normalize-glob";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const normalized = normalizeGlob("**\\foo\\..\\bar", { globstar: true });
+ * assertEquals(normalized, "**\\bar");
+ * ```
+ *
+ * @param glob The glob pattern to normalize.
+ * @param options The options for glob pattern.
+ * @returns The normalized glob pattern.
+ */ export function normalizeGlob(glob, options = {}) {
+ const { globstar = false } = options;
+ if (glob.match(/\0/g)) {
+ throw new Error(`Glob contains invalid characters: "${glob}"`);
+ }
+ if (!globstar) {
+ return normalize(glob);
+ }
+ const s = SEPARATOR_PATTERN.source;
+ const badParentPattern = new RegExp(`(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, "g");
+ return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, "..");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL25vcm1hbGl6ZV9nbG9iLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gXCIuL25vcm1hbGl6ZS50c1wiO1xuaW1wb3J0IHsgU0VQQVJBVE9SX1BBVFRFUk4gfSBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBHbG9iT3B0aW9ucyB9O1xuXG4vKipcbiAqIExpa2Ugbm9ybWFsaXplKCksIGJ1dCBkb2Vzbid0IGNvbGxhcHNlIFwiKipcXC8uLlwiIHdoZW4gYGdsb2JzdGFyYCBpcyB0cnVlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbm9ybWFsaXplR2xvYiB9IGZyb20gXCJAc3RkL3BhdGgvd2luZG93cy9ub3JtYWxpemUtZ2xvYlwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUdsb2IoXCIqKlxcXFxmb29cXFxcLi5cXFxcYmFyXCIsIHsgZ2xvYnN0YXI6IHRydWUgfSk7XG4gKiBhc3NlcnRFcXVhbHMobm9ybWFsaXplZCwgXCIqKlxcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYiBUaGUgZ2xvYiBwYXR0ZXJuIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBnbG9iIHBhdHRlcm4uXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBnbG9iIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVHbG9iKFxuICBnbG9iOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBpY2s8R2xvYk9wdGlvbnMsIFwiZ2xvYnN0YXJcIj4gPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHsgZ2xvYnN0YXIgPSBmYWxzZSB9OiBHbG9iT3B0aW9ucyA9IG9wdGlvbnM7XG4gIGlmIChnbG9iLm1hdGNoKC9cXDAvZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdsb2IgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiBcIiR7Z2xvYn1cImApO1xuICB9XG4gIGlmICghZ2xvYnN0YXIpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKGdsb2IpO1xuICB9XG4gIGNvbnN0IHMgPSBTRVBBUkFUT1JfUEFUVEVSTi5zb3VyY2U7XG4gIGNvbnN0IGJhZFBhcmVudFBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgIGAoPzw9KCR7c318XilcXFxcKlxcXFwqJHtzfSlcXFxcLlxcXFwuKD89JHtzfXwkKWAsXG4gICAgXCJnXCIsXG4gICk7XG4gIHJldHVybiBub3JtYWxpemUoZ2xvYi5yZXBsYWNlKGJhZFBhcmVudFBhdHRlcm4sIFwiXFwwXCIpKS5yZXBsYWNlKC9cXDAvZywgXCIuLlwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBR3JDLFNBQVMsU0FBUyxRQUFRLGlCQUFpQjtBQUMzQyxTQUFTLGlCQUFpQixRQUFRLGlCQUFpQjtBQUluRDs7Ozs7Ozs7Ozs7Ozs7O0NBZUMsR0FDRCxPQUFPLFNBQVMsY0FDZCxJQUFZLEVBQ1osVUFBeUMsQ0FBQyxDQUFDO0VBRTNDLE1BQU0sRUFBRSxXQUFXLEtBQUssRUFBRSxHQUFnQjtFQUMxQyxJQUFJLEtBQUssS0FBSyxDQUFDLFFBQVE7SUFDckIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUMvRDtFQUNBLElBQUksQ0FBQyxVQUFVO0lBQ2IsT0FBTyxVQUFVO0VBQ25CO0VBQ0EsTUFBTSxJQUFJLGtCQUFrQixNQUFNO0VBQ2xDLE1BQU0sbUJBQW1CLElBQUksT0FDM0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFDekM7RUFFRixPQUFPLFVBQVUsS0FBSyxPQUFPLENBQUMsa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE9BQU87QUFDeEUifQ==
+// denoCacheMetadata=3368400298130917731,7152979695103990922 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1343090cfa12d7a373df3737a8aea05573e14a2cc46e3c02f8cc4f571ef21428.js b/vendor/gen/https/jsr.io/1343090cfa12d7a373df3737a8aea05573e14a2cc46e3c02f8cc4f571ef21428.js
new file mode 100644
index 0000000..9f58d43
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1343090cfa12d7a373df3737a8aea05573e14a2cc46e3c02f8cc4f571ef21428.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { normalizeGlob as posixNormalizeGlob } from "./posix/normalize_glob.ts";
+import { normalizeGlob as windowsNormalizeGlob } from "./windows/normalize_glob.ts";
+/**
+ * Normalizes a glob string.
+ *
+ * Behaves like
+ * {@linkcode https://jsr.io/@std/path/doc/~/normalize | normalize()}, but
+ * doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalizeGlob } from "@std/path/normalize-glob";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(normalizeGlob("foo\\bar\\..\\baz"), "foo\\baz");
+ * assertEquals(normalizeGlob("foo\\**\\..\\bar\\..\\baz", { globstar: true }), "foo\\**\\..\\baz");
+ * } else {
+ * assertEquals(normalizeGlob("foo/bar/../baz"), "foo/baz");
+ * assertEquals(normalizeGlob("foo/**\/../bar/../baz", { globstar: true }), "foo/**\/../baz");
+ * }
+ * ```
+ *
+ * @param glob Glob string to normalize.
+ * @param options Glob options.
+ * @returns The normalized glob string.
+ */ export function normalizeGlob(glob, options = {}) {
+ return isWindows ? windowsNormalizeGlob(glob, options) : posixNormalizeGlob(glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9ub3JtYWxpemVfZ2xvYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH0gZnJvbSBcIi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplR2xvYiBhcyBwb3NpeE5vcm1hbGl6ZUdsb2IgfSBmcm9tIFwiLi9wb3NpeC9ub3JtYWxpemVfZ2xvYi50c1wiO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplR2xvYiBhcyB3aW5kb3dzTm9ybWFsaXplR2xvYixcbn0gZnJvbSBcIi4vd2luZG93cy9ub3JtYWxpemVfZ2xvYi50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGdsb2Igc3RyaW5nLlxuICpcbiAqIEJlaGF2ZXMgbGlrZVxuICoge0BsaW5rY29kZSBodHRwczovL2pzci5pby9Ac3RkL3BhdGgvZG9jL34vbm9ybWFsaXplIHwgbm9ybWFsaXplKCl9LCBidXRcbiAqIGRvZXNuJ3QgY29sbGFwc2UgXCIqKlxcLy4uXCIgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBub3JtYWxpemVHbG9iIH0gZnJvbSBcIkBzdGQvcGF0aC9ub3JtYWxpemUtZ2xvYlwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemVHbG9iKFwiZm9vXFxcXGJhclxcXFwuLlxcXFxiYXpcIiksIFwiZm9vXFxcXGJhelwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKG5vcm1hbGl6ZUdsb2IoXCJmb29cXFxcKipcXFxcLi5cXFxcYmFyXFxcXC4uXFxcXGJhelwiLCB7IGdsb2JzdGFyOiB0cnVlIH0pLCBcImZvb1xcXFwqKlxcXFwuLlxcXFxiYXpcIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMobm9ybWFsaXplR2xvYihcImZvby9iYXIvLi4vYmF6XCIpLCBcImZvby9iYXpcIik7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemVHbG9iKFwiZm9vLyoqXFwvLi4vYmFyLy4uL2JhelwiLCB7IGdsb2JzdGFyOiB0cnVlIH0pLCBcImZvby8qKlxcLy4uL2JhelwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9iIEdsb2Igc3RyaW5nIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIEdsb2Igb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGdsb2Igc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplR2xvYihcbiAgZ2xvYjogc3RyaW5nLFxuICBvcHRpb25zOiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c05vcm1hbGl6ZUdsb2IoZ2xvYiwgb3B0aW9ucylcbiAgICA6IHBvc2l4Tm9ybWFsaXplR2xvYihnbG9iLCBvcHRpb25zKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBR3JDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxpQkFBaUIsa0JBQWtCLFFBQVEsNEJBQTRCO0FBQ2hGLFNBQ0UsaUJBQWlCLG9CQUFvQixRQUNoQyw4QkFBOEI7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXdCQyxHQUNELE9BQU8sU0FBUyxjQUNkLElBQVksRUFDWixVQUF1QixDQUFDLENBQUM7RUFFekIsT0FBTyxZQUNILHFCQUFxQixNQUFNLFdBQzNCLG1CQUFtQixNQUFNO0FBQy9CIn0=
+// denoCacheMetadata=17178300520264829265,9516137527160285885 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1385e88bf982d9ebd71bd1ae75298f5d421441a57bf8383721cd875960901f13.js b/vendor/gen/https/jsr.io/1385e88bf982d9ebd71bd1ae75298f5d421441a57bf8383721cd875960901f13.js
new file mode 100644
index 0000000..1a38d45
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1385e88bf982d9ebd71bd1ae75298f5d421441a57bf8383721cd875960901f13.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function stripSuffix(name, suffix) {
+ if (suffix.length >= name.length) {
+ return name;
+ }
+ const lenDiff = name.length - suffix.length;
+ for(let i = suffix.length - 1; i >= 0; --i){
+ if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) {
+ return name;
+ }
+ }
+ return name.slice(0, -suffix.length);
+}
+export function lastPathSegment(path, isSep, start = 0) {
+ let matchedNonSeparator = false;
+ let end = path.length;
+ for(let i = path.length - 1; i >= start; --i){
+ if (isSep(path.charCodeAt(i))) {
+ if (matchedNonSeparator) {
+ start = i + 1;
+ break;
+ }
+ } else if (!matchedNonSeparator) {
+ matchedNonSeparator = true;
+ end = i + 1;
+ }
+ }
+ return path.slice(start, end);
+}
+export function assertArgs(path, suffix) {
+ assertPath(path);
+ if (path.length === 0) return path;
+ if (typeof suffix !== "string") {
+ throw new TypeError(`Suffix must be a string, received "${JSON.stringify(suffix)}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2Jhc2VuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi9hc3NlcnRfcGF0aC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBTdWZmaXgobmFtZTogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdWZmaXgubGVuZ3RoID49IG5hbWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBjb25zdCBsZW5EaWZmID0gbmFtZS5sZW5ndGggLSBzdWZmaXgubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSBzdWZmaXgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBpZiAobmFtZS5jaGFyQ29kZUF0KGxlbkRpZmYgKyBpKSAhPT0gc3VmZml4LmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3RQYXRoU2VnbWVudChcbiAgcGF0aDogc3RyaW5nLFxuICBpc1NlcDogKGNoYXI6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgc3RhcnQgPSAwLFxuKTogc3RyaW5nIHtcbiAgbGV0IG1hdGNoZWROb25TZXBhcmF0b3IgPSBmYWxzZTtcbiAgbGV0IGVuZCA9IHBhdGgubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgIGlmIChpc1NlcChwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICBpZiAobWF0Y2hlZE5vblNlcGFyYXRvcikge1xuICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFtYXRjaGVkTm9uU2VwYXJhdG9yKSB7XG4gICAgICBtYXRjaGVkTm9uU2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXJncyhwYXRoOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHBhdGg7XG4gIGlmICh0eXBlb2Ygc3VmZml4ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBTdWZmaXggbXVzdCBiZSBhIHN0cmluZywgcmVjZWl2ZWQgXCIke0pTT04uc3RyaW5naWZ5KHN1ZmZpeCl9XCJgLFxuICAgICk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsVUFBVSxRQUFRLG1CQUFtQjtBQUU5QyxPQUFPLFNBQVMsWUFBWSxJQUFZLEVBQUUsTUFBYztFQUN0RCxJQUFJLE9BQU8sTUFBTSxJQUFJLEtBQUssTUFBTSxFQUFFO0lBQ2hDLE9BQU87RUFDVDtFQUVBLE1BQU0sVUFBVSxLQUFLLE1BQU0sR0FBRyxPQUFPLE1BQU07RUFFM0MsSUFBSyxJQUFJLElBQUksT0FBTyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFHO0lBQzNDLElBQUksS0FBSyxVQUFVLENBQUMsVUFBVSxPQUFPLE9BQU8sVUFBVSxDQUFDLElBQUk7TUFDekQsT0FBTztJQUNUO0VBQ0Y7RUFFQSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLE1BQU07QUFDckM7QUFFQSxPQUFPLFNBQVMsZ0JBQ2QsSUFBWSxFQUNaLEtBQWdDLEVBQ2hDLFFBQVEsQ0FBQztFQUVULElBQUksc0JBQXNCO0VBQzFCLElBQUksTUFBTSxLQUFLLE1BQU07RUFFckIsSUFBSyxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsR0FBRyxLQUFLLE9BQU8sRUFBRSxFQUFHO0lBQzdDLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLO01BQzdCLElBQUkscUJBQXFCO1FBQ3ZCLFFBQVEsSUFBSTtRQUNaO01BQ0Y7SUFDRixPQUFPLElBQUksQ0FBQyxxQkFBcUI7TUFDL0Isc0JBQXNCO01BQ3RCLE1BQU0sSUFBSTtJQUNaO0VBQ0Y7RUFFQSxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87QUFDM0I7QUFFQSxPQUFPLFNBQVMsV0FBVyxJQUFZLEVBQUUsTUFBYztFQUNyRCxXQUFXO0VBQ1gsSUFBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLE9BQU87RUFDOUIsSUFBSSxPQUFPLFdBQVcsVUFBVTtJQUM5QixNQUFNLElBQUksVUFDUixDQUFDLG1DQUFtQyxFQUFFLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBRW5FO0FBQ0YifQ==
+// denoCacheMetadata=9984219589405700441,6032829829896232868 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/14c2e7d7cbd0578d0c71adcc5f68504350c3a4245895784bf8741d53c6c61c43.js b/vendor/gen/https/jsr.io/14c2e7d7cbd0578d0c71adcc5f68504350c3a4245895784bf8741d53c6c61c43.js
new file mode 100644
index 0000000..a85407e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/14c2e7d7cbd0578d0c71adcc5f68504350c3a4245895784bf8741d53c6c61c43.js
@@ -0,0 +1,131 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Provides functions for dealing with and matching ETags, including
+ * {@linkcode eTag} to calculate an etag for a given entity,
+ * {@linkcode ifMatch} for validating if an ETag matches against a `If-Match`
+ * header and {@linkcode ifNoneMatch} for validating an Etag against an
+ * `If-None-Match` header.
+ *
+ * See further information on the `ETag` header on
+ * {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag | MDN}.
+ *
+ * @module
+ */ import { encodeBase64 as base64Encode } from "jsr:@std/encoding@^1.0.10/base64";
+const encoder = new TextEncoder();
+const DEFAULT_ALGORITHM = "SHA-256";
+function isFileInfo(value) {
+ return Boolean(value && typeof value === "object" && "mtime" in value && "size" in value);
+}
+async function calcEntity(entity, { algorithm = DEFAULT_ALGORITHM }) {
+ // a short circuit for zero length entities
+ if (entity.length === 0) {
+ return `0-47DEQpj8HBSa+/TImW+5JCeuQeR`;
+ }
+ if (typeof entity === "string") {
+ entity = encoder.encode(entity);
+ }
+ const hash = base64Encode(await crypto.subtle.digest(algorithm, entity)).substring(0, 27);
+ return `${entity.length.toString(16)}-${hash}`;
+}
+async function calcFileInfo(fileInfo, { algorithm = DEFAULT_ALGORITHM }) {
+ if (fileInfo.mtime) {
+ const hash = base64Encode(await crypto.subtle.digest(algorithm, encoder.encode(fileInfo.mtime.toJSON()))).substring(0, 27);
+ return `${fileInfo.size.toString(16)}-${hash}`;
+ }
+}
+export async function eTag(entity, options = {}) {
+ const weak = options.weak ?? isFileInfo(entity);
+ const tag = await (isFileInfo(entity) ? calcFileInfo(entity, options) : calcEntity(entity, options));
+ return tag ? weak ? `W/"${tag}"` : `"${tag}"` : undefined;
+}
+const STAR_REGEXP = /^\s*\*\s*$/;
+const COMMA_REGEXP = /\s*,\s*/;
+/** A helper function that takes the value from the `If-Match` header and a
+ * calculated etag for the target. By using strong comparison, return `true` if
+ * the values match, otherwise `false`.
+ *
+ * See MDN's [`If-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Match)
+ * article for more information on how to use this function.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import {
+ * eTag,
+ * ifMatch,
+ * } from "@std/http/etag";
+ * import { assert } from "@std/assert";
+ *
+ * const body = "hello deno!";
+ *
+ * Deno.serve(async (req) => {
+ * const ifMatchValue = req.headers.get("if-match");
+ * const etag = await eTag(body);
+ * assert(etag);
+ * if (!ifMatchValue || ifMatch(ifMatchValue, etag)) {
+ * return new Response(body, { status: 200, headers: { etag } });
+ * } else {
+ * return new Response(null, { status: 412, statusText: "Precondition Failed"});
+ * }
+ * });
+ * ```
+ *
+ * @param value the If-Match header value.
+ * @param etag the ETag to check against.
+ * @returns whether or not the parameters match.
+ */ export function ifMatch(value, etag) {
+ // Weak tags cannot be matched and return false.
+ if (!value || !etag || etag.startsWith("W/")) {
+ return false;
+ }
+ if (STAR_REGEXP.test(value)) {
+ return true;
+ }
+ const tags = value.split(COMMA_REGEXP);
+ return tags.includes(etag);
+}
+/** A helper function that takes the value from the `If-None-Match` header and
+ * a calculated etag for the target entity and returns `false` if the etag for
+ * the entity matches the supplied value, otherwise `true`.
+ *
+ * See MDN's [`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)
+ * article for more information on how to use this function.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import {
+ * eTag,
+ * ifNoneMatch,
+ * } from "@std/http/etag";
+ * import { assert } from "@std/assert";
+ *
+ * const body = "hello deno!";
+ *
+ * Deno.serve(async (req) => {
+ * const ifNoneMatchValue = req.headers.get("if-none-match");
+ * const etag = await eTag(body);
+ * assert(etag);
+ * if (!ifNoneMatch(ifNoneMatchValue, etag)) {
+ * return new Response(null, { status: 304, headers: { etag } });
+ * } else {
+ * return new Response(body, { status: 200, headers: { etag } });
+ * }
+ * });
+ * ```
+ *
+ * @param value the If-None-Match header value.
+ * @param etag the ETag to check against.
+ * @returns whether or not the parameters do not match.
+ */ export function ifNoneMatch(value, etag) {
+ if (!value || !etag) {
+ return true;
+ }
+ if (STAR_REGEXP.test(value)) {
+ return false;
+ }
+ etag = etag.startsWith("W/") ? etag.slice(2) : etag;
+ const tags = value.split(COMMA_REGEXP).map((tag)=>tag.startsWith("W/") ? tag.slice(2) : tag);
+ return !tags.includes(etag);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHR0cC8xLjAuMTYvZXRhZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIFByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIGFuZCBtYXRjaGluZyBFVGFncywgaW5jbHVkaW5nXG4gKiB7QGxpbmtjb2RlIGVUYWd9IHRvIGNhbGN1bGF0ZSBhbiBldGFnIGZvciBhIGdpdmVuIGVudGl0eSxcbiAqIHtAbGlua2NvZGUgaWZNYXRjaH0gZm9yIHZhbGlkYXRpbmcgaWYgYW4gRVRhZyBtYXRjaGVzIGFnYWluc3QgYSBgSWYtTWF0Y2hgXG4gKiBoZWFkZXIgYW5kIHtAbGlua2NvZGUgaWZOb25lTWF0Y2h9IGZvciB2YWxpZGF0aW5nIGFuIEV0YWcgYWdhaW5zdCBhblxuICogYElmLU5vbmUtTWF0Y2hgIGhlYWRlci5cbiAqXG4gKiBTZWUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgYEVUYWdgIGhlYWRlciBvblxuICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9FVGFnIHwgTUROfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZW5jb2RlQmFzZTY0IGFzIGJhc2U2NEVuY29kZSB9IGZyb20gXCJqc3I6QHN0ZC9lbmNvZGluZ0BeMS4wLjEwL2Jhc2U2NFwiO1xuXG4vKipcbiAqIEp1c3QgdGhlIHBhcnQgb2Yge0BsaW5rY29kZSBEZW5vLkZpbGVJbmZvfSB0aGF0IGlzIHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSBhbiBgRVRhZ2AsXG4gKiBzbyBwYXJ0aWFsIG9yIHVzZXIgZ2VuZXJhdGVkIGZpbGUgaW5mb3JtYXRpb24gY2FuIGJlIHBhc3NlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlSW5mbyB7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZS4gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYG10aW1lYFxuICAgKiBmaWVsZCBmcm9tIGBzdGF0YCBvbiBMaW51eC9NYWMgT1MgYW5kIGBmdExhc3RXcml0ZVRpbWVgIG9uIFdpbmRvd3MuIFRoaXNcbiAgICogbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gKi9cbiAgbXRpbWU6IERhdGUgfCBudWxsO1xuICAvKiogVGhlIHNpemUgb2YgdGhlIGZpbGUsIGluIGJ5dGVzLiAqL1xuICBzaXplOiBudW1iZXI7XG59XG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcblxuY29uc3QgREVGQVVMVF9BTEdPUklUSE06IEFsZ29yaXRobUlkZW50aWZpZXIgPSBcIlNIQS0yNTZcIjtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgZVRhZ30uICovXG5leHBvcnQgaW50ZXJmYWNlIEVUYWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZGlnZXN0IGFsZ29yaXRobSB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBldGFnLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7XCJTSEEtMjU2XCJ9XG4gICAqL1xuICBhbGdvcml0aG0/OiBBbGdvcml0aG1JZGVudGlmaWVyO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBjYWxjdWxhdGluZyB0aGUgYEVUYWdgLCBlaXRoZXIgZm9yY2luZ1xuICAgKiBhIHRhZyB0byBiZSBsYWJlbGxlZCB3ZWFrIG9yIG5vdC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgIHdoZW4gdGhlIGVudGl0eSBpcyBhIGBGaWxlSW5mb2AgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgd2Vhaz86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzRmlsZUluZm8odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBGaWxlSW5mbyB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcIm10aW1lXCIgaW4gdmFsdWUgJiYgXCJzaXplXCIgaW4gdmFsdWUsXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGNFbnRpdHkoXG4gIGVudGl0eTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgeyBhbGdvcml0aG0gPSBERUZBVUxUX0FMR09SSVRITSB9OiBFVGFnT3B0aW9ucyxcbikge1xuICAvLyBhIHNob3J0IGNpcmN1aXQgZm9yIHplcm8gbGVuZ3RoIGVudGl0aWVzXG4gIGlmIChlbnRpdHkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGAwLTQ3REVRcGo4SEJTYSsvVEltVys1SkNldVFlUmA7XG4gIH1cblxuICBpZiAodHlwZW9mIGVudGl0eSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGVudGl0eSA9IGVuY29kZXIuZW5jb2RlKGVudGl0eSk7XG4gIH1cblxuICBjb25zdCBoYXNoID0gYmFzZTY0RW5jb2RlKGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KGFsZ29yaXRobSwgZW50aXR5KSlcbiAgICAuc3Vic3RyaW5nKDAsIDI3KTtcblxuICByZXR1cm4gYCR7ZW50aXR5Lmxlbmd0aC50b1N0cmluZygxNil9LSR7aGFzaH1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxjRmlsZUluZm8oXG4gIGZpbGVJbmZvOiBGaWxlSW5mbyxcbiAgeyBhbGdvcml0aG0gPSBERUZBVUxUX0FMR09SSVRITSB9OiBFVGFnT3B0aW9ucyxcbikge1xuICBpZiAoZmlsZUluZm8ubXRpbWUpIHtcbiAgICBjb25zdCBoYXNoID0gYmFzZTY0RW5jb2RlKFxuICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgIGFsZ29yaXRobSxcbiAgICAgICAgZW5jb2Rlci5lbmNvZGUoZmlsZUluZm8ubXRpbWUudG9KU09OKCkpLFxuICAgICAgKSxcbiAgICApLnN1YnN0cmluZygwLCAyNyk7XG4gICAgcmV0dXJuIGAke2ZpbGVJbmZvLnNpemUudG9TdHJpbmcoMTYpfS0ke2hhc2h9YDtcbiAgfVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBhbiBFVGFnIGZvciBzdHJpbmcgb3IgYFVpbnQ4QXJyYXlgIGVudGl0aWVzLiBUaGlzIHJldHVybnMgYVxuICoge0BsaW5rY29kZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvRVRhZyNldGFnX3ZhbHVlIHwgc3Ryb25nIHRhZ31cbiAqIG9mIHRoZSBmb3JtIGBcIjxhc2NpaSBjaGFycz5cImAsIHdoaWNoIGd1YXJhbnRlZXMgdGhlIGJ5dGUtZm9yLWJ5dGUgZXF1YWxpdHkgb2YgdGhlIHJlc291cmNlLlxuICpcbiAqIFlvdSBjYW4gb3B0aW9uYWxseSBzZXQgdHJ1ZSB0byB0aGUgYHdlYWtgIG9wdGlvbiB0byBnZXQgYSB3ZWFrIHRhZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGVUYWcgfSBmcm9tIFwiQHN0ZC9odHRwL2V0YWdcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGJvZHkgPSBcImhlbGxvIGRlbm8hXCI7XG4gKlxuICogY29uc3QgZXRhZyA9IGF3YWl0IGVUYWcoYm9keSk7XG4gKiBhc3NlcnQoZXRhZyk7XG4gKlxuICogY29uc3QgcmVzID0gbmV3IFJlc3BvbnNlKGJvZHksIHsgaGVhZGVyczogeyBldGFnIH0gfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gZ2V0IHRoZSBFVGFnIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIFZhcmlvdXMgYWRkaXRpb25hbCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgRVRhZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVUYWcoXG4gIGVudGl0eTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgb3B0aW9ucz86IEVUYWdPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuLyoqXG4gKiBDYWxjdWxhdGUgYW4gRVRhZyBmb3IgZmlsZSBpbmZvcm1hdGlvbiBlbnRpdHkuIFRoaXMgcmV0dXJucyBhXG4gKiB7QGxpbmtjb2RlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9FVGFnI3cgfCB3ZWFrIHRhZ31cbiAqIG9mIHRoZSBmb3JtIGBXXFxcIjxhc2NpaSBjaGFycz5cImAsIHdoaWNoIGd1YXJhbnRlZXMgdGhlIGVxdWl2YWxlbmNlIG9mIHRoZSByZXNvdXJjZSxcbiAqIG5vdCB0aGUgYnl0ZS1mb3ItYnl0ZSBlcXVhbGl0eS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGVUYWcgfSBmcm9tIFwiQHN0ZC9odHRwL2V0YWdcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGZpbGVJbmZvID0gYXdhaXQgRGVuby5zdGF0KFwiUkVBRE1FLm1kXCIpO1xuICpcbiAqIGNvbnN0IGV0YWcgPSBhd2FpdCBlVGFnKGZpbGVJbmZvKTtcbiAqIGFzc2VydChldGFnKTtcbiAqXG4gKiB1c2luZyBmaWxlID0gYXdhaXQgRGVuby5vcGVuKFwiUkVBRE1FLm1kXCIpO1xuICpcbiAqIGNvbnN0IHJlcyA9IG5ldyBSZXNwb25zZShmaWxlLnJlYWRhYmxlLCB7IGhlYWRlcnM6IHsgZXRhZyB9IH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IHRvIGdldCB0aGUgRVRhZyBmb3IuXG4gKiBAcGFyYW0gb3B0aW9ucyBWYXJpb3VzIGFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIEVUYWcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlVGFnKFxuICBlbnRpdHk6IEZpbGVJbmZvLFxuICBvcHRpb25zPzogRVRhZ09wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZVRhZyhcbiAgZW50aXR5OiBzdHJpbmcgfCBVaW50OEFycmF5IHwgRmlsZUluZm8sXG4gIG9wdGlvbnM6IEVUYWdPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB3ZWFrID0gb3B0aW9ucy53ZWFrID8/IGlzRmlsZUluZm8oZW50aXR5KTtcbiAgY29uc3QgdGFnID1cbiAgICBhd2FpdCAoaXNGaWxlSW5mbyhlbnRpdHkpXG4gICAgICA/IGNhbGNGaWxlSW5mbyhlbnRpdHksIG9wdGlvbnMpXG4gICAgICA6IGNhbGNFbnRpdHkoZW50aXR5LCBvcHRpb25zKSk7XG5cbiAgcmV0dXJuIHRhZyA/IHdlYWsgPyBgVy9cIiR7dGFnfVwiYCA6IGBcIiR7dGFnfVwiYCA6IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgU1RBUl9SRUdFWFAgPSAvXlxccypcXCpcXHMqJC87XG5jb25zdCBDT01NQV9SRUdFWFAgPSAvXFxzKixcXHMqLztcblxuLyoqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIHZhbHVlIGZyb20gdGhlIGBJZi1NYXRjaGAgaGVhZGVyIGFuZCBhXG4gKiBjYWxjdWxhdGVkIGV0YWcgZm9yIHRoZSB0YXJnZXQuIEJ5IHVzaW5nIHN0cm9uZyBjb21wYXJpc29uLCByZXR1cm4gYHRydWVgIGlmXG4gKiB0aGUgdmFsdWVzIG1hdGNoLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqXG4gKiBTZWUgTUROJ3MgW2BJZi1NYXRjaGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9JZi1NYXRjaClcbiAqIGFydGljbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7XG4gKiAgIGVUYWcsXG4gKiAgIGlmTWF0Y2gsXG4gKiB9IGZyb20gXCJAc3RkL2h0dHAvZXRhZ1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYm9keSA9IFwiaGVsbG8gZGVubyFcIjtcbiAqXG4gKiBEZW5vLnNlcnZlKGFzeW5jIChyZXEpID0+IHtcbiAqICAgY29uc3QgaWZNYXRjaFZhbHVlID0gcmVxLmhlYWRlcnMuZ2V0KFwiaWYtbWF0Y2hcIik7XG4gKiAgIGNvbnN0IGV0YWcgPSBhd2FpdCBlVGFnKGJvZHkpO1xuICogICBhc3NlcnQoZXRhZyk7XG4gKiAgIGlmICghaWZNYXRjaFZhbHVlIHx8IGlmTWF0Y2goaWZNYXRjaFZhbHVlLCBldGFnKSkge1xuICogICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSwgeyBzdGF0dXM6IDIwMCwgaGVhZGVyczogeyBldGFnIH0gfSk7XG4gKiAgIH0gZWxzZSB7XG4gKiAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEyLCBzdGF0dXNUZXh0OiBcIlByZWNvbmRpdGlvbiBGYWlsZWRcIn0pO1xuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgSWYtTWF0Y2ggaGVhZGVyIHZhbHVlLlxuICogQHBhcmFtIGV0YWcgdGhlIEVUYWcgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJhbWV0ZXJzIG1hdGNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWZNYXRjaChcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gIGV0YWc6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuICAvLyBXZWFrIHRhZ3MgY2Fubm90IGJlIG1hdGNoZWQgYW5kIHJldHVybiBmYWxzZS5cbiAgaWYgKCF2YWx1ZSB8fCAhZXRhZyB8fCBldGFnLnN0YXJ0c1dpdGgoXCJXL1wiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoU1RBUl9SRUdFWFAudGVzdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCB0YWdzID0gdmFsdWUuc3BsaXQoQ09NTUFfUkVHRVhQKTtcbiAgcmV0dXJuIHRhZ3MuaW5jbHVkZXMoZXRhZyk7XG59XG5cbi8qKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSB2YWx1ZSBmcm9tIHRoZSBgSWYtTm9uZS1NYXRjaGAgaGVhZGVyIGFuZFxuICogYSBjYWxjdWxhdGVkIGV0YWcgZm9yIHRoZSB0YXJnZXQgZW50aXR5IGFuZCByZXR1cm5zIGBmYWxzZWAgaWYgdGhlIGV0YWcgZm9yXG4gKiB0aGUgZW50aXR5IG1hdGNoZXMgdGhlIHN1cHBsaWVkIHZhbHVlLCBvdGhlcndpc2UgYHRydWVgLlxuICpcbiAqIFNlZSBNRE4ncyBbYElmLU5vbmUtTWF0Y2hgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvSWYtTm9uZS1NYXRjaClcbiAqIGFydGljbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7XG4gKiAgIGVUYWcsXG4gKiAgIGlmTm9uZU1hdGNoLFxuICogfSBmcm9tIFwiQHN0ZC9odHRwL2V0YWdcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGJvZHkgPSBcImhlbGxvIGRlbm8hXCI7XG4gKlxuICogRGVuby5zZXJ2ZShhc3luYyAocmVxKSA9PiB7XG4gKiAgIGNvbnN0IGlmTm9uZU1hdGNoVmFsdWUgPSByZXEuaGVhZGVycy5nZXQoXCJpZi1ub25lLW1hdGNoXCIpO1xuICogICBjb25zdCBldGFnID0gYXdhaXQgZVRhZyhib2R5KTtcbiAqICAgYXNzZXJ0KGV0YWcpO1xuICogICBpZiAoIWlmTm9uZU1hdGNoKGlmTm9uZU1hdGNoVmFsdWUsIGV0YWcpKSB7XG4gKiAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMzA0LCBoZWFkZXJzOiB7IGV0YWcgfSB9KTtcbiAqICAgfSBlbHNlIHtcbiAqICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGJvZHksIHsgc3RhdHVzOiAyMDAsIGhlYWRlcnM6IHsgZXRhZyB9IH0pO1xuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgSWYtTm9uZS1NYXRjaCBoZWFkZXIgdmFsdWUuXG4gKiBAcGFyYW0gZXRhZyB0aGUgRVRhZyB0byBjaGVjayBhZ2FpbnN0LlxuICogQHJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHBhcmFtZXRlcnMgZG8gbm90IG1hdGNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWZOb25lTWF0Y2goXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICBldGFnOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgaWYgKCF2YWx1ZSB8fCAhZXRhZykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChTVEFSX1JFR0VYUC50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldGFnID0gZXRhZy5zdGFydHNXaXRoKFwiVy9cIikgPyBldGFnLnNsaWNlKDIpIDogZXRhZztcbiAgY29uc3QgdGFncyA9IHZhbHVlLnNwbGl0KENPTU1BX1JFR0VYUCkubWFwKCh0YWcpID0+XG4gICAgdGFnLnN0YXJ0c1dpdGgoXCJXL1wiKSA/IHRhZy5zbGljZSgyKSA6IHRhZ1xuICApO1xuICByZXR1cm4gIXRhZ3MuaW5jbHVkZXMoZXRhZyk7XG59XG4iXSwibmFtZXMi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
+// denoCacheMetadata=13067080872163740025,16931646735443454902 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/14c325e4d60cdbf83301211077ecbce5016df36cafc4ee08329a89cd724a7891.js b/vendor/gen/https/jsr.io/14c325e4d60cdbf83301211077ecbce5016df36cafc4ee08329a89cd724a7891.js
new file mode 100644
index 0000000..c3018c5
--- /dev/null
+++ b/vendor/gen/https/jsr.io/14c325e4d60cdbf83301211077ecbce5016df36cafc4ee08329a89cd724a7891.js
@@ -0,0 +1,73 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Check whether byte slices are equal to each other using 8-bit comparisons.
+ *
+ * @param a First array to check equality
+ * @param b Second array to check equality
+ * @returns `true` if the arrays are equal, `false` otherwise
+ *
+ * @private
+ */ function equalsNaive(a, b) {
+ for(let i = 0; i < b.length; i++){
+ if (a[i] !== b[i]) return false;
+ }
+ return true;
+}
+/** Check whether byte slices are equal to each other using 32-bit comparisons.
+ *
+ * @param a First array to check equality.
+ * @param b Second array to check equality.
+ * @returns `true` if the arrays are equal, `false` otherwise.
+ *
+ * @private
+ */ function equals32Bit(a, b) {
+ const len = a.length;
+ const compactOffset = 3 - (a.byteOffset + 3) % 4;
+ const compactLen = Math.floor((len - compactOffset) / 4);
+ const compactA = new Uint32Array(a.buffer, a.byteOffset + compactOffset, compactLen);
+ const compactB = new Uint32Array(b.buffer, b.byteOffset + compactOffset, compactLen);
+ for(let i = 0; i < compactOffset; i++){
+ if (a[i] !== b[i]) return false;
+ }
+ for(let i = 0; i < compactA.length; i++){
+ if (compactA[i] !== compactB[i]) return false;
+ }
+ for(let i = compactOffset + compactLen * 4; i < len; i++){
+ if (a[i] !== b[i]) return false;
+ }
+ return true;
+}
+/**
+ * Byte length threshold for when to use 32-bit comparisons, based on
+ * benchmarks.
+ *
+ * @see {@link https://github.com/denoland/std/pull/4635}
+ */ const THRESHOLD_32_BIT = 160;
+/**
+ * Check whether byte slices are equal to each other.
+ *
+ * @param a First array to check equality.
+ * @param b Second array to check equality.
+ * @returns `true` if the arrays are equal, `false` otherwise.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { equals } from "@std/bytes/equals";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const a = new Uint8Array([1, 2, 3]);
+ * const b = new Uint8Array([1, 2, 3]);
+ * const c = new Uint8Array([4, 5, 6]);
+ *
+ * assertEquals(equals(a, b), true);
+ * assertEquals(equals(a, c), false);
+ * ```
+ */ export function equals(a, b) {
+ if (a.length !== b.length) {
+ return false;
+ }
+ return a.length >= THRESHOLD_32_BIT && a.byteOffset % 4 === b.byteOffset % 4 ? equals32Bit(a, b) : equalsNaive(a, b);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvZXF1YWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBieXRlIHNsaWNlcyBhcmUgZXF1YWwgdG8gZWFjaCBvdGhlciB1c2luZyA4LWJpdCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcGFyYW0gYSBGaXJzdCBhcnJheSB0byBjaGVjayBlcXVhbGl0eVxuICogQHBhcmFtIGIgU2Vjb25kIGFycmF5IHRvIGNoZWNrIGVxdWFsaXR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1YWwsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZXF1YWxzTmFpdmUoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2sgd2hldGhlciBieXRlIHNsaWNlcyBhcmUgZXF1YWwgdG8gZWFjaCBvdGhlciB1c2luZyAzMi1iaXQgY29tcGFyaXNvbnMuXG4gKlxuICogQHBhcmFtIGEgRmlyc3QgYXJyYXkgdG8gY2hlY2sgZXF1YWxpdHkuXG4gKiBAcGFyYW0gYiBTZWNvbmQgYXJyYXkgdG8gY2hlY2sgZXF1YWxpdHkuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1YWwsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVxdWFsczMyQml0KGE6IFVpbnQ4QXJyYXksIGI6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgY29uc3QgbGVuID0gYS5sZW5ndGg7XG4gIGNvbnN0IGNvbXBhY3RPZmZzZXQgPSAzIC0gKChhLmJ5dGVPZmZzZXQgKyAzKSAlIDQpO1xuICBjb25zdCBjb21wYWN0TGVuID0gTWF0aC5mbG9vcigobGVuIC0gY29tcGFjdE9mZnNldCkgLyA0KTtcbiAgY29uc3QgY29tcGFjdEEgPSBuZXcgVWludDMyQXJyYXkoXG4gICAgYS5idWZmZXIsXG4gICAgYS5ieXRlT2Zmc2V0ICsgY29tcGFjdE9mZnNldCxcbiAgICBjb21wYWN0TGVuLFxuICApO1xuICBjb25zdCBjb21wYWN0QiA9IG5ldyBVaW50MzJBcnJheShcbiAgICBiLmJ1ZmZlcixcbiAgICBiLmJ5dGVPZmZzZXQgKyBjb21wYWN0T2Zmc2V0LFxuICAgIGNvbXBhY3RMZW4sXG4gICk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcGFjdE9mZnNldDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBhY3RBLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvbXBhY3RBW2ldICE9PSBjb21wYWN0QltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSBjb21wYWN0T2Zmc2V0ICsgY29tcGFjdExlbiAqIDQ7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQnl0ZSBsZW5ndGggdGhyZXNob2xkIGZvciB3aGVuIHRvIHVzZSAzMi1iaXQgY29tcGFyaXNvbnMsIGJhc2VkIG9uXG4gKiBiZW5jaG1hcmtzLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9zdGQvcHVsbC80NjM1fVxuICovXG5jb25zdCBUSFJFU0hPTERfMzJfQklUID0gMTYwO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYnl0ZSBzbGljZXMgYXJlIGVxdWFsIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGEgRmlyc3QgYXJyYXkgdG8gY2hlY2sgZXF1YWxpdHkuXG4gKiBAcGFyYW0gYiBTZWNvbmQgYXJyYXkgdG8gY2hlY2sgZXF1YWxpdHkuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1YWwsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZXF1YWxzIH0gZnJvbSBcIkBzdGQvYnl0ZXMvZXF1YWxzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBhID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSBuZXcgVWludDhBcnJheShbMSwgMiwgM10pO1xuICogY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFs0LCA1LCA2XSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGVxdWFscyhhLCBiKSwgdHJ1ZSk7XG4gKiBhc3NlcnRFcXVhbHMoZXF1YWxzKGEsIGMpLCBmYWxzZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhOiBVaW50OEFycmF5LCBiOiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGEubGVuZ3RoID49IFRIUkVTSE9MRF8zMl9CSVQgJiZcbiAgICAgIChhLmJ5dGVPZmZzZXQgJSA0KSA9PT0gKGIuYnl0ZU9mZnNldCAlIDQpXG4gICAgPyBlcXVhbHMzMkJpdChhLCBiKVxuICAgIDogZXF1YWxzTmFpdmUoYSwgYik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Ozs7Ozs7Q0FRQyxHQUNELFNBQVMsWUFBWSxDQUFhLEVBQUUsQ0FBYTtFQUMvQyxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSztJQUNqQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPO0VBQzVCO0VBQ0EsT0FBTztBQUNUO0FBRUE7Ozs7Ozs7Q0FPQyxHQUNELFNBQVMsWUFBWSxDQUFhLEVBQUUsQ0FBYTtFQUMvQyxNQUFNLE1BQU0sRUFBRSxNQUFNO0VBQ3BCLE1BQU0sZ0JBQWdCLElBQUssQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLElBQUk7RUFDaEQsTUFBTSxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxhQUFhLElBQUk7RUFDdEQsTUFBTSxXQUFXLElBQUksWUFDbkIsRUFBRSxNQUFNLEVBQ1IsRUFBRSxVQUFVLEdBQUcsZUFDZjtFQUVGLE1BQU0sV0FBVyxJQUFJLFlBQ25CLEVBQUUsTUFBTSxFQUNSLEVBQUUsVUFBVSxHQUFHLGVBQ2Y7RUFFRixJQUFLLElBQUksSUFBSSxHQUFHLElBQUksZUFBZSxJQUFLO0lBQ3RDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU87RUFDNUI7RUFDQSxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksU0FBUyxNQUFNLEVBQUUsSUFBSztJQUN4QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPO0VBQzFDO0VBQ0EsSUFBSyxJQUFJLElBQUksZ0JBQWdCLGFBQWEsR0FBRyxJQUFJLEtBQUssSUFBSztJQUN6RCxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPO0VBQzVCO0VBQ0EsT0FBTztBQUNUO0FBRUE7Ozs7O0NBS0MsR0FDRCxNQUFNLG1CQUFtQjtBQUV6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNELE9BQU8sU0FBUyxPQUFPLENBQWEsRUFBRSxDQUFhO0VBQ2pELElBQUksRUFBRSxNQUFNLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDekIsT0FBTztFQUNUO0VBQ0EsT0FBTyxFQUFFLE1BQU0sSUFBSSxvQkFDZixBQUFDLEVBQUUsVUFBVSxHQUFHLE1BQVEsRUFBRSxVQUFVLEdBQUcsSUFDdkMsWUFBWSxHQUFHLEtBQ2YsWUFBWSxHQUFHO0FBQ3JCIn0=
+// denoCacheMetadata=12704657965864534442,16607678003465889335 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/169a7a9f9f4503f27e19e895b1d11e116a8ba7e62fea05683820204e82f3dda8.js b/vendor/gen/https/jsr.io/169a7a9f9f4503f27e19e895b1d11e116a8ba7e62fea05683820204e82f3dda8.js
new file mode 100644
index 0000000..35edec1
--- /dev/null
+++ b/vendor/gen/https/jsr.io/169a7a9f9f4503f27e19e895b1d11e116a8ba7e62fea05683820204e82f3dda8.js
@@ -0,0 +1,74 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return the extension of the `path` with leading period.
+ *
+ * @example Usage
+ * ```ts
+ * import { extname } from "@std/path/windows/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const ext = extname("file.ts");
+ * assertEquals(ext, ".ts");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `extname` from `@std/path/windows/unstable-extname`.
+ *
+ * @param path The path to get the extension from.
+ * @returns The extension of the `path`.
+ */ export function extname(path) {
+ assertPath(path);
+ let start = 0;
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Check for a drive letter prefix so as not to mistake the following
+ // path separator as an extra separator at the end of the path that can be
+ // disregarded
+ if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) {
+ start = startPart = 2;
+ }
+ for(let i = path.length - 1; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ return "";
+ }
+ return path.slice(startDot, end);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2V4dG5hbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgQ0hBUl9DT0xPTiwgQ0hBUl9ET1QgfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQYXRoU2VwYXJhdG9yLCBpc1dpbmRvd3NEZXZpY2VSb290IH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgIHdpdGggbGVhZGluZyBwZXJpb2QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2V4dG5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGV4dCA9IGV4dG5hbWUoXCJmaWxlLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGV4dCwgXCIudHNcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBleHRuYW1lYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1leHRuYW1lYC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIGV4dGVuc2lvbiBmcm9tLlxuICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuXG4gIC8vIENoZWNrIGZvciBhIGRyaXZlIGxldHRlciBwcmVmaXggc28gYXMgbm90IHRvIG1pc3Rha2UgdGhlIGZvbGxvd2luZ1xuICAvLyBwYXRoIHNlcGFyYXRvciBhcyBhbiBleHRyYSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCB0aGF0IGNhbiBiZVxuICAvLyBkaXNyZWdhcmRlZFxuXG4gIGlmIChcbiAgICBwYXRoLmxlbmd0aCA+PSAyICYmXG4gICAgcGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OICYmXG4gICAgaXNXaW5kb3dzRGV2aWNlUm9vdChwYXRoLmNoYXJDb2RlQXQoMCkpXG4gICkge1xuICAgIHN0YXJ0ID0gc3RhcnRQYXJ0ID0gMjtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsRUFBRSxRQUFRLFFBQVEsMEJBQTBCO0FBQy9ELFNBQVMsVUFBVSxRQUFRLDRCQUE0QjtBQUN2RCxTQUFTLGVBQWUsRUFBRSxtQkFBbUIsUUFBUSxhQUFhO0FBRWxFOzs7Ozs7Ozs7Ozs7Ozs7OztDQWlCQyxHQUNELE9BQU8sU0FBUyxRQUFRLElBQVk7RUFDbEMsV0FBVztFQUVYLElBQUksUUFBUTtFQUNaLElBQUksV0FBVyxDQUFDO0VBQ2hCLElBQUksWUFBWTtFQUNoQixJQUFJLE1BQU0sQ0FBQztFQUNYLElBQUksZUFBZTtFQUNuQix5RUFBeUU7RUFDekUsbUNBQW1DO0VBQ25DLElBQUksY0FBYztFQUVsQixxRUFBcUU7RUFDckUsMEVBQTBFO0VBQzFFLGNBQWM7RUFFZCxJQUNFLEtBQUssTUFBTSxJQUFJLEtBQ2YsS0FBSyxVQUFVLENBQUMsT0FBTyxjQUN2QixvQkFBb0IsS0FBSyxVQUFVLENBQUMsS0FDcEM7SUFDQSxRQUFRLFlBQVk7RUFDdEI7RUFFQSxJQUFLLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssT0FBTyxFQUFFLEVBQUc7SUFDN0MsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzdCLElBQUksZ0JBQWdCLE9BQU87TUFDekIsb0VBQW9FO01BQ3BFLGdEQUFnRDtNQUNoRCxJQUFJLENBQUMsY0FBYztRQUNqQixZQUFZLElBQUk7UUFDaEI7TUFDRjtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO01BQ2QsbUVBQW1FO01BQ25FLFlBQVk7TUFDWixlQUFlO01BQ2YsTUFBTSxJQUFJO0lBQ1o7SUFDQSxJQUFJLFNBQVMsVUFBVTtNQUNyQixrRUFBa0U7TUFDbEUsSUFBSSxhQUFhLENBQUMsR0FBRyxXQUFXO1dBQzNCLElBQUksZ0JBQWdCLEdBQUcsY0FBYztJQUM1QyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUc7TUFDMUIsdUVBQXVFO01BQ3ZFLHFEQUFxRDtNQUNyRCxjQUFjLENBQUM7SUFDakI7RUFDRjtFQUVBLElBQ0UsYUFBYSxDQUFDLEtBQ2QsUUFBUSxDQUFDLEtBQ1Qsd0RBQXdEO0VBQ3hELGdCQUFnQixLQUNoQiwwREFBMEQ7RUFDekQsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0lBQ0EsT0FBTztFQUNUO0VBQ0EsT0FBTyxLQUFLLEtBQUssQ0FBQyxVQUFVO0FBQzlCIn0=
+// denoCacheMetadata=8011577690149871662,10906453524834987688 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/179f2e8864819323bbe3744a75a9f3ad1b214c60aeb28f569fd1147416bf8a9b.js b/vendor/gen/https/jsr.io/179f2e8864819323bbe3744a75a9f3ad1b214c60aeb28f569fd1147416bf8a9b.js
new file mode 100644
index 0000000..e56d670
--- /dev/null
+++ b/vendor/gen/https/jsr.io/179f2e8864819323bbe3744a75a9f3ad1b214c60aeb28f569fd1147416bf8a9b.js
@@ -0,0 +1,47 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export { digest, DigestContext } from "./lib/deno_std_wasm_crypto.mjs";
+/**
+ * All cryptographic hash/digest algorithms supported by std/crypto.
+ *
+ * For algorithms that are supported by WebCrypto, the name here will match the
+ * one used by WebCrypto. Otherwise we prefer the formatting used in the
+ * algorithm's official specification. All names are uppercase to facilitate
+ * case-insensitive comparisons required by the WebCrypto spec.
+ */ export const DIGEST_ALGORITHM_NAMES = [
+ "BLAKE2B",
+ "BLAKE2B-128",
+ "BLAKE2B-160",
+ "BLAKE2B-224",
+ "BLAKE2B-256",
+ "BLAKE2B-384",
+ "BLAKE2S",
+ "BLAKE3",
+ "KECCAK-224",
+ "KECCAK-256",
+ "KECCAK-384",
+ "KECCAK-512",
+ "SHA-384",
+ "SHA3-224",
+ "SHA3-256",
+ "SHA3-384",
+ "SHA3-512",
+ "SHAKE128",
+ "SHAKE256",
+ "TIGER",
+ // insecure (length-extendable):
+ "RIPEMD-160",
+ "SHA-224",
+ "SHA-256",
+ "SHA-512",
+ // insecure (length-extendable and collidable):
+ "MD4",
+ "MD5",
+ "SHA-1",
+ // insecure (non-cryptographic)
+ "FNV32",
+ "FNV32A",
+ "FNV64",
+ "FNV64A"
+];
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY3J5cHRvLzEuMC41L193YXNtL21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuZXhwb3J0IHsgZGlnZXN0LCBEaWdlc3RDb250ZXh0IH0gZnJvbSBcIi4vbGliL2Rlbm9fc3RkX3dhc21fY3J5cHRvLm1qc1wiO1xuXG4vKipcbiAqIEFsbCBjcnlwdG9ncmFwaGljIGhhc2gvZGlnZXN0IGFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IHN0ZC9jcnlwdG8uXG4gKlxuICogRm9yIGFsZ29yaXRobXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IFdlYkNyeXB0bywgdGhlIG5hbWUgaGVyZSB3aWxsIG1hdGNoIHRoZVxuICogb25lIHVzZWQgYnkgV2ViQ3J5cHRvLiBPdGhlcndpc2Ugd2UgcHJlZmVyIHRoZSBmb3JtYXR0aW5nIHVzZWQgaW4gdGhlXG4gKiBhbGdvcml0aG0ncyBvZmZpY2lhbCBzcGVjaWZpY2F0aW9uLiBBbGwgbmFtZXMgYXJlIHVwcGVyY2FzZSB0byBmYWNpbGl0YXRlXG4gKiBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb25zIHJlcXVpcmVkIGJ5IHRoZSBXZWJDcnlwdG8gc3BlYy5cbiAqL1xuZXhwb3J0IGNvbnN0IERJR0VTVF9BTEdPUklUSE1fTkFNRVMgPSBbXG4gIFwiQkxBS0UyQlwiLFxuICBcIkJMQUtFMkItMTI4XCIsXG4gIFwiQkxBS0UyQi0xNjBcIixcbiAgXCJCTEFLRTJCLTIyNFwiLFxuICBcIkJMQUtFMkItMjU2XCIsXG4gIFwiQkxBS0UyQi0zODRcIixcbiAgXCJCTEFLRTJTXCIsXG4gIFwiQkxBS0UzXCIsXG4gIFwiS0VDQ0FLLTIyNFwiLFxuICBcIktFQ0NBSy0yNTZcIixcbiAgXCJLRUNDQUstMzg0XCIsXG4gIFwiS0VDQ0FLLTUxMlwiLFxuICBcIlNIQS0zODRcIixcbiAgXCJTSEEzLTIyNFwiLFxuICBcIlNIQTMtMjU2XCIsXG4gIFwiU0hBMy0zODRcIixcbiAgXCJTSEEzLTUxMlwiLFxuICBcIlNIQUtFMTI4XCIsXG4gIFwiU0hBS0UyNTZcIixcbiAgXCJUSUdFUlwiLFxuICAvLyBpbnNlY3VyZSAobGVuZ3RoLWV4dGVuZGFibGUpOlxuICBcIlJJUEVNRC0xNjBcIixcbiAgXCJTSEEtMjI0XCIsXG4gIFwiU0hBLTI1NlwiLFxuICBcIlNIQS01MTJcIixcbiAgLy8gaW5zZWN1cmUgKGxlbmd0aC1leHRlbmRhYmxlIGFuZCBjb2xsaWRhYmxlKTpcbiAgXCJNRDRcIixcbiAgXCJNRDVcIixcbiAgXCJTSEEtMVwiLFxuICAvLyBpbnNlY3VyZSAobm9uLWNyeXB0b2dyYXBoaWMpXG4gIFwiRk5WMzJcIixcbiAgXCJGTlYzMkFcIixcbiAgXCJGTlY2NFwiLFxuICBcIkZOVjY0QVwiLFxuXSBhcyBjb25zdDtcblxuLyoqIEFuIGFsZ29yaXRobSBuYW1lIHN1cHBvcnRlZCBieSBzdGQvY3J5cHRvLiAqL1xuZXhwb3J0IHR5cGUgRGlnZXN0QWxnb3JpdGhtTmFtZSA9IHR5cGVvZiBESUdFU1RfQUxHT1JJVEhNX05BTUVTW251bWJlcl07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELFNBQVMsTUFBTSxFQUFFLGFBQWEsUUFBUSxpQ0FBaUM7QUFFdkU7Ozs7Ozs7Q0FPQyxHQUNELE9BQU8sTUFBTSx5QkFBeUI7RUFDcEM7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLGdDQUFnQztFQUNoQztFQUNBO0VBQ0E7RUFDQTtFQUNBLCtDQUErQztFQUMvQztFQUNBO0VBQ0E7RUFDQSwrQkFBK0I7RUFDL0I7RUFDQTtFQUNBO0VBQ0E7Q0FDRCxDQUFVIn0=
+// denoCacheMetadata=16208085553614233131,2888225469090550892 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1a8c8e54fd981ec59cc603b3e473ea85f1f02651cd6fd641a3e460eb4e69311b.js b/vendor/gen/https/jsr.io/1a8c8e54fd981ec59cc603b3e473ea85f1f02651cd6fd641a3e460eb4e69311b.js
new file mode 100644
index 0000000..28f973c
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1a8c8e54fd981ec59cc603b3e473ea85f1f02651cd6fd641a3e460eb4e69311b.js
@@ -0,0 +1,28 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { encodeWhitespace } from "../_common/to_file_url.ts";
+import { isAbsolute } from "./is_absolute.ts";
+/**
+ * Converts a path string to a file URL.
+ *
+ * @example Usage
+ * ```ts
+ * import { toFileUrl } from "@std/path/posix/to-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(toFileUrl("/home/foo"), new URL("file:///home/foo"));
+ * assertEquals(toFileUrl("/home/foo bar"), new URL("file:///home/foo%20bar"));
+ * ```
+ *
+ * @param path The path to convert.
+ * @returns The file URL.
+ */ export function toFileUrl(path) {
+ if (!isAbsolute(path)) {
+ throw new TypeError(`Path must be absolute: received "${path}"`);
+ }
+ const url = new URL("file:///");
+ url.pathname = encodeWhitespace(path.replace(/%/g, "%25").replace(/\\/g, "%5C"));
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC90b19maWxlX3VybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBlbmNvZGVXaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL19jb21tb24vdG9fZmlsZV91cmwudHNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgfSBmcm9tIFwiLi9pc19hYnNvbHV0ZS50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcGF0aCBzdHJpbmcgdG8gYSBmaWxlIFVSTC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvdG8tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyh0b0ZpbGVVcmwoXCIvaG9tZS9mb29cIiksIG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpKTtcbiAqIGFzc2VydEVxdWFscyh0b0ZpbGVVcmwoXCIvaG9tZS9mb28gYmFyXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2ZvbyUyMGJhclwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGZpbGUgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlVXJsKHBhdGg6IHN0cmluZyk6IFVSTCB7XG4gIGlmICghaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFBhdGggbXVzdCBiZSBhYnNvbHV0ZTogcmVjZWl2ZWQgXCIke3BhdGh9XCJgKTtcbiAgfVxuXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoXCJmaWxlOi8vL1wiKTtcbiAgdXJsLnBhdGhuYW1lID0gZW5jb2RlV2hpdGVzcGFjZShcbiAgICBwYXRoLnJlcGxhY2UoLyUvZywgXCIlMjVcIikucmVwbGFjZSgvXFxcXC9nLCBcIiU1Q1wiKSxcbiAgKTtcbiAgcmV0dXJuIHVybDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsZ0JBQWdCLFFBQVEsNEJBQTRCO0FBQzdELFNBQVMsVUFBVSxRQUFRLG1CQUFtQjtBQUU5Qzs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxVQUFVLElBQVk7RUFDcEMsSUFBSSxDQUFDLFdBQVcsT0FBTztJQUNyQixNQUFNLElBQUksVUFBVSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ2pFO0VBRUEsTUFBTSxNQUFNLElBQUksSUFBSTtFQUNwQixJQUFJLFFBQVEsR0FBRyxpQkFDYixLQUFLLE9BQU8sQ0FBQyxNQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU87RUFFM0MsT0FBTztBQUNUIn0=
+// denoCacheMetadata=1331179479001042497,10636658652871043538 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1ac3d76153ab81b8cf0f6675645e174a12faae32e6fa6524ab909e0b03c3348f.js b/vendor/gen/https/jsr.io/1ac3d76153ab81b8cf0f6675645e174a12faae32e6fa6524ab909e0b03c3348f.js
new file mode 100644
index 0000000..4ff045b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1ac3d76153ab81b8cf0f6675645e174a12faae32e6fa6524ab909e0b03c3348f.js
@@ -0,0 +1,1239 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { AMPERSAND, ASTERISK, BACKSLASH, CARRIAGE_RETURN, COLON, COMMA, COMMERCIAL_AT, DOT, DOUBLE_QUOTE, EXCLAMATION, GRAVE_ACCENT, GREATER_THAN, isEOL, isFlowIndicator, isWhiteSpace, isWhiteSpaceOrEOL, LEFT_CURLY_BRACKET, LEFT_SQUARE_BRACKET, LINE_FEED, MINUS, PERCENT, PLUS, QUESTION, RIGHT_CURLY_BRACKET, RIGHT_SQUARE_BRACKET, SHARP, SINGLE_QUOTE, SMALLER_THAN, SPACE, VERTICAL_LINE } from "./_chars.ts";
+import { DEFAULT_SCHEMA } from "./_schema.ts";
+import { isObject, isPlainObject } from "./_utils.ts";
+const CONTEXT_FLOW_IN = 1;
+const CONTEXT_FLOW_OUT = 2;
+const CONTEXT_BLOCK_IN = 3;
+const CONTEXT_BLOCK_OUT = 4;
+const CHOMPING_CLIP = 1;
+const CHOMPING_STRIP = 2;
+const CHOMPING_KEEP = 3;
+const PATTERN_NON_PRINTABLE = // deno-lint-ignore no-control-regex
+/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
+const PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
+const PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
+const PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
+const PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
+const ESCAPED_HEX_LENGTHS = new Map([
+ [
+ 0x78,
+ 2
+ ],
+ [
+ 0x75,
+ 4
+ ],
+ [
+ 0x55,
+ 8
+ ]
+]);
+const SIMPLE_ESCAPE_SEQUENCES = new Map([
+ [
+ 0x30,
+ "\x00"
+ ],
+ [
+ 0x61,
+ "\x07"
+ ],
+ [
+ 0x62,
+ "\x08"
+ ],
+ [
+ 0x74,
+ "\x09"
+ ],
+ [
+ 0x09,
+ "\x09"
+ ],
+ [
+ 0x6e,
+ "\x0A"
+ ],
+ [
+ 0x76,
+ "\x0B"
+ ],
+ [
+ 0x66,
+ "\x0C"
+ ],
+ [
+ 0x72,
+ "\x0D"
+ ],
+ [
+ 0x65,
+ "\x1B"
+ ],
+ [
+ 0x20,
+ " "
+ ],
+ [
+ 0x22,
+ '"'
+ ],
+ [
+ 0x2f,
+ "/"
+ ],
+ [
+ 0x5c,
+ "\\"
+ ],
+ [
+ 0x4e,
+ "\x85"
+ ],
+ [
+ 0x5f,
+ "\xA0"
+ ],
+ [
+ 0x4c,
+ "\u2028"
+ ],
+ [
+ 0x50,
+ "\u2029"
+ ]
+]);
+/**
+ * Converts a hexadecimal character code to its decimal value.
+ */ function hexCharCodeToNumber(charCode) {
+ // Check if the character code is in the range for '0' to '9'
+ if (0x30 <= charCode && charCode <= 0x39) return charCode - 0x30; // Convert '0'-'9' to 0-9
+ // Normalize the character code to lowercase if it's a letter
+ const lc = charCode | 0x20;
+ // Check if the character code is in the range for 'a' to 'f'
+ if (0x61 <= lc && lc <= 0x66) return lc - 0x61 + 10; // Convert 'a'-'f' to 10-15
+ return -1;
+}
+/**
+ * Converts a decimal character code to its decimal value.
+ */ function decimalCharCodeToNumber(charCode) {
+ // Check if the character code is in the range for '0' to '9'
+ if (0x30 <= charCode && charCode <= 0x39) return charCode - 0x30; // Convert '0'-'9' to 0-9
+ return -1;
+}
+/**
+ * Converts a Unicode code point to a string.
+ */ function codepointToChar(codepoint) {
+ // Check if the code point is within the Basic Multilingual Plane (BMP)
+ if (codepoint <= 0xffff) return String.fromCharCode(codepoint); // Convert BMP code point to character
+ // Encode UTF-16 surrogate pair for code points beyond BMP
+ // Reference: https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF
+ return String.fromCharCode((codepoint - 0x010000 >> 10) + 0xd800, (codepoint - 0x010000 & 0x03ff) + 0xdc00);
+}
+const INDENT = 4;
+const MAX_LENGTH = 75;
+const DELIMITERS = "\x00\r\n\x85\u2028\u2029";
+function getSnippet(buffer, position) {
+ if (!buffer) return null;
+ let start = position;
+ let end = position;
+ let head = "";
+ let tail = "";
+ while(start > 0 && !DELIMITERS.includes(buffer.charAt(start - 1))){
+ start--;
+ if (position - start > MAX_LENGTH / 2 - 1) {
+ head = " ... ";
+ start += 5;
+ break;
+ }
+ }
+ while(end < buffer.length && !DELIMITERS.includes(buffer.charAt(end))){
+ end++;
+ if (end - position > MAX_LENGTH / 2 - 1) {
+ tail = " ... ";
+ end -= 5;
+ break;
+ }
+ }
+ const snippet = buffer.slice(start, end);
+ const indent = " ".repeat(INDENT);
+ const caretIndent = " ".repeat(INDENT + position - start + head.length);
+ return `${indent + head + snippet + tail}\n${caretIndent}^`;
+}
+function markToString(buffer, position, line, column) {
+ let where = `at line ${line + 1}, column ${column + 1}`;
+ const snippet = getSnippet(buffer, position);
+ if (snippet) where += `:\n${snippet}`;
+ return where;
+}
+export class LoaderState {
+ input;
+ length;
+ lineIndent = 0;
+ lineStart = 0;
+ position = 0;
+ line = 0;
+ onWarning;
+ allowDuplicateKeys;
+ implicitTypes;
+ typeMap;
+ version;
+ checkLineBreaks = false;
+ tagMap = new Map();
+ anchorMap = new Map();
+ tag;
+ anchor;
+ kind;
+ result = "";
+ constructor(input, { schema = DEFAULT_SCHEMA, onWarning, allowDuplicateKeys = false }){
+ this.input = input;
+ this.onWarning = onWarning;
+ this.allowDuplicateKeys = allowDuplicateKeys;
+ this.implicitTypes = schema.implicitTypes;
+ this.typeMap = schema.typeMap;
+ this.length = input.length;
+ this.version = null;
+ this.readIndent();
+ }
+ skipWhitespaces() {
+ let ch = this.peek();
+ while(isWhiteSpace(ch)){
+ ch = this.next();
+ }
+ }
+ skipComment() {
+ let ch = this.peek();
+ if (ch !== SHARP) return;
+ ch = this.next();
+ while(ch !== 0 && !isEOL(ch)){
+ ch = this.next();
+ }
+ }
+ readIndent() {
+ let char = this.peek();
+ while(char === SPACE){
+ this.lineIndent += 1;
+ char = this.next();
+ }
+ }
+ peek(offset = 0) {
+ return this.input.charCodeAt(this.position + offset);
+ }
+ next() {
+ this.position += 1;
+ return this.peek();
+ }
+ #createError(message) {
+ const mark = markToString(this.input, this.position, this.line, this.position - this.lineStart);
+ return new SyntaxError(`${message} ${mark}`);
+ }
+ dispatchWarning(message) {
+ const error = this.#createError(message);
+ this.onWarning?.(error);
+ }
+ yamlDirectiveHandler(...args) {
+ if (this.version !== null) {
+ throw this.#createError("Cannot handle YAML directive: duplication of %YAML directive");
+ }
+ if (args.length !== 1) {
+ throw this.#createError("Cannot handle YAML directive: YAML directive accepts exactly one argument");
+ }
+ const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
+ if (match === null) {
+ throw this.#createError("Cannot handle YAML directive: ill-formed argument");
+ }
+ const major = parseInt(match[1], 10);
+ const minor = parseInt(match[2], 10);
+ if (major !== 1) {
+ throw this.#createError("Cannot handle YAML directive: unacceptable YAML version");
+ }
+ this.version = args[0] ?? null;
+ this.checkLineBreaks = minor < 2;
+ if (minor !== 1 && minor !== 2) {
+ return this.dispatchWarning("Cannot handle YAML directive: unsupported YAML version");
+ }
+ }
+ tagDirectiveHandler(...args) {
+ if (args.length !== 2) {
+ throw this.#createError(`Cannot handle tag directive: directive accepts exactly two arguments, received ${args.length}`);
+ }
+ const handle = args[0];
+ const prefix = args[1];
+ if (!PATTERN_TAG_HANDLE.test(handle)) {
+ throw this.#createError(`Cannot handle tag directive: ill-formed handle (first argument) in "${handle}"`);
+ }
+ if (this.tagMap.has(handle)) {
+ throw this.#createError(`Cannot handle tag directive: previously declared suffix for "${handle}" tag handle`);
+ }
+ if (!PATTERN_TAG_URI.test(prefix)) {
+ throw this.#createError("Cannot handle tag directive: ill-formed tag prefix (second argument) of the TAG directive");
+ }
+ this.tagMap.set(handle, prefix);
+ }
+ captureSegment(start, end, checkJson) {
+ if (start < end) {
+ const result = this.input.slice(start, end);
+ if (checkJson) {
+ for(let position = 0; position < result.length; position++){
+ const character = result.charCodeAt(position);
+ if (!(character === 0x09 || 0x20 <= character && character <= 0x10ffff)) {
+ throw this.#createError(`Expected valid JSON character: received "${character}"`);
+ }
+ }
+ } else if (PATTERN_NON_PRINTABLE.test(result)) {
+ throw this.#createError("Stream contains non-printable characters");
+ }
+ this.result += result;
+ }
+ }
+ readBlockSequence(nodeIndent) {
+ let detected = false;
+ const tag = this.tag;
+ const anchor = this.anchor;
+ const result = [];
+ if (this.anchor !== null && typeof this.anchor !== "undefined") {
+ this.anchorMap.set(this.anchor, result);
+ }
+ let ch = this.peek();
+ while(ch !== 0){
+ if (ch !== MINUS) {
+ break;
+ }
+ const following = this.peek(1);
+ if (!isWhiteSpaceOrEOL(following)) {
+ break;
+ }
+ detected = true;
+ this.position++;
+ if (this.skipSeparationSpace(true, -1)) {
+ if (this.lineIndent <= nodeIndent) {
+ result.push(null);
+ ch = this.peek();
+ continue;
+ }
+ }
+ const line = this.line;
+ this.composeNode(nodeIndent, CONTEXT_BLOCK_IN, false, true);
+ result.push(this.result);
+ this.skipSeparationSpace(true, -1);
+ ch = this.peek();
+ if ((this.line === line || this.lineIndent > nodeIndent) && ch !== 0) {
+ throw this.#createError("Cannot read block sequence: bad indentation of a sequence entry");
+ } else if (this.lineIndent < nodeIndent) {
+ break;
+ }
+ }
+ if (detected) {
+ this.tag = tag;
+ this.anchor = anchor;
+ this.kind = "sequence";
+ this.result = result;
+ return true;
+ }
+ return false;
+ }
+ mergeMappings(destination, source, overridableKeys) {
+ if (!isObject(source)) {
+ throw this.#createError("Cannot merge mappings: the provided source object is unacceptable");
+ }
+ for (const [key, value] of Object.entries(source)){
+ if (Object.hasOwn(destination, key)) continue;
+ Object.defineProperty(destination, key, {
+ value,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ overridableKeys.add(key);
+ }
+ }
+ storeMappingPair(result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {
+ // The output is a plain object here, so keys can only be strings.
+ // We need to convert keyNode to a string, but doing so can hang the process
+ // (deeply nested arrays that explode exponentially using aliases).
+ if (Array.isArray(keyNode)) {
+ keyNode = Array.prototype.slice.call(keyNode);
+ for(let index = 0; index < keyNode.length; index++){
+ if (Array.isArray(keyNode[index])) {
+ throw this.#createError("Cannot store mapping pair: nested arrays are not supported inside keys");
+ }
+ if (typeof keyNode === "object" && isPlainObject(keyNode[index])) {
+ keyNode[index] = "[object Object]";
+ }
+ }
+ }
+ // Avoid code execution in load() via toString property
+ // (still use its own toString for arrays, timestamps,
+ // and whatever user schema extensions happen to have @@toStringTag)
+ if (typeof keyNode === "object" && isPlainObject(keyNode)) {
+ keyNode = "[object Object]";
+ }
+ keyNode = String(keyNode);
+ if (keyTag === "tag:yaml.org,2002:merge") {
+ if (Array.isArray(valueNode)) {
+ for(let index = 0; index < valueNode.length; index++){
+ this.mergeMappings(result, valueNode[index], overridableKeys);
+ }
+ } else {
+ this.mergeMappings(result, valueNode, overridableKeys);
+ }
+ } else {
+ if (!this.allowDuplicateKeys && !overridableKeys.has(keyNode) && Object.hasOwn(result, keyNode)) {
+ this.line = startLine || this.line;
+ this.position = startPos || this.position;
+ throw this.#createError("Cannot store mapping pair: duplicated key");
+ }
+ Object.defineProperty(result, keyNode, {
+ value: valueNode,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ overridableKeys.delete(keyNode);
+ }
+ return result;
+ }
+ readLineBreak() {
+ const ch = this.peek();
+ if (ch === LINE_FEED) {
+ this.position++;
+ } else if (ch === CARRIAGE_RETURN) {
+ this.position++;
+ if (this.peek() === LINE_FEED) {
+ this.position++;
+ }
+ } else {
+ throw this.#createError("Cannot read line: line break not found");
+ }
+ this.line += 1;
+ this.lineStart = this.position;
+ }
+ skipSeparationSpace(allowComments, checkIndent) {
+ let lineBreaks = 0;
+ let ch = this.peek();
+ while(ch !== 0){
+ this.skipWhitespaces();
+ ch = this.peek();
+ if (allowComments) {
+ this.skipComment();
+ ch = this.peek();
+ }
+ if (isEOL(ch)) {
+ this.readLineBreak();
+ ch = this.peek();
+ lineBreaks++;
+ this.lineIndent = 0;
+ this.readIndent();
+ ch = this.peek();
+ } else {
+ break;
+ }
+ }
+ if (checkIndent !== -1 && lineBreaks !== 0 && this.lineIndent < checkIndent) {
+ this.dispatchWarning("deficient indentation");
+ }
+ return lineBreaks;
+ }
+ testDocumentSeparator() {
+ let ch = this.peek();
+ // Condition this.position === this.lineStart is tested
+ // in parent on each call, for efficiency. No needs to test here again.
+ if ((ch === MINUS || ch === DOT) && ch === this.peek(1) && ch === this.peek(2)) {
+ ch = this.peek(3);
+ if (ch === 0 || isWhiteSpaceOrEOL(ch)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ writeFoldedLines(count) {
+ if (count === 1) {
+ this.result += " ";
+ } else if (count > 1) {
+ this.result += "\n".repeat(count - 1);
+ }
+ }
+ readPlainScalar(nodeIndent, withinFlowCollection) {
+ const kind = this.kind;
+ const result = this.result;
+ let ch = this.peek();
+ if (isWhiteSpaceOrEOL(ch) || isFlowIndicator(ch) || ch === SHARP || ch === AMPERSAND || ch === ASTERISK || ch === EXCLAMATION || ch === VERTICAL_LINE || ch === GREATER_THAN || ch === SINGLE_QUOTE || ch === DOUBLE_QUOTE || ch === PERCENT || ch === COMMERCIAL_AT || ch === GRAVE_ACCENT) {
+ return false;
+ }
+ let following;
+ if (ch === QUESTION || ch === MINUS) {
+ following = this.peek(1);
+ if (isWhiteSpaceOrEOL(following) || withinFlowCollection && isFlowIndicator(following)) {
+ return false;
+ }
+ }
+ this.kind = "scalar";
+ this.result = "";
+ let captureEnd = this.position;
+ let captureStart = this.position;
+ let hasPendingContent = false;
+ let line = 0;
+ while(ch !== 0){
+ if (ch === COLON) {
+ following = this.peek(1);
+ if (isWhiteSpaceOrEOL(following) || withinFlowCollection && isFlowIndicator(following)) {
+ break;
+ }
+ } else if (ch === SHARP) {
+ const preceding = this.peek(-1);
+ if (isWhiteSpaceOrEOL(preceding)) {
+ break;
+ }
+ } else if (this.position === this.lineStart && this.testDocumentSeparator() || withinFlowCollection && isFlowIndicator(ch)) {
+ break;
+ } else if (isEOL(ch)) {
+ line = this.line;
+ const lineStart = this.lineStart;
+ const lineIndent = this.lineIndent;
+ this.skipSeparationSpace(false, -1);
+ if (this.lineIndent >= nodeIndent) {
+ hasPendingContent = true;
+ ch = this.peek();
+ continue;
+ } else {
+ this.position = captureEnd;
+ this.line = line;
+ this.lineStart = lineStart;
+ this.lineIndent = lineIndent;
+ break;
+ }
+ }
+ if (hasPendingContent) {
+ this.captureSegment(captureStart, captureEnd, false);
+ this.writeFoldedLines(this.line - line);
+ captureStart = captureEnd = this.position;
+ hasPendingContent = false;
+ }
+ if (!isWhiteSpace(ch)) {
+ captureEnd = this.position + 1;
+ }
+ ch = this.next();
+ }
+ this.captureSegment(captureStart, captureEnd, false);
+ if (this.result) {
+ return true;
+ }
+ this.kind = kind;
+ this.result = result;
+ return false;
+ }
+ readSingleQuotedScalar(nodeIndent) {
+ let ch = this.peek();
+ if (ch !== SINGLE_QUOTE) {
+ return false;
+ }
+ this.kind = "scalar";
+ this.result = "";
+ this.position++;
+ let captureStart = this.position;
+ let captureEnd = this.position;
+ ch = this.peek();
+ while(ch !== 0){
+ if (ch === SINGLE_QUOTE) {
+ this.captureSegment(captureStart, this.position, true);
+ ch = this.next();
+ if (ch === SINGLE_QUOTE) {
+ captureStart = this.position;
+ this.position++;
+ captureEnd = this.position;
+ } else {
+ return true;
+ }
+ } else if (isEOL(ch)) {
+ this.captureSegment(captureStart, captureEnd, true);
+ this.writeFoldedLines(this.skipSeparationSpace(false, nodeIndent));
+ captureStart = captureEnd = this.position;
+ } else if (this.position === this.lineStart && this.testDocumentSeparator()) {
+ throw this.#createError("Unexpected end of the document within a single quoted scalar");
+ } else {
+ this.position++;
+ captureEnd = this.position;
+ }
+ ch = this.peek();
+ }
+ throw this.#createError("Unexpected end of the stream within a single quoted scalar");
+ }
+ readDoubleQuotedScalar(nodeIndent) {
+ let ch = this.peek();
+ if (ch !== DOUBLE_QUOTE) {
+ return false;
+ }
+ this.kind = "scalar";
+ this.result = "";
+ this.position++;
+ let captureEnd = this.position;
+ let captureStart = this.position;
+ let tmp;
+ ch = this.peek();
+ while(ch !== 0){
+ if (ch === DOUBLE_QUOTE) {
+ this.captureSegment(captureStart, this.position, true);
+ this.position++;
+ return true;
+ }
+ if (ch === BACKSLASH) {
+ this.captureSegment(captureStart, this.position, true);
+ ch = this.next();
+ if (isEOL(ch)) {
+ this.skipSeparationSpace(false, nodeIndent);
+ } else if (ch < 256 && SIMPLE_ESCAPE_SEQUENCES.has(ch)) {
+ this.result += SIMPLE_ESCAPE_SEQUENCES.get(ch);
+ this.position++;
+ } else if ((tmp = ESCAPED_HEX_LENGTHS.get(ch) ?? 0) > 0) {
+ let hexLength = tmp;
+ let hexResult = 0;
+ for(; hexLength > 0; hexLength--){
+ ch = this.next();
+ if ((tmp = hexCharCodeToNumber(ch)) >= 0) {
+ hexResult = (hexResult << 4) + tmp;
+ } else {
+ throw this.#createError("Cannot read double quoted scalar: expected hexadecimal character");
+ }
+ }
+ this.result += codepointToChar(hexResult);
+ this.position++;
+ } else {
+ throw this.#createError("Cannot read double quoted scalar: unknown escape sequence");
+ }
+ captureStart = captureEnd = this.position;
+ } else if (isEOL(ch)) {
+ this.captureSegment(captureStart, captureEnd, true);
+ this.writeFoldedLines(this.skipSeparationSpace(false, nodeIndent));
+ captureStart = captureEnd = this.position;
+ } else if (this.position === this.lineStart && this.testDocumentSeparator()) {
+ throw this.#createError("Unexpected end of the document within a double quoted scalar");
+ } else {
+ this.position++;
+ captureEnd = this.position;
+ }
+ ch = this.peek();
+ }
+ throw this.#createError("Unexpected end of the stream within a double quoted scalar");
+ }
+ readFlowCollection(nodeIndent) {
+ let ch = this.peek();
+ let terminator;
+ let isMapping = true;
+ let result = {};
+ if (ch === LEFT_SQUARE_BRACKET) {
+ terminator = RIGHT_SQUARE_BRACKET;
+ isMapping = false;
+ result = [];
+ } else if (ch === LEFT_CURLY_BRACKET) {
+ terminator = RIGHT_CURLY_BRACKET;
+ } else {
+ return false;
+ }
+ if (this.anchor !== null && typeof this.anchor !== "undefined") {
+ this.anchorMap.set(this.anchor, result);
+ }
+ ch = this.next();
+ const tag = this.tag;
+ const anchor = this.anchor;
+ let readNext = true;
+ let valueNode = null;
+ let keyNode = null;
+ let keyTag = null;
+ let isExplicitPair = false;
+ let isPair = false;
+ let following = 0;
+ let line = 0;
+ const overridableKeys = new Set();
+ while(ch !== 0){
+ this.skipSeparationSpace(true, nodeIndent);
+ ch = this.peek();
+ if (ch === terminator) {
+ this.position++;
+ this.tag = tag;
+ this.anchor = anchor;
+ this.kind = isMapping ? "mapping" : "sequence";
+ this.result = result;
+ return true;
+ }
+ if (!readNext) {
+ throw this.#createError("Cannot read flow collection: missing comma between flow collection entries");
+ }
+ keyTag = keyNode = valueNode = null;
+ isPair = isExplicitPair = false;
+ if (ch === QUESTION) {
+ following = this.peek(1);
+ if (isWhiteSpaceOrEOL(following)) {
+ isPair = isExplicitPair = true;
+ this.position++;
+ this.skipSeparationSpace(true, nodeIndent);
+ }
+ }
+ line = this.line;
+ this.composeNode(nodeIndent, CONTEXT_FLOW_IN, false, true);
+ keyTag = this.tag || null;
+ keyNode = this.result;
+ this.skipSeparationSpace(true, nodeIndent);
+ ch = this.peek();
+ if ((isExplicitPair || this.line === line) && ch === COLON) {
+ isPair = true;
+ ch = this.next();
+ this.skipSeparationSpace(true, nodeIndent);
+ this.composeNode(nodeIndent, CONTEXT_FLOW_IN, false, true);
+ valueNode = this.result;
+ }
+ if (isMapping) {
+ this.storeMappingPair(result, overridableKeys, keyTag, keyNode, valueNode);
+ } else if (isPair) {
+ result.push(this.storeMappingPair({}, overridableKeys, keyTag, keyNode, valueNode));
+ } else {
+ result.push(keyNode);
+ }
+ this.skipSeparationSpace(true, nodeIndent);
+ ch = this.peek();
+ if (ch === COMMA) {
+ readNext = true;
+ ch = this.next();
+ } else {
+ readNext = false;
+ }
+ }
+ throw this.#createError("Cannot read flow collection: unexpected end of the stream within a flow collection");
+ }
+ // Handles block scaler styles: e.g. '|', '>', '|-' and '>-'.
+ // https://yaml.org/spec/1.2.2/#81-block-scalar-styles
+ readBlockScalar(nodeIndent) {
+ let chomping = CHOMPING_CLIP;
+ let didReadContent = false;
+ let detectedIndent = false;
+ let textIndent = nodeIndent;
+ let emptyLines = 0;
+ let atMoreIndented = false;
+ let ch = this.peek();
+ let folding = false;
+ if (ch === VERTICAL_LINE) {
+ folding = false;
+ } else if (ch === GREATER_THAN) {
+ folding = true;
+ } else {
+ return false;
+ }
+ this.kind = "scalar";
+ this.result = "";
+ let tmp = 0;
+ while(ch !== 0){
+ ch = this.next();
+ if (ch === PLUS || ch === MINUS) {
+ if (CHOMPING_CLIP === chomping) {
+ chomping = ch === PLUS ? CHOMPING_KEEP : CHOMPING_STRIP;
+ } else {
+ throw this.#createError("Cannot read block: chomping mode identifier repeated");
+ }
+ } else if ((tmp = decimalCharCodeToNumber(ch)) >= 0) {
+ if (tmp === 0) {
+ throw this.#createError("Cannot read block: indentation width must be greater than 0");
+ } else if (!detectedIndent) {
+ textIndent = nodeIndent + tmp - 1;
+ detectedIndent = true;
+ } else {
+ throw this.#createError("Cannot read block: indentation width identifier repeated");
+ }
+ } else {
+ break;
+ }
+ }
+ if (isWhiteSpace(ch)) {
+ this.skipWhitespaces();
+ this.skipComment();
+ ch = this.peek();
+ }
+ while(ch !== 0){
+ this.readLineBreak();
+ this.lineIndent = 0;
+ ch = this.peek();
+ while((!detectedIndent || this.lineIndent < textIndent) && ch === SPACE){
+ this.lineIndent++;
+ ch = this.next();
+ }
+ if (!detectedIndent && this.lineIndent > textIndent) {
+ textIndent = this.lineIndent;
+ }
+ if (isEOL(ch)) {
+ emptyLines++;
+ continue;
+ }
+ // End of the scalar.
+ if (this.lineIndent < textIndent) {
+ // Perform the chomping.
+ if (chomping === CHOMPING_KEEP) {
+ this.result += "\n".repeat(didReadContent ? 1 + emptyLines : emptyLines);
+ } else if (chomping === CHOMPING_CLIP) {
+ if (didReadContent) {
+ // i.e. only if the scalar is not empty.
+ this.result += "\n";
+ }
+ }
+ break;
+ }
+ // Folded style: use fancy rules to handle line breaks.
+ if (folding) {
+ // Lines starting with white space characters (more-indented lines) are not folded.
+ if (isWhiteSpace(ch)) {
+ atMoreIndented = true;
+ // except for the first content line (cf. Example 8.1)
+ this.result += "\n".repeat(didReadContent ? 1 + emptyLines : emptyLines);
+ // End of more-indented block.
+ } else if (atMoreIndented) {
+ atMoreIndented = false;
+ this.result += "\n".repeat(emptyLines + 1);
+ // Just one line break - perceive as the same line.
+ } else if (emptyLines === 0) {
+ if (didReadContent) {
+ // i.e. only if we have already read some scalar content.
+ this.result += " ";
+ }
+ // Several line breaks - perceive as different lines.
+ } else {
+ this.result += "\n".repeat(emptyLines);
+ }
+ // Literal style: just add exact number of line breaks between content lines.
+ } else {
+ // Keep all line breaks except the header line break.
+ this.result += "\n".repeat(didReadContent ? 1 + emptyLines : emptyLines);
+ }
+ didReadContent = true;
+ detectedIndent = true;
+ emptyLines = 0;
+ const captureStart = this.position;
+ while(!isEOL(ch) && ch !== 0){
+ ch = this.next();
+ }
+ this.captureSegment(captureStart, this.position, false);
+ }
+ return true;
+ }
+ readBlockMapping(nodeIndent, flowIndent) {
+ const tag = this.tag;
+ const anchor = this.anchor;
+ const result = {};
+ const overridableKeys = new Set();
+ let allowCompact = false;
+ let line;
+ let pos;
+ let keyTag = null;
+ let keyNode = null;
+ let valueNode = null;
+ let atExplicitKey = false;
+ let detected = false;
+ if (this.anchor !== null && typeof this.anchor !== "undefined") {
+ this.anchorMap.set(this.anchor, result);
+ }
+ let ch = this.peek();
+ while(ch !== 0){
+ const following = this.peek(1);
+ line = this.line; // Save the current line.
+ pos = this.position;
+ //
+ // Explicit notation case. There are two separate blocks:
+ // first for the key (denoted by "?") and second for the value (denoted by ":")
+ //
+ if ((ch === QUESTION || ch === COLON) && isWhiteSpaceOrEOL(following)) {
+ if (ch === QUESTION) {
+ if (atExplicitKey) {
+ this.storeMappingPair(result, overridableKeys, keyTag, keyNode, null);
+ keyTag = null;
+ keyNode = null;
+ valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = true;
+ allowCompact = true;
+ } else if (atExplicitKey) {
+ // i.e. 0x3A/* : */ === character after the explicit key.
+ atExplicitKey = false;
+ allowCompact = true;
+ } else {
+ throw this.#createError("Cannot read block as explicit mapping pair is incomplete: a key node is missed or followed by a non-tabulated empty line");
+ }
+ this.position += 1;
+ ch = following;
+ //
+ // Implicit notation case. Flow-style node as the key first, then ":", and the value.
+ //
+ } else if (this.composeNode(flowIndent, CONTEXT_FLOW_OUT, false, true)) {
+ if (this.line === line) {
+ ch = this.peek();
+ this.skipWhitespaces();
+ ch = this.peek();
+ if (ch === COLON) {
+ ch = this.next();
+ if (!isWhiteSpaceOrEOL(ch)) {
+ throw this.#createError("Cannot read block: a whitespace character is expected after the key-value separator within a block mapping");
+ }
+ if (atExplicitKey) {
+ this.storeMappingPair(result, overridableKeys, keyTag, keyNode, null);
+ keyTag = null;
+ keyNode = null;
+ valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = false;
+ allowCompact = false;
+ keyTag = this.tag;
+ keyNode = this.result;
+ } else if (detected) {
+ throw this.#createError("Cannot read an implicit mapping pair: missing colon");
+ } else {
+ this.tag = tag;
+ this.anchor = anchor;
+ return true; // Keep the result of `composeNode`.
+ }
+ } else if (detected) {
+ throw this.#createError("Cannot read a block mapping entry: a multiline key may not be an implicit key");
+ } else {
+ this.tag = tag;
+ this.anchor = anchor;
+ return true; // Keep the result of `composeNode`.
+ }
+ } else {
+ break; // Reading is done. Go to the epilogue.
+ }
+ //
+ // Common reading code for both explicit and implicit notations.
+ //
+ if (this.line === line || this.lineIndent > nodeIndent) {
+ if (this.composeNode(nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
+ if (atExplicitKey) {
+ keyNode = this.result;
+ } else {
+ valueNode = this.result;
+ }
+ }
+ if (!atExplicitKey) {
+ this.storeMappingPair(result, overridableKeys, keyTag, keyNode, valueNode, line, pos);
+ keyTag = keyNode = valueNode = null;
+ }
+ this.skipSeparationSpace(true, -1);
+ ch = this.peek();
+ }
+ if (this.lineIndent > nodeIndent && ch !== 0) {
+ throw this.#createError("Cannot read block: bad indentation of a mapping entry");
+ } else if (this.lineIndent < nodeIndent) {
+ break;
+ }
+ }
+ //
+ // Epilogue.
+ //
+ // Special case: last mapping's node contains only the key in explicit notation.
+ if (atExplicitKey) {
+ this.storeMappingPair(result, overridableKeys, keyTag, keyNode, null);
+ }
+ // Expose the resulting mapping.
+ if (detected) {
+ this.tag = tag;
+ this.anchor = anchor;
+ this.kind = "mapping";
+ this.result = result;
+ }
+ return detected;
+ }
+ readTagProperty() {
+ let isVerbatim = false;
+ let isNamed = false;
+ let tagHandle = "";
+ let tagName;
+ let ch = this.peek();
+ if (ch !== EXCLAMATION) return false;
+ if (this.tag !== null) {
+ throw this.#createError("Cannot read tag property: duplication of a tag property");
+ }
+ ch = this.next();
+ if (ch === SMALLER_THAN) {
+ isVerbatim = true;
+ ch = this.next();
+ } else if (ch === EXCLAMATION) {
+ isNamed = true;
+ tagHandle = "!!";
+ ch = this.next();
+ } else {
+ tagHandle = "!";
+ }
+ let position = this.position;
+ if (isVerbatim) {
+ do {
+ ch = this.next();
+ }while (ch !== 0 && ch !== GREATER_THAN)
+ if (this.position < this.length) {
+ tagName = this.input.slice(position, this.position);
+ ch = this.next();
+ } else {
+ throw this.#createError("Cannot read tag property: unexpected end of stream");
+ }
+ } else {
+ while(ch !== 0 && !isWhiteSpaceOrEOL(ch)){
+ if (ch === EXCLAMATION) {
+ if (!isNamed) {
+ tagHandle = this.input.slice(position - 1, this.position + 1);
+ if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
+ throw this.#createError("Cannot read tag property: named tag handle contains invalid characters");
+ }
+ isNamed = true;
+ position = this.position + 1;
+ } else {
+ throw this.#createError("Cannot read tag property: tag suffix cannot contain an exclamation mark");
+ }
+ }
+ ch = this.next();
+ }
+ tagName = this.input.slice(position, this.position);
+ if (PATTERN_FLOW_INDICATORS.test(tagName)) {
+ throw this.#createError("Cannot read tag property: tag suffix cannot contain flow indicator characters");
+ }
+ }
+ if (tagName && !PATTERN_TAG_URI.test(tagName)) {
+ throw this.#createError(`Cannot read tag property: invalid characters in tag name "${tagName}"`);
+ }
+ if (isVerbatim) {
+ this.tag = tagName;
+ } else if (this.tagMap.has(tagHandle)) {
+ this.tag = this.tagMap.get(tagHandle) + tagName;
+ } else if (tagHandle === "!") {
+ this.tag = `!${tagName}`;
+ } else if (tagHandle === "!!") {
+ this.tag = `tag:yaml.org,2002:${tagName}`;
+ } else {
+ throw this.#createError(`Cannot read tag property: undeclared tag handle "${tagHandle}"`);
+ }
+ return true;
+ }
+ readAnchorProperty() {
+ let ch = this.peek();
+ if (ch !== AMPERSAND) return false;
+ if (this.anchor !== null) {
+ throw this.#createError("Cannot read anchor property: duplicate anchor property");
+ }
+ ch = this.next();
+ const position = this.position;
+ while(ch !== 0 && !isWhiteSpaceOrEOL(ch) && !isFlowIndicator(ch)){
+ ch = this.next();
+ }
+ if (this.position === position) {
+ throw this.#createError("Cannot read anchor property: name of an anchor node must contain at least one character");
+ }
+ this.anchor = this.input.slice(position, this.position);
+ return true;
+ }
+ readAlias() {
+ if (this.peek() !== ASTERISK) return false;
+ let ch = this.next();
+ const position = this.position;
+ while(ch !== 0 && !isWhiteSpaceOrEOL(ch) && !isFlowIndicator(ch)){
+ ch = this.next();
+ }
+ if (this.position === position) {
+ throw this.#createError("Cannot read alias: alias name must contain at least one character");
+ }
+ const alias = this.input.slice(position, this.position);
+ if (!this.anchorMap.has(alias)) {
+ throw this.#createError(`Cannot read alias: unidentified alias "${alias}"`);
+ }
+ this.result = this.anchorMap.get(alias);
+ this.skipSeparationSpace(true, -1);
+ return true;
+ }
+ composeNode(parentIndent, nodeContext, allowToSeek, allowCompact) {
+ let indentStatus = 1; // 1: this>parent, 0: this=parent, -1: this<parent
+ let atNewLine = false;
+ let hasContent = false;
+ let type;
+ this.tag = null;
+ this.anchor = null;
+ this.kind = null;
+ this.result = null;
+ const allowBlockScalars = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;
+ let allowBlockCollections = allowBlockScalars;
+ const allowBlockStyles = allowBlockScalars;
+ if (allowToSeek) {
+ if (this.skipSeparationSpace(true, -1)) {
+ atNewLine = true;
+ if (this.lineIndent > parentIndent) {
+ indentStatus = 1;
+ } else if (this.lineIndent === parentIndent) {
+ indentStatus = 0;
+ } else if (this.lineIndent < parentIndent) {
+ indentStatus = -1;
+ }
+ }
+ }
+ if (indentStatus === 1) {
+ while(this.readTagProperty() || this.readAnchorProperty()){
+ if (this.skipSeparationSpace(true, -1)) {
+ atNewLine = true;
+ allowBlockCollections = allowBlockStyles;
+ if (this.lineIndent > parentIndent) {
+ indentStatus = 1;
+ } else if (this.lineIndent === parentIndent) {
+ indentStatus = 0;
+ } else if (this.lineIndent < parentIndent) {
+ indentStatus = -1;
+ }
+ } else {
+ allowBlockCollections = false;
+ }
+ }
+ }
+ if (allowBlockCollections) {
+ allowBlockCollections = atNewLine || allowCompact;
+ }
+ if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
+ const cond = CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext;
+ const flowIndent = cond ? parentIndent : parentIndent + 1;
+ const blockIndent = this.position - this.lineStart;
+ if (indentStatus === 1) {
+ if (allowBlockCollections && (this.readBlockSequence(blockIndent) || this.readBlockMapping(blockIndent, flowIndent)) || this.readFlowCollection(flowIndent)) {
+ hasContent = true;
+ } else {
+ if (allowBlockScalars && this.readBlockScalar(flowIndent) || this.readSingleQuotedScalar(flowIndent) || this.readDoubleQuotedScalar(flowIndent)) {
+ hasContent = true;
+ } else if (this.readAlias()) {
+ hasContent = true;
+ if (this.tag !== null || this.anchor !== null) {
+ throw this.#createError("Cannot compose node: alias node should not have any properties");
+ }
+ } else if (this.readPlainScalar(flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
+ hasContent = true;
+ if (this.tag === null) {
+ this.tag = "?";
+ }
+ }
+ if (this.anchor !== null) {
+ this.anchorMap.set(this.anchor, this.result);
+ }
+ }
+ } else if (indentStatus === 0) {
+ // Special case: block sequences are allowed to have same indentation level as the parent.
+ // http://www.yaml.org/spec/1.2/spec.html#id2799784
+ hasContent = allowBlockCollections && this.readBlockSequence(blockIndent);
+ }
+ }
+ if (this.tag !== null && this.tag !== "!") {
+ if (this.tag === "?") {
+ for(let typeIndex = 0; typeIndex < this.implicitTypes.length; typeIndex++){
+ type = this.implicitTypes[typeIndex];
+ // Implicit resolving is not allowed for non-scalar types, and '?'
+ // non-specific tag is only assigned to plain scalars. So, it isn't
+ // needed to check for 'kind' conformity.
+ if (type.resolve(this.result)) {
+ // `state.result` updated in resolver if matched
+ this.result = type.construct(this.result);
+ this.tag = type.tag;
+ if (this.anchor !== null) {
+ this.anchorMap.set(this.anchor, this.result);
+ }
+ break;
+ }
+ }
+ } else if (this.typeMap[this.kind ?? "fallback"].has(this.tag)) {
+ const map = this.typeMap[this.kind ?? "fallback"];
+ type = map.get(this.tag);
+ if (this.result !== null && type.kind !== this.kind) {
+ throw this.#createError(`Unacceptable node kind for !<${this.tag}> tag: it should be "${type.kind}", not "${this.kind}"`);
+ }
+ if (!type.resolve(this.result)) {
+ // `state.result` updated in resolver if matched
+ throw this.#createError(`Cannot resolve a node with !<${this.tag}> explicit tag`);
+ } else {
+ this.result = type.construct(this.result);
+ if (this.anchor !== null) {
+ this.anchorMap.set(this.anchor, this.result);
+ }
+ }
+ } else {
+ throw this.#createError(`Cannot resolve unknown tag !<${this.tag}>`);
+ }
+ }
+ return this.tag !== null || this.anchor !== null || hasContent;
+ }
+ readDocument() {
+ const documentStart = this.position;
+ let hasDirectives = false;
+ this.version = null;
+ this.checkLineBreaks = false;
+ this.tagMap = new Map();
+ this.anchorMap = new Map();
+ let ch = this.peek();
+ while(ch !== 0){
+ this.skipSeparationSpace(true, -1);
+ ch = this.peek();
+ if (this.lineIndent > 0 || ch !== PERCENT) {
+ break;
+ }
+ hasDirectives = true;
+ ch = this.next();
+ let position = this.position;
+ while(ch !== 0 && !isWhiteSpaceOrEOL(ch)){
+ ch = this.next();
+ }
+ const directiveName = this.input.slice(position, this.position);
+ const directiveArgs = [];
+ if (directiveName.length < 1) {
+ throw this.#createError("Cannot read document: directive name length must be greater than zero");
+ }
+ while(ch !== 0){
+ this.skipWhitespaces();
+ this.skipComment();
+ ch = this.peek();
+ if (isEOL(ch)) break;
+ position = this.position;
+ while(ch !== 0 && !isWhiteSpaceOrEOL(ch)){
+ ch = this.next();
+ }
+ directiveArgs.push(this.input.slice(position, this.position));
+ }
+ if (ch !== 0) this.readLineBreak();
+ switch(directiveName){
+ case "YAML":
+ this.yamlDirectiveHandler(...directiveArgs);
+ break;
+ case "TAG":
+ this.tagDirectiveHandler(...directiveArgs);
+ break;
+ default:
+ this.dispatchWarning(`unknown document directive "${directiveName}"`);
+ break;
+ }
+ ch = this.peek();
+ }
+ this.skipSeparationSpace(true, -1);
+ if (this.lineIndent === 0 && this.peek() === MINUS && this.peek(1) === MINUS && this.peek(2) === MINUS) {
+ this.position += 3;
+ this.skipSeparationSpace(true, -1);
+ } else if (hasDirectives) {
+ throw this.#createError("Cannot read document: directives end mark is expected");
+ }
+ this.composeNode(this.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
+ this.skipSeparationSpace(true, -1);
+ if (this.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(this.input.slice(documentStart, this.position))) {
+ this.dispatchWarning("non-ASCII line breaks are interpreted as content");
+ }
+ if (this.position === this.lineStart && this.testDocumentSeparator()) {
+ if (this.peek() === DOT) {
+ this.position += 3;
+ this.skipSeparationSpace(true, -1);
+ }
+ } else if (this.position < this.length - 1) {
+ throw this.#createError("Cannot read document: end of the stream or a document separator is expected");
+ }
+ return this.result;
+ }
+ *readDocuments() {
+ while(this.position < this.length - 1){
+ yield this.readDocument();
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fbG9hZGVyX3N0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7XG4gIEFNUEVSU0FORCxcbiAgQVNURVJJU0ssXG4gIEJBQ0tTTEFTSCxcbiAgQ0FSUklBR0VfUkVUVVJOLFxuICBDT0xPTixcbiAgQ09NTUEsXG4gIENPTU1FUkNJQUxfQVQsXG4gIERPVCxcbiAgRE9VQkxFX1FVT1RFLFxuICBFWENMQU1BVElPTixcbiAgR1JBVkVfQUNDRU5ULFxuICBHUkVBVEVSX1RIQU4sXG4gIGlzRU9MLFxuICBpc0Zsb3dJbmRpY2F0b3IsXG4gIGlzV2hpdGVTcGFjZSxcbiAgaXNXaGl0ZVNwYWNlT3JFT0wsXG4gIExFRlRfQ1VSTFlfQlJBQ0tFVCxcbiAgTEVGVF9TUVVBUkVfQlJBQ0tFVCxcbiAgTElORV9GRUVELFxuICBNSU5VUyxcbiAgUEVSQ0VOVCxcbiAgUExVUyxcbiAgUVVFU1RJT04sXG4gIFJJR0hUX0NVUkxZX0JSQUNLRVQsXG4gIFJJR0hUX1NRVUFSRV9CUkFDS0VULFxuICBTSEFSUCxcbiAgU0lOR0xFX1FVT1RFLFxuICBTTUFMTEVSX1RIQU4sXG4gIFNQQUNFLFxuICBWRVJUSUNBTF9MSU5FLFxufSBmcm9tIFwiLi9fY2hhcnMudHNcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9TQ0hFTUEsIHR5cGUgU2NoZW1hLCB0eXBlIFR5cGVNYXAgfSBmcm9tIFwiLi9fc2NoZW1hLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEtpbmRUeXBlLCBUeXBlIH0gZnJvbSBcIi4vX3R5cGUudHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIi4vX3V0aWxzLnRzXCI7XG5cbmNvbnN0IENPTlRFWFRfRkxPV19JTiA9IDE7XG5jb25zdCBDT05URVhUX0ZMT1dfT1VUID0gMjtcbmNvbnN0IENPTlRFWFRfQkxPQ0tfSU4gPSAzO1xuY29uc3QgQ09OVEVYVF9CTE9DS19PVVQgPSA0O1xuXG5jb25zdCBDSE9NUElOR19DTElQID0gMTtcbmNvbnN0IENIT01QSU5HX1NUUklQID0gMjtcbmNvbnN0IENIT01QSU5HX0tFRVAgPSAzO1xuXG5jb25zdCBQQVRURVJOX05PTl9QUklOVEFCTEUgPVxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnRyb2wtcmVnZXhcbiAgL1tcXHgwMC1cXHgwOFxceDBCXFx4MENcXHgwRS1cXHgxRlxceDdGLVxceDg0XFx4ODYtXFx4OUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuY29uc3QgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1xceDg1XFx1MjAyOFxcdTIwMjldLztcbmNvbnN0IFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTID0gL1ssXFxbXFxdXFx7XFx9XS87XG5jb25zdCBQQVRURVJOX1RBR19IQU5ETEUgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xuY29uc3QgUEFUVEVSTl9UQUdfVVJJID1cbiAgL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2FkZXJTdGF0ZU9wdGlvbnMge1xuICAvKiogc3BlY2lmaWVzIGEgc2NoZW1hIHRvIHVzZS4gKi9cbiAgc2NoZW1hPzogU2NoZW1hO1xuICAvKiogY29tcGF0aWJpbGl0eSB3aXRoIEpTT04ucGFyc2UgYmVoYXZpb3VyLiAqL1xuICBhbGxvd0R1cGxpY2F0ZUtleXM/OiBib29sZWFuO1xuICAvKiogZnVuY3Rpb24gdG8gY2FsbCBvbiB3YXJuaW5nIG1lc3NhZ2VzLiAqL1xuICBvbldhcm5pbmc/KGVycm9yOiBFcnJvcik6IHZvaWQ7XG59XG5cbmNvbnN0IEVTQ0FQRURfSEVYX0xFTkdUSFMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPihbXG4gIFsweDc4LCAyXSwgLy8geFxuICBbMHg3NSwgNF0sIC8vIHVcbiAgWzB4NTUsIDhdLCAvLyBVXG5dKTtcblxuY29uc3QgU0lNUExFX0VTQ0FQRV9TRVFVRU5DRVMgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPihbXG4gIFsweDMwLCBcIlxceDAwXCJdLCAvLyAwXG4gIFsweDYxLCBcIlxceDA3XCJdLCAvLyBhXG4gIFsweDYyLCBcIlxceDA4XCJdLCAvLyBiXG4gIFsweDc0LCBcIlxceDA5XCJdLCAvLyB0XG4gIFsweDA5LCBcIlxceDA5XCJdLCAvLyBUYWJcbiAgWzB4NmUsIFwiXFx4MEFcIl0sIC8vIG5cbiAgWzB4NzYsIFwiXFx4MEJcIl0sIC8vIHZcbiAgWzB4NjYsIFwiXFx4MENcIl0sIC8vIGZcbiAgWzB4NzIsIFwiXFx4MERcIl0sIC8vIHJcbiAgWzB4NjUsIFwiXFx4MUJcIl0sIC8vIGVcbiAgWzB4MjAsIFwiIFwiXSwgLy8gU3BhY2VcbiAgWzB4MjIsICdcIiddLCAvLyBcIlxuICBbMHgyZiwgXCIvXCJdLCAvLyAvXG4gIFsweDVjLCBcIlxcXFxcIl0sIC8vIFxcXG4gIFsweDRlLCBcIlxceDg1XCJdLCAvLyBOXG4gIFsweDVmLCBcIlxceEEwXCJdLCAvLyBfXG4gIFsweDRjLCBcIlxcdTIwMjhcIl0sIC8vIExcbiAgWzB4NTAsIFwiXFx1MjAyOVwiXSwgLy8gUFxuXSk7XG5cbi8qKlxuICogQ29udmVydHMgYSBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgY29kZSB0byBpdHMgZGVjaW1hbCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGV4Q2hhckNvZGVUb051bWJlcihjaGFyQ29kZTogbnVtYmVyKSB7XG4gIC8vIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgY29kZSBpcyBpbiB0aGUgcmFuZ2UgZm9yICcwJyB0byAnOSdcbiAgaWYgKDB4MzAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgzOSkgcmV0dXJuIGNoYXJDb2RlIC0gMHgzMDsgLy8gQ29udmVydCAnMCctJzknIHRvIDAtOVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgY2hhcmFjdGVyIGNvZGUgdG8gbG93ZXJjYXNlIGlmIGl0J3MgYSBsZXR0ZXJcbiAgY29uc3QgbGMgPSBjaGFyQ29kZSB8IDB4MjA7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGNoYXJhY3RlciBjb2RlIGlzIGluIHRoZSByYW5nZSBmb3IgJ2EnIHRvICdmJ1xuICBpZiAoMHg2MSA8PSBsYyAmJiBsYyA8PSAweDY2KSByZXR1cm4gbGMgLSAweDYxICsgMTA7IC8vIENvbnZlcnQgJ2EnLSdmJyB0byAxMC0xNVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGRlY2ltYWwgY2hhcmFjdGVyIGNvZGUgdG8gaXRzIGRlY2ltYWwgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGRlY2ltYWxDaGFyQ29kZVRvTnVtYmVyKGNoYXJDb2RlOiBudW1iZXIpOiBudW1iZXIge1xuICAvLyBDaGVjayBpZiB0aGUgY2hhcmFjdGVyIGNvZGUgaXMgaW4gdGhlIHJhbmdlIGZvciAnMCcgdG8gJzknXG4gIGlmICgweDMwIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IDB4MzkpIHJldHVybiBjaGFyQ29kZSAtIDB4MzA7IC8vIENvbnZlcnQgJzAnLSc5JyB0byAwLTlcbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBjb2RlIHBvaW50IHRvIGEgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBjb2RlcG9pbnRUb0NoYXIoY29kZXBvaW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAvLyBDaGVjayBpZiB0aGUgY29kZSBwb2ludCBpcyB3aXRoaW4gdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKVxuICBpZiAoY29kZXBvaW50IDw9IDB4ZmZmZikgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZXBvaW50KTsgLy8gQ29udmVydCBCTVAgY29kZSBwb2ludCB0byBjaGFyYWN0ZXJcblxuICAvLyBFbmNvZGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGZvciBjb2RlIHBvaW50cyBiZXlvbmQgQk1QXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2I0NvZGVfcG9pbnRzX1UuMkIwMTAwMDBfdG9fVS4yQjEwRkZGRlxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAoKGNvZGVwb2ludCAtIDB4MDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIC8vIEhpZ2ggc3Vycm9nYXRlXG4gICAgKChjb2RlcG9pbnQgLSAweDAxMDAwMCkgJiAweDAzZmYpICsgMHhkYzAwLCAvLyBMb3cgc3Vycm9nYXRlXG4gICk7XG59XG5cbmNvbnN0IElOREVOVCA9IDQ7XG5jb25zdCBNQVhfTEVOR1RIID0gNzU7XG5jb25zdCBERUxJTUlURVJTID0gXCJcXHgwMFxcclxcblxceDg1XFx1MjAyOFxcdTIwMjlcIjtcblxuZnVuY3Rpb24gZ2V0U25pcHBldChidWZmZXI6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWJ1ZmZlcikgcmV0dXJuIG51bGw7XG4gIGxldCBzdGFydCA9IHBvc2l0aW9uO1xuICBsZXQgZW5kID0gcG9zaXRpb247XG4gIGxldCBoZWFkID0gXCJcIjtcbiAgbGV0IHRhaWwgPSBcIlwiO1xuXG4gIHdoaWxlIChzdGFydCA+IDAgJiYgIURFTElNSVRFUlMuaW5jbHVkZXMoYnVmZmVyLmNoYXJBdChzdGFydCAtIDEpKSkge1xuICAgIHN0YXJ0LS07XG4gICAgaWYgKHBvc2l0aW9uIC0gc3RhcnQgPiBNQVhfTEVOR1RIIC8gMiAtIDEpIHtcbiAgICAgIGhlYWQgPSBcIiAuLi4gXCI7XG4gICAgICBzdGFydCArPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKGVuZCA8IGJ1ZmZlci5sZW5ndGggJiYgIURFTElNSVRFUlMuaW5jbHVkZXMoYnVmZmVyLmNoYXJBdChlbmQpKSkge1xuICAgIGVuZCsrO1xuICAgIGlmIChlbmQgLSBwb3NpdGlvbiA+IE1BWF9MRU5HVEggLyAyIC0gMSkge1xuICAgICAgdGFpbCA9IFwiIC4uLiBcIjtcbiAgICAgIGVuZCAtPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc25pcHBldCA9IGJ1ZmZlci5zbGljZShzdGFydCwgZW5kKTtcbiAgY29uc3QgaW5kZW50ID0gXCIgXCIucmVwZWF0KElOREVOVCk7XG4gIGNvbnN0IGNhcmV0SW5kZW50ID0gXCIgXCIucmVwZWF0KElOREVOVCArIHBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkLmxlbmd0aCk7XG4gIHJldHVybiBgJHtpbmRlbnQgKyBoZWFkICsgc25pcHBldCArIHRhaWx9XFxuJHtjYXJldEluZGVudH1eYDtcbn1cblxuZnVuY3Rpb24gbWFya1RvU3RyaW5nKFxuICBidWZmZXI6IHN0cmluZyxcbiAgcG9zaXRpb246IG51bWJlcixcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbik6IHN0cmluZyB7XG4gIGxldCB3aGVyZSA9IGBhdCBsaW5lICR7bGluZSArIDF9LCBjb2x1bW4gJHtjb2x1bW4gKyAxfWA7XG4gIGNvbnN0IHNuaXBwZXQgPSBnZXRTbmlwcGV0KGJ1ZmZlciwgcG9zaXRpb24pO1xuICBpZiAoc25pcHBldCkgd2hlcmUgKz0gYDpcXG4ke3NuaXBwZXR9YDtcbiAgcmV0dXJuIHdoZXJlO1xufVxuXG5leHBvcnQgY2xhc3MgTG9hZGVyU3RhdGUge1xuICBpbnB1dDogc3RyaW5nO1xuICBsZW5ndGg6IG51bWJlcjtcbiAgbGluZUluZGVudCA9IDA7XG4gIGxpbmVTdGFydCA9IDA7XG4gIHBvc2l0aW9uID0gMDtcbiAgbGluZSA9IDA7XG4gIG9uV2FybmluZzogKChlcnJvcjogRXJyb3IpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBhbGxvd0R1cGxpY2F0ZUtleXM6IGJvb2xlYW47XG4gIGltcGxpY2l0VHlwZXM6IFR5cGU8XCJzY2FsYXJcIj5bXTtcbiAgdHlwZU1hcDogVHlwZU1hcDtcblxuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBjaGVja0xpbmVCcmVha3MgPSBmYWxzZTtcbiAgdGFnTWFwID0gbmV3IE1hcCgpO1xuICBhbmNob3JNYXAgPSBuZXcgTWFwKCk7XG4gIHRhZzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgYW5jaG9yOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBraW5kOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICByZXN1bHQ6IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nIHwgbnVsbCA9IFwiXCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5wdXQ6IHN0cmluZyxcbiAgICB7XG4gICAgICBzY2hlbWEgPSBERUZBVUxUX1NDSEVNQSxcbiAgICAgIG9uV2FybmluZyxcbiAgICAgIGFsbG93RHVwbGljYXRlS2V5cyA9IGZhbHNlLFxuICAgIH06IExvYWRlclN0YXRlT3B0aW9ucyxcbiAgKSB7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMub25XYXJuaW5nID0gb25XYXJuaW5nO1xuICAgIHRoaXMuYWxsb3dEdXBsaWNhdGVLZXlzID0gYWxsb3dEdXBsaWNhdGVLZXlzO1xuICAgIHRoaXMuaW1wbGljaXRUeXBlcyA9IHNjaGVtYS5pbXBsaWNpdFR5cGVzO1xuICAgIHRoaXMudHlwZU1hcCA9IHNjaGVtYS50eXBlTWFwO1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMudmVyc2lvbiA9IG51bGw7XG5cbiAgICB0aGlzLnJlYWRJbmRlbnQoKTtcbiAgfVxuXG4gIHNraXBXaGl0ZXNwYWNlcygpIHtcbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBza2lwQ29tbWVudCgpIHtcbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAoY2ggIT09IFNIQVJQKSByZXR1cm47XG4gICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzRU9MKGNoKSkge1xuICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICByZWFkSW5kZW50KCkge1xuICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG4gICAgd2hpbGUgKGNoYXIgPT09IFNQQUNFKSB7XG4gICAgICB0aGlzLmxpbmVJbmRlbnQgKz0gMTtcbiAgICAgIGNoYXIgPSB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwZWVrKG9mZnNldCA9IDApIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24gKyBvZmZzZXQpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5wb3NpdGlvbiArPSAxO1xuICAgIHJldHVybiB0aGlzLnBlZWsoKTtcbiAgfVxuXG4gICNjcmVhdGVFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiBTeW50YXhFcnJvciB7XG4gICAgY29uc3QgbWFyayA9IG1hcmtUb1N0cmluZyhcbiAgICAgIHRoaXMuaW5wdXQsXG4gICAgICB0aGlzLnBvc2l0aW9uLFxuICAgICAgdGhpcy5saW5lLFxuICAgICAgdGhpcy5wb3NpdGlvbiAtIHRoaXMubGluZVN0YXJ0LFxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihgJHttZXNzYWdlfSAke21hcmt9YCk7XG4gIH1cblxuICBkaXNwYXRjaFdhcm5pbmcobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLiNjcmVhdGVFcnJvcihtZXNzYWdlKTtcbiAgICB0aGlzLm9uV2FybmluZz8uKGVycm9yKTtcbiAgfVxuXG4gIHlhbWxEaXJlY3RpdmVIYW5kbGVyKC4uLmFyZ3M6IHN0cmluZ1tdKSB7XG4gICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGhhbmRsZSBZQU1MIGRpcmVjdGl2ZTogZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGhhbmRsZSBZQU1MIGRpcmVjdGl2ZTogWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC9eKFswLTldKylcXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSEpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGhhbmRsZSBZQU1MIGRpcmVjdGl2ZTogaWxsLWZvcm1lZCBhcmd1bWVudFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdISwgMTApO1xuICAgIGNvbnN0IG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0hLCAxMCk7XG4gICAgaWYgKG1ham9yICE9PSAxKSB7XG4gICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgaGFuZGxlIFlBTUwgZGlyZWN0aXZlOiB1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudmVyc2lvbiA9IGFyZ3NbMF0gPz8gbnVsbDtcbiAgICB0aGlzLmNoZWNrTGluZUJyZWFrcyA9IG1pbm9yIDwgMjtcbiAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoV2FybmluZyhcbiAgICAgICAgXCJDYW5ub3QgaGFuZGxlIFlBTUwgZGlyZWN0aXZlOiB1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb25cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRhZ0RpcmVjdGl2ZUhhbmRsZXIoLi4uYXJnczogc3RyaW5nW10pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICBgQ2Fubm90IGhhbmRsZSB0YWcgZGlyZWN0aXZlOiBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMsIHJlY2VpdmVkICR7YXJncy5sZW5ndGh9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlID0gYXJnc1swXSE7XG4gICAgY29uc3QgcHJlZml4ID0gYXJnc1sxXSE7XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICBgQ2Fubm90IGhhbmRsZSB0YWcgZGlyZWN0aXZlOiBpbGwtZm9ybWVkIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIGluIFwiJHtoYW5kbGV9XCJgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWdNYXAuaGFzKGhhbmRsZSkpIHtcbiAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICBgQ2Fubm90IGhhbmRsZSB0YWcgZGlyZWN0aXZlOiBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgXCIke2hhbmRsZX1cIiB0YWcgaGFuZGxlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFQQVRURVJOX1RBR19VUkkudGVzdChwcmVmaXgpKSB7XG4gICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgaGFuZGxlIHRhZyBkaXJlY3RpdmU6IGlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhZ01hcC5zZXQoaGFuZGxlLCBwcmVmaXgpO1xuICB9XG4gIGNhcHR1cmVTZWdtZW50KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBjaGVja0pzb246IGJvb2xlYW4pIHtcbiAgICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICAgIGlmIChjaGVja0pzb24pIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgICAgIHBvc2l0aW9uIDwgcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICBwb3NpdGlvbisrXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNoYXJhY3RlciA9IHJlc3VsdC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKGNoYXJhY3RlciA9PT0gMHgwOSB8fFxuICAgICAgICAgICAgICAoMHgyMCA8PSBjaGFyYWN0ZXIgJiYgY2hhcmFjdGVyIDw9IDB4MTBmZmZmKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXI6IHJlY2VpdmVkIFwiJHtjaGFyYWN0ZXJ9XCJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoUEFUVEVSTl9OT05fUFJJTlRBQkxFLnRlc3QocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcIlN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnNcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzdWx0ICs9IHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmVhZEJsb2NrU2VxdWVuY2Uobm9kZUluZGVudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgbGV0IGRldGVjdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB0YWcgPSB0aGlzLnRhZztcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvcjtcbiAgICBjb25zdCByZXN1bHQ6IHVua25vd25bXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuYW5jaG9yICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmFuY2hvciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5hbmNob3JNYXAuc2V0KHRoaXMuYW5jaG9yLCByZXN1bHQpO1xuICAgIH1cblxuICAgIGxldCBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgICBpZiAoY2ggIT09IE1JTlVTKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb2xsb3dpbmcgPSB0aGlzLnBlZWsoMSk7XG5cbiAgICAgIGlmICghaXNXaGl0ZVNwYWNlT3JFT0woZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5wb3NpdGlvbisrO1xuXG4gICAgICBpZiAodGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKHRydWUsIC0xKSkge1xuICAgICAgICBpZiAodGhpcy5saW5lSW5kZW50IDw9IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChudWxsKTtcbiAgICAgICAgICBjaCA9IHRoaXMucGVlaygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmU7XG4gICAgICB0aGlzLmNvbXBvc2VOb2RlKG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMucmVzdWx0KTtcbiAgICAgIHRoaXMuc2tpcFNlcGFyYXRpb25TcGFjZSh0cnVlLCAtMSk7XG5cbiAgICAgIGNoID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmICgodGhpcy5saW5lID09PSBsaW5lIHx8IHRoaXMubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIGNoICE9PSAwKSB7XG4gICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJlYWQgYmxvY2sgc2VxdWVuY2U6IGJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5XCIsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRldGVjdGVkKSB7XG4gICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yO1xuICAgICAgdGhpcy5raW5kID0gXCJzZXF1ZW5jZVwiO1xuICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1lcmdlTWFwcGluZ3MoXG4gICAgZGVzdGluYXRpb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNvdXJjZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgb3ZlcnJpZGFibGVLZXlzOiBTZXQ8c3RyaW5nPixcbiAgKSB7XG4gICAgaWYgKCFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgbWVyZ2UgbWFwcGluZ3M6IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihkZXN0aW5hdGlvbiwga2V5KSkgY29udGludWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVzdGluYXRpb24sIGtleSwge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgb3ZlcnJpZGFibGVLZXlzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxuICBzdG9yZU1hcHBpbmdQYWlyKFxuICAgIHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgb3ZlcnJpZGFibGVLZXlzOiBTZXQ8c3RyaW5nPixcbiAgICBrZXlUYWc6IHN0cmluZyB8IG51bGwsXG4gICAga2V5Tm9kZTogUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPiB8IHVua25vd25bXSB8IHN0cmluZyB8IG51bGwsXG4gICAgdmFsdWVOb2RlOiB1bmtub3duLFxuICAgIHN0YXJ0TGluZT86IG51bWJlcixcbiAgICBzdGFydFBvcz86IG51bWJlcixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIC8vIFRoZSBvdXRwdXQgaXMgYSBwbGFpbiBvYmplY3QgaGVyZSwgc28ga2V5cyBjYW4gb25seSBiZSBzdHJpbmdzLlxuICAgIC8vIFdlIG5lZWQgdG8gY29udmVydCBrZXlOb2RlIHRvIGEgc3RyaW5nLCBidXQgZG9pbmcgc28gY2FuIGhhbmcgdGhlIHByb2Nlc3NcbiAgICAvLyAoZGVlcGx5IG5lc3RlZCBhcnJheXMgdGhhdCBleHBsb2RlIGV4cG9uZW50aWFsbHkgdXNpbmcgYWxpYXNlcykuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHtcbiAgICAgIGtleU5vZGUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrZXlOb2RlKTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGtleU5vZGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGVbaW5kZXhdKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3Qgc3RvcmUgbWFwcGluZyBwYWlyOiBuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gXCJvYmplY3RcIiAmJiBpc1BsYWluT2JqZWN0KGtleU5vZGVbaW5kZXhdKSkge1xuICAgICAgICAgIGtleU5vZGVbaW5kZXhdID0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEF2b2lkIGNvZGUgZXhlY3V0aW9uIGluIGxvYWQoKSB2aWEgdG9TdHJpbmcgcHJvcGVydHlcbiAgICAvLyAoc3RpbGwgdXNlIGl0cyBvd24gdG9TdHJpbmcgZm9yIGFycmF5cywgdGltZXN0YW1wcyxcbiAgICAvLyBhbmQgd2hhdGV2ZXIgdXNlciBzY2hlbWEgZXh0ZW5zaW9ucyBoYXBwZW4gdG8gaGF2ZSBAQHRvU3RyaW5nVGFnKVxuICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gXCJvYmplY3RcIiAmJiBpc1BsYWluT2JqZWN0KGtleU5vZGUpKSB7XG4gICAgICBrZXlOb2RlID0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbiAgICB9XG5cbiAgICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpO1xuXG4gICAgaWYgKGtleVRhZyA9PT0gXCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZVwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZU5vZGUpKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICBpbmRleCA8IHZhbHVlTm9kZS5sZW5ndGg7XG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm1lcmdlTWFwcGluZ3MocmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1lcmdlTWFwcGluZ3MoXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHZhbHVlTm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICBvdmVycmlkYWJsZUtleXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuYWxsb3dEdXBsaWNhdGVLZXlzICYmXG4gICAgICAgICFvdmVycmlkYWJsZUtleXMuaGFzKGtleU5vZGUpICYmXG4gICAgICAgIE9iamVjdC5oYXNPd24ocmVzdWx0LCBrZXlOb2RlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGluZSA9IHN0YXJ0TGluZSB8fCB0aGlzLmxpbmU7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBzdGFydFBvcyB8fCB0aGlzLnBvc2l0aW9uO1xuICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcIkNhbm5vdCBzdG9yZSBtYXBwaW5nIHBhaXI6IGR1cGxpY2F0ZWQga2V5XCIpO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwga2V5Tm9kZSwge1xuICAgICAgICB2YWx1ZTogdmFsdWVOb2RlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBvdmVycmlkYWJsZUtleXMuZGVsZXRlKGtleU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmVhZExpbmVCcmVhaygpIHtcbiAgICBjb25zdCBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgaWYgKGNoID09PSBMSU5FX0ZFRUQpIHtcbiAgICAgIHRoaXMucG9zaXRpb24rKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBDQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgIHRoaXMucG9zaXRpb24rKztcbiAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gTElORV9GRUVEKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24rKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5lOiBsaW5lIGJyZWFrIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpbmUgKz0gMTtcbiAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zaXRpb247XG4gIH1cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShhbGxvd0NvbW1lbnRzOiBib29sZWFuLCBjaGVja0luZGVudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbGluZUJyZWFrcyA9IDA7XG4gICAgbGV0IGNoID0gdGhpcy5wZWVrKCk7XG5cbiAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2VzKCk7XG4gICAgICBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoYWxsb3dDb21tZW50cykge1xuICAgICAgICB0aGlzLnNraXBDb21tZW50KCk7XG4gICAgICAgIGNoID0gdGhpcy5wZWVrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0VPTChjaCkpIHtcbiAgICAgICAgdGhpcy5yZWFkTGluZUJyZWFrKCk7XG5cbiAgICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICAgICAgbGluZUJyZWFrcysrO1xuICAgICAgICB0aGlzLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICAgIHRoaXMucmVhZEluZGVudCgpO1xuICAgICAgICBjaCA9IHRoaXMucGVlaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hlY2tJbmRlbnQgIT09IC0xICYmXG4gICAgICBsaW5lQnJlYWtzICE9PSAwICYmXG4gICAgICB0aGlzLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudFxuICAgICkge1xuICAgICAgdGhpcy5kaXNwYXRjaFdhcm5pbmcoXCJkZWZpY2llbnQgaW5kZW50YXRpb25cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVCcmVha3M7XG4gIH1cbiAgdGVzdERvY3VtZW50U2VwYXJhdG9yKCk6IGJvb2xlYW4ge1xuICAgIGxldCBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgLy8gQ29uZGl0aW9uIHRoaXMucG9zaXRpb24gPT09IHRoaXMubGluZVN0YXJ0IGlzIHRlc3RlZFxuICAgIC8vIGluIHBhcmVudCBvbiBlYWNoIGNhbGwsIGZvciBlZmZpY2llbmN5LiBObyBuZWVkcyB0byB0ZXN0IGhlcmUgYWdhaW4uXG4gICAgaWYgKFxuICAgICAgKGNoID09PSBNSU5VUyB8fCBjaCA9PT0gRE9UKSAmJlxuICAgICAgY2ggPT09IHRoaXMucGVlaygxKSAmJlxuICAgICAgY2ggPT09IHRoaXMucGVlaygyKVxuICAgICkge1xuICAgICAgY2ggPSB0aGlzLnBlZWsoMyk7XG5cbiAgICAgIGlmIChjaCA9PT0gMCB8fCBpc1doaXRlU3BhY2VPckVPTChjaCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHdyaXRlRm9sZGVkTGluZXMoY291bnQ6IG51bWJlcikge1xuICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgdGhpcy5yZXN1bHQgKz0gXCIgXCI7XG4gICAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICAgIHRoaXMucmVzdWx0ICs9IFwiXFxuXCIucmVwZWF0KGNvdW50IC0gMSk7XG4gICAgfVxuICB9XG4gIHJlYWRQbGFpblNjYWxhcihub2RlSW5kZW50OiBudW1iZXIsIHdpdGhpbkZsb3dDb2xsZWN0aW9uOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2luZCA9IHRoaXMua2luZDtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdDtcbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgIGlmIChcbiAgICAgIGlzV2hpdGVTcGFjZU9yRU9MKGNoKSB8fFxuICAgICAgaXNGbG93SW5kaWNhdG9yKGNoKSB8fFxuICAgICAgY2ggPT09IFNIQVJQIHx8XG4gICAgICBjaCA9PT0gQU1QRVJTQU5EIHx8XG4gICAgICBjaCA9PT0gQVNURVJJU0sgfHxcbiAgICAgIGNoID09PSBFWENMQU1BVElPTiB8fFxuICAgICAgY2ggPT09IFZFUlRJQ0FMX0xJTkUgfHxcbiAgICAgIGNoID09PSBHUkVBVEVSX1RIQU4gfHxcbiAgICAgIGNoID09PSBTSU5HTEVfUVVPVEUgfHxcbiAgICAgIGNoID09PSBET1VCTEVfUVVPVEUgfHxcbiAgICAgIGNoID09PSBQRVJDRU5UIHx8XG4gICAgICBjaCA9PT0gQ09NTUVSQ0lBTF9BVCB8fFxuICAgICAgY2ggPT09IEdSQVZFX0FDQ0VOVFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBmb2xsb3dpbmc6IG51bWJlcjtcbiAgICBpZiAoY2ggPT09IFFVRVNUSU9OIHx8IGNoID09PSBNSU5VUykge1xuICAgICAgZm9sbG93aW5nID0gdGhpcy5wZWVrKDEpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGlzV2hpdGVTcGFjZU9yRU9MKGZvbGxvd2luZykgfHxcbiAgICAgICAgKHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzRmxvd0luZGljYXRvcihmb2xsb3dpbmcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmtpbmQgPSBcInNjYWxhclwiO1xuICAgIHRoaXMucmVzdWx0ID0gXCJcIjtcbiAgICBsZXQgY2FwdHVyZUVuZCA9IHRoaXMucG9zaXRpb247XG4gICAgbGV0IGNhcHR1cmVTdGFydCA9IHRoaXMucG9zaXRpb247XG4gICAgbGV0IGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG4gICAgbGV0IGxpbmUgPSAwO1xuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgaWYgKGNoID09PSBDT0xPTikge1xuICAgICAgICBmb2xsb3dpbmcgPSB0aGlzLnBlZWsoMSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzV2hpdGVTcGFjZU9yRU9MKGZvbGxvd2luZykgfHxcbiAgICAgICAgICAod2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNGbG93SW5kaWNhdG9yKGZvbGxvd2luZykpXG4gICAgICAgICkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSBTSEFSUCkge1xuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSB0aGlzLnBlZWsoLTEpO1xuXG4gICAgICAgIGlmIChpc1doaXRlU3BhY2VPckVPTChwcmVjZWRpbmcpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh0aGlzLnBvc2l0aW9uID09PSB0aGlzLmxpbmVTdGFydCAmJiB0aGlzLnRlc3REb2N1bWVudFNlcGFyYXRvcigpKSB8fFxuICAgICAgICAod2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNGbG93SW5kaWNhdG9yKGNoKSlcbiAgICAgICkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoaXNFT0woY2gpKSB7XG4gICAgICAgIGxpbmUgPSB0aGlzLmxpbmU7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydCA9IHRoaXMubGluZVN0YXJ0O1xuICAgICAgICBjb25zdCBsaW5lSW5kZW50ID0gdGhpcy5saW5lSW5kZW50O1xuICAgICAgICB0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UoZmFsc2UsIC0xKTtcblxuICAgICAgICBpZiAodGhpcy5saW5lSW5kZW50ID49IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gY2FwdHVyZUVuZDtcbiAgICAgICAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICAgIHRoaXMubGluZUluZGVudCA9IGxpbmVJbmRlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZVNlZ21lbnQoY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gICAgICAgIHRoaXMud3JpdGVGb2xkZWRMaW5lcyh0aGlzLmxpbmUgLSBsaW5lKTtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHRoaXMucG9zaXRpb247XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICBjYXB0dXJlRW5kID0gdGhpcy5wb3NpdGlvbiArIDE7XG4gICAgICB9XG5cbiAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5jYXB0dXJlU2VnbWVudChjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICAgIGlmICh0aGlzLnJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5raW5kID0ga2luZDtcbiAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihub2RlSW5kZW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgIGlmIChjaCAhPT0gU0lOR0xFX1FVT1RFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5raW5kID0gXCJzY2FsYXJcIjtcbiAgICB0aGlzLnJlc3VsdCA9IFwiXCI7XG4gICAgdGhpcy5wb3NpdGlvbisrO1xuICAgIGxldCBjYXB0dXJlU3RhcnQgPSB0aGlzLnBvc2l0aW9uO1xuICAgIGxldCBjYXB0dXJlRW5kID0gdGhpcy5wb3NpdGlvbjtcblxuICAgIGNoID0gdGhpcy5wZWVrKCk7XG4gICAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgICBpZiAoY2ggPT09IFNJTkdMRV9RVU9URSkge1xuICAgICAgICB0aGlzLmNhcHR1cmVTZWdtZW50KGNhcHR1cmVTdGFydCwgdGhpcy5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGNoID09PSBTSU5HTEVfUVVPVEUpIHtcbiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgICAgIHRoaXMucG9zaXRpb24rKztcbiAgICAgICAgICBjYXB0dXJlRW5kID0gdGhpcy5wb3NpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0VPTChjaCkpIHtcbiAgICAgICAgdGhpcy5jYXB0dXJlU2VnbWVudChjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgICB0aGlzLndyaXRlRm9sZGVkTGluZXModGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9PT0gdGhpcy5saW5lU3RhcnQgJiZcbiAgICAgICAgdGhpcy50ZXN0RG9jdW1lbnRTZXBhcmF0b3IoKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgIFwiVW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyXCIsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICB9XG5cbiAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgIFwiVW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhclwiLFxuICAgICk7XG4gIH1cbiAgcmVhZERvdWJsZVF1b3RlZFNjYWxhcihub2RlSW5kZW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgIGlmIChjaCAhPT0gRE9VQkxFX1FVT1RFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5raW5kID0gXCJzY2FsYXJcIjtcbiAgICB0aGlzLnJlc3VsdCA9IFwiXCI7XG4gICAgdGhpcy5wb3NpdGlvbisrO1xuICAgIGxldCBjYXB0dXJlRW5kID0gdGhpcy5wb3NpdGlvbjtcbiAgICBsZXQgY2FwdHVyZVN0YXJ0ID0gdGhpcy5wb3NpdGlvbjtcbiAgICBsZXQgdG1wOiBudW1iZXI7XG4gICAgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgIGlmIChjaCA9PT0gRE9VQkxFX1FVT1RFKSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZVNlZ21lbnQoY2FwdHVyZVN0YXJ0LCB0aGlzLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbisrO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gQkFDS1NMQVNIKSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZVNlZ21lbnQoY2FwdHVyZVN0YXJ0LCB0aGlzLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgICAgY2ggPSB0aGlzLm5leHQoKTtcblxuICAgICAgICBpZiAoaXNFT0woY2gpKSB7XG4gICAgICAgICAgdGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKGZhbHNlLCBub2RlSW5kZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA8IDI1NiAmJiBTSU1QTEVfRVNDQVBFX1NFUVVFTkNFUy5oYXMoY2gpKSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHQgKz0gU0lNUExFX0VTQ0FQRV9TRVFVRU5DRVMuZ2V0KGNoKTtcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IEVTQ0FQRURfSEVYX0xFTkdUSFMuZ2V0KGNoKSA/PyAwKSA+IDApIHtcbiAgICAgICAgICBsZXQgaGV4TGVuZ3RoID0gdG1wO1xuICAgICAgICAgIGxldCBoZXhSZXN1bHQgPSAwO1xuXG4gICAgICAgICAgZm9yICg7IGhleExlbmd0aCA+IDA7IGhleExlbmd0aC0tKSB7XG4gICAgICAgICAgICBjaCA9IHRoaXMubmV4dCgpO1xuXG4gICAgICAgICAgICBpZiAoKHRtcCA9IGhleENoYXJDb2RlVG9OdW1iZXIoY2gpKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNhbm5vdCByZWFkIGRvdWJsZSBxdW90ZWQgc2NhbGFyOiBleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJcIixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlc3VsdCArPSBjb2RlcG9pbnRUb0NoYXIoaGV4UmVzdWx0KTtcblxuICAgICAgICAgIHRoaXMucG9zaXRpb24rKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IHJlYWQgZG91YmxlIHF1b3RlZCBzY2FsYXI6IHVua25vd24gZXNjYXBlIHNlcXVlbmNlXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgfSBlbHNlIGlmIChpc0VPTChjaCkpIHtcbiAgICAgICAgdGhpcy5jYXB0dXJlU2VnbWVudChjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgICB0aGlzLndyaXRlRm9sZGVkTGluZXModGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9PT0gdGhpcy5saW5lU3RhcnQgJiZcbiAgICAgICAgdGhpcy50ZXN0RG9jdW1lbnRTZXBhcmF0b3IoKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgIFwiVW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyXCIsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICB9XG5cbiAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgIFwiVW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhclwiLFxuICAgICk7XG4gIH1cbiAgcmVhZEZsb3dDb2xsZWN0aW9uKG5vZGVJbmRlbnQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGxldCBjaCA9IHRoaXMucGVlaygpO1xuICAgIGxldCB0ZXJtaW5hdG9yOiBudW1iZXI7XG4gICAgbGV0IGlzTWFwcGluZyA9IHRydWU7XG4gICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgIGlmIChjaCA9PT0gTEVGVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgdGVybWluYXRvciA9IFJJR0hUX1NRVUFSRV9CUkFDS0VUO1xuICAgICAgaXNNYXBwaW5nID0gZmFsc2U7XG4gICAgICByZXN1bHQgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBMRUZUX0NVUkxZX0JSQUNLRVQpIHtcbiAgICAgIHRlcm1pbmF0b3IgPSBSSUdIVF9DVVJMWV9CUkFDS0VUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYW5jaG9yICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmFuY2hvciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5hbmNob3JNYXAuc2V0KHRoaXMuYW5jaG9yLCByZXN1bHQpO1xuICAgIH1cblxuICAgIGNoID0gdGhpcy5uZXh0KCk7XG5cbiAgICBjb25zdCB0YWcgPSB0aGlzLnRhZztcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvcjtcbiAgICBsZXQgcmVhZE5leHQgPSB0cnVlO1xuICAgIGxldCB2YWx1ZU5vZGUgPSBudWxsO1xuICAgIGxldCBrZXlOb2RlID0gbnVsbDtcbiAgICBsZXQga2V5VGFnOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTtcbiAgICBsZXQgaXNQYWlyID0gZmFsc2U7XG4gICAgbGV0IGZvbGxvd2luZyA9IDA7XG4gICAgbGV0IGxpbmUgPSAwO1xuICAgIGNvbnN0IG92ZXJyaWRhYmxlS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgdGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgICBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoY2ggPT09IHRlcm1pbmF0b3IpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbisrO1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XG4gICAgICAgIHRoaXMua2luZCA9IGlzTWFwcGluZyA/IFwibWFwcGluZ1wiIDogXCJzZXF1ZW5jZVwiO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlYWROZXh0KSB7XG4gICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJlYWQgZmxvdyBjb2xsZWN0aW9uOiBtaXNzaW5nIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXNcIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlO1xuXG4gICAgICBpZiAoY2ggPT09IFFVRVNUSU9OKSB7XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMucGVlaygxKTtcblxuICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlT3JFT0woZm9sbG93aW5nKSkge1xuICAgICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7XG4gICAgICAgICAgdGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpbmUgPSB0aGlzLmxpbmU7XG4gICAgICB0aGlzLmNvbXBvc2VOb2RlKG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgICAga2V5VGFnID0gdGhpcy50YWcgfHwgbnVsbDtcbiAgICAgIGtleU5vZGUgPSB0aGlzLnJlc3VsdDtcbiAgICAgIHRoaXMuc2tpcFNlcGFyYXRpb25TcGFjZSh0cnVlLCBub2RlSW5kZW50KTtcblxuICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgICAgaWYgKChpc0V4cGxpY2l0UGFpciB8fCB0aGlzLmxpbmUgPT09IGxpbmUpICYmIGNoID09PSBDT0xPTikge1xuICAgICAgICBpc1BhaXIgPSB0cnVlO1xuICAgICAgICBjaCA9IHRoaXMubmV4dCgpO1xuICAgICAgICB0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UodHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICAgIHRoaXMuY29tcG9zZU5vZGUobm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIHZhbHVlTm9kZSA9IHRoaXMucmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXBwaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmVNYXBwaW5nUGFpcihcbiAgICAgICAgICByZXN1bHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLFxuICAgICAgICAgIGtleVRhZyxcbiAgICAgICAgICBrZXlOb2RlLFxuICAgICAgICAgIHZhbHVlTm9kZSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICAgIChyZXN1bHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSkucHVzaChcbiAgICAgICAgICB0aGlzLnN0b3JlTWFwcGluZ1BhaXIoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIG92ZXJyaWRhYmxlS2V5cyxcbiAgICAgICAgICAgIGtleVRhZyxcbiAgICAgICAgICAgIGtleU5vZGUsXG4gICAgICAgICAgICB2YWx1ZU5vZGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChyZXN1bHQgYXMgdW5rbm93bltdKS5wdXNoKGtleU5vZGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UodHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICAgIGNoID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChjaCA9PT0gQ09NTUEpIHtcbiAgICAgICAgcmVhZE5leHQgPSB0cnVlO1xuICAgICAgICBjaCA9IHRoaXMubmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgIFwiQ2Fubm90IHJlYWQgZmxvdyBjb2xsZWN0aW9uOiB1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvblwiLFxuICAgICk7XG4gIH1cbiAgLy8gSGFuZGxlcyBibG9jayBzY2FsZXIgc3R5bGVzOiBlLmcuICd8JywgJz4nLCAnfC0nIGFuZCAnPi0nLlxuICAvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yLjIvIzgxLWJsb2NrLXNjYWxhci1zdHlsZXNcbiAgcmVhZEJsb2NrU2NhbGFyKG5vZGVJbmRlbnQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGxldCBjaG9tcGluZyA9IENIT01QSU5HX0NMSVA7XG4gICAgbGV0IGRpZFJlYWRDb250ZW50ID0gZmFsc2U7XG4gICAgbGV0IGRldGVjdGVkSW5kZW50ID0gZmFsc2U7XG4gICAgbGV0IHRleHRJbmRlbnQgPSBub2RlSW5kZW50O1xuICAgIGxldCBlbXB0eUxpbmVzID0gMDtcbiAgICBsZXQgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTtcblxuICAgIGxldCBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgbGV0IGZvbGRpbmcgPSBmYWxzZTtcbiAgICBpZiAoY2ggPT09IFZFUlRJQ0FMX0xJTkUpIHtcbiAgICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBHUkVBVEVSX1RIQU4pIHtcbiAgICAgIGZvbGRpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5raW5kID0gXCJzY2FsYXJcIjtcbiAgICB0aGlzLnJlc3VsdCA9IFwiXCI7XG5cbiAgICBsZXQgdG1wID0gMDtcbiAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG5cbiAgICAgIGlmIChjaCA9PT0gUExVUyB8fCBjaCA9PT0gTUlOVVMpIHtcbiAgICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7XG4gICAgICAgICAgY2hvbXBpbmcgPSBjaCA9PT0gUExVUyA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IHJlYWQgYmxvY2s6IGNob21waW5nIG1vZGUgaWRlbnRpZmllciByZXBlYXRlZFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGRlY2ltYWxDaGFyQ29kZVRvTnVtYmVyKGNoKSkgPj0gMCkge1xuICAgICAgICBpZiAodG1wID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCByZWFkIGJsb2NrOiBpbmRlbnRhdGlvbiB3aWR0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghZGV0ZWN0ZWRJbmRlbnQpIHtcbiAgICAgICAgICB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCArIHRtcCAtIDE7XG4gICAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgcmVhZCBibG9jazogaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllciByZXBlYXRlZFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7XG4gICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlcygpO1xuICAgICAgdGhpcy5za2lwQ29tbWVudCgpO1xuICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgIHRoaXMucmVhZExpbmVCcmVhaygpO1xuICAgICAgdGhpcy5saW5lSW5kZW50ID0gMDtcblxuICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgICAgd2hpbGUgKFxuICAgICAgICAoIWRldGVjdGVkSW5kZW50IHx8IHRoaXMubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmXG4gICAgICAgIGNoID09PSBTUEFDRVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGluZUluZGVudCsrO1xuICAgICAgICBjaCA9IHRoaXMubmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHRoaXMubGluZUluZGVudCA+IHRleHRJbmRlbnQpIHtcbiAgICAgICAgdGV4dEluZGVudCA9IHRoaXMubGluZUluZGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRU9MKGNoKSkge1xuICAgICAgICBlbXB0eUxpbmVzKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBFbmQgb2YgdGhlIHNjYWxhci5cbiAgICAgIGlmICh0aGlzLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGNob21waW5nLlxuICAgICAgICBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0tFRVApIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdCArPSBcIlxcblwiLnJlcGVhdChcbiAgICAgICAgICAgIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0NMSVApIHtcbiAgICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHtcbiAgICAgICAgICAgIC8vIGkuZS4gb25seSBpZiB0aGUgc2NhbGFyIGlzIG5vdCBlbXB0eS5cbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IFwiXFxuXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJlYWsgdGhpcyBgd2hpbGVgIGN5Y2xlIGFuZCBnbyB0byB0aGUgZnVuY3Rpb24ncyBlcGlsb2d1ZS5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvbGRlZCBzdHlsZTogdXNlIGZhbmN5IHJ1bGVzIHRvIGhhbmRsZSBsaW5lIGJyZWFrcy5cbiAgICAgIGlmIChmb2xkaW5nKSB7XG4gICAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggd2hpdGUgc3BhY2UgY2hhcmFjdGVycyAobW9yZS1pbmRlbnRlZCBsaW5lcykgYXJlIG5vdCBmb2xkZWQuXG4gICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7XG4gICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGNvbnRlbnQgbGluZSAoY2YuIEV4YW1wbGUgOC4xKVxuICAgICAgICAgIHRoaXMucmVzdWx0ICs9IFwiXFxuXCIucmVwZWF0KFxuICAgICAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIEVuZCBvZiBtb3JlLWluZGVudGVkIGJsb2NrLlxuICAgICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlc3VsdCArPSBcIlxcblwiLnJlcGVhdChlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgICAgICAvLyBKdXN0IG9uZSBsaW5lIGJyZWFrIC0gcGVyY2VpdmUgYXMgdGhlIHNhbWUgbGluZS5cbiAgICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7XG4gICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7XG4gICAgICAgICAgICAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IFwiIFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNldmVyYWwgbGluZSBicmVha3MgLSBwZXJjZWl2ZSBhcyBkaWZmZXJlbnQgbGluZXMuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHQgKz0gXCJcXG5cIi5yZXBlYXQoZW1wdHlMaW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaXRlcmFsIHN0eWxlOiBqdXN0IGFkZCBleGFjdCBudW1iZXIgb2YgbGluZSBicmVha3MgYmV0d2VlbiBjb250ZW50IGxpbmVzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gS2VlcCBhbGwgbGluZSBicmVha3MgZXhjZXB0IHRoZSBoZWFkZXIgbGluZSBicmVhay5cbiAgICAgICAgdGhpcy5yZXN1bHQgKz0gXCJcXG5cIi5yZXBlYXQoXG4gICAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTtcbiAgICAgIGVtcHR5TGluZXMgPSAwO1xuICAgICAgY29uc3QgY2FwdHVyZVN0YXJ0ID0gdGhpcy5wb3NpdGlvbjtcblxuICAgICAgd2hpbGUgKCFpc0VPTChjaCkgJiYgY2ggIT09IDApIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYXB0dXJlU2VnbWVudChjYXB0dXJlU3RhcnQsIHRoaXMucG9zaXRpb24sIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWFkQmxvY2tNYXBwaW5nKG5vZGVJbmRlbnQ6IG51bWJlciwgZmxvd0luZGVudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFnID0gdGhpcy50YWc7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5hbmNob3I7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3Qgb3ZlcnJpZGFibGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBsZXQgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgbGV0IGxpbmU6IG51bWJlcjtcbiAgICBsZXQgcG9zOiBudW1iZXI7XG4gICAgbGV0IGtleVRhZyA9IG51bGw7XG4gICAgbGV0IGtleU5vZGUgPSBudWxsO1xuICAgIGxldCB2YWx1ZU5vZGUgPSBudWxsO1xuICAgIGxldCBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgbGV0IGRldGVjdGVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5hbmNob3IgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuYW5jaG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmFuY2hvck1hcC5zZXQodGhpcy5hbmNob3IsIHJlc3VsdCk7XG4gICAgfVxuXG4gICAgbGV0IGNoID0gdGhpcy5wZWVrKCk7XG5cbiAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgIGNvbnN0IGZvbGxvd2luZyA9IHRoaXMucGVlaygxKTtcbiAgICAgIGxpbmUgPSB0aGlzLmxpbmU7IC8vIFNhdmUgdGhlIGN1cnJlbnQgbGluZS5cbiAgICAgIHBvcyA9IHRoaXMucG9zaXRpb247XG5cbiAgICAgIC8vXG4gICAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAgIC8vIGZpcnN0IGZvciB0aGUga2V5IChkZW5vdGVkIGJ5IFwiP1wiKSBhbmQgc2Vjb25kIGZvciB0aGUgdmFsdWUgKGRlbm90ZWQgYnkgXCI6XCIpXG4gICAgICAvL1xuICAgICAgaWYgKChjaCA9PT0gUVVFU1RJT04gfHwgY2ggPT09IENPTE9OKSAmJiBpc1doaXRlU3BhY2VPckVPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlmIChjaCA9PT0gUVVFU1RJT04pIHtcbiAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZU1hcHBpbmdQYWlyKFxuICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgIG92ZXJyaWRhYmxlS2V5cyxcbiAgICAgICAgICAgICAga2V5VGFnIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAga2V5Tm9kZSxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXlUYWcgPSBudWxsO1xuICAgICAgICAgICAga2V5Tm9kZSA9IG51bGw7XG4gICAgICAgICAgICB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAvLyBpLmUuIDB4M0EvKiA6ICovID09PSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGxpY2l0IGtleS5cbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IHJlYWQgYmxvY2sgYXMgZXhwbGljaXQgbWFwcGluZyBwYWlyIGlzIGluY29tcGxldGU6IGEga2V5IG5vZGUgaXMgbWlzc2VkIG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgICAgY2ggPSBmb2xsb3dpbmc7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSW1wbGljaXQgbm90YXRpb24gY2FzZS4gRmxvdy1zdHlsZSBub2RlIGFzIHRoZSBrZXkgZmlyc3QsIHRoZW4gXCI6XCIsIGFuZCB0aGUgdmFsdWUuXG4gICAgICAgIC8vXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9zZU5vZGUoZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX09VVCwgZmFsc2UsIHRydWUpKSB7XG4gICAgICAgIGlmICh0aGlzLmxpbmUgPT09IGxpbmUpIHtcbiAgICAgICAgICBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZXMoKTtcbiAgICAgICAgICBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgICAgICAgaWYgKGNoID09PSBDT0xPTikge1xuICAgICAgICAgICAgY2ggPSB0aGlzLm5leHQoKTtcblxuICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2VPckVPTChjaCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVhZCBibG9jazogYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nXCIsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVNYXBwaW5nUGFpcihcbiAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLFxuICAgICAgICAgICAgICAgIGtleVRhZyBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAga2V5Tm9kZSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBrZXlUYWcgPSBudWxsO1xuICAgICAgICAgICAgICBrZXlOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgICAgICAgICBrZXlUYWcgPSB0aGlzLnRhZztcbiAgICAgICAgICAgIGtleU5vZGUgPSB0aGlzLnJlc3VsdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI6IG1pc3NpbmcgY29sb25cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTogYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5XCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrOyAvLyBSZWFkaW5nIGlzIGRvbmUuIEdvIHRvIHRoZSBlcGlsb2d1ZS5cbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIENvbW1vbiByZWFkaW5nIGNvZGUgZm9yIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IG5vdGF0aW9ucy5cbiAgICAgIC8vXG4gICAgICBpZiAodGhpcy5saW5lID09PSBsaW5lIHx8IHRoaXMubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY29tcG9zZU5vZGUobm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19PVVQsIHRydWUsIGFsbG93Q29tcGFjdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAgIGtleU5vZGUgPSB0aGlzLnJlc3VsdDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVOb2RlID0gdGhpcy5yZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgdGhpcy5zdG9yZU1hcHBpbmdQYWlyKFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLFxuICAgICAgICAgICAga2V5VGFnIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGtleU5vZGUsXG4gICAgICAgICAgICB2YWx1ZU5vZGUsXG4gICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICk7XG4gICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UodHJ1ZSwgLTEpO1xuICAgICAgICBjaCA9IHRoaXMucGVlaygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lSW5kZW50ID4gbm9kZUluZGVudCAmJiBjaCAhPT0gMCkge1xuICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCByZWFkIGJsb2NrOiBiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5XCIsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBFcGlsb2d1ZS5cbiAgICAvL1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsYXN0IG1hcHBpbmcncyBub2RlIGNvbnRhaW5zIG9ubHkgdGhlIGtleSBpbiBleHBsaWNpdCBub3RhdGlvbi5cbiAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgdGhpcy5zdG9yZU1hcHBpbmdQYWlyKFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIG92ZXJyaWRhYmxlS2V5cyxcbiAgICAgICAga2V5VGFnIGFzIHN0cmluZyxcbiAgICAgICAga2V5Tm9kZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSByZXN1bHRpbmcgbWFwcGluZy5cbiAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XG4gICAgICB0aGlzLmtpbmQgPSBcIm1hcHBpbmdcIjtcbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiBkZXRlY3RlZDtcbiAgfVxuICByZWFkVGFnUHJvcGVydHkoKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzVmVyYmF0aW0gPSBmYWxzZTtcbiAgICBsZXQgaXNOYW1lZCA9IGZhbHNlO1xuICAgIGxldCB0YWdIYW5kbGUgPSBcIlwiO1xuICAgIGxldCB0YWdOYW1lOiBzdHJpbmc7XG5cbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgIGlmIChjaCAhPT0gRVhDTEFNQVRJT04pIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aGlzLnRhZyAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHJlYWQgdGFnIHByb3BlcnR5OiBkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjaCA9IHRoaXMubmV4dCgpO1xuXG4gICAgaWYgKGNoID09PSBTTUFMTEVSX1RIQU4pIHtcbiAgICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBFWENMQU1BVElPTikge1xuICAgICAgaXNOYW1lZCA9IHRydWU7XG4gICAgICB0YWdIYW5kbGUgPSBcIiEhXCI7XG4gICAgICBjaCA9IHRoaXMubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWdIYW5kbGUgPSBcIiFcIjtcbiAgICB9XG5cbiAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuXG4gICAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICAgIH0gd2hpbGUgKGNoICE9PSAwICYmIGNoICE9PSBHUkVBVEVSX1RIQU4pO1xuXG4gICAgICBpZiAodGhpcy5wb3NpdGlvbiA8IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgIHRhZ05hbWUgPSB0aGlzLmlucHV0LnNsaWNlKHBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJlYWQgdGFnIHByb3BlcnR5OiB1bmV4cGVjdGVkIGVuZCBvZiBzdHJlYW1cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc1doaXRlU3BhY2VPckVPTChjaCkpIHtcbiAgICAgICAgaWYgKGNoID09PSBFWENMQU1BVElPTikge1xuICAgICAgICAgIGlmICghaXNOYW1lZCkge1xuICAgICAgICAgICAgdGFnSGFuZGxlID0gdGhpcy5pbnB1dC5zbGljZShwb3NpdGlvbiAtIDEsIHRoaXMucG9zaXRpb24gKyAxKTtcblxuICAgICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlYWQgdGFnIHByb3BlcnR5OiBuYW1lZCB0YWcgaGFuZGxlIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc1wiLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICAgICAgICBcIkNhbm5vdCByZWFkIHRhZyBwcm9wZXJ0eTogdGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBhbiBleGNsYW1hdGlvbiBtYXJrXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHRhZ05hbWUgPSB0aGlzLmlucHV0LnNsaWNlKHBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgcmVhZCB0YWcgcHJvcGVydHk6IHRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVyc1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVhZCB0YWcgcHJvcGVydHk6IGludmFsaWQgY2hhcmFjdGVycyBpbiB0YWcgbmFtZSBcIiR7dGFnTmFtZX1cImAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgICB0aGlzLnRhZyA9IHRhZ05hbWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRhZ01hcC5oYXModGFnSGFuZGxlKSkge1xuICAgICAgdGhpcy50YWcgPSB0aGlzLnRhZ01hcC5nZXQodGFnSGFuZGxlKSArIHRhZ05hbWU7XG4gICAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09IFwiIVwiKSB7XG4gICAgICB0aGlzLnRhZyA9IGAhJHt0YWdOYW1lfWA7XG4gICAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09IFwiISFcIikge1xuICAgICAgdGhpcy50YWcgPSBgdGFnOnlhbWwub3JnLDIwMDI6JHt0YWdOYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICBgQ2Fubm90IHJlYWQgdGFnIHByb3BlcnR5OiB1bmRlY2xhcmVkIHRhZyBoYW5kbGUgXCIke3RhZ0hhbmRsZX1cImAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJlYWRBbmNob3JQcm9wZXJ0eSgpOiBib29sZWFuIHtcbiAgICBsZXQgY2ggPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAoY2ggIT09IEFNUEVSU0FORCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgcmVhZCBhbmNob3IgcHJvcGVydHk6IGR1cGxpY2F0ZSBhbmNob3IgcHJvcGVydHlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNoID0gdGhpcy5uZXh0KCk7XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG4gICAgd2hpbGUgKGNoICE9PSAwICYmICFpc1doaXRlU3BhY2VPckVPTChjaCkgJiYgIWlzRmxvd0luZGljYXRvcihjaCkpIHtcbiAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9zaXRpb24gPT09IHBvc2l0aW9uKSB7XG4gICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgcmVhZCBhbmNob3IgcHJvcGVydHk6IG5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXJcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hbmNob3IgPSB0aGlzLmlucHV0LnNsaWNlKHBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWFkQWxpYXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucGVlaygpICE9PSBBU1RFUklTSykgcmV0dXJuIGZhbHNlO1xuXG4gICAgbGV0IGNoID0gdGhpcy5uZXh0KCk7XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzV2hpdGVTcGFjZU9yRU9MKGNoKSAmJiAhaXNGbG93SW5kaWNhdG9yKGNoKSkge1xuICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gcG9zaXRpb24pIHtcbiAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICBcIkNhbm5vdCByZWFkIGFsaWFzOiBhbGlhcyBuYW1lIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFsaWFzID0gdGhpcy5pbnB1dC5zbGljZShwb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XG4gICAgaWYgKCF0aGlzLmFuY2hvck1hcC5oYXMoYWxpYXMpKSB7XG4gICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgYENhbm5vdCByZWFkIGFsaWFzOiB1bmlkZW50aWZpZWQgYWxpYXMgXCIke2FsaWFzfVwiYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHQgPSB0aGlzLmFuY2hvck1hcC5nZXQoYWxpYXMpO1xuICAgIHRoaXMuc2tpcFNlcGFyYXRpb25TcGFjZSh0cnVlLCAtMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb21wb3NlTm9kZShcbiAgICBwYXJlbnRJbmRlbnQ6IG51bWJlcixcbiAgICBub2RlQ29udGV4dDogbnVtYmVyLFxuICAgIGFsbG93VG9TZWVrOiBib29sZWFuLFxuICAgIGFsbG93Q29tcGFjdDogYm9vbGVhbixcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGluZGVudFN0YXR1cyA9IDE7IC8vIDE6IHRoaXM+cGFyZW50LCAwOiB0aGlzPXBhcmVudCwgLTE6IHRoaXM8cGFyZW50XG4gICAgbGV0IGF0TmV3TGluZSA9IGZhbHNlO1xuICAgIGxldCBoYXNDb250ZW50ID0gZmFsc2U7XG4gICAgbGV0IHR5cGU6IFR5cGU8S2luZFR5cGU+O1xuXG4gICAgdGhpcy50YWcgPSBudWxsO1xuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcbiAgICB0aGlzLmtpbmQgPSBudWxsO1xuICAgIHRoaXMucmVzdWx0ID0gbnVsbDtcblxuICAgIGNvbnN0IGFsbG93QmxvY2tTY2FsYXJzID0gQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0IHx8XG4gICAgICBDT05URVhUX0JMT0NLX0lOID09PSBub2RlQ29udGV4dDtcblxuICAgIGxldCBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU2NhbGFycztcbiAgICBjb25zdCBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnM7XG5cbiAgICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICAgIGlmICh0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UodHJ1ZSwgLTEpKSB7XG4gICAgICAgIGF0TmV3TGluZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgICAgd2hpbGUgKHRoaXMucmVhZFRhZ1Byb3BlcnR5KCkgfHwgdGhpcy5yZWFkQW5jaG9yUHJvcGVydHkoKSkge1xuICAgICAgICBpZiAodGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKHRydWUsIC0xKSkge1xuICAgICAgICAgIGF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYWxsb3dCbG9ja1N0eWxlcztcblxuICAgICAgICAgIGlmICh0aGlzLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkge1xuICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgICAgY29uc3QgY29uZCA9IENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQgfHxcbiAgICAgICAgQ09OVEVYVF9GTE9XX09VVCA9PT0gbm9kZUNvbnRleHQ7XG4gICAgICBjb25zdCBmbG93SW5kZW50ID0gY29uZCA/IHBhcmVudEluZGVudCA6IHBhcmVudEluZGVudCArIDE7XG5cbiAgICAgIGNvbnN0IGJsb2NrSW5kZW50ID0gdGhpcy5wb3NpdGlvbiAtIHRoaXMubGluZVN0YXJ0O1xuXG4gICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmXG4gICAgICAgICAgICAodGhpcy5yZWFkQmxvY2tTZXF1ZW5jZShibG9ja0luZGVudCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5yZWFkQmxvY2tNYXBwaW5nKGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkpIHx8XG4gICAgICAgICAgdGhpcy5yZWFkRmxvd0NvbGxlY3Rpb24oZmxvd0luZGVudClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGFsbG93QmxvY2tTY2FsYXJzICYmIHRoaXMucmVhZEJsb2NrU2NhbGFyKGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgICAgdGhpcy5yZWFkU2luZ2xlUXVvdGVkU2NhbGFyKGZsb3dJbmRlbnQpIHx8XG4gICAgICAgICAgICB0aGlzLnJlYWREb3VibGVRdW90ZWRTY2FsYXIoZmxvd0luZGVudClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWFkQWxpYXMoKSkge1xuICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRhZyAhPT0gbnVsbCB8fCB0aGlzLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNhbm5vdCBjb21wb3NlIG5vZGU6IGFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMucmVhZFBsYWluU2NhbGFyKGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudGFnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMudGFnID0gXCI/XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvck1hcC5zZXQodGhpcy5hbmNob3IsIHRoaXMucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogYmxvY2sgc2VxdWVuY2VzIGFyZSBhbGxvd2VkIHRvIGhhdmUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbCBhcyB0aGUgcGFyZW50LlxuICAgICAgICAvLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI3OTk3ODRcbiAgICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICAgIHRoaXMucmVhZEJsb2NrU2VxdWVuY2UoYmxvY2tJbmRlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRhZyAhPT0gbnVsbCAmJiB0aGlzLnRhZyAhPT0gXCIhXCIpIHtcbiAgICAgIGlmICh0aGlzLnRhZyA9PT0gXCI/XCIpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgdHlwZUluZGV4ID0gMDtcbiAgICAgICAgICB0eXBlSW5kZXggPCB0aGlzLmltcGxpY2l0VHlwZXMubGVuZ3RoO1xuICAgICAgICAgIHR5cGVJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIHR5cGUgPSB0aGlzLmltcGxpY2l0VHlwZXNbdHlwZUluZGV4XSE7XG5cbiAgICAgICAgICAvLyBJbXBsaWNpdCByZXNvbHZpbmcgaXMgbm90IGFsbG93ZWQgZm9yIG5vbi1zY2FsYXIgdHlwZXMsIGFuZCAnPydcbiAgICAgICAgICAvLyBub24tc3BlY2lmaWMgdGFnIGlzIG9ubHkgYXNzaWduZWQgdG8gcGxhaW4gc2NhbGFycy4gU28sIGl0IGlzbid0XG4gICAgICAgICAgLy8gbmVlZGVkIHRvIGNoZWNrIGZvciAna2luZCcgY29uZm9ybWl0eS5cblxuICAgICAgICAgIGlmICh0eXBlLnJlc29sdmUodGhpcy5yZXN1bHQpKSB7XG4gICAgICAgICAgICAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdHlwZS5jb25zdHJ1Y3QodGhpcy5yZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy50YWcgPSB0eXBlLnRhZztcbiAgICAgICAgICAgIGlmICh0aGlzLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLmFuY2hvck1hcC5zZXQodGhpcy5hbmNob3IsIHRoaXMucmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGVNYXBbdGhpcy5raW5kID8/IFwiZmFsbGJhY2tcIl0uaGFzKHRoaXMudGFnKSkge1xuICAgICAgICBjb25zdCBtYXAgPSB0aGlzLnR5cGVNYXBbdGhpcy5raW5kID8/IFwiZmFsbGJhY2tcIl07XG4gICAgICAgIHR5cGUgPSBtYXAuZ2V0KHRoaXMudGFnKSE7XG5cbiAgICAgICAgaWYgKHRoaXMucmVzdWx0ICE9PSBudWxsICYmIHR5cGUua2luZCAhPT0gdGhpcy5raW5kKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgICAgICBgVW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwke3RoaXMudGFnfT4gdGFnOiBpdCBzaG91bGQgYmUgXCIke3R5cGUua2luZH1cIiwgbm90IFwiJHt0aGlzLmtpbmR9XCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXR5cGUucmVzb2x2ZSh0aGlzLnJlc3VsdCkpIHtcbiAgICAgICAgICAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCR7dGhpcy50YWd9PiBleHBsaWNpdCB0YWdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdCh0aGlzLnJlc3VsdCk7XG4gICAgICAgICAgaWYgKHRoaXMuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvck1hcC5zZXQodGhpcy5hbmNob3IsIHRoaXMucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKGBDYW5ub3QgcmVzb2x2ZSB1bmtub3duIHRhZyAhPCR7dGhpcy50YWd9PmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRhZyAhPT0gbnVsbCB8fCB0aGlzLmFuY2hvciAhPT0gbnVsbCB8fCBoYXNDb250ZW50O1xuICB9XG5cbiAgcmVhZERvY3VtZW50KCkge1xuICAgIGNvbnN0IGRvY3VtZW50U3RhcnQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gICAgbGV0IGhhc0RpcmVjdGl2ZXMgPSBmYWxzZTtcblxuICAgIHRoaXMudmVyc2lvbiA9IG51bGw7XG4gICAgdGhpcy5jaGVja0xpbmVCcmVha3MgPSBmYWxzZTtcbiAgICB0aGlzLnRhZ01hcCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmFuY2hvck1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGxldCBjaCA9IHRoaXMucGVlaygpO1xuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgdGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKHRydWUsIC0xKTtcblxuICAgICAgY2ggPSB0aGlzLnBlZWsoKTtcblxuICAgICAgaWYgKHRoaXMubGluZUluZGVudCA+IDAgfHwgY2ggIT09IFBFUkNFTlQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgICAgY2ggPSB0aGlzLm5leHQoKTtcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG5cbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNXaGl0ZVNwYWNlT3JFT0woY2gpKSB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpcmVjdGl2ZU5hbWUgPSB0aGlzLmlucHV0LnNsaWNlKHBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGRpcmVjdGl2ZUFyZ3MgPSBbXTtcblxuICAgICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyB0aGlzLiNjcmVhdGVFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCByZWFkIGRvY3VtZW50OiBkaXJlY3RpdmUgbmFtZSBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1wiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZXMoKTtcbiAgICAgICAgdGhpcy5za2lwQ29tbWVudCgpO1xuICAgICAgICBjaCA9IHRoaXMucGVlaygpO1xuXG4gICAgICAgIGlmIChpc0VPTChjaCkpIGJyZWFrO1xuXG4gICAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcblxuICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzV2hpdGVTcGFjZU9yRU9MKGNoKSkge1xuICAgICAgICAgIGNoID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBkaXJlY3RpdmVBcmdzLnB1c2godGhpcy5pbnB1dC5zbGljZShwb3NpdGlvbiwgdGhpcy5wb3NpdGlvbikpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ggIT09IDApIHRoaXMucmVhZExpbmVCcmVhaygpO1xuXG4gICAgICBzd2l0Y2ggKGRpcmVjdGl2ZU5hbWUpIHtcbiAgICAgICAgY2FzZSBcIllBTUxcIjpcbiAgICAgICAgICB0aGlzLnlhbWxEaXJlY3RpdmVIYW5kbGVyKC4uLmRpcmVjdGl2ZUFyZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVEFHXCI6XG4gICAgICAgICAgdGhpcy50YWdEaXJlY3RpdmVIYW5kbGVyKC4uLmRpcmVjdGl2ZUFyZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hXYXJuaW5nKFxuICAgICAgICAgICAgYHVua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlIFwiJHtkaXJlY3RpdmVOYW1lfVwiYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjaCA9IHRoaXMucGVlaygpO1xuICAgIH1cblxuICAgIHRoaXMuc2tpcFNlcGFyYXRpb25TcGFjZSh0cnVlLCAtMSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmxpbmVJbmRlbnQgPT09IDAgJiZcbiAgICAgIHRoaXMucGVlaygpID09PSBNSU5VUyAmJlxuICAgICAgdGhpcy5wZWVrKDEpID09PSBNSU5VUyAmJlxuICAgICAgdGhpcy5wZWVrKDIpID09PSBNSU5VU1xuICAgICkge1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAzO1xuICAgICAgdGhpcy5za2lwU2VwYXJhdGlvblNwYWNlKHRydWUsIC0xKTtcbiAgICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHtcbiAgICAgIHRocm93IHRoaXMuI2NyZWF0ZUVycm9yKFxuICAgICAgICBcIkNhbm5vdCByZWFkIGRvY3VtZW50OiBkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9zZU5vZGUodGhpcy5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgICB0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UodHJ1ZSwgLTEpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3QoXG4gICAgICAgIHRoaXMuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgdGhpcy5wb3NpdGlvbiksXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoV2FybmluZyhcIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudFwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gdGhpcy5saW5lU3RhcnQgJiYgdGhpcy50ZXN0RG9jdW1lbnRTZXBhcmF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMucGVlaygpID09PSBET1QpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiArPSAzO1xuICAgICAgICB0aGlzLnNraXBTZXBhcmF0aW9uU3BhY2UodHJ1ZSwgLTEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbiA8IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgdGhpcy4jY3JlYXRlRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHJlYWQgZG9jdW1lbnQ6IGVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgfVxuXG4gICpyZWFkRG9jdW1lbnRzKCkge1xuICAgIHdoaWxlICh0aGlzLnBvc2l0aW9uIDwgdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICB5aWVsZCB0aGlzLnJlYWREb2N1bWVudCgpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvRkFBb0Y7QUFDcEYsMEVBQTBFO0FBQzFFLHFEQUFxRDtBQUVyRCxTQUNFLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULGVBQWUsRUFDZixLQUFLLEVBQ0wsS0FBSyxFQUNMLGFBQWEsRUFDYixHQUFHLEVBQ0gsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixrQkFB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
+// denoCacheMetadata=6835338976381224248,2292755626312210993 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1c97b0b0f1c6087b0c3dfa4a2da62aaae248ad106e50a6e70f71ac038247afa6.js b/vendor/gen/https/jsr.io/1c97b0b0f1c6087b0c3dfa4a2da62aaae248ad106e50a6e70f71ac038247afa6.js
new file mode 100644
index 0000000..97c8947
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1c97b0b0f1c6087b0c3dfa4a2da62aaae248ad106e50a6e70f71ac038247afa6.js
@@ -0,0 +1,43 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { parseMediaType } from "./parse_media_type.ts";
+import { db } from "./_db.ts";
+/**
+ * Given a media type or header value, identify the encoding charset. If the
+ * charset cannot be determined, the function returns `undefined`.
+ *
+ * @param type The media type or header value to get the charset for.
+ *
+ * @returns The charset for the given media type or header value, or `undefined`
+ * if the charset cannot be determined.
+ *
+ * @example Usage
+ * ```ts
+ * import { getCharset } from "@std/media-types/get-charset";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(getCharset("text/plain"), "UTF-8");
+ * assertEquals(getCharset("application/foo"), undefined);
+ * assertEquals(getCharset("application/news-checkgroups"), "US-ASCII");
+ * assertEquals(getCharset("application/news-checkgroups; charset=UTF-8"), "UTF-8");
+ * ```
+ */ export function getCharset(type) {
+ try {
+ const [mediaType, params] = parseMediaType(type);
+ if (params?.charset) {
+ return params.charset;
+ }
+ const entry = db[mediaType];
+ if (entry?.charset) {
+ return entry.charset;
+ }
+ if (mediaType.startsWith("text/")) {
+ return "UTF-8";
+ }
+ } catch {
+ // just swallow errors, returning undefined
+ }
+ return undefined;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvZ2V0X2NoYXJzZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9wYXJzZV9tZWRpYV90eXBlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IERCRW50cnkgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgZGIsIHR5cGUgS2V5T2ZEYiB9IGZyb20gXCIuL19kYi50c1wiO1xuXG4vKipcbiAqIEdpdmVuIGEgbWVkaWEgdHlwZSBvciBoZWFkZXIgdmFsdWUsIGlkZW50aWZ5IHRoZSBlbmNvZGluZyBjaGFyc2V0LiBJZiB0aGVcbiAqIGNoYXJzZXQgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwYXJhbSB0eXBlIFRoZSBtZWRpYSB0eXBlIG9yIGhlYWRlciB2YWx1ZSB0byBnZXQgdGhlIGNoYXJzZXQgZm9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBjaGFyc2V0IGZvciB0aGUgZ2l2ZW4gbWVkaWEgdHlwZSBvciBoZWFkZXIgdmFsdWUsIG9yIGB1bmRlZmluZWRgXG4gKiBpZiB0aGUgY2hhcnNldCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGdldENoYXJzZXQgfSBmcm9tIFwiQHN0ZC9tZWRpYS10eXBlcy9nZXQtY2hhcnNldFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGdldENoYXJzZXQoXCJ0ZXh0L3BsYWluXCIpLCBcIlVURi04XCIpO1xuICogYXNzZXJ0RXF1YWxzKGdldENoYXJzZXQoXCJhcHBsaWNhdGlvbi9mb29cIiksIHVuZGVmaW5lZCk7XG4gKiBhc3NlcnRFcXVhbHMoZ2V0Q2hhcnNldChcImFwcGxpY2F0aW9uL25ld3MtY2hlY2tncm91cHNcIiksIFwiVVMtQVNDSUlcIik7XG4gKiBhc3NlcnRFcXVhbHMoZ2V0Q2hhcnNldChcImFwcGxpY2F0aW9uL25ld3MtY2hlY2tncm91cHM7IGNoYXJzZXQ9VVRGLThcIiksIFwiVVRGLThcIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJzZXQodHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBbbWVkaWFUeXBlLCBwYXJhbXNdID0gcGFyc2VNZWRpYVR5cGUodHlwZSk7XG4gICAgaWYgKHBhcmFtcz8uY2hhcnNldCkge1xuICAgICAgcmV0dXJuIHBhcmFtcy5jaGFyc2V0O1xuICAgIH1cbiAgICBjb25zdCBlbnRyeSA9IGRiW21lZGlhVHlwZSBhcyBLZXlPZkRiXSBhcyBEQkVudHJ5O1xuICAgIGlmIChlbnRyeT8uY2hhcnNldCkge1xuICAgICAgcmV0dXJuIGVudHJ5LmNoYXJzZXQ7XG4gICAgfVxuICAgIGlmIChtZWRpYVR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpKSB7XG4gICAgICByZXR1cm4gXCJVVEYtOFwiO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8ganVzdCBzd2FsbG93IGVycm9ycywgcmV0dXJuaW5nIHVuZGVmaW5lZFxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLGNBQWMsUUFBUSx3QkFBd0I7QUFFdkQsU0FBUyxFQUFFLFFBQXNCLFdBQVc7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsV0FBVyxJQUFZO0VBQ3JDLElBQUk7SUFDRixNQUFNLENBQUMsV0FBVyxPQUFPLEdBQUcsZUFBZTtJQUMzQyxJQUFJLFFBQVEsU0FBUztNQUNuQixPQUFPLE9BQU8sT0FBTztJQUN2QjtJQUNBLE1BQU0sUUFBUSxFQUFFLENBQUMsVUFBcUI7SUFDdEMsSUFBSSxPQUFPLFNBQVM7TUFDbEIsT0FBTyxNQUFNLE9BQU87SUFDdEI7SUFDQSxJQUFJLFVBQVUsVUFBVSxDQUFDLFVBQVU7TUFDakMsT0FBTztJQUNUO0VBQ0YsRUFBRSxPQUFNO0VBQ04sMkNBQTJDO0VBQzdDO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=8337773012180241176,16569020405931239549 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/1e9cde642783926318331c7378e3263854a5bd5f58a91b78c54b96ce2d70e0a8.js b/vendor/gen/https/jsr.io/1e9cde642783926318331c7378e3263854a5bd5f58a91b78c54b96ce2d70e0a8.js
new file mode 100644
index 0000000..8905a46
--- /dev/null
+++ b/vendor/gen/https/jsr.io/1e9cde642783926318331c7378e3263854a5bd5f58a91b78c54b96ce2d70e0a8.js
@@ -0,0 +1,23 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Extensions to the
+ * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API | Web Crypto}
+ * supporting additional encryption APIs, but also delegating to the built-in
+ * APIs when possible.
+ *
+ * ```ts no-assert
+ * import { crypto } from "@std/crypto/crypto";
+ *
+ * const message = "Hello, Deno!";
+ * const encoder = new TextEncoder();
+ * const data = encoder.encode(message);
+ *
+ * await crypto.subtle.digest("BLAKE3", data);
+ * ```
+ *
+ * @module
+ */ export * from "./crypto.ts";
+export * from "./timing_safe_equal.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY3J5cHRvLzEuMC41L21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIEV4dGVuc2lvbnMgdG8gdGhlXG4gKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYl9DcnlwdG9fQVBJIHwgV2ViIENyeXB0b31cbiAqIHN1cHBvcnRpbmcgYWRkaXRpb25hbCBlbmNyeXB0aW9uIEFQSXMsIGJ1dCBhbHNvIGRlbGVnYXRpbmcgdG8gdGhlIGJ1aWx0LWluXG4gKiBBUElzIHdoZW4gcG9zc2libGUuXG4gKlxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBjcnlwdG8gfSBmcm9tIFwiQHN0ZC9jcnlwdG8vY3J5cHRvXCI7XG4gKlxuICogY29uc3QgbWVzc2FnZSA9IFwiSGVsbG8sIERlbm8hXCI7XG4gKiBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gKiBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUobWVzc2FnZSk7XG4gKlxuICogYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJCTEFLRTNcIiwgZGF0YSk7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vY3J5cHRvLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90aW1pbmdfc2FmZV9lcXVhbC50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBRUQsY0FBYyxjQUFjO0FBQzVCLGNBQWMseUJBQXlCIn0=
+// denoCacheMetadata=11669562843479213733,5456726558744636823 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/20186b85c41d56e6c736e8fb833fe9d682f01b4468fc12efd39a58688418d54d.js b/vendor/gen/https/jsr.io/20186b85c41d56e6c736e8fb833fe9d682f01b4468fc12efd39a58688418d54d.js
new file mode 100644
index 0000000..2eeea97
--- /dev/null
+++ b/vendor/gen/https/jsr.io/20186b85c41d56e6c736e8fb833fe9d682f01b4468fc12efd39a58688418d54d.js
@@ -0,0 +1,41 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { join } from "./join.ts";
+import { SEPARATOR } from "./constants.ts";
+import { normalizeGlob } from "./normalize_glob.ts";
+/**
+ * Like join(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ *
+ * ```ts
+ * import { joinGlobs } from "@std/path/windows/join-globs";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const joined = joinGlobs(["foo", "**", "bar"], { globstar: true });
+ * assertEquals(joined, "foo\\**\\bar");
+ * ```
+ *
+ * @param globs The globs to join.
+ * @param options The options for glob pattern.
+ * @returns The joined glob pattern.
+ */ export function joinGlobs(globs, options = {}) {
+ const { globstar = false } = options;
+ if (!globstar || globs.length === 0) {
+ return join(...globs);
+ }
+ let joined;
+ for (const glob of globs){
+ const path = glob;
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `${SEPARATOR}${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalizeGlob(joined, {
+ globstar
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2pvaW5fZ2xvYnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBHbG9iT3B0aW9ucyB9IGZyb20gXCIuLi9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCIuL2pvaW4udHNcIjtcbmltcG9ydCB7IFNFUEFSQVRPUiB9IGZyb20gXCIuL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplR2xvYiB9IGZyb20gXCIuL25vcm1hbGl6ZV9nbG9iLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfTtcblxuLyoqXG4gKiBMaWtlIGpvaW4oKSwgYnV0IGRvZXNuJ3QgY29sbGFwc2UgXCIqKlxcLy4uXCIgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgam9pbkdsb2JzIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2pvaW4tZ2xvYnNcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGpvaW5lZCA9IGpvaW5HbG9icyhbXCJmb29cIiwgXCIqKlwiLCBcImJhclwiXSwgeyBnbG9ic3RhcjogdHJ1ZSB9KTtcbiAqIGFzc2VydEVxdWFscyhqb2luZWQsIFwiZm9vXFxcXCoqXFxcXGJhclwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9icyBUaGUgZ2xvYnMgdG8gam9pbi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBnbG9iIHBhdHRlcm4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIGdsb2IgcGF0dGVybi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBQaWNrPEdsb2JPcHRpb25zLCBcImdsb2JzdGFyXCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGdsb2JzdGFyID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGlmICghZ2xvYnN0YXIgfHwgZ2xvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGpvaW4oLi4uZ2xvYnMpO1xuICB9XG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBnbG9iIG9mIGdsb2JzKSB7XG4gICAgY29uc3QgcGF0aCA9IGdsb2I7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFqb2luZWQpIGpvaW5lZCA9IHBhdGg7XG4gICAgICBlbHNlIGpvaW5lZCArPSBgJHtTRVBBUkFUT1J9JHtwYXRofWA7XG4gICAgfVxuICB9XG4gIGlmICgham9pbmVkKSByZXR1cm4gXCIuXCI7XG4gIHJldHVybiBub3JtYWxpemVHbG9iKGpvaW5lZCwgeyBnbG9ic3RhciB9KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBR3JDLFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBQzNDLFNBQVMsYUFBYSxRQUFRLHNCQUFzQjtBQUlwRDs7Ozs7Ozs7Ozs7Ozs7OztDQWdCQyxHQUNELE9BQU8sU0FBUyxVQUNkLEtBQWUsRUFDZixVQUF5QyxDQUFDLENBQUM7RUFFM0MsTUFBTSxFQUFFLFdBQVcsS0FBSyxFQUFFLEdBQUc7RUFDN0IsSUFBSSxDQUFDLFlBQVksTUFBTSxNQUFNLEtBQUssR0FBRztJQUNuQyxPQUFPLFFBQVE7RUFDakI7RUFDQSxJQUFJO0VBQ0osS0FBSyxNQUFNLFFBQVEsTUFBTztJQUN4QixNQUFNLE9BQU87SUFDYixJQUFJLEtBQUssTUFBTSxHQUFHLEdBQUc7TUFDbkIsSUFBSSxDQUFDLFFBQVEsU0FBUztXQUNqQixVQUFVLEdBQUcsWUFBWSxNQUFNO0lBQ3RDO0VBQ0Y7RUFDQSxJQUFJLENBQUMsUUFBUSxPQUFPO0VBQ3BCLE9BQU8sY0FBYyxRQUFRO0lBQUU7RUFBUztBQUMxQyJ9
+// denoCacheMetadata=1681905616350540809,7852449746386624345 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/21b6c9b75dfe4daec50585f69f1fc9bc35b33e506b82697277823eca9554919f.js b/vendor/gen/https/jsr.io/21b6c9b75dfe4daec50585f69f1fc9bc35b33e506b82697277823eca9554919f.js
new file mode 100644
index 0000000..2775d98
--- /dev/null
+++ b/vendor/gen/https/jsr.io/21b6c9b75dfe4daec50585f69f1fc9bc35b33e506b82697277823eca9554919f.js
@@ -0,0 +1,46 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const BOM = 0xfeff; /* BOM */
+export const TAB = 0x09; /* Tab */
+export const LINE_FEED = 0x0a; /* LF */
+export const CARRIAGE_RETURN = 0x0d; /* CR */
+export const SPACE = 0x20; /* Space */
+export const EXCLAMATION = 0x21; /* ! */
+export const DOUBLE_QUOTE = 0x22; /* " */
+export const SHARP = 0x23; /* # */
+export const PERCENT = 0x25; /* % */
+export const AMPERSAND = 0x26; /* & */
+export const SINGLE_QUOTE = 0x27; /* ' */
+export const ASTERISK = 0x2a; /* * */
+export const PLUS = 0x2b; /* + */
+export const COMMA = 0x2c; /* , */
+export const MINUS = 0x2d; /* - */
+export const DOT = 0x2e; /* . */
+export const COLON = 0x3a; /* : */
+export const SMALLER_THAN = 0x3c; /* < */
+export const GREATER_THAN = 0x3e; /* > */
+export const QUESTION = 0x3f; /* ? */
+export const COMMERCIAL_AT = 0x40; /* @ */
+export const LEFT_SQUARE_BRACKET = 0x5b; /* [ */
+export const BACKSLASH = 0x5c; /* \ */
+export const RIGHT_SQUARE_BRACKET = 0x5d; /* ] */
+export const GRAVE_ACCENT = 0x60; /* ` */
+export const LEFT_CURLY_BRACKET = 0x7b; /* { */
+export const VERTICAL_LINE = 0x7c; /* | */
+export const RIGHT_CURLY_BRACKET = 0x7d; /* } */
+export function isEOL(c) {
+ return c === LINE_FEED || c === CARRIAGE_RETURN;
+}
+export function isWhiteSpace(c) {
+ return c === TAB || c === SPACE;
+}
+export function isWhiteSpaceOrEOL(c) {
+ return isWhiteSpace(c) || isEOL(c);
+}
+export function isFlowIndicator(c) {
+ return c === COMMA || c === LEFT_SQUARE_BRACKET || c === RIGHT_SQUARE_BRACKET || c === LEFT_CURLY_BRACKET || c === RIGHT_CURLY_BRACKET;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fY2hhcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IGNvbnN0IEJPTSA9IDB4ZmVmZjsgLyogQk9NICovXG5leHBvcnQgY29uc3QgVEFCID0gMHgwOTsgLyogVGFiICovXG5leHBvcnQgY29uc3QgTElORV9GRUVEID0gMHgwYTsgLyogTEYgKi9cbmV4cG9ydCBjb25zdCBDQVJSSUFHRV9SRVRVUk4gPSAweDBkOyAvKiBDUiAqL1xuZXhwb3J0IGNvbnN0IFNQQUNFID0gMHgyMDsgLyogU3BhY2UgKi9cbmV4cG9ydCBjb25zdCBFWENMQU1BVElPTiA9IDB4MjE7IC8qICEgKi9cbmV4cG9ydCBjb25zdCBET1VCTEVfUVVPVEUgPSAweDIyOyAvKiBcIiAqL1xuZXhwb3J0IGNvbnN0IFNIQVJQID0gMHgyMzsgLyogIyAqL1xuZXhwb3J0IGNvbnN0IFBFUkNFTlQgPSAweDI1OyAvKiAlICovXG5leHBvcnQgY29uc3QgQU1QRVJTQU5EID0gMHgyNjsgLyogJiAqL1xuZXhwb3J0IGNvbnN0IFNJTkdMRV9RVU9URSA9IDB4Mjc7IC8qICcgKi9cbmV4cG9ydCBjb25zdCBBU1RFUklTSyA9IDB4MmE7IC8qICogKi9cbmV4cG9ydCBjb25zdCBQTFVTID0gMHgyYjsgLyogKyAqL1xuZXhwb3J0IGNvbnN0IENPTU1BID0gMHgyYzsgLyogLCAqL1xuZXhwb3J0IGNvbnN0IE1JTlVTID0gMHgyZDsgLyogLSAqL1xuZXhwb3J0IGNvbnN0IERPVCA9IDB4MmU7IC8qIC4gKi9cbmV4cG9ydCBjb25zdCBDT0xPTiA9IDB4M2E7IC8qIDogKi9cbmV4cG9ydCBjb25zdCBTTUFMTEVSX1RIQU4gPSAweDNjOyAvKiA8ICovXG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0gMHgzZTsgLyogPiAqL1xuZXhwb3J0IGNvbnN0IFFVRVNUSU9OID0gMHgzZjsgLyogPyAqL1xuZXhwb3J0IGNvbnN0IENPTU1FUkNJQUxfQVQgPSAweDQwOyAvKiBAICovXG5leHBvcnQgY29uc3QgTEVGVF9TUVVBUkVfQlJBQ0tFVCA9IDB4NWI7IC8qIFsgKi9cbmV4cG9ydCBjb25zdCBCQUNLU0xBU0ggPSAweDVjOyAvKiBcXCAqL1xuZXhwb3J0IGNvbnN0IFJJR0hUX1NRVUFSRV9CUkFDS0VUID0gMHg1ZDsgLyogXSAqL1xuZXhwb3J0IGNvbnN0IEdSQVZFX0FDQ0VOVCA9IDB4NjA7IC8qIGAgKi9cbmV4cG9ydCBjb25zdCBMRUZUX0NVUkxZX0JSQUNLRVQgPSAweDdiOyAvKiB7ICovXG5leHBvcnQgY29uc3QgVkVSVElDQUxfTElORSA9IDB4N2M7IC8qIHwgKi9cbmV4cG9ydCBjb25zdCBSSUdIVF9DVVJMWV9CUkFDS0VUID0gMHg3ZDsgLyogfSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFT0woYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBjID09PSBMSU5FX0ZFRUQgfHwgYyA9PT0gQ0FSUklBR0VfUkVUVVJOO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gYyA9PT0gVEFCIHx8IGMgPT09IFNQQUNFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlT3JFT0woYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1doaXRlU3BhY2UoYykgfHwgaXNFT0woYyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb3dJbmRpY2F0b3IoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgYyA9PT0gQ09NTUEgfHxcbiAgICBjID09PSBMRUZUX1NRVUFSRV9CUkFDS0VUIHx8XG4gICAgYyA9PT0gUklHSFRfU1FVQVJFX0JSQUNLRVQgfHxcbiAgICBjID09PSBMRUZUX0NVUkxZX0JSQUNLRVQgfHxcbiAgICBjID09PSBSSUdIVF9DVVJMWV9CUkFDS0VUXG4gICk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG9GQUFvRjtBQUNwRiwwRUFBMEU7QUFDMUUscURBQXFEO0FBRXJELE9BQU8sTUFBTSxNQUFNLE9BQU8sQ0FBQyxPQUFPO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLEtBQUssQ0FBQyxPQUFPO0FBQ2hDLE9BQU8sTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNO0FBQ3JDLE9BQU8sTUFBTSxrQkFBa0IsS0FBSyxDQUFDLE1BQU07QUFDM0MsT0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVM7QUFDcEMsT0FBTyxNQUFNLGNBQWMsS0FBSyxDQUFDLEtBQUs7QUFDdEMsT0FBTyxNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLEtBQUs7QUFDaEMsT0FBTyxNQUFNLFVBQVUsS0FBSyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLFlBQVksS0FBSyxDQUFDLEtBQUs7QUFDcEMsT0FBTyxNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLE9BQU8sS0FBSyxDQUFDLEtBQUs7QUFDL0IsT0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLEtBQUs7QUFDaEMsT0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLEtBQUs7QUFDaEMsT0FBTyxNQUFNLE1BQU0sS0FBSyxDQUFDLEtBQUs7QUFDOUIsT0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLEtBQUs7QUFDaEMsT0FBTyxNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLGdCQUFnQixLQUFLLENBQUMsS0FBSztBQUN4QyxPQUFPLE1BQU0sc0JBQXNCLEtBQUssQ0FBQyxLQUFLO0FBQzlDLE9BQU8sTUFBTSxZQUFZLEtBQUssQ0FBQyxLQUFLO0FBQ3BDLE9BQU8sTUFBTSx1QkFBdUIsS0FBSyxDQUFDLEtBQUs7QUFDL0MsT0FBTyxNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLHFCQUFxQixLQUFLLENBQUMsS0FBSztBQUM3QyxPQUFPLE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxLQUFLO0FBQ3hDLE9BQU8sTUFBTSxzQkFBc0IsS0FBSyxDQUFDLEtBQUs7QUFFOUMsT0FBTyxTQUFTLE1BQU0sQ0FBUztFQUM3QixPQUFPLE1BQU0sYUFBYSxNQUFNO0FBQ2xDO0FBRUEsT0FBTyxTQUFTLGFBQWEsQ0FBUztFQUNwQyxPQUFPLE1BQU0sT0FBTyxNQUFNO0FBQzVCO0FBRUEsT0FBTyxTQUFTLGtCQUFrQixDQUFTO0VBQ3pDLE9BQU8sYUFBYSxNQUFNLE1BQU07QUFDbEM7QUFFQSxPQUFPLFNBQVMsZ0JBQWdCLENBQVM7RUFDdkMsT0FDRSxNQUFNLFNBQ04sTUFBTSx1QkFDTixNQUFNLHdCQUNOLE1BQU0sc0JBQ04sTUFBTTtBQUVWIn0=
+// denoCacheMetadata=16977672708744241181,15227247939613248239 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/22868d83da97dcd7a8b8491b9f56f3278eb38b6c47aa5068bfaba35ed4f184fe.js b/vendor/gen/https/jsr.io/22868d83da97dcd7a8b8491b9f56f3278eb38b6c47aa5068bfaba35ed4f184fe.js
new file mode 100644
index 0000000..30aac78
--- /dev/null
+++ b/vendor/gen/https/jsr.io/22868d83da97dcd7a8b8491b9f56f3278eb38b6c47aa5068bfaba35ed4f184fe.js
@@ -0,0 +1,5 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/** Return type for {@linkcode extract} function. */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKiBSZXR1cm4gdHlwZSBmb3Ige0BsaW5rY29kZSBleHRyYWN0fSBmdW5jdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEV4dHJhY3Q8VD4gPSB7XG4gIGZyb250TWF0dGVyOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgYXR0cnM6IFQ7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsa0RBQWtELEdBQ2xEIn0=
+// denoCacheMetadata=7380334364819250751,436006909503853351 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/23dd695362b33b015f9571c930e513361219d796e62f6994cb54ecbf1f8847bb.js b/vendor/gen/https/jsr.io/23dd695362b33b015f9571c930e513361219d796e62f6994cb54ecbf1f8847bb.js
new file mode 100644
index 0000000..488b036
--- /dev/null
+++ b/vendor/gen/https/jsr.io/23dd695362b33b015f9571c930e513361219d796e62f6994cb54ecbf1f8847bb.js
@@ -0,0 +1,84 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_DOT } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return the extension of the `path` with leading period.
+ *
+ * @example Usage
+ * ```ts
+ * import { extname } from "@std/path/posix/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(extname("/home/user/Documents/file.ts"), ".ts");
+ * assertEquals(extname("/home/user/Documents/"), "");
+ * assertEquals(extname("/home/user/Documents/image.png"), ".png");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * Note: This function doesn't automatically strip hash and query parts from
+ * URLs. If your URL contains a hash or query, remove them before passing the
+ * URL to the function. This can be done by passing the URL to `new URL(url)`,
+ * and setting the `hash` and `search` properties to empty strings.
+ *
+ * ```ts
+ * import { extname } from "@std/path/posix/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(extname("https://deno.land/std/path/mod.ts"), ".ts");
+ * assertEquals(extname("https://deno.land/std/path/mod.ts?a=b"), ".ts?a=b");
+ * assertEquals(extname("https://deno.land/std/path/mod.ts#header"), ".ts#header");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `extname` from `@std/path/posix/unstable-extname`.
+ *
+ * @param path The path to get the extension from.
+ * @returns The extension (ex. for `file.ts` returns `.ts`).
+ */ export function extname(path) {
+ assertPath(path);
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ for(let i = path.length - 1; i >= 0; --i){
+ const code = path.charCodeAt(i);
+ if (isPosixPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ return "";
+ }
+ return path.slice(startDot, end);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9leHRuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfRE9UIH0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRQYXRoIH0gZnJvbSBcIi4uL19jb21tb24vYXNzZXJ0X3BhdGgudHNcIjtcbmltcG9ydCB7IGlzUG9zaXhQYXRoU2VwYXJhdG9yIH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgIHdpdGggbGVhZGluZyBwZXJpb2QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9leHRuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZXh0bmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL2ZpbGUudHNcIiksIFwiLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGV4dG5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9cIiksIFwiXCIpO1xuICogYXNzZXJ0RXF1YWxzKGV4dG5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9pbWFnZS5wbmdcIiksIFwiLnBuZ1wiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdvcmtpbmcgd2l0aCBVUkxzXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc3RyaXAgaGFzaCBhbmQgcXVlcnkgcGFydHMgZnJvbVxuICogVVJMcy4gSWYgeW91ciBVUkwgY29udGFpbnMgYSBoYXNoIG9yIHF1ZXJ5LCByZW1vdmUgdGhlbSBiZWZvcmUgcGFzc2luZyB0aGVcbiAqIFVSTCB0byB0aGUgZnVuY3Rpb24uIFRoaXMgY2FuIGJlIGRvbmUgYnkgcGFzc2luZyB0aGUgVVJMIHRvIGBuZXcgVVJMKHVybClgLFxuICogYW5kIHNldHRpbmcgdGhlIGBoYXNoYCBhbmQgYHNlYXJjaGAgcHJvcGVydGllcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9leHRuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZXh0bmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50c1wiKSwgXCIudHNcIik7XG4gKiBhc3NlcnRFcXVhbHMoZXh0bmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50cz9hPWJcIiksIFwiLnRzP2E9YlwiKTtcbiAqIGFzc2VydEVxdWFscyhleHRuYW1lKFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL3BhdGgvbW9kLnRzI2hlYWRlclwiKSwgXCIudHMjaGVhZGVyXCIpO1xuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgZXh0bmFtZWAgZnJvbSBgQHN0ZC9wYXRoL3Bvc2l4L3Vuc3RhYmxlLWV4dG5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgZXh0ZW5zaW9uIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIChleC4gZm9yIGBmaWxlLnRzYCByZXR1cm5zIGAudHNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dG5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFFBQVEsUUFBUSwwQkFBMEI7QUFDbkQsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtDQyxHQUNELE9BQU8sU0FBUyxRQUFRLElBQVk7RUFDbEMsV0FBVztFQUVYLElBQUksV0FBVyxDQUFDO0VBQ2hCLElBQUksWUFBWTtFQUNoQixJQUFJLE1BQU0sQ0FBQztFQUNYLElBQUksZUFBZTtFQUNuQix5RUFBeUU7RUFDekUsbUNBQW1DO0VBQ25DLElBQUksY0FBYztFQUNsQixJQUFLLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUc7SUFDekMsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzdCLElBQUkscUJBQXFCLE9BQU87TUFDOUIsb0VBQW9FO01BQ3BFLGdEQUFnRDtNQUNoRCxJQUFJLENBQUMsY0FBYztRQUNqQixZQUFZLElBQUk7UUFDaEI7TUFDRjtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO01BQ2QsbUVBQW1FO01BQ25FLFlBQVk7TUFDWixlQUFlO01BQ2YsTUFBTSxJQUFJO0lBQ1o7SUFDQSxJQUFJLFNBQVMsVUFBVTtNQUNyQixrRUFBa0U7TUFDbEUsSUFBSSxhQUFhLENBQUMsR0FBRyxXQUFXO1dBQzNCLElBQUksZ0JBQWdCLEdBQUcsY0FBYztJQUM1QyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUc7TUFDMUIsdUVBQXVFO01BQ3ZFLHFEQUFxRDtNQUNyRCxjQUFjLENBQUM7SUFDakI7RUFDRjtFQUVBLElBQ0UsYUFBYSxDQUFDLEtBQ2QsUUFBUSxDQUFDLEtBQ1Qsd0RBQXdEO0VBQ3hELGdCQUFnQixLQUNoQiwwREFBMEQ7RUFDekQsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0lBQ0EsT0FBTztFQUNUO0VBQ0EsT0FBTyxLQUFLLEtBQUssQ0FBQyxVQUFVO0FBQzlCIn0=
+// denoCacheMetadata=441796846989631709,9912120908674676564 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/240ddf07245e78a80fd400a82f119a5d566397aec6081dec5d65e4022396199d.js b/vendor/gen/https/jsr.io/240ddf07245e78a80fd400a82f119a5d566397aec6081dec5d65e4022396199d.js
new file mode 100644
index 0000000..021be07
--- /dev/null
+++ b/vendor/gen/https/jsr.io/240ddf07245e78a80fd400a82f119a5d566397aec6081dec5d65e4022396199d.js
@@ -0,0 +1,42 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "../_common/assert_path.ts";
+import { normalize } from "./normalize.ts";
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ *
+ * @example Usage
+ * ```ts
+ * import { join } from "@std/path/posix/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = join("/foo", "bar", "baz/asdf", "quux", "..");
+ * assertEquals(path, "/foo/bar/baz/asdf");
+ * ```
+ *
+ * @example Working with URLs
+ * ```ts
+ * import { join } from "@std/path/posix/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const url = new URL("https://deno.land");
+ * url.pathname = join("std", "path", "mod.ts");
+ * assertEquals(url.href, "https://deno.land/std/path/mod.ts");
+ *
+ * url.pathname = join("//std", "path/", "/mod.ts");
+ * assertEquals(url.href, "https://deno.land/std/path/mod.ts");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `join` from `@std/path/posix/unstable-join`.
+ *
+ * @param paths The paths to join.
+ * @returns The joined path.
+ */ export function join(...paths) {
+ if (paths.length === 0) return ".";
+ paths.forEach((path)=>assertPath(path));
+ const joined = paths.filter((path)=>path.length > 0).join("/");
+ return joined === "" ? "." : normalize(joined);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9qb2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIi4vbm9ybWFsaXplLnRzXCI7XG5cbi8qKlxuICogSm9pbiBhbGwgZ2l2ZW4gYSBzZXF1ZW5jZSBvZiBgcGF0aHNgLHRoZW4gbm9ybWFsaXplcyB0aGUgcmVzdWx0aW5nIHBhdGguXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9qb2luXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gam9pbihcIi9mb29cIiwgXCJiYXJcIiwgXCJiYXovYXNkZlwiLCBcInF1dXhcIiwgXCIuLlwiKTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi9mb28vYmFyL2Jhei9hc2RmXCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgV29ya2luZyB3aXRoIFVSTHNcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9qb2luXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCB1cmwgPSBuZXcgVVJMKFwiaHR0cHM6Ly9kZW5vLmxhbmRcIik7XG4gKiB1cmwucGF0aG5hbWUgPSBqb2luKFwic3RkXCIsIFwicGF0aFwiLCBcIm1vZC50c1wiKTtcbiAqIGFzc2VydEVxdWFscyh1cmwuaHJlZiwgXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHNcIik7XG4gKlxuICogdXJsLnBhdGhuYW1lID0gam9pbihcIi8vc3RkXCIsIFwicGF0aC9cIiwgXCIvbW9kLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKHVybC5ocmVmLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50c1wiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGpvaW5gIGZyb20gYEBzdGQvcGF0aC9wb3NpeC91bnN0YWJsZS1qb2luYC5cbiAqXG4gKiBAcGFyYW0gcGF0aHMgVGhlIHBhdGhzIHRvIGpvaW4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChwYXRocy5sZW5ndGggPT09IDApIHJldHVybiBcIi5cIjtcbiAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4gYXNzZXJ0UGF0aChwYXRoKSk7XG4gIGNvbnN0IGpvaW5lZCA9IHBhdGhzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5sZW5ndGggPiAwKS5qb2luKFwiL1wiKTtcbiAgcmV0dXJuIGpvaW5lZCA9PT0gXCJcIiA/IFwiLlwiIDogbm9ybWFsaXplKGpvaW5lZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QkMsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFHLEtBQWU7RUFDckMsSUFBSSxNQUFNLE1BQU0sS0FBSyxHQUFHLE9BQU87RUFDL0IsTUFBTSxPQUFPLENBQUMsQ0FBQyxPQUFTLFdBQVc7RUFDbkMsTUFBTSxTQUFTLE1BQU0sTUFBTSxDQUFDLENBQUMsT0FBUyxLQUFLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztFQUM1RCxPQUFPLFdBQVcsS0FBSyxNQUFNLFVBQVU7QUFDekMifQ==
+// denoCacheMetadata=2304529185096435254,4053921657207254428 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/264b5c2fd3ca2f77b897f4ca4174959deb5b0ba0827f362927dbfc32f904859c.js b/vendor/gen/https/jsr.io/264b5c2fd3ca2f77b897f4ca4174959deb5b0ba0827f362927dbfc32f904859c.js
new file mode 100644
index 0000000..39f8e25
--- /dev/null
+++ b/vendor/gen/https/jsr.io/264b5c2fd3ca2f77b897f4ca4174959deb5b0ba0827f362927dbfc32f904859c.js
@@ -0,0 +1,95 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isPosixPathSeparator } from "./_util.ts";
+import { resolve } from "./resolve.ts";
+import { assertArgs } from "../_common/relative.ts";
+/**
+ * Return the relative path from `from` to `to` based on current working directory.
+ *
+ * If `from` and `to` are the same, return an empty string.
+ *
+ * @example Usage
+ * ```ts
+ * import { relative } from "@std/path/posix/relative";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb");
+ * assertEquals(path, "../../impl/bbb");
+ * ```
+ *
+ * @param from The path to start from.
+ * @param to The path to reach.
+ * @returns The relative path.
+ */ export function relative(from, to) {
+ assertArgs(from, to);
+ from = resolve(from);
+ to = resolve(to);
+ if (from === to) return "";
+ // Trim any leading backslashes
+ let fromStart = 1;
+ const fromEnd = from.length;
+ for(; fromStart < fromEnd; ++fromStart){
+ if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break;
+ }
+ const fromLen = fromEnd - fromStart;
+ // Trim any leading backslashes
+ let toStart = 1;
+ const toEnd = to.length;
+ for(; toStart < toEnd; ++toStart){
+ if (!isPosixPathSeparator(to.charCodeAt(toStart))) break;
+ }
+ const toLen = toEnd - toStart;
+ // Compare paths to find the longest common path from root
+ const length = fromLen < toLen ? fromLen : toLen;
+ let lastCommonSep = -1;
+ let i = 0;
+ for(; i <= length; ++i){
+ if (i === length) {
+ if (toLen > length) {
+ if (isPosixPathSeparator(to.charCodeAt(toStart + i))) {
+ // We get here if `from` is the exact base path for `to`.
+ // For example: from='/foo/bar'; to='/foo/bar/baz'
+ return to.slice(toStart + i + 1);
+ } else if (i === 0) {
+ // We get here if `from` is the root
+ // For example: from='/'; to='/foo'
+ return to.slice(toStart + i);
+ }
+ } else if (fromLen > length) {
+ if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='/foo/bar/baz'; to='/foo/bar'
+ lastCommonSep = i;
+ } else if (i === 0) {
+ // We get here if `to` is the root.
+ // For example: from='/foo'; to='/'
+ lastCommonSep = 0;
+ }
+ }
+ break;
+ }
+ const fromCode = from.charCodeAt(fromStart + i);
+ const toCode = to.charCodeAt(toStart + i);
+ if (fromCode !== toCode) break;
+ else if (isPosixPathSeparator(fromCode)) lastCommonSep = i;
+ }
+ let out = "";
+ // Generate the relative path based on the path difference between `to`
+ // and `from`
+ for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
+ if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) {
+ if (out.length === 0) out += "..";
+ else out += "/..";
+ }
+ }
+ // Lastly, append the rest of the destination (`to`) path that comes after
+ // the common path parts
+ if (out.length > 0) return out + to.slice(toStart + lastCommonSep);
+ else {
+ toStart += lastCommonSep;
+ if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart;
+ return to.slice(toStart);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9yZWxhdGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1Bvc2l4UGF0aFNlcGFyYXRvciB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vcmVzb2x2ZS50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0QXJncyB9IGZyb20gXCIuLi9fY29tbW9uL3JlbGF0aXZlLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gYGZyb21gIHRvIGB0b2AgYmFzZWQgb24gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqXG4gKiBJZiBgZnJvbWAgYW5kIGB0b2AgYXJlIHRoZSBzYW1lLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L3JlbGF0aXZlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gcmVsYXRpdmUoXCIvZGF0YS9vcmFuZGVhL3Rlc3QvYWFhXCIsIFwiL2RhdGEvb3JhbmRlYS9pbXBsL2JiYlwiKTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi4uLy4uL2ltcGwvYmJiXCIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGZyb20gVGhlIHBhdGggdG8gc3RhcnQgZnJvbS5cbiAqIEBwYXJhbSB0byBUaGUgcGF0aCB0byByZWFjaC5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJncyhmcm9tLCB0byk7XG5cbiAgZnJvbSA9IHJlc29sdmUoZnJvbSk7XG4gIHRvID0gcmVzb2x2ZSh0byk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCBmcm9tU3RhcnQgPSAxO1xuICBjb25zdCBmcm9tRW5kID0gZnJvbS5sZW5ndGg7XG4gIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tRW5kOyArK2Zyb21TdGFydCkge1xuICAgIGlmICghaXNQb3NpeFBhdGhTZXBhcmF0b3IoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkpKSBicmVhaztcbiAgfVxuICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCB0b1N0YXJ0ID0gMTtcbiAgY29uc3QgdG9FbmQgPSB0by5sZW5ndGg7XG4gIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkge1xuICAgIGlmICghaXNQb3NpeFBhdGhTZXBhcmF0b3IodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSkpIGJyZWFrO1xuICB9XG4gIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICBsZXQgbGFzdENvbW1vblNlcCA9IC0xO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcih0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSkpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYHRvYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6J1xuICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3RcbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nLyc7IHRvPScvZm9vJ1xuICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZnJvbUxlbiA+IGxlbmd0aCkge1xuICAgICAgICBpZiAoaXNQb3NpeFBhdGhTZXBhcmF0b3IoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpKSkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhci9iYXonOyB0bz0nL2Zvby9iYXInXG4gICAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28nOyB0bz0nLydcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKSBicmVhaztcbiAgICBlbHNlIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcihmcm9tQ29kZSkpIGxhc3RDb21tb25TZXAgPSBpO1xuICB9XG5cbiAgbGV0IG91dCA9IFwiXCI7XG4gIC8vIEdlbmVyYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJhc2VkIG9uIHRoZSBwYXRoIGRpZmZlcmVuY2UgYmV0d2VlbiBgdG9gXG4gIC8vIGFuZCBgZnJvbWBcbiAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGZyb21FbmQgfHwgaXNQb3NpeFBhdGhTZXBhcmF0b3IoZnJvbS5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApIG91dCArPSBcIi4uXCI7XG4gICAgICBlbHNlIG91dCArPSBcIi8uLlwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhc3RseSwgYXBwZW5kIHRoZSByZXN0IG9mIHRoZSBkZXN0aW5hdGlvbiAoYHRvYCkgcGF0aCB0aGF0IGNvbWVzIGFmdGVyXG4gIC8vIHRoZSBjb21tb24gcGF0aCBwYXJ0c1xuICBpZiAob3V0Lmxlbmd0aCA+IDApIHJldHVybiBvdXQgKyB0by5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCk7XG4gIGVsc2Uge1xuICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICBpZiAoaXNQb3NpeFBhdGhTZXBhcmF0b3IodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSkpICsrdG9TdGFydDtcbiAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNB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
+// denoCacheMetadata=12271045797647757586,4042904861671241489 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2690ba5c1d393196f984c7da831a246087c0b598c0e496771bfe1304f0d014f2.js b/vendor/gen/https/jsr.io/2690ba5c1d393196f984c7da831a246087c0b598c0e496771bfe1304f0d014f2.js
new file mode 100644
index 0000000..1645dd3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2690ba5c1d393196f984c7da831a246087c0b598c0e496771bfe1304f0d014f2.js
@@ -0,0 +1,55 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/normalize.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Normalize the `path`, resolving `'..'` and `'.'` segments.
+ * Note that resolving these segments does not necessarily mean that all will be eliminated.
+ * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalize } from "@std/path/posix/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = normalize("/foo/bar//baz/asdf/quux/..");
+ * assertEquals(path, "/foo/bar/baz/asdf");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * Note: This function will remove the double slashes from a URL's scheme.
+ * Hence, do not pass a full URL to this function. Instead, pass the pathname of
+ * the URL.
+ *
+ * ```ts
+ * import { normalize } from "@std/path/posix/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const url = new URL("https://deno.land");
+ * url.pathname = normalize("//std//assert//.//mod.ts");
+ * assertEquals(url.href, "https://deno.land/std/assert/mod.ts");
+ *
+ * url.pathname = normalize("std/assert/../async/retry.ts");
+ * assertEquals(url.href, "https://deno.land/std/async/retry.ts");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `normalize` from `@std/path/posix/unstable-normalize`.
+ *
+ * @param path The path to normalize.
+ * @returns The normalized path.
+ */ export function normalize(path) {
+ assertArg(path);
+ const isAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ const trailingSeparator = isPosixPathSeparator(path.charCodeAt(path.length - 1));
+ // Normalize the path
+ path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator);
+ if (path.length === 0 && !isAbsolute) path = ".";
+ if (path.length > 0 && trailingSeparator) path += "/";
+ if (isAbsolute) return `/${path}`;
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9ub3JtYWxpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vbm9ybWFsaXplLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tIFwiLi4vX2NvbW1vbi9ub3JtYWxpemVfc3RyaW5nLnRzXCI7XG5pbXBvcnQgeyBpc1Bvc2l4UGF0aFNlcGFyYXRvciB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBgcGF0aGAsIHJlc29sdmluZyBgJy4uJ2AgYW5kIGAnLidgIHNlZ21lbnRzLlxuICogTm90ZSB0aGF0IHJlc29sdmluZyB0aGVzZSBzZWdtZW50cyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgYWxsIHdpbGwgYmUgZWxpbWluYXRlZC5cbiAqIEEgYCcuLidgIGF0IHRoZSB0b3AtbGV2ZWwgd2lsbCBiZSBwcmVzZXJ2ZWQsIGFuZCBhbiBlbXB0eSBwYXRoIGlzIGNhbm9uaWNhbGx5IGAnLidgLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9ub3JtYWxpemVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSBub3JtYWxpemUoXCIvZm9vL2Jhci8vYmF6L2FzZGYvcXV1eC8uLlwiKTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi9mb28vYmFyL2Jhei9hc2RmXCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgV29ya2luZyB3aXRoIFVSTHNcbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlIHRoZSBkb3VibGUgc2xhc2hlcyBmcm9tIGEgVVJMJ3Mgc2NoZW1lLlxuICogSGVuY2UsIGRvIG5vdCBwYXNzIGEgZnVsbCBVUkwgdG8gdGhpcyBmdW5jdGlvbi4gSW5zdGVhZCwgcGFzcyB0aGUgcGF0aG5hbWUgb2ZcbiAqIHRoZSBVUkwuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvbm9ybWFsaXplXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCB1cmwgPSBuZXcgVVJMKFwiaHR0cHM6Ly9kZW5vLmxhbmRcIik7XG4gKiB1cmwucGF0aG5hbWUgPSBub3JtYWxpemUoXCIvL3N0ZC8vYXNzZXJ0Ly8uLy9tb2QudHNcIik7XG4gKiBhc3NlcnRFcXVhbHModXJsLmhyZWYsIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL2Fzc2VydC9tb2QudHNcIik7XG4gKlxuICogdXJsLnBhdGhuYW1lID0gbm9ybWFsaXplKFwic3RkL2Fzc2VydC8uLi9hc3luYy9yZXRyeS50c1wiKTtcbiAqIGFzc2VydEVxdWFscyh1cmwuaHJlZiwgXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvYXN5bmMvcmV0cnkudHNcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBub3JtYWxpemVgIGZyb20gYEBzdGQvcGF0aC9wb3NpeC91bnN0YWJsZS1ub3JtYWxpemVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJnKHBhdGgpO1xuXG4gIGNvbnN0IGlzQWJzb2x1dGUgPSBpc1Bvc2l4UGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMCkpO1xuICBjb25zdCB0cmFpbGluZ1NlcGFyYXRvciA9IGlzUG9zaXhQYXRoU2VwYXJhdG9yKFxuICAgIHBhdGguY2hhckNvZGVBdChwYXRoLmxlbmd0aCAtIDEpLFxuICApO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplU3RyaW5nKHBhdGgsICFpc0Fic29sdXRlLCBcIi9cIiwgaXNQb3NpeFBhdGhTZXBhcmF0b3IpO1xuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgcGF0aCA9IFwiLlwiO1xuICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9IFwiL1wiO1xuXG4gIGlmIChpc0Fic29sdXRlKSByZXR1cm4gYC8ke3BhdGh9YDtcbiAgcmV0dXJuIHBhdGg7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSwwQkFBMEI7QUFDcEQsU0FBUyxlQUFlLFFBQVEsaUNBQWlDO0FBQ2pFLFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFDQyxHQUNELE9BQU8sU0FBUyxVQUFVLElBQVk7RUFDcEMsVUFBVTtFQUVWLE1BQU0sYUFBYSxxQkFBcUIsS0FBSyxVQUFVLENBQUM7RUFDeEQsTUFBTSxvQkFBb0IscUJBQ3hCLEtBQUssVUFBVSxDQUFDLEtBQUssTUFBTSxHQUFHO0VBR2hDLHFCQUFxQjtFQUNyQixPQUFPLGdCQUFnQixNQUFNLENBQUMsWUFBWSxLQUFLO0VBRS9DLElBQUksS0FBSyxNQUFNLEtBQUssS0FBSyxDQUFDLFlBQVksT0FBTztFQUM3QyxJQUFJLEtBQUssTUFBTSxHQUFHLEtBQUssbUJBQW1CLFFBQVE7RUFFbEQsSUFBSSxZQUFZLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTTtFQUNqQyxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=14729942179157207931,7246496928428959261 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/272b8f245218da9945acf2490e22fd5b03b0b7f84d7e9400ecf2770a34f360c7.js b/vendor/gen/https/jsr.io/272b8f245218da9945acf2490e22fd5b03b0b7f84d7e9400ecf2770a34f360c7.js
new file mode 100644
index 0000000..07472c5
--- /dev/null
+++ b/vendor/gen/https/jsr.io/272b8f245218da9945acf2490e22fd5b03b0b7f84d7e9400ecf2770a34f360c7.js
@@ -0,0 +1,146 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { binary } from "./_type/binary.ts";
+import { bool } from "./_type/bool.ts";
+import { float } from "./_type/float.ts";
+import { int } from "./_type/int.ts";
+import { map } from "./_type/map.ts";
+import { merge } from "./_type/merge.ts";
+import { nil } from "./_type/nil.ts";
+import { omap } from "./_type/omap.ts";
+import { pairs } from "./_type/pairs.ts";
+import { regexp } from "./_type/regexp.ts";
+import { seq } from "./_type/seq.ts";
+import { set } from "./_type/set.ts";
+import { str } from "./_type/str.ts";
+import { timestamp } from "./_type/timestamp.ts";
+import { undefinedType } from "./_type/undefined.ts";
+function createTypeMap(implicitTypes, explicitTypes) {
+ const result = {
+ fallback: new Map(),
+ mapping: new Map(),
+ scalar: new Map(),
+ sequence: new Map()
+ };
+ const fallbackMap = result.fallback;
+ for (const type of [
+ ...implicitTypes,
+ ...explicitTypes
+ ]){
+ const map = result[type.kind];
+ map.set(type.tag, type);
+ fallbackMap.set(type.tag, type);
+ }
+ return result;
+}
+function createSchema({ explicitTypes = [], implicitTypes = [], include }) {
+ if (include) {
+ implicitTypes.push(...include.implicitTypes);
+ explicitTypes.push(...include.explicitTypes);
+ }
+ const typeMap = createTypeMap(implicitTypes, explicitTypes);
+ return {
+ implicitTypes,
+ explicitTypes,
+ typeMap
+ };
+}
+/**
+ * Standard YAML's failsafe schema.
+ *
+ * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2802346}
+ */ const FAILSAFE_SCHEMA = createSchema({
+ explicitTypes: [
+ str,
+ seq,
+ map
+ ]
+});
+/**
+ * Standard YAML's JSON schema.
+ *
+ * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2803231}
+ */ const JSON_SCHEMA = createSchema({
+ implicitTypes: [
+ nil,
+ bool,
+ int,
+ float
+ ],
+ include: FAILSAFE_SCHEMA
+});
+/**
+ * Standard YAML's core schema.
+ *
+ * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2804923}
+ */ const CORE_SCHEMA = createSchema({
+ include: JSON_SCHEMA
+});
+/**
+ * Default YAML schema. It is not described in the YAML specification.
+ */ export const DEFAULT_SCHEMA = createSchema({
+ explicitTypes: [
+ binary,
+ omap,
+ pairs,
+ set
+ ],
+ implicitTypes: [
+ timestamp,
+ merge
+ ],
+ include: CORE_SCHEMA
+});
+/***
+ * Extends JS-YAML default schema with additional JavaScript types
+ * It is not described in the YAML specification.
+ * Functions are no longer supported for security reasons.
+ *
+ * @example
+ * ```ts
+ * import { parse } from "@std/yaml";
+ *
+ * const data = parse(
+ * `
+ * regexp:
+ * simple: !!js/regexp foobar
+ * modifiers: !!js/regexp /foobar/mi
+ * undefined: !!js/undefined ~
+ * `,
+ * { schema: "extended" },
+ * );
+ * ```
+ */ const EXTENDED_SCHEMA = createSchema({
+ explicitTypes: [
+ regexp,
+ undefinedType
+ ],
+ include: DEFAULT_SCHEMA
+});
+export const SCHEMA_MAP = new Map([
+ [
+ "core",
+ CORE_SCHEMA
+ ],
+ [
+ "default",
+ DEFAULT_SCHEMA
+ ],
+ [
+ "failsafe",
+ FAILSAFE_SCHEMA
+ ],
+ [
+ "json",
+ JSON_SCHEMA
+ ],
+ [
+ "extended",
+ EXTENDED_SCHEMA
+ ]
+]);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fc2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgS2luZFR5cGUsIFR5cGUgfSBmcm9tIFwiLi9fdHlwZS50c1wiO1xuaW1wb3J0IHsgYmluYXJ5IH0gZnJvbSBcIi4vX3R5cGUvYmluYXJ5LnRzXCI7XG5pbXBvcnQgeyBib29sIH0gZnJvbSBcIi4vX3R5cGUvYm9vbC50c1wiO1xuaW1wb3J0IHsgZmxvYXQgfSBmcm9tIFwiLi9fdHlwZS9mbG9hdC50c1wiO1xuaW1wb3J0IHsgaW50IH0gZnJvbSBcIi4vX3R5cGUvaW50LnRzXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwiLi9fdHlwZS9tYXAudHNcIjtcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSBcIi4vX3R5cGUvbWVyZ2UudHNcIjtcbmltcG9ydCB7IG5pbCB9IGZyb20gXCIuL190eXBlL25pbC50c1wiO1xuaW1wb3J0IHsgb21hcCB9IGZyb20gXCIuL190eXBlL29tYXAudHNcIjtcbmltcG9ydCB7IHBhaXJzIH0gZnJvbSBcIi4vX3R5cGUvcGFpcnMudHNcIjtcbmltcG9ydCB7IHJlZ2V4cCB9IGZyb20gXCIuL190eXBlL3JlZ2V4cC50c1wiO1xuaW1wb3J0IHsgc2VxIH0gZnJvbSBcIi4vX3R5cGUvc2VxLnRzXCI7XG5pbXBvcnQgeyBzZXQgfSBmcm9tIFwiLi9fdHlwZS9zZXQudHNcIjtcbmltcG9ydCB7IHN0ciB9IGZyb20gXCIuL190eXBlL3N0ci50c1wiO1xuaW1wb3J0IHsgdGltZXN0YW1wIH0gZnJvbSBcIi4vX3R5cGUvdGltZXN0YW1wLnRzXCI7XG5pbXBvcnQgeyB1bmRlZmluZWRUeXBlIH0gZnJvbSBcIi4vX3R5cGUvdW5kZWZpbmVkLnRzXCI7XG5cbi8qKlxuICogTmFtZSBvZiB0aGUgc2NoZW1hIHRvIHVzZS5cbiAqXG4gKiA+IFshTk9URV1cbiAqID4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBzY2hlbWEgdGhhdCBpcyBtb3N0IGFwcHJvcHJpYXRlIGZvciB5b3VyIHVzZVxuICogPiBjYXNlLiBEb2luZyBzbyB3aWxsIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBwcm9jZXNzaW5nIGFuZCBiZW5lZml0XG4gKiA+IHBlcmZvcm1hbmNlLlxuICpcbiAqIE9wdGlvbnMgaW5jbHVkZTpcbiAqIC0gYGZhaWxzYWZlYDogc3VwcG9ydHMgZ2VuZXJpYyBtYXBwaW5ncywgZ2VuZXJpYyBzZXF1ZW5jZXMgYW5kIGdlbmVyaWNcbiAqIHN0cmluZ3MuXG4gKiAtIGBqc29uYDogZXh0ZW5kcyBgZmFpbHNhZmVgIHNjaGVtYSBieSBhbHNvIHN1cHBvcnRpbmcgbnVsbHMsIGJvb2xlYW5zLFxuICogaW50ZWdlcnMgYW5kIGZsb2F0cy5cbiAqIC0gYGNvcmVgOiBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgYGpzb25gIHNjaGVtYS5cbiAqIC0gYGRlZmF1bHRgOiBleHRlbmRzIGBjb3JlYCBzY2hlbWEgYnkgYWxzbyBzdXBwb3J0aW5nIGJpbmFyeSwgb21hcCwgcGFpcnMgYW5kXG4gKiBzZXQgdHlwZXMuXG4gKiAtIGBleHRlbmRlZGA6IGV4dGVuZHMgYGRlZmF1bHRgIHNjaGVtYSBieSBhbHNvIHN1cHBvcnRpbmcgcmVndWxhclxuICogZXhwcmVzc2lvbnMgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gKlxuICogU2VlXG4gKiB7QGxpbmsgaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi4yLyNjaGFwdGVyLTEwLXJlY29tbWVuZGVkLXNjaGVtYXMgfCBZQU1MIDEuMiBzcGVjfVxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYGZhaWxzYWZlYCwgYGpzb25gIGFuZCBgY29yZWAgc2NoZW1hcy5cbiAqL1xuZXhwb3J0IHR5cGUgU2NoZW1hVHlwZSA9IFwiZmFpbHNhZmVcIiB8IFwianNvblwiIHwgXCJjb3JlXCIgfCBcImRlZmF1bHRcIiB8IFwiZXh0ZW5kZWRcIjtcblxudHlwZSBJbXBsaWNpdFR5cGUgPSBUeXBlPFwic2NhbGFyXCI+O1xudHlwZSBFeHBsaWNpdFR5cGUgPSBUeXBlPEtpbmRUeXBlPjtcblxuZXhwb3J0IHR5cGUgVHlwZU1hcCA9IFJlY29yZDxcbiAgS2luZFR5cGUgfCBcImZhbGxiYWNrXCIsXG4gIE1hcDxzdHJpbmcsIEV4cGxpY2l0VHlwZT5cbj47XG5cbmZ1bmN0aW9uIGNyZWF0ZVR5cGVNYXAoXG4gIGltcGxpY2l0VHlwZXM6IEltcGxpY2l0VHlwZVtdLFxuICBleHBsaWNpdFR5cGVzOiBFeHBsaWNpdFR5cGVbXSxcbik6IFR5cGVNYXAge1xuICBjb25zdCByZXN1bHQ6IFR5cGVNYXAgPSB7XG4gICAgZmFsbGJhY2s6IG5ldyBNYXAoKSxcbiAgICBtYXBwaW5nOiBuZXcgTWFwKCksXG4gICAgc2NhbGFyOiBuZXcgTWFwKCksXG4gICAgc2VxdWVuY2U6IG5ldyBNYXAoKSxcbiAgfTtcbiAgY29uc3QgZmFsbGJhY2tNYXAgPSByZXN1bHQuZmFsbGJhY2s7XG4gIGZvciAoY29uc3QgdHlwZSBvZiBbLi4uaW1wbGljaXRUeXBlcywgLi4uZXhwbGljaXRUeXBlc10pIHtcbiAgICBjb25zdCBtYXAgPSByZXN1bHRbdHlwZS5raW5kXTtcbiAgICBtYXAuc2V0KHR5cGUudGFnLCB0eXBlKTtcbiAgICBmYWxsYmFja01hcC5zZXQodHlwZS50YWcsIHR5cGUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hIHtcbiAgaW1wbGljaXRUeXBlczogSW1wbGljaXRUeXBlW107XG4gIGV4cGxpY2l0VHlwZXM6IEV4cGxpY2l0VHlwZVtdO1xuICB0eXBlTWFwOiBUeXBlTWFwO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTY2hlbWEoeyBleHBsaWNpdFR5cGVzID0gW10sIGltcGxpY2l0VHlwZXMgPSBbXSwgaW5jbHVkZSB9OiB7XG4gIGltcGxpY2l0VHlwZXM/OiBJbXBsaWNpdFR5cGVbXTtcbiAgZXhwbGljaXRUeXBlcz86IEV4cGxpY2l0VHlwZVtdO1xuICBpbmNsdWRlPzogU2NoZW1hO1xufSk6IFNjaGVtYSB7XG4gIGlmIChpbmNsdWRlKSB7XG4gICAgaW1wbGljaXRUeXBlcy5wdXNoKC4uLmluY2x1ZGUuaW1wbGljaXRUeXBlcyk7XG4gICAgZXhwbGljaXRUeXBlcy5wdXNoKC4uLmluY2x1ZGUuZXhwbGljaXRUeXBlcyk7XG4gIH1cbiAgY29uc3QgdHlwZU1hcCA9IGNyZWF0ZVR5cGVNYXAoaW1wbGljaXRUeXBlcywgZXhwbGljaXRUeXBlcyk7XG4gIHJldHVybiB7IGltcGxpY2l0VHlwZXMsIGV4cGxpY2l0VHlwZXMsIHR5cGVNYXAgfTtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBZQU1MJ3MgZmFpbHNhZmUgc2NoZW1hLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0Nn1cbiAqL1xuY29uc3QgRkFJTFNBRkVfU0NIRU1BID0gY3JlYXRlU2NoZW1hKHtcbiAgZXhwbGljaXRUeXBlczogW3N0ciwgc2VxLCBtYXBdLFxufSk7XG5cbi8qKlxuICogU3RhbmRhcmQgWUFNTCdzIEpTT04gc2NoZW1hLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMzIzMX1cbiAqL1xuY29uc3QgSlNPTl9TQ0hFTUEgPSBjcmVhdGVTY2hlbWEoe1xuICBpbXBsaWNpdFR5cGVzOiBbbmlsLCBib29sLCBpbnQsIGZsb2F0XSxcbiAgaW5jbHVkZTogRkFJTFNBRkVfU0NIRU1BLFxufSk7XG5cbi8qKlxuICogU3RhbmRhcmQgWUFNTCdzIGNvcmUgc2NoZW1hLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM31cbiAqL1xuY29uc3QgQ09SRV9TQ0hFTUEgPSBjcmVhdGVTY2hlbWEoe1xuICBpbmNsdWRlOiBKU09OX1NDSEVNQSxcbn0pO1xuXG4vKipcbiAqIERlZmF1bHQgWUFNTCBzY2hlbWEuIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0NIRU1BID0gY3JlYXRlU2NoZW1hKHtcbiAgZXhwbGljaXRUeXBlczogW2JpbmFyeSwgb21hcCwgcGFpcnMsIHNldF0sXG4gIGltcGxpY2l0VHlwZXM6IFt0aW1lc3RhbXAsIG1lcmdlXSxcbiAgaW5jbHVkZTogQ09SRV9TQ0hFTUEsXG59KTtcblxuLyoqKlxuICogRXh0ZW5kcyBKUy1ZQU1MIGRlZmF1bHQgc2NoZW1hIHdpdGggYWRkaXRpb25hbCBKYXZhU2NyaXB0IHR5cGVzXG4gKiBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4gKiBGdW5jdGlvbnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAc3RkL3lhbWxcIjtcbiAqXG4gKiBjb25zdCBkYXRhID0gcGFyc2UoXG4gKiAgIGBcbiAqICAgcmVnZXhwOlxuICogICAgIHNpbXBsZTogISFqcy9yZWdleHAgZm9vYmFyXG4gKiAgICAgbW9kaWZpZXJzOiAhIWpzL3JlZ2V4cCAvZm9vYmFyL21pXG4gKiAgIHVuZGVmaW5lZDogISFqcy91bmRlZmluZWQgflxuICogYCxcbiAqICAgeyBzY2hlbWE6IFwiZXh0ZW5kZWRcIiB9LFxuICogKTtcbiAqIGBgYFxuICovXG5jb25zdCBFWFRFTkRFRF9TQ0hFTUEgPSBjcmVhdGVTY2hlbWEoe1xuICBleHBsaWNpdFR5cGVzOiBbcmVnZXhwLCB1bmRlZmluZWRUeXBlXSxcbiAgaW5jbHVkZTogREVGQVVMVF9TQ0hFTUEsXG59KTtcblxuZXhwb3J0IGNvbnN0IFNDSEVNQV9NQVAgPSBuZXcgTWFwPFNjaGVtYVR5cGUsIFNjaGVtYT4oW1xuICBbXCJjb3JlXCIsIENPUkVfU0NIRU1BXSxcbiAgW1wiZGVmYXVsdFwiLCBERUZBVUxUX1NDSEVNQV0sXG4gIFtcImZhaWxzYWZlXCIsIEZBSUxTQUZFX1NDSEVNQV0sXG4gIFtcImpzb25cIiwgSlNPTl9TQ0hFTUFdLFxuICBbXCJleHRlbmRlZFwiLCBFWFRFTkRFRF9TQ0hFTUFdLFxuXSk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG9GQUFvRjtBQUNwRiwwRUFBMEU7QUFDMUUscURBQXFEO0FBQ3JELHFDQUFxQztBQUdyQyxTQUFTLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBUyxJQUFJLFFBQVEsa0JBQWtCO0FBQ3ZDLFNBQVMsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxTQUFTLEdBQUcsUUFBUSxpQkFBaUI7QUFDckMsU0FBUyxHQUFHLFFBQVEsaUJBQWlCO0FBQ3JDLFNBQVMsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxTQUFTLEdBQUcsUUFBUSxpQkFBaUI7QUFDckMsU0FBUyxJQUFJLFFBQVEsa0JBQWtCO0FBQ3ZDLFNBQVMsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxTQUFTLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBUyxHQUFHLFFBQVEsaUJBQWlCO0FBQ3JDLFNBQVMsR0FBRyxRQUFRLGlCQUFpQjtBQUNyQyxTQUFTLEdBQUcsUUFBUSxpQkFBaUI7QUFDckMsU0FBUyxTQUFTLFFBQVEsdUJBQXVCO0FBQ2pELFNBQVMsYUFBYSxRQUFRLHVCQUF1QjtBQW1DckQsU0FBUyxjQUNQLGFBQTZCLEVBQzdCLGFBQTZCO0VBRTdCLE1BQU0sU0FBa0I7SUFDdEIsVUFBVSxJQUFJO0lBQ2QsU0FBUyxJQUFJO0lBQ2IsUUFBUSxJQUFJO0lBQ1osVUFBVSxJQUFJO0VBQ2hCO0VBQ0EsTUFBTSxjQUFjLE9BQU8sUUFBUTtFQUNuQyxLQUFLLE1BQU0sUUFBUTtPQUFJO09BQWtCO0dBQWMsQ0FBRTtJQUN2RCxNQUFNLE1BQU0sTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQzdCLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0lBQ2xCLFlBQVksR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQzVCO0VBQ0EsT0FBTztBQUNUO0FBUUEsU0FBUyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFJdEU7RUFDQyxJQUFJLFNBQVM7SUFDWCxjQUFjLElBQUksSUFBSSxRQUFRLGFBQWE7SUFDM0MsY0FBYyxJQUFJLElBQUksUUFBUSxhQUFhO0VBQzdDO0VBQ0EsTUFBTSxVQUFVLGNBQWMsZUFBZTtFQUM3QyxPQUFPO0lBQUU7SUFBZTtJQUFlO0VBQVE7QUFDakQ7QUFFQTs7OztDQUlDLEdBQ0QsTUFBTSxrQkFBa0IsYUFBYTtFQUNuQyxlQUFlO0lBQUM7SUFBSztJQUFLO0dBQUk7QUFDaEM7QUFFQTs7OztDQUlDLEdBQ0QsTUFBTSxjQUFjLGFBQWE7RUFDL0IsZUFBZTtJQUFDO0lBQUs7SUFBTTtJQUFLO0dBQU07RUFDdEMsU0FBUztBQUNYO0FBRUE7Ozs7Q0FJQyxHQUNELE1BQU0sY0FBYyxhQUFhO0VBQy9CLFNBQVM7QUFDWDtBQUVBOztDQUVDLEdBQ0QsT0FBTyxNQUFNLGlCQUFpQixhQUFhO0VBQ3pDLGVBQWU7SUFBQztJQUFRO0lBQU07SUFBTztHQUFJO0VBQ3pDLGVBQWU7SUFBQztJQUFXO0dBQU07RUFDakMsU0FBUztBQUNYLEdBQUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNELE1BQU0sa0JBQWtCLGFBQWE7RUFDbkMsZUFBZTtJQUFDO0lBQVE7R0FBYztFQUN0QyxTQUFTO0FBQ1g7QUFFQSxPQUFPLE1BQU0sYUFBYSxJQUFJLElBQXdCO0VBQ3BEO0lBQUM7SUFBUTtHQUFZO0VBQ3JCO0lBQUM7SUFBVztHQUFlO0VBQzNCO0lBQUM7SUFBWTtHQUFnQjtFQUM3QjtJQUFDO0lBQVE7R0FBWTtFQUNyQjtJQUFDO0lBQVk7R0FBZ0I7Q0FDOUIsRUFBRSJ9
+// denoCacheMetadata=7758984181535182222,16334489483071876995 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/27e256c652de55aa49124212e299cc074b47585ce9996f125fbb8f26a6f3d413.js b/vendor/gen/https/jsr.io/27e256c652de55aa49124212e299cc074b47585ce9996f125fbb8f26a6f3d413.js
new file mode 100644
index 0000000..cd0d8de
--- /dev/null
+++ b/vendor/gen/https/jsr.io/27e256c652de55aa49124212e299cc074b47585ce9996f125fbb8f26a6f3d413.js
@@ -0,0 +1,85 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { _globToRegExp } from "../_common/glob_to_reg_exp.ts";
+const constants = {
+ sep: "/+",
+ sepMaybe: "/*",
+ seps: [
+ "/"
+ ],
+ globstar: "(?:[^/]*(?:/|$)+)*",
+ wildcard: "[^/]*",
+ escapePrefix: "\\"
+};
+/** Convert a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment.
+ *
+ * @example Usage
+ * ```ts
+ * import { globToRegExp } from "@std/path/posix/glob-to-regexp";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(globToRegExp("*.js"), /^[^/]*\.js\/*$/);
+ * ```
+ *
+ * @param glob Glob string to convert.
+ * @param options Conversion options.
+ * @returns The regular expression equivalent to the glob.
+ */ export function globToRegExp(glob, options = {}) {
+ return _globToRegExp(constants, glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9nbG9iX3RvX3JlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQge1xuICBfZ2xvYlRvUmVnRXhwLFxuICB0eXBlIEdsb2JDb25zdGFudHMsXG4gIHR5cGUgR2xvYk9wdGlvbnMsXG59IGZyb20gXCIuLi9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbmNvbnN0IGNvbnN0YW50czogR2xvYkNvbnN0YW50cyA9IHtcbiAgc2VwOiBcIi8rXCIsXG4gIHNlcE1heWJlOiBcIi8qXCIsXG4gIHNlcHM6IFtcIi9cIl0sXG4gIGdsb2JzdGFyOiBcIig/OlteL10qKD86L3wkKSspKlwiLFxuICB3aWxkY2FyZDogXCJbXi9dKlwiLFxuICBlc2NhcGVQcmVmaXg6IFwiXFxcXFwiLFxufTtcblxuLyoqIENvbnZlcnQgYSBnbG9iIHN0cmluZyB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBUcmllcyB0byBtYXRjaCBiYXNoIGdsb2IgZXhwYW5zaW9uIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXG4gKlxuICogQmFzaWMgZ2xvYiBzeW50YXg6XG4gKiAtIGAqYCAtIE1hdGNoZXMgZXZlcnl0aGluZyB3aXRob3V0IGxlYXZpbmcgdGhlIHBhdGggc2VnbWVudC5cbiAqIC0gYD9gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIC0gYHtmb28sYmFyfWAgLSBNYXRjaGVzIGBmb29gIG9yIGBiYXJgLlxuICogLSBgW2FiY2RdYCAtIE1hdGNoZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbYS1kXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgWyFhYmNkXWAgLSBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIGJlc2lkZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbWzo8Y2xhc3M+Ol1dYCAtIE1hdGNoZXMgYW55IGNoYXJhY3RlciBiZWxvbmdpbmcgdG8gYDxjbGFzcz5gLlxuICogICAgIC0gYFtbOmFsbnVtOl1dYCAtIE1hdGNoZXMgYW55IGRpZ2l0IG9yIGxldHRlci5cbiAqICAgICAtIGBbWzpkaWdpdDpdYWJjXWAgLSBNYXRjaGVzIGFueSBkaWdpdCwgYGFgLCBgYmAgb3IgYGNgLlxuICogICAgIC0gU2VlIGh0dHBzOi8vZmFjZWxlc3N1c2VyLmdpdGh1Yi5pby93Y21hdGNoL2dsb2IvI3Bvc2l4LWNoYXJhY3Rlci1jbGFzc2VzXG4gKiAgICAgICBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBjaGFyYWN0ZXIgY2xhc3Nlcy5cbiAqIC0gYFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBhbiBgb3NgIG90aGVyIHRoYW4gYFwid2luZG93c1wiYC5cbiAqIC0gXFxgIC0gRXNjYXBlcyB0aGUgbmV4dCBjaGFyYWN0ZXIgZm9yIGBvc2Agc2V0IHRvIGBcIndpbmRvd3NcImAuXG4gKiAtIGAvYCAtIFBhdGggc2VwYXJhdG9yLlxuICogLSBgXFxgIC0gQWRkaXRpb25hbCBwYXRoIHNlcGFyYXRvciBvbmx5IGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICpcbiAqIEV4dGVuZGVkIHN5bnRheDpcbiAqIC0gUmVxdWlyZXMgYHsgZXh0ZW5kZWQ6IHRydWUgfWAuXG4gKiAtIGA/KGZvb3xiYXIpYCAtIE1hdGNoZXMgMCBvciAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgQChmb298YmFyKWAgLSBNYXRjaGVzIDEgaW5zdGFuY2Ugb2YgYHtmb28sYmFyfWAuIFRoZXkgYmVoYXZlIHRoZSBzYW1lLlxuICogLSBgKihmb298YmFyKWAgLSBNYXRjaGVzIF9uXyBpbnN0YW5jZXMgb2YgYHtmb28sYmFyfWAuXG4gKiAtIGArKGZvb3xiYXIpYCAtIE1hdGNoZXMgX24gPiAwXyBpbnN0YW5jZXMgb2YgYHtmb28sYmFyfWAuXG4gKiAtIGAhKGZvb3xiYXIpYCAtIE1hdGNoZXMgYW55dGhpbmcgb3RoZXIgdGhhbiBge2ZvbyxiYXJ9YC5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLlxuICpcbiAqIEdsb2JzdGFyIHN5bnRheDpcbiAqIC0gUmVxdWlyZXMgYHsgZ2xvYnN0YXI6IHRydWUgfWAuXG4gKiAtIGAqKmAgLSBNYXRjaGVzIGFueSBudW1iZXIgb2YgYW55IHBhdGggc2VnbWVudHMuXG4gKiAgICAgLSBNdXN0IGNvbXByaXNlIGl0cyBlbnRpcmUgcGF0aCBzZWdtZW50IGluIHRoZSBwcm92aWRlZCBnbG9iLlxuICogLSBTZWUgaHR0cHM6Ly93d3cubGludXhqb3VybmFsLmNvbS9jb250ZW50L2dsb2JzdGFyLW5ldy1iYXNoLWdsb2JiaW5nLW9wdGlvbi5cbiAqXG4gKiBOb3RlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIC0gVGhlIGdlbmVyYXRlZCBgUmVnRXhwYCBpcyBhbmNob3JlZCBhdCBib3RoIHN0YXJ0IGFuZCBlbmQuXG4gKiAtIFJlcGVhdGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgdG9sZXJhdGVkLiBUcmFpbGluZyBzZXBhcmF0b3JzIGluIHRoZVxuICogICBwcm92aWRlZCBnbG9iIGhhdmUgbm8gbWVhbmluZyBhbmQgYXJlIGRpc2NhcmRlZC5cbiAqIC0gQWJzb2x1dGUgZ2xvYnMgd2lsbCBvbmx5IG1hdGNoIGFic29sdXRlIHBhdGhzLCBldGMuXG4gKiAtIEVtcHR5IGdsb2JzIHdpbGwgbWF0Y2ggbm90aGluZy5cbiAqIC0gQW55IHNwZWNpYWwgZ2xvYiBzeW50YXggbXVzdCBiZSBjb250YWluZWQgdG8gb25lIHBhdGggc2VnbWVudC4gRm9yIGV4YW1wbGUsXG4gKiAgIGA/KGZvb3xiYXIvYmF6KWAgaXMgaW52YWxpZC4gVGhlIHNlcGFyYXRvciB3aWxsIHRha2UgcHJlY2VkZW5jZSBhbmQgdGhlXG4gKiAgIGZpcnN0IHNlZ21lbnQgZW5kcyB3aXRoIGFuIHVuY2xvc2VkIGdyb3VwLlxuICogLSBJZiBhIHBhdGggc2VnbWVudCBlbmRzIHdpdGggdW5jbG9zZWQgZ3JvdXBzIG9yIGEgZGFuZ2xpbmcgZXNjYXBlIHByZWZpeCwgYVxuICogICBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQuIEV2ZXJ5IGNoYXJhY3RlciBmb3IgdGhhdCBzZWdtZW50IGlzIHRha2VuXG4gKiAgIGxpdGVyYWxseSBpbiB0aGlzIGV2ZW50LlxuICpcbiAqIExpbWl0YXRpb25zOlxuICogLSBBIG5lZ2F0aXZlIGdyb3VwIGxpa2UgYCEoZm9vfGJhcilgIHdpbGwgd3JvbmdseSBiZSBjb252ZXJ0ZWQgdG8gYSBuZWdhdGl2ZVxuICogICBsb29rLWFoZWFkIGZvbGxvd2VkIGJ5IGEgd2lsZGNhcmQuIFRoaXMgbWVhbnMgdGhhdCBgIShmb28pLmpzYCB3aWxsIHdyb25nbHlcbiAqICAgZmFpbCB0byBtYXRjaCBgZm9vYmFyLmpzYCwgZXZlbiB0aG91Z2ggYGZvb2JhcmAgaXMgbm90IGBmb29gLiBFZmZlY3RpdmVseSxcbiAqICAgYCEoZm9vfGJhcilgIGlzIHRyZWF0ZWQgbGlrZSBgIShAKGZvb3xiYXIpKilgLiBUaGlzIHdpbGwgd29yayBjb3JyZWN0bHkgaWZcbiAqICAgdGhlIGdyb3VwIG9jY3VycyBub3QgbmVzdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBnbG9iVG9SZWdFeHAgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2dsb2ItdG8tcmVnZXhwXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZ2xvYlRvUmVnRXhwKFwiKi5qc1wiKSwgL15bXi9dKlxcLmpzXFwvKiQvKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9iIEdsb2Igc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gb3B0aW9ucyBDb252ZXJzaW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVndWxhciBleHByZXNzaW9uIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnbG9iVG9SZWdFeHAoXG4gIGdsb2I6IHN0cmluZyxcbiAgb3B0aW9uczogR2xvYk9wdGlvbnMgPSB7fSxcbik6IFJlZ0V4cCB7XG4gIHJldHVybiBfZ2xvYlRvUmVnRXhwKGNvbnN0YW50cywgZ2xvYiwgb3B0aW9ucyk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUNFLGFBQWEsUUFHUixnQ0FBZ0M7QUFJdkMsTUFBTSxZQUEyQjtFQUMvQixLQUFLO0VBQ0wsVUFBVTtFQUNWLE1BQU07SUFBQztHQUFJO0VBQ1gsVUFBVTtFQUNWLFVBQVU7RUFDVixjQUFjO0FBQ2hCO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtRUMsR0FDRCxPQUFPLFNBQVMsYUFDZCxJQUFZLEVBQ1osVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sY0FBYyxXQUFXLE1BQU07QUFDeEMifQ==
+// denoCacheMetadata=6571749945049970499,1093762487156461668 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2873410a9626037eec217ec7ec81300d63a80b5770ffd091e227d12e29268b0b.js b/vendor/gen/https/jsr.io/2873410a9626037eec217ec7ec81300d63a80b5770ffd091e227d12e29268b0b.js
new file mode 100644
index 0000000..1b361ac
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2873410a9626037eec217ec7ec81300d63a80b5770ffd091e227d12e29268b0b.js
@@ -0,0 +1,138 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { isNegativeZero } from "../_utils.ts";
+function isCharCodeInRange(c, lower, upper) {
+ return lower <= c && c <= upper;
+}
+function isHexCode(c) {
+ return isCharCodeInRange(c, 0x30, 0x39) || // 0-9
+ isCharCodeInRange(c, 0x41, 0x46) || // A-F
+ isCharCodeInRange(c, 0x61, 0x66) // a-f
+ ;
+}
+function isOctCode(c) {
+ return isCharCodeInRange(c, 0x30, 0x37); // 0-7
+}
+function isDecCode(c) {
+ return isCharCodeInRange(c, 0x30, 0x39); // 0-9
+}
+function resolveYamlInteger(data) {
+ const max = data.length;
+ let index = 0;
+ let hasDigits = false;
+ if (!max) return false;
+ let ch = data[index];
+ // sign
+ if (ch === "-" || ch === "+") {
+ ch = data[++index];
+ }
+ if (ch === "0") {
+ // 0
+ if (index + 1 === max) return true;
+ ch = data[++index];
+ // base 2, base 8, base 16
+ if (ch === "b") {
+ // base 2
+ index++;
+ for(; index < max; index++){
+ ch = data[index];
+ if (ch === "_") continue;
+ if (ch !== "0" && ch !== "1") return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ if (ch === "x") {
+ // base 16
+ index++;
+ for(; index < max; index++){
+ ch = data[index];
+ if (ch === "_") continue;
+ if (!isHexCode(data.charCodeAt(index))) return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ // base 8
+ for(; index < max; index++){
+ ch = data[index];
+ if (ch === "_") continue;
+ if (!isOctCode(data.charCodeAt(index))) return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ // base 10 (except 0) or base 60
+ // value should not start with `_`;
+ if (ch === "_") return false;
+ for(; index < max; index++){
+ ch = data[index];
+ if (ch === "_") continue;
+ if (!isDecCode(data.charCodeAt(index))) {
+ return false;
+ }
+ hasDigits = true;
+ }
+ // Should have digits and should not end with `_`
+ if (!hasDigits || ch === "_") return false;
+ // base60 almost not used, no needs to optimize
+ return /^(:[0-5]?[0-9])+$/.test(data.slice(index));
+}
+function constructYamlInteger(data) {
+ let value = data;
+ if (value.includes("_")) {
+ value = value.replace(/_/g, "");
+ }
+ let sign = 1;
+ let ch = value[0];
+ if (ch === "-" || ch === "+") {
+ if (ch === "-") sign = -1;
+ value = value.slice(1);
+ ch = value[0];
+ }
+ if (value === "0") return 0;
+ if (ch === "0") {
+ if (value[1] === "b") return sign * parseInt(value.slice(2), 2);
+ if (value[1] === "x") return sign * parseInt(value, 16);
+ return sign * parseInt(value, 8);
+ }
+ return sign * parseInt(value, 10);
+}
+function isInteger(object) {
+ if (object instanceof Number) object = object.valueOf();
+ return typeof object === "number" && object % 1 === 0 && !isNegativeZero(object);
+}
+export const int = {
+ tag: "tag:yaml.org,2002:int",
+ construct: constructYamlInteger,
+ defaultStyle: "decimal",
+ kind: "scalar",
+ predicate: isInteger,
+ represent: {
+ // deno-lint-ignore ban-types
+ binary (object) {
+ const value = object instanceof Number ? object.valueOf() : object;
+ return value >= 0 ? `0b${value.toString(2)}` : `-0b${value.toString(2).slice(1)}`;
+ },
+ // deno-lint-ignore ban-types
+ octal (object) {
+ const value = object instanceof Number ? object.valueOf() : object;
+ return value >= 0 ? `0${value.toString(8)}` : `-0${value.toString(8).slice(1)}`;
+ },
+ // deno-lint-ignore ban-types
+ decimal (object) {
+ const value = object instanceof Number ? object.valueOf() : object;
+ return value.toString(10);
+ },
+ // deno-lint-ignore ban-types
+ hexadecimal (object) {
+ const value = object instanceof Number ? object.valueOf() : object;
+ return value >= 0 ? `0x${value.toString(16).toUpperCase()}` : `-0x${value.toString(16).toUpperCase().slice(1)}`;
+ }
+ },
+ resolve: resolveYamlInteger
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9pbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5pbXBvcnQgeyBpc05lZ2F0aXZlWmVybyB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcblxuZnVuY3Rpb24gaXNDaGFyQ29kZUluUmFuZ2UoYzogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsb3dlciA8PSBjICYmIGMgPD0gdXBwZXI7XG59XG5cbmZ1bmN0aW9uIGlzSGV4Q29kZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpc0NoYXJDb2RlSW5SYW5nZShjLCAweDMwLCAweDM5KSB8fCAvLyAwLTlcbiAgICBpc0NoYXJDb2RlSW5SYW5nZShjLCAweDQxLCAweDQ2KSB8fCAvLyBBLUZcbiAgICBpc0NoYXJDb2RlSW5SYW5nZShjLCAweDYxLCAweDY2KSAvLyBhLWZcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNPY3RDb2RlKGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNDaGFyQ29kZUluUmFuZ2UoYywgMHgzMCwgMHgzNyk7IC8vIDAtN1xufVxuXG5mdW5jdGlvbiBpc0RlY0NvZGUoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0NoYXJDb2RlSW5SYW5nZShjLCAweDMwLCAweDM5KTsgLy8gMC05XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbWF4ID0gZGF0YS5sZW5ndGg7XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCBoYXNEaWdpdHMgPSBmYWxzZTtcblxuICBpZiAoIW1heCkgcmV0dXJuIGZhbHNlO1xuXG4gIGxldCBjaCA9IGRhdGFbaW5kZXhdO1xuXG4gIC8vIHNpZ25cbiAgaWYgKGNoID09PSBcIi1cIiB8fCBjaCA9PT0gXCIrXCIpIHtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG4gIH1cblxuICBpZiAoY2ggPT09IFwiMFwiKSB7XG4gICAgLy8gMFxuICAgIGlmIChpbmRleCArIDEgPT09IG1heCkgcmV0dXJuIHRydWU7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuXG4gICAgLy8gYmFzZSAyLCBiYXNlIDgsIGJhc2UgMTZcblxuICAgIGlmIChjaCA9PT0gXCJiXCIpIHtcbiAgICAgIC8vIGJhc2UgMlxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY2ggIT09IFwiMFwiICYmIGNoICE9PSBcIjFcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gXCJfXCI7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcInhcIikge1xuICAgICAgLy8gYmFzZSAxNlxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gXCJfXCI7XG4gICAgfVxuXG4gICAgLy8gYmFzZSA4XG4gICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgaWYgKGNoID09PSBcIl9cIikgY29udGludWU7XG4gICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gXCJfXCI7XG4gIH1cblxuICAvLyBiYXNlIDEwIChleGNlcHQgMCkgb3IgYmFzZSA2MFxuXG4gIC8vIHZhbHVlIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgX2A7XG4gIGlmIChjaCA9PT0gXCJfXCIpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgIGlmIChjaCA9PT0gXCJfXCIpIGNvbnRpbnVlO1xuICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gIH1cblxuICAvLyBTaG91bGQgaGF2ZSBkaWdpdHMgYW5kIHNob3VsZCBub3QgZW5kIHdpdGggYF9gXG4gIGlmICghaGFzRGlnaXRzIHx8IGNoID09PSBcIl9cIikgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIGJhc2U2MCBhbG1vc3Qgbm90IHVzZWQsIG5vIG5lZWRzIHRvIG9wdGltaXplXG4gIHJldHVybiAvXig6WzAtNV0/WzAtOV0pKyQvLnRlc3QoZGF0YS5zbGljZShpbmRleCkpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgdmFsdWUgPSBkYXRhO1xuXG4gIGlmICh2YWx1ZS5pbmNsdWRlcyhcIl9cIikpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL18vZywgXCJcIik7XG4gIH1cblxuICBsZXQgc2lnbiA9IDE7XG4gIGxldCBjaCA9IHZhbHVlWzBdO1xuICBpZiAoY2ggPT09IFwiLVwiIHx8IGNoID09PSBcIitcIikge1xuICAgIGlmIChjaCA9PT0gXCItXCIpIHNpZ24gPSAtMTtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgIGNoID0gdmFsdWVbMF07XG4gIH1cblxuICBpZiAodmFsdWUgPT09IFwiMFwiKSByZXR1cm4gMDtcblxuICBpZiAoY2ggPT09IFwiMFwiKSB7XG4gICAgaWYgKHZhbHVlWzFdID09PSBcImJcIikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMik7XG4gICAgaWYgKHZhbHVlWzFdID09PSBcInhcIikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTYpO1xuICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDgpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTApO1xufVxuXG5mdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0OiB1bmtub3duKTogb2JqZWN0IGlzIG51bWJlciB7XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIG9iamVjdCA9IG9iamVjdC52YWx1ZU9mKCk7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSBcIm51bWJlclwiICYmIG9iamVjdCAlIDEgPT09IDAgJiZcbiAgICAhaXNOZWdhdGl2ZVplcm8ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGNvbnN0IGludDogVHlwZTxcInNjYWxhclwiLCBudW1iZXI+ID0ge1xuICB0YWc6IFwidGFnOnlhbWwub3JnLDIwMDI6aW50XCIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIGRlZmF1bHRTdHlsZTogXCJkZWNpbWFsXCIsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICAgIGJpbmFyeShvYmplY3Q6IG51bWJlciB8IE51bWJlcik6IHN0cmluZyB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdCBpbnN0YW5jZW9mIE51bWJlciA/IG9iamVjdC52YWx1ZU9mKCkgOiBvYmplY3Q7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMFxuICAgICAgICA/IGAwYiR7dmFsdWUudG9TdHJpbmcoMil9YFxuICAgICAgICA6IGAtMGIke3ZhbHVlLnRvU3RyaW5nKDIpLnNsaWNlKDEpfWA7XG4gICAgfSxcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICAgIG9jdGFsKG9iamVjdDogbnVtYmVyIHwgTnVtYmVyKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyID8gb2JqZWN0LnZhbHVlT2YoKSA6IG9iamVjdDtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwXG4gICAgICAgID8gYDAke3ZhbHVlLnRvU3RyaW5nKDgpfWBcbiAgICAgICAgOiBgLTAke3ZhbHVlLnRvU3RyaW5nKDgpLnNsaWNlKDEpfWA7XG4gICAgfSxcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICAgIGRlY2ltYWwob2JqZWN0OiBudW1iZXIgfCBOdW1iZXIpOiBzdHJpbmcge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIgPyBvYmplY3QudmFsdWVPZigpIDogb2JqZWN0O1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKDEwKTtcbiAgICB9LFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG4gICAgaGV4YWRlY2ltYWwob2JqZWN0OiBudW1iZXIgfCBOdW1iZXIpOiBzdHJpbmcge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIgPyBvYmplY3QudmFsdWVPZigpIDogb2JqZWN0O1xuICAgICAgcmV0dXJuIHZhbHVlID49IDBcbiAgICAgICAgPyBgMHgke3ZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWBcbiAgICAgICAgOiBgLTB4JHt2YWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX1gO1xuICAgIH0sXG4gIH0sXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sSW50ZWdlcixcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG9GQUFvRjtBQUNwRiwwRUFBMEU7QUFDMUUscURBQXFEO0FBR3JELFNBQVMsY0FBYyxRQUFRLGVBQWU7QUFFOUMsU0FBUyxrQkFBa0IsQ0FBUyxFQUFFLEtBQWEsRUFBRSxLQUFhO0VBQ2hFLE9BQU8sU0FBUyxLQUFLLEtBQUs7QUFDNUI7QUFFQSxTQUFTLFVBQVUsQ0FBUztFQUMxQixPQUNFLGtCQUFrQixHQUFHLE1BQU0sU0FBUyxNQUFNO0VBQzFDLGtCQUFrQixHQUFHLE1BQU0sU0FBUyxNQUFNO0VBQzFDLGtCQUFrQixHQUFHLE1BQU0sTUFBTSxNQUFNOztBQUUzQztBQUVBLFNBQVMsVUFBVSxDQUFTO0VBQzFCLE9BQU8sa0JBQWtCLEdBQUcsTUFBTSxPQUFPLE1BQU07QUFDakQ7QUFFQSxTQUFTLFVBQVUsQ0FBUztFQUMxQixPQUFPLGtCQUFrQixHQUFHLE1BQU0sT0FBTyxNQUFNO0FBQ2pEO0FBRUEsU0FBUyxtQkFBbUIsSUFBWTtFQUN0QyxNQUFNLE1BQU0sS0FBSyxNQUFNO0VBQ3ZCLElBQUksUUFBUTtFQUNaLElBQUksWUFBWTtFQUVo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
+// denoCacheMetadata=1904122398677164138,8813654939950411633 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2b61d5ccebac8f353bed4197d355dea0769292a00153c97b5cac03718fdb1bb8.js b/vendor/gen/https/jsr.io/2b61d5ccebac8f353bed4197d355dea0769292a00153c97b5cac03718fdb1bb8.js
new file mode 100644
index 0000000..8fba0f5
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2b61d5ccebac8f353bed4197d355dea0769292a00153c97b5cac03718fdb1bb8.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { normalize } from "./normalize.ts";
+import { SEPARATOR_PATTERN } from "./constants.ts";
+/**
+ * Like normalize(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalizeGlob } from "@std/path/windows/normalize-glob";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const normalized = normalizeGlob("**\\foo\\..\\bar", { globstar: true });
+ * assertEquals(normalized, "**\\bar");
+ * ```
+ *
+ * @param glob The glob pattern to normalize.
+ * @param options The options for glob pattern.
+ * @returns The normalized glob pattern.
+ */ export function normalizeGlob(glob, options = {}) {
+ const { globstar = false } = options;
+ if (glob.match(/\0/g)) {
+ throw new Error(`Glob contains invalid characters: "${glob}"`);
+ }
+ if (!globstar) {
+ return normalize(glob);
+ }
+ const s = SEPARATOR_PATTERN.source;
+ const badParentPattern = new RegExp(`(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, "g");
+ return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, "..");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL25vcm1hbGl6ZV9nbG9iLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gXCIuL25vcm1hbGl6ZS50c1wiO1xuaW1wb3J0IHsgU0VQQVJBVE9SX1BBVFRFUk4gfSBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBHbG9iT3B0aW9ucyB9O1xuXG4vKipcbiAqIExpa2Ugbm9ybWFsaXplKCksIGJ1dCBkb2Vzbid0IGNvbGxhcHNlIFwiKipcXC8uLlwiIHdoZW4gYGdsb2JzdGFyYCBpcyB0cnVlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbm9ybWFsaXplR2xvYiB9IGZyb20gXCJAc3RkL3BhdGgvd2luZG93cy9ub3JtYWxpemUtZ2xvYlwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUdsb2IoXCIqKlxcXFxmb29cXFxcLi5cXFxcYmFyXCIsIHsgZ2xvYnN0YXI6IHRydWUgfSk7XG4gKiBhc3NlcnRFcXVhbHMobm9ybWFsaXplZCwgXCIqKlxcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYiBUaGUgZ2xvYiBwYXR0ZXJuIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBnbG9iIHBhdHRlcm4uXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBnbG9iIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVHbG9iKFxuICBnbG9iOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBpY2s8R2xvYk9wdGlvbnMsIFwiZ2xvYnN0YXJcIj4gPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHsgZ2xvYnN0YXIgPSBmYWxzZSB9OiBHbG9iT3B0aW9ucyA9IG9wdGlvbnM7XG4gIGlmIChnbG9iLm1hdGNoKC9cXDAvZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdsb2IgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiBcIiR7Z2xvYn1cImApO1xuICB9XG4gIGlmICghZ2xvYnN0YXIpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKGdsb2IpO1xuICB9XG4gIGNvbnN0IHMgPSBTRVBBUkFUT1JfUEFUVEVSTi5zb3VyY2U7XG4gIGNvbnN0IGJhZFBhcmVudFBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgIGAoPzw9KCR7c318XilcXFxcKlxcXFwqJHtzfSlcXFxcLlxcXFwuKD89JHtzfXwkKWAsXG4gICAgXCJnXCIsXG4gICk7XG4gIHJldHVybiBub3JtYWxpemUoZ2xvYi5yZXBsYWNlKGJhZFBhcmVudFBhdHRlcm4sIFwiXFwwXCIpKS5yZXBsYWNlKC9cXDAvZywgXCIuLlwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBR3JDLFNBQVMsU0FBUyxRQUFRLGlCQUFpQjtBQUMzQyxTQUFTLGlCQUFpQixRQUFRLGlCQUFpQjtBQUluRDs7Ozs7Ozs7Ozs7Ozs7O0NBZUMsR0FDRCxPQUFPLFNBQVMsY0FDZCxJQUFZLEVBQ1osVUFBeUMsQ0FBQyxDQUFDO0VBRTNDLE1BQU0sRUFBRSxXQUFXLEtBQUssRUFBRSxHQUFnQjtFQUMxQyxJQUFJLEtBQUssS0FBSyxDQUFDLFFBQVE7SUFDckIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUMvRDtFQUNBLElBQUksQ0FBQyxVQUFVO0lBQ2IsT0FBTyxVQUFVO0VBQ25CO0VBQ0EsTUFBTSxJQUFJLGtCQUFrQixNQUFNO0VBQ2xDLE1BQU0sbUJBQW1CLElBQUksT0FDM0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFDekM7RUFFRixPQUFPLFVBQVUsS0FBSyxPQUFPLENBQUMsa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE9BQU87QUFDeEUifQ==
+// denoCacheMetadata=9284254943716988788,5019300883642104827 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2b730be9f91a5d1af7cc15bf48772cac084b8338780ddb9dde2f6b7866ad74eb.js b/vendor/gen/https/jsr.io/2b730be9f91a5d1af7cc15bf48772cac084b8338780ddb9dde2f6b7866ad74eb.js
new file mode 100644
index 0000000..f3a18c2
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2b730be9f91a5d1af7cc15bf48772cac084b8338780ddb9dde2f6b7866ad74eb.js
@@ -0,0 +1,50 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArgs, lastPathSegment, stripSuffix } from "../_common/basename.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return the last portion of a `path`.
+ * Trailing directory separators are ignored, and optional suffix is removed.
+ *
+ * @example Usage
+ * ```ts
+ * import { basename } from "@std/path/posix/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(basename("/home/user/Documents/"), "Documents");
+ * assertEquals(basename("/home/user/Documents/image.png"), "image.png");
+ * assertEquals(basename("/home/user/Documents/image.png", ".png"), "image");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * Note: This function doesn't automatically strip hash and query parts from
+ * URLs. If your URL contains a hash or query, remove them before passing the
+ * URL to the function. This can be done by passing the URL to `new URL(url)`,
+ * and setting the `hash` and `search` properties to empty strings.
+ *
+ * ```ts
+ * import { basename } from "@std/path/posix/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(basename("https://deno.land/std/path/mod.ts"), "mod.ts");
+ * assertEquals(basename("https://deno.land/std/path/mod.ts", ".ts"), "mod");
+ * assertEquals(basename("https://deno.land/std/path/mod.ts?a=b"), "mod.ts?a=b");
+ * assertEquals(basename("https://deno.land/std/path/mod.ts#header"), "mod.ts#header");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `basename` from `@std/path/posix/unstable-basename`.
+ *
+ * @param path The path to extract the name from.
+ * @param suffix The suffix to remove from extracted name.
+ * @returns The extracted name.
+ */ export function basename(path, suffix = "") {
+ assertArgs(path, suffix);
+ const lastSegment = lastPathSegment(path, isPosixPathSeparator);
+ const strippedSegment = stripTrailingSeparators(lastSegment, isPosixPathSeparator);
+ return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9iYXNlbmFtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQge1xuICBhc3NlcnRBcmdzLFxuICBsYXN0UGF0aFNlZ21lbnQsXG4gIHN0cmlwU3VmZml4LFxufSBmcm9tIFwiLi4vX2NvbW1vbi9iYXNlbmFtZS50c1wiO1xuaW1wb3J0IHsgc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9zdHJpcF90cmFpbGluZ19zZXBhcmF0b3JzLnRzXCI7XG5pbXBvcnQgeyBpc1Bvc2l4UGF0aFNlcGFyYXRvciB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuXG4gKiBUcmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgaWdub3JlZCwgYW5kIG9wdGlvbmFsIHN1ZmZpeCBpcyByZW1vdmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Jhc2VuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9cIiksIFwiRG9jdW1lbnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiL2hvbWUvdXNlci9Eb2N1bWVudHMvaW1hZ2UucG5nXCIpLCBcImltYWdlLnBuZ1wiKTtcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL2ltYWdlLnBuZ1wiLCBcIi5wbmdcIiksIFwiaW1hZ2VcIik7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXb3JraW5nIHdpdGggVVJMc1xuICpcbiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBhdXRvbWF0aWNhbGx5IHN0cmlwIGhhc2ggYW5kIHF1ZXJ5IHBhcnRzIGZyb21cbiAqIFVSTHMuIElmIHlvdXIgVVJMIGNvbnRhaW5zIGEgaGFzaCBvciBxdWVyeSwgcmVtb3ZlIHRoZW0gYmVmb3JlIHBhc3NpbmcgdGhlXG4gKiBVUkwgdG8gdGhlIGZ1bmN0aW9uLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIFVSTCB0byBgbmV3IFVSTCh1cmwpYCxcbiAqIGFuZCBzZXR0aW5nIHRoZSBgaGFzaGAgYW5kIGBzZWFyY2hgIHByb3BlcnRpZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Jhc2VuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHNcIiksIFwibW9kLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL3BhdGgvbW9kLnRzXCIsIFwiLnRzXCIpLCBcIm1vZFwiKTtcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50cz9hPWJcIiksIFwibW9kLnRzP2E9YlwiKTtcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50cyNoZWFkZXJcIiksIFwibW9kLnRzI2hlYWRlclwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGJhc2VuYW1lYCBmcm9tIGBAc3RkL3BhdGgvcG9zaXgvdW5zdGFibGUtYmFzZW5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGV4dHJhY3QgdGhlIG5hbWUgZnJvbS5cbiAqIEBwYXJhbSBzdWZmaXggVGhlIHN1ZmZpeCB0byByZW1vdmUgZnJvbSBleHRyYWN0ZWQgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBleHRyYWN0ZWQgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2VuYW1lKHBhdGg6IHN0cmluZywgc3VmZml4ID0gXCJcIik6IHN0cmluZyB7XG4gIGFzc2VydEFyZ3MocGF0aCwgc3VmZml4KTtcblxuICBjb25zdCBsYXN0U2VnbWVudCA9IGxhc3RQYXRoU2VnbWVudChwYXRoLCBpc1Bvc2l4UGF0aFNlcGFyYXRvcik7XG4gIGNvbnN0IHN0cmlwcGVkU2VnbWVudCA9IHN0cmlwVHJhaWxpbmdTZXBhcmF0b3JzKFxuICAgIGxhc3RTZWdtZW50LFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xuICByZXR1cm4gc3VmZml4ID8gc3RyaXBTdWZmaXgoc3RyaXBwZWRTZWdtZW50LCBzdWZmaXgpIDogc3RyaXBwZWRTZWdtZW50O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FDRSxVQUFVLEVBQ1YsZUFBZSxFQUNmLFdBQVcsUUFDTix5QkFBeUI7QUFDaEMsU0FBUyx1QkFBdUIsUUFBUSwwQ0FBMEM7QUFDbEYsU0FBUyxvQkFBb0IsUUFBUSxhQUFhO0FBRWxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUNDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsSUFBWSxFQUFFLFNBQVMsRUFBRTtFQUNoRCxXQUFXLE1BQU07RUFFakIsTUFBTSxjQUFjLGdCQUFnQixNQUFNO0VBQzFDLE1BQU0sa0JBQWtCLHdCQUN0QixhQUNBO0VBRUYsT0FBTyxTQUFTLFlBQVksaUJBQWlCLFVBQVU7QUFDekQifQ==
+// denoCacheMetadata=9869583317130059077,12469544256971723182 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2dfc5906e290c712f0c7f3ad228e202b0ff32b317cb64f487ee2810539739211.js b/vendor/gen/https/jsr.io/2dfc5906e290c712f0c7f3ad228e202b0ff32b317cb64f487ee2810539739211.js
new file mode 100644
index 0000000..f03943d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2dfc5906e290c712f0c7f3ad228e202b0ff32b317cb64f487ee2810539739211.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { extractFrontMatter } from "./_shared.ts";
+import { EXTRACT_JSON_REGEXP } from "./_formats.ts";
+/**
+ * Extracts and parses {@link https://www.json.org/ | JSON } from the metadata
+ * of front matter content.
+ *
+ * @example Extract JSON front matter
+ * ```ts
+ * import { extract } from "@std/front-matter/json";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const output = `---json
+ * { "title": "Three dashes marks the spot" }
+ * ---
+ * Hello, world!`;
+ * const result = extract(output);
+ *
+ * assertEquals(result, {
+ * frontMatter: '{ "title": "Three dashes marks the spot" }',
+ * body: "Hello, world!",
+ * attrs: { title: "Three dashes marks the spot" },
+ * });
+ * ```
+ *
+ * @typeParam T The type of the parsed front matter.
+ * @param text The text to extract JSON front matter from.
+ * @returns The extracted JSON front matter and body content.
+ */ export function extract(text) {
+ const { frontMatter, body } = extractFrontMatter(text, EXTRACT_JSON_REGEXP);
+ const attrs = frontMatter ? JSON.parse(frontMatter) : {};
+ return {
+ frontMatter,
+ body,
+ attrs
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L2pzb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgZXh0cmFjdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vX3NoYXJlZC50c1wiO1xuaW1wb3J0IHsgRVhUUkFDVF9KU09OX1JFR0VYUCB9IGZyb20gXCIuL19mb3JtYXRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3QgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEV4dHJhY3QgfTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgcGFyc2VzIHtAbGluayBodHRwczovL3d3dy5qc29uLm9yZy8gfCBKU09OIH0gZnJvbSB0aGUgbWV0YWRhdGFcbiAqIG9mIGZyb250IG1hdHRlciBjb250ZW50LlxuICpcbiAqIEBleGFtcGxlIEV4dHJhY3QgSlNPTiBmcm9udCBtYXR0ZXJcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRyYWN0IH0gZnJvbSBcIkBzdGQvZnJvbnQtbWF0dGVyL2pzb25cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IG91dHB1dCA9IGAtLS1qc29uXG4gKiB7IFwidGl0bGVcIjogXCJUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3RcIiB9XG4gKiAtLS1cbiAqIEhlbGxvLCB3b3JsZCFgO1xuICogY29uc3QgcmVzdWx0ID0gZXh0cmFjdChvdXRwdXQpO1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXN1bHQsIHtcbiAqICAgZnJvbnRNYXR0ZXI6ICd7IFwidGl0bGVcIjogXCJUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3RcIiB9JyxcbiAqICAgYm9keTogXCJIZWxsbywgd29ybGQhXCIsXG4gKiAgIGF0dHJzOiB7IHRpdGxlOiBcIlRocmVlIGRhc2hlcyBtYXJrcyB0aGUgc3BvdFwiIH0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgcGFyc2VkIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGV4dHJhY3QgSlNPTiBmcm9udCBtYXR0ZXIgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBleHRyYWN0ZWQgSlNPTiBmcm9udCBtYXR0ZXIgYW5kIGJvZHkgY29udGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3Q8VD4odGV4dDogc3RyaW5nKTogRXh0cmFjdDxUPiB7XG4gIGNvbnN0IHsgZnJvbnRNYXR0ZXIsIGJvZHkgfSA9IGV4dHJhY3RGcm9udE1hdHRlcih0ZXh0LCBFWFRSQUNUX0pTT05fUkVHRVhQKTtcbiAgY29uc3QgYXR0cnMgPSAoZnJvbnRNYXR0ZXIgPyBKU09OLnBhcnNlKGZyb250TWF0dGVyKSA6IHt9KSBhcyBUO1xuICByZXR1cm4geyBmcm9udE1hdHRlciwgYm9keSwgYXR0cnMgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsa0JBQWtCLFFBQVEsZUFBZTtBQUNsRCxTQUFTLG1CQUFtQixRQUFRLGdCQUFnQjtBQUtwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlCQyxHQUNELE9BQU8sU0FBUyxRQUFXLElBQVk7RUFDckMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxtQkFBbUIsTUFBTTtFQUN2RCxNQUFNLFFBQVMsY0FBYyxLQUFLLEtBQUssQ0FBQyxlQUFlLENBQUM7RUFDeEQsT0FBTztJQUFFO0lBQWE7SUFBTTtFQUFNO0FBQ3BDIn0=
+// denoCacheMetadata=8381338719138523530,13251501243935239100 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2f22c2a213f8d0b79812fd751c5efcbdc0c8a82c7e93a0d77f66a7a095cedb02.js b/vendor/gen/https/jsr.io/2f22c2a213f8d0b79812fd751c5efcbdc0c8a82c7e93a0d77f66a7a095cedb02.js
new file mode 100644
index 0000000..5e63b1a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2f22c2a213f8d0b79812fd751c5efcbdc0c8a82c7e93a0d77f66a7a095cedb02.js
@@ -0,0 +1,58 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { parseMediaType } from "./parse_media_type.ts";
+import { getCharset } from "./get_charset.ts";
+import { formatMediaType } from "./format_media_type.ts";
+import { typeByExtension } from "./type_by_extension.ts";
+/**
+ * Returns the full `Content-Type` or `Content-Disposition` header value for the
+ * given extension or media type.
+ *
+ * The function will treat the `extensionOrType` as a media type when it
+ * contains a `/`, otherwise it will process it as an extension, with or without
+ * the leading `.`.
+ *
+ * Returns `undefined` if unable to resolve the media type.
+ *
+ * @typeParam T Type of the extension or media type to resolve.
+ *
+ * @param extensionOrType The extension or media type to resolve.
+ *
+ * @returns The full `Content-Type` or `Content-Disposition` header value, or
+ * `undefined` if unable to resolve the media type.
+ *
+ * @example Usage
+ * ```ts
+ * import { contentType } from "@std/media-types/content-type";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(contentType(".json"), "application/json; charset=UTF-8");
+ * assertEquals(contentType("text/html"), "text/html; charset=UTF-8");
+ * assertEquals(contentType("text/html; charset=UTF-8"), "text/html; charset=UTF-8");
+ * assertEquals(contentType("txt"), "text/plain; charset=UTF-8");
+ * assertEquals(contentType("foo"), undefined);
+ * assertEquals(contentType("file.json"), undefined);
+ * ```
+ */ export function contentType(extensionOrType) {
+ try {
+ const [mediaType, params = {}] = extensionOrType.includes("/") ? parseMediaType(extensionOrType) : [
+ typeByExtension(extensionOrType),
+ undefined
+ ];
+ if (!mediaType) {
+ return undefined;
+ }
+ if (!("charset" in params)) {
+ const charset = getCharset(mediaType);
+ if (charset) {
+ params.charset = charset;
+ }
+ }
+ return formatMediaType(mediaType, params);
+ } catch {
+ // just swallow returning undefined
+ }
+ return undefined;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvY29udGVudF90eXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IHBhcnNlTWVkaWFUeXBlIH0gZnJvbSBcIi4vcGFyc2VfbWVkaWFfdHlwZS50c1wiO1xuaW1wb3J0IHsgZ2V0Q2hhcnNldCB9IGZyb20gXCIuL2dldF9jaGFyc2V0LnRzXCI7XG5pbXBvcnQgeyBmb3JtYXRNZWRpYVR5cGUgfSBmcm9tIFwiLi9mb3JtYXRfbWVkaWFfdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBkYiB9IGZyb20gXCIuL19kYi50c1wiO1xuaW1wb3J0IHsgdHlwZUJ5RXh0ZW5zaW9uIH0gZnJvbSBcIi4vdHlwZV9ieV9leHRlbnNpb24udHNcIjtcblxuLyoqIE1JTUUtdHlwZXMgZGF0YWJhc2UuICovXG5leHBvcnQgdHlwZSBEQiA9IHR5cGVvZiBkYjtcbi8qKiBNYXBzIGNvbnRlbnQgdHlwZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBmaWxlIGV4dGVuc2lvbnMuICovXG5leHBvcnQgdHlwZSBDb250ZW50VHlwZVRvRXh0ZW5zaW9uID0ge1xuICAvKipcbiAgICogTWFwcyBlYWNoIGNvbnRlbnQgdHlwZSBrZXkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBbSyBpbiBrZXlvZiBEQl06IERCW0tdIGV4dGVuZHMgeyBcImV4dGVuc2lvbnNcIjogcmVhZG9ubHkgc3RyaW5nW10gfVxuICAgID8gREJbS11bXCJleHRlbnNpb25zXCJdW251bWJlcl1cbiAgICA6IG5ldmVyO1xufTtcblxuLyoqIEtub3duIGV4dGVuc2lvbiBvciB0eXBlLiBVc2VkIGluIHtAbGlua2NvZGUgY29udGVudFR5cGV9LiAqL1xuZXhwb3J0IHR5cGUgS25vd25FeHRlbnNpb25PclR5cGUgPVxuICB8IGtleW9mIENvbnRlbnRUeXBlVG9FeHRlbnNpb25cbiAgfCBDb250ZW50VHlwZVRvRXh0ZW5zaW9uW2tleW9mIENvbnRlbnRUeXBlVG9FeHRlbnNpb25dXG4gIHwgYC4ke0NvbnRlbnRUeXBlVG9FeHRlbnNpb25ba2V5b2YgQ29udGVudFR5cGVUb0V4dGVuc2lvbl19YDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmdWxsIGBDb250ZW50LVR5cGVgIG9yIGBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIgdmFsdWUgZm9yIHRoZVxuICogZ2l2ZW4gZXh0ZW5zaW9uIG9yIG1lZGlhIHR5cGUuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgdHJlYXQgdGhlIGBleHRlbnNpb25PclR5cGVgIGFzIGEgbWVkaWEgdHlwZSB3aGVuIGl0XG4gKiBjb250YWlucyBhIGAvYCwgb3RoZXJ3aXNlIGl0IHdpbGwgcHJvY2VzcyBpdCBhcyBhbiBleHRlbnNpb24sIHdpdGggb3Igd2l0aG91dFxuICogdGhlIGxlYWRpbmcgYC5gLlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdW5hYmxlIHRvIHJlc29sdmUgdGhlIG1lZGlhIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIFR5cGUgb2YgdGhlIGV4dGVuc2lvbiBvciBtZWRpYSB0eXBlIHRvIHJlc29sdmUuXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbk9yVHlwZSBUaGUgZXh0ZW5zaW9uIG9yIG1lZGlhIHR5cGUgdG8gcmVzb2x2ZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZnVsbCBgQ29udGVudC1UeXBlYCBvciBgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyIHZhbHVlLCBvclxuICogYHVuZGVmaW5lZGAgaWYgdW5hYmxlIHRvIHJlc29sdmUgdGhlIG1lZGlhIHR5cGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb250ZW50VHlwZSB9IGZyb20gXCJAc3RkL21lZGlhLXR5cGVzL2NvbnRlbnQtdHlwZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGNvbnRlbnRUeXBlKFwiLmpzb25cIiksIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiKTtcbiAqIGFzc2VydEVxdWFscyhjb250ZW50VHlwZShcInRleHQvaHRtbFwiKSwgXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIik7XG4gKiBhc3NlcnRFcXVhbHMoY29udGVudFR5cGUoXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIiksIFwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIpO1xuICogYXNzZXJ0RXF1YWxzKGNvbnRlbnRUeXBlKFwidHh0XCIpLCBcInRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIik7XG4gKiBhc3NlcnRFcXVhbHMoY29udGVudFR5cGUoXCJmb29cIiksIHVuZGVmaW5lZCk7XG4gKiBhc3NlcnRFcXVhbHMoY29udGVudFR5cGUoXCJmaWxlLmpzb25cIiksIHVuZGVmaW5lZCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRUeXBlPFxuICAvLyBXb3JrYXJvdW5kIHRvIGF1dG9jb21wbGV0ZSBmb3IgcGFyYW1ldGVyczogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOSNpc3N1ZWNvbW1lbnQtNTY3ODcxOTM5XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG4gIFQgZXh0ZW5kcyAoc3RyaW5nICYge30pIHwgS25vd25FeHRlbnNpb25PclR5cGUsXG4+KFxuICBleHRlbnNpb25PclR5cGU6IFQsXG4pOiBMb3dlcmNhc2U8VD4gZXh0ZW5kcyBLbm93bkV4dGVuc2lvbk9yVHlwZSA/IHN0cmluZyA6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgW21lZGlhVHlwZSwgcGFyYW1zID0ge31dID0gZXh0ZW5zaW9uT3JUeXBlLmluY2x1ZGVzKFwiL1wiKVxuICAgICAgPyBwYXJzZU1lZGlhVHlwZShleHRlbnNpb25PclR5cGUpXG4gICAgICA6IFt0eXBlQnlFeHRlbnNpb24oZXh0ZW5zaW9uT3JUeXBlKSwgdW5kZWZpbmVkXTtcbiAgICBpZiAoIW1lZGlhVHlwZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBMb3dlcmNhc2U8VD4gZXh0ZW5kcyBLbm93bkV4dGVuc2lvbk9yVHlwZSA/IHN0cmluZ1xuICAgICAgICA6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCEoXCJjaGFyc2V0XCIgaW4gcGFyYW1zKSkge1xuICAgICAgY29uc3QgY2hhcnNldCA9IGdldENoYXJzZXQobWVkaWFUeXBlKTtcbiAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgIHBhcmFtcy5jaGFyc2V0ID0gY2hhcnNldDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdE1lZGlhVHlwZShtZWRpYVR5cGUsIHBhcmFtcyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGp1c3Qgc3dhbGxvdyByZXR1cm5pbmcgdW5kZWZpbmVkXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZCBhcyBMb3dlcmNhc2U8VD4gZXh0ZW5kcyBLbm93bkV4dGVuc2lvbk9yVHlwZSA/IHN0cmluZ1xuICAgIDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxjQUFjLFFBQVEsd0JBQXdCO0FBQ3ZELFNBQVMsVUFBVSxRQUFRLG1CQUFtQjtBQUM5QyxTQUFTLGVBQWUsUUFBUSx5QkFBeUI7QUFFekQsU0FBUyxlQUFlLFFBQVEseUJBQXlCO0FBb0J6RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QkMsR0FDRCxPQUFPLFNBQVMsWUFLZCxlQUFrQjtFQUVsQixJQUFJO0lBQ0YsTUFBTSxDQUFDLFdBQVcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixRQUFRLENBQUMsT0FDdEQsZUFBZSxtQkFDZjtNQUFDLGdCQUFnQjtNQUFrQjtLQUFVO0lBQ2pELElBQUksQ0FBQyxXQUFXO01BQ2QsT0FBTztJQUVUO0lBQ0EsSUFBSSxDQUFDLENBQUMsYUFBYSxNQUFNLEdBQUc7TUFDMUIsTUFBTSxVQUFVLFdBQVc7TUFDM0IsSUFBSSxTQUFTO1FBQ1gsT0FBTyxPQUFPLEdBQUc7TUFDbkI7SUFDRjtJQUNBLE9BQU8sZ0JBQWdCLFdBQVc7RUFDcEMsRUFBRSxPQUFNO0VBQ04sbUNBQW1DO0VBQ3JDO0VBQ0EsT0FBTztBQUVUIn0=
+// denoCacheMetadata=6155143375393141784,13490324468490832686 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/2fab163696b080858a88eec838206926fe73e0ac01075f0833f63052c8c3fc30.js b/vendor/gen/https/jsr.io/2fab163696b080858a88eec838206926fe73e0ac01075f0833f63052c8c3fc30.js
new file mode 100644
index 0000000..466b152
--- /dev/null
+++ b/vendor/gen/https/jsr.io/2fab163696b080858a88eec838206926fe73e0ac01075f0833f63052c8c3fc30.js
@@ -0,0 +1,24 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Verifies whether provided path is absolute.
+ *
+ * @example Usage
+ * ```ts
+ * import { isAbsolute } from "@std/path/posix/is-absolute";
+ * import { assert, assertFalse } from "@std/assert";
+ *
+ * assert(isAbsolute("/home/user/Documents/"));
+ * assertFalse(isAbsolute("home/user/Documents/"));
+ * ```
+ *
+ * @param path The path to verify.
+ * @returns Whether the path is absolute.
+ */ export function isAbsolute(path) {
+ assertPath(path);
+ return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9pc19hYnNvbHV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBhc3NlcnRQYXRoIH0gZnJvbSBcIi4uL19jb21tb24vYXNzZXJ0X3BhdGgudHNcIjtcbmltcG9ydCB7IGlzUG9zaXhQYXRoU2VwYXJhdG9yIH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHByb3ZpZGVkIHBhdGggaXMgYWJzb2x1dGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpc0Fic29sdXRlIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9pcy1hYnNvbHV0ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0LCBhc3NlcnRGYWxzZSB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydChpc0Fic29sdXRlKFwiL2hvbWUvdXNlci9Eb2N1bWVudHMvXCIpKTtcbiAqIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCJob21lL3VzZXIvRG9jdW1lbnRzL1wiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB2ZXJpZnkuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwYXRoIGlzIGFic29sdXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoID4gMCAmJiBpc1Bvc2l4UGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMCkpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxXQUFXLElBQVk7RUFDckMsV0FBVztFQUNYLE9BQU8sS0FBSyxNQUFNLEdBQUcsS0FBSyxxQkFBcUIsS0FBSyxVQUFVLENBQUM7QUFDakUifQ==
+// denoCacheMetadata=12380283740593318290,13904146203451933457 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3028e15592e85f3abad159660201866f1bc8d92a1fac9b1cb0588af2471d9ae7.js b/vendor/gen/https/jsr.io/3028e15592e85f3abad159660201866f1bc8d92a1fac9b1cb0588af2471d9ae7.js
new file mode 100644
index 0000000..9dfba73
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3028e15592e85f3abad159660201866f1bc8d92a1fac9b1cb0588af2471d9ae7.js
@@ -0,0 +1,49 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const alphabet = new TextEncoder().encode("0123456789abcdef");
+export const rAlphabet = new Uint8Array(128).fill(16); // alphabet.Hex.length
+alphabet.forEach((byte, i)=>rAlphabet[byte] = i);
+new TextEncoder().encode("ABCDEF").forEach((byte, i)=>rAlphabet[byte] = i + 10);
+/**
+ * Calculate the output size needed to encode a given input size for
+ * {@linkcode encodeIntoHex}.
+ *
+ * @param originalSize The size of the input buffer.
+ * @returns The size of the output buffer.
+ *
+ * @example Basic Usage
+ * ```ts
+ * import { assertEquals } from "@std/assert";
+ * import { calcSizeHex } from "@std/encoding/unstable-hex";
+ *
+ * assertEquals(calcSizeHex(1), 2);
+ * ```
+ */ export function calcSizeHex(originalSize) {
+ return originalSize * 2;
+}
+export function encode(buffer, i, o, alphabet) {
+ for(; i < buffer.length; ++i){
+ const x = buffer[i];
+ buffer[o++] = alphabet[x >> 4];
+ buffer[o++] = alphabet[x & 0xF];
+ }
+ return o;
+}
+export function decode(buffer, i, o, alphabet) {
+ if ((buffer.length - o) % 2 === 1) {
+ throw new RangeError(`Cannot decode input as hex: Length (${buffer.length - o}) must be divisible by 2`);
+ }
+ i += 1;
+ for(; i < buffer.length; i += 2){
+ buffer[o++] = getByte(buffer[i - 1], alphabet) << 4 | getByte(buffer[i], alphabet);
+ }
+ return o;
+}
+function getByte(char, alphabet) {
+ const byte = alphabet[char] ?? 16;
+ if (byte === 16) {
+ throw new TypeError(`Cannot decode input as hex: Invalid character (${String.fromCharCode(char)})`);
+ }
+ return byte;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL19jb21tb24xNi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH07XG5cbmV4cG9ydCBjb25zdCBhbHBoYWJldCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIjAxMjM0NTY3ODlhYmNkZWZcIik7XG5leHBvcnQgY29uc3QgckFscGhhYmV0ID0gbmV3IFVpbnQ4QXJyYXkoMTI4KS5maWxsKDE2KTsgLy8gYWxwaGFiZXQuSGV4Lmxlbmd0aFxuYWxwaGFiZXQuZm9yRWFjaCgoYnl0ZSwgaSkgPT4gckFscGhhYmV0W2J5dGVdID0gaSk7XG5uZXcgVGV4dEVuY29kZXIoKVxuICAuZW5jb2RlKFwiQUJDREVGXCIpXG4gIC5mb3JFYWNoKChieXRlLCBpKSA9PiByQWxwaGFiZXRbYnl0ZV0gPSBpICsgMTApO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgb3V0cHV0IHNpemUgbmVlZGVkIHRvIGVuY29kZSBhIGdpdmVuIGlucHV0IHNpemUgZm9yXG4gKiB7QGxpbmtjb2RlIGVuY29kZUludG9IZXh9LlxuICpcbiAqIEBwYXJhbSBvcmlnaW5hbFNpemUgVGhlIHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlci5cbiAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKiBpbXBvcnQgeyBjYWxjU2l6ZUhleCB9IGZyb20gXCJAc3RkL2VuY29kaW5nL3Vuc3RhYmxlLWhleFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhjYWxjU2l6ZUhleCgxKSwgMik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNTaXplSGV4KG9yaWdpbmFsU2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIG9yaWdpbmFsU2l6ZSAqIDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoXG4gIGJ1ZmZlcjogVWludDhBcnJheV8sXG4gIGk6IG51bWJlcixcbiAgbzogbnVtYmVyLFxuICBhbHBoYWJldDogVWludDhBcnJheSxcbik6IG51bWJlciB7XG4gIGZvciAoOyBpIDwgYnVmZmVyLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgeCA9IGJ1ZmZlcltpXSE7XG4gICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDRdITtcbiAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggJiAweEZdITtcbiAgfVxuICByZXR1cm4gbztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShcbiAgYnVmZmVyOiBVaW50OEFycmF5XyxcbiAgaTogbnVtYmVyLFxuICBvOiBudW1iZXIsXG4gIGFscGhhYmV0OiBVaW50OEFycmF5LFxuKTogbnVtYmVyIHtcbiAgaWYgKChidWZmZXIubGVuZ3RoIC0gbykgJSAyID09PSAxKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICBgQ2Fubm90IGRlY29kZSBpbnB1dCBhcyBoZXg6IExlbmd0aCAoJHtcbiAgICAgICAgYnVmZmVyLmxlbmd0aCAtIG9cbiAgICAgIH0pIG11c3QgYmUgZGl2aXNpYmxlIGJ5IDJgLFxuICAgICk7XG4gIH1cblxuICBpICs9IDE7XG4gIGZvciAoOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgYnVmZmVyW28rK10gPSAoZ2V0Qnl0ZShidWZmZXJbaSAtIDFdISwgYWxwaGFiZXQpIDw8IDQpIHxcbiAgICAgIGdldEJ5dGUoYnVmZmVyW2ldISwgYWxwaGFiZXQpO1xuICB9XG4gIHJldHVybiBvO1xufVxuXG5mdW5jdGlvbiBnZXRCeXRlKGNoYXI6IG51bWJlciwgYWxwaGFiZXQ6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBieXRlID0gYWxwaGFiZXRbY2hhcl0gPz8gMTY7XG4gIGlmIChieXRlID09PSAxNikgeyAvLyBhbHBoYWJldC5IZXgubGVuZ3RoXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBDYW5ub3QgZGVjb2RlIGlucHV0IGFzIGhleDogSW52YWxpZCBjaGFyYWN0ZXIgKCR7XG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcilcbiAgICAgIH0pYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBieXRlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUtyRCxPQUFPLE1BQU0sV0FBVyxJQUFJLGNBQWMsTUFBTSxDQUFDLG9CQUFvQjtBQUNyRSxPQUFPLE1BQU0sWUFBWSxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtBQUM3RSxTQUFTLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHO0FBQ2hELElBQUksY0FDRCxNQUFNLENBQUMsVUFDUCxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQU0sU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJO0FBRTlDOzs7Ozs7Ozs7Ozs7OztDQWNDLEdBQ0QsT0FBTyxTQUFTLFlBQVksWUFBb0I7RUFDOUMsT0FBTyxlQUFlO0FBQ3hCO0FBRUEsT0FBTyxTQUFTLE9BQ2QsTUFBbUIsRUFDbkIsQ0FBUyxFQUNULENBQVMsRUFDVCxRQUFvQjtFQUVwQixNQUFPLElBQUksT0FBTyxNQUFNLEVBQUUsRUFBRSxFQUFHO0lBQzdCLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRTtJQUNuQixNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUU7SUFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJO0VBQ2pDO0VBQ0EsT0FBTztBQUNUO0FBRUEsT0FBTyxTQUFTLE9BQ2QsTUFBbUIsRUFDbkIsQ0FBUyxFQUNULENBQVMsRUFDVCxRQUFvQjtFQUVwQixJQUFJLENBQUMsT0FBTyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRztJQUNqQyxNQUFNLElBQUksV0FDUixDQUFDLG9DQUFvQyxFQUNuQyxPQUFPLE1BQU0sR0FBRyxFQUNqQix3QkFBd0IsQ0FBQztFQUU5QjtFQUVBLEtBQUs7RUFDTCxNQUFPLElBQUksT0FBTyxNQUFNLEVBQUUsS0FBSyxFQUFHO0lBQ2hDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQUFBQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRyxhQUFhLElBQ2xELFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRztFQUN4QjtFQUNBLE9BQU87QUFDVDtBQUVBLFNBQVMsUUFBUSxJQUFZLEVBQUUsUUFBb0I7RUFDakQsTUFBTSxPQUFPLFFBQVEsQ0FBQyxLQUFLLElBQUk7RUFDL0IsSUFBSSxTQUFTLElBQUk7SUFDZixNQUFNLElBQUksVUFDUixDQUFDLCtDQUErQyxFQUM5QyxPQUFPLFlBQVksQ0FBQyxNQUNyQixDQUFDLENBQUM7RUFFUDtFQUNBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=9141643796425052155,1967313446775355262 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3033b260d04154e6fb47d4992b9453aa2481def9df8595254c5de0a8b547c8ab.js b/vendor/gen/https/jsr.io/3033b260d04154e6fb47d4992b9453aa2481def9df8595254c5de0a8b547c8ab.js
new file mode 100644
index 0000000..e50ed1b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3033b260d04154e6fb47d4992b9453aa2481def9df8595254c5de0a8b547c8ab.js
@@ -0,0 +1,21 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Converts a path to a namespaced path. This function returns the path as is on posix.
+ *
+ * @example Usage
+ * ```ts
+ * import { toNamespacedPath } from "@std/path/posix/to-namespaced-path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(toNamespacedPath("/home/foo"), "/home/foo");
+ * ```
+ *
+ * @param path The path.
+ * @returns The namespaced path.
+ */ export function toNamespacedPath(path) {
+ // Non-op on posix systems
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC90b19uYW1lc3BhY2VkX3BhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggdG8gYSBuYW1lc3BhY2VkIHBhdGguIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCBhcyBpcyBvbiBwb3NpeC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvTmFtZXNwYWNlZFBhdGggfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L3RvLW5hbWVzcGFjZWQtcGF0aFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHRvTmFtZXNwYWNlZFBhdGgoXCIvaG9tZS9mb29cIiksIFwiL2hvbWUvZm9vXCIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgbmFtZXNwYWNlZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYW1lc3BhY2VkUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBOb24tb3Agb24gcG9zaXggc3lzdGVtc1xuICByZXR1cm4gcGF0aDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDRCxPQUFPLFNBQVMsaUJBQWlCLElBQVk7RUFDM0MsMEJBQTBCO0VBQzFCLE9BQU87QUFDVCJ9
+// denoCacheMetadata=489874811655483959,15815455390377772781 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3056f7672646bc615e2d6cd1010ef69cfed329768bbdbed2094fa9e8a8dd0d49.js b/vendor/gen/https/jsr.io/3056f7672646bc615e2d6cd1010ef69cfed329768bbdbed2094fa9e8a8dd0d49.js
new file mode 100644
index 0000000..3959804
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3056f7672646bc615e2d6cd1010ef69cfed329768bbdbed2094fa9e8a8dd0d49.js
@@ -0,0 +1,71 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator } from "./_util.ts";
+import { normalize } from "./normalize.ts";
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ *
+ * @example Usage
+ * ```ts
+ * import { join } from "@std/path/windows/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const joined = join("C:\\foo", "bar", "baz\\..");
+ * assertEquals(joined, "C:\\foo\\bar");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `join` from `@std/path/windows/unstable-join`.
+ *
+ * @param paths The paths to join.
+ * @returns The joined path.
+ */ export function join(...paths) {
+ paths.forEach((path)=>assertPath(path));
+ paths = paths.filter((path)=>path.length > 0);
+ if (paths.length === 0) return ".";
+ // Make sure that the joined path doesn't start with two slashes, because
+ // normalize() will mistake it for an UNC path then.
+ //
+ // This step is skipped when it is very clear that the user actually
+ // intended to point at an UNC path. This is assumed when the first
+ // non-empty string arguments starts with exactly two slashes followed by
+ // at least one more non-slash character.
+ //
+ // Note that for normalize() to treat a path as an UNC path it needs to
+ // have at least 2 components, so we don't filter for that here.
+ // This means that the user can use join to construct UNC paths from
+ // a server name and a share name; for example:
+ // path.join('//server', 'share') -> '\\\\server\\share\\'
+ let needsReplace = true;
+ let slashCount = 0;
+ const firstPart = paths[0];
+ if (isPathSeparator(firstPart.charCodeAt(0))) {
+ ++slashCount;
+ const firstLen = firstPart.length;
+ if (firstLen > 1) {
+ if (isPathSeparator(firstPart.charCodeAt(1))) {
+ ++slashCount;
+ if (firstLen > 2) {
+ if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount;
+ else {
+ // We matched a UNC path in the first part
+ needsReplace = false;
+ }
+ }
+ }
+ }
+ }
+ let joined = paths.join("\\");
+ if (needsReplace) {
+ // Find any more consecutive slashes we need to replace
+ for(; slashCount < joined.length; ++slashCount){
+ if (!isPathSeparator(joined.charCodeAt(slashCount))) break;
+ }
+ // Replace the slashes if needed
+ if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`;
+ }
+ return normalize(joined);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2pvaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0UGF0aCB9IGZyb20gXCIuLi9fY29tbW9uL2Fzc2VydF9wYXRoLnRzXCI7XG5pbXBvcnQgeyBpc1BhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIi4vbm9ybWFsaXplLnRzXCI7XG5cbi8qKlxuICogSm9pbiBhbGwgZ2l2ZW4gYSBzZXF1ZW5jZSBvZiBgcGF0aHNgLHRoZW4gbm9ybWFsaXplcyB0aGUgcmVzdWx0aW5nIHBhdGguXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2pvaW5cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGpvaW5lZCA9IGpvaW4oXCJDOlxcXFxmb29cIiwgXCJiYXJcIiwgXCJiYXpcXFxcLi5cIik7XG4gKiBhc3NlcnRFcXVhbHMoam9pbmVkLCBcIkM6XFxcXGZvb1xcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBqb2luYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1qb2luYC5cbiAqXG4gKiBAcGFyYW0gcGF0aHMgVGhlIHBhdGhzIHRvIGpvaW4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IGFzc2VydFBhdGgocGF0aCkpO1xuICBwYXRocyA9IHBhdGhzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5sZW5ndGggPiAwKTtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBqb2luZWQgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggdHdvIHNsYXNoZXMsIGJlY2F1c2VcbiAgLy8gbm9ybWFsaXplKCkgd2lsbCBtaXN0YWtlIGl0IGZvciBhbiBVTkMgcGF0aCB0aGVuLlxuICAvL1xuICAvLyBUaGlzIHN0ZXAgaXMgc2tpcHBlZCB3aGVuIGl0IGlzIHZlcnkgY2xlYXIgdGhhdCB0aGUgdXNlciBhY3R1YWxseVxuICAvLyBpbnRlbmRlZCB0byBwb2ludCBhdCBhbiBVTkMgcGF0aC4gVGhpcyBpcyBhc3N1bWVkIHdoZW4gdGhlIGZpcnN0XG4gIC8vIG5vbi1lbXB0eSBzdHJpbmcgYXJndW1lbnRzIHN0YXJ0cyB3aXRoIGV4YWN0bHkgdHdvIHNsYXNoZXMgZm9sbG93ZWQgYnlcbiAgLy8gYXQgbGVhc3Qgb25lIG1vcmUgbm9uLXNsYXNoIGNoYXJhY3Rlci5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IGZvciBub3JtYWxpemUoKSB0byB0cmVhdCBhIHBhdGggYXMgYW4gVU5DIHBhdGggaXQgbmVlZHMgdG9cbiAgLy8gaGF2ZSBhdCBsZWFzdCAyIGNvbXBvbmVudHMsIHNvIHdlIGRvbid0IGZpbHRlciBmb3IgdGhhdCBoZXJlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHVzZXIgY2FuIHVzZSBqb2luIHRvIGNvbnN0cnVjdCBVTkMgcGF0aHMgZnJvbVxuICAvLyBhIHNlcnZlciBuYW1lIGFuZCBhIHNoYXJlIG5hbWU7IGZvciBleGFtcGxlOlxuICAvLyAgIHBhdGguam9pbignLy9zZXJ2ZXInLCAnc2hhcmUnKSAtPiAnXFxcXFxcXFxzZXJ2ZXJcXFxcc2hhcmVcXFxcJ1xuICBsZXQgbmVlZHNSZXBsYWNlID0gdHJ1ZTtcbiAgbGV0IHNsYXNoQ291bnQgPSAwO1xuICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoc1swXSE7XG4gIGlmIChpc1BhdGhTZXBhcmF0b3IoZmlyc3RQYXJ0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgKytzbGFzaENvdW50O1xuICAgIGNvbnN0IGZpcnN0TGVuID0gZmlyc3RQYXJ0Lmxlbmd0aDtcbiAgICBpZiAoZmlyc3RMZW4gPiAxKSB7XG4gICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICArK3NsYXNoQ291bnQ7XG4gICAgICAgIGlmIChmaXJzdExlbiA+IDIpIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDIpKSkgKytzbGFzaENvdW50O1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyBwYXRoIGluIHRoZSBmaXJzdCBwYXJ0XG4gICAgICAgICAgICBuZWVkc1JlcGxhY2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGV0IGpvaW5lZCA9IHBhdGhzLmpvaW4oXCJcXFxcXCIpO1xuICBpZiAobmVlZHNSZXBsYWNlKSB7XG4gICAgLy8gRmluZCBhbnkgbW9yZSBjb25zZWN1dGl2ZSBzbGFzaGVzIHdlIG5lZWQgdG8gcmVwbGFjZVxuICAgIGZvciAoOyBzbGFzaENvdW50IDwgam9pbmVkLmxlbmd0aDsgKytzbGFzaENvdW50KSB7XG4gICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihqb2luZWQuY2hhckNvZGVBdChzbGFzaENvdW50KSkpIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIHNsYXNoZXMgaWYgbmVlZGVkXG4gICAgaWYgKHNsYXNoQ291bnQgPj0gMikgam9pbmVkID0gYFxcXFwke2pvaW5lZC5zbGljZShzbGFzaENvdW50KX1gO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShqb2luZWQpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsZUFBZSxRQUFRLGFBQWE7QUFDN0MsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7OztDQWlCQyxHQUNELE9BQU8sU0FBUyxLQUFLLEdBQUcsS0FBZTtFQUNyQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLE9BQVMsV0FBVztFQUNuQyxRQUFRLE1BQU0sTUFBTSxDQUFDLENBQUMsT0FBUyxLQUFLLE1BQU0sR0FBRztFQUM3QyxJQUFJLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTztFQUUvQix5RUFBeUU7RUFDekUsb0RBQW9EO0VBQ3BELEVBQUU7RUFDRixvRUFBb0U7RUFDcEUsbUVBQW1FO0VBQ25FLHlFQUF5RTtFQUN6RSx5Q0FBeUM7RUFDekMsRUFBRTtFQUNGLHVFQUF1RTtFQUN2RSxnRUFBZ0U7RUFDaEUsb0VBQW9FO0VBQ3BFLCtDQUErQztFQUMvQyw0REFBNEQ7RUFDNUQsSUFBSSxlQUFlO0VBQ25CLElBQUksYUFBYTtFQUNqQixNQUFNLFlBQVksS0FBSyxDQUFDLEVBQUU7RUFDMUIsSUFBSSxnQkFBZ0IsVUFBVSxVQUFVLENBQUMsS0FBSztJQUM1QyxFQUFFO0lBQ0YsTUFBTSxXQUFXLFVBQVUsTUFBTTtJQUNqQyxJQUFJLFdBQVcsR0FBRztNQUNoQixJQUFJLGdCQUFnQixVQUFVLFVBQVUsQ0FBQyxLQUFLO1FBQzVDLEVBQUU7UUFDRixJQUFJLFdBQVcsR0FBRztVQUNoQixJQUFJLGdCQUFnQixVQUFVLFVBQVUsQ0FBQyxLQUFLLEVBQUU7ZUFDM0M7WUFDSCwwQ0FBMEM7WUFDMUMsZUFBZTtVQUNqQjtRQUNGO01BQ0Y7SUFDRjtFQUNGO0VBQ0EsSUFBSSxTQUFTLE1BQU0sSUFBSSxDQUFDO0VBQ3hCLElBQUksY0FBYztJQUNoQix1REFBdUQ7SUFDdkQsTUFBTyxhQUFhLE9BQU8sTUFBTSxFQUFFLEVBQUUsV0FBWTtNQUMvQyxJQUFJLENBQUMsZ0JBQWdCLE9BQU8sVUFBVSxDQUFDLGNBQWM7SUFDdkQ7SUFFQSxnQ0FBZ0M7SUFDaEMsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxhQUFhO0VBQy9EO0VBRUEsT0FBTyxVQUFVO0FBQ25CIn0=
+// denoCacheMetadata=1419923438344254522,7283987610311708934 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/308e8b732951c0b54bcba8346b862f82bb8c234b22cdcf5e791c54e6bee87859.js b/vendor/gen/https/jsr.io/308e8b732951c0b54bcba8346b862f82bb8c234b22cdcf5e791c54e6bee87859.js
new file mode 100644
index 0000000..c4ddc1e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/308e8b732951c0b54bcba8346b862f82bb8c234b22cdcf5e791c54e6bee87859.js
@@ -0,0 +1,10 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function assertArgs(from, to) {
+ assertPath(from);
+ assertPath(to);
+ if (from === to) return "";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL3JlbGF0aXZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi9hc3NlcnRfcGF0aC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXJncyhmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpIHtcbiAgYXNzZXJ0UGF0aChmcm9tKTtcbiAgYXNzZXJ0UGF0aCh0byk7XG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsT0FBTyxTQUFTLFdBQVcsSUFBWSxFQUFFLEVBQVU7RUFDakQsV0FBVztFQUNYLFdBQVc7RUFDWCxJQUFJLFNBQVMsSUFBSSxPQUFPO0FBQzFCIn0=
+// denoCacheMetadata=8247564021307104556,15914248069604603199 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3117caa912daf7a12cb9b141ce914c3fc8d1dcd65c7de5f1fd0dc47c61358bf9.js b/vendor/gen/https/jsr.io/3117caa912daf7a12cb9b141ce914c3fc8d1dcd65c7de5f1fd0dc47c61358bf9.js
new file mode 100644
index 0000000..2e17a2f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3117caa912daf7a12cb9b141ce914c3fc8d1dcd65c7de5f1fd0dc47c61358bf9.js
@@ -0,0 +1,435 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Command line arguments parser based on
+ * {@link https://github.com/minimistjs/minimist | minimist}.
+ *
+ * See {@linkcode parseArgs} for more information.
+ *
+ * @example Usage
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * // For proper use, one should use `parseArgs(Deno.args)`
+ * assertEquals(parseArgs(["--foo", "--bar=baz", "./quux.txt"]), {
+ * foo: true,
+ * bar: "baz",
+ * _: ["./quux.txt"],
+ * });
+ * ```
+ *
+ * @example `string` and `boolean` options
+ *
+ * Use `string` and `boolean` options to specify the type of the argument.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * const args = parseArgs(["--foo", "--bar", "baz"], {
+ * boolean: ["foo"],
+ * string: ["bar"],
+ * });
+ *
+ * assertEquals(args, { foo: true, bar: "baz", _: [] });
+ * ```
+ *
+ * @example `collect` option
+ *
+ * `collect` option tells the parser to treat the option as an array. All
+ * values will be collected into one array. If a non-collectable option is used
+ * multiple times, the last value is used.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * const args = parseArgs(["--foo", "bar", "--foo", "baz"], {
+ * collect: ["foo"],
+ * });
+ *
+ * assertEquals(args, { foo: ["bar", "baz"], _: [] });
+ * ```
+ *
+ * @example `negatable` option
+ *
+ * `negatable` option tells the parser to treat the option can be negated by
+ * prefixing them with `--no-`, like `--no-config`.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * const args = parseArgs(["--no-foo"], {
+ * boolean: ["foo"],
+ * negatable: ["foo"],
+ * });
+ *
+ * assertEquals(args, { foo: false, _: [] });
+ * ```
+ *
+ * @module
+ */ /** Combines recursively all intersection types and returns a new single type.
+ * @internal
+ */ const FLAG_REGEXP = /^(?:-(?:(?<doubleDash>-)(?<negated>no-)?)?)(?<key>.+?)(?:=(?<value>.+?))?$/s;
+const LETTER_REGEXP = /[A-Za-z]/;
+const NUMBER_REGEXP = /-?\d+(\.\d*)?(e-?\d+)?$/;
+const HYPHEN_REGEXP = /^(-|--)[^-]/;
+const VALUE_REGEXP = /=(?<value>.+)/;
+const FLAG_NAME_REGEXP = /^--[^=]+$/;
+const SPECIAL_CHAR_REGEXP = /\W/;
+const NON_WHITESPACE_REGEXP = /\S/;
+function isNumber(string) {
+ return NON_WHITESPACE_REGEXP.test(string) && Number.isFinite(Number(string));
+}
+function setNested(object, keys, value, collect = false) {
+ keys = [
+ ...keys
+ ];
+ const key = keys.pop();
+ keys.forEach((key)=>object = object[key] ??= {});
+ if (collect) {
+ const v = object[key];
+ if (Array.isArray(v)) {
+ v.push(value);
+ return;
+ }
+ value = v ? [
+ v,
+ value
+ ] : [
+ value
+ ];
+ }
+ object[key] = value;
+}
+function hasNested(object, keys) {
+ for (const key of keys){
+ const value = object[key];
+ if (!Object.hasOwn(object, key)) return false;
+ object = value;
+ }
+ return true;
+}
+function aliasIsBoolean(aliasMap, booleanSet, key) {
+ const set = aliasMap.get(key);
+ if (set === undefined) return false;
+ for (const alias of set)if (booleanSet.has(alias)) return true;
+ return false;
+}
+function isBooleanString(value) {
+ return value === "true" || value === "false";
+}
+function parseBooleanString(value) {
+ return value !== "false";
+}
+/**
+ * Take a set of command line arguments, optionally with a set of options, and
+ * return an object representing the flags found in the passed arguments.
+ *
+ * By default, any arguments starting with `-` or `--` are considered boolean
+ * flags. If the argument name is followed by an equal sign (`=`) it is
+ * considered a key-value pair. Any arguments which could not be parsed are
+ * available in the `_` property of the returned object.
+ *
+ * By default, this module tries to determine the type of all arguments
+ * automatically and the return type of this function will have an index
+ * signature with `any` as value (`{ [x: string]: any }`).
+ *
+ * If the `string`, `boolean` or `collect` option is set, the return value of
+ * this function will be fully typed and the index signature of the return
+ * type will change to `{ [x: string]: unknown }`.
+ *
+ * Any arguments after `'--'` will not be parsed and will end up in `parsedArgs._`.
+ *
+ * Numeric-looking arguments will be returned as numbers unless `options.string`
+ * or `options.boolean` is set for that argument name.
+ *
+ * See {@linkcode ParseOptions} for more information.
+ *
+ * @param args An array of command line arguments.
+ * @param options Options for the parse function.
+ *
+ * @typeParam TArgs Type of result.
+ * @typeParam TDoubleDash Used by `TArgs` for the result.
+ * @typeParam TBooleans Used by `TArgs` for the result.
+ * @typeParam TStrings Used by `TArgs` for the result.
+ * @typeParam TCollectable Used by `TArgs` for the result.
+ * @typeParam TNegatable Used by `TArgs` for the result.
+ * @typeParam TDefaults Used by `TArgs` for the result.
+ * @typeParam TAliases Used by `TArgs` for the result.
+ * @typeParam TAliasArgNames Used by `TArgs` for the result.
+ * @typeParam TAliasNames Used by `TArgs` for the result.
+ *
+ * @return The parsed arguments.
+ *
+ * @example Usage
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * // For proper use, one should use `parseArgs(Deno.args)`
+ * assertEquals(parseArgs(["--foo", "--bar=baz", "./quux.txt"]), {
+ * foo: true,
+ * bar: "baz",
+ * _: ["./quux.txt"],
+ * });
+ * ```
+ *
+ * @example `string` and `boolean` options
+ *
+ * Use `string` and `boolean` options to specify the type of the argument.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * const args = parseArgs(["--foo", "--bar", "baz"], {
+ * boolean: ["foo"],
+ * string: ["bar"],
+ * });
+ *
+ * assertEquals(args, { foo: true, bar: "baz", _: [] });
+ * ```
+ *
+ * @example `collect` option
+ *
+ * `collect` option tells the parser to treat the option as an array. All
+ * values will be collected into one array. If a non-collectable option is used
+ * multiple times, the last value is used.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * const args = parseArgs(["--foo", "bar", "--foo", "baz"], {
+ * collect: ["foo"],
+ * });
+ *
+ * assertEquals(args, { foo: ["bar", "baz"], _: [] });
+ * ```
+ *
+ * @example `negatable` option
+ *
+ * `negatable` option tells the parser to treat the option can be negated by
+ * prefixing them with `--no-`, like `--no-config`.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert/equals";
+ *
+ * const args = parseArgs(["--no-foo"], {
+ * boolean: ["foo"],
+ * negatable: ["foo"],
+ * });
+ *
+ * assertEquals(args, { foo: false, _: [] });
+ * ```
+ */ export function parseArgs(args, options) {
+ const { "--": doubleDash = false, alias = {}, boolean = false, default: defaults = {}, stopEarly = false, string = [], collect = [], negatable = [], unknown: unknownFn = (i)=>i } = options ?? {};
+ const aliasMap = new Map();
+ const booleanSet = new Set();
+ const stringSet = new Set();
+ const collectSet = new Set();
+ const negatableSet = new Set();
+ let allBools = false;
+ if (alias) {
+ for (const [key, value] of Object.entries(alias)){
+ if (value === undefined) {
+ throw new TypeError("Alias value must be defined");
+ }
+ const aliases = Array.isArray(value) ? value : [
+ value
+ ];
+ aliasMap.set(key, new Set(aliases));
+ aliases.forEach((alias)=>aliasMap.set(alias, new Set([
+ key,
+ ...aliases.filter((it)=>it !== alias)
+ ])));
+ }
+ }
+ if (boolean) {
+ if (typeof boolean === "boolean") {
+ allBools = boolean;
+ } else {
+ const booleanArgs = Array.isArray(boolean) ? boolean : [
+ boolean
+ ];
+ for (const key of booleanArgs.filter(Boolean)){
+ booleanSet.add(key);
+ aliasMap.get(key)?.forEach((al)=>{
+ booleanSet.add(al);
+ });
+ }
+ }
+ }
+ if (string) {
+ const stringArgs = Array.isArray(string) ? string : [
+ string
+ ];
+ for (const key of stringArgs.filter(Boolean)){
+ stringSet.add(key);
+ aliasMap.get(key)?.forEach((al)=>stringSet.add(al));
+ }
+ }
+ if (collect) {
+ const collectArgs = Array.isArray(collect) ? collect : [
+ collect
+ ];
+ for (const key of collectArgs.filter(Boolean)){
+ collectSet.add(key);
+ aliasMap.get(key)?.forEach((al)=>collectSet.add(al));
+ }
+ }
+ if (negatable) {
+ const negatableArgs = Array.isArray(negatable) ? negatable : [
+ negatable
+ ];
+ for (const key of negatableArgs.filter(Boolean)){
+ negatableSet.add(key);
+ aliasMap.get(key)?.forEach((alias)=>negatableSet.add(alias));
+ }
+ }
+ const argv = {
+ _: []
+ };
+ function setArgument(key, value, arg, collect) {
+ if (!booleanSet.has(key) && !stringSet.has(key) && !aliasMap.has(key) && !(allBools && FLAG_NAME_REGEXP.test(arg)) && unknownFn?.(arg, key, value) === false) {
+ return;
+ }
+ if (typeof value === "string" && !stringSet.has(key)) {
+ value = isNumber(value) ? Number(value) : value;
+ }
+ const collectable = collect && collectSet.has(key);
+ setNested(argv, key.split("."), value, collectable);
+ aliasMap.get(key)?.forEach((key)=>{
+ setNested(argv, key.split("."), value, collectable);
+ });
+ }
+ let notFlags = [];
+ // all args after "--" are not parsed
+ const index = args.indexOf("--");
+ if (index !== -1) {
+ notFlags = args.slice(index + 1);
+ args = args.slice(0, index);
+ }
+ argsLoop: for(let i = 0; i < args.length; i++){
+ const arg = args[i];
+ const groups = arg.match(FLAG_REGEXP)?.groups;
+ if (groups) {
+ const { doubleDash, negated } = groups;
+ let key = groups.key;
+ let value = groups.value;
+ if (doubleDash) {
+ if (value) {
+ if (booleanSet.has(key)) value = parseBooleanString(value);
+ setArgument(key, value, arg, true);
+ continue;
+ }
+ if (negated) {
+ if (negatableSet.has(key)) {
+ setArgument(key, false, arg, false);
+ continue;
+ }
+ key = `no-${key}`;
+ }
+ const next = args[i + 1];
+ if (next) {
+ if (!booleanSet.has(key) && !allBools && !next.startsWith("-") && (!aliasMap.has(key) || !aliasIsBoolean(aliasMap, booleanSet, key))) {
+ value = next;
+ i++;
+ setArgument(key, value, arg, true);
+ continue;
+ }
+ if (isBooleanString(next)) {
+ value = parseBooleanString(next);
+ i++;
+ setArgument(key, value, arg, true);
+ continue;
+ }
+ }
+ value = stringSet.has(key) ? "" : true;
+ setArgument(key, value, arg, true);
+ continue;
+ }
+ const letters = arg.slice(1, -1).split("");
+ for (const [j, letter] of letters.entries()){
+ const next = arg.slice(j + 2);
+ if (next === "-") {
+ setArgument(letter, next, arg, true);
+ continue;
+ }
+ if (LETTER_REGEXP.test(letter)) {
+ const groups = VALUE_REGEXP.exec(next)?.groups;
+ if (groups) {
+ setArgument(letter, groups.value, arg, true);
+ continue argsLoop;
+ }
+ if (NUMBER_REGEXP.test(next)) {
+ setArgument(letter, next, arg, true);
+ continue argsLoop;
+ }
+ }
+ if (letters[j + 1]?.match(SPECIAL_CHAR_REGEXP)) {
+ setArgument(letter, arg.slice(j + 2), arg, true);
+ continue argsLoop;
+ }
+ setArgument(letter, stringSet.has(letter) ? "" : true, arg, true);
+ }
+ key = arg.slice(-1);
+ if (key === "-") continue;
+ const nextArg = args[i + 1];
+ if (nextArg) {
+ if (!HYPHEN_REGEXP.test(nextArg) && !booleanSet.has(key) && (!aliasMap.has(key) || !aliasIsBoolean(aliasMap, booleanSet, key))) {
+ setArgument(key, nextArg, arg, true);
+ i++;
+ continue;
+ }
+ if (isBooleanString(nextArg)) {
+ const value = parseBooleanString(nextArg);
+ setArgument(key, value, arg, true);
+ i++;
+ continue;
+ }
+ }
+ setArgument(key, stringSet.has(key) ? "" : true, arg, true);
+ continue;
+ }
+ if (unknownFn?.(arg) !== false) {
+ argv._.push(stringSet.has("_") || !isNumber(arg) ? arg : Number(arg));
+ }
+ if (stopEarly) {
+ argv._.push(...args.slice(i + 1));
+ break;
+ }
+ }
+ for (const [key, value] of Object.entries(defaults)){
+ const keys = key.split(".");
+ if (!hasNested(argv, keys)) {
+ setNested(argv, keys, value);
+ aliasMap.get(key)?.forEach((key)=>setNested(argv, key.split("."), value));
+ }
+ }
+ for (const key of booleanSet.keys()){
+ const keys = key.split(".");
+ if (!hasNested(argv, keys)) {
+ const value = collectSet.has(key) ? [] : false;
+ setNested(argv, keys, value);
+ }
+ }
+ for (const key of stringSet.keys()){
+ const keys = key.split(".");
+ if (!hasNested(argv, keys) && collectSet.has(key)) {
+ setNested(argv, keys, []);
+ }
+ }
+ if (doubleDash) {
+ argv["--"] = notFlags;
+ } else {
+ argv._.push(...notFlags);
+ }
+ return argv;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY2xpLzEuMC4xNy9wYXJzZV9hcmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwYXJzZXIgYmFzZWQgb25cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWluaW1pc3Rqcy9taW5pbWlzdCB8IG1pbmltaXN0fS5cbiAqXG4gKiBTZWUge0BsaW5rY29kZSBwYXJzZUFyZ3N9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2VBcmdzIH0gZnJvbSBcIkBzdGQvY2xpL3BhcnNlLWFyZ3NcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydC9lcXVhbHNcIjtcbiAqXG4gKiAvLyBGb3IgcHJvcGVyIHVzZSwgb25lIHNob3VsZCB1c2UgYHBhcnNlQXJncyhEZW5vLmFyZ3MpYFxuICogYXNzZXJ0RXF1YWxzKHBhcnNlQXJncyhbXCItLWZvb1wiLCBcIi0tYmFyPWJhelwiLCBcIi4vcXV1eC50eHRcIl0pLCB7XG4gKiAgIGZvbzogdHJ1ZSxcbiAqICAgYmFyOiBcImJhelwiLFxuICogICBfOiBbXCIuL3F1dXgudHh0XCJdLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBgc3RyaW5nYCBhbmQgYGJvb2xlYW5gIG9wdGlvbnNcbiAqXG4gKiBVc2UgYHN0cmluZ2AgYW5kIGBib29sZWFuYCBvcHRpb25zIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiQHN0ZC9jbGkvcGFyc2UtYXJnc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0L2VxdWFsc1wiO1xuICpcbiAqIGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3MoW1wiLS1mb29cIiwgXCItLWJhclwiLCBcImJhelwiXSwge1xuICogICBib29sZWFuOiBbXCJmb29cIl0sXG4gKiAgIHN0cmluZzogW1wiYmFyXCJdLFxuICogfSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGFyZ3MsIHsgZm9vOiB0cnVlLCBiYXI6IFwiYmF6XCIsIF86IFtdIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgYGNvbGxlY3RgIG9wdGlvblxuICpcbiAqIGBjb2xsZWN0YCBvcHRpb24gdGVsbHMgdGhlIHBhcnNlciB0byB0cmVhdCB0aGUgb3B0aW9uIGFzIGFuIGFycmF5LiBBbGxcbiAqIHZhbHVlcyB3aWxsIGJlIGNvbGxlY3RlZCBpbnRvIG9uZSBhcnJheS4gSWYgYSBub24tY29sbGVjdGFibGUgb3B0aW9uIGlzIHVzZWRcbiAqIG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCB2YWx1ZSBpcyB1c2VkLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiQHN0ZC9jbGkvcGFyc2UtYXJnc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0L2VxdWFsc1wiO1xuICpcbiAqIGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3MoW1wiLS1mb29cIiwgXCJiYXJcIiwgXCItLWZvb1wiLCBcImJhelwiXSwge1xuICogIGNvbGxlY3Q6IFtcImZvb1wiXSxcbiAqIH0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhhcmdzLCB7IGZvbzogW1wiYmFyXCIsIFwiYmF6XCJdLCBfOiBbXSB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIGBuZWdhdGFibGVgIG9wdGlvblxuICpcbiAqIGBuZWdhdGFibGVgIG9wdGlvbiB0ZWxscyB0aGUgcGFyc2VyIHRvIHRyZWF0IHRoZSBvcHRpb24gY2FuIGJlIG5lZ2F0ZWQgYnlcbiAqIHByZWZpeGluZyB0aGVtIHdpdGggYC0tbm8tYCwgbGlrZSBgLS1uby1jb25maWdgLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiQHN0ZC9jbGkvcGFyc2UtYXJnc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0L2VxdWFsc1wiO1xuICpcbiAqIGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3MoW1wiLS1uby1mb29cIl0sIHtcbiAqICAgYm9vbGVhbjogW1wiZm9vXCJdLFxuICogICBuZWdhdGFibGU6IFtcImZvb1wiXSxcbiAqIH0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhhcmdzLCB7IGZvbzogZmFsc2UsIF86IFtdIH0pO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8qKiBDb21iaW5lcyByZWN1cnNpdmVseSBhbGwgaW50ZXJzZWN0aW9uIHR5cGVzIGFuZCByZXR1cm5zIGEgbmV3IHNpbmdsZSB0eXBlLlxuICogQGludGVybmFsXG4gKi9cbnR5cGUgSWQ8VFJlY29yZD4gPSBUUmVjb3JkIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgPyBUUmVjb3JkIGV4dGVuZHMgaW5mZXIgSW5mZXJyZWRSZWNvcmRcbiAgICA/IHsgW0tleSBpbiBrZXlvZiBJbmZlcnJlZFJlY29yZF06IElkPEluZmVycmVkUmVjb3JkW0tleV0+IH1cbiAgOiBuZXZlclxuICA6IFRSZWNvcmQ7XG5cbi8qKiBDb252ZXJ0cyBhIHVuaW9uIHR5cGUgYEEgfCBCIHwgQ2AgaW50byBhbiBpbnRlcnNlY3Rpb24gdHlwZSBgQSAmIEIgJiBDYC5cbiAqIEBpbnRlcm5hbFxuICovXG50eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VFZhbHVlPiA9XG4gIChUVmFsdWUgZXh0ZW5kcyB1bmtub3duID8gKGFyZ3M6IFRWYWx1ZSkgPT4gdW5rbm93biA6IG5ldmVyKSBleHRlbmRzXG4gICAgKGFyZ3M6IGluZmVyIFIpID0+IHVua25vd24gPyBSIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPyBSIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vKiogQGludGVybmFsICovXG50eXBlIEJvb2xlYW5UeXBlID0gYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKiBAaW50ZXJuYWwgKi9cbnR5cGUgU3RyaW5nVHlwZSA9IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKiBAaW50ZXJuYWwgKi9cbnR5cGUgQXJnVHlwZSA9IFN0cmluZ1R5cGUgfCBCb29sZWFuVHlwZTtcblxuLyoqIEBpbnRlcm5hbCAqL1xudHlwZSBDb2xsZWN0YWJsZSA9IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKiBAaW50ZXJuYWwgKi9cbnR5cGUgTmVnYXRhYmxlID0gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG50eXBlIFVzZVR5cGVzPFxuICBUQm9vbGVhbnMgZXh0ZW5kcyBCb29sZWFuVHlwZSxcbiAgVFN0cmluZ3MgZXh0ZW5kcyBTdHJpbmdUeXBlLFxuICBUQ29sbGVjdGFibGUgZXh0ZW5kcyBDb2xsZWN0YWJsZSxcbj4gPSB1bmRlZmluZWQgZXh0ZW5kcyAoXG4gICYgKGZhbHNlIGV4dGVuZHMgVEJvb2xlYW5zID8gdW5kZWZpbmVkIDogVEJvb2xlYW5zKVxuICAmIFRDb2xsZWN0YWJsZVxuICAmIFRTdHJpbmdzXG4pID8gZmFsc2VcbiAgOiB0cnVlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZWNvcmQgd2l0aCBhbGwgYXZhaWxhYmxlIGZsYWdzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBhbmRcbiAqIGRlZmF1bHQgdHlwZS5cbiAqIEBpbnRlcm5hbFxuICovXG50eXBlIFZhbHVlczxcbiAgVEJvb2xlYW5zIGV4dGVuZHMgQm9vbGVhblR5cGUsXG4gIFRTdHJpbmdzIGV4dGVuZHMgU3RyaW5nVHlwZSxcbiAgVENvbGxlY3RhYmxlIGV4dGVuZHMgQ29sbGVjdGFibGUsXG4gIFROZWdhdGFibGUgZXh0ZW5kcyBOZWdhdGFibGUsXG4gIFREZWZhdWx0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gIFRBbGlhc2VzIGV4dGVuZHMgQWxpYXNlcyB8IHVuZGVmaW5lZCxcbj4gPSBVc2VUeXBlczxUQm9vbGVhbnMsIFRTdHJpbmdzLCBUQ29sbGVjdGFibGU+IGV4dGVuZHMgdHJ1ZSA/XG4gICAgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICYgQWRkQWxpYXNlczxcbiAgICAgIFNwcmVhZERlZmF1bHRzPFxuICAgICAgICAmIENvbGxlY3RWYWx1ZXM8VFN0cmluZ3MsIHN0cmluZywgVENvbGxlY3RhYmxlLCBUTmVnYXRhYmxlPlxuICAgICAgICAmIFJlY3Vyc2l2ZVJlcXVpcmVkPENvbGxlY3RWYWx1ZXM8VEJvb2xlYW5zLCBib29sZWFuLCBUQ29sbGVjdGFibGU+PlxuICAgICAgICAmIENvbGxlY3RVbmtub3duVmFsdWVzPFxuICAgICAgICAgIFRCb29sZWFucyxcbiAgICAgICAgICBUU3RyaW5ncyxcbiAgICAgICAgICBUQ29sbGVjdGFibGUsXG4gICAgICAgICAgVE5lZ2F0YWJsZVxuICAgICAgICA+LFxuICAgICAgICBEZWRvdFJlY29yZDxURGVmYXVsdD5cbiAgICAgID4sXG4gICAgICBUQWxpYXNlc1xuICAgID5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vKiogQGludGVybmFsICovXG50eXBlIEFsaWFzZXM8VEFyZ05hbWVzID0gc3RyaW5nLCBUQWxpYXNOYW1lcyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSBQYXJ0aWFsPFxuICBSZWNvcmQ8RXh0cmFjdDxUQXJnTmFtZXMsIHN0cmluZz4sIFRBbGlhc05hbWVzIHwgUmVhZG9ubHlBcnJheTxUQWxpYXNOYW1lcz4+XG4+O1xuXG50eXBlIEFkZEFsaWFzZXM8XG4gIFRBcmdzLFxuICBUQWxpYXNlcyBleHRlbmRzIEFsaWFzZXMgfCB1bmRlZmluZWQsXG4+ID0ge1xuICBbVEFyZ05hbWUgaW4ga2V5b2YgVEFyZ3MgYXMgQWxpYXNOYW1lczxUQXJnTmFtZSwgVEFsaWFzZXM+XTogVEFyZ3NbVEFyZ05hbWVdO1xufTtcblxudHlwZSBBbGlhc05hbWVzPFxuICBUQXJnTmFtZSxcbiAgVEFsaWFzZXMgZXh0ZW5kcyBBbGlhc2VzIHwgdW5kZWZpbmVkLFxuPiA9IFRBcmdOYW1lIGV4dGVuZHMga2V5b2YgVEFsaWFzZXNcbiAgPyBzdHJpbmcgZXh0ZW5kcyBUQWxpYXNlc1tUQXJnTmFtZV0gPyBUQXJnTmFtZVxuICA6IFRBbGlhc2VzW1RBcmdOYW1lXSBleHRlbmRzIHN0cmluZyA/IFRBcmdOYW1lIHwgVEFsaWFzZXNbVEFyZ05hbWVdXG4gIDogVEFsaWFzZXNbVEFyZ05hbWVdIGV4dGVuZHMgQXJyYXk8c3RyaW5nPlxuICAgID8gVEFyZ05hbWUgfCBUQWxpYXNlc1tUQXJnTmFtZV1bbnVtYmVyXVxuICA6IFRBcmdOYW1lXG4gIDogVEFyZ05hbWU7XG5cbi8qKlxuICogU3ByZWFkcyBhbGwgZGVmYXVsdCB2YWx1ZXMgb2YgUmVjb3JkIGBURGVmYXVsdHNgIGludG8gUmVjb3JkIGBUQXJnc2BcbiAqIGFuZCBtYWtlcyBkZWZhdWx0IHZhbHVlcyByZXF1aXJlZC5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqIGBTcHJlYWRWYWx1ZXM8eyBmb28/OiBib29sZWFuLCBiYXI/OiBudW1iZXIgfSwgeyBmb286IG51bWJlciB9PmBcbiAqXG4gKiAqKlJlc3VsdDoqKiBgeyBmb286IGJvb2xlYW4gfCBudW1iZXIsIGJhcj86IG51bWJlciB9YFxuICovXG50eXBlIFNwcmVhZERlZmF1bHRzPFRBcmdzLCBURGVmYXVsdHM+ID0gVERlZmF1bHRzIGV4dGVuZHMgdW5kZWZpbmVkID8gVEFyZ3NcbiAgOiBUQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID9cbiAgICAgICYgT21pdDxUQXJncywga2V5b2YgVERlZmF1bHRzPlxuICAgICAgJiB7XG4gICAgICAgIFtEZWZhdWx0IGluIGtleW9mIFREZWZhdWx0c106IERlZmF1bHQgZXh0ZW5kcyBrZXlvZiBUQXJnc1xuICAgICAgICAgID8gKFRBcmdzW0RlZmF1bHRdICYgVERlZmF1bHRzW0RlZmF1bHRdIHwgVERlZmF1bHRzW0RlZmF1bHRdKSBleHRlbmRzXG4gICAgICAgICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgICAgPyBOb25OdWxsYWJsZTxTcHJlYWREZWZhdWx0czxUQXJnc1tEZWZhdWx0XSwgVERlZmF1bHRzW0RlZmF1bHRdPj5cbiAgICAgICAgICA6IFREZWZhdWx0c1tEZWZhdWx0XSB8IE5vbk51bGxhYmxlPFRBcmdzW0RlZmF1bHRdPlxuICAgICAgICAgIDogdW5rbm93bjtcbiAgICAgIH1cbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBSZWNvcmQgZm9yIHRoZSBgZGVmYXVsdGAgb3B0aW9uIHRvIGFkZFxuICogYXV0by1zdWdnZXN0aW9uIHN1cHBvcnQgZm9yIElERSdzLlxuICogQGludGVybmFsXG4gKi9cbnR5cGUgRGVmYXVsdHM8VEJvb2xlYW5zIGV4dGVuZHMgQm9vbGVhblR5cGUsIFRTdHJpbmdzIGV4dGVuZHMgU3RyaW5nVHlwZT4gPSBJZDxcbiAgVW5pb25Ub0ludGVyc2VjdGlvbjxcbiAgICAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgLy8gRGVkb3R0ZWQgYXV0byBzdWdnZXN0aW9uczogeyBmb286IHsgYmFyOiB1bmtub3duIH0gfVxuICAgICYgTWFwVHlwZXM8VFN0cmluZ3MsIHVua25vd24+XG4gICAgJiBNYXBUeXBlczxUQm9vbGVhbnMsIHVua25vd24+XG4gICAgLy8gRmxhdCBhdXRvIHN1Z2dlc3Rpb25zOiB7IFwiZm9vLmJhclwiOiB1bmtub3duIH1cbiAgICAmIE1hcERlZmF1bHRzPFRCb29sZWFucz5cbiAgICAmIE1hcERlZmF1bHRzPFRTdHJpbmdzPlxuICA+XG4+O1xuXG50eXBlIE1hcERlZmF1bHRzPFRBcmdOYW1lcyBleHRlbmRzIEFyZ1R5cGU+ID0gUGFydGlhbDxcbiAgUmVjb3JkPFRBcmdOYW1lcyBleHRlbmRzIHN0cmluZyA/IFRBcmdOYW1lcyA6IHN0cmluZywgdW5rbm93bj5cbj47XG5cbnR5cGUgUmVjdXJzaXZlUmVxdWlyZWQ8VFJlY29yZD4gPSBUUmVjb3JkIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPyB7XG4gICAgW0tleSBpbiBrZXlvZiBUUmVjb3JkXS0/OiBSZWN1cnNpdmVSZXF1aXJlZDxUUmVjb3JkW0tleV0+O1xuICB9XG4gIDogVFJlY29yZDtcblxuLyoqIFNhbWUgYXMgYE1hcFR5cGVzYCBidXQgYWxzbyBzdXBwb3J0cyBjb2xsZWN0YWJsZSBvcHRpb25zLiAqL1xudHlwZSBDb2xsZWN0VmFsdWVzPFxuICBUQXJnTmFtZXMgZXh0ZW5kcyBBcmdUeXBlLFxuICBUVHlwZSxcbiAgVENvbGxlY3RhYmxlIGV4dGVuZHMgQ29sbGVjdGFibGUsXG4gIFROZWdhdGFibGUgZXh0ZW5kcyBOZWdhdGFibGUgPSB1bmRlZmluZWQsXG4+ID0gVW5pb25Ub0ludGVyc2VjdGlvbjxcbiAgRXh0cmFjdDxUQXJnTmFtZXMsIFRDb2xsZWN0YWJsZT4gZXh0ZW5kcyBzdHJpbmcgP1xuICAgICAgJiAoRXhjbHVkZTxUQXJnTmFtZXMsIFRDb2xsZWN0YWJsZT4gZXh0ZW5kcyBuZXZlciA/IFJlY29yZDxuZXZlciwgbmV2ZXI+XG4gICAgICAgIDogTWFwVHlwZXM8RXhjbHVkZTxUQXJnTmFtZXMsIFRDb2xsZWN0YWJsZT4sIFRUeXBlLCBUTmVnYXRhYmxlPilcbiAgICAgICYgKEV4dHJhY3Q8VEFyZ05hbWVzLCBUQ29sbGVjdGFibGU+IGV4dGVuZHMgbmV2ZXIgPyBSZWNvcmQ8bmV2ZXIsIG5ldmVyPlxuICAgICAgICA6IFJlY3Vyc2l2ZVJlcXVpcmVkPFxuICAgICAgICAgIE1hcFR5cGVzPEV4dHJhY3Q8VEFyZ05hbWVzLCBUQ29sbGVjdGFibGU+LCBBcnJheTxUVHlwZT4sIFROZWdhdGFibGU+XG4gICAgICAgID4pXG4gICAgOiBNYXBUeXBlczxUQXJnTmFtZXMsIFRUeXBlLCBUTmVnYXRhYmxlPlxuPjtcblxuLyoqIFNhbWUgYXMgYFJlY29yZGAgYnV0IGFsc28gc3VwcG9ydHMgZG90dGVkIGFuZCBuZWdhdGFibGUgb3B0aW9ucy4gKi9cbnR5cGUgTWFwVHlwZXM8XG4gIFRBcmdOYW1lcyBleHRlbmRzIEFyZ1R5cGUsXG4gIFRUeXBlLFxuICBUTmVnYXRhYmxlIGV4dGVuZHMgTmVnYXRhYmxlID0gdW5kZWZpbmVkLFxuPiA9IHVuZGVmaW5lZCBleHRlbmRzIFRBcmdOYW1lcyA/IFJlY29yZDxuZXZlciwgbmV2ZXI+XG4gIDogVEFyZ05hbWVzIGV4dGVuZHMgYCR7aW5mZXIgTmFtZX0uJHtpbmZlciBSZXN0fWAgPyB7XG4gICAgICBbS2V5IGluIE5hbWVdPzogTWFwVHlwZXM8XG4gICAgICAgIFJlc3QsXG4gICAgICAgIFRUeXBlLFxuICAgICAgICBUTmVnYXRhYmxlIGV4dGVuZHMgYCR7TmFtZX0uJHtpbmZlciBOZWdhdGV9YCA/IE5lZ2F0ZSA6IHVuZGVmaW5lZFxuICAgICAgPjtcbiAgICB9XG4gIDogVEFyZ05hbWVzIGV4dGVuZHMgc3RyaW5nID8gUGFydGlhbDxcbiAgICAgIFJlY29yZDxUQXJnTmFtZXMsIFROZWdhdGFibGUgZXh0ZW5kcyBUQXJnTmFtZXMgPyBUVHlwZSB8IGZhbHNlIDogVFR5cGU+XG4gICAgPlxuICA6IFJlY29yZDxuZXZlciwgbmV2ZXI+O1xuXG50eXBlIENvbGxlY3RVbmtub3duVmFsdWVzPFxuICBUQm9vbGVhbnMgZXh0ZW5kcyBCb29sZWFuVHlwZSxcbiAgVFN0cmluZ3MgZXh0ZW5kcyBTdHJpbmdUeXBlLFxuICBUQ29sbGVjdGFibGUgZXh0ZW5kcyBDb2xsZWN0YWJsZSxcbiAgVE5lZ2F0YWJsZSBleHRlbmRzIE5lZ2F0YWJsZSxcbj4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFxuICBUQ29sbGVjdGFibGUgZXh0ZW5kcyBUQm9vbGVhbnMgJiBUU3RyaW5ncyA/IFJlY29yZDxuZXZlciwgbmV2ZXI+XG4gICAgOiBEZWRvdFJlY29yZDxcbiAgICAgIC8vIFVua25vd24gY29sbGVjdGFibGUgJiBub24tbmVnYXRhYmxlIGFyZ3MuXG4gICAgICAmIFJlY29yZDxcbiAgICAgICAgRXhjbHVkZTxcbiAgICAgICAgICBFeHRyYWN0PEV4Y2x1ZGU8VENvbGxlY3RhYmxlLCBUTmVnYXRhYmxlPiwgc3RyaW5nPixcbiAgICAgICAgICBFeHRyYWN0PFRTdHJpbmdzIHwgVEJvb2xlYW5zLCBzdHJpbmc+XG4gICAgICAgID4sXG4gICAgICAgIEFycmF5PHVua25vd24+XG4gICAgICA+XG4gICAgICAvLyBVbmtub3duIGNvbGxlY3RhYmxlICYgbmVnYXRhYmxlIGFyZ3MuXG4gICAgICAmIFJlY29yZDxcbiAgICAgICAgRXhjbHVkZTxcbiAgICAgICAgICBFeHRyYWN0PEV4dHJhY3Q8VENvbGxlY3RhYmxlLCBUTmVnYXRhYmxlPiwgc3RyaW5nPixcbiAgICAgICAgICBFeHRyYWN0PFRTdHJpbmdzIHwgVEJvb2xlYW5zLCBzdHJpbmc+XG4gICAgICAgID4sXG4gICAgICAgIEFycmF5PHVua25vd24+IHwgZmFsc2VcbiAgICAgID5cbiAgICA+XG4+O1xuXG4vKiogQ29udmVydHMgYHsgXCJmb28uYmFyLmJhelwiOiB1bmtub3duIH1gIGludG8gYHsgZm9vOiB7IGJhcjogeyBiYXo6IHVua25vd24gfSB9IH1gLiAqL1xudHlwZSBEZWRvdFJlY29yZDxUUmVjb3JkPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+IGV4dGVuZHMgVFJlY29yZCA/IFRSZWNvcmRcbiAgOiBUUmVjb3JkIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxuICAgICAgVmFsdWVPZjxcbiAgICAgICAge1xuICAgICAgICAgIFtLZXkgaW4ga2V5b2YgVFJlY29yZF06IEtleSBleHRlbmRzIHN0cmluZyA/IERlZG90PEtleSwgVFJlY29yZFtLZXldPlxuICAgICAgICAgICAgOiBuZXZlcjtcbiAgICAgICAgfVxuICAgICAgPlxuICAgID5cbiAgOiBUUmVjb3JkO1xuXG50eXBlIERlZG90PFRLZXkgZXh0ZW5kcyBzdHJpbmcsIFRWYWx1ZT4gPSBUS2V5IGV4dGVuZHNcbiAgYCR7aW5mZXIgTmFtZX0uJHtpbmZlciBSZXN0fWAgPyB7IFtLZXkgaW4gTmFtZV06IERlZG90PFJlc3QsIFRWYWx1ZT4gfVxuICA6IHsgW0tleSBpbiBUS2V5XTogVFZhbHVlIH07XG5cbnR5cGUgVmFsdWVPZjxUVmFsdWU+ID0gVFZhbHVlW2tleW9mIFRWYWx1ZV07XG5cbi8qKiBUaGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB7QGxpbmtjb2RlIHBhcnNlQXJnc30uICovXG5leHBvcnQgdHlwZSBBcmdzPFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBUQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgYW55PixcbiAgVERvdWJsZURhc2ggZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPiA9IElkPFxuICAmIFRBcmdzXG4gICYge1xuICAgIC8qKiBDb250YWlucyBhbGwgdGhlIGFyZ3VtZW50cyB0aGF0IGRpZG4ndCBoYXZlIGFuIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGhcbiAgICAgKiB0aGVtLiAqL1xuICAgIF86IEFycmF5PHN0cmluZyB8IG51bWJlcj47XG4gIH1cbiAgJiAoYm9vbGVhbiBleHRlbmRzIFREb3VibGVEYXNoID8gRG91YmxlRGFzaFxuICAgIDogdHJ1ZSBleHRlbmRzIFREb3VibGVEYXNoID8gUmVxdWlyZWQ8RG91YmxlRGFzaD5cbiAgICA6IFJlY29yZDxuZXZlciwgbmV2ZXI+KVxuPjtcblxuLyoqIEBpbnRlcm5hbCAqL1xudHlwZSBEb3VibGVEYXNoID0ge1xuICAvKiogQ29udGFpbnMgYWxsIHRoZSBhcmd1bWVudHMgdGhhdCBhcHBlYXIgYWZ0ZXIgdGhlIGRvdWJsZSBkYXNoOiBcIi0tXCIuICovXG4gIFwiLS1cIj86IEFycmF5PHN0cmluZz47XG59O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBwYXJzZUFyZ3N9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZU9wdGlvbnM8XG4gIFRCb29sZWFucyBleHRlbmRzIEJvb2xlYW5UeXBlID0gQm9vbGVhblR5cGUsXG4gIFRTdHJpbmdzIGV4dGVuZHMgU3RyaW5nVHlwZSA9IFN0cmluZ1R5cGUsXG4gIFRDb2xsZWN0YWJsZSBleHRlbmRzIENvbGxlY3RhYmxlID0gQ29sbGVjdGFibGUsXG4gIFROZWdhdGFibGUgZXh0ZW5kcyBOZWdhdGFibGUgPSBOZWdhdGFibGUsXG4gIFREZWZhdWx0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPVxuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZCxcbiAgVEFsaWFzZXMgZXh0ZW5kcyBBbGlhc2VzIHwgdW5kZWZpbmVkID0gQWxpYXNlcyB8IHVuZGVmaW5lZCxcbiAgVERvdWJsZURhc2ggZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbj4ge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHBvcHVsYXRlIHRoZSByZXN1bHQgYF9gIHdpdGggZXZlcnl0aGluZyBiZWZvcmUgdGhlIGAtLWAgYW5kXG4gICAqIHRoZSByZXN1bHQgYFsnLS0nXWAgd2l0aCBldmVyeXRoaW5nIGFmdGVyIHRoZSBgLS1gLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqXG4gICAqIEBleGFtcGxlIERvdWJsZSBkYXNoIG9wdGlvbiBpcyBmYWxzZVxuICAgKiBgYGB0c1xuICAgKiAvLyAkIGRlbm8gcnVuIGV4YW1wbGUudHMgLS0gYSBhcmcxXG4gICAqIGltcG9ydCB7IHBhcnNlQXJncyB9IGZyb20gXCJAc3RkL2NsaS9wYXJzZS1hcmdzXCI7XG4gICAqIGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3MoRGVuby5hcmdzLCB7IFwiLS1cIjogZmFsc2UgfSk7IC8vIGFyZ3MgZXF1YWxzIHsgXzogWyBcImFcIiwgXCJhcmcxXCIgXSB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBEb3VibGUgZGFzaCBvcHRpb24gaXMgdHJ1ZVxuICAgKiBgYGB0c1xuICAgKiAvLyAkIGRlbm8gcnVuIGV4YW1wbGUudHMgLS0gYSBhcmcxXG4gICAqIGltcG9ydCB7IHBhcnNlQXJncyB9IGZyb20gXCJAc3RkL2NsaS9wYXJzZS1hcmdzXCI7XG4gICAqIGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3MoRGVuby5hcmdzLCB7IFwiLS1cIjogdHJ1ZSB9KTsgLy8gYXJncyBlcXVhbHMgeyBfOiBbXSwgLS06IFsgXCJhXCIsIFwiYXJnMVwiIF0gfVxuICAgKiBgYGBcbiAgICovXG4gIFwiLS1cIj86IFREb3VibGVEYXNoO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3QgbWFwcGluZyBzdHJpbmcgbmFtZXMgdG8gc3RyaW5ncyBvciBhcnJheXMgb2Ygc3RyaW5nIGFyZ3VtZW50XG4gICAqIG5hbWVzIHRvIHVzZSBhcyBhbGlhc2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7e319XG4gICAqL1xuICBhbGlhcz86IFRBbGlhc2VzO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIHRvIGFsd2F5cyB0cmVhdCBhcyBib29sZWFucy4gSWZcbiAgICogYHRydWVgIHdpbGwgdHJlYXQgYWxsIGRvdWJsZSBoeXBoZW5hdGVkIGFyZ3VtZW50cyB3aXRob3V0IGVxdWFsIHNpZ25zIGFzXG4gICAqIGBib29sZWFuYCAoZS5nLiBhZmZlY3RzIGAtLWZvb2AsIG5vdCBgLWZgIG9yIGAtLWZvbz1iYXJgKS5cbiAgICogIEFsbCBgYm9vbGVhbmAgYXJndW1lbnRzIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgYm9vbGVhbj86IFRCb29sZWFucyB8IFJlYWRvbmx5QXJyYXk8RXh0cmFjdDxUQm9vbGVhbnMsIHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3QgbWFwcGluZyBzdHJpbmcgYXJndW1lbnQgbmFtZXMgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt7fX1cbiAgICovXG4gIGRlZmF1bHQ/OiBURGVmYXVsdCAmIERlZmF1bHRzPFRCb29sZWFucywgVFN0cmluZ3M+O1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgcG9wdWxhdGUgdGhlIHJlc3VsdCBgX2Agd2l0aCBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdFxuICAgKiBub24tb3B0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBzdG9wRWFybHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFyZ3VtZW50IG5hbWVzIHRvIGFsd2F5cyB0cmVhdCBhcyBzdHJpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7W119XG4gICAqL1xuICBzdHJpbmc/OiBUU3RyaW5ncyB8IFJlYWRvbmx5QXJyYXk8RXh0cmFjdDxUU3RyaW5ncywgc3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXJndW1lbnQgbmFtZXMgdG8gYWx3YXlzIHRyZWF0IGFzIGFycmF5cy5cbiAgICogQ29sbGVjdGFibGUgb3B0aW9ucyBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4gQWxsIHZhbHVlcyB3aWxsIGJlXG4gICAqIGNvbGxlY3RlZCBpbnRvIG9uZSBhcnJheS4gSWYgYSBub24tY29sbGVjdGFibGUgb3B0aW9uIGlzIHVzZWQgbXVsdGlwbGVcbiAgICogdGltZXMsIHRoZSBsYXN0IHZhbHVlIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtbXX1cbiAgICovXG4gIGNvbGxlY3Q/OiBUQ29sbGVjdGFibGUgfCBSZWFkb25seUFycmF5PEV4dHJhY3Q8VENvbGxlY3RhYmxlLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogQSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcmd1bWVudCBuYW1lcyB3aGljaCBjYW4gYmUgbmVnYXRlZFxuICAgKiBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGAtLW5vLWAsIGxpa2UgYC0tbm8tY29uZmlnYC5cbiAgICpcbiAgICogQGRlZmF1bHQge1tdfVxuICAgKi9cbiAgbmVnYXRhYmxlPzogVE5lZ2F0YWJsZSB8IFJlYWRvbmx5QXJyYXk8RXh0cmFjdDxUTmVnYXRhYmxlLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB3aGljaCBpcyBpbnZva2VkIHdpdGggYSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIG5vdCBkZWZpbmVkIGluXG4gICAqIHRoZSBgb3B0aW9uc2AgY29uZmlndXJhdGlvbiBvYmplY3QuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWAsIHRoZVxuICAgKiB1bmtub3duIG9wdGlvbiBpcyBub3QgYWRkZWQgdG8gYHBhcnNlZEFyZ3NgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7dW5rbm93bn1cbiAgICovXG4gIHVua25vd24/OiAoYXJnOiBzdHJpbmcsIGtleT86IHN0cmluZywgdmFsdWU/OiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgTmVzdGVkTWFwcGluZyB7XG4gIFtrZXk6IHN0cmluZ106IE5lc3RlZE1hcHBpbmcgfCB1bmtub3duO1xufVxuXG5jb25zdCBGTEFHX1JFR0VYUCA9XG4gIC9eKD86LSg/Oig/PGRvdWJsZURhc2g+LSkoPzxuZWdhdGVkPm5vLSk/KT8pKD88a2V5Pi4rPykoPzo9KD88dmFsdWU+Lis/KSk/JC9zO1xuY29uc3QgTEVUVEVSX1JFR0VYUCA9IC9bQS1aYS16XS87XG5jb25zdCBOVU1CRVJfUkVHRVhQID0gLy0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC87XG5jb25zdCBIWVBIRU5fUkVHRVhQID0gL14oLXwtLSlbXi1dLztcbmNvbnN0IFZBTFVFX1JFR0VYUCA9IC89KD88dmFsdWU+LispLztcbmNvbnN0IEZMQUdfTkFNRV9SRUdFWFAgPSAvXi0tW149XSskLztcbmNvbnN0IFNQRUNJQUxfQ0hBUl9SRUdFWFAgPSAvXFxXLztcblxuY29uc3QgTk9OX1dISVRFU1BBQ0VfUkVHRVhQID0gL1xcUy87XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKHN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBOT05fV0hJVEVTUEFDRV9SRUdFWFAudGVzdChzdHJpbmcpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIoc3RyaW5nKSk7XG59XG5cbmZ1bmN0aW9uIHNldE5lc3RlZChcbiAgb2JqZWN0OiBOZXN0ZWRNYXBwaW5nLFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgdmFsdWU6IHVua25vd24sXG4gIGNvbGxlY3QgPSBmYWxzZSxcbikge1xuICBrZXlzID0gWy4uLmtleXNdO1xuICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpITtcblxuICBrZXlzLmZvckVhY2goKGtleSkgPT4gb2JqZWN0ID0gKG9iamVjdFtrZXldID8/PSB7fSkgYXMgTmVzdGVkTWFwcGluZyk7XG5cbiAgaWYgKGNvbGxlY3QpIHtcbiAgICBjb25zdCB2ID0gb2JqZWN0W2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgIHYucHVzaCh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2ID8gW3YsIHZhbHVlXSA6IFt2YWx1ZV07XG4gIH1cblxuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBoYXNOZXN0ZWQob2JqZWN0OiBOZXN0ZWRNYXBwaW5nLCBrZXlzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24ob2JqZWN0LCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgb2JqZWN0ID0gdmFsdWUgYXMgTmVzdGVkTWFwcGluZztcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYWxpYXNJc0Jvb2xlYW4oXG4gIGFsaWFzTWFwOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sXG4gIGJvb2xlYW5TZXQ6IFNldDxzdHJpbmc+LFxuICBrZXk6IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBjb25zdCBzZXQgPSBhbGlhc01hcC5nZXQoa2V5KTtcbiAgaWYgKHNldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgYWxpYXMgb2Ygc2V0KSBpZiAoYm9vbGVhblNldC5oYXMoYWxpYXMpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW5TdHJpbmcodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcImZhbHNlXCI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhblN0cmluZyh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWUgIT09IFwiZmFsc2VcIjtcbn1cblxuLyoqXG4gKiBUYWtlIGEgc2V0IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIG9wdGlvbmFsbHkgd2l0aCBhIHNldCBvZiBvcHRpb25zLCBhbmRcbiAqIHJldHVybiBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmbGFncyBmb3VuZCBpbiB0aGUgcGFzc2VkIGFyZ3VtZW50cy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBhbnkgYXJndW1lbnRzIHN0YXJ0aW5nIHdpdGggYC1gIG9yIGAtLWAgYXJlIGNvbnNpZGVyZWQgYm9vbGVhblxuICogZmxhZ3MuIElmIHRoZSBhcmd1bWVudCBuYW1lIGlzIGZvbGxvd2VkIGJ5IGFuIGVxdWFsIHNpZ24gKGA9YCkgaXQgaXNcbiAqIGNvbnNpZGVyZWQgYSBrZXktdmFsdWUgcGFpci4gQW55IGFyZ3VtZW50cyB3aGljaCBjb3VsZCBub3QgYmUgcGFyc2VkIGFyZVxuICogYXZhaWxhYmxlIGluIHRoZSBgX2AgcHJvcGVydHkgb2YgdGhlIHJldHVybmVkIG9iamVjdC5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGlzIG1vZHVsZSB0cmllcyB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYWxsIGFyZ3VtZW50c1xuICogYXV0b21hdGljYWxseSBhbmQgdGhlIHJldHVybiB0eXBlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIGFuIGluZGV4XG4gKiBzaWduYXR1cmUgd2l0aCBgYW55YCBhcyB2YWx1ZSAoYHsgW3g6IHN0cmluZ106IGFueSB9YCkuXG4gKlxuICogSWYgdGhlIGBzdHJpbmdgLCBgYm9vbGVhbmAgb3IgYGNvbGxlY3RgIG9wdGlvbiBpcyBzZXQsIHRoZSByZXR1cm4gdmFsdWUgb2ZcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBmdWxseSB0eXBlZCBhbmQgdGhlIGluZGV4IHNpZ25hdHVyZSBvZiB0aGUgcmV0dXJuXG4gKiB0eXBlIHdpbGwgY2hhbmdlIHRvIGB7IFt4OiBzdHJpbmddOiB1bmtub3duIH1gLlxuICpcbiAqIEFueSBhcmd1bWVudHMgYWZ0ZXIgYCctLSdgIHdpbGwgbm90IGJlIHBhcnNlZCBhbmQgd2lsbCBlbmQgdXAgaW4gYHBhcnNlZEFyZ3MuX2AuXG4gKlxuICogTnVtZXJpYy1sb29raW5nIGFyZ3VtZW50cyB3aWxsIGJlIHJldHVybmVkIGFzIG51bWJlcnMgdW5sZXNzIGBvcHRpb25zLnN0cmluZ2BcbiAqIG9yIGBvcHRpb25zLmJvb2xlYW5gIGlzIHNldCBmb3IgdGhhdCBhcmd1bWVudCBuYW1lLlxuICpcbiAqIFNlZSB7QGxpbmtjb2RlIFBhcnNlT3B0aW9uc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIGFyZ3MgQW4gYXJyYXkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBwYXJzZSBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcmdzIFR5cGUgb2YgcmVzdWx0LlxuICogQHR5cGVQYXJhbSBURG91YmxlRGFzaCBVc2VkIGJ5IGBUQXJnc2AgZm9yIHRoZSByZXN1bHQuXG4gKiBAdHlwZVBhcmFtIFRCb29sZWFucyBVc2VkIGJ5IGBUQXJnc2AgZm9yIHRoZSByZXN1bHQuXG4gKiBAdHlwZVBhcmFtIFRTdHJpbmdzIFVzZWQgYnkgYFRBcmdzYCBmb3IgdGhlIHJlc3VsdC5cbiAqIEB0eXBlUGFyYW0gVENvbGxlY3RhYmxlIFVzZWQgYnkgYFRBcmdzYCBmb3IgdGhlIHJlc3VsdC5cbiAqIEB0eXBlUGFyYW0gVE5lZ2F0YWJsZSBVc2VkIGJ5IGBUQXJnc2AgZm9yIHRoZSByZXN1bHQuXG4gKiBAdHlwZVBhcmFtIFREZWZhdWx0cyBVc2VkIGJ5IGBUQXJnc2AgZm9yIHRoZSByZXN1bHQuXG4gKiBAdHlwZVBhcmFtIFRBbGlhc2VzIFVzZWQgYnkgYFRBcmdzYCBmb3IgdGhlIHJlc3VsdC5cbiAqIEB0eXBlUGFyYW0gVEFsaWFzQXJnTmFtZXMgVXNlZCBieSBgVEFyZ3NgIGZvciB0aGUgcmVzdWx0LlxuICogQHR5cGVQYXJhbSBUQWxpYXNOYW1lcyBVc2VkIGJ5IGBUQXJnc2AgZm9yIHRoZSByZXN1bHQuXG4gKlxuICogQHJldHVybiBUaGUgcGFyc2VkIGFyZ3VtZW50cy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBhcnNlQXJncyB9IGZyb20gXCJAc3RkL2NsaS9wYXJzZS1hcmdzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnQvZXF1YWxzXCI7XG4gKlxuICogLy8gRm9yIHByb3BlciB1c2UsIG9uZSBzaG91bGQgdXNlIGBwYXJzZUFyZ3MoRGVuby5hcmdzKWBcbiAqIGFzc2VydEVxdWFscyhwYXJzZUFyZ3MoW1wiLS1mb29cIiwgXCItLWJhcj1iYXpcIiwgXCIuL3F1dXgudHh0XCJdKSwge1xuICogICBmb286IHRydWUsXG4gKiAgIGJhcjogXCJiYXpcIixcbiAqICAgXzogW1wiLi9xdXV4LnR4dFwiXSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgYHN0cmluZ2AgYW5kIGBib29sZWFuYCBvcHRpb25zXG4gKlxuICogVXNlIGBzdHJpbmdgIGFuZCBgYm9vbGVhbmAgb3B0aW9ucyB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2VBcmdzIH0gZnJvbSBcIkBzdGQvY2xpL3BhcnNlLWFyZ3NcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydC9lcXVhbHNcIjtcbiAqXG4gKiBjb25zdCBhcmdzID0gcGFyc2VBcmdzKFtcIi0tZm9vXCIsIFwiLS1iYXJcIiwgXCJiYXpcIl0sIHtcbiAqICAgYm9vbGVhbjogW1wiZm9vXCJdLFxuICogICBzdHJpbmc6IFtcImJhclwiXSxcbiAqIH0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhhcmdzLCB7IGZvbzogdHJ1ZSwgYmFyOiBcImJhelwiLCBfOiBbXSB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIGBjb2xsZWN0YCBvcHRpb25cbiAqXG4gKiBgY29sbGVjdGAgb3B0aW9uIHRlbGxzIHRoZSBwYXJzZXIgdG8gdHJlYXQgdGhlIG9wdGlvbiBhcyBhbiBhcnJheS4gQWxsXG4gKiB2YWx1ZXMgd2lsbCBiZSBjb2xsZWN0ZWQgaW50byBvbmUgYXJyYXkuIElmIGEgbm9uLWNvbGxlY3RhYmxlIG9wdGlvbiBpcyB1c2VkXG4gKiBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3QgdmFsdWUgaXMgdXNlZC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2VBcmdzIH0gZnJvbSBcIkBzdGQvY2xpL3BhcnNlLWFyZ3NcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydC9lcXVhbHNcIjtcbiAqXG4gKiBjb25zdCBhcmdzID0gcGFyc2VBcmdzKFtcIi0tZm9vXCIsIFwiYmFyXCIsIFwiLS1mb29cIiwgXCJiYXpcIl0sIHtcbiAqICBjb2xsZWN0OiBbXCJmb29cIl0sXG4gKiB9KTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoYXJncywgeyBmb286IFtcImJhclwiLCBcImJhelwiXSwgXzogW10gfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBgbmVnYXRhYmxlYCBvcHRpb25cbiAqXG4gKiBgbmVnYXRhYmxlYCBvcHRpb24gdGVsbHMgdGhlIHBhcnNlciB0byB0cmVhdCB0aGUgb3B0aW9uIGNhbiBiZSBuZWdhdGVkIGJ5XG4gKiBwcmVmaXhpbmcgdGhlbSB3aXRoIGAtLW5vLWAsIGxpa2UgYC0tbm8tY29uZmlnYC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2VBcmdzIH0gZnJvbSBcIkBzdGQvY2xpL3BhcnNlLWFyZ3NcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydC9lcXVhbHNcIjtcbiAqXG4gKiBjb25zdCBhcmdzID0gcGFyc2VBcmdzKFtcIi0tbm8tZm9vXCJdLCB7XG4gKiAgIGJvb2xlYW46IFtcImZvb1wiXSxcbiAqICAgbmVnYXRhYmxlOiBbXCJmb29cIl0sXG4gKiB9KTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoYXJncywgeyBmb286IGZhbHNlLCBfOiBbXSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmdzPFxuICBUQXJncyBleHRlbmRzIFZhbHVlczxcbiAgICBUQm9vbGVhbnMsXG4gICAgVFN0cmluZ3MsXG4gICAgVENvbGxlY3RhYmxlLFxuICAgIFROZWdhdGFibGUsXG4gICAgVERlZmF1bHRzLFxuICAgIFRBbGlhc2VzXG4gID4sXG4gIFREb3VibGVEYXNoIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgVEJvb2xlYW5zIGV4dGVuZHMgQm9vbGVhblR5cGUgPSB1bmRlZmluZWQsXG4gIFRTdHJpbmdzIGV4dGVuZHMgU3RyaW5nVHlwZSA9IHVuZGVmaW5lZCxcbiAgVENvbGxlY3RhYmxlIGV4dGVuZHMgQ29sbGVjdGFibGUgPSB1bmRlZmluZWQsXG4gIFROZWdhdGFibGUgZXh0ZW5kcyBOZWdhdGFibGUgPSB1bmRlZmluZWQsXG4gIFREZWZhdWx0cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBUQWxpYXNlcyBleHRlbmRzIEFsaWFzZXM8VEFsaWFzQXJnTmFtZXMsIFRBbGlhc05hbWVzPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgVEFsaWFzQXJnTmFtZXMgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFRBbGlhc05hbWVzIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPihcbiAgYXJnczogc3RyaW5nW10sXG4gIG9wdGlvbnM/OiBQYXJzZU9wdGlvbnM8XG4gICAgVEJvb2xlYW5zLFxuICAgIFRTdHJpbmdzLFxuICAgIFRDb2xsZWN0YWJsZSxcbiAgICBUTmVnYXRhYmxlLFxuICAgIFREZWZhdWx0cyxcbiAgICBUQWxpYXNlcyxcbiAgICBURG91YmxlRGFzaFxuICA+LFxuKTogQXJnczxUQXJncywgVERvdWJsZURhc2g+IHtcbiAgY29uc3Qge1xuICAgIFwiLS1cIjogZG91YmxlRGFzaCA9IGZhbHNlLFxuICAgIGFsaWFzID0ge30gYXMgTm9uTnVsbGFibGU8VEFsaWFzZXM+LFxuICAgIGJvb2xlYW4gPSBmYWxzZSxcbiAgICBkZWZhdWx0OiBkZWZhdWx0cyA9IHt9IGFzIFREZWZhdWx0cyAmIERlZmF1bHRzPFRCb29sZWFucywgVFN0cmluZ3M+LFxuICAgIHN0b3BFYXJseSA9IGZhbHNlLFxuICAgIHN0cmluZyA9IFtdLFxuICAgIGNvbGxlY3QgPSBbXSxcbiAgICBuZWdhdGFibGUgPSBbXSxcbiAgICB1bmtub3duOiB1bmtub3duRm4gPSAoaTogc3RyaW5nKTogdW5rbm93biA9PiBpLFxuICB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgYWxpYXNNYXA6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcbiAgY29uc3QgYm9vbGVhblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzdHJpbmdTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgY29sbGVjdFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBuZWdhdGFibGVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBsZXQgYWxsQm9vbHMgPSBmYWxzZTtcblxuICBpZiAoYWxpYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhbGlhcykpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBbGlhcyB2YWx1ZSBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlhc2VzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICBhbGlhc01hcC5zZXQoa2V5LCBuZXcgU2V0KGFsaWFzZXMpKTtcbiAgICAgIGFsaWFzZXMuZm9yRWFjaCgoYWxpYXMpID0+XG4gICAgICAgIGFsaWFzTWFwLnNldChcbiAgICAgICAgICBhbGlhcyxcbiAgICAgICAgICBuZXcgU2V0KFtrZXksIC4uLmFsaWFzZXMuZmlsdGVyKChpdCkgPT4gaXQgIT09IGFsaWFzKV0pLFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChib29sZWFuKSB7XG4gICAgaWYgKHR5cGVvZiBib29sZWFuID09PSBcImJvb2xlYW5cIikge1xuICAgICAgYWxsQm9vbHMgPSBib29sZWFuO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib29sZWFuQXJncyA9IEFycmF5LmlzQXJyYXkoYm9vbGVhbikgPyBib29sZWFuIDogW2Jvb2xlYW5dO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgYm9vbGVhbkFyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7XG4gICAgICAgIGJvb2xlYW5TZXQuYWRkKGtleSk7XG4gICAgICAgIGFsaWFzTWFwLmdldChrZXkpPy5mb3JFYWNoKChhbCkgPT4ge1xuICAgICAgICAgIGJvb2xlYW5TZXQuYWRkKGFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0cmluZykge1xuICAgIGNvbnN0IHN0cmluZ0FyZ3MgPSBBcnJheS5pc0FycmF5KHN0cmluZykgPyBzdHJpbmcgOiBbc3RyaW5nXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzdHJpbmdBcmdzLmZpbHRlcihCb29sZWFuKSkge1xuICAgICAgc3RyaW5nU2V0LmFkZChrZXkpO1xuICAgICAgYWxpYXNNYXAuZ2V0KGtleSk/LmZvckVhY2goKGFsKSA9PiBzdHJpbmdTZXQuYWRkKGFsKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbGxlY3QpIHtcbiAgICBjb25zdCBjb2xsZWN0QXJncyA9IEFycmF5LmlzQXJyYXkoY29sbGVjdCkgPyBjb2xsZWN0IDogW2NvbGxlY3RdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbGxlY3RBcmdzLmZpbHRlcihCb29sZWFuKSkge1xuICAgICAgY29sbGVjdFNldC5hZGQoa2V5KTtcbiAgICAgIGFsaWFzTWFwLmdldChrZXkpPy5mb3JFYWNoKChhbCkgPT4gY29sbGVjdFNldC5hZGQoYWwpKTtcbiAgICB9XG4gIH1cblxuICBpZiAobmVnYXRhYmxlKSB7XG4gICAgY29uc3QgbmVnYXRhYmxlQXJncyA9IEFycmF5LmlzQXJyYXkobmVnYXRhYmxlKSA/IG5lZ2F0YWJsZSA6IFtuZWdhdGFibGVdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIG5lZ2F0YWJsZUFyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7XG4gICAgICBuZWdhdGFibGVTZXQuYWRkKGtleSk7XG4gICAgICBhbGlhc01hcC5nZXQoa2V5KT8uZm9yRWFjaCgoYWxpYXMpID0+IG5lZ2F0YWJsZVNldC5hZGQoYWxpYXMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhcmd2OiBBcmdzID0geyBfOiBbXSB9O1xuXG4gIGZ1bmN0aW9uIHNldEFyZ3VtZW50KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuLFxuICAgIGFyZzogc3RyaW5nLFxuICAgIGNvbGxlY3Q6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmIChcbiAgICAgICFib29sZWFuU2V0LmhhcyhrZXkpICYmXG4gICAgICAhc3RyaW5nU2V0LmhhcyhrZXkpICYmXG4gICAgICAhYWxpYXNNYXAuaGFzKGtleSkgJiZcbiAgICAgICEoYWxsQm9vbHMgJiYgRkxBR19OQU1FX1JFR0VYUC50ZXN0KGFyZykpICYmXG4gICAgICB1bmtub3duRm4/LihhcmcsIGtleSwgdmFsdWUpID09PSBmYWxzZVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXN0cmluZ1NldC5oYXMoa2V5KSkge1xuICAgICAgdmFsdWUgPSBpc051bWJlcih2YWx1ZSkgPyBOdW1iZXIodmFsdWUpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGFibGUgPSBjb2xsZWN0ICYmIGNvbGxlY3RTZXQuaGFzKGtleSk7XG4gICAgc2V0TmVzdGVkKGFyZ3YsIGtleS5zcGxpdChcIi5cIiksIHZhbHVlLCBjb2xsZWN0YWJsZSk7XG4gICAgYWxpYXNNYXAuZ2V0KGtleSk/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgc2V0TmVzdGVkKGFyZ3YsIGtleS5zcGxpdChcIi5cIiksIHZhbHVlLCBjb2xsZWN0YWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICBsZXQgbm90RmxhZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gYWxsIGFyZ3MgYWZ0ZXIgXCItLVwiIGFyZSBub3QgcGFyc2VkXG4gIGNvbnN0IGluZGV4ID0gYXJncy5pbmRleE9mKFwiLS1cIik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBub3RGbGFncyA9IGFyZ3Muc2xpY2UoaW5kZXggKyAxKTtcbiAgICBhcmdzID0gYXJncy5zbGljZSgwLCBpbmRleCk7XG4gIH1cblxuICBhcmdzTG9vcDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpXSE7XG5cbiAgICBjb25zdCBncm91cHMgPSBhcmcubWF0Y2goRkxBR19SRUdFWFApPy5ncm91cHM7XG5cbiAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICBjb25zdCB7IGRvdWJsZURhc2gsIG5lZ2F0ZWQgfSA9IGdyb3VwcztcbiAgICAgIGxldCBrZXkgPSBncm91cHMua2V5ITtcbiAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGdyb3Vwcy52YWx1ZTtcblxuICAgICAgaWYgKGRvdWJsZURhc2gpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGJvb2xlYW5TZXQuaGFzKGtleSkpIHZhbHVlID0gcGFyc2VCb29sZWFuU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICBzZXRBcmd1bWVudChrZXksIHZhbHVlLCBhcmcsIHRydWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lZ2F0ZWQpIHtcbiAgICAgICAgICBpZiAobmVnYXRhYmxlU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBzZXRBcmd1bWVudChrZXksIGZhbHNlLCBhcmcsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXkgPSBgbm8tJHtrZXl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5leHQgPSBhcmdzW2kgKyAxXTtcblxuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFib29sZWFuU2V0LmhhcyhrZXkpICYmXG4gICAgICAgICAgICAhYWxsQm9vbHMgJiZcbiAgICAgICAgICAgICFuZXh0LnN0YXJ0c1dpdGgoXCItXCIpICYmXG4gICAgICAgICAgICAoIWFsaWFzTWFwLmhhcyhrZXkpIHx8ICFhbGlhc0lzQm9vbGVhbihhbGlhc01hcCwgYm9vbGVhblNldCwga2V5KSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlID0gbmV4dDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIHNldEFyZ3VtZW50KGtleSwgdmFsdWUsIGFyZywgdHJ1ZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNCb29sZWFuU3RyaW5nKG5leHQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQm9vbGVhblN0cmluZyhuZXh0KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIHNldEFyZ3VtZW50KGtleSwgdmFsdWUsIGFyZywgdHJ1ZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHN0cmluZ1NldC5oYXMoa2V5KSA/IFwiXCIgOiB0cnVlO1xuICAgICAgICBzZXRBcmd1bWVudChrZXksIHZhbHVlLCBhcmcsIHRydWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxldHRlcnMgPSBhcmcuc2xpY2UoMSwgLTEpLnNwbGl0KFwiXCIpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtqLCBsZXR0ZXJdIG9mIGxldHRlcnMuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuXG4gICAgICAgIGlmIChuZXh0ID09PSBcIi1cIikge1xuICAgICAgICAgIHNldEFyZ3VtZW50KGxldHRlciwgbmV4dCwgYXJnLCB0cnVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChMRVRURVJfUkVHRVhQLnRlc3QobGV0dGVyKSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IFZBTFVFX1JFR0VYUC5leGVjKG5leHQpPy5ncm91cHM7XG4gICAgICAgICAgaWYgKGdyb3Vwcykge1xuICAgICAgICAgICAgc2V0QXJndW1lbnQobGV0dGVyLCBncm91cHMudmFsdWUhLCBhcmcsIHRydWUpO1xuICAgICAgICAgICAgY29udGludWUgYXJnc0xvb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChOVU1CRVJfUkVHRVhQLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgIHNldEFyZ3VtZW50KGxldHRlciwgbmV4dCwgYXJnLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIGFyZ3NMb29wO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXT8ubWF0Y2goU1BFQ0lBTF9DSEFSX1JFR0VYUCkpIHtcbiAgICAgICAgICBzZXRBcmd1bWVudChsZXR0ZXIsIGFyZy5zbGljZShqICsgMiksIGFyZywgdHJ1ZSk7XG4gICAgICAgICAgY29udGludWUgYXJnc0xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QXJndW1lbnQobGV0dGVyLCBzdHJpbmdTZXQuaGFzKGxldHRlcikgPyBcIlwiIDogdHJ1ZSwgYXJnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gYXJnLnNsaWNlKC0xKTtcbiAgICAgIGlmIChrZXkgPT09IFwiLVwiKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgbmV4dEFyZyA9IGFyZ3NbaSArIDFdO1xuXG4gICAgICBpZiAobmV4dEFyZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIUhZUEhFTl9SRUdFWFAudGVzdChuZXh0QXJnKSAmJlxuICAgICAgICAgICFib29sZWFuU2V0LmhhcyhrZXkpICYmXG4gICAgICAgICAgKCFhbGlhc01hcC5oYXMoa2V5KSB8fCAhYWxpYXNJc0Jvb2xlYW4oYWxpYXNNYXAsIGJvb2xlYW5TZXQsIGtleSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNldEFyZ3VtZW50KGtleSwgbmV4dEFyZywgYXJnLCB0cnVlKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQm9vbGVhblN0cmluZyhuZXh0QXJnKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VCb29sZWFuU3RyaW5nKG5leHRBcmcpO1xuICAgICAgICAgIHNldEFyZ3VtZW50KGtleSwgdmFsdWUsIGFyZywgdHJ1ZSk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRBcmd1bWVudChrZXksIHN0cmluZ1NldC5oYXMoa2V5KSA/IFwiXCIgOiB0cnVlLCBhcmcsIHRydWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHVua25vd25Gbj8uKGFyZykgIT09IGZhbHNlKSB7XG4gICAgICBhcmd2Ll8ucHVzaChcbiAgICAgICAgc3RyaW5nU2V0LmhhcyhcIl9cIikgfHwgIWlzTnVtYmVyKGFyZykgPyBhcmcgOiBOdW1iZXIoYXJnKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0b3BFYXJseSkge1xuICAgICAgYXJndi5fLnB1c2goLi4uYXJncy5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdChcIi5cIik7XG4gICAgaWYgKCFoYXNOZXN0ZWQoYXJndiwga2V5cykpIHtcbiAgICAgIHNldE5lc3RlZChhcmd2LCBrZXlzLCB2YWx1ZSk7XG4gICAgICBhbGlhc01hcC5nZXQoa2V5KT8uZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgICBzZXROZXN0ZWQoYXJndiwga2V5LnNwbGl0KFwiLlwiKSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIGJvb2xlYW5TZXQua2V5cygpKSB7XG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdChcIi5cIik7XG4gICAgaWYgKCFoYXNOZXN0ZWQoYXJndiwga2V5cykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sbGVjdFNldC5oYXMoa2V5KSA/IFtdIDogZmFsc2U7XG4gICAgICBzZXROZXN0ZWQoYXJndiwga2V5cywgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHN0cmluZ1NldC5rZXlzKCkpIHtcbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgICBpZiAoIWhhc05lc3RlZChhcmd2LCBrZXlzKSAmJiBjb2xsZWN0U2V0LmhhcyhrZXkpKSB7XG4gICAgICBzZXROZXN0ZWQoYXJndiwga2V5cywgW10pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkb3VibGVEYXNoKSB7XG4gICAgYXJndltcIi0tXCJdID0gbm90RmxhZ3M7XG4gIH0gZWxzZSB7XG4gICAgYXJndi5fLnB1c2goLi4ubm90RmxhZ3MpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3YgYXMgQXJnczxUQXJncywgVERvdWJsZURhc2g+O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzRUMsR0FFRDs7Q0FFQyxHQTZWRCxNQUFNLGNBQ0o7QUFDRixNQUFNLGdCQUFnQjtBQUN0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
+// denoCacheMetadata=1538534168740573838,12750787570628016402 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/31939e2cd228e73559ef4bbb0326c7947aed6a713c2912b95ef2a0f25458dffd.js b/vendor/gen/https/jsr.io/31939e2cd228e73559ef4bbb0326c7947aed6a713c2912b95ef2a0f25458dffd.js
new file mode 100644
index 0000000..342ea10
--- /dev/null
+++ b/vendor/gen/https/jsr.io/31939e2cd228e73559ef4bbb0326c7947aed6a713c2912b95ef2a0f25458dffd.js
@@ -0,0 +1,116 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { consumeMediaParam, decode2331Encoding } from "./_util.ts";
+const SEMICOLON_REGEXP = /^\s*;\s*$/;
+/**
+ * Parses the media type and any optional parameters, per
+ * {@link https://www.rfc-editor.org/rfc/rfc1521.html | RFC 1521}.
+ *
+ * Media types are the values in `Content-Type` and `Content-Disposition`
+ * headers. On success the function returns a tuple where the first element is
+ * the media type and the second element is the optional parameters or
+ * `undefined` if there are none.
+ *
+ * The function will throw if the parsed value is invalid.
+ *
+ * The returned media type will be normalized to be lower case, and returned
+ * params keys will be normalized to lower case, but preserves the casing of
+ * the value.
+ *
+ * @param type The media type to parse.
+ *
+ * @returns A tuple where the first element is the media type and the second
+ * element is the optional parameters or `undefined` if there are none.
+ *
+ * @example Usage
+ * ```ts
+ * import { parseMediaType } from "@std/media-types/parse-media-type";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(parseMediaType("application/JSON"), ["application/json", undefined]);
+ * assertEquals(parseMediaType("text/html; charset=UTF-8"), ["text/html", { charset: "UTF-8" }]);
+ * ```
+ */ export function parseMediaType(type) {
+ const [base] = type.split(";");
+ const mediaType = base.toLowerCase().trim();
+ const params = {};
+ // Map of base parameter name -> parameter name -> value
+ // for parameters containing a '*' character.
+ const continuation = new Map();
+ type = type.slice(base.length);
+ while(type.length){
+ type = type.trimStart();
+ if (type.length === 0) {
+ break;
+ }
+ const [key, value, rest] = consumeMediaParam(type);
+ if (!key) {
+ if (SEMICOLON_REGEXP.test(rest)) {
+ break;
+ }
+ throw new TypeError(`Cannot parse media type: invalid parameter "${type}"`);
+ }
+ let pmap = params;
+ const [baseName, rest2] = key.split("*");
+ if (baseName && rest2 !== undefined) {
+ if (!continuation.has(baseName)) {
+ continuation.set(baseName, {});
+ }
+ pmap = continuation.get(baseName);
+ }
+ if (key in pmap) {
+ throw new TypeError("Cannot parse media type: duplicate key");
+ }
+ pmap[key] = value;
+ type = rest;
+ }
+ // Stitch together any continuations or things with stars
+ // (i.e. RFC 2231 things with stars: "foo*0" or "foo*")
+ let str = "";
+ for (const [key, pieceMap] of continuation){
+ const singlePartKey = `${key}*`;
+ const type = pieceMap[singlePartKey];
+ if (type) {
+ const decv = decode2331Encoding(type);
+ if (decv) {
+ params[key] = decv;
+ }
+ continue;
+ }
+ str = "";
+ let valid = false;
+ for(let n = 0;; n++){
+ const simplePart = `${key}*${n}`;
+ let type = pieceMap[simplePart];
+ if (type) {
+ valid = true;
+ str += type;
+ continue;
+ }
+ const encodedPart = `${simplePart}*`;
+ type = pieceMap[encodedPart];
+ if (!type) {
+ break;
+ }
+ valid = true;
+ if (n === 0) {
+ const decv = decode2331Encoding(type);
+ if (decv) {
+ str += decv;
+ }
+ } else {
+ const decv = decodeURI(type);
+ str += decv;
+ }
+ }
+ if (valid) {
+ params[key] = str;
+ }
+ }
+ return [
+ mediaType,
+ Object.keys(params).length ? params : undefined
+ ];
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvcGFyc2VfbWVkaWFfdHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBjb25zdW1lTWVkaWFQYXJhbSwgZGVjb2RlMjMzMUVuY29kaW5nIH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuY29uc3QgU0VNSUNPTE9OX1JFR0VYUCA9IC9eXFxzKjtcXHMqJC87XG4vKipcbiAqIFBhcnNlcyB0aGUgbWVkaWEgdHlwZSBhbmQgYW55IG9wdGlvbmFsIHBhcmFtZXRlcnMsIHBlclxuICoge0BsaW5rIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxNTIxLmh0bWwgfCBSRkMgMTUyMX0uXG4gKlxuICogTWVkaWEgdHlwZXMgYXJlIHRoZSB2YWx1ZXMgaW4gYENvbnRlbnQtVHlwZWAgYW5kIGBDb250ZW50LURpc3Bvc2l0aW9uYFxuICogaGVhZGVycy4gT24gc3VjY2VzcyB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHR1cGxlIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50IGlzXG4gKiB0aGUgbWVkaWEgdHlwZSBhbmQgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzIG9yXG4gKiBgdW5kZWZpbmVkYCBpZiB0aGVyZSBhcmUgbm9uZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gd2lsbCB0aHJvdyBpZiB0aGUgcGFyc2VkIHZhbHVlIGlzIGludmFsaWQuXG4gKlxuICogVGhlIHJldHVybmVkIG1lZGlhIHR5cGUgd2lsbCBiZSBub3JtYWxpemVkIHRvIGJlIGxvd2VyIGNhc2UsIGFuZCByZXR1cm5lZFxuICogcGFyYW1zIGtleXMgd2lsbCBiZSBub3JtYWxpemVkIHRvIGxvd2VyIGNhc2UsIGJ1dCBwcmVzZXJ2ZXMgdGhlIGNhc2luZyBvZlxuICogdGhlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0eXBlIFRoZSBtZWRpYSB0eXBlIHRvIHBhcnNlLlxuICpcbiAqIEByZXR1cm5zIEEgdHVwbGUgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG1lZGlhIHR5cGUgYW5kIHRoZSBzZWNvbmRcbiAqIGVsZW1lbnQgaXMgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgb3IgYHVuZGVmaW5lZGAgaWYgdGhlcmUgYXJlIG5vbmUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZU1lZGlhVHlwZSB9IGZyb20gXCJAc3RkL21lZGlhLXR5cGVzL3BhcnNlLW1lZGlhLXR5cGVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhwYXJzZU1lZGlhVHlwZShcImFwcGxpY2F0aW9uL0pTT05cIiksIFtcImFwcGxpY2F0aW9uL2pzb25cIiwgdW5kZWZpbmVkXSk7XG4gKiBhc3NlcnRFcXVhbHMocGFyc2VNZWRpYVR5cGUoXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIiksIFtcInRleHQvaHRtbFwiLCB7IGNoYXJzZXQ6IFwiVVRGLThcIiB9XSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVkaWFUeXBlKFxuICB0eXBlOiBzdHJpbmcsXG4pOiBbbWVkaWFUeXBlOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZF0ge1xuICBjb25zdCBbYmFzZV0gPSB0eXBlLnNwbGl0KFwiO1wiKSBhcyBbc3RyaW5nXTtcbiAgY29uc3QgbWVkaWFUeXBlID0gYmFzZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgLy8gTWFwIG9mIGJhc2UgcGFyYW1ldGVyIG5hbWUgLT4gcGFyYW1ldGVyIG5hbWUgLT4gdmFsdWVcbiAgLy8gZm9yIHBhcmFtZXRlcnMgY29udGFpbmluZyBhICcqJyBjaGFyYWN0ZXIuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpO1xuXG4gIHR5cGUgPSB0eXBlLnNsaWNlKGJhc2UubGVuZ3RoKTtcbiAgd2hpbGUgKHR5cGUubGVuZ3RoKSB7XG4gICAgdHlwZSA9IHR5cGUudHJpbVN0YXJ0KCk7XG4gICAgaWYgKHR5cGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgW2tleSwgdmFsdWUsIHJlc3RdID0gY29uc3VtZU1lZGlhUGFyYW0odHlwZSk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIGlmIChTRU1JQ09MT05fUkVHRVhQLnRlc3QocmVzdCkpIHtcbiAgICAgICAgLy8gaWdub3JlIHRyYWlsaW5nIHNlbWljb2xvbnNcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgQ2Fubm90IHBhcnNlIG1lZGlhIHR5cGU6IGludmFsaWQgcGFyYW1ldGVyIFwiJHt0eXBlfVwiYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHBtYXAgPSBwYXJhbXM7XG4gICAgY29uc3QgW2Jhc2VOYW1lLCByZXN0Ml0gPSBrZXkuc3BsaXQoXCIqXCIpO1xuICAgIGlmIChiYXNlTmFtZSAmJiByZXN0MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWNvbnRpbnVhdGlvbi5oYXMoYmFzZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVhdGlvbi5zZXQoYmFzZU5hbWUsIHt9KTtcbiAgICAgIH1cbiAgICAgIHBtYXAgPSBjb250aW51YXRpb24uZ2V0KGJhc2VOYW1lKSE7XG4gICAgfVxuICAgIGlmIChrZXkgaW4gcG1hcCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBwYXJzZSBtZWRpYSB0eXBlOiBkdXBsaWNhdGUga2V5XCIpO1xuICAgIH1cbiAgICBwbWFwW2tleV0gPSB2YWx1ZTtcbiAgICB0eXBlID0gcmVzdDtcbiAgfVxuXG4gIC8vIFN0aXRjaCB0b2dldGhlciBhbnkgY29udGludWF0aW9ucyBvciB0aGluZ3Mgd2l0aCBzdGFyc1xuICAvLyAoaS5lLiBSRkMgMjIzMSB0aGluZ3Mgd2l0aCBzdGFyczogXCJmb28qMFwiIG9yIFwiZm9vKlwiKVxuICBsZXQgc3RyID0gXCJcIjtcbiAgZm9yIChjb25zdCBba2V5LCBwaWVjZU1hcF0gb2YgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc2luZ2xlUGFydEtleSA9IGAke2tleX0qYDtcbiAgICBjb25zdCB0eXBlID0gcGllY2VNYXBbc2luZ2xlUGFydEtleV07XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGNvbnN0IGRlY3YgPSBkZWNvZGUyMzMxRW5jb2RpbmcodHlwZSk7XG4gICAgICBpZiAoZGVjdikge1xuICAgICAgICBwYXJhbXNba2V5XSA9IGRlY3Y7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzdHIgPSBcIlwiO1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IG4gPSAwOzsgbisrKSB7XG4gICAgICBjb25zdCBzaW1wbGVQYXJ0ID0gYCR7a2V5fSoke259YDtcbiAgICAgIGxldCB0eXBlID0gcGllY2VNYXBbc2ltcGxlUGFydF07XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgIHN0ciArPSB0eXBlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVuY29kZWRQYXJ0ID0gYCR7c2ltcGxlUGFydH0qYDtcbiAgICAgIHR5cGUgPSBwaWVjZU1hcFtlbmNvZGVkUGFydF07XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YWxpZCA9IHRydWU7XG4gICAgICBpZiAobiA9PT0gMCkge1xuICAgICAgICBjb25zdCBkZWN2ID0gZGVjb2RlMjMzMUVuY29kaW5nKHR5cGUpO1xuICAgICAgICBpZiAoZGVjdikge1xuICAgICAgICAgIHN0ciArPSBkZWN2O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZWN2ID0gZGVjb2RlVVJJKHR5cGUpO1xuICAgICAgICBzdHIgKz0gZGVjdjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICBwYXJhbXNba2V5XSA9IHN0cjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW21lZGlhVHlwZSwgT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPyBwYXJhbXMgOiB1bmRlZmluZWRdO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxpQkFBaUIsRUFBRSxrQkFBa0IsUUFBUSxhQUFhO0FBRW5FLE1BQU0sbUJBQW1CO0FBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJDLEdBQ0QsT0FBTyxTQUFTLGVBQ2QsSUFBWTtFQUVaLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUM7RUFDMUIsTUFBTSxZQUFZLEtBQUssV0FBVyxHQUFHLElBQUk7RUFFekMsTUFBTSxTQUFpQyxDQUFDO0VBQ3hDLHdEQUF3RDtFQUN4RCw2Q0FBNkM7RUFDN0MsTUFBTSxlQUFlLElBQUk7RUFFekIsT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLE1BQU07RUFDN0IsTUFBTyxLQUFLLE1BQU0sQ0FBRTtJQUNsQixPQUFPLEtBQUssU0FBUztJQUNyQixJQUFJLEtBQUssTUFBTSxLQUFLLEdBQUc7TUFDckI7SUFDRjtJQUNBLE1BQU0sQ0FBQyxLQUFLLE9BQU8sS0FBSyxHQUFHLGtCQUFrQjtJQUM3QyxJQUFJLENBQUMsS0FBSztNQUNSLElBQUksaUJBQWlCLElBQUksQ0FBQyxPQUFPO1FBRS9CO01BQ0Y7TUFDQSxNQUFNLElBQUksVUFDUixDQUFDLDRDQUE0QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFEO0lBRUEsSUFBSSxPQUFPO0lBQ1gsTUFBTSxDQUFDLFVBQVUsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDO0lBQ3BDLElBQUksWUFBWSxVQUFVLFdBQVc7TUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLFdBQVc7UUFDL0IsYUFBYSxHQUFHLENBQUMsVUFBVSxDQUFDO01BQzlCO01BQ0EsT0FBTyxhQUFhLEdBQUcsQ0FBQztJQUMxQjtJQUNBLElBQUksT0FBTyxNQUFNO01BQ2YsTUFBTSxJQUFJLFVBQVU7SUFDdEI7SUFDQSxJQUFJLENBQUMsSUFBSSxHQUFHO0lBQ1osT0FBTztFQUNUO0VBRUEseURBQXlEO0VBQ3pELHVEQUF1RDtFQUN2RCxJQUFJLE1BQU07RUFDVixLQUFLLE1BQU0sQ0FBQyxLQUFLLFNBQVMsSUFBSSxhQUFjO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0IsTUFBTSxPQUFPLFFBQVEsQ0FBQyxjQUFjO0lBQ3BDLElBQUksTUFBTTtNQUNSLE1BQU0sT0FBTyxtQkFBbUI7TUFDaEMsSUFBSSxNQUFNO1FBQ1IsTUFBTSxDQUFDLElBQUksR0FBRztNQUNoQjtNQUNBO0lBQ0Y7SUFFQSxNQUFNO0lBQ04sSUFBSSxRQUFRO0lBQ1osSUFBSyxJQUFJLElBQUksSUFBSSxJQUFLO01BQ3BCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUc7TUFDaEMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxXQUFXO01BQy9CLElBQUksTUFBTTtRQUNSLFFBQVE7UUFDUixPQUFPO1FBQ1A7TUFDRjtNQUNBLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sUUFBUSxDQUFDLFlBQVk7TUFDNUIsSUFBSSxDQUFDLE1BQU07UUFDVDtNQUNGO01BQ0EsUUFBUTtNQUNSLElBQUksTUFBTSxHQUFHO1FBQ1gsTUFBTSxPQUFPLG1CQUFtQjtRQUNoQyxJQUFJLE1BQU07VUFDUixPQUFPO1FBQ1Q7TUFDRixPQUFPO1FBQ0wsTUFBTSxPQUFPLFVBQVU7UUFDdkIsT0FBTztNQUNUO0lBQ0Y7SUFDQSxJQUFJLE9BQU87TUFDVCxNQUFNLENBQUMsSUFBSSxHQUFHO0lBQ2hCO0VBQ0Y7RUFFQSxPQUFPO0lBQUM7SUFBVyxPQUFPLElBQUksQ0FBQyxRQUFRLE1BQU0sR0FBRyxTQUFTO0dBQVU7QUFDckUifQ==
+// denoCacheMetadata=14583914334536755551,10270602117427477876 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/324c04d0a020b457392045ccecba780e08b6ce8431d068879ec2f485ca92d07a.js b/vendor/gen/https/jsr.io/324c04d0a020b457392045ccecba780e08b6ce8431d068879ec2f485ca92d07a.js
new file mode 100644
index 0000000..38f9f2a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/324c04d0a020b457392045ccecba780e08b6ce8431d068879ec2f485ca92d07a.js
@@ -0,0 +1,87 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { dirname } from "jsr:@std/path@^1.0.9/dirname";
+import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
+import { getFileInfoType } from "./_get_file_info_type.ts";
+import { toPathString } from "./_to_path_string.ts";
+/**
+ * Asynchronously ensures that the file exists.
+ *
+ * If the file already exists, this function does nothing. If the parent
+ * directories for the file do not exist, they are created.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param filePath The path of the file to ensure, as a string or URL.
+ *
+ * @returns A void promise that resolves once the file exists.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { ensureFile } from "@std/fs/ensure-file";
+ *
+ * await ensureFile("./folder/targetFile.dat");
+ * ```
+ */ export async function ensureFile(filePath) {
+ try {
+ // if file exists
+ const stat = await Deno.lstat(filePath);
+ if (!stat.isFile) {
+ throw new Error(`Failed to ensure file exists: expected 'file', got '${getFileInfoType(stat)}'`);
+ }
+ } catch (err) {
+ // if file not exists
+ if (err instanceof Deno.errors.NotFound) {
+ // ensure dir exists
+ await ensureDir(dirname(toPathString(filePath)));
+ // create file
+ await Deno.writeFile(filePath, new Uint8Array());
+ return;
+ }
+ throw err;
+ }
+}
+/**
+ * Synchronously ensures that the file exists.
+ *
+ * If the file already exists, this function does nothing. If the parent
+ * directories for the file do not exist, they are created.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param filePath The path of the file to ensure, as a string or URL.
+ *
+ * @returns A void value that returns once the file exists.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { ensureFileSync } from "@std/fs/ensure-file";
+ *
+ * ensureFileSync("./folder/targetFile.dat");
+ * ```
+ */ export function ensureFileSync(filePath) {
+ try {
+ // if file exists
+ const stat = Deno.lstatSync(filePath);
+ if (!stat.isFile) {
+ throw new Error(`Failed to ensure file exists: expected 'file', got '${getFileInfoType(stat)}'`);
+ }
+ } catch (err) {
+ // if file not exists
+ if (err instanceof Deno.errors.NotFound) {
+ // ensure dir exists
+ ensureDirSync(dirname(toPathString(filePath)));
+ // create file
+ Deno.writeFileSync(filePath, new Uint8Array());
+ return;
+ }
+ throw err;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2Vuc3VyZV9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC45L2Rpcm5hbWVcIjtcbmltcG9ydCB7IGVuc3VyZURpciwgZW5zdXJlRGlyU3luYyB9IGZyb20gXCIuL2Vuc3VyZV9kaXIudHNcIjtcbmltcG9ydCB7IGdldEZpbGVJbmZvVHlwZSB9IGZyb20gXCIuL19nZXRfZmlsZV9pbmZvX3R5cGUudHNcIjtcbmltcG9ydCB7IHRvUGF0aFN0cmluZyB9IGZyb20gXCIuL190b19wYXRoX3N0cmluZy50c1wiO1xuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IGVuc3VyZXMgdGhhdCB0aGUgZmlsZSBleGlzdHMuXG4gKlxuICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiBJZiB0aGUgcGFyZW50XG4gKiBkaXJlY3RvcmllcyBmb3IgdGhlIGZpbGUgZG8gbm90IGV4aXN0LCB0aGV5IGFyZSBjcmVhdGVkLlxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXJlYWRgIGFuZCBgLS1hbGxvdy13cml0ZWAgcGVybWlzc2lvbnMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL3J1bnRpbWUvbWFudWFsL2Jhc2ljcy9wZXJtaXNzaW9ucyNmaWxlLXN5c3RlbS1hY2Nlc3N9XG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEZW5vJ3MgcGVybWlzc2lvbnMgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aCBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBlbnN1cmUsIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqXG4gKiBAcmV0dXJucyBBIHZvaWQgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGZpbGUgZXhpc3RzLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGVuc3VyZUZpbGUgfSBmcm9tIFwiQHN0ZC9mcy9lbnN1cmUtZmlsZVwiO1xuICpcbiAqIGF3YWl0IGVuc3VyZUZpbGUoXCIuL2ZvbGRlci90YXJnZXRGaWxlLmRhdFwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRmlsZShmaWxlUGF0aDogc3RyaW5nIHwgVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgLy8gaWYgZmlsZSBleGlzdHNcbiAgICBjb25zdCBzdGF0ID0gYXdhaXQgRGVuby5sc3RhdChmaWxlUGF0aCk7XG4gICAgaWYgKCFzdGF0LmlzRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGVuc3VyZSBmaWxlIGV4aXN0czogZXhwZWN0ZWQgJ2ZpbGUnLCBnb3QgJyR7XG4gICAgICAgICAgZ2V0RmlsZUluZm9UeXBlKHN0YXQpXG4gICAgICAgIH0nYCxcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZiBmaWxlIG5vdCBleGlzdHNcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpIHtcbiAgICAgIC8vIGVuc3VyZSBkaXIgZXhpc3RzXG4gICAgICBhd2FpdCBlbnN1cmVEaXIoZGlybmFtZSh0b1BhdGhTdHJpbmcoZmlsZVBhdGgpKSk7XG4gICAgICAvLyBjcmVhdGUgZmlsZVxuICAgICAgYXdhaXQgRGVuby53cml0ZUZpbGUoZmlsZVBhdGgsIG5ldyBVaW50OEFycmF5KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIFN5bmNocm9ub3VzbHkgZW5zdXJlcyB0aGF0IHRoZSBmaWxlIGV4aXN0cy5cbiAqXG4gKiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIElmIHRoZSBwYXJlbnRcbiAqIGRpcmVjdG9yaWVzIGZvciB0aGUgZmlsZSBkbyBub3QgZXhpc3QsIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctcmVhZGAgYW5kIGAtLWFsbG93LXdyaXRlYCBwZXJtaXNzaW9ucy5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGVuc3VyZSwgYXMgYSBzdHJpbmcgb3IgVVJMLlxuICpcbiAqIEByZXR1cm5zIEEgdm9pZCB2YWx1ZSB0aGF0IHJldHVybnMgb25jZSB0aGUgZmlsZSBleGlzdHMuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZW5zdXJlRmlsZVN5bmMgfSBmcm9tIFwiQHN0ZC9mcy9lbnN1cmUtZmlsZVwiO1xuICpcbiAqIGVuc3VyZUZpbGVTeW5jKFwiLi9mb2xkZXIvdGFyZ2V0RmlsZS5kYXRcIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUZpbGVTeW5jKGZpbGVQYXRoOiBzdHJpbmcgfCBVUkwpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICAvLyBpZiBmaWxlIGV4aXN0c1xuICAgIGNvbnN0IHN0YXQgPSBEZW5vLmxzdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgaWYgKCFzdGF0LmlzRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGVuc3VyZSBmaWxlIGV4aXN0czogZXhwZWN0ZWQgJ2ZpbGUnLCBnb3QgJyR7XG4gICAgICAgICAgZ2V0RmlsZUluZm9UeXBlKHN0YXQpXG4gICAgICAgIH0nYCxcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZiBmaWxlIG5vdCBleGlzdHNcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpIHtcbiAgICAgIC8vIGVuc3VyZSBkaXIgZXhpc3RzXG4gICAgICBlbnN1cmVEaXJTeW5jKGRpcm5hbWUodG9QYXRoU3RyaW5nKGZpbGVQYXRoKSkpO1xuICAgICAgLy8gY3JlYXRlIGZpbGVcbiAgICAgIERlbm8ud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgbmV3IFVpbnQ4QXJyYXkoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxTQUFTLE9BQU8sUUFBUSwrQkFBK0I7QUFDdkQsU0FBUyxTQUFTLEVBQUUsYUFBYSxRQUFRLGtCQUFrQjtBQUMzRCxTQUFTLGVBQWUsUUFBUSwyQkFBMkI7QUFDM0QsU0FBUyxZQUFZLFFBQVEsdUJBQXVCO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQkMsR0FDRCxPQUFPLGVBQWUsV0FBVyxRQUFzQjtFQUNyRCxJQUFJO0lBQ0YsaUJBQWlCO0lBQ2pCLE1BQU0sT0FBTyxNQUFNLEtBQUssS0FBSyxDQUFDO0lBQzlCLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRTtNQUNoQixNQUFNLElBQUksTUFDUixDQUFDLG9EQUFvRCxFQUNuRCxnQkFBZ0IsTUFDakIsQ0FBQyxDQUFDO0lBRVA7RUFDRixFQUFFLE9BQU8sS0FBSztJQUNaLHFCQUFxQjtJQUNyQixJQUFJLGVBQWUsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFO01BQ3ZDLG9CQUFvQjtNQUNwQixNQUFNLFVBQVUsUUFBUSxhQUFhO01BQ3JDLGNBQWM7TUFDZCxNQUFNLEtBQUssU0FBUyxDQUFDLFVBQVUsSUFBSTtNQUNuQztJQUNGO0lBRUEsTUFBTTtFQUNSO0FBQ0Y7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUJDLEdBQ0QsT0FBTyxTQUFTLGVBQWUsUUFBc0I7RUFDbkQsSUFBSTtJQUNGLGlCQUFpQjtJQUNqQixNQUFNLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDNUIsSUFBSSxDQUFDLEtBQUssTUFBTSxFQUFFO01BQ2hCLE1BQU0sSUFBSSxNQUNSLENBQUMsb0RBQW9ELEVBQ25ELGdCQUFnQixNQUNqQixDQUFDLENBQUM7SUFFUDtFQUNGLEVBQUUsT0FBTyxLQUFLO0lBQ1oscUJBQXFCO0lBQ3JCLElBQUksZUFBZSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUU7TUFDdkMsb0JBQW9CO01BQ3BCLGNBQWMsUUFBUSxhQUFhO01BQ25DLGNBQWM7TUFDZCxLQUFLLGFBQWEsQ0FBQyxVQUFVLElBQUk7TUFDakM7SUFDRjtJQUNBLE1BQU07RUFDUjtBQUNGIn0=
+// denoCacheMetadata=520030122213968241,18162067301607644311 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/34b12cbddc84ee767c60b6bf1bae25087bac28cf398f1b58fac7da0d61d62c65.js b/vendor/gen/https/jsr.io/34b12cbddc84ee767c60b6bf1bae25087bac28cf398f1b58fac7da0d61d62c65.js
new file mode 100644
index 0000000..5641fb0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/34b12cbddc84ee767c60b6bf1bae25087bac28cf398f1b58fac7da0d61d62c65.js
@@ -0,0 +1,16 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+/**
+ * The character used to separate entries in the PATH environment variable.
+ * On Windows, this is `;`. On all other platforms, this is `:`.
+ */ export const DELIMITER = isWindows ? ";" : ":";
+/**
+ * The character used to separate components of a file path.
+ * On Windows, this is `\`. On all other platforms, this is `/`.
+ */ export const SEPARATOR = isWindows ? "\\" : "/";
+/**
+ * A regular expression that matches one or more path separators.
+ */ export const SEPARATOR_PATTERN = isWindows ? /[\\/]+/ : /\/+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogT24gV2luZG93cywgdGhpcyBpcyBgO2AuIE9uIGFsbCBvdGhlciBwbGF0Zm9ybXMsIHRoaXMgaXMgYDpgLlxuICovXG5leHBvcnQgY29uc3QgREVMSU1JVEVSID0gaXNXaW5kb3dzID8gXCI7XCIgYXMgY29uc3QgOiBcIjpcIiBhcyBjb25zdDtcbi8qKlxuICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGNvbXBvbmVudHMgb2YgYSBmaWxlIHBhdGguXG4gKiBPbiBXaW5kb3dzLCB0aGlzIGlzIGBcXGAuIE9uIGFsbCBvdGhlciBwbGF0Zm9ybXMsIHRoaXMgaXMgYC9gLlxuICovXG5leHBvcnQgY29uc3QgU0VQQVJBVE9SID0gaXNXaW5kb3dzID8gXCJcXFxcXCIgYXMgY29uc3QgOiBcIi9cIiBhcyBjb25zdDtcbi8qKlxuICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIG9uZSBvciBtb3JlIHBhdGggc2VwYXJhdG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUEFSQVRPUl9QQVRURVJOID0gaXNXaW5kb3dzID8gL1tcXFxcL10rLyA6IC9cXC8rLztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBQ3JDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFFckM7OztDQUdDLEdBQ0QsT0FBTyxNQUFNLFlBQVksWUFBWSxNQUFlLElBQWE7QUFDakU7OztDQUdDLEdBQ0QsT0FBTyxNQUFNLFlBQVksWUFBWSxPQUFnQixJQUFhO0FBQ2xFOztDQUVDLEdBQ0QsT0FBTyxNQUFNLG9CQUFvQixZQUFZLFdBQVcsTUFBTSJ9
+// denoCacheMetadata=9336896581296612895,10686512189542040983 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/357a9ee9f8c9fb9c039a1be3630b0ebb48453dd6301220ff065cfb62b941b431.js b/vendor/gen/https/jsr.io/357a9ee9f8c9fb9c039a1be3630b0ebb48453dd6301220ff065cfb62b941b431.js
new file mode 100644
index 0000000..61c9022
--- /dev/null
+++ b/vendor/gen/https/jsr.io/357a9ee9f8c9fb9c039a1be3630b0ebb48453dd6301220ff065cfb62b941b431.js
@@ -0,0 +1,76 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Utilities for
+ * {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4 | base64}
+ * encoding and decoding.
+ *
+ * ```ts
+ * import {
+ * encodeBase64,
+ * decodeBase64,
+ * } from "@std/encoding/base64";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const foobar = new TextEncoder().encode("foobar");
+ *
+ * assertEquals(encodeBase64(foobar), "Zm9vYmFy");
+ * assertEquals(decodeBase64("Zm9vYmFy"), foobar);
+ * ```
+ *
+ * @module
+ */ import { calcSizeBase64, decode, encode } from "./_common64.ts";
+import { detach } from "./_common_detach.ts";
+const padding = "=".charCodeAt(0);
+const alphabet = new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
+const rAlphabet = new Uint8Array(128).fill(64); // alphabet.length
+alphabet.forEach((byte, i)=>rAlphabet[byte] = i);
+/**
+ * Converts data into a base64-encoded string.
+ *
+ * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4}
+ *
+ * @param data The data to encode.
+ * @returns The base64-encoded string.
+ *
+ * @example Usage
+ * ```ts
+ * import { encodeBase64 } from "@std/encoding/base64";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(encodeBase64("foobar"), "Zm9vYmFy");
+ * ```
+ */ export function encodeBase64(data) {
+ if (typeof data === "string") {
+ data = new TextEncoder().encode(data);
+ } else if (data instanceof ArrayBuffer) data = new Uint8Array(data).slice();
+ else data = data.slice();
+ const [output, i] = detach(data, calcSizeBase64(data.length));
+ encode(output, i, 0, alphabet, padding);
+ return new TextDecoder().decode(output);
+}
+/**
+ * Decodes a base64-encoded string.
+ *
+ * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4}
+ *
+ * @param b64 The base64-encoded string to decode.
+ * @returns The decoded data.
+ *
+ * @example Usage
+ * ```ts
+ * import { decodeBase64 } from "@std/encoding/base64";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(
+ * decodeBase64("Zm9vYmFy"),
+ * new TextEncoder().encode("foobar")
+ * );
+ * ```
+ */ export function decodeBase64(b64) {
+ const output = new TextEncoder().encode(b64);
+ // deno-lint-ignore no-explicit-any
+ return new Uint8Array(output.buffer.transfer(decode(output, 0, 0, rAlphabet, padding)));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL2Jhc2U2NC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIFV0aWxpdGllcyBmb3JcbiAqIHtAbGluayBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNDY0OC5odG1sI3NlY3Rpb24tNCB8IGJhc2U2NH1cbiAqIGVuY29kaW5nIGFuZCBkZWNvZGluZy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHtcbiAqICAgZW5jb2RlQmFzZTY0LFxuICogICBkZWNvZGVCYXNlNjQsXG4gKiB9IGZyb20gXCJAc3RkL2VuY29kaW5nL2Jhc2U2NFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgZm9vYmFyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiZm9vYmFyXCIpO1xuICpcbiAqIGFzc2VydEVxdWFscyhlbmNvZGVCYXNlNjQoZm9vYmFyKSwgXCJabTl2WW1GeVwiKTtcbiAqIGFzc2VydEVxdWFscyhkZWNvZGVCYXNlNjQoXCJabTl2WW1GeVwiKSwgZm9vYmFyKTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjYWxjU2l6ZUJhc2U2NCwgZGVjb2RlLCBlbmNvZGUgfSBmcm9tIFwiLi9fY29tbW9uNjQudHNcIjtcbmltcG9ydCB7IGRldGFjaCB9IGZyb20gXCIuL19jb21tb25fZGV0YWNoLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH07XG5cbmNvbnN0IHBhZGRpbmcgPSBcIj1cIi5jaGFyQ29kZUF0KDApO1xuY29uc3QgYWxwaGFiZXQgPSBuZXcgVGV4dEVuY29kZXIoKVxuICAuZW5jb2RlKFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiKTtcbmNvbnN0IHJBbHBoYWJldCA9IG5ldyBVaW50OEFycmF5KDEyOCkuZmlsbCg2NCk7IC8vIGFscGhhYmV0Lmxlbmd0aFxuYWxwaGFiZXQuZm9yRWFjaCgoYnl0ZSwgaSkgPT4gckFscGhhYmV0W2J5dGVdID0gaSk7XG5cbi8qKlxuICogQ29udmVydHMgZGF0YSBpbnRvIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0NjQ4Lmh0bWwjc2VjdGlvbi00fVxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGVuY29kZS5cbiAqIEByZXR1cm5zIFRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBlbmNvZGVCYXNlNjQgfSBmcm9tIFwiQHN0ZC9lbmNvZGluZy9iYXNlNjRcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhlbmNvZGVCYXNlNjQoXCJmb29iYXJcIiksIFwiWm05dlltRnlcIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUJhc2U2NChkYXRhOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICBkYXRhID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRhdGEpIGFzIFVpbnQ4QXJyYXlfO1xuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEpLnNsaWNlKCk7XG4gIGVsc2UgZGF0YSA9IGRhdGEuc2xpY2UoKTtcbiAgY29uc3QgW291dHB1dCwgaV0gPSBkZXRhY2goXG4gICAgZGF0YSBhcyBVaW50OEFycmF5XyxcbiAgICBjYWxjU2l6ZUJhc2U2NCgoZGF0YSBhcyBVaW50OEFycmF5XykubGVuZ3RoKSxcbiAgKTtcbiAgZW5jb2RlKG91dHB1dCwgaSwgMCwgYWxwaGFiZXQsIHBhZGRpbmcpO1xuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG91dHB1dCk7XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNDY0OC5odG1sI3NlY3Rpb24tNH1cbiAqXG4gKiBAcGFyYW0gYjY0IFRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgdG8gZGVjb2RlLlxuICogQHJldHVybnMgVGhlIGRlY29kZWQgZGF0YS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlY29kZUJhc2U2NCB9IGZyb20gXCJAc3RkL2VuY29kaW5nL2Jhc2U2NFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKFxuICogICBkZWNvZGVCYXNlNjQoXCJabTl2WW1GeVwiKSxcbiAqICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiZm9vYmFyXCIpXG4gKiApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjQoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5XyB7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShiNjQpIGFzIFVpbnQ4QXJyYXlfO1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoKG91dHB1dC5idWZmZXIgYXMgYW55KVxuICAgIC50cmFuc2ZlcihkZWNvZGUob3V0cHV0LCAwLCAwLCByQWxwaGFiZXQsIHBhZGRpbmcpKSk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUVELFNBQVMsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsaUJBQWlCO0FBQ2hFLFNBQVMsTUFBTSxRQUFRLHNCQUFzQjtBQUk3QyxNQUFNLFVBQVUsSUFBSSxVQUFVLENBQUM7QUFDL0IsTUFBTSxXQUFXLElBQUksY0FDbEIsTUFBTSxDQUFDO0FBQ1YsTUFBTSxZQUFZLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxLQUFLLGtCQUFrQjtBQUNsRSxTQUFTLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHO0FBRWhEOzs7Ozs7Ozs7Ozs7Ozs7Q0FlQyxHQUNELE9BQU8sU0FBUyxhQUFhLElBQXVDO0VBQ2xFLElBQUksT0FBTyxTQUFTLFVBQVU7SUFDNUIsT0FBTyxJQUFJLGNBQWMsTUFBTSxDQUFDO0VBQ2xDLE9BQU8sSUFBSSxnQkFBZ0IsYUFBYSxPQUFPLElBQUksV0FBVyxNQUFNLEtBQUs7T0FDcEUsT0FBTyxLQUFLLEtBQUs7RUFDdEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLE9BQ2xCLE1BQ0EsZUFBZSxBQUFDLEtBQXFCLE1BQU07RUFFN0MsT0FBTyxRQUFRLEdBQUcsR0FBRyxVQUFVO0VBQy9CLE9BQU8sSUFBSSxjQUFjLE1BQU0sQ0FBQztBQUNsQztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FDRCxPQUFPLFNBQVMsYUFBYSxHQUFXO0VBQ3RDLE1BQU0sU0FBUyxJQUFJLGNBQWMsTUFBTSxDQUFDO0VBQ3hDLG1DQUFtQztFQUNuQyxPQUFPLElBQUksV0FBVyxBQUFDLE9BQU8sTUFBTSxDQUNqQyxRQUFRLENBQUMsT0FBTyxRQUFRLEdBQUcsR0FBRyxXQUFXO0FBQzlDIn0=
+// denoCacheMetadata=11557729381285517451,13395693684056489160 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/35a962b444037158086a1f9ae4ad7f22a48ee64c967938bcd0f03d85fd2c4d43.js b/vendor/gen/https/jsr.io/35a962b444037158086a1f9ae4ad7f22a48ee64c967938bcd0f03d85fd2c4d43.js
new file mode 100644
index 0000000..932f170
--- /dev/null
+++ b/vendor/gen/https/jsr.io/35a962b444037158086a1f9ae4ad7f22a48ee64c967938bcd0f03d85fd2c4d43.js
@@ -0,0 +1,26 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+import { resolve } from "jsr:@std/path@^1.0.9/resolve";
+import { SEPARATOR } from "jsr:@std/path@^1.0.9/constants";
+import { toPathString } from "./_to_path_string.ts";
+/**
+ * Checks whether `src` is a sub-directory of `dest`.
+ *
+ * @param src Source file path as a string or URL.
+ * @param dest Destination file path as a string or URL.
+ * @param sep Path separator. Defaults to `\\` for Windows and `/` for other
+ * platforms.
+ *
+ * @returns `true` if `src` is a sub-directory of `dest`, `false` otherwise.
+ */ export function isSubdir(src, dest, sep = SEPARATOR) {
+ src = toPathString(src);
+ dest = toPathString(dest);
+ if (resolve(src) === resolve(dest)) {
+ return false;
+ }
+ const srcArray = src.split(sep);
+ const destArray = dest.split(sep);
+ return srcArray.every((current, i)=>destArray[i] === current);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L19pc19zdWJkaXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9yZXNvbHZlXCI7XG5pbXBvcnQgeyBTRVBBUkFUT1IgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB0b1BhdGhTdHJpbmcgfSBmcm9tIFwiLi9fdG9fcGF0aF9zdHJpbmcudHNcIjtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBgc3JjYCBpcyBhIHN1Yi1kaXJlY3Rvcnkgb2YgYGRlc3RgLlxuICpcbiAqIEBwYXJhbSBzcmMgU291cmNlIGZpbGUgcGF0aCBhcyBhIHN0cmluZyBvciBVUkwuXG4gKiBAcGFyYW0gZGVzdCBEZXN0aW5hdGlvbiBmaWxlIHBhdGggYXMgYSBzdHJpbmcgb3IgVVJMLlxuICogQHBhcmFtIHNlcCBQYXRoIHNlcGFyYXRvci4gRGVmYXVsdHMgdG8gYFxcXFxgIGZvciBXaW5kb3dzIGFuZCBgL2AgZm9yIG90aGVyXG4gKiBwbGF0Zm9ybXMuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGBzcmNgIGlzIGEgc3ViLWRpcmVjdG9yeSBvZiBgZGVzdGAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdWJkaXIoXG4gIHNyYzogc3RyaW5nIHwgVVJMLFxuICBkZXN0OiBzdHJpbmcgfCBVUkwsXG4gIHNlcCA9IFNFUEFSQVRPUixcbik6IGJvb2xlYW4ge1xuICBzcmMgPSB0b1BhdGhTdHJpbmcoc3JjKTtcbiAgZGVzdCA9IHRvUGF0aFN0cmluZyhkZXN0KTtcblxuICBpZiAocmVzb2x2ZShzcmMpID09PSByZXNvbHZlKGRlc3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3JjQXJyYXkgPSBzcmMuc3BsaXQoc2VwKTtcbiAgY29uc3QgZGVzdEFycmF5ID0gZGVzdC5zcGxpdChzZXApO1xuXG4gIHJldHVybiBzcmNBcnJheS5ldmVyeSgoY3VycmVudCwgaSkgPT4gZGVzdEFycmF5W2ldID09PSBjdXJyZW50KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsaURBQWlEO0FBRWpELFNBQVMsT0FBTyxRQUFRLCtCQUErQjtBQUN2RCxTQUFTLFNBQVMsUUFBUSxpQ0FBaUM7QUFDM0QsU0FBUyxZQUFZLFFBQVEsdUJBQXVCO0FBRXBEOzs7Ozs7Ozs7Q0FTQyxHQUNELE9BQU8sU0FBUyxTQUNkLEdBQWlCLEVBQ2pCLElBQWtCLEVBQ2xCLE1BQU0sU0FBUztFQUVmLE1BQU0sYUFBYTtFQUNuQixPQUFPLGFBQWE7RUFFcEIsSUFBSSxRQUFRLFNBQVMsUUFBUSxPQUFPO0lBQ2xDLE9BQU87RUFDVDtFQUVBLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQztFQUMzQixNQUFNLFlBQVksS0FBSyxLQUFLLENBQUM7RUFFN0IsT0FBTyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBTSxTQUFTLENBQUMsRUFBRSxLQUFLO0FBQ3pEIn0=
+// denoCacheMetadata=12869624350505637731,3403334576822797538 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3606c59f3e92316faeb20c991c858e0e1fb18771bb9d01d7a3ed8514b85b4bdb.js b/vendor/gen/https/jsr.io/3606c59f3e92316faeb20c991c858e0e1fb18771bb9d01d7a3ed8514b85b4bdb.js
new file mode 100644
index 0000000..e13419d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3606c59f3e92316faeb20c991c858e0e1fb18771bb9d01d7a3ed8514b85b4bdb.js
@@ -0,0 +1,9 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function assertArg(path) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL25vcm1hbGl6ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBhc3NlcnRQYXRoIH0gZnJvbSBcIi4vYXNzZXJ0X3BhdGgudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFyZyhwYXRoOiBzdHJpbmcpIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCIuXCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsT0FBTyxTQUFTLFVBQVUsSUFBWTtFQUNwQyxXQUFXO0VBQ1gsSUFBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLE9BQU87QUFDaEMifQ==
+// denoCacheMetadata=17712730746436136858,6715716185216313122 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/36c1e87dab15e3bd201553b517dec4b821e3a0045fc94d176dfc131a19d049d6.js b/vendor/gen/https/jsr.io/36c1e87dab15e3bd201553b517dec4b821e3a0045fc94d176dfc131a19d049d6.js
new file mode 100644
index 0000000..f5aea1b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/36c1e87dab15e3bd201553b517dec4b821e3a0045fc94d176dfc131a19d049d6.js
@@ -0,0 +1,295 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { basename } from "jsr:@std/path@^1.0.9/basename";
+import { join } from "jsr:@std/path@^1.0.9/join";
+import { resolve } from "jsr:@std/path@^1.0.9/resolve";
+import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
+import { getFileInfoType } from "./_get_file_info_type.ts";
+import { toPathString } from "./_to_path_string.ts";
+import { isSubdir } from "./_is_subdir.ts";
+// deno-lint-ignore no-explicit-any
+const isWindows = globalThis.Deno?.build.os === "windows";
+function assertIsDate(date, name) {
+ if (date === null) {
+ throw new Error(`${name} is unavailable`);
+ }
+}
+async function ensureValidCopy(src, dest, options) {
+ let destStat;
+ try {
+ destStat = await Deno.lstat(dest);
+ } catch (err) {
+ if (err instanceof Deno.errors.NotFound) {
+ return;
+ }
+ throw err;
+ }
+ if (options.isFolder && !destStat.isDirectory) {
+ throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'`);
+ }
+ if (!options.overwrite) {
+ throw new Deno.errors.AlreadyExists(`'${dest}' already exists.`);
+ }
+ return destStat;
+}
+function ensureValidCopySync(src, dest, options) {
+ let destStat;
+ try {
+ destStat = Deno.lstatSync(dest);
+ } catch (err) {
+ if (err instanceof Deno.errors.NotFound) {
+ return;
+ }
+ throw err;
+ }
+ if (options.isFolder && !destStat.isDirectory) {
+ throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'`);
+ }
+ if (!options.overwrite) {
+ throw new Deno.errors.AlreadyExists(`'${dest}' already exists`);
+ }
+ return destStat;
+}
+/* copy file to dest */ async function copyFile(src, dest, options) {
+ await ensureValidCopy(src, dest, options);
+ await Deno.copyFile(src, dest);
+ if (options.preserveTimestamps) {
+ const statInfo = await Deno.stat(src);
+ assertIsDate(statInfo.atime, "statInfo.atime");
+ assertIsDate(statInfo.mtime, "statInfo.mtime");
+ await Deno.utime(dest, statInfo.atime, statInfo.mtime);
+ }
+}
+/* copy file to dest synchronously */ function copyFileSync(src, dest, options) {
+ ensureValidCopySync(src, dest, options);
+ Deno.copyFileSync(src, dest);
+ if (options.preserveTimestamps) {
+ const statInfo = Deno.statSync(src);
+ assertIsDate(statInfo.atime, "statInfo.atime");
+ assertIsDate(statInfo.mtime, "statInfo.mtime");
+ Deno.utimeSync(dest, statInfo.atime, statInfo.mtime);
+ }
+}
+/* copy symlink to dest */ async function copySymLink(src, dest, options) {
+ await ensureValidCopy(src, dest, options);
+ const originSrcFilePath = await Deno.readLink(src);
+ const type = getFileInfoType(await Deno.lstat(src));
+ if (isWindows) {
+ await Deno.symlink(originSrcFilePath, dest, {
+ type: type === "dir" ? "dir" : "file"
+ });
+ } else {
+ await Deno.symlink(originSrcFilePath, dest);
+ }
+ if (options.preserveTimestamps) {
+ const statInfo = await Deno.lstat(src);
+ assertIsDate(statInfo.atime, "statInfo.atime");
+ assertIsDate(statInfo.mtime, "statInfo.mtime");
+ await Deno.utime(dest, statInfo.atime, statInfo.mtime);
+ }
+}
+/* copy symlink to dest synchronously */ function copySymlinkSync(src, dest, options) {
+ ensureValidCopySync(src, dest, options);
+ const originSrcFilePath = Deno.readLinkSync(src);
+ const type = getFileInfoType(Deno.lstatSync(src));
+ if (isWindows) {
+ Deno.symlinkSync(originSrcFilePath, dest, {
+ type: type === "dir" ? "dir" : "file"
+ });
+ } else {
+ Deno.symlinkSync(originSrcFilePath, dest);
+ }
+ if (options.preserveTimestamps) {
+ const statInfo = Deno.lstatSync(src);
+ assertIsDate(statInfo.atime, "statInfo.atime");
+ assertIsDate(statInfo.mtime, "statInfo.mtime");
+ Deno.utimeSync(dest, statInfo.atime, statInfo.mtime);
+ }
+}
+/* copy folder from src to dest. */ async function copyDir(src, dest, options) {
+ const destStat = await ensureValidCopy(src, dest, {
+ ...options,
+ isFolder: true
+ });
+ if (!destStat) {
+ await ensureDir(dest);
+ }
+ if (options.preserveTimestamps) {
+ const srcStatInfo = await Deno.stat(src);
+ assertIsDate(srcStatInfo.atime, "statInfo.atime");
+ assertIsDate(srcStatInfo.mtime, "statInfo.mtime");
+ await Deno.utime(dest, srcStatInfo.atime, srcStatInfo.mtime);
+ }
+ src = toPathString(src);
+ dest = toPathString(dest);
+ const promises = [];
+ for await (const entry of Deno.readDir(src)){
+ const srcPath = join(src, entry.name);
+ const destPath = join(dest, basename(srcPath));
+ if (entry.isSymlink) {
+ promises.push(copySymLink(srcPath, destPath, options));
+ } else if (entry.isDirectory) {
+ promises.push(copyDir(srcPath, destPath, options));
+ } else if (entry.isFile) {
+ promises.push(copyFile(srcPath, destPath, options));
+ }
+ }
+ await Promise.all(promises);
+}
+/* copy folder from src to dest synchronously */ function copyDirSync(src, dest, options) {
+ const destStat = ensureValidCopySync(src, dest, {
+ ...options,
+ isFolder: true
+ });
+ if (!destStat) {
+ ensureDirSync(dest);
+ }
+ if (options.preserveTimestamps) {
+ const srcStatInfo = Deno.statSync(src);
+ assertIsDate(srcStatInfo.atime, "statInfo.atime");
+ assertIsDate(srcStatInfo.mtime, "statInfo.mtime");
+ Deno.utimeSync(dest, srcStatInfo.atime, srcStatInfo.mtime);
+ }
+ src = toPathString(src);
+ dest = toPathString(dest);
+ for (const entry of Deno.readDirSync(src)){
+ const srcPath = join(src, entry.name);
+ const destPath = join(dest, basename(srcPath));
+ if (entry.isSymlink) {
+ copySymlinkSync(srcPath, destPath, options);
+ } else if (entry.isDirectory) {
+ copyDirSync(srcPath, destPath, options);
+ } else if (entry.isFile) {
+ copyFileSync(srcPath, destPath, options);
+ }
+ }
+}
+/**
+ * Asynchronously copy a file or directory (along with its contents), like
+ * {@linkcode https://www.ibm.com/docs/en/aix/7.3?topic=c-cp-command#cp__cp_flagr | cp -r}.
+ *
+ * Both `src` and `dest` must both be a file or directory.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param src The source file/directory path as a string or URL.
+ * @param dest The destination file/directory path as a string or URL.
+ * @param options Options for copying.
+ *
+ * @returns A promise that resolves once the copy operation completes.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { copy } from "@std/fs/copy";
+ *
+ * await copy("./foo", "./bar");
+ * ```
+ *
+ * This will copy the file or directory at `./foo` to `./bar` without
+ * overwriting.
+ *
+ * @example Overwriting files/directories
+ * ```ts ignore
+ * import { copy } from "@std/fs/copy";
+ *
+ * await copy("./foo", "./bar", { overwrite: true });
+ * ```
+ *
+ * This will copy the file or directory at `./foo` to `./bar` and overwrite
+ * any existing files or directories.
+ *
+ * @example Preserving timestamps
+ * ```ts ignore
+ * import { copy } from "@std/fs/copy";
+ *
+ * await copy("./foo", "./bar", { preserveTimestamps: true });
+ * ```
+ *
+ * This will copy the file or directory at `./foo` to `./bar` and set the
+ * last modification and access times to the ones of the original source files.
+ */ export async function copy(src, dest, options = {}) {
+ src = resolve(toPathString(src));
+ dest = resolve(toPathString(dest));
+ if (src === dest) {
+ throw new Error("Source and destination cannot be the same");
+ }
+ const srcStat = await Deno.lstat(src);
+ if (srcStat.isDirectory && isSubdir(src, dest)) {
+ throw new Error(`Cannot copy '${src}' to a subdirectory of itself: '${dest}'`);
+ }
+ if (srcStat.isSymlink) {
+ await copySymLink(src, dest, options);
+ } else if (srcStat.isDirectory) {
+ await copyDir(src, dest, options);
+ } else if (srcStat.isFile) {
+ await copyFile(src, dest, options);
+ }
+}
+/**
+ * Synchronously copy a file or directory (along with its contents), like
+ * {@linkcode https://www.ibm.com/docs/en/aix/7.3?topic=c-cp-command#cp__cp_flagr | cp -r}.
+ *
+ * Both `src` and `dest` must both be a file or directory.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param src The source file/directory path as a string or URL.
+ * @param dest The destination file/directory path as a string or URL.
+ * @param options Options for copying.
+ *
+ * @returns A void value that returns once the copy operation completes.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { copySync } from "@std/fs/copy";
+ *
+ * copySync("./foo", "./bar");
+ * ```
+ *
+ * This will copy the file or directory at `./foo` to `./bar` without
+ * overwriting.
+ *
+ * @example Overwriting files/directories
+ * ```ts ignore
+ * import { copySync } from "@std/fs/copy";
+ *
+ * copySync("./foo", "./bar", { overwrite: true });
+ * ```
+ *
+ * This will copy the file or directory at `./foo` to `./bar` and overwrite
+ * any existing files or directories.
+ *
+ * @example Preserving timestamps
+ * ```ts ignore
+ * import { copySync } from "@std/fs/copy";
+ *
+ * copySync("./foo", "./bar", { preserveTimestamps: true });
+ * ```
+ *
+ * This will copy the file or directory at `./foo` to `./bar` and set the
+ * last modification and access times to the ones of the original source files.
+ */ export function copySync(src, dest, options = {}) {
+ src = resolve(toPathString(src));
+ dest = resolve(toPathString(dest));
+ if (src === dest) {
+ throw new Error("Source and destination cannot be the same");
+ }
+ const srcStat = Deno.lstatSync(src);
+ if (srcStat.isDirectory && isSubdir(src, dest)) {
+ throw new Error(`Cannot copy '${src}' to a subdirectory of itself: '${dest}'`);
+ }
+ if (srcStat.isSymlink) {
+ copySymlinkSync(src, dest, options);
+ } else if (srcStat.isDirectory) {
+ copyDirSync(src, dest, options);
+ } else if (srcStat.isFile) {
+ copyFileSync(src, dest, options);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2NvcHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvYmFzZW5hbWVcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvam9pblwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9yZXNvbHZlXCI7XG5pbXBvcnQgeyBlbnN1cmVEaXIsIGVuc3VyZURpclN5bmMgfSBmcm9tIFwiLi9lbnN1cmVfZGlyLnRzXCI7XG5pbXBvcnQgeyBnZXRGaWxlSW5mb1R5cGUgfSBmcm9tIFwiLi9fZ2V0X2ZpbGVfaW5mb190eXBlLnRzXCI7XG5pbXBvcnQgeyB0b1BhdGhTdHJpbmcgfSBmcm9tIFwiLi9fdG9fcGF0aF9zdHJpbmcudHNcIjtcbmltcG9ydCB7IGlzU3ViZGlyIH0gZnJvbSBcIi4vX2lzX3N1YmRpci50c1wiO1xuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuY29uc3QgaXNXaW5kb3dzID0gKGdsb2JhbFRoaXMgYXMgYW55KS5EZW5vPy5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCI7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIGNvcHl9IGFuZCB7QGxpbmtjb2RlIGNvcHlTeW5jfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIG92ZXJ3cml0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgd2lsbCBzZXQgbGFzdCBtb2RpZmljYXRpb24gYW5kIGFjY2VzcyB0aW1lcyB0byB0aGUgb25lcyBvZlxuICAgKiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLiBXaGVuIGBmYWxzZWAsIHRpbWVzdGFtcCBiZWhhdmlvciBpc1xuICAgKiBPUy1kZXBlbmRlbnQuXG4gICAqXG4gICAqID4gWyFOT1RFXVxuICAgKiA+IFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBmb3Igc3ltYm9saWMgbGlua3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIHByZXNlcnZlVGltZXN0YW1wcz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBJbnRlcm5hbENvcHlPcHRpb25zIGV4dGVuZHMgQ29weU9wdGlvbnMge1xuICAvKiogQGRlZmF1bHQge2ZhbHNlfSAqL1xuICBpc0ZvbGRlcj86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzRGF0ZShkYXRlOiBEYXRlIHwgbnVsbCwgbmFtZTogc3RyaW5nKTogYXNzZXJ0cyBkYXRlIGlzIERhdGUge1xuICBpZiAoZGF0ZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBpcyB1bmF2YWlsYWJsZWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVZhbGlkQ29weShcbiAgc3JjOiBzdHJpbmcgfCBVUkwsXG4gIGRlc3Q6IHN0cmluZyB8IFVSTCxcbiAgb3B0aW9uczogSW50ZXJuYWxDb3B5T3B0aW9ucyxcbik6IFByb21pc2U8RGVuby5GaWxlSW5mbyB8IHVuZGVmaW5lZD4ge1xuICBsZXQgZGVzdFN0YXQ6IERlbm8uRmlsZUluZm87XG5cbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IGF3YWl0IERlbm8ubHN0YXQoZGVzdCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBpZiAob3B0aW9ucy5pc0ZvbGRlciAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9J2AsXG4gICAgKTtcbiAgfVxuICBpZiAoIW9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgdGhyb3cgbmV3IERlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHMoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0cy5gKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0U3RhdDtcbn1cblxuZnVuY3Rpb24gZW5zdXJlVmFsaWRDb3B5U3luYyhcbiAgc3JjOiBzdHJpbmcgfCBVUkwsXG4gIGRlc3Q6IHN0cmluZyB8IFVSTCxcbiAgb3B0aW9uczogSW50ZXJuYWxDb3B5T3B0aW9ucyxcbik6IERlbm8uRmlsZUluZm8gfCB1bmRlZmluZWQge1xuICBsZXQgZGVzdFN0YXQ6IERlbm8uRmlsZUluZm87XG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBEZW5vLmxzdGF0U3luYyhkZXN0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmlzRm9sZGVyICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7ZGVzdH0nIHdpdGggZGlyZWN0b3J5ICcke3NyY30nYCxcbiAgICApO1xuICB9XG4gIGlmICghb3B0aW9ucy5vdmVyd3JpdGUpIHtcbiAgICB0aHJvdyBuZXcgRGVuby5lcnJvcnMuQWxyZWFkeUV4aXN0cyhgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYCk7XG4gIH1cblxuICByZXR1cm4gZGVzdFN0YXQ7XG59XG5cbi8qIGNvcHkgZmlsZSB0byBkZXN0ICovXG5hc3luYyBmdW5jdGlvbiBjb3B5RmlsZShcbiAgc3JjOiBzdHJpbmcgfCBVUkwsXG4gIGRlc3Q6IHN0cmluZyB8IFVSTCxcbiAgb3B0aW9uczogSW50ZXJuYWxDb3B5T3B0aW9ucyxcbikge1xuICBhd2FpdCBlbnN1cmVWYWxpZENvcHkoc3JjLCBkZXN0LCBvcHRpb25zKTtcbiAgYXdhaXQgRGVuby5jb3B5RmlsZShzcmMsIGRlc3QpO1xuICBpZiAob3B0aW9ucy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHtcbiAgICBjb25zdCBzdGF0SW5mbyA9IGF3YWl0IERlbm8uc3RhdChzcmMpO1xuICAgIGFzc2VydElzRGF0ZShzdGF0SW5mby5hdGltZSwgXCJzdGF0SW5mby5hdGltZVwiKTtcbiAgICBhc3NlcnRJc0RhdGUoc3RhdEluZm8ubXRpbWUsIFwic3RhdEluZm8ubXRpbWVcIik7XG4gICAgYXdhaXQgRGVuby51dGltZShkZXN0LCBzdGF0SW5mby5hdGltZSwgc3RhdEluZm8ubXRpbWUpO1xuICB9XG59XG4vKiBjb3B5IGZpbGUgdG8gZGVzdCBzeW5jaHJvbm91c2x5ICovXG5mdW5jdGlvbiBjb3B5RmlsZVN5bmMoXG4gIHNyYzogc3RyaW5nIHwgVVJMLFxuICBkZXN0OiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM6IEludGVybmFsQ29weU9wdGlvbnMsXG4pIHtcbiAgZW5zdXJlVmFsaWRDb3B5U3luYyhzcmMsIGRlc3QsIG9wdGlvbnMpO1xuICBEZW5vLmNvcHlGaWxlU3luYyhzcmMsIGRlc3QpO1xuICBpZiAob3B0aW9ucy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHtcbiAgICBjb25zdCBzdGF0SW5mbyA9IERlbm8uc3RhdFN5bmMoc3JjKTtcbiAgICBhc3NlcnRJc0RhdGUoc3RhdEluZm8uYXRpbWUsIFwic3RhdEluZm8uYXRpbWVcIik7XG4gICAgYXNzZXJ0SXNEYXRlKHN0YXRJbmZvLm10aW1lLCBcInN0YXRJbmZvLm10aW1lXCIpO1xuICAgIERlbm8udXRpbWVTeW5jKGRlc3QsIHN0YXRJbmZvLmF0aW1lLCBzdGF0SW5mby5tdGltZSk7XG4gIH1cbn1cblxuLyogY29weSBzeW1saW5rIHRvIGRlc3QgKi9cbmFzeW5jIGZ1bmN0aW9uIGNvcHlTeW1MaW5rKFxuICBzcmM6IHN0cmluZyB8IFVSTCxcbiAgZGVzdDogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zOiBJbnRlcm5hbENvcHlPcHRpb25zLFxuKSB7XG4gIGF3YWl0IGVuc3VyZVZhbGlkQ29weShzcmMsIGRlc3QsIG9wdGlvbnMpO1xuICBjb25zdCBvcmlnaW5TcmNGaWxlUGF0aCA9IGF3YWl0IERlbm8ucmVhZExpbmsoc3JjKTtcbiAgY29uc3QgdHlwZSA9IGdldEZpbGVJbmZvVHlwZShhd2FpdCBEZW5vLmxzdGF0KHNyYykpO1xuICBpZiAoaXNXaW5kb3dzKSB7XG4gICAgYXdhaXQgRGVuby5zeW1saW5rKG9yaWdpblNyY0ZpbGVQYXRoLCBkZXN0LCB7XG4gICAgICB0eXBlOiB0eXBlID09PSBcImRpclwiID8gXCJkaXJcIiA6IFwiZmlsZVwiLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IERlbm8uc3ltbGluayhvcmlnaW5TcmNGaWxlUGF0aCwgZGVzdCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMucHJlc2VydmVUaW1lc3RhbXBzKSB7XG4gICAgY29uc3Qgc3RhdEluZm8gPSBhd2FpdCBEZW5vLmxzdGF0KHNyYyk7XG4gICAgYXNzZXJ0SXNEYXRlKHN0YXRJbmZvLmF0aW1lLCBcInN0YXRJbmZvLmF0aW1lXCIpO1xuICAgIGFzc2VydElzRGF0ZShzdGF0SW5mby5tdGltZSwgXCJzdGF0SW5mby5tdGltZVwiKTtcbiAgICBhd2FpdCBEZW5vLnV0aW1lKGRlc3QsIHN0YXRJbmZvLmF0aW1lLCBzdGF0SW5mby5tdGltZSk7XG4gIH1cbn1cblxuLyogY29weSBzeW1saW5rIHRvIGRlc3Qgc3luY2hyb25vdXNseSAqL1xuZnVuY3Rpb24gY29weVN5bWxpbmtTeW5jKFxuICBzcmM6IHN0cmluZyB8IFVSTCxcbiAgZGVzdDogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zOiBJbnRlcm5hbENvcHlPcHRpb25zLFxuKSB7XG4gIGVuc3VyZVZhbGlkQ29weVN5bmMoc3JjLCBkZXN0LCBvcHRpb25zKTtcbiAgY29uc3Qgb3JpZ2luU3JjRmlsZVBhdGggPSBEZW5vLnJlYWRMaW5rU3luYyhzcmMpO1xuICBjb25zdCB0eXBlID0gZ2V0RmlsZUluZm9UeXBlKERlbm8ubHN0YXRTeW5jKHNyYykpO1xuICBpZiAoaXNXaW5kb3dzKSB7XG4gICAgRGVuby5zeW1saW5rU3luYyhvcmlnaW5TcmNGaWxlUGF0aCwgZGVzdCwge1xuICAgICAgdHlwZTogdHlwZSA9PT0gXCJkaXJcIiA/IFwiZGlyXCIgOiBcImZpbGVcIixcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBEZW5vLnN5bWxpbmtTeW5jKG9yaWdpblNyY0ZpbGVQYXRoLCBkZXN0KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIGNvbnN0IHN0YXRJbmZvID0gRGVuby5sc3RhdFN5bmMoc3JjKTtcbiAgICBhc3NlcnRJc0RhdGUoc3RhdEluZm8uYXRpbWUsIFwic3RhdEluZm8uYXRpbWVcIik7XG4gICAgYXNzZXJ0SXNEYXRlKHN0YXRJbmZvLm10aW1lLCBcInN0YXRJbmZvLm10aW1lXCIpO1xuICAgIERlbm8udXRpbWVTeW5jKGRlc3QsIHN0YXRJbmZvLmF0aW1lLCBzdGF0SW5mby5tdGltZSk7XG4gIH1cbn1cblxuLyogY29weSBmb2xkZXIgZnJvbSBzcmMgdG8gZGVzdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvcHlEaXIoXG4gIHNyYzogc3RyaW5nIHwgVVJMLFxuICBkZXN0OiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM6IENvcHlPcHRpb25zLFxuKSB7XG4gIGNvbnN0IGRlc3RTdGF0ID0gYXdhaXQgZW5zdXJlVmFsaWRDb3B5KHNyYywgZGVzdCwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgaXNGb2xkZXI6IHRydWUsXG4gIH0pO1xuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICBhd2FpdCBlbnN1cmVEaXIoZGVzdCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHtcbiAgICBjb25zdCBzcmNTdGF0SW5mbyA9IGF3YWl0IERlbm8uc3RhdChzcmMpO1xuICAgIGFzc2VydElzRGF0ZShzcmNTdGF0SW5mby5hdGltZSwgXCJzdGF0SW5mby5hdGltZVwiKTtcbiAgICBhc3NlcnRJc0RhdGUoc3JjU3RhdEluZm8ubXRpbWUsIFwic3RhdEluZm8ubXRpbWVcIik7XG4gICAgYXdhaXQgRGVuby51dGltZShkZXN0LCBzcmNTdGF0SW5mby5hdGltZSwgc3JjU3RhdEluZm8ubXRpbWUpO1xuICB9XG5cbiAgc3JjID0gdG9QYXRoU3RyaW5nKHNyYyk7XG4gIGRlc3QgPSB0b1BhdGhTdHJpbmcoZGVzdCk7XG5cbiAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIERlbm8ucmVhZERpcihzcmMpKSB7XG4gICAgY29uc3Qgc3JjUGF0aCA9IGpvaW4oc3JjLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCBkZXN0UGF0aCA9IGpvaW4oZGVzdCwgYmFzZW5hbWUoc3JjUGF0aCBhcyBzdHJpbmcpKTtcbiAgICBpZiAoZW50cnkuaXNTeW1saW5rKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKGNvcHlTeW1MaW5rKHNyY1BhdGgsIGRlc3RQYXRoLCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgcHJvbWlzZXMucHVzaChjb3B5RGlyKHNyY1BhdGgsIGRlc3RQYXRoLCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgIHByb21pc2VzLnB1c2goY29weUZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59XG5cbi8qIGNvcHkgZm9sZGVyIGZyb20gc3JjIHRvIGRlc3Qgc3luY2hyb25vdXNseSAqL1xuZnVuY3Rpb24gY29weURpclN5bmMoXG4gIHNyYzogc3RyaW5nIHwgVVJMLFxuICBkZXN0OiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM6IENvcHlPcHRpb25zLFxuKSB7XG4gIGNvbnN0IGRlc3RTdGF0ID0gZW5zdXJlVmFsaWRDb3B5U3luYyhzcmMsIGRlc3QsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGlzRm9sZGVyOiB0cnVlLFxuICB9KTtcblxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgZW5zdXJlRGlyU3luYyhkZXN0KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIGNvbnN0IHNyY1N0YXRJbmZvID0gRGVuby5zdGF0U3luYyhzcmMpO1xuICAgIGFzc2VydElzRGF0ZShzcmNTdGF0SW5mby5hdGltZSwgXCJzdGF0SW5mby5hdGltZVwiKTtcbiAgICBhc3NlcnRJc0RhdGUoc3JjU3RhdEluZm8ubXRpbWUsIFwic3RhdEluZm8ubXRpbWVcIik7XG4gICAgRGVuby51dGltZVN5bmMoZGVzdCwgc3JjU3RhdEluZm8uYXRpbWUsIHNyY1N0YXRJbmZvLm10aW1lKTtcbiAgfVxuXG4gIHNyYyA9IHRvUGF0aFN0cmluZyhzcmMpO1xuICBkZXN0ID0gdG9QYXRoU3RyaW5nKGRlc3QpO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgRGVuby5yZWFkRGlyU3luYyhzcmMpKSB7XG4gICAgY29uc3Qgc3JjUGF0aCA9IGpvaW4oc3JjLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCBkZXN0UGF0aCA9IGpvaW4oZGVzdCwgYmFzZW5hbWUoc3JjUGF0aCBhcyBzdHJpbmcpKTtcbiAgICBpZiAoZW50cnkuaXNTeW1saW5rKSB7XG4gICAgICBjb3B5U3ltbGlua1N5bmMoc3JjUGF0aCwgZGVzdFBhdGgsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgIGNvcHlEaXJTeW5jKHNyY1BhdGgsIGRlc3RQYXRoLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgY29weUZpbGVTeW5jKHNyY1BhdGgsIGRlc3RQYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBjb3B5IGEgZmlsZSBvciBkaXJlY3RvcnkgKGFsb25nIHdpdGggaXRzIGNvbnRlbnRzKSwgbGlrZVxuICoge0BsaW5rY29kZSBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vYWl4LzcuMz90b3BpYz1jLWNwLWNvbW1hbmQjY3BfX2NwX2ZsYWdyIHwgY3AgLXJ9LlxuICpcbiAqIEJvdGggYHNyY2AgYW5kIGBkZXN0YCBtdXN0IGJvdGggYmUgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctd3JpdGVgIHBlcm1pc3Npb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kZW5vLmNvbS9ydW50aW1lL21hbnVhbC9iYXNpY3MvcGVybWlzc2lvbnMjZmlsZS1zeXN0ZW0tYWNjZXNzfVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVubydzIHBlcm1pc3Npb25zIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gc3JjIFRoZSBzb3VyY2UgZmlsZS9kaXJlY3RvcnkgcGF0aCBhcyBhIHN0cmluZyBvciBVUkwuXG4gKiBAcGFyYW0gZGVzdCBUaGUgZGVzdGluYXRpb24gZmlsZS9kaXJlY3RvcnkgcGF0aCBhcyBhIHN0cmluZyBvciBVUkwuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjb3B5aW5nLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNvcHkgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBjb3B5IH0gZnJvbSBcIkBzdGQvZnMvY29weVwiO1xuICpcbiAqIGF3YWl0IGNvcHkoXCIuL2Zvb1wiLCBcIi4vYmFyXCIpO1xuICogYGBgXG4gKlxuICogVGhpcyB3aWxsIGNvcHkgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IGAuL2Zvb2AgdG8gYC4vYmFyYCB3aXRob3V0XG4gKiBvdmVyd3JpdGluZy5cbiAqXG4gKiBAZXhhbXBsZSBPdmVyd3JpdGluZyBmaWxlcy9kaXJlY3Rvcmllc1xuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBjb3B5IH0gZnJvbSBcIkBzdGQvZnMvY29weVwiO1xuICpcbiAqIGF3YWl0IGNvcHkoXCIuL2Zvb1wiLCBcIi4vYmFyXCIsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICogYGBgXG4gKlxuICogVGhpcyB3aWxsIGNvcHkgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IGAuL2Zvb2AgdG8gYC4vYmFyYCBhbmQgb3ZlcndyaXRlXG4gKiBhbnkgZXhpc3RpbmcgZmlsZXMgb3IgZGlyZWN0b3JpZXMuXG4gKlxuICogQGV4YW1wbGUgUHJlc2VydmluZyB0aW1lc3RhbXBzXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGNvcHkgfSBmcm9tIFwiQHN0ZC9mcy9jb3B5XCI7XG4gKlxuICogYXdhaXQgY29weShcIi4vZm9vXCIsIFwiLi9iYXJcIiwgeyBwcmVzZXJ2ZVRpbWVzdGFtcHM6IHRydWUgfSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgY29weSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYC4vZm9vYCB0byBgLi9iYXJgIGFuZCBzZXQgdGhlXG4gKiBsYXN0IG1vZGlmaWNhdGlvbiBhbmQgYWNjZXNzIHRpbWVzIHRvIHRoZSBvbmVzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5KFxuICBzcmM6IHN0cmluZyB8IFVSTCxcbiAgZGVzdDogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zOiBDb3B5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIHNyYyA9IHJlc29sdmUodG9QYXRoU3RyaW5nKHNyYykpO1xuICBkZXN0ID0gcmVzb2x2ZSh0b1BhdGhTdHJpbmcoZGVzdCkpO1xuXG4gIGlmIChzcmMgPT09IGRlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNhbm5vdCBiZSB0aGUgc2FtZVwiKTtcbiAgfVxuXG4gIGNvbnN0IHNyY1N0YXQgPSBhd2FpdCBEZW5vLmxzdGF0KHNyYyk7XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkgJiYgaXNTdWJkaXIoc3JjLCBkZXN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3QgY29weSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGY6ICcke2Rlc3R9J2AsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzcmNTdGF0LmlzU3ltbGluaykge1xuICAgIGF3YWl0IGNvcHlTeW1MaW5rKHNyYywgZGVzdCwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSkge1xuICAgIGF3YWl0IGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSkge1xuICAgIGF3YWl0IGNvcHlGaWxlKHNyYywgZGVzdCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IGNvcHkgYSBmaWxlIG9yIGRpcmVjdG9yeSAoYWxvbmcgd2l0aCBpdHMgY29udGVudHMpLCBsaWtlXG4gKiB7QGxpbmtjb2RlIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9haXgvNy4zP3RvcGljPWMtY3AtY29tbWFuZCNjcF9fY3BfZmxhZ3IgfCBjcCAtcn0uXG4gKlxuICogQm90aCBgc3JjYCBhbmQgYGRlc3RgIG11c3QgYm90aCBiZSBhIGZpbGUgb3IgZGlyZWN0b3J5LlxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXJlYWRgIGFuZCBgLS1hbGxvdy13cml0ZWAgcGVybWlzc2lvbnMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL3J1bnRpbWUvbWFudWFsL2Jhc2ljcy9wZXJtaXNzaW9ucyNmaWxlLXN5c3RlbS1hY2Nlc3N9XG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEZW5vJ3MgcGVybWlzc2lvbnMgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBzcmMgVGhlIHNvdXJjZSBmaWxlL2RpcmVjdG9yeSBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBmaWxlL2RpcmVjdG9yeSBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNvcHlpbmcuXG4gKlxuICogQHJldHVybnMgQSB2b2lkIHZhbHVlIHRoYXQgcmV0dXJucyBvbmNlIHRoZSBjb3B5IG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgY29weVN5bmMgfSBmcm9tIFwiQHN0ZC9mcy9jb3B5XCI7XG4gKlxuICogY29weVN5bmMoXCIuL2Zvb1wiLCBcIi4vYmFyXCIpO1xuICogYGBgXG4gKlxuICogVGhpcyB3aWxsIGNvcHkgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IGAuL2Zvb2AgdG8gYC4vYmFyYCB3aXRob3V0XG4gKiBvdmVyd3JpdGluZy5cbiAqXG4gKiBAZXhhbXBsZSBPdmVyd3JpdGluZyBmaWxlcy9kaXJlY3Rvcmllc1xuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBjb3B5U3luYyB9IGZyb20gXCJAc3RkL2ZzL2NvcHlcIjtcbiAqXG4gKiBjb3B5U3luYyhcIi4vZm9vXCIsIFwiLi9iYXJcIiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgY29weSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYC4vZm9vYCB0byBgLi9iYXJgIGFuZCBvdmVyd3JpdGVcbiAqIGFueSBleGlzdGluZyBmaWxlcyBvciBkaXJlY3Rvcmllcy5cbiAqXG4gKiBAZXhhbXBsZSBQcmVzZXJ2aW5nIHRpbWVzdGFtcHNcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgY29weVN5bmMgfSBmcm9tIFwiQHN0ZC9mcy9jb3B5XCI7XG4gKlxuICogY29weVN5bmMoXCIuL2Zvb1wiLCBcIi4vYmFyXCIsIHsgcHJlc2VydmVUaW1lc3RhbXBzOiB0cnVlIH0pO1xuICogYGBgXG4gKlxuICogVGhpcyB3aWxsIGNvcHkgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IGAuL2Zvb2AgdG8gYC4vYmFyYCBhbmQgc2V0IHRoZVxuICogbGFzdCBtb2RpZmljYXRpb24gYW5kIGFjY2VzcyB0aW1lcyB0byB0aGUgb25lcyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVN5bmMoXG4gIHNyYzogc3RyaW5nIHwgVVJMLFxuICBkZXN0OiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM6IENvcHlPcHRpb25zID0ge30sXG4pIHtcbiAgc3JjID0gcmVzb2x2ZSh0b1BhdGhTdHJpbmcoc3JjKSk7XG4gIGRlc3QgPSByZXNvbHZlKHRvUGF0aFN0cmluZyhkZXN0KSk7XG5cbiAgaWYgKHNyYyA9PT0gZGVzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2Fubm90IGJlIHRoZSBzYW1lXCIpO1xuICB9XG5cbiAgY29uc3Qgc3JjU3RhdCA9IERlbm8ubHN0YXRTeW5jKHNyYyk7XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkgJiYgaXNTdWJkaXIoc3JjLCBkZXN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3QgY29weSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGY6ICcke2Rlc3R9J2AsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzcmNTdGF0LmlzU3ltbGluaykge1xuICAgIGNvcHlTeW1saW5rU3luYyhzcmMsIGRlc3QsIG9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkpIHtcbiAgICBjb3B5RGlyU3luYyhzcmMsIGRlc3QsIG9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKSB7XG4gICAgY29weUZpbGVTeW5jKHNyYywgZGVzdCwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFFckQsU0FBUyxRQUFRLFFBQVEsZ0NBQWdDO0FBQ3pELFNBQVMsSUFBSSxRQUFRLDRCQUE0QjtBQUNqRCxTQUFTLE9BQU8sUUFBUSwrQkFBK0I7QUFDdkQsU0FBUyxTQUFTLEVBQUUsYUFBYSxRQUFRLGtCQUFrQjtBQUMzRCxTQUFTLGVBQWUsUUFBUSwyQkFBMkI7QUFDM0QsU0FBUyxZQUFZLFFBQVEsdUJBQXVCO0FBQ3BELFNBQVMsUUFBUSxRQUFRLGtCQUFrQjtBQUUzQyxtQ0FBbUM7QUFDbkMsTUFBTSxZQUFZLEFBQUMsV0FBbUIsSUFBSSxFQUFFLE1BQU0sT0FBTztBQTRCekQsU0FBUyxhQUFhLElBQWlCLEVBQUUsSUFBWTtFQUNuRCxJQUFJLFNBQVMsTUFBTTtJQUNqQixNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssZUFBZSxDQUFDO0VBQzFDO0FBQ0Y7QUFFQSxlQUFlLGdCQUNiLEdBQWlCLEVBQ2pCLElBQWtCLEVBQ2xCLE9BQTRCO0VBRTVCLElBQUk7RUFFSixJQUFJO0lBQ0YsV0FBVyxNQUFNLEtBQUssS0FBSyxDQUFDO0VBQzlCLEVBQUUsT0FBTyxLQUFLO0lBQ1osSUFBSSxlQUFlLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRTtNQUN2QztJQUNGO0lBQ0EsTUFBTTtFQUNSO0VBRUEsSUFBSSxRQUFRLFFBQVEsSUFBSSxDQUFDLFNBQVMsV0FBVyxFQUFFO0lBQzdDLE1BQU0sSUFBSSxNQUNSLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUV0RTtFQUNBLElBQUksQ0FBQyxRQUFRLFNBQVMsRUFBRTtJQUN0QixNQUFNLElBQUksS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssaUJBQWlCLENBQUM7RUFDakU7RUFFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTLG9CQUNQLEdBQWlCLEVBQ2pCLElBQWtCLEVBQ2xCLE9BQTRCO0VBRTVCLElBQUk7RUFDSixJQUFJO0lBQ0YsV0FBVyxLQUFLLFNBQVMsQ0FBQztFQUM1QixFQUFFLE9BQU8sS0FBSztJQUNaLElBQUksZUFBZSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUU7TUFDdkM7SUFDRjtJQUNBLE1BQU07RUFDUjtFQUVBLElBQUksUUFBUSxRQUFRLElBQUksQ0FBQyxTQUFTLFdBQVcsRUFBRTtJQUM3QyxNQUFNLElBQUksTUFDUixDQUFDLGdDQUFnQyxFQUFFLEtBQUssa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFFdEU7RUFDQSxJQUFJLENBQUMsUUFBUSxTQUFTLEVBQUU7SUFDdEIsTUFBTSxJQUFJLEtBQUssTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLGdCQUFnQixDQUFDO0VBQ2hFO0VBRUEsT0FBTztBQUNUO0FBRUEscUJBQXFCLEdBQ3JCLGVBQWUsU0FDYixHQUFpQixFQUNqQixJQUFrQixFQUNsQixPQUE0QjtFQUU1QixNQUFNLGdCQUFnQixLQUFLLE1BQU07RUFDakMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxLQUFLO0VBQ3pCLElBQUksUUFBUSxrQkFBa0IsRUFBRTtJQUM5QixNQUFNLFdBQVcsTUFBTSxLQUFLLElBQUksQ0FBQztJQUNqQyxhQUFhLFNBQVMsS0FBSyxFQUFFO0lBQzdCLGFBQWEsU0FBUyxLQUFLLEVBQUU7SUFDN0IsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLFNBQVMsS0FBSyxFQUFFLFNBQVMsS0FBSztFQUN2RDtBQUNGO0FBQ0EsbUNBQW1DLEdBQ25DLFNBQVMsYUFDUCxHQUFpQixFQUNqQixJQUFrQixFQUNsQixPQUE0QjtFQUU1QixvQkFBb0IsS0FBSyxNQUFNO0VBQy9CLEtBQUssWUFBWSxDQUFDLEtBQUs7RUFDdkIsSUFBSSxRQUFRLGtCQUFrQixFQUFFO0lBQzlCLE1BQU0sV0FBVyxLQUFLLFFBQVEsQ0FBQztJQUMvQixhQUFhLFNBQVMsS0FBSyxFQUFFO0lBQzdCLGFBQWEsU0FBUyxLQUFLLEVBQUU7SUFDN0IsS0FBSyxTQUFTLENBQUMsTUFBTSxTQUFTLEtBQUssRUFBRSxTQUFTLEtBQUs7RUFDckQ7QUFDRjtBQUVBLHdCQUF3QixHQUN4QixlQUFlLFlBQ2IsR0FBaUIsRUFDakIsSUFBa0IsRUFDbEIsT0FBNEI7RUFFNUIsTUFBTSxnQkFBZ0IsS0FBSyxNQUFNO0VBQ2pDLE1BQU0sb0JBQW9CLE1BQU0sS0FBSyxRQUFRLENBQUM7RUFDOUMsTUFBTSxPQUFPLGdCQUFnQixNQUFNLEtBQUssS0FBSyxDQUFDO0VBQzlDLElBQUksV0FBVztJQUNiLE1BQU0sS0FBSyxPQUFPLENBQUMsbUJBQW1CLE1BQU07TUFDMUMsTUFBTSxTQUFTLFFBQVEsUUFBUTtJQUNqQztFQUNGLE9BQU87SUFDTCxNQUFNLEtBQUssT0FBTyxDQUFDLG1CQUFtQjtFQUN4QztFQUNBLElBQUksUUFBUSxrQkFBa0IsRUFBRTtJQUM5QixNQUFNLFdBQVcsTUFBTSxLQUFLLEtBQUssQ0FBQztJQUNsQyxhQUFhLFNBQVMsS0FBSyxFQUFFO0lBQzdCLGFBQWEsU0FBUyxLQUFLLEVBQUU7SUFDN0IsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLFNBQVMsS0FBSyxFQUFFLFNBQVMsS0FBSztFQUN2RDtBQUNGO0FBRUEsc0NBQXNDLEdBQ3RDLFNBQVMsZ0JBQ1AsR0FBaUIsRUFDakIsSUFBa0IsRUFDbEIsT0FBNEI7RUFFNUIsb0JBQW9CLEtBQUssTUFBTTtFQUMvQixNQUFNLG9CQUFvQixLQUFLLFlBQVksQ0FBQztFQUM1QyxNQUFNLE9BQU8sZ0JBQWdCLEtBQUssU0FBUyxDQUFDO0VBQzVDLElBQUksV0FBVztJQUNiLEtBQUssV0FBVyxDQUFDLG1CQUFtQixNQUFNO01BQ3hDLE1BQU0sU0FBUyxRQUFRLFFBQVE7SUFDakM7RUFDRixPQUFPO0lBQ0wsS0FBSyxXQUFXLENBQUMsbUJBQW1CO0VBQ3RDO0VBRUEsSUFBSSxRQUFRLGtCQUFrQixFQUFFO0lBQzlCLE1BQU0sV0FBVyxLQUFLLFNBQVMsQ0FBQztJQUNoQyxhQUFhLFNBQVMsS0FBSyxFQUFFO0lBQzdCLGFBQWEsU0FBUyxLQUFLLEVBQUU7SUFDN0IsS0FBSyxTQUFTLENBQUMsTUFBTSxTQUFTLEtBQUssRUFBRSxTQUFTLEtBQUs7RUFDckQ7QUFDRjtBQUVBLGlDQUFpQyxHQUNqQyxlQUFlLFFBQ2IsR0FBaUIsRUFDakIsSUFBa0IsRUFDbEIsT0FBb0I7RUFFcEIsTUFBTSxXQUFXLE1BQU0sZ0JBQWdCLEtBQUssTUFBTTtJQUNoRCxHQUFHLE9BQU87SUFDVixVQUFVO0VBQ1o7RUFFQSxJQUFJLENBQUMsVUFBVTtJQUNiLE1BQU0sVUFBVTtFQUNsQjtFQUVBLElBQUksUUFBUSxrQkFBa0IsRUFBRTtJQUM5QixNQUFNLGNBQWMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUNwQyxhQUFhLFlBQVksS0FBSyxFQUFFO0lBQ2hDLGFBQWEsWUFBWSxLQUFLLEVBQUU7SUFDaEMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLFlBQVksS0FBSyxFQUFFLFlBQVksS0FBSztFQUM3RDtFQUVBLE1BQU0sYUFBYTtFQUNuQixPQUFPLGFBQWE7RUFFcEIsTUFBTSxXQUFXLEVBQUU7RUFFbkIsV0FBVyxNQUFNLFNBQVMsS0FBSyxPQUFPLENBQUMsS0FBTTtJQUMzQyxNQUFNLFVBQVUsS0FBSyxLQUFLLE1BQU0sSUFBSTtJQUNwQyxNQUFNLFdBQVcsS0FBSyxNQUFNLFNBQVM7SUFDckMsSUFBSSxNQUFNLFNBQVMsRUFBRTtNQUNuQixTQUFTLElBQUksQ0FBQyxZQUFZLFNBQVMsVUFBVTtJQUMvQyxPQUFPLElBQUksTUFBTSxXQUFXLEVBQUU7TUFDNUIsU0FBUyxJQUFJLENBQUMsUUFBUSxTQUFTLFVBQVU7SUFDM0MsT0FBTyxJQUFJLE1BQU0sTUFBTSxFQUFFO01BQ3ZCLFNBQVMsSUFBSSxDQUFDLFNBQVMsU0FBUyxVQUFVO0lBQzVDO0VBQ0Y7RUFFQSxNQUFNLFFBQVEsR0FBRyxDQUFDO0FBQ3BCO0FBRUEsOENBQThDLEdBQzlDLFNBQVMsWUFDUCxHQUFpQixFQUNqQixJQUFrQixFQUNsQixPQUFvQjtFQUVwQixNQUFNLFdBQVcsb0JBQW9CLEtBQUssTUFBTTtJQUM5QyxHQUFHLE9BQU87SUFDVixVQUFVO0VBQ1o7RUFFQSxJQUFJLENBQUMsVUFBVTtJQUNiLGNBQWM7RUFDaEI7RUFFQSxJQUFJLFFBQVEsa0JBQWtCLEVBQUU7SUFDOUIsTUFBTSxjQUFjLEtBQUssUUFBUSxDQUFDO0lBQ2xDLGFBQWEsWUFBWSxLQUFLLEVBQUU7SUFDaEMsYUFBYSxZQUFZLEtBQUssRUFBRTtJQUNoQyxLQUFLLFNBQVMsQ0FBQyxNQUFNLFlBQVksS0FBSyxFQUFFLFlBQVksS0FBSztFQUMzRDtFQUVBLE1BQU0sYUFBYTtFQUNuQixPQUFPLGFBQWE7RUFFcEIsS0FBSyxNQUFNLFNBQVMsS0FBSyxXQUFXLENBQUMsS0FBTTtJQUN6QyxNQUFNLFVBQVUsS0FBSyxLQUFLLE1BQU0sSUFBSTtJQUNwQyxNQUFNLFdBQVcsS0FBSyxNQUFNLFNBQVM7SUFDckMsSUFBSSxNQUFNLFNBQVMsRUFBRTtNQUNuQixnQkFBZ0IsU0FBUyxVQUFVO0lBQ3JDLE9BQU8sSUFBSSxNQUFNLFdBQVcsRUFBRTtNQUM1QixZQUFZLFNBQVMsVUFBVTtJQUNqQyxPQUFPLElBQUksTUFBTSxNQUFNLEVBQUU7TUFDdkIsYUFBYSxTQUFTLFVBQVU7SUFDbEM7RUFDRjtBQUNGO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4Q0MsR0FDRCxPQUFPLGVBQWUsS0FDcEIsR0FBaUIsRUFDakIsSUFBa0IsRUFDbEIsVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE1BQU0sUUFBUSxhQUFhO0VBQzNCLE9BQU8sUUFBUSxhQUFhO0VBRTVCLElBQUksUUFBUSxNQUFNO0lBQ2hCLE1BQU0sSUFBSSxNQUFNO0VBQ2xCO0VBRUEsTUFBTSxVQUFVLE1BQU0sS0FBSyxLQUFLLENBQUM7RUFFakMsSUFBSSxRQUFRLFdBQVcsSUFBSSxTQUFTLEtBQUssT0FBTztJQUM5QyxNQUFNLElBQUksTUFDUixDQUFDLGFBQWEsRUFBRSxJQUFJLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBRWpFO0VBRUEsSUFBSSxRQUFRLFNBQVMsRUFBRTtJQUNyQixNQUFNLFlBQVksS0FBSyxNQUFNO0VBQy9CLE9BQU8sSUFBSSxRQUFRLFdBQVcsRUFBRTtJQUM5QixNQUFNLFFBQVEsS0FBSyxNQUFNO0VBQzNCLE9BQU8sSUFBSSxRQUFRLE1BQU0sRUFBRTtJQUN6QixNQUFNLFNBQVMsS0FBSyxNQUFNO0VBQzVCO0FBQ0Y7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThDQyxHQUNELE9BQU8sU0FBUyxTQUNkLEdBQWlCLEVBQ2pCLElBQWtCLEVBQ2xCLFVBQXVCLENBQUMsQ0FBQztFQUV6QixNQUFNLFFBQVEsYUFBYTtFQUMzQixPQUFPLFFBQVEsYUFBYTtFQUU1QixJQUFJLFFBQVEsTUFBTTtJQUNoQixNQUFNLElBQUksTUFBTTtFQUNsQjtFQUVBLE1BQU0sVUFBVSxLQUFLLFNBQVMsQ0FBQztFQUUvQixJQUFJLFFBQVEsV0FBVyxJQUFJLFNBQVMsS0FBSyxPQUFPO0lBQzlDLE1BQU0sSUFBSSxNQUNSLENBQUMsYUFBYSxFQUFFLElBQUksZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFFakU7RUFFQSxJQUFJLFFBQVEsU0FBUyxFQUFFO0lBQ3JCLGdCQUFnQixLQUFLLE1BQU07RUFDN0IsT0FBTyxJQUFJLFFBQVEsV0FBVyxFQUFFO0lBQzlCLFlBQVksS0FBSyxNQUFNO0VBQ3pCLE9BQU8sSUFBSSxRQUFRLE1BQU0sRUFBRTtJQUN6QixhQUFhLEtBQUssTUFBTTtFQUMxQjtBQUNGIn0=
+// denoCacheMetadata=940947074505686398,1924711350815213423 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/385bb16ccbe5833897df28ba737d9f998e1c7bbed9de7a151df15888630ac12a.js b/vendor/gen/https/jsr.io/385bb16ccbe5833897df28ba737d9f998e1c7bbed9de7a151df15888630ac12a.js
new file mode 100644
index 0000000..5a76233
--- /dev/null
+++ b/vendor/gen/https/jsr.io/385bb16ccbe5833897df28ba737d9f998e1c7bbed9de7a151df15888630ac12a.js
@@ -0,0 +1,294 @@
+import { dirname, extname, fromFileUrl, SEPARATOR, toFileUrl } from "jsr:@std/path@^1.0.6";
+import { instantiate, WasmWorkspace } from "./wasm/loader.generated.js";
+export function findWorkspace(cwd, entryPoints, configPath) {
+ const cwdFileUrl = toFileUrl(cwd);
+ if (!cwdFileUrl.pathname.endsWith("/")) {
+ cwdFileUrl.pathname += "/";
+ }
+ let entrypoints;
+ let isConfigFile = false;
+ if (configPath !== undefined) {
+ entrypoints = [
+ configPath
+ ];
+ isConfigFile = true;
+ } else if (Array.isArray(entryPoints)) {
+ entrypoints = entryPoints.flatMap((entrypoint)=>{
+ let specifier;
+ if (typeof entrypoint === "string") {
+ specifier = entrypoint;
+ } else {
+ specifier = entrypoint.in;
+ }
+ const url = new URL(specifier, cwdFileUrl.href);
+ if (url.protocol === "file:") {
+ return [
+ dirname(fromFileUrl(url.href))
+ ];
+ } else {
+ return [];
+ }
+ });
+ } else if (typeof entryPoints === "object") {
+ entrypoints = Object.values(entryPoints).flatMap((entrypoint)=>{
+ const url = new URL(entrypoint, cwdFileUrl.href);
+ if (url.protocol === "file:") {
+ return [
+ dirname(fromFileUrl(url.href))
+ ];
+ } else {
+ return [];
+ }
+ });
+ } else {
+ entrypoints = [];
+ }
+ if (entrypoints.length === 0) {
+ entrypoints = [
+ cwd
+ ];
+ }
+ instantiate();
+ return WasmWorkspace.discover(entrypoints, isConfigFile);
+}
+export function mediaTypeToLoader(mediaType) {
+ switch(mediaType){
+ case "JavaScript":
+ case "Mjs":
+ return "js";
+ case "JSX":
+ return "jsx";
+ case "TypeScript":
+ case "Mts":
+ return "ts";
+ case "TSX":
+ return "tsx";
+ case "Json":
+ return "json";
+ default:
+ return null;
+ }
+}
+/**
+ * Turn a URL into an {@link EsbuildResolution} by splitting the URL into a
+ * namespace and path.
+ *
+ * For file URLs, the path returned is a file path not a URL path representing a
+ * file.
+ */ export function urlToEsbuildResolution(url) {
+ if (url.protocol === "file:") {
+ return {
+ path: fromFileUrl(url),
+ namespace: "file"
+ };
+ }
+ const namespace = url.protocol.slice(0, -1);
+ const path = url.href.slice(namespace.length + 1);
+ return {
+ path,
+ namespace
+ };
+}
+/**
+ * Turn an {@link EsbuildResolution} into a URL by joining the namespace and
+ * path into a URL string.
+ *
+ * For file URLs, the path is interpreted as a file path not as a URL path
+ * representing a file.
+ */ export function esbuildResolutionToURL(specifier) {
+ if (specifier.namespace === "file") {
+ return toFileUrl(specifier.path);
+ }
+ return new URL(`${specifier.namespace}:${specifier.path}`);
+}
+export function mapContentType(specifier, contentType) {
+ if (contentType !== null) {
+ const contentTypes = contentType.split(";");
+ const mediaType = contentTypes[0].toLowerCase();
+ switch(mediaType){
+ case "application/typescript":
+ case "text/typescript":
+ case "video/vnd.dlna.mpeg-tts":
+ case "video/mp2t":
+ case "application/x-typescript":
+ return mapJsLikeExtension(specifier, "TypeScript");
+ case "application/javascript":
+ case "text/javascript":
+ case "application/ecmascript":
+ case "text/ecmascript":
+ case "application/x-javascript":
+ case "application/node":
+ return mapJsLikeExtension(specifier, "JavaScript");
+ case "text/jsx":
+ return "JSX";
+ case "text/tsx":
+ return "TSX";
+ case "application/json":
+ case "text/json":
+ return "Json";
+ case "application/wasm":
+ return "Wasm";
+ case "text/plain":
+ case "application/octet-stream":
+ return mediaTypeFromSpecifier(specifier);
+ default:
+ return "Unknown";
+ }
+ } else {
+ return mediaTypeFromSpecifier(specifier);
+ }
+}
+function mapJsLikeExtension(specifier, defaultType) {
+ const path = specifier.pathname;
+ switch(extname(path)){
+ case ".jsx":
+ return "JSX";
+ case ".mjs":
+ return "Mjs";
+ case ".cjs":
+ return "Cjs";
+ case ".tsx":
+ return "TSX";
+ case ".ts":
+ if (path.endsWith(".d.ts")) {
+ return "Dts";
+ } else {
+ return defaultType;
+ }
+ case ".mts":
+ {
+ if (path.endsWith(".d.mts")) {
+ return "Dmts";
+ } else {
+ return defaultType == "JavaScript" ? "Mjs" : "Mts";
+ }
+ }
+ case ".cts":
+ {
+ if (path.endsWith(".d.cts")) {
+ return "Dcts";
+ } else {
+ return defaultType == "JavaScript" ? "Cjs" : "Cts";
+ }
+ }
+ default:
+ return defaultType;
+ }
+}
+export function mediaTypeFromSpecifier(specifier) {
+ const path = specifier.pathname;
+ switch(extname(path)){
+ case "":
+ if (path.endsWith("/.tsbuildinfo")) {
+ return "TsBuildInfo";
+ } else {
+ return "Unknown";
+ }
+ case ".ts":
+ if (path.endsWith(".d.ts")) {
+ return "Dts";
+ } else {
+ return "TypeScript";
+ }
+ case ".mts":
+ if (path.endsWith(".d.mts")) {
+ return "Dmts";
+ } else {
+ return "Mts";
+ }
+ case ".cts":
+ if (path.endsWith(".d.cts")) {
+ return "Dcts";
+ } else {
+ return "Cts";
+ }
+ case ".tsx":
+ return "TSX";
+ case ".js":
+ return "JavaScript";
+ case ".jsx":
+ return "JSX";
+ case ".mjs":
+ return "Mjs";
+ case ".cjs":
+ return "Cjs";
+ case ".json":
+ return "Json";
+ case ".wasm":
+ return "Wasm";
+ case ".tsbuildinfo":
+ return "TsBuildInfo";
+ case ".map":
+ return "SourceMap";
+ default:
+ return "Unknown";
+ }
+}
+export function parseNpmSpecifier(specifier) {
+ if (specifier.protocol !== "npm:") throw new Error("Invalid npm specifier");
+ const path = specifier.pathname;
+ const startIndex = path[0] === "/" ? 1 : 0;
+ let pathStartIndex;
+ let versionStartIndex;
+ if (path[startIndex] === "@") {
+ const firstSlash = path.indexOf("/", startIndex);
+ if (firstSlash === -1) {
+ throw new Error(`Invalid npm specifier: ${specifier}`);
+ }
+ pathStartIndex = path.indexOf("/", firstSlash + 1);
+ versionStartIndex = path.indexOf("@", firstSlash + 1);
+ } else {
+ pathStartIndex = path.indexOf("/", startIndex);
+ versionStartIndex = path.indexOf("@", startIndex);
+ }
+ if (pathStartIndex === -1) pathStartIndex = path.length;
+ if (versionStartIndex === -1) versionStartIndex = path.length;
+ if (versionStartIndex > pathStartIndex) {
+ versionStartIndex = pathStartIndex;
+ }
+ if (startIndex === versionStartIndex) {
+ throw new Error(`Invalid npm specifier: ${specifier}`);
+ }
+ return {
+ name: path.slice(startIndex, versionStartIndex),
+ version: versionStartIndex === pathStartIndex ? null : path.slice(versionStartIndex + 1, pathStartIndex),
+ path: pathStartIndex === path.length ? null : path.slice(pathStartIndex)
+ };
+}
+export function parseJsrSpecifier(specifier) {
+ if (specifier.protocol !== "jsr:") throw new Error("Invalid jsr specifier");
+ const path = specifier.pathname;
+ const startIndex = path[0] === "/" ? 1 : 0;
+ if (path[startIndex] !== "@") {
+ throw new Error(`Invalid jsr specifier: ${specifier}`);
+ }
+ const firstSlash = path.indexOf("/", startIndex);
+ if (firstSlash === -1) {
+ throw new Error(`Invalid jsr specifier: ${specifier}`);
+ }
+ let pathStartIndex = path.indexOf("/", firstSlash + 1);
+ let versionStartIndex = path.indexOf("@", firstSlash + 1);
+ if (pathStartIndex === -1) pathStartIndex = path.length;
+ if (versionStartIndex === -1) versionStartIndex = path.length;
+ if (versionStartIndex > pathStartIndex) {
+ versionStartIndex = pathStartIndex;
+ }
+ if (startIndex === versionStartIndex) {
+ throw new Error(`Invalid jsr specifier: ${specifier}`);
+ }
+ return {
+ name: path.slice(startIndex, versionStartIndex),
+ version: versionStartIndex === pathStartIndex ? null : path.slice(versionStartIndex + 1, pathStartIndex),
+ path: pathStartIndex === path.length ? null : path.slice(pathStartIndex)
+ };
+}
+const SLASH_NODE_MODULES_SLASH = `${SEPARATOR}node_modules${SEPARATOR}`;
+const SLASH_NODE_MODULES = `${SEPARATOR}node_modules`;
+export function isInNodeModules(path) {
+ return path.includes(SLASH_NODE_MODULES_SLASH) || path.endsWith(SLASH_NODE_MODULES);
+}
+export function isNodeModulesResolution(args) {
+ return (args.namespace === "" || args.namespace === "file") && (isInNodeModules(args.resolveDir) || isInNodeModules(args.path) || isInNodeModules(args.importer));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL3NyYy9zaGFyZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlybmFtZSwgZXh0bmFtZSwgZnJvbUZpbGVVcmwsIFNFUEFSQVRPUiwgdG9GaWxlVXJsIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC42XCI7XG5pbXBvcnQgdHlwZSB7IE1lZGlhVHlwZSB9IGZyb20gXCIuL2Rlbm8udHNcIjtcbmltcG9ydCB0eXBlICogYXMgZXNidWlsZCBmcm9tIFwiLi9lc2J1aWxkX3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSwgV2FzbVdvcmtzcGFjZSB9IGZyb20gXCIuL3dhc20vbG9hZGVyLmdlbmVyYXRlZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZE9wdGlvbnMgfSBmcm9tIFwiLi9lc2J1aWxkX3R5cGVzLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVyIHtcbiAgcmVzb2x2ZShzcGVjaWZpZXI6IFVSTCk6IFByb21pc2U8TG9hZGVyUmVzb2x1dGlvbj47XG4gIGxvYWRFc20oc3BlY2lmaWVyOiBVUkwpOiBQcm9taXNlPGVzYnVpbGQuT25Mb2FkUmVzdWx0IHwgdW5kZWZpbmVkPjtcblxuICBwYWNrYWdlSWRGcm9tTmFtZUluUGFja2FnZT8oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmVudFBhY2thZ2VJZDogc3RyaW5nLFxuICApOiBzdHJpbmcgfCBudWxsO1xuICBub2RlTW9kdWxlc0RpckZvclBhY2thZ2U/KG5wbVBhY2thZ2VJZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcblxuICBbU3ltYm9sLmRpc3Bvc2VdPygpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZShcbiAgY3dkOiBzdHJpbmcsXG4gIGVudHJ5UG9pbnRzOiBCdWlsZE9wdGlvbnNbXCJlbnRyeVBvaW50c1wiXSxcbiAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogV2FzbVdvcmtzcGFjZSB7XG4gIGNvbnN0IGN3ZEZpbGVVcmwgPSB0b0ZpbGVVcmwoY3dkKTtcbiAgaWYgKCFjd2RGaWxlVXJsLnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgIGN3ZEZpbGVVcmwucGF0aG5hbWUgKz0gXCIvXCI7XG4gIH1cblxuICBsZXQgZW50cnlwb2ludHM6IEFycmF5PHN0cmluZz47XG4gIGxldCBpc0NvbmZpZ0ZpbGUgPSBmYWxzZTtcbiAgaWYgKGNvbmZpZ1BhdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGVudHJ5cG9pbnRzID0gW2NvbmZpZ1BhdGhdO1xuICAgIGlzQ29uZmlnRmlsZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbnRyeVBvaW50cykpIHtcbiAgICBlbnRyeXBvaW50cyA9IGVudHJ5UG9pbnRzLmZsYXRNYXAoXG4gICAgICAoZW50cnlwb2ludCkgPT4ge1xuICAgICAgICBsZXQgc3BlY2lmaWVyOiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeXBvaW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgc3BlY2lmaWVyID0gZW50cnlwb2ludDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGVjaWZpZXIgPSBlbnRyeXBvaW50LmluO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChzcGVjaWZpZXIsIGN3ZEZpbGVVcmwuaHJlZik7XG4gICAgICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIikge1xuICAgICAgICAgIHJldHVybiBbZGlybmFtZShmcm9tRmlsZVVybCh1cmwuaHJlZikpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnlQb2ludHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBlbnRyeXBvaW50cyA9IE9iamVjdC52YWx1ZXMoZW50cnlQb2ludHMpLmZsYXRNYXAoXG4gICAgICAoZW50cnlwb2ludCkgPT4ge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGVudHJ5cG9pbnQsIGN3ZEZpbGVVcmwuaHJlZik7XG4gICAgICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIikge1xuICAgICAgICAgIHJldHVybiBbZGlybmFtZShmcm9tRmlsZVVybCh1cmwuaHJlZikpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRyeXBvaW50cyA9IFtdO1xuICB9XG4gIGlmIChlbnRyeXBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICBlbnRyeXBvaW50cyA9IFtjd2RdO1xuICB9XG5cbiAgaW5zdGFudGlhdGUoKTtcbiAgcmV0dXJuIFdhc21Xb3Jrc3BhY2UuZGlzY292ZXIoZW50cnlwb2ludHMsIGlzQ29uZmlnRmlsZSk7XG59XG5cbmV4cG9ydCB0eXBlIExvYWRlclJlc29sdXRpb24gPVxuICB8IExvYWRlclJlc29sdXRpb25Fc21cbiAgfCBMb2FkZXJSZXNvbHV0aW9uTnBtXG4gIHwgTG9hZGVyUmVzb2x1dGlvbk5vZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVyUmVzb2x1dGlvbkVzbSB7XG4gIGtpbmQ6IFwiZXNtXCI7XG4gIHNwZWNpZmllcjogVVJMO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclJlc29sdXRpb25OcG0ge1xuICBraW5kOiBcIm5wbVwiO1xuICBwYWNrYWdlSWQ6IHN0cmluZztcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclJlc29sdXRpb25Ob2RlIHtcbiAga2luZDogXCJub2RlXCI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhVHlwZVRvTG9hZGVyKG1lZGlhVHlwZTogTWVkaWFUeXBlKTogZXNidWlsZC5Mb2FkZXIgfCBudWxsIHtcbiAgc3dpdGNoIChtZWRpYVR5cGUpIHtcbiAgICBjYXNlIFwiSmF2YVNjcmlwdFwiOlxuICAgIGNhc2UgXCJNanNcIjpcbiAgICAgIHJldHVybiBcImpzXCI7XG4gICAgY2FzZSBcIkpTWFwiOlxuICAgICAgcmV0dXJuIFwianN4XCI7XG4gICAgY2FzZSBcIlR5cGVTY3JpcHRcIjpcbiAgICBjYXNlIFwiTXRzXCI6XG4gICAgICByZXR1cm4gXCJ0c1wiO1xuICAgIGNhc2UgXCJUU1hcIjpcbiAgICAgIHJldHVybiBcInRzeFwiO1xuICAgIGNhc2UgXCJKc29uXCI6XG4gICAgICByZXR1cm4gXCJqc29uXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKiBFc2J1aWxkJ3MgcmVwcmVzZW50YXRpb24gb2YgYSBtb2R1bGUgc3BlY2lmaWVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFc2J1aWxkUmVzb2x1dGlvbiB7XG4gIC8qKiBUaGUgbmFtZXNwYWNlLCBsaWtlIGBmaWxlYCwgYGh0dHBzYCwgb3IgYG5wbWAuICovXG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogVGhlIHBhdGguIFdoZW4gdGhlIG5hbWVzcGFjZSBpcyBgZmlsZWAsIHRoaXMgaXMgYSBmaWxlIHBhdGguIE90aGVyd2lzZVxuICAgKiB0aGlzIGlzIGV2ZXJ5dGhpbmcgaW4gYSBVUkwgd2l0aCB0aGUgbmFtZXNwYWNlIGFzIHRoZSBzY2hlbWUsIGFmdGVyIHRoZVxuICAgKiBgOmAgb2YgdGhlIHNjaGVtZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR1cm4gYSBVUkwgaW50byBhbiB7QGxpbmsgRXNidWlsZFJlc29sdXRpb259IGJ5IHNwbGl0dGluZyB0aGUgVVJMIGludG8gYVxuICogbmFtZXNwYWNlIGFuZCBwYXRoLlxuICpcbiAqIEZvciBmaWxlIFVSTHMsIHRoZSBwYXRoIHJldHVybmVkIGlzIGEgZmlsZSBwYXRoIG5vdCBhIFVSTCBwYXRoIHJlcHJlc2VudGluZyBhXG4gKiBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsVG9Fc2J1aWxkUmVzb2x1dGlvbih1cmw6IFVSTCk6IEVzYnVpbGRSZXNvbHV0aW9uIHtcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gXCJmaWxlOlwiKSB7XG4gICAgcmV0dXJuIHsgcGF0aDogZnJvbUZpbGVVcmwodXJsKSwgbmFtZXNwYWNlOiBcImZpbGVcIiB9O1xuICB9XG5cbiAgY29uc3QgbmFtZXNwYWNlID0gdXJsLnByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgY29uc3QgcGF0aCA9IHVybC5ocmVmLnNsaWNlKG5hbWVzcGFjZS5sZW5ndGggKyAxKTtcbiAgcmV0dXJuIHsgcGF0aCwgbmFtZXNwYWNlIH07XG59XG5cbi8qKlxuICogVHVybiBhbiB7QGxpbmsgRXNidWlsZFJlc29sdXRpb259IGludG8gYSBVUkwgYnkgam9pbmluZyB0aGUgbmFtZXNwYWNlIGFuZFxuICogcGF0aCBpbnRvIGEgVVJMIHN0cmluZy5cbiAqXG4gKiBGb3IgZmlsZSBVUkxzLCB0aGUgcGF0aCBpcyBpbnRlcnByZXRlZCBhcyBhIGZpbGUgcGF0aCBub3QgYXMgYSBVUkwgcGF0aFxuICogcmVwcmVzZW50aW5nIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzYnVpbGRSZXNvbHV0aW9uVG9VUkwoc3BlY2lmaWVyOiBFc2J1aWxkUmVzb2x1dGlvbik6IFVSTCB7XG4gIGlmIChzcGVjaWZpZXIubmFtZXNwYWNlID09PSBcImZpbGVcIikge1xuICAgIHJldHVybiB0b0ZpbGVVcmwoc3BlY2lmaWVyLnBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBVUkwoYCR7c3BlY2lmaWVyLm5hbWVzcGFjZX06JHtzcGVjaWZpZXIucGF0aH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcENvbnRlbnRUeXBlKFxuICBzcGVjaWZpZXI6IFVSTCxcbiAgY29udGVudFR5cGU6IHN0cmluZyB8IG51bGwsXG4pOiBNZWRpYVR5cGUge1xuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZXMgPSBjb250ZW50VHlwZS5zcGxpdChcIjtcIik7XG4gICAgY29uc3QgbWVkaWFUeXBlID0gY29udGVudFR5cGVzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChtZWRpYVR5cGUpIHtcbiAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi90eXBlc2NyaXB0XCI6XG4gICAgICBjYXNlIFwidGV4dC90eXBlc2NyaXB0XCI6XG4gICAgICBjYXNlIFwidmlkZW8vdm5kLmRsbmEubXBlZy10dHNcIjpcbiAgICAgIGNhc2UgXCJ2aWRlby9tcDJ0XCI6XG4gICAgICBjYXNlIFwiYXBwbGljYXRpb24veC10eXBlc2NyaXB0XCI6XG4gICAgICAgIHJldHVybiBtYXBKc0xpa2VFeHRlbnNpb24oc3BlY2lmaWVyLCBcIlR5cGVTY3JpcHRcIik7XG4gICAgICBjYXNlIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiOlxuICAgICAgY2FzZSBcInRleHQvamF2YXNjcmlwdFwiOlxuICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0L2VjbWFzY3JpcHRcIjpcbiAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIjpcbiAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9ub2RlXCI6XG4gICAgICAgIHJldHVybiBtYXBKc0xpa2VFeHRlbnNpb24oc3BlY2lmaWVyLCBcIkphdmFTY3JpcHRcIik7XG4gICAgICBjYXNlIFwidGV4dC9qc3hcIjpcbiAgICAgICAgcmV0dXJuIFwiSlNYXCI7XG4gICAgICBjYXNlIFwidGV4dC90c3hcIjpcbiAgICAgICAgcmV0dXJuIFwiVFNYXCI7XG4gICAgICBjYXNlIFwiYXBwbGljYXRpb24vanNvblwiOlxuICAgICAgY2FzZSBcInRleHQvanNvblwiOlxuICAgICAgICByZXR1cm4gXCJKc29uXCI7XG4gICAgICBjYXNlIFwiYXBwbGljYXRpb24vd2FzbVwiOlxuICAgICAgICByZXR1cm4gXCJXYXNtXCI7XG4gICAgICBjYXNlIFwidGV4dC9wbGFpblwiOlxuICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiOlxuICAgICAgICByZXR1cm4gbWVkaWFUeXBlRnJvbVNwZWNpZmllcihzcGVjaWZpZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiVW5rbm93blwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWVkaWFUeXBlRnJvbVNwZWNpZmllcihzcGVjaWZpZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEpzTGlrZUV4dGVuc2lvbihcbiAgc3BlY2lmaWVyOiBVUkwsXG4gIGRlZmF1bHRUeXBlOiBNZWRpYVR5cGUsXG4pOiBNZWRpYVR5cGUge1xuICBjb25zdCBwYXRoID0gc3BlY2lmaWVyLnBhdGhuYW1lO1xuICBzd2l0Y2ggKGV4dG5hbWUocGF0aCkpIHtcbiAgICBjYXNlIFwiLmpzeFwiOlxuICAgICAgcmV0dXJuIFwiSlNYXCI7XG4gICAgY2FzZSBcIi5tanNcIjpcbiAgICAgIHJldHVybiBcIk1qc1wiO1xuICAgIGNhc2UgXCIuY2pzXCI6XG4gICAgICByZXR1cm4gXCJDanNcIjtcbiAgICBjYXNlIFwiLnRzeFwiOlxuICAgICAgcmV0dXJuIFwiVFNYXCI7XG4gICAgY2FzZSBcIi50c1wiOlxuICAgICAgaWYgKHBhdGguZW5kc1dpdGgoXCIuZC50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJEdHNcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VHlwZTtcbiAgICAgIH1cbiAgICBjYXNlIFwiLm10c1wiOiB7XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5kLm10c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJEbXRzXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFR5cGUgPT0gXCJKYXZhU2NyaXB0XCIgPyBcIk1qc1wiIDogXCJNdHNcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSBcIi5jdHNcIjoge1xuICAgICAgaWYgKHBhdGguZW5kc1dpdGgoXCIuZC5jdHNcIikpIHtcbiAgICAgICAgcmV0dXJuIFwiRGN0c1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRUeXBlID09IFwiSmF2YVNjcmlwdFwiID8gXCJDanNcIiA6IFwiQ3RzXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGVmYXVsdFR5cGU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhVHlwZUZyb21TcGVjaWZpZXIoc3BlY2lmaWVyOiBVUkwpOiBNZWRpYVR5cGUge1xuICBjb25zdCBwYXRoID0gc3BlY2lmaWVyLnBhdGhuYW1lO1xuICBzd2l0Y2ggKGV4dG5hbWUocGF0aCkpIHtcbiAgICBjYXNlIFwiXCI6XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi8udHNidWlsZGluZm9cIikpIHtcbiAgICAgICAgcmV0dXJuIFwiVHNCdWlsZEluZm9cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlVua25vd25cIjtcbiAgICAgIH1cbiAgICBjYXNlIFwiLnRzXCI6XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5kLnRzXCIpKSB7XG4gICAgICAgIHJldHVybiBcIkR0c1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiVHlwZVNjcmlwdFwiO1xuICAgICAgfVxuICAgIGNhc2UgXCIubXRzXCI6XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5kLm10c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJEbXRzXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJNdHNcIjtcbiAgICAgIH1cbiAgICBjYXNlIFwiLmN0c1wiOlxuICAgICAgaWYgKHBhdGguZW5kc1dpdGgoXCIuZC5jdHNcIikpIHtcbiAgICAgICAgcmV0dXJuIFwiRGN0c1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiQ3RzXCI7XG4gICAgICB9XG4gICAgY2FzZSBcIi50c3hcIjpcbiAgICAgIHJldHVybiBcIlRTWFwiO1xuICAgIGNhc2UgXCIuanNcIjpcbiAgICAgIHJldHVybiBcIkphdmFTY3JpcHRcIjtcbiAgICBjYXNlIFwiLmpzeFwiOlxuICAgICAgcmV0dXJuIFwiSlNYXCI7XG4gICAgY2FzZSBcIi5tanNcIjpcbiAgICAgIHJldHVybiBcIk1qc1wiO1xuICAgIGNhc2UgXCIuY2pzXCI6XG4gICAgICByZXR1cm4gXCJDanNcIjtcbiAgICBjYXNlIFwiLmpzb25cIjpcbiAgICAgIHJldHVybiBcIkpzb25cIjtcbiAgICBjYXNlIFwiLndhc21cIjpcbiAgICAgIHJldHVybiBcIldhc21cIjtcbiAgICBjYXNlIFwiLnRzYnVpbGRpbmZvXCI6XG4gICAgICByZXR1cm4gXCJUc0J1aWxkSW5mb1wiO1xuICAgIGNhc2UgXCIubWFwXCI6XG4gICAgICByZXR1cm4gXCJTb3VyY2VNYXBcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiVW5rbm93blwiO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnBtU3BlY2lmaWVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBwYXRoOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOcG1TcGVjaWZpZXIoc3BlY2lmaWVyOiBVUkwpOiBOcG1TcGVjaWZpZXIge1xuICBpZiAoc3BlY2lmaWVyLnByb3RvY29sICE9PSBcIm5wbTpcIikgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBucG0gc3BlY2lmaWVyXCIpO1xuICBjb25zdCBwYXRoID0gc3BlY2lmaWVyLnBhdGhuYW1lO1xuICBjb25zdCBzdGFydEluZGV4ID0gcGF0aFswXSA9PT0gXCIvXCIgPyAxIDogMDtcbiAgbGV0IHBhdGhTdGFydEluZGV4O1xuICBsZXQgdmVyc2lvblN0YXJ0SW5kZXg7XG4gIGlmIChwYXRoW3N0YXJ0SW5kZXhdID09PSBcIkBcIikge1xuICAgIGNvbnN0IGZpcnN0U2xhc2ggPSBwYXRoLmluZGV4T2YoXCIvXCIsIHN0YXJ0SW5kZXgpO1xuICAgIGlmIChmaXJzdFNsYXNoID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5wbSBzcGVjaWZpZXI6ICR7c3BlY2lmaWVyfWApO1xuICAgIH1cbiAgICBwYXRoU3RhcnRJbmRleCA9IHBhdGguaW5kZXhPZihcIi9cIiwgZmlyc3RTbGFzaCArIDEpO1xuICAgIHZlcnNpb25TdGFydEluZGV4ID0gcGF0aC5pbmRleE9mKFwiQFwiLCBmaXJzdFNsYXNoICsgMSk7XG4gIH0gZWxzZSB7XG4gICAgcGF0aFN0YXJ0SW5kZXggPSBwYXRoLmluZGV4T2YoXCIvXCIsIHN0YXJ0SW5kZXgpO1xuICAgIHZlcnNpb25TdGFydEluZGV4ID0gcGF0aC5pbmRleE9mKFwiQFwiLCBzdGFydEluZGV4KTtcbiAgfVxuXG4gIGlmIChwYXRoU3RhcnRJbmRleCA9PT0gLTEpIHBhdGhTdGFydEluZGV4ID0gcGF0aC5sZW5ndGg7XG4gIGlmICh2ZXJzaW9uU3RhcnRJbmRleCA9PT0gLTEpIHZlcnNpb25TdGFydEluZGV4ID0gcGF0aC5sZW5ndGg7XG5cbiAgaWYgKHZlcnNpb25TdGFydEluZGV4ID4gcGF0aFN0YXJ0SW5kZXgpIHtcbiAgICB2ZXJzaW9uU3RhcnRJbmRleCA9IHBhdGhTdGFydEluZGV4O1xuICB9XG5cbiAgaWYgKHN0YXJ0SW5kZXggPT09IHZlcnNpb25TdGFydEluZGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5wbSBzcGVjaWZpZXI6ICR7c3BlY2lmaWVyfWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwYXRoLnNsaWNlKHN0YXJ0SW5kZXgsIHZlcnNpb25TdGFydEluZGV4KSxcbiAgICB2ZXJzaW9uOiB2ZXJzaW9uU3RhcnRJbmRleCA9PT0gcGF0aFN0YXJ0SW5kZXhcbiAgICAgID8gbnVsbFxuICAgICAgOiBwYXRoLnNsaWNlKHZlcnNpb25TdGFydEluZGV4ICsgMSwgcGF0aFN0YXJ0SW5kZXgpLFxuICAgIHBhdGg6IHBhdGhTdGFydEluZGV4ID09PSBwYXRoLmxlbmd0aCA/IG51bGwgOiBwYXRoLnNsaWNlKHBhdGhTdGFydEluZGV4KSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc3JTcGVjaWZpZXIge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHBhdGg6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpzclNwZWNpZmllcihzcGVjaWZpZXI6IFVSTCk6IEpzclNwZWNpZmllciB7XG4gIGlmIChzcGVjaWZpZXIucHJvdG9jb2wgIT09IFwianNyOlwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGpzciBzcGVjaWZpZXJcIik7XG4gIGNvbnN0IHBhdGggPSBzcGVjaWZpZXIucGF0aG5hbWU7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBwYXRoWzBdID09PSBcIi9cIiA/IDEgOiAwO1xuICBpZiAocGF0aFtzdGFydEluZGV4XSAhPT0gXCJAXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQganNyIHNwZWNpZmllcjogJHtzcGVjaWZpZXJ9YCk7XG4gIH1cbiAgY29uc3QgZmlyc3RTbGFzaCA9IHBhdGguaW5kZXhPZihcIi9cIiwgc3RhcnRJbmRleCk7XG4gIGlmIChmaXJzdFNsYXNoID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBqc3Igc3BlY2lmaWVyOiAke3NwZWNpZmllcn1gKTtcbiAgfVxuICBsZXQgcGF0aFN0YXJ0SW5kZXggPSBwYXRoLmluZGV4T2YoXCIvXCIsIGZpcnN0U2xhc2ggKyAxKTtcbiAgbGV0IHZlcnNpb25TdGFydEluZGV4ID0gcGF0aC5pbmRleE9mKFwiQFwiLCBmaXJzdFNsYXNoICsgMSk7XG5cbiAgaWYgKHBhdGhTdGFydEluZGV4ID09PSAtMSkgcGF0aFN0YXJ0SW5kZXggPSBwYXRoLmxlbmd0aDtcbiAgaWYgKHZlcnNpb25TdGFydEluZGV4ID09PSAtMSkgdmVyc2lvblN0YXJ0SW5kZXggPSBwYXRoLmxlbmd0aDtcblxuICBpZiAodmVyc2lvblN0YXJ0SW5kZXggPiBwYXRoU3RhcnRJbmRleCkge1xuICAgIHZlcnNpb25TdGFydEluZGV4ID0gcGF0aFN0YXJ0SW5kZXg7XG4gIH1cblxuICBpZiAoc3RhcnRJbmRleCA9PT0gdmVyc2lvblN0YXJ0SW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQganNyIHNwZWNpZmllcjogJHtzcGVjaWZpZXJ9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IHBhdGguc2xpY2Uoc3RhcnRJbmRleCwgdmVyc2lvblN0YXJ0SW5kZXgpLFxuICAgIHZlcnNpb246IHZlcnNpb25TdGFydEluZGV4ID09PSBwYXRoU3RhcnRJbmRleFxuICAgICAgPyBudWxsXG4gICAgICA6IHBhdGguc2xpY2UodmVyc2lvblN0YXJ0SW5kZXggKyAxLCBwYXRoU3RhcnRJbmRleCksXG4gICAgcGF0aDogcGF0aFN0YXJ0SW5kZXggPT09IHBhdGgubGVuZ3RoID8gbnVsbCA6IHBhdGguc2xpY2UocGF0aFN0YXJ0SW5kZXgpLFxuICB9O1xufVxuXG5jb25zdCBTTEFTSF9OT0RFX01PRFVMRVNfU0xBU0ggPSBgJHtTRVBBUkFUT1J9bm9kZV9tb2R1bGVzJHtTRVBBUkFUT1J9YDtcbmNvbnN0IFNMQVNIX05PREVfTU9EVUxFUyA9IGAke1NFUEFSQVRPUn1ub2RlX21vZHVsZXNgO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJbk5vZGVNb2R1bGVzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGF0aC5pbmNsdWRlcyhTTEFTSF9OT0RFX01PRFVMRVNfU0xBU0gpIHx8XG4gICAgcGF0aC5lbmRzV2l0aChTTEFTSF9OT0RFX01PRFVMRVMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTW9kdWxlc1Jlc29sdXRpb24oYXJnczogZXNidWlsZC5PblJlc29sdmVBcmdzKSB7XG4gIHJldHVybiAoXG4gICAgKGFyZ3MubmFtZXNwYWNlID09PSBcIlwiIHx8IGFyZ3MubmFtZXNwYWNlID09PSBcImZpbGVcIikgJiZcbiAgICAoaXNJbk5vZGVNb2R1bGVzKGFyZ3MucmVzb2x2ZURpcikgfHwgaXNJbk5vZGVNb2R1bGVzKGFyZ3MucGF0aCkgfHxcbiAgICAgIGlzSW5Ob2RlTW9kdWxlcyhhcmdzLmltcG9ydGVyKSlcbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLFFBQVEsdUJBQXVCO0FBRzNGLFNBQVMsV0FBVyxFQUFFLGFBQWEsUUFBUSw2QkFBNkI7QUFnQnhFLE9BQU8sU0FBUyxjQUNkLEdBQVcsRUFDWCxXQUF3QyxFQUN4QyxVQUE4QjtFQUU5QixNQUFNLGFBQWEsVUFBVTtFQUM3QixJQUFJLENBQUMsV0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdEMsV0FBVyxRQUFRLElBQUk7RUFDekI7RUFFQSxJQUFJO0VBQ0osSUFBSSxlQUFlO0VBQ25CLElBQUksZUFBZSxXQUFXO0lBQzVCLGNBQWM7TUFBQztLQUFXO0lBQzFCLGVBQWU7RUFDakIsT0FBTyxJQUFJLE1BQU0sT0FBTyxDQUFDLGNBQWM7SUFDckMsY0FBYyxZQUFZLE9BQU8sQ0FDL0IsQ0FBQztNQUNDLElBQUk7TUFFSixJQUFJLE9BQU8sZUFBZSxVQUFVO1FBQ2xDLFlBQVk7TUFDZCxPQUFPO1FBQ0wsWUFBWSxXQUFXLEVBQUU7TUFDM0I7TUFFQSxNQUFNLE1BQU0sSUFBSSxJQUFJLFdBQVcsV0FBVyxJQUFJO01B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
+// denoCacheMetadata=17538940659706774254,15655509625788679305 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/38aa7b6afdc64af601c4eab0a42f4f139c1497a1452d607daaa6823c21f533be.js b/vendor/gen/https/jsr.io/38aa7b6afdc64af601c4eab0a42f4f139c1497a1452d607daaa6823c21f533be.js
new file mode 100644
index 0000000..a888356
--- /dev/null
+++ b/vendor/gen/https/jsr.io/38aa7b6afdc64af601c4eab0a42f4f139c1497a1452d607daaa6823c21f533be.js
@@ -0,0 +1,35 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { basename as posixBasename } from "./posix/basename.ts";
+import { basename as windowsBasename } from "./windows/basename.ts";
+/**
+ * Return the last portion of a path.
+ *
+ * The trailing directory separators are ignored, and optional suffix is
+ * removed.
+ *
+ * @example Usage
+ * ```ts
+ * import { basename } from "@std/path/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(basename("C:\\user\\Documents\\image.png"), "image.png");
+ * } else {
+ * assertEquals(basename("/home/user/Documents/image.png"), "image.png");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `basename` from `@std/path/unstable-basename`.
+ *
+ * @param path Path to extract the name from.
+ * @param suffix Suffix to remove from extracted name.
+ *
+ * @returns The basename of the path.
+ */ export function basename(path, suffix = "") {
+ return isWindows ? windowsBasename(path, suffix) : posixBasename(path, suffix);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9iYXNlbmFtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IGJhc2VuYW1lIGFzIHBvc2l4QmFzZW5hbWUgfSBmcm9tIFwiLi9wb3NpeC9iYXNlbmFtZS50c1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUgYXMgd2luZG93c0Jhc2VuYW1lIH0gZnJvbSBcIi4vd2luZG93cy9iYXNlbmFtZS50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBwb3J0aW9uIG9mIGEgcGF0aC5cbiAqXG4gKiBUaGUgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXJlIGlnbm9yZWQsIGFuZCBvcHRpb25hbCBzdWZmaXggaXNcbiAqIHJlbW92ZWQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJAc3RkL3BhdGgvYmFzZW5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCJDOlxcXFx1c2VyXFxcXERvY3VtZW50c1xcXFxpbWFnZS5wbmdcIiksIFwiaW1hZ2UucG5nXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiL2hvbWUvdXNlci9Eb2N1bWVudHMvaW1hZ2UucG5nXCIpLCBcImltYWdlLnBuZ1wiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGJhc2VuYW1lYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtYmFzZW5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gZXh0cmFjdCB0aGUgbmFtZSBmcm9tLlxuICogQHBhcmFtIHN1ZmZpeCBTdWZmaXggdG8gcmVtb3ZlIGZyb20gZXh0cmFjdGVkIG5hbWUuXG4gKlxuICogQHJldHVybnMgVGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBzdWZmaXggPSBcIlwiKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c0Jhc2VuYW1lKHBhdGgsIHN1ZmZpeClcbiAgICA6IHBvc2l4QmFzZW5hbWUocGF0aCwgc3VmZml4KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxZQUFZLGFBQWEsUUFBUSxzQkFBc0I7QUFDaEUsU0FBUyxZQUFZLGVBQWUsUUFBUSx3QkFBd0I7QUFFcEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QkMsR0FDRCxPQUFPLFNBQVMsU0FBUyxJQUFZLEVBQUUsU0FBUyxFQUFFO0VBQ2hELE9BQU8sWUFDSCxnQkFBZ0IsTUFBTSxVQUN0QixjQUFjLE1BQU07QUFDMUIifQ==
+// denoCacheMetadata=8543452360371999416,1861422178206828717 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3a61a512dbdae4e3b6f7e30b820e02c70fe4972d886f28435219ed65178c2b83.js b/vendor/gen/https/jsr.io/3a61a512dbdae4e3b6f7e30b820e02c70fe4972d886f28435219ed65178c2b83.js
new file mode 100644
index 0000000..f5a6912
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3a61a512dbdae4e3b6f7e30b820e02c70fe4972d886f28435219ed65178c2b83.js
@@ -0,0 +1,7 @@
+// deno-lint-ignore-file no-explicit-any
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+// Check Deno, then the remaining runtimes (e.g. Node, Bun and the browser)
+export const isWindows = globalThis.Deno?.build.os === "windows" || globalThis.navigator?.platform?.startsWith("Win") || globalThis.process?.platform?.startsWith("win") || false;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZGVuby1saW50LWlnbm9yZS1maWxlIG5vLWV4cGxpY2l0LWFueVxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLy8gQ2hlY2sgRGVubywgdGhlbiB0aGUgcmVtYWluaW5nIHJ1bnRpbWVzIChlLmcuIE5vZGUsIEJ1biBhbmQgdGhlIGJyb3dzZXIpXG5leHBvcnQgY29uc3QgaXNXaW5kb3dzOiBib29sZWFuID1cbiAgKGdsb2JhbFRoaXMgYXMgYW55KS5EZW5vPy5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIgfHxcbiAgKGdsb2JhbFRoaXMgYXMgYW55KS5uYXZpZ2F0b3I/LnBsYXRmb3JtPy5zdGFydHNXaXRoKFwiV2luXCIpIHx8XG4gIChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2Vzcz8ucGxhdGZvcm0/LnN0YXJ0c1dpdGgoXCJ3aW5cIikgfHxcbiAgZmFsc2U7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsMkVBQTJFO0FBQzNFLE9BQU8sTUFBTSxZQUNYLEFBQUMsV0FBbUIsSUFBSSxFQUFFLE1BQU0sT0FBTyxhQUN2QyxBQUFDLFdBQW1CLFNBQVMsRUFBRSxVQUFVLFdBQVcsVUFDcEQsQUFBQyxXQUFtQixPQUFPLEVBQUUsVUFBVSxXQUFXLFVBQ2xELE1BQU0ifQ==
+// denoCacheMetadata=2713007950931200486,4805621716592831700 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3b7cb2596c03a339e2fc597548be8d6fe74112b478dd5206fe023f7a51cf2e7e.js b/vendor/gen/https/jsr.io/3b7cb2596c03a339e2fc597548be8d6fe74112b478dd5206fe023f7a51cf2e7e.js
new file mode 100644
index 0000000..3119ded
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3b7cb2596c03a339e2fc597548be8d6fe74112b478dd5206fe023f7a51cf2e7e.js
@@ -0,0 +1,25 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+export function common(paths, sep) {
+ const [first = "", ...remaining] = paths;
+ const parts = first.split(sep);
+ let endOfPrefix = parts.length;
+ let append = "";
+ for (const path of remaining){
+ const compare = path.split(sep);
+ if (compare.length <= endOfPrefix) {
+ endOfPrefix = compare.length;
+ append = "";
+ }
+ for(let i = 0; i < endOfPrefix; i++){
+ if (compare[i] !== parts[i]) {
+ endOfPrefix = i;
+ append = i === 0 ? "" : sep;
+ break;
+ }
+ }
+ }
+ return parts.slice(0, endOfPrefix).join(sep) + append;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2NvbW1vbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uKHBhdGhzOiBzdHJpbmdbXSwgc2VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBbZmlyc3QgPSBcIlwiLCAuLi5yZW1haW5pbmddID0gcGF0aHM7XG4gIGNvbnN0IHBhcnRzID0gZmlyc3Quc3BsaXQoc2VwKTtcblxuICBsZXQgZW5kT2ZQcmVmaXggPSBwYXJ0cy5sZW5ndGg7XG4gIGxldCBhcHBlbmQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcmVtYWluaW5nKSB7XG4gICAgY29uc3QgY29tcGFyZSA9IHBhdGguc3BsaXQoc2VwKTtcbiAgICBpZiAoY29tcGFyZS5sZW5ndGggPD0gZW5kT2ZQcmVmaXgpIHtcbiAgICAgIGVuZE9mUHJlZml4ID0gY29tcGFyZS5sZW5ndGg7XG4gICAgICBhcHBlbmQgPSBcIlwiO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kT2ZQcmVmaXg7IGkrKykge1xuICAgICAgaWYgKGNvbXBhcmVbaV0gIT09IHBhcnRzW2ldKSB7XG4gICAgICAgIGVuZE9mUHJlZml4ID0gaTtcbiAgICAgICAgYXBwZW5kID0gaSA9PT0gMCA/IFwiXCIgOiBzZXA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHMuc2xpY2UoMCwgZW5kT2ZQcmVmaXgpLmpvaW4oc2VwKSArIGFwcGVuZDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLE9BQU8sU0FBUyxPQUFPLEtBQWUsRUFBRSxHQUFXO0VBQ2pELE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFVBQVUsR0FBRztFQUNuQyxNQUFNLFFBQVEsTUFBTSxLQUFLLENBQUM7RUFFMUIsSUFBSSxjQUFjLE1BQU0sTUFBTTtFQUM5QixJQUFJLFNBQVM7RUFDYixLQUFLLE1BQU0sUUFBUSxVQUFXO0lBQzVCLE1BQU0sVUFBVSxLQUFLLEtBQUssQ0FBQztJQUMzQixJQUFJLFFBQVEsTUFBTSxJQUFJLGFBQWE7TUFDakMsY0FBYyxRQUFRLE1BQU07TUFDNUIsU0FBUztJQUNYO0lBRUEsSUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLGFBQWEsSUFBSztNQUNwQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUMzQixjQUFjO1FBQ2QsU0FBUyxNQUFNLElBQUksS0FBSztRQUN4QjtNQUNGO0lBQ0Y7RUFDRjtFQUNBLE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxhQUFhLElBQUksQ0FBQyxPQUFPO0FBQ2pEIn0=
+// denoCacheMetadata=4684215224034715481,8557795148467439246 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3b96c708fd94345746410a9d43a001a79afb48c21b1ce15bdff8f066d84d2de5.js b/vendor/gen/https/jsr.io/3b96c708fd94345746410a9d43a001a79afb48c21b1ce15bdff8f066d84d2de5.js
new file mode 100644
index 0000000..555f067
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3b96c708fd94345746410a9d43a001a79afb48c21b1ce15bdff8f066d84d2de5.js
@@ -0,0 +1,266 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+/** Options for {@linkcode exists} and {@linkcode existsSync.} */ /**
+ * Asynchronously test whether or not the given path exists by checking with
+ * the file system.
+ *
+ * Note: Do not use this function if performing a check before another operation
+ * on that file. Doing so creates a race condition. Instead, perform the actual
+ * file operation directly. This function is not recommended for this use case.
+ * See the recommended method below.
+ *
+ * @see {@link https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use} for
+ * more information on the time-of-check to time-of-use bug.
+ *
+ * Requires `--allow-read` permissions, and in some cases, `--allow-sys`
+ * permissions if `options.isReadable` is `true`.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param path The path to the file or directory, as a string or URL.
+ * @param options Additional options for the check.
+ *
+ * @returns A promise that resolves with `true` if the path exists, `false`
+ * otherwise.
+ *
+ * @example Recommended method
+ * ```ts ignore
+ * // Notice no use of exists
+ * try {
+ * await Deno.remove("./foo", { recursive: true });
+ * } catch (error) {
+ * if (!(error instanceof Deno.errors.NotFound)) {
+ * throw error;
+ * }
+ * // Do nothing...
+ * }
+ * ```
+ *
+ * Notice that `exists()` is not used in the above example. Doing so avoids a
+ * possible race condition. See the above note for details.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { exists } from "@std/fs/exists";
+ *
+ * await exists("./exists"); // true
+ * await exists("./does_not_exist"); // false
+ * ```
+ *
+ * @example Check if a path is readable
+ *
+ * Requires `--allow-sys` permissions in some cases.
+ *
+ * ```ts ignore
+ * import { exists } from "@std/fs/exists";
+ *
+ * await exists("./readable", { isReadable: true }); // true
+ * await exists("./not_readable", { isReadable: true }); // false
+ * ```
+ *
+ * @example Check if a path is a directory
+ * ```ts ignore
+ * import { exists } from "@std/fs/exists";
+ *
+ * await exists("./directory", { isDirectory: true }); // true
+ * await exists("./file", { isDirectory: true }); // false
+ * ```
+ *
+ * @example Check if a path is a file
+ * ```ts ignore
+ * import { exists } from "@std/fs/exists";
+ *
+ * await exists("./file", { isFile: true }); // true
+ * await exists("./directory", { isFile: true }); // false
+ * ```
+ *
+ * @example Check if a path is a readable directory
+ *
+ * Requires `--allow-sys` permissions in some cases.
+ *
+ * ```ts ignore
+ * import { exists } from "@std/fs/exists";
+ *
+ * await exists("./readable_directory", { isReadable: true, isDirectory: true }); // true
+ * await exists("./not_readable_directory", { isReadable: true, isDirectory: true }); // false
+ * ```
+ *
+ * @example Check if a path is a readable file
+ *
+ * Requires `--allow-sys` permissions in some cases.
+ *
+ * ```ts ignore
+ * import { exists } from "@std/fs/exists";
+ *
+ * await exists("./readable_file", { isReadable: true, isFile: true }); // true
+ * await exists("./not_readable_file", { isReadable: true, isFile: true }); // false
+ * ```
+ */ export async function exists(path, options) {
+ try {
+ const stat = await Deno.stat(path);
+ if (options && (options.isReadable || options.isDirectory || options.isFile)) {
+ if (options.isDirectory && options.isFile) {
+ throw new TypeError("ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together");
+ }
+ if (options.isDirectory && !stat.isDirectory || options.isFile && !stat.isFile) {
+ return false;
+ }
+ if (options.isReadable) {
+ return fileIsReadable(stat);
+ }
+ }
+ return true;
+ } catch (error) {
+ if (error instanceof Deno.errors.NotFound) {
+ return false;
+ }
+ if (error instanceof Deno.errors.PermissionDenied) {
+ if ((await Deno.permissions.query({
+ name: "read",
+ path
+ })).state === "granted") {
+ // --allow-read not missing
+ return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read
+ }
+ }
+ throw error;
+ }
+}
+/**
+ * Synchronously test whether or not the given path exists by checking with
+ * the file system.
+ *
+ * Note: Do not use this function if performing a check before another operation
+ * on that file. Doing so creates a race condition. Instead, perform the actual
+ * file operation directly. This function is not recommended for this use case.
+ * See the recommended method below.
+ *
+ * @see {@link https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use} for
+ * more information on the time-of-check to time-of-use bug.
+ *
+ * Requires `--allow-read` permissions, and in some cases, `--allow-sys`
+ * permissions if `options.isReadable` is `true`.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param path The path to the file or directory, as a string or URL.
+ * @param options Additional options for the check.
+ *
+ * @returns `true` if the path exists, `false` otherwise.
+ *
+ * @example Recommended method
+ * ```ts ignore
+ * // Notice no use of exists
+ * try {
+ * Deno.removeSync("./foo", { recursive: true });
+ * } catch (error) {
+ * if (!(error instanceof Deno.errors.NotFound)) {
+ * throw error;
+ * }
+ * // Do nothing...
+ * }
+ * ```
+ *
+ * Notice that `existsSync()` is not used in the above example. Doing so avoids
+ * a possible race condition. See the above note for details.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { existsSync } from "@std/fs/exists";
+ *
+ * existsSync("./exists"); // true
+ * existsSync("./does_not_exist"); // false
+ * ```
+ *
+ * @example Check if a path is readable
+ *
+ * Requires `--allow-sys` permissions in some cases.
+ *
+ * ```ts ignore
+ * import { existsSync } from "@std/fs/exists";
+ *
+ * existsSync("./readable", { isReadable: true }); // true
+ * existsSync("./not_readable", { isReadable: true }); // false
+ * ```
+ *
+ * @example Check if a path is a directory
+ * ```ts ignore
+ * import { existsSync } from "@std/fs/exists";
+ *
+ * existsSync("./directory", { isDirectory: true }); // true
+ * existsSync("./file", { isDirectory: true }); // false
+ * ```
+ *
+ * @example Check if a path is a file
+ * ```ts ignore
+ * import { existsSync } from "@std/fs/exists";
+ *
+ * existsSync("./file", { isFile: true }); // true
+ * existsSync("./directory", { isFile: true }); // false
+ * ```
+ *
+ * @example Check if a path is a readable directory
+ *
+ * Requires `--allow-sys` permissions in some cases.
+ *
+ * ```ts ignore
+ * import { existsSync } from "@std/fs/exists";
+ *
+ * existsSync("./readable_directory", { isReadable: true, isDirectory: true }); // true
+ * existsSync("./not_readable_directory", { isReadable: true, isDirectory: true }); // false
+ * ```
+ *
+ * @example Check if a path is a readable file
+ *
+ * Requires `--allow-sys` permissions in some cases.
+ *
+ * ```ts ignore
+ * import { existsSync } from "@std/fs/exists";
+ *
+ * existsSync("./readable_file", { isReadable: true, isFile: true }); // true
+ * existsSync("./not_readable_file", { isReadable: true, isFile: true }); // false
+ * ```
+ */ export function existsSync(path, options) {
+ try {
+ const stat = Deno.statSync(path);
+ if (options && (options.isReadable || options.isDirectory || options.isFile)) {
+ if (options.isDirectory && options.isFile) {
+ throw new TypeError("ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together");
+ }
+ if (options.isDirectory && !stat.isDirectory || options.isFile && !stat.isFile) {
+ return false;
+ }
+ if (options.isReadable) {
+ return fileIsReadable(stat);
+ }
+ }
+ return true;
+ } catch (error) {
+ if (error instanceof Deno.errors.NotFound) {
+ return false;
+ }
+ if (error instanceof Deno.errors.PermissionDenied) {
+ if (Deno.permissions.querySync({
+ name: "read",
+ path
+ }).state === "granted") {
+ // --allow-read not missing
+ return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read
+ }
+ }
+ throw error;
+ }
+}
+function fileIsReadable(stat) {
+ if (stat.mode === null) {
+ return true; // Exclusive on Non-POSIX systems
+ } else if (Deno.uid() === stat.uid) {
+ return (stat.mode & 0o400) === 0o400; // User is owner and can read?
+ } else if (Deno.gid() === stat.gid) {
+ return (stat.mode & 0o040) === 0o040; // User group is owner and can read?
+ }
+ return (stat.mode & 0o004) === 0o004; // Others can read?
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2V4aXN0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBleGlzdHN9IGFuZCB7QGxpbmtjb2RlIGV4aXN0c1N5bmMufSAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGlzdHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB3aWxsIGNoZWNrIGlmIHRoZSBwYXRoIGlzIHJlYWRhYmxlIGJ5IHRoZSB1c2VyIGFzIHdlbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIGlzUmVhZGFibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHdpbGwgY2hlY2sgaWYgdGhlIHBhdGggaXMgYSBkaXJlY3RvcnkgYXMgd2VsbC4gRGlyZWN0b3J5XG4gICAqIHN5bWxpbmtzIGFyZSBpbmNsdWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgaXNEaXJlY3Rvcnk/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHdpbGwgY2hlY2sgaWYgdGhlIHBhdGggaXMgYSBmaWxlIGFzIHdlbGwuIEZpbGUgc3ltbGlua3MgYXJlXG4gICAqIGluY2x1ZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBpc0ZpbGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHRlc3Qgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBhdGggZXhpc3RzIGJ5IGNoZWNraW5nIHdpdGhcbiAqIHRoZSBmaWxlIHN5c3RlbS5cbiAqXG4gKiBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgcGVyZm9ybWluZyBhIGNoZWNrIGJlZm9yZSBhbm90aGVyIG9wZXJhdGlvblxuICogb24gdGhhdCBmaWxlLiBEb2luZyBzbyBjcmVhdGVzIGEgcmFjZSBjb25kaXRpb24uIEluc3RlYWQsIHBlcmZvcm0gdGhlIGFjdHVhbFxuICogZmlsZSBvcGVyYXRpb24gZGlyZWN0bHkuIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIHVzZSBjYXNlLlxuICogU2VlIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgYmVsb3cuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGltZS1vZi1jaGVja190b190aW1lLW9mLXVzZX0gZm9yXG4gKiBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB0aW1lLW9mLWNoZWNrIHRvIHRpbWUtb2YtdXNlIGJ1Zy5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBwZXJtaXNzaW9ucywgYW5kIGluIHNvbWUgY2FzZXMsIGAtLWFsbG93LXN5c2BcbiAqIHBlcm1pc3Npb25zIGlmIGBvcHRpb25zLmlzUmVhZGFibGVgIGlzIGB0cnVlYC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGZpbGUgb3IgZGlyZWN0b3J5LCBhcyBhIHN0cmluZyBvciBVUkwuXG4gKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgcGF0aCBleGlzdHMsIGBmYWxzZWBcbiAqIG90aGVyd2lzZS5cbiAqXG4gKiBAZXhhbXBsZSBSZWNvbW1lbmRlZCBtZXRob2RcbiAqIGBgYHRzIGlnbm9yZVxuICogLy8gTm90aWNlIG5vIHVzZSBvZiBleGlzdHNcbiAqIHRyeSB7XG4gKiAgIGF3YWl0IERlbm8ucmVtb3ZlKFwiLi9mb29cIiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSkge1xuICogICAgIHRocm93IGVycm9yO1xuICogICB9XG4gKiAgIC8vIERvIG5vdGhpbmcuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIE5vdGljZSB0aGF0IGBleGlzdHMoKWAgaXMgbm90IHVzZWQgaW4gdGhlIGFib3ZlIGV4YW1wbGUuIERvaW5nIHNvIGF2b2lkcyBhXG4gKiBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbi4gU2VlIHRoZSBhYm92ZSBub3RlIGZvciBkZXRhaWxzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCJAc3RkL2ZzL2V4aXN0c1wiO1xuICpcbiAqIGF3YWl0IGV4aXN0cyhcIi4vZXhpc3RzXCIpOyAvLyB0cnVlXG4gKiBhd2FpdCBleGlzdHMoXCIuL2RvZXNfbm90X2V4aXN0XCIpOyAvLyBmYWxzZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hlY2sgaWYgYSBwYXRoIGlzIHJlYWRhYmxlXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctc3lzYCBwZXJtaXNzaW9ucyBpbiBzb21lIGNhc2VzLlxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIkBzdGQvZnMvZXhpc3RzXCI7XG4gKlxuICogYXdhaXQgZXhpc3RzKFwiLi9yZWFkYWJsZVwiLCB7IGlzUmVhZGFibGU6IHRydWUgfSk7IC8vIHRydWVcbiAqIGF3YWl0IGV4aXN0cyhcIi4vbm90X3JlYWRhYmxlXCIsIHsgaXNSZWFkYWJsZTogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENoZWNrIGlmIGEgcGF0aCBpcyBhIGRpcmVjdG9yeVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiQHN0ZC9mcy9leGlzdHNcIjtcbiAqXG4gKiBhd2FpdCBleGlzdHMoXCIuL2RpcmVjdG9yeVwiLCB7IGlzRGlyZWN0b3J5OiB0cnVlIH0pOyAvLyB0cnVlXG4gKiBhd2FpdCBleGlzdHMoXCIuL2ZpbGVcIiwgeyBpc0RpcmVjdG9yeTogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENoZWNrIGlmIGEgcGF0aCBpcyBhIGZpbGVcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIkBzdGQvZnMvZXhpc3RzXCI7XG4gKlxuICogYXdhaXQgZXhpc3RzKFwiLi9maWxlXCIsIHsgaXNGaWxlOiB0cnVlIH0pOyAvLyB0cnVlXG4gKiBhd2FpdCBleGlzdHMoXCIuL2RpcmVjdG9yeVwiLCB7IGlzRmlsZTogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENoZWNrIGlmIGEgcGF0aCBpcyBhIHJlYWRhYmxlIGRpcmVjdG9yeVxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXN5c2AgcGVybWlzc2lvbnMgaW4gc29tZSBjYXNlcy5cbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCJAc3RkL2ZzL2V4aXN0c1wiO1xuICpcbiAqIGF3YWl0IGV4aXN0cyhcIi4vcmVhZGFibGVfZGlyZWN0b3J5XCIsIHsgaXNSZWFkYWJsZTogdHJ1ZSwgaXNEaXJlY3Rvcnk6IHRydWUgfSk7IC8vIHRydWVcbiAqIGF3YWl0IGV4aXN0cyhcIi4vbm90X3JlYWRhYmxlX2RpcmVjdG9yeVwiLCB7IGlzUmVhZGFibGU6IHRydWUsIGlzRGlyZWN0b3J5OiB0cnVlIH0pOyAvLyBmYWxzZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hlY2sgaWYgYSBwYXRoIGlzIGEgcmVhZGFibGUgZmlsZVxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXN5c2AgcGVybWlzc2lvbnMgaW4gc29tZSBjYXNlcy5cbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCJAc3RkL2ZzL2V4aXN0c1wiO1xuICpcbiAqIGF3YWl0IGV4aXN0cyhcIi4vcmVhZGFibGVfZmlsZVwiLCB7IGlzUmVhZGFibGU6IHRydWUsIGlzRmlsZTogdHJ1ZSB9KTsgLy8gdHJ1ZVxuICogYXdhaXQgZXhpc3RzKFwiLi9ub3RfcmVhZGFibGVfZmlsZVwiLCB7IGlzUmVhZGFibGU6IHRydWUsIGlzRmlsZTogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhpc3RzKFxuICBwYXRoOiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM/OiBFeGlzdHNPcHRpb25zLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGF3YWl0IERlbm8uc3RhdChwYXRoKTtcbiAgICBpZiAoXG4gICAgICBvcHRpb25zICYmXG4gICAgICAob3B0aW9ucy5pc1JlYWRhYmxlIHx8IG9wdGlvbnMuaXNEaXJlY3RvcnkgfHwgb3B0aW9ucy5pc0ZpbGUpXG4gICAgKSB7XG4gICAgICBpZiAob3B0aW9ucy5pc0RpcmVjdG9yeSAmJiBvcHRpb25zLmlzRmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiRXhpc3RzT3B0aW9ucy5vcHRpb25zLmlzRGlyZWN0b3J5IGFuZCBFeGlzdHNPcHRpb25zLm9wdGlvbnMuaXNGaWxlIG11c3Qgbm90IGJlIHRydWUgdG9nZXRoZXJcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKG9wdGlvbnMuaXNEaXJlY3RvcnkgJiYgIXN0YXQuaXNEaXJlY3RvcnkpIHx8XG4gICAgICAgIChvcHRpb25zLmlzRmlsZSAmJiAhc3RhdC5pc0ZpbGUpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuaXNSZWFkYWJsZSkge1xuICAgICAgICByZXR1cm4gZmlsZUlzUmVhZGFibGUoc3RhdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLlBlcm1pc3Npb25EZW5pZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGF3YWl0IERlbm8ucGVybWlzc2lvbnMucXVlcnkoeyBuYW1lOiBcInJlYWRcIiwgcGF0aCB9KSkuc3RhdGUgPT09XG4gICAgICAgICAgXCJncmFudGVkXCJcbiAgICAgICkge1xuICAgICAgICAvLyAtLWFsbG93LXJlYWQgbm90IG1pc3NpbmdcbiAgICAgICAgcmV0dXJuICFvcHRpb25zPy5pc1JlYWRhYmxlOyAvLyBQZXJtaXNzaW9uRGVuaWVkIHdhcyByYWlzZWQgYnkgZmlsZSBzeXN0ZW0sIHNvIHRoZSBpdGVtIGV4aXN0cywgYnV0IGNhbid0IGJlIHJlYWRcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IHRlc3Qgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBhdGggZXhpc3RzIGJ5IGNoZWNraW5nIHdpdGhcbiAqIHRoZSBmaWxlIHN5c3RlbS5cbiAqXG4gKiBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgcGVyZm9ybWluZyBhIGNoZWNrIGJlZm9yZSBhbm90aGVyIG9wZXJhdGlvblxuICogb24gdGhhdCBmaWxlLiBEb2luZyBzbyBjcmVhdGVzIGEgcmFjZSBjb25kaXRpb24uIEluc3RlYWQsIHBlcmZvcm0gdGhlIGFjdHVhbFxuICogZmlsZSBvcGVyYXRpb24gZGlyZWN0bHkuIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIHVzZSBjYXNlLlxuICogU2VlIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgYmVsb3cuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGltZS1vZi1jaGVja190b190aW1lLW9mLXVzZX0gZm9yXG4gKiBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB0aW1lLW9mLWNoZWNrIHRvIHRpbWUtb2YtdXNlIGJ1Zy5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBwZXJtaXNzaW9ucywgYW5kIGluIHNvbWUgY2FzZXMsIGAtLWFsbG93LXN5c2BcbiAqIHBlcm1pc3Npb25zIGlmIGBvcHRpb25zLmlzUmVhZGFibGVgIGlzIGB0cnVlYC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGZpbGUgb3IgZGlyZWN0b3J5LCBhcyBhIHN0cmluZyBvciBVUkwuXG4gKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGggZXhpc3RzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZXhhbXBsZSBSZWNvbW1lbmRlZCBtZXRob2RcbiAqIGBgYHRzIGlnbm9yZVxuICogLy8gTm90aWNlIG5vIHVzZSBvZiBleGlzdHNcbiAqIHRyeSB7XG4gKiAgIERlbm8ucmVtb3ZlU3luYyhcIi4vZm9vXCIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkpIHtcbiAqICAgICB0aHJvdyBlcnJvcjtcbiAqICAgfVxuICogICAvLyBEbyBub3RoaW5nLi4uXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBOb3RpY2UgdGhhdCBgZXhpc3RzU3luYygpYCBpcyBub3QgdXNlZCBpbiB0aGUgYWJvdmUgZXhhbXBsZS4gRG9pbmcgc28gYXZvaWRzXG4gKiBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uLiBTZWUgdGhlIGFib3ZlIG5vdGUgZm9yIGRldGFpbHMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJAc3RkL2ZzL2V4aXN0c1wiO1xuICpcbiAqIGV4aXN0c1N5bmMoXCIuL2V4aXN0c1wiKTsgLy8gdHJ1ZVxuICogZXhpc3RzU3luYyhcIi4vZG9lc19ub3RfZXhpc3RcIik7IC8vIGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBDaGVjayBpZiBhIHBhdGggaXMgcmVhZGFibGVcbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1zeXNgIHBlcm1pc3Npb25zIGluIHNvbWUgY2FzZXMuXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIkBzdGQvZnMvZXhpc3RzXCI7XG4gKlxuICogZXhpc3RzU3luYyhcIi4vcmVhZGFibGVcIiwgeyBpc1JlYWRhYmxlOiB0cnVlIH0pOyAvLyB0cnVlXG4gKiBleGlzdHNTeW5jKFwiLi9ub3RfcmVhZGFibGVcIiwgeyBpc1JlYWRhYmxlOiB0cnVlIH0pOyAvLyBmYWxzZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hlY2sgaWYgYSBwYXRoIGlzIGEgZGlyZWN0b3J5XG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy9leGlzdHNcIjtcbiAqXG4gKiBleGlzdHNTeW5jKFwiLi9kaXJlY3RvcnlcIiwgeyBpc0RpcmVjdG9yeTogdHJ1ZSB9KTsgLy8gdHJ1ZVxuICogZXhpc3RzU3luYyhcIi4vZmlsZVwiLCB7IGlzRGlyZWN0b3J5OiB0cnVlIH0pOyAvLyBmYWxzZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hlY2sgaWYgYSBwYXRoIGlzIGEgZmlsZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIkBzdGQvZnMvZXhpc3RzXCI7XG4gKlxuICogZXhpc3RzU3luYyhcIi4vZmlsZVwiLCB7IGlzRmlsZTogdHJ1ZSB9KTsgLy8gdHJ1ZVxuICogZXhpc3RzU3luYyhcIi4vZGlyZWN0b3J5XCIsIHsgaXNGaWxlOiB0cnVlIH0pOyAvLyBmYWxzZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hlY2sgaWYgYSBwYXRoIGlzIGEgcmVhZGFibGUgZGlyZWN0b3J5XG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctc3lzYCBwZXJtaXNzaW9ucyBpbiBzb21lIGNhc2VzLlxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJAc3RkL2ZzL2V4aXN0c1wiO1xuICpcbiAqIGV4aXN0c1N5bmMoXCIuL3JlYWRhYmxlX2RpcmVjdG9yeVwiLCB7IGlzUmVhZGFibGU6IHRydWUsIGlzRGlyZWN0b3J5OiB0cnVlIH0pOyAvLyB0cnVlXG4gKiBleGlzdHNTeW5jKFwiLi9ub3RfcmVhZGFibGVfZGlyZWN0b3J5XCIsIHsgaXNSZWFkYWJsZTogdHJ1ZSwgaXNEaXJlY3Rvcnk6IHRydWUgfSk7IC8vIGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBDaGVjayBpZiBhIHBhdGggaXMgYSByZWFkYWJsZSBmaWxlXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctc3lzYCBwZXJtaXNzaW9ucyBpbiBzb21lIGNhc2VzLlxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJAc3RkL2ZzL2V4aXN0c1wiO1xuICpcbiAqIGV4aXN0c1N5bmMoXCIuL3JlYWRhYmxlX2ZpbGVcIiwgeyBpc1JlYWRhYmxlOiB0cnVlLCBpc0ZpbGU6IHRydWUgfSk7IC8vIHRydWVcbiAqIGV4aXN0c1N5bmMoXCIuL25vdF9yZWFkYWJsZV9maWxlXCIsIHsgaXNSZWFkYWJsZTogdHJ1ZSwgaXNGaWxlOiB0cnVlIH0pOyAvLyBmYWxzZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHNTeW5jKFxuICBwYXRoOiBzdHJpbmcgfCBVUkwsXG4gIG9wdGlvbnM/OiBFeGlzdHNPcHRpb25zLFxuKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IERlbm8uc3RhdFN5bmMocGF0aCk7XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAmJlxuICAgICAgKG9wdGlvbnMuaXNSZWFkYWJsZSB8fCBvcHRpb25zLmlzRGlyZWN0b3J5IHx8IG9wdGlvbnMuaXNGaWxlKVxuICAgICkge1xuICAgICAgaWYgKG9wdGlvbnMuaXNEaXJlY3RvcnkgJiYgb3B0aW9ucy5pc0ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkV4aXN0c09wdGlvbnMub3B0aW9ucy5pc0RpcmVjdG9yeSBhbmQgRXhpc3RzT3B0aW9ucy5vcHRpb25zLmlzRmlsZSBtdXN0IG5vdCBiZSB0cnVlIHRvZ2V0aGVyXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChvcHRpb25zLmlzRGlyZWN0b3J5ICYmICFzdGF0LmlzRGlyZWN0b3J5KSB8fFxuICAgICAgICAob3B0aW9ucy5pc0ZpbGUgJiYgIXN0YXQuaXNGaWxlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmlzUmVhZGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbGVJc1JlYWRhYmxlKHN0YXQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5QZXJtaXNzaW9uRGVuaWVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIERlbm8ucGVybWlzc2lvbnMucXVlcnlTeW5jKHsgbmFtZTogXCJyZWFkXCIsIHBhdGggfSkuc3RhdGUgPT09IFwiZ3JhbnRlZFwiXG4gICAgICApIHtcbiAgICAgICAgLy8gLS1hbGxvdy1yZWFkIG5vdCBtaXNzaW5nXG4gICAgICAgIHJldHVybiAhb3B0aW9ucz8uaXNSZWFkYWJsZTsgLy8gUGVybWlzc2lvbkRlbmllZCB3YXMgcmFpc2VkIGJ5IGZpbGUgc3lzdGVtLCBzbyB0aGUgaXRlbSBleGlzdHMsIGJ1dCBjYW4ndCBiZSByZWFkXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbGVJc1JlYWRhYmxlKHN0YXQ6IERlbm8uRmlsZUluZm8pIHtcbiAgaWYgKHN0YXQubW9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlOyAvLyBFeGNsdXNpdmUgb24gTm9uLVBPU0lYIHN5c3RlbXNcbiAgfSBlbHNlIGlmIChEZW5vLnVpZCgpID09PSBzdGF0LnVpZCkge1xuICAgIHJldHVybiAoc3RhdC5tb2RlICYgMG80MDApID09PSAwbzQwMDsgLy8gVXNlciBpcyBvd25lciBhbmQgY2FuIHJlYWQ/XG4gIH0gZWxzZSBpZiAoRGVuby5naWQoKSA9PT0gc3RhdC5naWQpIHtcbiAgICByZXR1cm4gKHN0YXQubW9kZSAmIDBvMDQwKSA9PT0gMG8wNDA7IC8vIFVzZXIgZ3JvdXAgaXMgb3duZXIgYW5kIGNhbiByZWFkP1xuICB9XG4gIHJldHVybiAoc3RhdC5tb2RlICYgMG8wMDQpID09PSAwbzAwNDsgLy8gT3RoZXJzIGNhbiByZWFkP1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUVyRCwrREFBK0QsR0F3Qi9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnR0MsR0FDRCxPQUFPLGVBQWUsT0FDcEIsSUFBa0IsRUFDbEIsT0FBdUI7RUFFdkIsSUFBSTtJQUNGLE1BQU0sT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDO0lBQzdCLElBQ0UsV0FDQSxDQUFDLFFBQVEsVUFBVSxJQUFJLFFBQVEsV0FBVyxJQUFJLFFBQVEsTUFBTSxHQUM1RDtNQUNBLElBQUksUUFBUSxXQUFXLElBQUksUUFBUSxNQUFNLEVBQUU7UUFDekMsTUFBTSxJQUFJLFVBQ1I7TUFFSjtNQUNBLElBQ0UsQUFBQyxRQUFRLFdBQVcsSUFBSSxDQUFDLEtBQUssV0FBVyxJQUN4QyxRQUFRLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBTSxFQUMvQjtRQUNBLE9BQU87TUFDVDtNQUNBLElBQUksUUFBUSxVQUFVLEVBQUU7UUFDdEIsT0FBTyxlQUFlO01BQ3hCO0lBQ0Y7SUFDQSxPQUFPO0VBQ1QsRUFBRSxPQUFPLE9BQU87SUFDZCxJQUFJLGlCQUFpQixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUU7TUFDekMsT0FBTztJQUNUO0lBQ0EsSUFBSSxpQkFBaUIsS0FBSyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7TUFDakQsSUFDRSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTTtRQUFRO01BQUssRUFBRSxFQUFFLEtBQUssS0FDMUQsV0FDRjtRQUNBLDJCQUEyQjtRQUMzQixPQUFPLENBQUMsU0FBUyxZQUFZLG9GQUFvRjtNQUNuSDtJQUNGO0lBQ0EsTUFBTTtFQUNSO0FBQ0Y7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0ErRkMsR0FDRCxPQUFPLFNBQVMsV0FDZCxJQUFrQixFQUNsQixPQUF1QjtFQUV2QixJQUFJO0lBQ0YsTUFBTSxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzNCLElBQ0UsV0FDQSxDQUFDLFFBQVEsVUFBVSxJQUFJLFFBQVEsV0FBVyxJQUFJLFFBQVEsTUFBTSxHQUM1RDtNQUNBLElBQUksUUFBUSxXQUFXLElBQUksUUFBUSxNQUFNLEVBQUU7UUFDekMsTUFBTSxJQUFJLFVBQ1I7TUFFSjtNQUNBLElBQ0UsQUFBQyxRQUFRLFdBQVcsSUFBSSxDQUFDLEtBQUssV0FBVyxJQUN4QyxRQUFRLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBTSxFQUMvQjtRQUNBLE9BQU87TUFDVDtNQUNBLElBQUksUUFBUSxVQUFVLEVBQUU7UUFDdEIsT0FBTyxlQUFlO01BQ3hCO0lBQ0Y7SUFDQSxPQUFPO0VBQ1QsRUFBRSxPQUFPLE9BQU87SUFDZCxJQUFJLGlCQUFpQixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUU7TUFDekMsT0FBTztJQUNUO0lBQ0EsSUFBSSxpQkFBaUIsS0FBSyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7TUFDakQsSUFDRSxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFBRSxNQUFNO1FBQVE7TUFBSyxHQUFHLEtBQUssS0FBSyxXQUM3RDtRQUNBLDJCQUEyQjtRQUMzQixPQUFPLENBQUMsU0FBUyxZQUFZLG9GQUFvRjtNQUNuSDtJQUNGO0lBQ0EsTUFBTTtFQUNSO0FBQ0Y7QUFFQSxTQUFTLGVBQWUsSUFBbUI7RUFDekMsSUFBSSxLQUFLLElBQUksS0FBSyxNQUFNO0lBQ3RCLE9BQU8sTUFBTSxpQ0FBaUM7RUFDaEQsT0FBTyxJQUFJLEtBQUssR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sT0FBTyw4QkFBOEI7RUFDdEUsT0FBTyxJQUFJLEtBQUssR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sT0FBTyxvQ0FBb0M7RUFDNUU7RUFDQSxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLE9BQU8sbUJBQW1CO0FBQzNEIn0=
+// denoCacheMetadata=12635690072377498865,1331538058171491709 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3b9c564787e5f2f66afd4abe8ff7b405532c182d381eddeab28466173172c34d.js b/vendor/gen/https/jsr.io/3b9c564787e5f2f66afd4abe8ff7b405532c182d381eddeab28466173172c34d.js
new file mode 100644
index 0000000..65bfde0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3b9c564787e5f2f66afd4abe8ff7b405532c182d381eddeab28466173172c34d.js
@@ -0,0 +1,627 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { AMPERSAND, ASTERISK, BOM, COLON, COMMA, COMMERCIAL_AT, DOUBLE_QUOTE, EXCLAMATION, GRAVE_ACCENT, GREATER_THAN, isWhiteSpace, LEFT_CURLY_BRACKET, LEFT_SQUARE_BRACKET, LINE_FEED, MINUS, PERCENT, QUESTION, RIGHT_CURLY_BRACKET, RIGHT_SQUARE_BRACKET, SHARP, SINGLE_QUOTE, VERTICAL_LINE } from "./_chars.ts";
+import { DEFAULT_SCHEMA } from "./_schema.ts";
+import { isObject } from "./_utils.ts";
+const STYLE_PLAIN = 1;
+const STYLE_SINGLE = 2;
+const STYLE_LITERAL = 3;
+const STYLE_FOLDED = 4;
+const STYLE_DOUBLE = 5;
+const LEADING_SPACE_REGEXP = /^\n* /;
+const ESCAPE_SEQUENCES = new Map([
+ [
+ 0x00,
+ "\\0"
+ ],
+ [
+ 0x07,
+ "\\a"
+ ],
+ [
+ 0x08,
+ "\\b"
+ ],
+ [
+ 0x09,
+ "\\t"
+ ],
+ [
+ 0x0a,
+ "\\n"
+ ],
+ [
+ 0x0b,
+ "\\v"
+ ],
+ [
+ 0x0c,
+ "\\f"
+ ],
+ [
+ 0x0d,
+ "\\r"
+ ],
+ [
+ 0x1b,
+ "\\e"
+ ],
+ [
+ 0x22,
+ '\\"'
+ ],
+ [
+ 0x5c,
+ "\\\\"
+ ],
+ [
+ 0x85,
+ "\\N"
+ ],
+ [
+ 0xa0,
+ "\\_"
+ ],
+ [
+ 0x2028,
+ "\\L"
+ ],
+ [
+ 0x2029,
+ "\\P"
+ ]
+]);
+const DEPRECATED_BOOLEANS_SYNTAX = [
+ "y",
+ "Y",
+ "yes",
+ "Yes",
+ "YES",
+ "on",
+ "On",
+ "ON",
+ "n",
+ "N",
+ "no",
+ "No",
+ "NO",
+ "off",
+ "Off",
+ "OFF"
+];
+/**
+ * Encodes a Unicode character code point as a hexadecimal escape sequence.
+ */ function charCodeToHexString(charCode) {
+ const hexString = charCode.toString(16).toUpperCase();
+ if (charCode <= 0xff) return `\\x${hexString.padStart(2, "0")}`;
+ if (charCode <= 0xffff) return `\\u${hexString.padStart(4, "0")}`;
+ if (charCode <= 0xffffffff) return `\\U${hexString.padStart(8, "0")}`;
+ throw new Error("Code point within a string may not be greater than 0xFFFFFFFF");
+}
+function createStyleMap(map) {
+ const result = new Map();
+ for (let tag of Object.keys(map)){
+ const style = String(map[tag]);
+ if (tag.slice(0, 2) === "!!") {
+ tag = `tag:yaml.org,2002:${tag.slice(2)}`;
+ }
+ result.set(tag, style);
+ }
+ return result;
+}
+// Indents every line in a string. Empty lines (\n only) are not indented.
+function indentString(string, spaces) {
+ const indent = " ".repeat(spaces);
+ return string.split("\n").map((line)=>line.length ? indent + line : line).join("\n");
+}
+function generateNextLine(indent, level) {
+ return `\n${" ".repeat(indent * level)}`;
+}
+/**
+ * @link https://yaml.org/spec/1.2.2/ 5.1. Character Set
+ * @return `true` if the character is printable without escaping, `false` otherwise.
+ */ function isPrintable(c) {
+ return 0x00020 <= c && c <= 0x00007e || 0x000a1 <= c && c <= 0x00d7ff && c !== 0x2028 && c !== 0x2029 || 0x0e000 <= c && c <= 0x00fffd && c !== BOM || 0x10000 <= c && c <= 0x10ffff;
+}
+/**
+ * @return `true` if value is allowed after the first character in plain style, `false` otherwise.
+ */ function isPlainSafe(c) {
+ return isPrintable(c) && c !== BOM && c !== COMMA && c !== LEFT_SQUARE_BRACKET && c !== RIGHT_SQUARE_BRACKET && c !== LEFT_CURLY_BRACKET && c !== RIGHT_CURLY_BRACKET && c !== COLON && c !== SHARP;
+}
+/**
+ * @return `true` if value is allowed as the first character in plain style, `false` otherwise.
+ */ function isPlainSafeFirst(c) {
+ return isPlainSafe(c) && !isWhiteSpace(c) && c !== MINUS && c !== QUESTION && c !== AMPERSAND && c !== ASTERISK && c !== EXCLAMATION && c !== VERTICAL_LINE && c !== GREATER_THAN && c !== SINGLE_QUOTE && c !== DOUBLE_QUOTE && c !== PERCENT && c !== COMMERCIAL_AT && c !== GRAVE_ACCENT;
+}
+// Determines whether block indentation indicator is required.
+function needIndentIndicator(string) {
+ return LEADING_SPACE_REGEXP.test(string);
+}
+// Determines which scalar styles are possible and returns the preferred style.
+// lineWidth = -1 => no limit.
+// Pre-conditions: str.length > 0.
+// Post-conditions:
+// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string.
+// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).
+// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth !== -1).
+function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, implicitTypes) {
+ const shouldTrackWidth = lineWidth !== -1;
+ let hasLineBreak = false;
+ let hasFoldableLine = false; // only checked if shouldTrackWidth
+ let previousLineBreak = -1; // count the first line correctly
+ let plain = isPlainSafeFirst(string.charCodeAt(0)) && !isWhiteSpace(string.charCodeAt(string.length - 1));
+ let char;
+ let i;
+ if (singleLineOnly) {
+ // Case: no block styles.
+ // Check for disallowed characters to rule out plain and single.
+ for(i = 0; i < string.length; i++){
+ char = string.charCodeAt(i);
+ if (!isPrintable(char)) {
+ return STYLE_DOUBLE;
+ }
+ plain = plain && isPlainSafe(char);
+ }
+ } else {
+ // Case: block styles permitted.
+ for(i = 0; i < string.length; i++){
+ char = string.charCodeAt(i);
+ if (char === LINE_FEED) {
+ hasLineBreak = true;
+ // Check if any line can be folded.
+ if (shouldTrackWidth) {
+ hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.
+ i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
+ previousLineBreak = i;
+ }
+ } else if (!isPrintable(char)) {
+ return STYLE_DOUBLE;
+ }
+ plain = plain && isPlainSafe(char);
+ }
+ // in case the end is missing a \n
+ hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
+ }
+ // Although every style can represent \n without escaping, prefer block styles
+ // for multiline, since they're more readable and they don't add empty lines.
+ // Also prefer folding a super-long line.
+ if (!hasLineBreak && !hasFoldableLine) {
+ // Strings interpretable as another type have to be quoted;
+ // e.g. the string 'true' vs. the boolean true.
+ return plain && !implicitTypes.some((type)=>type.resolve(string)) ? STYLE_PLAIN : STYLE_SINGLE;
+ }
+ // Edge case: block indentation indicator can only have one digit.
+ if (indentPerLevel > 9 && needIndentIndicator(string)) {
+ return STYLE_DOUBLE;
+ }
+ // At this point we know block styles are valid.
+ // Prefer literal style unless we want to fold.
+ return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
+}
+// Greedy line breaking.
+// Picks the longest line under the limit each time,
+// otherwise settles for the shortest line over the limit.
+// NB. More-indented lines *cannot* be folded, as that would add an extra \n.
+function foldLine(line, width) {
+ if (line === "" || line[0] === " ") return line;
+ // Since a more-indented line adds a \n, breaks can't be followed by a space.
+ const breakRegExp = / [^ ]/g; // note: the match index will always be <= length-2.
+ // start is an inclusive index. end, curr, and next are exclusive.
+ let start = 0;
+ let end;
+ let curr = 0;
+ let next = 0;
+ const lines = [];
+ // Invariants: 0 <= start <= length-1.
+ // 0 <= curr <= next <= max(0, length-2). curr - start <= width.
+ // Inside the loop:
+ // A match implies length >= 2, so curr and next are <= length-2.
+ for (const match of line.matchAll(breakRegExp)){
+ next = match.index;
+ // maintain invariant: curr - start <= width
+ if (next - start > width) {
+ end = curr > start ? curr : next; // derive end <= length-2
+ lines.push(line.slice(start, end));
+ // skip the space that was output as \n
+ start = end + 1; // derive start <= length-1
+ }
+ curr = next;
+ }
+ // By the invariants, start <= length-1, so there is something left over.
+ // It is either the whole string or a part starting from non-whitespace.
+ // Insert a break if the remainder is too long and there is a break available.
+ if (line.length - start > width && curr > start) {
+ lines.push(line.slice(start, curr));
+ lines.push(line.slice(curr + 1));
+ } else {
+ lines.push(line.slice(start));
+ }
+ return lines.join("\n");
+}
+function trimTrailingNewline(string) {
+ return string.at(-1) === "\n" ? string.slice(0, -1) : string;
+}
+// Note: a long line without a suitable break point will exceed the width limit.
+// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
+function foldString(string, width) {
+ // In folded style, $k$ consecutive newlines output as $k+1$ newlines—
+ // unless they're before or after a more-indented line, or at the very
+ // beginning or end, in which case $k$ maps to $k$.
+ // Therefore, parse each chunk as newline(s) followed by a content line.
+ const lineRe = /(\n+)([^\n]*)/g;
+ // first line (possibly an empty line)
+ let result = (()=>{
+ let nextLF = string.indexOf("\n");
+ nextLF = nextLF !== -1 ? nextLF : string.length;
+ lineRe.lastIndex = nextLF;
+ return foldLine(string.slice(0, nextLF), width);
+ })();
+ // If we haven't reached the first content line yet, don't add an extra \n.
+ let prevMoreIndented = string[0] === "\n" || string[0] === " ";
+ let moreIndented;
+ // rest of the lines
+ let match;
+ // tslint:disable-next-line:no-conditional-assignment
+ while(match = lineRe.exec(string)){
+ const prefix = match[1];
+ const line = match[2] || "";
+ moreIndented = line[0] === " ";
+ result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width);
+ prevMoreIndented = moreIndented;
+ }
+ return result;
+}
+// Escapes a double-quoted string.
+function escapeString(string) {
+ let result = "";
+ let char;
+ let nextChar;
+ let escapeSeq;
+ for(let i = 0; i < string.length; i++){
+ char = string.charCodeAt(i);
+ // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates").
+ if (char >= 0xd800 && char <= 0xdbff /* high surrogate */ ) {
+ nextChar = string.charCodeAt(i + 1);
+ if (nextChar >= 0xdc00 && nextChar <= 0xdfff /* low surrogate */ ) {
+ // Combine the surrogate pair and store it escaped.
+ result += charCodeToHexString((char - 0xd800) * 0x400 + nextChar - 0xdc00 + 0x10000);
+ // Advance index one extra since we already used that char here.
+ i++;
+ continue;
+ }
+ }
+ escapeSeq = ESCAPE_SEQUENCES.get(char);
+ result += !escapeSeq && isPrintable(char) ? string[i] : escapeSeq || charCodeToHexString(char);
+ }
+ return result;
+}
+// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
+function blockHeader(string, indentPerLevel) {
+ const indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : "";
+ // note the special case: the string '\n' counts as a "trailing" empty line.
+ const clip = string[string.length - 1] === "\n";
+ const keep = clip && (string[string.length - 2] === "\n" || string === "\n");
+ const chomp = keep ? "+" : clip ? "" : "-";
+ return `${indentIndicator}${chomp}\n`;
+}
+function inspectNode(object, objects, duplicateObjects) {
+ if (!isObject(object)) return;
+ if (objects.has(object)) {
+ duplicateObjects.add(object);
+ return;
+ }
+ objects.add(object);
+ const entries = Array.isArray(object) ? object : Object.values(object);
+ for (const value of entries){
+ inspectNode(value, objects, duplicateObjects);
+ }
+}
+export class DumperState {
+ indent;
+ arrayIndent;
+ skipInvalid;
+ flowLevel;
+ sortKeys;
+ lineWidth;
+ useAnchors;
+ compatMode;
+ condenseFlow;
+ implicitTypes;
+ explicitTypes;
+ duplicates = [];
+ usedDuplicates = new Set();
+ styleMap = new Map();
+ constructor({ schema = DEFAULT_SCHEMA, indent = 2, arrayIndent = true, skipInvalid = false, flowLevel = -1, styles = undefined, sortKeys = false, lineWidth = 80, useAnchors = true, compatMode = true, condenseFlow = false }){
+ this.indent = Math.max(1, indent);
+ this.arrayIndent = arrayIndent;
+ this.skipInvalid = skipInvalid;
+ this.flowLevel = flowLevel;
+ if (styles) this.styleMap = createStyleMap(styles);
+ this.sortKeys = sortKeys;
+ this.lineWidth = lineWidth;
+ this.useAnchors = useAnchors;
+ this.compatMode = compatMode;
+ this.condenseFlow = condenseFlow;
+ this.implicitTypes = schema.implicitTypes;
+ this.explicitTypes = schema.explicitTypes;
+ }
+ // Note: line breaking/folding is implemented for only the folded style.
+ // NB. We drop the last trailing newline (if any) of a returned block scalar
+ // since the dumper adds its own newline. This always works:
+ // • No ending newline => unaffected; already using strip "-" chomping.
+ // • Ending newline => removed then restored.
+ // Importantly, this keeps the "+" chomp indicator from gaining an extra line.
+ stringifyScalar(string, { level, isKey }) {
+ if (string.length === 0) {
+ return "''";
+ }
+ if (this.compatMode && DEPRECATED_BOOLEANS_SYNTAX.includes(string)) {
+ return `'${string}'`;
+ }
+ const indent = this.indent * Math.max(1, level); // no 0-indent scalars
+ // As indentation gets deeper, let the width decrease monotonically
+ // to the lower bound min(this.lineWidth, 40).
+ // Note that this implies
+ // this.lineWidth ≤ 40 + this.indent: width is fixed at the lower bound.
+ // this.lineWidth > 40 + this.indent: width decreases until the lower
+ // bound.
+ // This behaves better than a constant minimum width which disallows
+ // narrower options, or an indent threshold which causes the width
+ // to suddenly increase.
+ const lineWidth = this.lineWidth === -1 ? -1 : Math.max(Math.min(this.lineWidth, 40), this.lineWidth - indent);
+ // Without knowing if keys are implicit/explicit,
+ // assume implicit for safety.
+ const singleLineOnly = isKey || // No block styles in flow mode.
+ this.flowLevel > -1 && level >= this.flowLevel;
+ const scalarStyle = chooseScalarStyle(string, singleLineOnly, this.indent, lineWidth, this.implicitTypes);
+ switch(scalarStyle){
+ case STYLE_PLAIN:
+ return string;
+ case STYLE_SINGLE:
+ return `'${string.replace(/'/g, "''")}'`;
+ case STYLE_LITERAL:
+ return `|${blockHeader(string, this.indent)}${trimTrailingNewline(indentString(string, indent))}`;
+ case STYLE_FOLDED:
+ return `>${blockHeader(string, this.indent)}${trimTrailingNewline(indentString(foldString(string, lineWidth), indent))}`;
+ case STYLE_DOUBLE:
+ return `"${escapeString(string)}"`;
+ default:
+ throw new TypeError("Invalid scalar style should be unreachable: please file a bug report against Deno at https://github.com/denoland/std/issues");
+ }
+ }
+ stringifyFlowSequence(array, { level }) {
+ const results = [];
+ for (const value of array){
+ const string = this.stringifyNode(value, {
+ level,
+ block: false,
+ compact: false,
+ isKey: false
+ });
+ if (string === null) continue;
+ results.push(string);
+ }
+ const separator = this.condenseFlow ? "," : ", ";
+ return `[${results.join(separator)}]`;
+ }
+ stringifyBlockSequence(array, { level, compact }) {
+ const whitespace = generateNextLine(this.indent, level);
+ const prefix = compact ? "" : whitespace;
+ const results = [];
+ for (const value of array){
+ const string = this.stringifyNode(value, {
+ level: level + 1,
+ block: true,
+ compact: true,
+ isKey: false
+ });
+ if (string === null) continue;
+ const linePrefix = LINE_FEED === string.charCodeAt(0) ? "-" : "- ";
+ results.push(`${linePrefix}${string}`);
+ }
+ return results.length ? prefix + results.join(whitespace) : "[]";
+ }
+ stringifyFlowMapping(object, { level }) {
+ const quote = this.condenseFlow ? '"' : "";
+ const separator = this.condenseFlow ? ":" : ": ";
+ const results = [];
+ for (const [key, value] of Object.entries(object)){
+ const keyString = this.stringifyNode(key, {
+ level,
+ block: false,
+ compact: false,
+ isKey: false
+ });
+ if (keyString === null) continue; // Skip this pair because of invalid key;
+ const valueString = this.stringifyNode(value, {
+ level,
+ block: false,
+ compact: false,
+ isKey: false
+ });
+ if (valueString === null) continue; // Skip this pair because of invalid value.
+ const keyPrefix = keyString.length > 1024 ? "? " : "";
+ results.push(quote + keyPrefix + keyString + quote + separator + valueString);
+ }
+ return `{${results.join(", ")}}`;
+ }
+ stringifyBlockMapping(object, { tag, level, compact }) {
+ const keys = Object.keys(object);
+ // Allow sorting keys so that the output file is deterministic
+ if (this.sortKeys === true) {
+ // Default sorting
+ keys.sort();
+ } else if (typeof this.sortKeys === "function") {
+ // Custom sort function
+ keys.sort(this.sortKeys);
+ } else if (this.sortKeys) {
+ // Something is wrong
+ throw new TypeError(`"sortKeys" must be a boolean or a function: received ${typeof this.sortKeys}`);
+ }
+ const separator = generateNextLine(this.indent, level);
+ const results = [];
+ for (const key of keys){
+ const value = object[key];
+ const keyString = this.stringifyNode(key, {
+ level: level + 1,
+ block: true,
+ compact: true,
+ isKey: true
+ });
+ if (keyString === null) continue; // Skip this pair because of invalid key.
+ const explicitPair = tag !== null && tag !== "?" || keyString.length > 1024;
+ const valueString = this.stringifyNode(value, {
+ level: level + 1,
+ block: true,
+ compact: explicitPair,
+ isKey: false
+ });
+ if (valueString === null) continue; // Skip this pair because of invalid value.
+ let pairBuffer = "";
+ if (explicitPair) {
+ pairBuffer += keyString.charCodeAt(0) === LINE_FEED ? "?" : "? ";
+ }
+ pairBuffer += keyString;
+ if (explicitPair) pairBuffer += separator;
+ pairBuffer += valueString.charCodeAt(0) === LINE_FEED ? ":" : ": ";
+ pairBuffer += valueString;
+ results.push(pairBuffer);
+ }
+ const prefix = compact ? "" : separator;
+ return results.length ? prefix + results.join(separator) : "{}"; // Empty mapping if no valid pairs.
+ }
+ getTypeRepresentation(type, value) {
+ if (!type.represent) return value;
+ const style = this.styleMap.get(type.tag) ?? type.defaultStyle;
+ if (typeof type.represent === "function") {
+ return type.represent(value, style);
+ }
+ const represent = type.represent[style];
+ if (!represent) {
+ throw new TypeError(`!<${type.tag}> tag resolver accepts not "${style}" style`);
+ }
+ return represent(value, style);
+ }
+ detectType(value) {
+ for (const type of this.implicitTypes){
+ if (type.predicate?.(value)) {
+ value = this.getTypeRepresentation(type, value);
+ return {
+ tag: "?",
+ value
+ };
+ }
+ }
+ for (const type of this.explicitTypes){
+ if (type.predicate?.(value)) {
+ value = this.getTypeRepresentation(type, value);
+ return {
+ tag: type.tag,
+ value
+ };
+ }
+ }
+ return {
+ tag: null,
+ value
+ };
+ }
+ // Serializes `object` and writes it to global `result`.
+ // Returns true on success, or false on invalid object.
+ stringifyNode(value, { level, block, compact, isKey }) {
+ const result = this.detectType(value);
+ const tag = result.tag;
+ value = result.value;
+ if (block) {
+ block = this.flowLevel < 0 || this.flowLevel > level;
+ }
+ if (typeof value === "string" || value instanceof String) {
+ value = value instanceof String ? value.valueOf() : value;
+ if (tag !== "?") {
+ value = this.stringifyScalar(value, {
+ level,
+ isKey
+ });
+ }
+ } else if (isObject(value)) {
+ const duplicateIndex = this.duplicates.indexOf(value);
+ const duplicate = duplicateIndex !== -1;
+ if (duplicate) {
+ if (this.usedDuplicates.has(value)) return `*ref_${duplicateIndex}`;
+ this.usedDuplicates.add(value);
+ }
+ if (tag !== null && tag !== "?" || duplicate || this.indent !== 2 && level > 0) {
+ compact = false;
+ }
+ if (Array.isArray(value)) {
+ const arrayLevel = !this.arrayIndent && level > 0 ? level - 1 : level;
+ if (block && value.length !== 0) {
+ value = this.stringifyBlockSequence(value, {
+ level: arrayLevel,
+ compact
+ });
+ if (duplicate) {
+ value = `&ref_${duplicateIndex}${value}`;
+ }
+ } else {
+ value = this.stringifyFlowSequence(value, {
+ level: arrayLevel
+ });
+ if (duplicate) {
+ value = `&ref_${duplicateIndex} ${value}`;
+ }
+ }
+ } else {
+ if (block && Object.keys(value).length !== 0) {
+ value = this.stringifyBlockMapping(value, {
+ tag,
+ level,
+ compact
+ });
+ if (duplicate) {
+ value = `&ref_${duplicateIndex}${value}`;
+ }
+ } else {
+ value = this.stringifyFlowMapping(value, {
+ level
+ });
+ if (duplicate) {
+ value = `&ref_${duplicateIndex} ${value}`;
+ }
+ }
+ }
+ } else {
+ if (this.skipInvalid) return null;
+ throw new TypeError(`Cannot stringify ${typeof value}`);
+ }
+ if (tag !== null && tag !== "?") {
+ value = `!<${tag}> ${value}`;
+ }
+ return value;
+ }
+ stringify(value) {
+ if (this.useAnchors) {
+ const values = new Set();
+ const duplicateObjects = new Set();
+ inspectNode(value, values, duplicateObjects);
+ this.duplicates = [
+ ...duplicateObjects
+ ];
+ this.usedDuplicates = new Set();
+ }
+ const string = this.stringifyNode(value, {
+ level: 0,
+ block: true,
+ compact: true,
+ isKey: false
+ });
+ if (string !== null) {
+ return `${string}\n`;
+ }
+ return "";
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fZHVtcGVyX3N0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7XG4gIEFNUEVSU0FORCxcbiAgQVNURVJJU0ssXG4gIEJPTSxcbiAgQ09MT04sXG4gIENPTU1BLFxuICBDT01NRVJDSUFMX0FULFxuICBET1VCTEVfUVVPVEUsXG4gIEVYQ0xBTUFUSU9OLFxuICBHUkFWRV9BQ0NFTlQsXG4gIEdSRUFURVJfVEhBTixcbiAgaXNXaGl0ZVNwYWNlLFxuICBMRUZUX0NVUkxZX0JSQUNLRVQsXG4gIExFRlRfU1FVQVJFX0JSQUNLRVQsXG4gIExJTkVfRkVFRCxcbiAgTUlOVVMsXG4gIFBFUkNFTlQsXG4gIFFVRVNUSU9OLFxuICBSSUdIVF9DVVJMWV9CUkFDS0VULFxuICBSSUdIVF9TUVVBUkVfQlJBQ0tFVCxcbiAgU0hBUlAsXG4gIFNJTkdMRV9RVU9URSxcbiAgVkVSVElDQUxfTElORSxcbn0gZnJvbSBcIi4vX2NoYXJzLnRzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1NDSEVNQSwgdHlwZSBTY2hlbWEgfSBmcm9tIFwiLi9fc2NoZW1hLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEtpbmRUeXBlLCBTdHlsZVZhcmlhbnQsIFR5cGUgfSBmcm9tIFwiLi9fdHlwZS50c1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9fdXRpbHMudHNcIjtcblxuY29uc3QgU1RZTEVfUExBSU4gPSAxO1xuY29uc3QgU1RZTEVfU0lOR0xFID0gMjtcbmNvbnN0IFNUWUxFX0xJVEVSQUwgPSAzO1xuY29uc3QgU1RZTEVfRk9MREVEID0gNDtcbmNvbnN0IFNUWUxFX0RPVUJMRSA9IDU7XG5cbmNvbnN0IExFQURJTkdfU1BBQ0VfUkVHRVhQID0gL15cXG4qIC87XG5cbmNvbnN0IEVTQ0FQRV9TRVFVRU5DRVMgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPihbXG4gIFsweDAwLCBcIlxcXFwwXCJdLFxuICBbMHgwNywgXCJcXFxcYVwiXSxcbiAgWzB4MDgsIFwiXFxcXGJcIl0sXG4gIFsweDA5LCBcIlxcXFx0XCJdLFxuICBbMHgwYSwgXCJcXFxcblwiXSxcbiAgWzB4MGIsIFwiXFxcXHZcIl0sXG4gIFsweDBjLCBcIlxcXFxmXCJdLFxuICBbMHgwZCwgXCJcXFxcclwiXSxcbiAgWzB4MWIsIFwiXFxcXGVcIl0sXG4gIFsweDIyLCAnXFxcXFwiJ10sXG4gIFsweDVjLCBcIlxcXFxcXFxcXCJdLFxuICBbMHg4NSwgXCJcXFxcTlwiXSxcbiAgWzB4YTAsIFwiXFxcXF9cIl0sXG4gIFsweDIwMjgsIFwiXFxcXExcIl0sXG4gIFsweDIwMjksIFwiXFxcXFBcIl0sXG5dKTtcblxuY29uc3QgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVggPSBbXG4gIFwieVwiLFxuICBcIllcIixcbiAgXCJ5ZXNcIixcbiAgXCJZZXNcIixcbiAgXCJZRVNcIixcbiAgXCJvblwiLFxuICBcIk9uXCIsXG4gIFwiT05cIixcbiAgXCJuXCIsXG4gIFwiTlwiLFxuICBcIm5vXCIsXG4gIFwiTm9cIixcbiAgXCJOT1wiLFxuICBcIm9mZlwiLFxuICBcIk9mZlwiLFxuICBcIk9GRlwiLFxuXTtcblxuLyoqXG4gKiBFbmNvZGVzIGEgVW5pY29kZSBjaGFyYWN0ZXIgY29kZSBwb2ludCBhcyBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZS5cbiAqL1xuZnVuY3Rpb24gY2hhckNvZGVUb0hleFN0cmluZyhjaGFyQ29kZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaGV4U3RyaW5nID0gY2hhckNvZGUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChjaGFyQ29kZSA8PSAweGZmKSByZXR1cm4gYFxcXFx4JHtoZXhTdHJpbmcucGFkU3RhcnQoMiwgXCIwXCIpfWA7XG4gIGlmIChjaGFyQ29kZSA8PSAweGZmZmYpIHJldHVybiBgXFxcXHUke2hleFN0cmluZy5wYWRTdGFydCg0LCBcIjBcIil9YDtcbiAgaWYgKGNoYXJDb2RlIDw9IDB4ZmZmZmZmZmYpIHJldHVybiBgXFxcXFUke2hleFN0cmluZy5wYWRTdGFydCg4LCBcIjBcIil9YDtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIFwiQ29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRlwiLFxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZU1hcChcbiAgbWFwOiBSZWNvcmQ8c3RyaW5nLCBTdHlsZVZhcmlhbnQ+LFxuKTogTWFwPHN0cmluZywgU3R5bGVWYXJpYW50PiB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgZm9yIChsZXQgdGFnIG9mIE9iamVjdC5rZXlzKG1hcCkpIHtcbiAgICBjb25zdCBzdHlsZSA9IFN0cmluZyhtYXBbdGFnXSkgYXMgU3R5bGVWYXJpYW50O1xuICAgIGlmICh0YWcuc2xpY2UoMCwgMikgPT09IFwiISFcIikge1xuICAgICAgdGFnID0gYHRhZzp5YW1sLm9yZywyMDAyOiR7dGFnLnNsaWNlKDIpfWA7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQodGFnLCBzdHlsZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gSW5kZW50cyBldmVyeSBsaW5lIGluIGEgc3RyaW5nLiBFbXB0eSBsaW5lcyAoXFxuIG9ubHkpIGFyZSBub3QgaW5kZW50ZWQuXG5mdW5jdGlvbiBpbmRlbnRTdHJpbmcoc3RyaW5nOiBzdHJpbmcsIHNwYWNlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kZW50ID0gXCIgXCIucmVwZWF0KHNwYWNlcyk7XG4gIHJldHVybiBzdHJpbmdcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA/IGluZGVudCArIGxpbmUgOiBsaW5lKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU5leHRMaW5lKGluZGVudDogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcXG4ke1wiIFwiLnJlcGVhdChpbmRlbnQgKiBsZXZlbCl9YDtcbn1cblxuLyoqXG4gKiBAbGluayBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yLjIvIDUuMS4gQ2hhcmFjdGVyIFNldFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGNoYXJhY3RlciBpcyBwcmludGFibGUgd2l0aG91dCBlc2NhcGluZywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbnRhYmxlKGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgICgweDAwMDIwIDw9IGMgJiYgYyA8PSAweDAwMDA3ZSkgfHxcbiAgICAoMHgwMDBhMSA8PSBjICYmIGMgPD0gMHgwMGQ3ZmYgJiYgYyAhPT0gMHgyMDI4ICYmIGMgIT09IDB4MjAyOSkgfHxcbiAgICAoMHgwZTAwMCA8PSBjICYmIGMgPD0gMHgwMGZmZmQgJiYgYyAhPT0gQk9NKSB8fFxuICAgICgweDEwMDAwIDw9IGMgJiYgYyA8PSAweDEwZmZmZilcbiAgKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB2YWx1ZSBpcyBhbGxvd2VkIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1BsYWluU2FmZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpc1ByaW50YWJsZShjKSAmJlxuICAgIGMgIT09IEJPTSAmJlxuICAgIGMgIT09IENPTU1BICYmXG4gICAgYyAhPT0gTEVGVF9TUVVBUkVfQlJBQ0tFVCAmJlxuICAgIGMgIT09IFJJR0hUX1NRVUFSRV9CUkFDS0VUICYmXG4gICAgYyAhPT0gTEVGVF9DVVJMWV9CUkFDS0VUICYmXG4gICAgYyAhPT0gUklHSFRfQ1VSTFlfQlJBQ0tFVCAmJlxuICAgIGMgIT09IENPTE9OICYmXG4gICAgYyAhPT0gU0hBUlBcbiAgKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB2YWx1ZSBpcyBhbGxvd2VkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlzUGxhaW5TYWZlKGMpICYmXG4gICAgIWlzV2hpdGVTcGFjZShjKSAmJlxuICAgIGMgIT09IE1JTlVTICYmXG4gICAgYyAhPT0gUVVFU1RJT04gJiZcbiAgICBjICE9PSBBTVBFUlNBTkQgJiZcbiAgICBjICE9PSBBU1RFUklTSyAmJlxuICAgIGMgIT09IEVYQ0xBTUFUSU9OICYmXG4gICAgYyAhPT0gVkVSVElDQUxfTElORSAmJlxuICAgIGMgIT09IEdSRUFURVJfVEhBTiAmJlxuICAgIGMgIT09IFNJTkdMRV9RVU9URSAmJlxuICAgIGMgIT09IERPVUJMRV9RVU9URSAmJlxuICAgIGMgIT09IFBFUkNFTlQgJiZcbiAgICBjICE9PSBDT01NRVJDSUFMX0FUICYmXG4gICAgYyAhPT0gR1JBVkVfQUNDRU5UXG4gICk7XG59XG5cbi8vIERldGVybWluZXMgd2hldGhlciBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaXMgcmVxdWlyZWQuXG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBMRUFESU5HX1NQQUNFX1JFR0VYUC50ZXN0KHN0cmluZyk7XG59XG5cbi8vIERldGVybWluZXMgd2hpY2ggc2NhbGFyIHN0eWxlcyBhcmUgcG9zc2libGUgYW5kIHJldHVybnMgdGhlIHByZWZlcnJlZCBzdHlsZS5cbi8vIGxpbmVXaWR0aCA9IC0xID0+IG5vIGxpbWl0LlxuLy8gUHJlLWNvbmRpdGlvbnM6IHN0ci5sZW5ndGggPiAwLlxuLy8gUG9zdC1jb25kaXRpb25zOlxuLy8gIFNUWUxFX1BMQUlOIG9yIFNUWUxFX1NJTkdMRSA9PiBubyBcXG4gYXJlIGluIHRoZSBzdHJpbmcuXG4vLyAgU1RZTEVfTElURVJBTCA9PiBubyBsaW5lcyBhcmUgc3VpdGFibGUgZm9yIGZvbGRpbmcgKG9yIGxpbmVXaWR0aCBpcyAtMSkuXG4vLyAgU1RZTEVfRk9MREVEID0+IGEgbGluZSA+IGxpbmVXaWR0aCBhbmQgY2FuIGJlIGZvbGRlZCAoYW5kIGxpbmVXaWR0aCAhPT0gLTEpLlxuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoXG4gIHN0cmluZzogc3RyaW5nLFxuICBzaW5nbGVMaW5lT25seTogYm9vbGVhbixcbiAgaW5kZW50UGVyTGV2ZWw6IG51bWJlcixcbiAgbGluZVdpZHRoOiBudW1iZXIsXG4gIGltcGxpY2l0VHlwZXM6IFR5cGU8XCJzY2FsYXJcIiwgdW5rbm93bj5bXSxcbik6IG51bWJlciB7XG4gIGNvbnN0IHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xO1xuICBsZXQgaGFzTGluZUJyZWFrID0gZmFsc2U7XG4gIGxldCBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZTsgLy8gb25seSBjaGVja2VkIGlmIHNob3VsZFRyYWNrV2lkdGhcbiAgbGV0IHByZXZpb3VzTGluZUJyZWFrID0gLTE7IC8vIGNvdW50IHRoZSBmaXJzdCBsaW5lIGNvcnJlY3RseVxuICBsZXQgcGxhaW4gPSBpc1BsYWluU2FmZUZpcnN0KHN0cmluZy5jaGFyQ29kZUF0KDApKSAmJlxuICAgICFpc1doaXRlU3BhY2Uoc3RyaW5nLmNoYXJDb2RlQXQoc3RyaW5nLmxlbmd0aCAtIDEpKTtcblxuICBsZXQgY2hhcjogbnVtYmVyO1xuICBsZXQgaTogbnVtYmVyO1xuICBpZiAoc2luZ2xlTGluZU9ubHkpIHtcbiAgICAvLyBDYXNlOiBubyBibG9jayBzdHlsZXMuXG4gICAgLy8gQ2hlY2sgZm9yIGRpc2FsbG93ZWQgY2hhcmFjdGVycyB0byBydWxlIG91dCBwbGFpbiBhbmQgc2luZ2xlLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIENhc2U6IGJsb2NrIHN0eWxlcyBwZXJtaXR0ZWQuXG4gICAgZm9yIChpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNoYXIgPT09IExJTkVfRkVFRCkge1xuICAgICAgICBoYXNMaW5lQnJlYWsgPSB0cnVlO1xuICAgICAgICAvLyBDaGVjayBpZiBhbnkgbGluZSBjYW4gYmUgZm9sZGVkLlxuICAgICAgICBpZiAoc2hvdWxkVHJhY2tXaWR0aCkge1xuICAgICAgICAgIGhhc0ZvbGRhYmxlTGluZSA9IGhhc0ZvbGRhYmxlTGluZSB8fFxuICAgICAgICAgICAgLy8gRm9sZGFibGUgbGluZSA9IHRvbyBsb25nLCBhbmQgbm90IG1vcmUtaW5kZW50ZWQuXG4gICAgICAgICAgICAoaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJlxuICAgICAgICAgICAgICBzdHJpbmdbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gXCIgXCIpO1xuICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhcik7XG4gICAgfVxuICAgIC8vIGluIGNhc2UgdGhlIGVuZCBpcyBtaXNzaW5nIGEgXFxuXG4gICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8XG4gICAgICAoc2hvdWxkVHJhY2tXaWR0aCAmJlxuICAgICAgICBpIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmXG4gICAgICAgIHN0cmluZ1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSBcIiBcIik7XG4gIH1cbiAgLy8gQWx0aG91Z2ggZXZlcnkgc3R5bGUgY2FuIHJlcHJlc2VudCBcXG4gd2l0aG91dCBlc2NhcGluZywgcHJlZmVyIGJsb2NrIHN0eWxlc1xuICAvLyBmb3IgbXVsdGlsaW5lLCBzaW5jZSB0aGV5J3JlIG1vcmUgcmVhZGFibGUgYW5kIHRoZXkgZG9uJ3QgYWRkIGVtcHR5IGxpbmVzLlxuICAvLyBBbHNvIHByZWZlciBmb2xkaW5nIGEgc3VwZXItbG9uZyBsaW5lLlxuICBpZiAoIWhhc0xpbmVCcmVhayAmJiAhaGFzRm9sZGFibGVMaW5lKSB7XG4gICAgLy8gU3RyaW5ncyBpbnRlcnByZXRhYmxlIGFzIGFub3RoZXIgdHlwZSBoYXZlIHRvIGJlIHF1b3RlZDtcbiAgICAvLyBlLmcuIHRoZSBzdHJpbmcgJ3RydWUnIHZzLiB0aGUgYm9vbGVhbiB0cnVlLlxuICAgIHJldHVybiBwbGFpbiAmJiAhaW1wbGljaXRUeXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlLnJlc29sdmUoc3RyaW5nKSlcbiAgICAgID8gU1RZTEVfUExBSU5cbiAgICAgIDogU1RZTEVfU0lOR0xFO1xuICB9XG4gIC8vIEVkZ2UgY2FzZTogYmxvY2sgaW5kZW50YXRpb24gaW5kaWNhdG9yIGNhbiBvbmx5IGhhdmUgb25lIGRpZ2l0LlxuICBpZiAoaW5kZW50UGVyTGV2ZWwgPiA5ICYmIG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSkge1xuICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gIH1cbiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGJsb2NrIHN0eWxlcyBhcmUgdmFsaWQuXG4gIC8vIFByZWZlciBsaXRlcmFsIHN0eWxlIHVubGVzcyB3ZSB3YW50IHRvIGZvbGQuXG4gIHJldHVybiBoYXNGb2xkYWJsZUxpbmUgPyBTVFlMRV9GT0xERUQgOiBTVFlMRV9MSVRFUkFMO1xufVxuXG4vLyBHcmVlZHkgbGluZSBicmVha2luZy5cbi8vIFBpY2tzIHRoZSBsb25nZXN0IGxpbmUgdW5kZXIgdGhlIGxpbWl0IGVhY2ggdGltZSxcbi8vIG90aGVyd2lzZSBzZXR0bGVzIGZvciB0aGUgc2hvcnRlc3QgbGluZSBvdmVyIHRoZSBsaW1pdC5cbi8vIE5CLiBNb3JlLWluZGVudGVkIGxpbmVzICpjYW5ub3QqIGJlIGZvbGRlZCwgYXMgdGhhdCB3b3VsZCBhZGQgYW4gZXh0cmEgXFxuLlxuZnVuY3Rpb24gZm9sZExpbmUobGluZTogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGxpbmUgPT09IFwiXCIgfHwgbGluZVswXSA9PT0gXCIgXCIpIHJldHVybiBsaW5lO1xuXG4gIC8vIFNpbmNlIGEgbW9yZS1pbmRlbnRlZCBsaW5lIGFkZHMgYSBcXG4sIGJyZWFrcyBjYW4ndCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlLlxuICBjb25zdCBicmVha1JlZ0V4cCA9IC8gW14gXS9nOyAvLyBub3RlOiB0aGUgbWF0Y2ggaW5kZXggd2lsbCBhbHdheXMgYmUgPD0gbGVuZ3RoLTIuXG4gIC8vIHN0YXJ0IGlzIGFuIGluY2x1c2l2ZSBpbmRleC4gZW5kLCBjdXJyLCBhbmQgbmV4dCBhcmUgZXhjbHVzaXZlLlxuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kO1xuICBsZXQgY3VyciA9IDA7XG4gIGxldCBuZXh0ID0gMDtcbiAgY29uc3QgbGluZXMgPSBbXTtcblxuICAvLyBJbnZhcmlhbnRzOiAwIDw9IHN0YXJ0IDw9IGxlbmd0aC0xLlxuICAvLyAgIDAgPD0gY3VyciA8PSBuZXh0IDw9IG1heCgwLCBsZW5ndGgtMikuIGN1cnIgLSBzdGFydCA8PSB3aWR0aC5cbiAgLy8gSW5zaWRlIHRoZSBsb29wOlxuICAvLyAgIEEgbWF0Y2ggaW1wbGllcyBsZW5ndGggPj0gMiwgc28gY3VyciBhbmQgbmV4dCBhcmUgPD0gbGVuZ3RoLTIuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChicmVha1JlZ0V4cCkpIHtcbiAgICBuZXh0ID0gbWF0Y2guaW5kZXg7XG4gICAgLy8gbWFpbnRhaW4gaW52YXJpYW50OiBjdXJyIC0gc3RhcnQgPD0gd2lkdGhcbiAgICBpZiAobmV4dCAtIHN0YXJ0ID4gd2lkdGgpIHtcbiAgICAgIGVuZCA9IGN1cnIgPiBzdGFydCA/IGN1cnIgOiBuZXh0OyAvLyBkZXJpdmUgZW5kIDw9IGxlbmd0aC0yXG4gICAgICBsaW5lcy5wdXNoKGxpbmUuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgLy8gc2tpcCB0aGUgc3BhY2UgdGhhdCB3YXMgb3V0cHV0IGFzIFxcblxuICAgICAgc3RhcnQgPSBlbmQgKyAxOyAvLyBkZXJpdmUgc3RhcnQgPD0gbGVuZ3RoLTFcbiAgICB9XG4gICAgY3VyciA9IG5leHQ7XG4gIH1cblxuICAvLyBCeSB0aGUgaW52YXJpYW50cywgc3RhcnQgPD0gbGVuZ3RoLTEsIHNvIHRoZXJlIGlzIHNvbWV0aGluZyBsZWZ0IG92ZXIuXG4gIC8vIEl0IGlzIGVpdGhlciB0aGUgd2hvbGUgc3RyaW5nIG9yIGEgcGFydCBzdGFydGluZyBmcm9tIG5vbi13aGl0ZXNwYWNlLlxuICAvLyBJbnNlcnQgYSBicmVhayBpZiB0aGUgcmVtYWluZGVyIGlzIHRvbyBsb25nIGFuZCB0aGVyZSBpcyBhIGJyZWFrIGF2YWlsYWJsZS5cbiAgaWYgKGxpbmUubGVuZ3RoIC0gc3RhcnQgPiB3aWR0aCAmJiBjdXJyID4gc3RhcnQpIHtcbiAgICBsaW5lcy5wdXNoKGxpbmUuc2xpY2Uoc3RhcnQsIGN1cnIpKTtcbiAgICBsaW5lcy5wdXNoKGxpbmUuc2xpY2UoY3VyciArIDEpKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGxpbmUuc2xpY2Uoc3RhcnQpKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiB0cmltVHJhaWxpbmdOZXdsaW5lKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuYXQoLTEpID09PSBcIlxcblwiID8gc3RyaW5nLnNsaWNlKDAsIC0xKSA6IHN0cmluZztcbn1cblxuLy8gTm90ZTogYSBsb25nIGxpbmUgd2l0aG91dCBhIHN1aXRhYmxlIGJyZWFrIHBvaW50IHdpbGwgZXhjZWVkIHRoZSB3aWR0aCBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBldmVyeSBjaGFyIGluIHN0ciBpc1ByaW50YWJsZSwgc3RyLmxlbmd0aCA+IDAsIHdpZHRoID4gMC5cbmZ1bmN0aW9uIGZvbGRTdHJpbmcoc3RyaW5nOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAvLyBJbiBmb2xkZWQgc3R5bGUsICRrJCBjb25zZWN1dGl2ZSBuZXdsaW5lcyBvdXRwdXQgYXMgJGsrMSQgbmV3bGluZXPigJRcbiAgLy8gdW5sZXNzIHRoZXkncmUgYmVmb3JlIG9yIGFmdGVyIGEgbW9yZS1pbmRlbnRlZCBsaW5lLCBvciBhdCB0aGUgdmVyeVxuICAvLyBiZWdpbm5pbmcgb3IgZW5kLCBpbiB3aGljaCBjYXNlICRrJCBtYXBzIHRvICRrJC5cbiAgLy8gVGhlcmVmb3JlLCBwYXJzZSBlYWNoIGNodW5rIGFzIG5ld2xpbmUocykgZm9sbG93ZWQgYnkgYSBjb250ZW50IGxpbmUuXG4gIGNvbnN0IGxpbmVSZSA9IC8oXFxuKykoW15cXG5dKikvZztcblxuICAvLyBmaXJzdCBsaW5lIChwb3NzaWJseSBhbiBlbXB0eSBsaW5lKVxuICBsZXQgcmVzdWx0ID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgIGxldCBuZXh0TEYgPSBzdHJpbmcuaW5kZXhPZihcIlxcblwiKTtcbiAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nLmxlbmd0aDtcbiAgICBsaW5lUmUubGFzdEluZGV4ID0gbmV4dExGO1xuICAgIHJldHVybiBmb2xkTGluZShzdHJpbmcuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpO1xuICB9KSgpO1xuICAvLyBJZiB3ZSBoYXZlbid0IHJlYWNoZWQgdGhlIGZpcnN0IGNvbnRlbnQgbGluZSB5ZXQsIGRvbid0IGFkZCBhbiBleHRyYSBcXG4uXG4gIGxldCBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nWzBdID09PSBcIlxcblwiIHx8IHN0cmluZ1swXSA9PT0gXCIgXCI7XG4gIGxldCBtb3JlSW5kZW50ZWQ7XG5cbiAgLy8gcmVzdCBvZiB0aGUgbGluZXNcbiAgbGV0IG1hdGNoO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uZGl0aW9uYWwtYXNzaWdubWVudFxuICB3aGlsZSAoKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkpIHtcbiAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXTtcbiAgICBjb25zdCBsaW5lID0gbWF0Y2hbMl0gfHwgXCJcIjtcbiAgICBtb3JlSW5kZW50ZWQgPSBsaW5lWzBdID09PSBcIiBcIjtcbiAgICByZXN1bHQgKz0gcHJlZml4ICtcbiAgICAgICghcHJldk1vcmVJbmRlbnRlZCAmJiAhbW9yZUluZGVudGVkICYmIGxpbmUgIT09IFwiXCIgPyBcIlxcblwiIDogXCJcIikgK1xuICAgICAgZm9sZExpbmUobGluZSwgd2lkdGgpO1xuICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBFc2NhcGVzIGEgZG91YmxlLXF1b3RlZCBzdHJpbmcuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGNoYXI7XG4gIGxldCBuZXh0Q2hhcjtcbiAgbGV0IGVzY2FwZVNlcTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAvLyBDaGVjayBmb3Igc3Vycm9nYXRlIHBhaXJzIChyZWZlcmVuY2UgVW5pY29kZSAzLjAgc2VjdGlvbiBcIjMuNyBTdXJyb2dhdGVzXCIpLlxuICAgIGlmIChjaGFyID49IDB4ZDgwMCAmJiBjaGFyIDw9IDB4ZGJmZiAvKiBoaWdoIHN1cnJvZ2F0ZSAqLykge1xuICAgICAgbmV4dENoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dENoYXIgPj0gMHhkYzAwICYmIG5leHRDaGFyIDw9IDB4ZGZmZiAvKiBsb3cgc3Vycm9nYXRlICovKSB7XG4gICAgICAgIC8vIENvbWJpbmUgdGhlIHN1cnJvZ2F0ZSBwYWlyIGFuZCBzdG9yZSBpdCBlc2NhcGVkLlxuICAgICAgICByZXN1bHQgKz0gY2hhckNvZGVUb0hleFN0cmluZyhcbiAgICAgICAgICAoY2hhciAtIDB4ZDgwMCkgKiAweDQwMCArIG5leHRDaGFyIC0gMHhkYzAwICsgMHgxMDAwMCxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQWR2YW5jZSBpbmRleCBvbmUgZXh0cmEgc2luY2Ugd2UgYWxyZWFkeSB1c2VkIHRoYXQgY2hhciBoZXJlLlxuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlc2NhcGVTZXEgPSBFU0NBUEVfU0VRVUVOQ0VTLmdldChjaGFyKTtcbiAgICByZXN1bHQgKz0gIWVzY2FwZVNlcSAmJiBpc1ByaW50YWJsZShjaGFyKVxuICAgICAgPyBzdHJpbmdbaV1cbiAgICAgIDogZXNjYXBlU2VxIHx8IGNoYXJDb2RlVG9IZXhTdHJpbmcoY2hhcik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBQcmUtY29uZGl0aW9uczogc3RyaW5nIGlzIHZhbGlkIGZvciBhIGJsb2NrIHNjYWxhciwgMSA8PSBpbmRlbnRQZXJMZXZlbCA8PSA5LlxuZnVuY3Rpb24gYmxvY2tIZWFkZXIoc3RyaW5nOiBzdHJpbmcsIGluZGVudFBlckxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBpbmRlbnRJbmRpY2F0b3IgPSBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZylcbiAgICA/IFN0cmluZyhpbmRlbnRQZXJMZXZlbClcbiAgICA6IFwiXCI7XG5cbiAgLy8gbm90ZSB0aGUgc3BlY2lhbCBjYXNlOiB0aGUgc3RyaW5nICdcXG4nIGNvdW50cyBhcyBhIFwidHJhaWxpbmdcIiBlbXB0eSBsaW5lLlxuICBjb25zdCBjbGlwID0gc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJcXG5cIjtcbiAgY29uc3Qga2VlcCA9IGNsaXAgJiYgKHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMl0gPT09IFwiXFxuXCIgfHwgc3RyaW5nID09PSBcIlxcblwiKTtcbiAgY29uc3QgY2hvbXAgPSBrZWVwID8gXCIrXCIgOiBjbGlwID8gXCJcIiA6IFwiLVwiO1xuXG4gIHJldHVybiBgJHtpbmRlbnRJbmRpY2F0b3J9JHtjaG9tcH1cXG5gO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShcbiAgb2JqZWN0OiB1bmtub3duLFxuICBvYmplY3RzOiBTZXQ8dW5rbm93bj4sXG4gIGR1cGxpY2F0ZU9iamVjdHM6IFNldDx1bmtub3duPixcbikge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHJldHVybjtcbiAgaWYgKG9iamVjdHMuaGFzKG9iamVjdCkpIHtcbiAgICBkdXBsaWNhdGVPYmplY3RzLmFkZChvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBvYmplY3RzLmFkZChvYmplY3QpO1xuICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheShvYmplY3QpID8gb2JqZWN0IDogT2JqZWN0LnZhbHVlcyhvYmplY3QpO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIGVudHJpZXMpIHtcbiAgICBpbnNwZWN0Tm9kZSh2YWx1ZSwgb2JqZWN0cywgZHVwbGljYXRlT2JqZWN0cyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdW1wZXJTdGF0ZU9wdGlvbnMge1xuICAvKiogaW5kZW50YXRpb24gd2lkdGggdG8gdXNlIChpbiBzcGFjZXMpLiAqL1xuICBpbmRlbnQ/OiBudW1iZXI7XG4gIC8qKiB3aGVuIHRydWUsIGFkZHMgYW4gaW5kZW50YXRpb24gbGV2ZWwgdG8gYXJyYXkgZWxlbWVudHMgKi9cbiAgYXJyYXlJbmRlbnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogZG8gbm90IHRocm93IG9uIGludmFsaWQgdHlwZXMgKGxpa2UgZnVuY3Rpb24gaW4gdGhlIHNhZmUgc2NoZW1hKVxuICAgKiBhbmQgc2tpcCBwYWlycyBhbmQgc2luZ2xlIHZhbHVlcyB3aXRoIHN1Y2ggdHlwZXMuXG4gICAqL1xuICBza2lwSW52YWxpZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBzcGVjaWZpZXMgbGV2ZWwgb2YgbmVzdGluZywgd2hlbiB0byBzd2l0Y2ggZnJvbVxuICAgKiBibG9jayB0byBmbG93IHN0eWxlIGZvciBjb2xsZWN0aW9ucy4gLTEgbWVhbnMgYmxvY2sgc3R5bGUgZXZlcnl3aGVyZVxuICAgKi9cbiAgZmxvd0xldmVsPzogbnVtYmVyO1xuICAvKiogRWFjaCB0YWcgbWF5IGhhdmUgb3duIHNldCBvZiBzdHlsZXMuXHQtIFwidGFnXCIgPT4gXCJzdHlsZVwiIG1hcC4gKi9cbiAgc3R5bGVzPzogUmVjb3JkPHN0cmluZywgU3R5bGVWYXJpYW50PjtcbiAgLyoqIHNwZWNpZmllcyBhIHNjaGVtYSB0byB1c2UuICovXG4gIHNjaGVtYT86IFNjaGVtYTtcbiAgLyoqXG4gICAqIElmIHRydWUsIHNvcnQga2V5cyB3aGVuIGR1bXBpbmcgWUFNTCBpbiBhc2NlbmRpbmcsIEFTQ0lJIGNoYXJhY3RlciBvcmRlci5cbiAgICogSWYgYSBmdW5jdGlvbiwgdXNlIHRoZSBmdW5jdGlvbiB0byBzb3J0IHRoZSBrZXlzLiAoZGVmYXVsdDogZmFsc2UpXG4gICAqIElmIGEgZnVuY3Rpb24gaXMgc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZVxuICAgKiBpZiBmaXJzdCBhcmd1bWVudCBpcyBsZXNzIHRoYW4gc2Vjb25kIGFyZ3VtZW50LCB6ZXJvIGlmIHRoZXkncmUgZXF1YWxcbiAgICogYW5kIGEgcG9zaXRpdmUgdmFsdWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc29ydEtleXM/OiBib29sZWFuIHwgKChhOiBzdHJpbmcsIGI6IHN0cmluZykgPT4gbnVtYmVyKTtcbiAgLyoqIHNldCBtYXggbGluZSB3aWR0aC4gKGRlZmF1bHQ6IDgwKSAqL1xuICBsaW5lV2lkdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBpZiBmYWxzZSwgZG9uJ3QgY29udmVydCBkdXBsaWNhdGUgb2JqZWN0c1xuICAgKiBpbnRvIHJlZmVyZW5jZXMgKGRlZmF1bHQ6IHRydWUpXG4gICAqL1xuICB1c2VBbmNob3JzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGlmIGZhbHNlIGRvbid0IHRyeSB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIgeWFtbCB2ZXJzaW9ucy5cbiAgICogQ3VycmVudGx5OiBkb24ndCBxdW90ZSBcInllc1wiLCBcIm5vXCIgYW5kIHNvIG9uLFxuICAgKiBhcyByZXF1aXJlZCBmb3IgWUFNTCAxLjEgKGRlZmF1bHQ6IHRydWUpXG4gICAqL1xuICBjb21wYXRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGlmIHRydWUgZmxvdyBzZXF1ZW5jZXMgd2lsbCBiZSBjb25kZW5zZWQsIG9taXR0aW5nIHRoZVxuICAgKiBzcGFjZSBiZXR3ZWVuIGBrZXk6IHZhbHVlYCBvciBgYSwgYmAuIEVnLiBgJ1thLGJdJ2Agb3IgYHthOntiOmN9fWAuXG4gICAqIENhbiBiZSB1c2VmdWwgd2hlbiB1c2luZyB5YW1sIGZvciBwcmV0dHkgVVJMIHF1ZXJ5IHBhcmFtc1xuICAgKiBhcyBzcGFjZXMgYXJlICUtZW5jb2RlZC4gKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICovXG4gIGNvbmRlbnNlRmxvdz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEdW1wZXJTdGF0ZSB7XG4gIGluZGVudDogbnVtYmVyO1xuICBhcnJheUluZGVudDogYm9vbGVhbjtcbiAgc2tpcEludmFsaWQ6IGJvb2xlYW47XG4gIGZsb3dMZXZlbDogbnVtYmVyO1xuICBzb3J0S2V5czogYm9vbGVhbiB8ICgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IG51bWJlcik7XG4gIGxpbmVXaWR0aDogbnVtYmVyO1xuICB1c2VBbmNob3JzOiBib29sZWFuO1xuICBjb21wYXRNb2RlOiBib29sZWFuO1xuICBjb25kZW5zZUZsb3c6IGJvb2xlYW47XG4gIGltcGxpY2l0VHlwZXM6IFR5cGU8XCJzY2FsYXJcIj5bXTtcbiAgZXhwbGljaXRUeXBlczogVHlwZTxLaW5kVHlwZT5bXTtcbiAgZHVwbGljYXRlczogdW5rbm93bltdID0gW107XG4gIHVzZWREdXBsaWNhdGVzOiBTZXQ8dW5rbm93bj4gPSBuZXcgU2V0KCk7XG4gIHN0eWxlTWFwOiBNYXA8c3RyaW5nLCBTdHlsZVZhcmlhbnQ+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzY2hlbWEgPSBERUZBVUxUX1NDSEVNQSxcbiAgICBpbmRlbnQgPSAyLFxuICAgIGFycmF5SW5kZW50ID0gdHJ1ZSxcbiAgICBza2lwSW52YWxpZCA9IGZhbHNlLFxuICAgIGZsb3dMZXZlbCA9IC0xLFxuICAgIHN0eWxlcyA9IHVuZGVmaW5lZCxcbiAgICBzb3J0S2V5cyA9IGZhbHNlLFxuICAgIGxpbmVXaWR0aCA9IDgwLFxuICAgIHVzZUFuY2hvcnMgPSB0cnVlLFxuICAgIGNvbXBhdE1vZGUgPSB0cnVlLFxuICAgIGNvbmRlbnNlRmxvdyA9IGZhbHNlLFxuICB9OiBEdW1wZXJTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmluZGVudCA9IE1hdGgubWF4KDEsIGluZGVudCk7XG4gICAgdGhpcy5hcnJheUluZGVudCA9IGFycmF5SW5kZW50O1xuICAgIHRoaXMuc2tpcEludmFsaWQgPSBza2lwSW52YWxpZDtcbiAgICB0aGlzLmZsb3dMZXZlbCA9IGZsb3dMZXZlbDtcbiAgICBpZiAoc3R5bGVzKSB0aGlzLnN0eWxlTWFwID0gY3JlYXRlU3R5bGVNYXAoc3R5bGVzKTtcbiAgICB0aGlzLnNvcnRLZXlzID0gc29ydEtleXM7XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgdGhpcy51c2VBbmNob3JzID0gdXNlQW5jaG9ycztcbiAgICB0aGlzLmNvbXBhdE1vZGUgPSBjb21wYXRNb2RlO1xuICAgIHRoaXMuY29uZGVuc2VGbG93ID0gY29uZGVuc2VGbG93O1xuICAgIHRoaXMuaW1wbGljaXRUeXBlcyA9IHNjaGVtYS5pbXBsaWNpdFR5cGVzO1xuICAgIHRoaXMuZXhwbGljaXRUeXBlcyA9IHNjaGVtYS5leHBsaWNpdFR5cGVzO1xuICB9XG5cbiAgLy8gTm90ZTogbGluZSBicmVha2luZy9mb2xkaW5nIGlzIGltcGxlbWVudGVkIGZvciBvbmx5IHRoZSBmb2xkZWQgc3R5bGUuXG4gIC8vIE5CLiBXZSBkcm9wIHRoZSBsYXN0IHRyYWlsaW5nIG5ld2xpbmUgKGlmIGFueSkgb2YgYSByZXR1cm5lZCBibG9jayBzY2FsYXJcbiAgLy8gIHNpbmNlIHRoZSBkdW1wZXIgYWRkcyBpdHMgb3duIG5ld2xpbmUuIFRoaXMgYWx3YXlzIHdvcmtzOlxuICAvLyAgICDigKIgTm8gZW5kaW5nIG5ld2xpbmUgPT4gdW5hZmZlY3RlZDsgYWxyZWFkeSB1c2luZyBzdHJpcCBcIi1cIiBjaG9tcGluZy5cbiAgLy8gICAg4oCiIEVuZGluZyBuZXdsaW5lICAgID0+IHJlbW92ZWQgdGhlbiByZXN0b3JlZC5cbiAgLy8gIEltcG9ydGFudGx5LCB0aGlzIGtlZXBzIHRoZSBcIitcIiBjaG9tcCBpbmRpY2F0b3IgZnJvbSBnYWluaW5nIGFuIGV4dHJhIGxpbmUuXG4gIHN0cmluZ2lmeVNjYWxhcihcbiAgICBzdHJpbmc6IHN0cmluZyxcbiAgICB7IGxldmVsLCBpc0tleSB9OiB7IGxldmVsOiBudW1iZXI7IGlzS2V5OiBib29sZWFuIH0sXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIicnXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBhdE1vZGUgJiYgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVguaW5jbHVkZXMoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIGAnJHtzdHJpbmd9J2A7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZW50ID0gdGhpcy5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7IC8vIG5vIDAtaW5kZW50IHNjYWxhcnNcbiAgICAvLyBBcyBpbmRlbnRhdGlvbiBnZXRzIGRlZXBlciwgbGV0IHRoZSB3aWR0aCBkZWNyZWFzZSBtb25vdG9uaWNhbGx5XG4gICAgLy8gdG8gdGhlIGxvd2VyIGJvdW5kIG1pbih0aGlzLmxpbmVXaWR0aCwgNDApLlxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGltcGxpZXNcbiAgICAvLyAgdGhpcy5saW5lV2lkdGgg4omkIDQwICsgdGhpcy5pbmRlbnQ6IHdpZHRoIGlzIGZpeGVkIGF0IHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyAgdGhpcy5saW5lV2lkdGggPiA0MCArIHRoaXMuaW5kZW50OiB3aWR0aCBkZWNyZWFzZXMgdW50aWwgdGhlIGxvd2VyXG4gICAgLy8gIGJvdW5kLlxuICAgIC8vIFRoaXMgYmVoYXZlcyBiZXR0ZXIgdGhhbiBhIGNvbnN0YW50IG1pbmltdW0gd2lkdGggd2hpY2ggZGlzYWxsb3dzXG4gICAgLy8gbmFycm93ZXIgb3B0aW9ucywgb3IgYW4gaW5kZW50IHRocmVzaG9sZCB3aGljaCBjYXVzZXMgdGhlIHdpZHRoXG4gICAgLy8gdG8gc3VkZGVubHkgaW5jcmVhc2UuXG4gICAgY29uc3QgbGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGggPT09IC0xXG4gICAgICA/IC0xXG4gICAgICA6IE1hdGgubWF4KE1hdGgubWluKHRoaXMubGluZVdpZHRoLCA0MCksIHRoaXMubGluZVdpZHRoIC0gaW5kZW50KTtcblxuICAgIC8vIFdpdGhvdXQga25vd2luZyBpZiBrZXlzIGFyZSBpbXBsaWNpdC9leHBsaWNpdCxcbiAgICAvLyBhc3N1bWUgaW1wbGljaXQgZm9yIHNhZmV0eS5cbiAgICBjb25zdCBzaW5nbGVMaW5lT25seSA9IGlzS2V5IHx8XG4gICAgICAvLyBObyBibG9jayBzdHlsZXMgaW4gZmxvdyBtb2RlLlxuICAgICAgKHRoaXMuZmxvd0xldmVsID4gLTEgJiYgbGV2ZWwgPj0gdGhpcy5mbG93TGV2ZWwpO1xuXG4gICAgY29uc3Qgc2NhbGFyU3R5bGUgPSBjaG9vc2VTY2FsYXJTdHlsZShcbiAgICAgIHN0cmluZyxcbiAgICAgIHNpbmdsZUxpbmVPbmx5LFxuICAgICAgdGhpcy5pbmRlbnQsXG4gICAgICBsaW5lV2lkdGgsXG4gICAgICB0aGlzLmltcGxpY2l0VHlwZXMsXG4gICAgKTtcbiAgICBzd2l0Y2ggKHNjYWxhclN0eWxlKSB7XG4gICAgICBjYXNlIFNUWUxFX1BMQUlOOlxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6XG4gICAgICAgIHJldHVybiBgJyR7c3RyaW5nLnJlcGxhY2UoLycvZywgXCInJ1wiKX0nYDtcbiAgICAgIGNhc2UgU1RZTEVfTElURVJBTDpcbiAgICAgICAgcmV0dXJuIGB8JHtibG9ja0hlYWRlcihzdHJpbmcsIHRoaXMuaW5kZW50KX0ke1xuICAgICAgICAgIHRyaW1UcmFpbGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKHN0cmluZywgaW5kZW50KSlcbiAgICAgICAgfWA7XG4gICAgICBjYXNlIFNUWUxFX0ZPTERFRDpcbiAgICAgICAgcmV0dXJuIGA+JHtibG9ja0hlYWRlcihzdHJpbmcsIHRoaXMuaW5kZW50KX0ke1xuICAgICAgICAgIHRyaW1UcmFpbGluZ05ld2xpbmUoXG4gICAgICAgICAgICBpbmRlbnRTdHJpbmcoZm9sZFN0cmluZyhzdHJpbmcsIGxpbmVXaWR0aCksIGluZGVudCksXG4gICAgICAgICAgKVxuICAgICAgICB9YDtcbiAgICAgIGNhc2UgU1RZTEVfRE9VQkxFOlxuICAgICAgICByZXR1cm4gYFwiJHtlc2NhcGVTdHJpbmcoc3RyaW5nKX1cImA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBzY2FsYXIgc3R5bGUgc2hvdWxkIGJlIHVucmVhY2hhYmxlOiBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQgYWdhaW5zdCBEZW5vIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9zdGQvaXNzdWVzXCIsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3RyaW5naWZ5Rmxvd1NlcXVlbmNlKFxuICAgIGFycmF5OiB1bmtub3duW10sXG4gICAgeyBsZXZlbCB9OiB7IGxldmVsOiBudW1iZXIgfSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhcnJheSkge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5zdHJpbmdpZnlOb2RlKHZhbHVlLCB7XG4gICAgICAgIGxldmVsLFxuICAgICAgICBibG9jazogZmFsc2UsXG4gICAgICAgIGNvbXBhY3Q6IGZhbHNlLFxuICAgICAgICBpc0tleTogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGlmIChzdHJpbmcgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgcmVzdWx0cy5wdXNoKHN0cmluZyk7XG4gICAgfVxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuY29uZGVuc2VGbG93ID8gXCIsXCIgOiBcIiwgXCI7XG4gICAgcmV0dXJuIGBbJHtyZXN1bHRzLmpvaW4oc2VwYXJhdG9yKX1dYDtcbiAgfVxuXG4gIHN0cmluZ2lmeUJsb2NrU2VxdWVuY2UoXG4gICAgYXJyYXk6IHVua25vd25bXSxcbiAgICB7IGxldmVsLCBjb21wYWN0IH06IHsgbGV2ZWw6IG51bWJlcjsgY29tcGFjdDogYm9vbGVhbiB9LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBnZW5lcmF0ZU5leHRMaW5lKHRoaXMuaW5kZW50LCBsZXZlbCk7XG4gICAgY29uc3QgcHJlZml4ID0gY29tcGFjdCA/IFwiXCIgOiB3aGl0ZXNwYWNlO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFycmF5KSB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLnN0cmluZ2lmeU5vZGUodmFsdWUsIHtcbiAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgYmxvY2s6IHRydWUsXG4gICAgICAgIGNvbXBhY3Q6IHRydWUsXG4gICAgICAgIGlzS2V5OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHN0cmluZyA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICBjb25zdCBsaW5lUHJlZml4ID0gTElORV9GRUVEID09PSBzdHJpbmcuY2hhckNvZGVBdCgwKSA/IFwiLVwiIDogXCItIFwiO1xuICAgICAgcmVzdWx0cy5wdXNoKGAke2xpbmVQcmVmaXh9JHtzdHJpbmd9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzLmxlbmd0aCA/IHByZWZpeCArIHJlc3VsdHMuam9pbih3aGl0ZXNwYWNlKSA6IFwiW11cIjtcbiAgfVxuXG4gIHN0cmluZ2lmeUZsb3dNYXBwaW5nKFxuICAgIG9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgeyBsZXZlbCB9OiB7IGxldmVsOiBudW1iZXIgfSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMuY29uZGVuc2VGbG93ID8gJ1wiJyA6IFwiXCI7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5jb25kZW5zZUZsb3cgPyBcIjpcIiA6IFwiOiBcIjtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICBjb25zdCBrZXlTdHJpbmcgPSB0aGlzLnN0cmluZ2lmeU5vZGUoa2V5LCB7XG4gICAgICAgIGxldmVsLFxuICAgICAgICBibG9jazogZmFsc2UsXG4gICAgICAgIGNvbXBhY3Q6IGZhbHNlLFxuICAgICAgICBpc0tleTogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGlmIChrZXlTdHJpbmcgPT09IG51bGwpIGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgcGFpciBiZWNhdXNlIG9mIGludmFsaWQga2V5O1xuXG4gICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHRoaXMuc3RyaW5naWZ5Tm9kZSh2YWx1ZSwge1xuICAgICAgICBsZXZlbCxcbiAgICAgICAgYmxvY2s6IGZhbHNlLFxuICAgICAgICBjb21wYWN0OiBmYWxzZSxcbiAgICAgICAgaXNLZXk6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFsdWVTdHJpbmcgPT09IG51bGwpIGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgcGFpciBiZWNhdXNlIG9mIGludmFsaWQgdmFsdWUuXG5cbiAgICAgIGNvbnN0IGtleVByZWZpeCA9IGtleVN0cmluZy5sZW5ndGggPiAxMDI0ID8gXCI/IFwiIDogXCJcIjtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgcXVvdGUgKyBrZXlQcmVmaXggKyBrZXlTdHJpbmcgKyBxdW90ZSArIHNlcGFyYXRvciArIHZhbHVlU3RyaW5nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYHske3Jlc3VsdHMuam9pbihcIiwgXCIpfX1gO1xuICB9XG5cbiAgc3RyaW5naWZ5QmxvY2tNYXBwaW5nKFxuICAgIG9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgeyB0YWcsIGxldmVsLCBjb21wYWN0IH06IHtcbiAgICAgIHRhZzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGxldmVsOiBudW1iZXI7XG4gICAgICBjb21wYWN0OiBib29sZWFuO1xuICAgIH0sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgICAvLyBBbGxvdyBzb3J0aW5nIGtleXMgc28gdGhhdCB0aGUgb3V0cHV0IGZpbGUgaXMgZGV0ZXJtaW5pc3RpY1xuICAgIGlmICh0aGlzLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgICAvLyBEZWZhdWx0IHNvcnRpbmdcbiAgICAgIGtleXMuc29ydCgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc29ydEtleXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgICAgIGtleXMuc29ydCh0aGlzLnNvcnRLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydEtleXMpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBpcyB3cm9uZ1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFwic29ydEtleXNcIiBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uOiByZWNlaXZlZCAke3R5cGVvZiB0aGlzXG4gICAgICAgICAgLnNvcnRLZXlzfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IGdlbmVyYXRlTmV4dExpbmUodGhpcy5pbmRlbnQsIGxldmVsKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgIGNvbnN0IGtleVN0cmluZyA9IHRoaXMuc3RyaW5naWZ5Tm9kZShrZXksIHtcbiAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgYmxvY2s6IHRydWUsXG4gICAgICAgIGNvbXBhY3Q6IHRydWUsXG4gICAgICAgIGlzS2V5OiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBpZiAoa2V5U3RyaW5nID09PSBudWxsKSBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIGtleS5cblxuICAgICAgY29uc3QgZXhwbGljaXRQYWlyID0gKHRhZyAhPT0gbnVsbCAmJiB0YWcgIT09IFwiP1wiKSB8fFxuICAgICAgICAoa2V5U3RyaW5nLmxlbmd0aCA+IDEwMjQpO1xuXG4gICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHRoaXMuc3RyaW5naWZ5Tm9kZSh2YWx1ZSwge1xuICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICBibG9jazogdHJ1ZSxcbiAgICAgICAgY29tcGFjdDogZXhwbGljaXRQYWlyLFxuICAgICAgICBpc0tleTogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGlmICh2YWx1ZVN0cmluZyA9PT0gbnVsbCkgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cblxuICAgICAgbGV0IHBhaXJCdWZmZXIgPSBcIlwiO1xuICAgICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgICBwYWlyQnVmZmVyICs9IGtleVN0cmluZy5jaGFyQ29kZUF0KDApID09PSBMSU5FX0ZFRUQgPyBcIj9cIiA6IFwiPyBcIjtcbiAgICAgIH1cbiAgICAgIHBhaXJCdWZmZXIgKz0ga2V5U3RyaW5nO1xuICAgICAgaWYgKGV4cGxpY2l0UGFpcikgcGFpckJ1ZmZlciArPSBzZXBhcmF0b3I7XG4gICAgICBwYWlyQnVmZmVyICs9IHZhbHVlU3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IExJTkVfRkVFRCA/IFwiOlwiIDogXCI6IFwiO1xuICAgICAgcGFpckJ1ZmZlciArPSB2YWx1ZVN0cmluZztcbiAgICAgIHJlc3VsdHMucHVzaChwYWlyQnVmZmVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSBjb21wYWN0ID8gXCJcIiA6IHNlcGFyYXRvcjtcbiAgICByZXR1cm4gcmVzdWx0cy5sZW5ndGggPyBwcmVmaXggKyByZXN1bHRzLmpvaW4oc2VwYXJhdG9yKSA6IFwie31cIjsgLy8gRW1wdHkgbWFwcGluZyBpZiBubyB2YWxpZCBwYWlycy5cbiAgfVxuXG4gIGdldFR5cGVSZXByZXNlbnRhdGlvbih0eXBlOiBUeXBlPEtpbmRUeXBlLCB1bmtub3duPiwgdmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAoIXR5cGUucmVwcmVzZW50KSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLnN0eWxlTWFwLmdldCh0eXBlLnRhZykgPz9cbiAgICAgIHR5cGUuZGVmYXVsdFN0eWxlIGFzIFN0eWxlVmFyaWFudDtcbiAgICBpZiAodHlwZW9mIHR5cGUucmVwcmVzZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0eXBlLnJlcHJlc2VudCh2YWx1ZSwgc3R5bGUpO1xuICAgIH1cbiAgICBjb25zdCByZXByZXNlbnQgPSB0eXBlLnJlcHJlc2VudFtzdHlsZV07XG4gICAgaWYgKCFyZXByZXNlbnQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGAhPCR7dHlwZS50YWd9PiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgXCIke3N0eWxlfVwiIHN0eWxlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXByZXNlbnQodmFsdWUsIHN0eWxlKTtcbiAgfVxuXG4gIGRldGVjdFR5cGUodmFsdWU6IHVua25vd24pOiB7IHRhZzogc3RyaW5nIHwgbnVsbDsgdmFsdWU6IHVua25vd24gfSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHRoaXMuaW1wbGljaXRUeXBlcykge1xuICAgICAgaWYgKHR5cGUucHJlZGljYXRlPy4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRUeXBlUmVwcmVzZW50YXRpb24odHlwZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4geyB0YWc6IFwiP1wiLCB2YWx1ZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdGhpcy5leHBsaWNpdFR5cGVzKSB7XG4gICAgICBpZiAodHlwZS5wcmVkaWNhdGU/Lih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmdldFR5cGVSZXByZXNlbnRhdGlvbih0eXBlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7IHRhZzogdHlwZS50YWcsIHZhbHVlIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHRhZzogbnVsbCwgdmFsdWUgfTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZXMgYG9iamVjdGAgYW5kIHdyaXRlcyBpdCB0byBnbG9iYWwgYHJlc3VsdGAuXG4gIC8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBpbnZhbGlkIG9iamVjdC5cbiAgc3RyaW5naWZ5Tm9kZSh2YWx1ZTogdW5rbm93biwgeyBsZXZlbCwgYmxvY2ssIGNvbXBhY3QsIGlzS2V5IH06IHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIGJsb2NrOiBib29sZWFuO1xuICAgIGNvbXBhY3Q6IGJvb2xlYW47XG4gICAgaXNLZXk6IGJvb2xlYW47XG4gIH0pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmRldGVjdFR5cGUodmFsdWUpO1xuICAgIGNvbnN0IHRhZyA9IHJlc3VsdC50YWc7XG4gICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG5cbiAgICBpZiAoYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5mbG93TGV2ZWwgPCAwIHx8IHRoaXMuZmxvd0xldmVsID4gbGV2ZWw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICAgIGlmICh0YWcgIT09IFwiP1wiKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5zdHJpbmdpZnlTY2FsYXIodmFsdWUgYXMgc3RyaW5nLCB7IGxldmVsLCBpc0tleSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZHVwbGljYXRlSW5kZXggPSB0aGlzLmR1cGxpY2F0ZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7XG5cbiAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlZER1cGxpY2F0ZXMuaGFzKHZhbHVlKSkgcmV0dXJuIGAqcmVmXyR7ZHVwbGljYXRlSW5kZXh9YDtcbiAgICAgICAgdGhpcy51c2VkRHVwbGljYXRlcy5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAodGFnICE9PSBudWxsICYmIHRhZyAhPT0gXCI/XCIpIHx8XG4gICAgICAgIGR1cGxpY2F0ZSB8fFxuICAgICAgICAodGhpcy5pbmRlbnQgIT09IDIgJiYgbGV2ZWwgPiAwKVxuICAgICAgKSB7XG4gICAgICAgIGNvbXBhY3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBhcnJheUxldmVsID0gIXRoaXMuYXJyYXlJbmRlbnQgJiYgbGV2ZWwgPiAwID8gbGV2ZWwgLSAxIDogbGV2ZWw7XG4gICAgICAgIGlmIChibG9jayAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc3RyaW5naWZ5QmxvY2tTZXF1ZW5jZSh2YWx1ZSwge1xuICAgICAgICAgICAgbGV2ZWw6IGFycmF5TGV2ZWwsXG4gICAgICAgICAgICBjb21wYWN0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYCZyZWZfJHtkdXBsaWNhdGVJbmRleH0ke3ZhbHVlfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5zdHJpbmdpZnlGbG93U2VxdWVuY2UodmFsdWUsIHsgbGV2ZWw6IGFycmF5TGV2ZWwgfSk7XG4gICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBgJnJlZl8ke2R1cGxpY2F0ZUluZGV4fSAke3ZhbHVlfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYmxvY2sgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5zdHJpbmdpZnlCbG9ja01hcHBpbmcodmFsdWUsIHsgdGFnLCBsZXZlbCwgY29tcGFjdCB9KTtcbiAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGAmcmVmXyR7ZHVwbGljYXRlSW5kZXh9JHt2YWx1ZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc3RyaW5naWZ5Rmxvd01hcHBpbmcodmFsdWUsIHsgbGV2ZWwgfSk7XG4gICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBgJnJlZl8ke2R1cGxpY2F0ZUluZGV4fSAke3ZhbHVlfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNraXBJbnZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENhbm5vdCBzdHJpbmdpZnkgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRhZyAhPT0gbnVsbCAmJiB0YWcgIT09IFwiP1wiKSB7XG4gICAgICB2YWx1ZSA9IGAhPCR7dGFnfT4gJHt2YWx1ZX1gO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSBhcyBzdHJpbmc7XG4gIH1cblxuICBzdHJpbmdpZnkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnVzZUFuY2hvcnMpIHtcbiAgICAgIGNvbnN0IHZhbHVlczogU2V0PHVua25vd24+ID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgZHVwbGljYXRlT2JqZWN0czogU2V0PHVua25vd24+ID0gbmV3IFNldCgpO1xuICAgICAgaW5zcGVjdE5vZGUodmFsdWUsIHZhbHVlcywgZHVwbGljYXRlT2JqZWN0cyk7XG4gICAgICB0aGlzLmR1cGxpY2F0ZXMgPSBbLi4uZHVwbGljYXRlT2JqZWN0c107XG4gICAgICB0aGlzLnVzZWREdXBsaWNhdGVzID0gbmV3IFNldCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuc3RyaW5naWZ5Tm9kZSh2YWx1ZSwge1xuICAgICAgbGV2ZWw6IDAsXG4gICAgICBibG9jazogdHJ1ZSxcbiAgICAgIGNvbXBhY3Q6IHRydWUsXG4gICAgICBpc0tleTogZmFsc2UsXG4gICAgfSk7XG4gICAgaWYgKHN0cmluZyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGAke3N0cmluZ31cXG5gO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvRkFBb0Y7QUFDcEYsMEVBQTBFO0FBQzFFLHFEQUFxRDtBQUVyRCxTQUNFLFNBQVMsRUFDVCxRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxLQUFLLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFlB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
+// denoCacheMetadata=4775469113387118519,14733151582528599098 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3c78879b3e16ca06e56737c27c7272499f5c768d3b4080c728b63c4f98f8299d.js b/vendor/gen/https/jsr.io/3c78879b3e16ca06e56737c27c7272499f5c768d3b4080c728b63c4f98f8299d.js
new file mode 100644
index 0000000..820b607
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3c78879b3e16ca06e56737c27c7272499f5c768d3b4080c728b63c4f98f8299d.js
@@ -0,0 +1,16 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+/**
+ * The character used to separate entries in the PATH environment variable.
+ * On Windows, this is `;`. On all other platforms, this is `:`.
+ */ export const DELIMITER = isWindows ? ";" : ":";
+/**
+ * The character used to separate components of a file path.
+ * On Windows, this is `\`. On all other platforms, this is `/`.
+ */ export const SEPARATOR = isWindows ? "\\" : "/";
+/**
+ * A regular expression that matches one or more path separators.
+ */ export const SEPARATOR_PATTERN = isWindows ? /[\\/]+/ : /\/+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogT24gV2luZG93cywgdGhpcyBpcyBgO2AuIE9uIGFsbCBvdGhlciBwbGF0Zm9ybXMsIHRoaXMgaXMgYDpgLlxuICovXG5leHBvcnQgY29uc3QgREVMSU1JVEVSID0gaXNXaW5kb3dzID8gXCI7XCIgYXMgY29uc3QgOiBcIjpcIiBhcyBjb25zdDtcbi8qKlxuICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGNvbXBvbmVudHMgb2YgYSBmaWxlIHBhdGguXG4gKiBPbiBXaW5kb3dzLCB0aGlzIGlzIGBcXGAuIE9uIGFsbCBvdGhlciBwbGF0Zm9ybXMsIHRoaXMgaXMgYC9gLlxuICovXG5leHBvcnQgY29uc3QgU0VQQVJBVE9SID0gaXNXaW5kb3dzID8gXCJcXFxcXCIgYXMgY29uc3QgOiBcIi9cIiBhcyBjb25zdDtcbi8qKlxuICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIG9uZSBvciBtb3JlIHBhdGggc2VwYXJhdG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUEFSQVRPUl9QQVRURVJOID0gaXNXaW5kb3dzID8gL1tcXFxcL10rLyA6IC9cXC8rLztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBQ3JDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFFckM7OztDQUdDLEdBQ0QsT0FBTyxNQUFNLFlBQVksWUFBWSxNQUFlLElBQWE7QUFDakU7OztDQUdDLEdBQ0QsT0FBTyxNQUFNLFlBQVksWUFBWSxPQUFnQixJQUFhO0FBQ2xFOztDQUVDLEdBQ0QsT0FBTyxNQUFNLG9CQUFvQixZQUFZLFdBQVcsTUFBTSJ9
+// denoCacheMetadata=8121436083885179975,1642814832531091071 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3cba2e78a97f1de50755b20ffa539bd0bde61f127769015037fc617d6d071635.js b/vendor/gen/https/jsr.io/3cba2e78a97f1de50755b20ffa539bd0bde61f127769015037fc617d6d071635.js
new file mode 100644
index 0000000..6e1473f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3cba2e78a97f1de50755b20ffa539bd0bde61f127769015037fc617d6d071635.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { toFileUrl as posixToFileUrl } from "./posix/to_file_url.ts";
+import { toFileUrl as windowsToFileUrl } from "./windows/to_file_url.ts";
+/**
+ * Converts a path string to a file URL.
+ *
+ * @example Usage
+ * ```ts
+ * import { toFileUrl } from "@std/path/to-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(toFileUrl("\\home\\foo"), new URL("file:///home/foo"));
+ * assertEquals(toFileUrl("C:\\Users\\foo"), new URL("file:///C:/Users/foo"));
+ * assertEquals(toFileUrl("\\\\127.0.0.1\\home\\foo"), new URL("file://127.0.0.1/home/foo"));
+ * } else {
+ * assertEquals(toFileUrl("/home/foo"), new URL("file:///home/foo"));
+ * }
+ * ```
+ *
+ * @param path Path to convert to file URL.
+ * @returns The file URL equivalent to the path.
+ */ export function toFileUrl(path) {
+ return isWindows ? windowsToFileUrl(path) : posixToFileUrl(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC90b19maWxlX3VybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IHRvRmlsZVVybCBhcyBwb3NpeFRvRmlsZVVybCB9IGZyb20gXCIuL3Bvc2l4L3RvX2ZpbGVfdXJsLnRzXCI7XG5pbXBvcnQgeyB0b0ZpbGVVcmwgYXMgd2luZG93c1RvRmlsZVVybCB9IGZyb20gXCIuL3dpbmRvd3MvdG9fZmlsZV91cmwudHNcIjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggc3RyaW5nIHRvIGEgZmlsZSBVUkwuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0b0ZpbGVVcmwgfSBmcm9tIFwiQHN0ZC9wYXRoL3RvLWZpbGUtdXJsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHRvRmlsZVVybChcIlxcXFxob21lXFxcXGZvb1wiKSwgbmV3IFVSTChcImZpbGU6Ly8vaG9tZS9mb29cIikpO1xuICogICBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIikpO1xuICogICBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiXFxcXFxcXFwxMjcuMC4wLjFcXFxcaG9tZVxcXFxmb29cIiksIG5ldyBVUkwoXCJmaWxlOi8vMTI3LjAuMC4xL2hvbWUvZm9vXCIpKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyh0b0ZpbGVVcmwoXCIvaG9tZS9mb29cIiksIG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gY29udmVydCB0byBmaWxlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIFVSTCBlcXVpdmFsZW50IHRvIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlVXJsKHBhdGg6IHN0cmluZyk6IFVSTCB7XG4gIHJldHVybiBpc1dpbmRvd3MgPyB3aW5kb3dzVG9GaWxlVXJsKHBhdGgpIDogcG9zaXhUb0ZpbGVVcmwocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsYUFBYSxjQUFjLFFBQVEseUJBQXlCO0FBQ3JFLFNBQVMsYUFBYSxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsVUFBVSxJQUFZO0VBQ3BDLE9BQU8sWUFBWSxpQkFBaUIsUUFBUSxlQUFlO0FBQzdEIn0=
+// denoCacheMetadata=3272691341595157225,14545617026695716204 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3d9ec5951e86ecfa4573d5391ec7021ff3a65ee612fff17e71112d0af364fe81.js b/vendor/gen/https/jsr.io/3d9ec5951e86ecfa4573d5391ec7021ff3a65ee612fff17e71112d0af364fe81.js
new file mode 100644
index 0000000..373e458
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3d9ec5951e86ecfa4573d5391ec7021ff3a65ee612fff17e71112d0af364fe81.js
@@ -0,0 +1,11 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+export function assertArg(url) {
+ url = url instanceof URL ? url : new URL(url);
+ if (url.protocol !== "file:") {
+ throw new TypeError(`URL must be a file URL: received "${url.protocol}"`);
+ }
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2Zyb21fZmlsZV91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFyZyh1cmw6IFVSTCB8IHN0cmluZykge1xuICB1cmwgPSB1cmwgaW5zdGFuY2VvZiBVUkwgPyB1cmwgOiBuZXcgVVJMKHVybCk7XG4gIGlmICh1cmwucHJvdG9jb2wgIT09IFwiZmlsZTpcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVVJMIG11c3QgYmUgYSBmaWxlIFVSTDogcmVjZWl2ZWQgXCIke3VybC5wcm90b2NvbH1cImAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsT0FBTyxTQUFTLFVBQVUsR0FBaUI7RUFDekMsTUFBTSxlQUFlLE1BQU0sTUFBTSxJQUFJLElBQUk7RUFDekMsSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTO0lBQzVCLE1BQU0sSUFBSSxVQUNSLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBRXhEO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=5971913132499612643,10698618876760532972 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3f59705da94195438968647319ea2cac89b81d4e967347f0fcc8998c7a615a50.js b/vendor/gen/https/jsr.io/3f59705da94195438968647319ea2cac89b81d4e967347f0fcc8998c7a615a50.js
new file mode 100644
index 0000000..5edec6f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3f59705da94195438968647319ea2cac89b81d4e967347f0fcc8998c7a615a50.js
@@ -0,0 +1,182 @@
+import { dirname, fromFileUrl, join } from "jsr:@std/path@^1.0.6";
+import { encodeBase32 } from "jsr:/@std/encoding@^1.0.5/base32";
+import { lastIndexOfNeedle } from "jsr:@std/bytes@^1.0.2";
+import * as deno from "./deno.ts";
+import { rootInfo } from "./deno.ts";
+import { mapContentType, mediaTypeFromSpecifier, mediaTypeToLoader, parseNpmSpecifier } from "./shared.ts";
+let ROOT_INFO_OUTPUT;
+export const DENO_CACHE_METADATA = new TextEncoder().encode("\n// denoCacheMetadata=");
+export class NativeLoader {
+ #nodeModulesDirManual;
+ #infoCache;
+ #linkDirCache = new Map();
+ constructor(options){
+ this.#nodeModulesDirManual = options.infoOptions?.nodeModulesDir === "manual";
+ this.#infoCache = new deno.InfoCache(options.infoOptions);
+ }
+ async resolve(specifier) {
+ // Workaround for https://github.com/denoland/deno/issues/25903
+ if (this.#nodeModulesDirManual && specifier.protocol === "npm:") {
+ const npmSpecifier = parseNpmSpecifier(specifier);
+ return {
+ kind: "npm",
+ packageId: "",
+ packageName: npmSpecifier.name,
+ path: npmSpecifier.path ?? ""
+ };
+ }
+ const entry = await this.#infoCache.get(specifier.href);
+ if ("error" in entry) {
+ if (specifier.protocol === "file:" && mediaTypeFromSpecifier(specifier) === "Unknown") {
+ return {
+ kind: "esm",
+ specifier: new URL(entry.specifier)
+ };
+ }
+ throw new Error(entry.error);
+ }
+ if (entry.kind === "npm") {
+ // TODO(lucacasonato): remove parsing once https://github.com/denoland/deno/issues/18043 is resolved
+ const parsed = parseNpmSpecifier(new URL(entry.specifier));
+ return {
+ kind: "npm",
+ packageId: entry.npmPackage,
+ packageName: parsed.name,
+ path: parsed.path ?? ""
+ };
+ } else if (entry.kind === "node") {
+ return {
+ kind: "node",
+ path: entry.specifier
+ };
+ }
+ return {
+ kind: "esm",
+ specifier: new URL(entry.specifier)
+ };
+ }
+ async loadEsm(specifier) {
+ if (specifier.protocol === "data:") {
+ const resp = await fetch(specifier);
+ const contents = new Uint8Array(await resp.arrayBuffer());
+ const contentType = resp.headers.get("content-type");
+ const mediaType = mapContentType(specifier, contentType);
+ const loader = mediaTypeToLoader(mediaType);
+ if (loader === null) return undefined;
+ return {
+ contents,
+ loader
+ };
+ }
+ const entry = await this.#infoCache.get(specifier.href);
+ if ("error" in entry && specifier.protocol !== "file:" && mediaTypeFromSpecifier(specifier) !== "Unknown") throw new Error(entry.error);
+ if (!("local" in entry)) {
+ throw new Error("[unreachable] Not an ESM module.");
+ }
+ if (!entry.local) throw new Error("Module not downloaded yet.");
+ const loader = mediaTypeToLoader(entry.mediaType);
+ if (loader === null) return undefined;
+ let contents = await Deno.readFile(entry.local);
+ const denoCacheMetadata = lastIndexOfNeedle(contents, DENO_CACHE_METADATA);
+ if (denoCacheMetadata !== -1) {
+ contents = contents.subarray(0, denoCacheMetadata);
+ }
+ const res = {
+ contents,
+ loader
+ };
+ if (specifier.protocol === "file:") {
+ res.watchFiles = [
+ fromFileUrl(specifier)
+ ];
+ }
+ return res;
+ }
+ async nodeModulesDirForPackage(npmPackageId) {
+ const npmPackage = this.#infoCache.getNpmPackage(npmPackageId);
+ if (!npmPackage) throw new Error("NPM package not found.");
+ let linkDir = this.#linkDirCache.get(npmPackageId);
+ if (!linkDir) {
+ linkDir = await this.#nodeModulesDirForPackageInner(npmPackageId, npmPackage);
+ this.#linkDirCache.set(npmPackageId, linkDir);
+ }
+ return linkDir;
+ }
+ async #nodeModulesDirForPackageInner(npmPackageId, npmPackage) {
+ let name = npmPackage.name;
+ if (name.toLowerCase() !== name) {
+ name = `_${encodeBase32(new TextEncoder().encode(name))}`;
+ }
+ if (ROOT_INFO_OUTPUT === undefined) {
+ ROOT_INFO_OUTPUT = rootInfo();
+ }
+ if (ROOT_INFO_OUTPUT instanceof Promise) {
+ ROOT_INFO_OUTPUT = await ROOT_INFO_OUTPUT;
+ }
+ const { denoDir, npmCache } = ROOT_INFO_OUTPUT;
+ const registryUrl = npmPackage.registryUrl ?? "https://registry.npmjs.org";
+ const registry = new URL(registryUrl);
+ const packageDir = join(npmCache, registry.hostname, name, npmPackage.version);
+ const linkDir = join(denoDir, "deno_esbuild", registry.hostname, npmPackageId, "node_modules", name);
+ const linkDirParent = dirname(linkDir);
+ const tmpDirParent = join(denoDir, "deno_esbuild_tmp");
+ // check if the package is already linked, if so, return the link and skip
+ // a bunch of work
+ try {
+ await Deno.stat(linkDir);
+ this.#linkDirCache.set(npmPackageId, linkDir);
+ return linkDir;
+ } catch {
+ // directory does not yet exist
+ }
+ // create a temporary directory, recursively hardlink the package contents
+ // into it, and then rename it to the final location
+ await Deno.mkdir(tmpDirParent, {
+ recursive: true
+ });
+ const tmpDir = await Deno.makeTempDir({
+ dir: tmpDirParent
+ });
+ await linkRecursive(packageDir, tmpDir);
+ try {
+ await Deno.mkdir(linkDirParent, {
+ recursive: true
+ });
+ await Deno.rename(tmpDir, linkDir);
+ } catch (err) {
+ // the directory may already have been created by someone else - check if so
+ try {
+ await Deno.stat(linkDir);
+ } catch {
+ throw err;
+ }
+ }
+ return linkDir;
+ }
+ packageIdFromNameInPackage(name, parentPackageId) {
+ const parentPackage = this.#infoCache.getNpmPackage(parentPackageId);
+ if (!parentPackage) throw new Error("NPM package not found.");
+ if (parentPackage.name === name) return parentPackageId;
+ for (const dep of parentPackage.dependencies){
+ const depPackage = this.#infoCache.getNpmPackage(dep);
+ if (!depPackage) throw new Error("NPM package not found.");
+ if (depPackage.name === name) return dep;
+ }
+ return null;
+ }
+}
+async function linkRecursive(from, to) {
+ const fromStat = await Deno.stat(from);
+ if (fromStat.isDirectory) {
+ await Deno.mkdir(to, {
+ recursive: true
+ });
+ for await (const entry of Deno.readDir(from)){
+ await linkRecursive(join(from, entry.name), join(to, entry.name));
+ }
+ } else {
+ await Deno.link(from, to);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL3NyYy9sb2FkZXJfbmF0aXZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgZXNidWlsZCBmcm9tIFwiLi9lc2J1aWxkX3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBmcm9tRmlsZVVybCwgam9pbiB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuNlwiO1xuaW1wb3J0IHsgZW5jb2RlQmFzZTMyIH0gZnJvbSBcImpzcjovQHN0ZC9lbmNvZGluZ0BeMS4wLjUvYmFzZTMyXCI7XG5pbXBvcnQgeyBsYXN0SW5kZXhPZk5lZWRsZSB9IGZyb20gXCJqc3I6QHN0ZC9ieXRlc0BeMS4wLjJcIjtcbmltcG9ydCAqIGFzIGRlbm8gZnJvbSBcIi4vZGVuby50c1wiO1xuaW1wb3J0IHsgcm9vdEluZm8sIHR5cGUgUm9vdEluZm9PdXRwdXQgfSBmcm9tIFwiLi9kZW5vLnRzXCI7XG5pbXBvcnQge1xuICB0eXBlIExvYWRlcixcbiAgdHlwZSBMb2FkZXJSZXNvbHV0aW9uLFxuICBtYXBDb250ZW50VHlwZSxcbiAgbWVkaWFUeXBlRnJvbVNwZWNpZmllcixcbiAgbWVkaWFUeXBlVG9Mb2FkZXIsXG4gIHBhcnNlTnBtU3BlY2lmaWVyLFxufSBmcm9tIFwiLi9zaGFyZWQudHNcIjtcblxubGV0IFJPT1RfSU5GT19PVVRQVVQ6IFByb21pc2U8Um9vdEluZm9PdXRwdXQ+IHwgUm9vdEluZm9PdXRwdXQgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBERU5PX0NBQ0hFX01FVEFEQVRBID0gbmV3IFRleHRFbmNvZGVyKClcbiAgLmVuY29kZShcIlxcbi8vIGRlbm9DYWNoZU1ldGFkYXRhPVwiKTtcblxuZXhwb3J0IGludGVyZmFjZSBOYXRpdmVMb2FkZXJPcHRpb25zIHtcbiAgaW5mb09wdGlvbnM/OiBkZW5vLkluZm9PcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgTmF0aXZlTG9hZGVyIGltcGxlbWVudHMgTG9hZGVyIHtcbiAgI25vZGVNb2R1bGVzRGlyTWFudWFsOiBib29sZWFuO1xuICAjaW5mb0NhY2hlOiBkZW5vLkluZm9DYWNoZTtcbiAgI2xpbmtEaXJDYWNoZTogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTsgLy8gbWFwcGluZyBmcm9tIHBhY2thZ2UgaWQgLT4gbGluayBkaXJcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBOYXRpdmVMb2FkZXJPcHRpb25zKSB7XG4gICAgdGhpcy4jbm9kZU1vZHVsZXNEaXJNYW51YWwgPVxuICAgICAgb3B0aW9ucy5pbmZvT3B0aW9ucz8ubm9kZU1vZHVsZXNEaXIgPT09IFwibWFudWFsXCI7XG4gICAgdGhpcy4jaW5mb0NhY2hlID0gbmV3IGRlbm8uSW5mb0NhY2hlKG9wdGlvbnMuaW5mb09wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZShzcGVjaWZpZXI6IFVSTCk6IFByb21pc2U8TG9hZGVyUmVzb2x1dGlvbj4ge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2lzc3Vlcy8yNTkwM1xuICAgIGlmICh0aGlzLiNub2RlTW9kdWxlc0Rpck1hbnVhbCAmJiBzcGVjaWZpZXIucHJvdG9jb2wgPT09IFwibnBtOlwiKSB7XG4gICAgICBjb25zdCBucG1TcGVjaWZpZXIgPSBwYXJzZU5wbVNwZWNpZmllcihzcGVjaWZpZXIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogXCJucG1cIixcbiAgICAgICAgcGFja2FnZUlkOiBcIlwiLFxuICAgICAgICBwYWNrYWdlTmFtZTogbnBtU3BlY2lmaWVyLm5hbWUsXG4gICAgICAgIHBhdGg6IG5wbVNwZWNpZmllci5wYXRoID8/IFwiXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy4jaW5mb0NhY2hlLmdldChzcGVjaWZpZXIuaHJlZik7XG4gICAgaWYgKFwiZXJyb3JcIiBpbiBlbnRyeSkge1xuICAgICAgaWYgKFxuICAgICAgICBzcGVjaWZpZXIucHJvdG9jb2wgPT09IFwiZmlsZTpcIiAmJlxuICAgICAgICBtZWRpYVR5cGVGcm9tU3BlY2lmaWVyKHNwZWNpZmllcikgPT09IFwiVW5rbm93blwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHsga2luZDogXCJlc21cIiwgc3BlY2lmaWVyOiBuZXcgVVJMKGVudHJ5LnNwZWNpZmllcikgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlbnRyeS5lcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LmtpbmQgPT09IFwibnBtXCIpIHtcbiAgICAgIC8vIFRPRE8obHVjYWNhc29uYXRvKTogcmVtb3ZlIHBhcnNpbmcgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTgwNDMgaXMgcmVzb2x2ZWRcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTnBtU3BlY2lmaWVyKG5ldyBVUkwoZW50cnkuc3BlY2lmaWVyKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBcIm5wbVwiLFxuICAgICAgICBwYWNrYWdlSWQ6IGVudHJ5Lm5wbVBhY2thZ2UsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBwYXJzZWQubmFtZSxcbiAgICAgICAgcGF0aDogcGFyc2VkLnBhdGggPz8gXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChlbnRyeS5raW5kID09PSBcIm5vZGVcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogXCJub2RlXCIsXG4gICAgICAgIHBhdGg6IGVudHJ5LnNwZWNpZmllcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsga2luZDogXCJlc21cIiwgc3BlY2lmaWVyOiBuZXcgVVJMKGVudHJ5LnNwZWNpZmllcikgfTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRFc20oc3BlY2lmaWVyOiBVUkwpOiBQcm9taXNlPGVzYnVpbGQuT25Mb2FkUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHNwZWNpZmllci5wcm90b2NvbCA9PT0gXCJkYXRhOlwiKSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goc3BlY2lmaWVyKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzcC5hcnJheUJ1ZmZlcigpKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcC5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IG1hcENvbnRlbnRUeXBlKHNwZWNpZmllciwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgbG9hZGVyID0gbWVkaWFUeXBlVG9Mb2FkZXIobWVkaWFUeXBlKTtcbiAgICAgIGlmIChsb2FkZXIgPT09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4geyBjb250ZW50cywgbG9hZGVyIH07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy4jaW5mb0NhY2hlLmdldChzcGVjaWZpZXIuaHJlZik7XG4gICAgaWYgKFxuICAgICAgXCJlcnJvclwiIGluIGVudHJ5ICYmIHNwZWNpZmllci5wcm90b2NvbCAhPT0gXCJmaWxlOlwiICYmXG4gICAgICBtZWRpYVR5cGVGcm9tU3BlY2lmaWVyKHNwZWNpZmllcikgIT09IFwiVW5rbm93blwiXG4gICAgKSB0aHJvdyBuZXcgRXJyb3IoZW50cnkuZXJyb3IpO1xuXG4gICAgaWYgKCEoXCJsb2NhbFwiIGluIGVudHJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW3VucmVhY2hhYmxlXSBOb3QgYW4gRVNNIG1vZHVsZS5cIik7XG4gICAgfVxuICAgIGlmICghZW50cnkubG9jYWwpIHRocm93IG5ldyBFcnJvcihcIk1vZHVsZSBub3QgZG93bmxvYWRlZCB5ZXQuXCIpO1xuICAgIGNvbnN0IGxvYWRlciA9IG1lZGlhVHlwZVRvTG9hZGVyKGVudHJ5Lm1lZGlhVHlwZSk7XG4gICAgaWYgKGxvYWRlciA9PT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBjb250ZW50cyA9IGF3YWl0IERlbm8ucmVhZEZpbGUoZW50cnkubG9jYWwpO1xuICAgIGNvbnN0IGRlbm9DYWNoZU1ldGFkYXRhID0gbGFzdEluZGV4T2ZOZWVkbGUoY29udGVudHMsIERFTk9fQ0FDSEVfTUVUQURBVEEpO1xuICAgIGlmIChkZW5vQ2FjaGVNZXRhZGF0YSAhPT0gLTEpIHtcbiAgICAgIGNvbnRlbnRzID0gY29udGVudHMuc3ViYXJyYXkoMCwgZGVub0NhY2hlTWV0YWRhdGEpO1xuICAgIH1cbiAgICBjb25zdCByZXM6IGVzYnVpbGQuT25Mb2FkUmVzdWx0ID0geyBjb250ZW50cywgbG9hZGVyIH07XG4gICAgaWYgKHNwZWNpZmllci5wcm90b2NvbCA9PT0gXCJmaWxlOlwiKSB7XG4gICAgICByZXMud2F0Y2hGaWxlcyA9IFtmcm9tRmlsZVVybChzcGVjaWZpZXIpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIG5vZGVNb2R1bGVzRGlyRm9yUGFja2FnZShucG1QYWNrYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbnBtUGFja2FnZSA9IHRoaXMuI2luZm9DYWNoZS5nZXROcG1QYWNrYWdlKG5wbVBhY2thZ2VJZCk7XG4gICAgaWYgKCFucG1QYWNrYWdlKSB0aHJvdyBuZXcgRXJyb3IoXCJOUE0gcGFja2FnZSBub3QgZm91bmQuXCIpO1xuXG4gICAgbGV0IGxpbmtEaXIgPSB0aGlzLiNsaW5rRGlyQ2FjaGUuZ2V0KG5wbVBhY2thZ2VJZCk7XG4gICAgaWYgKCFsaW5rRGlyKSB7XG4gICAgICBsaW5rRGlyID0gYXdhaXQgdGhpcy4jbm9kZU1vZHVsZXNEaXJGb3JQYWNrYWdlSW5uZXIoXG4gICAgICAgIG5wbVBhY2thZ2VJZCxcbiAgICAgICAgbnBtUGFja2FnZSxcbiAgICAgICk7XG4gICAgICB0aGlzLiNsaW5rRGlyQ2FjaGUuc2V0KG5wbVBhY2thZ2VJZCwgbGlua0Rpcik7XG4gICAgfVxuICAgIHJldHVybiBsaW5rRGlyO1xuICB9XG5cbiAgYXN5bmMgI25vZGVNb2R1bGVzRGlyRm9yUGFja2FnZUlubmVyKFxuICAgIG5wbVBhY2thZ2VJZDogc3RyaW5nLFxuICAgIG5wbVBhY2thZ2U6IGRlbm8uTnBtUGFja2FnZSxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgbmFtZSA9IG5wbVBhY2thZ2UubmFtZTtcbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSBuYW1lKSB7XG4gICAgICBuYW1lID0gYF8ke2VuY29kZUJhc2UzMihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobmFtZSkpfWA7XG4gICAgfVxuICAgIGlmIChST09UX0lORk9fT1VUUFVUID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFJPT1RfSU5GT19PVVRQVVQgPSByb290SW5mbygpO1xuICAgIH1cbiAgICBpZiAoUk9PVF9JTkZPX09VVFBVVCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIFJPT1RfSU5GT19PVVRQVVQgPSBhd2FpdCBST09UX0lORk9fT1VUUFVUO1xuICAgIH1cbiAgICBjb25zdCB7IGRlbm9EaXIsIG5wbUNhY2hlIH0gPSBST09UX0lORk9fT1VUUFVUO1xuICAgIGNvbnN0IHJlZ2lzdHJ5VXJsID0gbnBtUGFja2FnZS5yZWdpc3RyeVVybCA/PyBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCI7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgVVJMKHJlZ2lzdHJ5VXJsKTtcblxuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBqb2luKFxuICAgICAgbnBtQ2FjaGUsXG4gICAgICByZWdpc3RyeS5ob3N0bmFtZSxcbiAgICAgIG5hbWUsXG4gICAgICBucG1QYWNrYWdlLnZlcnNpb24sXG4gICAgKTtcbiAgICBjb25zdCBsaW5rRGlyID0gam9pbihcbiAgICAgIGRlbm9EaXIsXG4gICAgICBcImRlbm9fZXNidWlsZFwiLFxuICAgICAgcmVnaXN0cnkuaG9zdG5hbWUsXG4gICAgICBucG1QYWNrYWdlSWQsXG4gICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgbmFtZSxcbiAgICApO1xuICAgIGNvbnN0IGxpbmtEaXJQYXJlbnQgPSBkaXJuYW1lKGxpbmtEaXIpO1xuICAgIGNvbnN0IHRtcERpclBhcmVudCA9IGpvaW4oZGVub0RpciwgXCJkZW5vX2VzYnVpbGRfdG1wXCIpO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHBhY2thZ2UgaXMgYWxyZWFkeSBsaW5rZWQsIGlmIHNvLCByZXR1cm4gdGhlIGxpbmsgYW5kIHNraXBcbiAgICAvLyBhIGJ1bmNoIG9mIHdvcmtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgRGVuby5zdGF0KGxpbmtEaXIpO1xuICAgICAgdGhpcy4jbGlua0RpckNhY2hlLnNldChucG1QYWNrYWdlSWQsIGxpbmtEaXIpO1xuICAgICAgcmV0dXJuIGxpbmtEaXI7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBkaXJlY3RvcnkgZG9lcyBub3QgeWV0IGV4aXN0XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgcmVjdXJzaXZlbHkgaGFyZGxpbmsgdGhlIHBhY2thZ2UgY29udGVudHNcbiAgICAvLyBpbnRvIGl0LCBhbmQgdGhlbiByZW5hbWUgaXQgdG8gdGhlIGZpbmFsIGxvY2F0aW9uXG4gICAgYXdhaXQgRGVuby5ta2Rpcih0bXBEaXJQYXJlbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHRtcERpciA9IGF3YWl0IERlbm8ubWFrZVRlbXBEaXIoeyBkaXI6IHRtcERpclBhcmVudCB9KTtcbiAgICBhd2FpdCBsaW5rUmVjdXJzaXZlKHBhY2thZ2VEaXIsIHRtcERpcik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IERlbm8ubWtkaXIobGlua0RpclBhcmVudCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBEZW5vLnJlbmFtZSh0bXBEaXIsIGxpbmtEaXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gdGhlIGRpcmVjdG9yeSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gY3JlYXRlZCBieSBzb21lb25lIGVsc2UgLSBjaGVjayBpZiBzb1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgRGVuby5zdGF0KGxpbmtEaXIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGlua0RpcjtcbiAgfVxuXG4gIHBhY2thZ2VJZEZyb21OYW1lSW5QYWNrYWdlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJlbnRQYWNrYWdlSWQ6IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGFyZW50UGFja2FnZSA9IHRoaXMuI2luZm9DYWNoZS5nZXROcG1QYWNrYWdlKHBhcmVudFBhY2thZ2VJZCk7XG4gICAgaWYgKCFwYXJlbnRQYWNrYWdlKSB0aHJvdyBuZXcgRXJyb3IoXCJOUE0gcGFja2FnZSBub3QgZm91bmQuXCIpO1xuICAgIGlmIChwYXJlbnRQYWNrYWdlLm5hbWUgPT09IG5hbWUpIHJldHVybiBwYXJlbnRQYWNrYWdlSWQ7XG4gICAgZm9yIChjb25zdCBkZXAgb2YgcGFyZW50UGFja2FnZS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcFBhY2thZ2UgPSB0aGlzLiNpbmZvQ2FjaGUuZ2V0TnBtUGFja2FnZShkZXApO1xuICAgICAgaWYgKCFkZXBQYWNrYWdlKSB0aHJvdyBuZXcgRXJyb3IoXCJOUE0gcGFja2FnZSBub3QgZm91bmQuXCIpO1xuICAgICAgaWYgKGRlcFBhY2thZ2UubmFtZSA9PT0gbmFtZSkgcmV0dXJuIGRlcDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlua1JlY3Vyc2l2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpIHtcbiAgY29uc3QgZnJvbVN0YXQgPSBhd2FpdCBEZW5vLnN0YXQoZnJvbSk7XG4gIGlmIChmcm9tU3RhdC5pc0RpcmVjdG9yeSkge1xuICAgIGF3YWl0IERlbm8ubWtkaXIodG8sIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgRGVuby5yZWFkRGlyKGZyb20pKSB7XG4gICAgICBhd2FpdCBsaW5rUmVjdXJzaXZlKGpvaW4oZnJvbSwgZW50cnkubmFtZSksIGpvaW4odG8sIGVudHJ5Lm5hbWUpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgRGVuby5saW5rKGZyb20sIHRvKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLFFBQVEsdUJBQXVCO0FBQ2xFLFNBQVMsWUFBWSxRQUFRLG1DQUFtQztBQUNoRSxTQUFTLGlCQUFpQixRQUFRLHdCQUF3QjtBQUMxRCxZQUFZLFVBQVUsWUFBWTtBQUNsQyxTQUFTLFFBQVEsUUFBNkIsWUFBWTtBQUMxRCxTQUdFLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixRQUNaLGNBQWM7QUFFckIsSUFBSTtBQUVKLE9BQU8sTUFBTSxzQkFBc0IsSUFBSSxjQUNwQyxNQUFNLENBQUMsMkJBQTJCO0FBTXJDLE9BQU8sTUFBTTtFQUNYLENBQUEsb0JBQXFCLENBQVU7RUFDL0IsQ0FBQSxTQUFVLENBQWlCO0VBQzNCLENBQUEsWUFBYSxHQUF3QixJQUFJLE1BQU07RUFFL0MsWUFBWSxPQUE0QixDQUFFO0lBQ3hDLElBQUksQ0FBQyxDQUFBLG9CQUFxQixHQUN4QixRQUFRLFdBQVcsRUFBRSxtQkFBbUI7SUFDMUMsSUFBSSxDQUFDLENBQUEsU0FBVSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsUUFBUSxXQUFXO0VBQzFEO0VBRUEsTUFBTSxRQUFRLFNBQWMsRUFBNkI7SUFD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
+// denoCacheMetadata=15689869681735189896,9549277198012329747 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3fd7f5223bf8f7e17fa4352df42656f2cb2af8814dc41c8b3fe39fb7840a8449.js b/vendor/gen/https/jsr.io/3fd7f5223bf8f7e17fa4352df42656f2cb2af8814dc41c8b3fe39fb7840a8449.js
new file mode 100644
index 0000000..e30515d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3fd7f5223bf8f7e17fa4352df42656f2cb2af8814dc41c8b3fe39fb7840a8449.js
@@ -0,0 +1,207 @@
+var _computedKey;
+import { fromFileUrl } from "jsr:@std/path@^1.0.6";
+import { mapContentType, mediaTypeToLoader, parseJsrSpecifier, parseNpmSpecifier } from "./shared.ts";
+import { instantiate } from "./wasm/loader.generated.js";
+const JSR_URL = Deno.env.get("JSR_URL") ?? "https://jsr.io";
+async function readLockfile(path) {
+ try {
+ const data = await Deno.readTextFile(path);
+ const instance = instantiate();
+ return new instance.WasmLockfile(path, data);
+ } catch (err) {
+ if (err instanceof Deno.errors.NotFound) {
+ return null;
+ }
+ throw err;
+ }
+}
+_computedKey = Symbol.dispose;
+export class PortableLoader {
+ #options;
+ #fetchOngoing = new Map();
+ #lockfile;
+ #fetchModules = new Map();
+ #fetchRedirects = new Map();
+ constructor(options){
+ this.#options = options;
+ }
+ [_computedKey]() {
+ if (this.#lockfile != null && "free" in this.#lockfile) {
+ this.#lockfile.free();
+ }
+ }
+ async resolve(specifier) {
+ switch(specifier.protocol){
+ case "file:":
+ {
+ return {
+ kind: "esm",
+ specifier
+ };
+ }
+ case "http:":
+ case "https:":
+ case "data:":
+ {
+ const module = await this.#loadRemote(specifier.href);
+ return {
+ kind: "esm",
+ specifier: new URL(module.specifier)
+ };
+ }
+ case "npm:":
+ {
+ const npmSpecifier = parseNpmSpecifier(specifier);
+ return {
+ kind: "npm",
+ packageId: "",
+ packageName: npmSpecifier.name,
+ path: npmSpecifier.path ?? ""
+ };
+ }
+ case "node:":
+ {
+ return {
+ kind: "node",
+ path: specifier.pathname
+ };
+ }
+ case "jsr:":
+ {
+ const resolvedSpecifier = await this.#resolveJsrSpecifier(specifier);
+ return {
+ kind: "esm",
+ specifier: resolvedSpecifier
+ };
+ }
+ default:
+ throw new Error(`Unsupported scheme: '${specifier.protocol}'`);
+ }
+ }
+ async #resolveJsrSpecifier(specifier) {
+ // parse the JSR specifier.
+ const jsrSpecifier = parseJsrSpecifier(specifier);
+ // Attempt to load the lockfile.
+ if (this.#lockfile === undefined) {
+ this.#lockfile = typeof this.#options.lock === "string" ? readLockfile(this.#options.lock) : null;
+ }
+ if (this.#lockfile instanceof Promise) {
+ this.#lockfile = await this.#lockfile;
+ }
+ if (this.#lockfile === null) {
+ throw new Error("jsr: specifiers are not supported in the portable loader without a lockfile");
+ }
+ const lockfile = this.#lockfile;
+ // Look up the package + constraint in the lockfile.
+ const id = `jsr:${jsrSpecifier.name}${jsrSpecifier.version ? `@${jsrSpecifier.version}` : ""}`;
+ const resolvedVersion = lockfile.package_version(id);
+ if (!resolvedVersion) {
+ throw new Error(`Specifier not found in lockfile: ${id}`);
+ }
+ // Load the JSR manifest to find the export path.
+ const manifestUrl = new URL(`./${jsrSpecifier.name}/${resolvedVersion}_meta.json`, JSR_URL);
+ const manifest = await this.#loadRemote(manifestUrl.href);
+ if (manifest.mediaType !== "Json") {
+ throw new Error(`Expected JSON media type for JSR manifest, got: ${manifest.mediaType}`);
+ }
+ const manifestData = new TextDecoder().decode(manifest.data);
+ const manifestJson = JSON.parse(manifestData);
+ // Look up the export path in the manifest.
+ const exportEntry = `.${jsrSpecifier.path ?? ""}`;
+ const exportPath = manifestJson.exports[exportEntry];
+ if (!exportPath) {
+ throw new Error(`Package 'jsr:${jsrSpecifier.name}@${resolvedVersion}' has no export named '${exportEntry}'`);
+ }
+ // Return the resolved URL.
+ return new URL(`./${jsrSpecifier.name}/${resolvedVersion}/${exportPath}`, JSR_URL);
+ }
+ async loadEsm(url) {
+ let module;
+ switch(url.protocol){
+ case "file:":
+ {
+ module = await this.#loadLocal(url);
+ break;
+ }
+ case "http:":
+ case "https:":
+ case "data:":
+ {
+ module = await this.#loadRemote(url.href);
+ break;
+ }
+ default:
+ throw new Error("[unreachable] unsupported esm scheme " + url.protocol);
+ }
+ const loader = mediaTypeToLoader(module.mediaType);
+ if (loader === null) return undefined;
+ const res = {
+ contents: module.data,
+ loader
+ };
+ if (url.protocol === "file:") {
+ res.watchFiles = [
+ fromFileUrl(module.specifier)
+ ];
+ }
+ return res;
+ }
+ #resolveRemote(specifier) {
+ return this.#fetchRedirects.get(specifier) ?? specifier;
+ }
+ async #loadRemote(specifier) {
+ for(let i = 0; i < 10; i++){
+ specifier = this.#resolveRemote(specifier);
+ const module = this.#fetchModules.get(specifier);
+ if (module) return module;
+ let promise = this.#fetchOngoing.get(specifier);
+ if (!promise) {
+ promise = this.#fetch(specifier);
+ this.#fetchOngoing.set(specifier, promise);
+ }
+ await promise;
+ }
+ throw new Error("Too many redirects. Last one: " + specifier);
+ }
+ async #fetch(specifier) {
+ const resp = await fetch(specifier, {
+ redirect: "manual"
+ });
+ if (resp.status < 200 && resp.status >= 400) {
+ throw new Error(`Encountered status code ${resp.status} while fetching ${specifier}.`);
+ }
+ if (resp.status >= 300 && resp.status < 400) {
+ await resp.body?.cancel();
+ const location = resp.headers.get("location");
+ if (!location) {
+ throw new Error(`Redirected without location header while fetching ${specifier}.`);
+ }
+ const url = new URL(location, specifier);
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
+ throw new Error(`Redirected to unsupported protocol '${url.protocol}' while fetching ${specifier}.`);
+ }
+ this.#fetchRedirects.set(specifier, url.href);
+ return;
+ }
+ const contentType = resp.headers.get("content-type");
+ const mediaType = mapContentType(new URL(specifier), contentType);
+ const data = new Uint8Array(await resp.arrayBuffer());
+ this.#fetchModules.set(specifier, {
+ specifier,
+ mediaType,
+ data
+ });
+ }
+ async #loadLocal(specifier) {
+ const path = fromFileUrl(specifier);
+ const mediaType = mapContentType(specifier, null);
+ const data = await Deno.readFile(path);
+ return {
+ specifier: specifier.href,
+ mediaType,
+ data
+ };
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL3NyYy9sb2FkZXJfcG9ydGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBlc2J1aWxkIGZyb20gXCIuL2VzYnVpbGRfdHlwZXMudHNcIjtcbmltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC42XCI7XG5pbXBvcnQgdHlwZSAqIGFzIGRlbm8gZnJvbSBcIi4vZGVuby50c1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBMb2FkZXIsXG4gIHR5cGUgTG9hZGVyUmVzb2x1dGlvbixcbiAgbWFwQ29udGVudFR5cGUsXG4gIG1lZGlhVHlwZVRvTG9hZGVyLFxuICBwYXJzZUpzclNwZWNpZmllcixcbiAgcGFyc2VOcG1TcGVjaWZpZXIsXG59IGZyb20gXCIuL3NoYXJlZC50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUsIHR5cGUgV2FzbUxvY2tmaWxlIH0gZnJvbSBcIi4vd2FzbS9sb2FkZXIuZ2VuZXJhdGVkLmpzXCI7XG5cbmludGVyZmFjZSBNb2R1bGUge1xuICBzcGVjaWZpZXI6IHN0cmluZztcbiAgbWVkaWFUeXBlOiBkZW5vLk1lZGlhVHlwZTtcbiAgZGF0YTogVWludDhBcnJheTtcbn1cblxuY29uc3QgSlNSX1VSTCA9IERlbm8uZW52LmdldChcIkpTUl9VUkxcIikgPz8gXCJodHRwczovL2pzci5pb1wiO1xuXG5hc3luYyBmdW5jdGlvbiByZWFkTG9ja2ZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxXYXNtTG9ja2ZpbGUgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IERlbm8ucmVhZFRleHRGaWxlKHBhdGgpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFudGlhdGUoKTtcbiAgICByZXR1cm4gbmV3IGluc3RhbmNlLldhc21Mb2NrZmlsZShwYXRoLCBkYXRhKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmludGVyZmFjZSBQb3J0YWJsZUxvYWRlck9wdGlvbnMge1xuICBsb2NrPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUG9ydGFibGVMb2FkZXIgaW1wbGVtZW50cyBMb2FkZXIsIERpc3Bvc2FibGUge1xuICAjb3B0aW9uczogUG9ydGFibGVMb2FkZXJPcHRpb25zO1xuICAjZmV0Y2hPbmdvaW5nID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG4gICNsb2NrZmlsZTogUHJvbWlzZTxXYXNtTG9ja2ZpbGUgfCBudWxsPiB8IFdhc21Mb2NrZmlsZSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgI2ZldGNoTW9kdWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBNb2R1bGU+KCk7XG4gICNmZXRjaFJlZGlyZWN0cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUG9ydGFibGVMb2FkZXJPcHRpb25zKSB7XG4gICAgdGhpcy4jb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCkge1xuICAgIGlmICh0aGlzLiNsb2NrZmlsZSAhPSBudWxsICYmIFwiZnJlZVwiIGluIHRoaXMuI2xvY2tmaWxlKSB7XG4gICAgICB0aGlzLiNsb2NrZmlsZS5mcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZShzcGVjaWZpZXI6IFVSTCk6IFByb21pc2U8TG9hZGVyUmVzb2x1dGlvbj4ge1xuICAgIHN3aXRjaCAoc3BlY2lmaWVyLnByb3RvY29sKSB7XG4gICAgICBjYXNlIFwiZmlsZTpcIjoge1xuICAgICAgICByZXR1cm4geyBraW5kOiBcImVzbVwiLCBzcGVjaWZpZXIgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJodHRwOlwiOlxuICAgICAgY2FzZSBcImh0dHBzOlwiOlxuICAgICAgY2FzZSBcImRhdGE6XCI6IHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgdGhpcy4jbG9hZFJlbW90ZShzcGVjaWZpZXIuaHJlZik7XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IFwiZXNtXCIsIHNwZWNpZmllcjogbmV3IFVSTChtb2R1bGUuc3BlY2lmaWVyKSB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5wbTpcIjoge1xuICAgICAgICBjb25zdCBucG1TcGVjaWZpZXIgPSBwYXJzZU5wbVNwZWNpZmllcihzcGVjaWZpZXIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtpbmQ6IFwibnBtXCIsXG4gICAgICAgICAgcGFja2FnZUlkOiBcIlwiLFxuICAgICAgICAgIHBhY2thZ2VOYW1lOiBucG1TcGVjaWZpZXIubmFtZSxcbiAgICAgICAgICBwYXRoOiBucG1TcGVjaWZpZXIucGF0aCA/PyBcIlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5vZGU6XCI6IHtcbiAgICAgICAgcmV0dXJuIHsga2luZDogXCJub2RlXCIsIHBhdGg6IHNwZWNpZmllci5wYXRobmFtZSB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcImpzcjpcIjoge1xuICAgICAgICBjb25zdCByZXNvbHZlZFNwZWNpZmllciA9IGF3YWl0IHRoaXMuI3Jlc29sdmVKc3JTcGVjaWZpZXIoc3BlY2lmaWVyKTtcbiAgICAgICAgcmV0dXJuIHsga2luZDogXCJlc21cIiwgc3BlY2lmaWVyOiByZXNvbHZlZFNwZWNpZmllciB9O1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzY2hlbWU6ICcke3NwZWNpZmllci5wcm90b2NvbH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgI3Jlc29sdmVKc3JTcGVjaWZpZXIoc3BlY2lmaWVyOiBVUkwpOiBQcm9taXNlPFVSTD4ge1xuICAgIC8vIHBhcnNlIHRoZSBKU1Igc3BlY2lmaWVyLlxuICAgIGNvbnN0IGpzclNwZWNpZmllciA9IHBhcnNlSnNyU3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICAvLyBBdHRlbXB0IHRvIGxvYWQgdGhlIGxvY2tmaWxlLlxuICAgIGlmICh0aGlzLiNsb2NrZmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNsb2NrZmlsZSA9IHR5cGVvZiB0aGlzLiNvcHRpb25zLmxvY2sgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyByZWFkTG9ja2ZpbGUodGhpcy4jb3B0aW9ucy5sb2NrKVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLiNsb2NrZmlsZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHRoaXMuI2xvY2tmaWxlID0gYXdhaXQgdGhpcy4jbG9ja2ZpbGU7XG4gICAgfVxuICAgIGlmICh0aGlzLiNsb2NrZmlsZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImpzcjogc3BlY2lmaWVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGUgcG9ydGFibGUgbG9hZGVyIHdpdGhvdXQgYSBsb2NrZmlsZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbG9ja2ZpbGUgPSB0aGlzLiNsb2NrZmlsZTtcbiAgICAvLyBMb29rIHVwIHRoZSBwYWNrYWdlICsgY29uc3RyYWludCBpbiB0aGUgbG9ja2ZpbGUuXG4gICAgY29uc3QgaWQgPSBganNyOiR7anNyU3BlY2lmaWVyLm5hbWV9JHtcbiAgICAgIGpzclNwZWNpZmllci52ZXJzaW9uID8gYEAke2pzclNwZWNpZmllci52ZXJzaW9ufWAgOiBcIlwiXG4gICAgfWA7XG4gICAgY29uc3QgcmVzb2x2ZWRWZXJzaW9uID0gbG9ja2ZpbGUucGFja2FnZV92ZXJzaW9uKGlkKTtcbiAgICBpZiAoIXJlc29sdmVkVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZXIgbm90IGZvdW5kIGluIGxvY2tmaWxlOiAke2lkfWApO1xuICAgIH1cblxuICAgIC8vIExvYWQgdGhlIEpTUiBtYW5pZmVzdCB0byBmaW5kIHRoZSBleHBvcnQgcGF0aC5cbiAgICBjb25zdCBtYW5pZmVzdFVybCA9IG5ldyBVUkwoXG4gICAgICBgLi8ke2pzclNwZWNpZmllci5uYW1lfS8ke3Jlc29sdmVkVmVyc2lvbn1fbWV0YS5qc29uYCxcbiAgICAgIEpTUl9VUkwsXG4gICAgKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuI2xvYWRSZW1vdGUobWFuaWZlc3RVcmwuaHJlZik7XG4gICAgaWYgKG1hbmlmZXN0Lm1lZGlhVHlwZSAhPT0gXCJKc29uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIEpTT04gbWVkaWEgdHlwZSBmb3IgSlNSIG1hbmlmZXN0LCBnb3Q6ICR7bWFuaWZlc3QubWVkaWFUeXBlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBtYW5pZmVzdERhdGEgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUobWFuaWZlc3QuZGF0YSk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShtYW5pZmVzdERhdGEpO1xuXG4gICAgLy8gTG9vayB1cCB0aGUgZXhwb3J0IHBhdGggaW4gdGhlIG1hbmlmZXN0LlxuICAgIGNvbnN0IGV4cG9ydEVudHJ5ID0gYC4ke2pzclNwZWNpZmllci5wYXRoID8/IFwiXCJ9YDtcbiAgICBjb25zdCBleHBvcnRQYXRoID0gbWFuaWZlc3RKc29uLmV4cG9ydHNbZXhwb3J0RW50cnldO1xuICAgIGlmICghZXhwb3J0UGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGFja2FnZSAnanNyOiR7anNyU3BlY2lmaWVyLm5hbWV9QCR7cmVzb2x2ZWRWZXJzaW9ufScgaGFzIG5vIGV4cG9ydCBuYW1lZCAnJHtleHBvcnRFbnRyeX0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSByZXNvbHZlZCBVUkwuXG4gICAgcmV0dXJuIG5ldyBVUkwoXG4gICAgICBgLi8ke2pzclNwZWNpZmllci5uYW1lfS8ke3Jlc29sdmVkVmVyc2lvbn0vJHtleHBvcnRQYXRofWAsXG4gICAgICBKU1JfVVJMLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBsb2FkRXNtKHVybDogVVJMKTogUHJvbWlzZTxlc2J1aWxkLk9uTG9hZFJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBtb2R1bGU6IE1vZHVsZTtcbiAgICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgICAgY2FzZSBcImZpbGU6XCI6IHtcbiAgICAgICAgbW9kdWxlID0gYXdhaXQgdGhpcy4jbG9hZExvY2FsKHVybCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImh0dHA6XCI6XG4gICAgICBjYXNlIFwiaHR0cHM6XCI6XG4gICAgICBjYXNlIFwiZGF0YTpcIjoge1xuICAgICAgICBtb2R1bGUgPSBhd2FpdCB0aGlzLiNsb2FkUmVtb3RlKHVybC5ocmVmKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbdW5yZWFjaGFibGVdIHVuc3VwcG9ydGVkIGVzbSBzY2hlbWUgXCIgKyB1cmwucHJvdG9jb2wpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlciA9IG1lZGlhVHlwZVRvTG9hZGVyKG1vZHVsZS5tZWRpYVR5cGUpO1xuICAgIGlmIChsb2FkZXIgPT09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZXM6IGVzYnVpbGQuT25Mb2FkUmVzdWx0ID0geyBjb250ZW50czogbW9kdWxlLmRhdGEsIGxvYWRlciB9O1xuICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIikge1xuICAgICAgcmVzLndhdGNoRmlsZXMgPSBbZnJvbUZpbGVVcmwobW9kdWxlLnNwZWNpZmllcildO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgI3Jlc29sdmVSZW1vdGUoc3BlY2lmaWVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNmZXRjaFJlZGlyZWN0cy5nZXQoc3BlY2lmaWVyKSA/PyBzcGVjaWZpZXI7XG4gIH1cblxuICBhc3luYyAjbG9hZFJlbW90ZShzcGVjaWZpZXI6IHN0cmluZyk6IFByb21pc2U8TW9kdWxlPiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICBzcGVjaWZpZXIgPSB0aGlzLiNyZXNvbHZlUmVtb3RlKHNwZWNpZmllcik7XG4gICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLiNmZXRjaE1vZHVsZXMuZ2V0KHNwZWNpZmllcik7XG4gICAgICBpZiAobW9kdWxlKSByZXR1cm4gbW9kdWxlO1xuXG4gICAgICBsZXQgcHJvbWlzZSA9IHRoaXMuI2ZldGNoT25nb2luZy5nZXQoc3BlY2lmaWVyKTtcbiAgICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgICBwcm9taXNlID0gdGhpcy4jZmV0Y2goc3BlY2lmaWVyKTtcbiAgICAgICAgdGhpcy4jZmV0Y2hPbmdvaW5nLnNldChzcGVjaWZpZXIsIHByb21pc2UpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBwcm9taXNlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIlRvbyBtYW55IHJlZGlyZWN0cy4gTGFzdCBvbmU6IFwiICsgc3BlY2lmaWVyKTtcbiAgfVxuXG4gIGFzeW5jICNmZXRjaChzcGVjaWZpZXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBmZXRjaChzcGVjaWZpZXIsIHtcbiAgICAgIHJlZGlyZWN0OiBcIm1hbnVhbFwiLFxuICAgIH0pO1xuICAgIGlmIChyZXNwLnN0YXR1cyA8IDIwMCAmJiByZXNwLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVuY291bnRlcmVkIHN0YXR1cyBjb2RlICR7cmVzcC5zdGF0dXN9IHdoaWxlIGZldGNoaW5nICR7c3BlY2lmaWVyfS5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcC5zdGF0dXMgPj0gMzAwICYmIHJlc3Auc3RhdHVzIDwgNDAwKSB7XG4gICAgICBhd2FpdCByZXNwLmJvZHk/LmNhbmNlbCgpO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSByZXNwLmhlYWRlcnMuZ2V0KFwibG9jYXRpb25cIik7XG4gICAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUmVkaXJlY3RlZCB3aXRob3V0IGxvY2F0aW9uIGhlYWRlciB3aGlsZSBmZXRjaGluZyAke3NwZWNpZmllcn0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChsb2NhdGlvbiwgc3BlY2lmaWVyKTtcbiAgICAgIGlmICh1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIgJiYgdXJsLnByb3RvY29sICE9PSBcImh0dHA6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBSZWRpcmVjdGVkIHRvIHVuc3VwcG9ydGVkIHByb3RvY29sICcke3VybC5wcm90b2NvbH0nIHdoaWxlIGZldGNoaW5nICR7c3BlY2lmaWVyfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNmZXRjaFJlZGlyZWN0cy5zZXQoc3BlY2lmaWVyLCB1cmwuaHJlZik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGNvbnN0IG1lZGlhVHlwZSA9IG1hcENvbnRlbnRUeXBlKG5ldyBVUkwoc3BlY2lmaWVyKSwgY29udGVudFR5cGUpO1xuXG4gICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3AuYXJyYXlCdWZmZXIoKSk7XG4gICAgdGhpcy4jZmV0Y2hNb2R1bGVzLnNldChzcGVjaWZpZXIsIHtcbiAgICAgIHNwZWNpZmllcixcbiAgICAgIG1lZGlhVHlwZSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyAjbG9hZExvY2FsKHNwZWNpZmllcjogVVJMKTogUHJvbWlzZTxNb2R1bGU+IHtcbiAgICBjb25zdCBwYXRoID0gZnJvbUZpbGVVcmwoc3BlY2lmaWVyKTtcblxuICAgIGNvbnN0IG1lZGlhVHlwZSA9IG1hcENvbnRlbnRUeXBlKHNwZWNpZmllciwgbnVsbCk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IERlbm8ucmVhZEZpbGUocGF0aCk7XG5cbiAgICByZXR1cm4geyBzcGVjaWZpZXI6IHNwZWNpZmllci5ocmVmLCBtZWRpYVR5cGUsIGRhdGEgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxTQUFTLFdBQVcsUUFBUSx1QkFBdUI7QUFFbkQsU0FHRSxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsUUFDWixjQUFjO0FBQ3JCLFNBQVMsV0FBVyxRQUEyQiw2QkFBNkI7QUFRNUUsTUFBTSxVQUFVLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjO0FBRTNDLGVBQWUsYUFBYSxJQUFZO0VBQ3RDLElBQUk7SUFDRixNQUFNLE9BQU8sTUFBTSxLQUFLLFlBQVksQ0FBQztJQUNyQyxNQUFNLFdBQVc7SUFDakIsT0FBTyxJQUFJLFNBQVMsWUFBWSxDQUFDLE1BQU07RUFDekMsRUFBRSxPQUFPLEtBQUs7SUFDWixJQUFJLGVBQWUsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFO01BQ3ZDLE9BQU87SUFDVDtJQUNBLE1BQU07RUFDUjtBQUNGO2VBa0JHLE9BQU8sT0FBTztBQVpqQixPQUFPLE1BQU07RUFDWCxDQUFBLE9BQVEsQ0FBd0I7RUFDaEMsQ0FB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
+// denoCacheMetadata=10249730758844449979,1595942036382499316 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/3ffe5517419da88b6c9199c98b1503003f5949fdc374e53d8e49fab827d55edf.js b/vendor/gen/https/jsr.io/3ffe5517419da88b6c9199c98b1503003f5949fdc374e53d8e49fab827d55edf.js
new file mode 100644
index 0000000..ce8edc7
--- /dev/null
+++ b/vendor/gen/https/jsr.io/3ffe5517419da88b6c9199c98b1503003f5949fdc374e53d8e49fab827d55edf.js
@@ -0,0 +1,36 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Verifies whether provided path is absolute.
+ *
+ * @example Usage
+ * ```ts
+ * import { isAbsolute } from "@std/path/windows/is-absolute";
+ * import { assert, assertFalse } from "@std/assert";
+ *
+ * assert(isAbsolute("C:\\foo\\bar"));
+ * assertFalse(isAbsolute("..\\baz"));
+ * ```
+ *
+ * @param path The path to verify.
+ * @returns `true` if the path is absolute, `false` otherwise.
+ */ export function isAbsolute(path) {
+ assertPath(path);
+ const len = path.length;
+ if (len === 0) return false;
+ const code = path.charCodeAt(0);
+ if (isPathSeparator(code)) {
+ return true;
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (len > 2 && path.charCodeAt(1) === CHAR_COLON) {
+ if (isPathSeparator(path.charCodeAt(2))) return true;
+ }
+ }
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2lzX2Fic29sdXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfQ09MT04gfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQYXRoU2VwYXJhdG9yLCBpc1dpbmRvd3NEZXZpY2VSb290IH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHByb3ZpZGVkIHBhdGggaXMgYWJzb2x1dGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpc0Fic29sdXRlIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2lzLWFic29sdXRlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQsIGFzc2VydEZhbHNlIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0KGlzQWJzb2x1dGUoXCJDOlxcXFxmb29cXFxcYmFyXCIpKTtcbiAqIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCIuLlxcXFxiYXpcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdmVyaWZ5LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkge1xuICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICBpZiAobGVuID4gMiAmJiBwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsVUFBVSxRQUFRLDBCQUEwQjtBQUNyRCxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxlQUFlLEVBQUUsbUJBQW1CLFFBQVEsYUFBYTtBQUVsRTs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxXQUFXLElBQVk7RUFDckMsV0FBVztFQUVYLE1BQU0sTUFBTSxLQUFLLE1BQU07RUFDdkIsSUFBSSxRQUFRLEdBQUcsT0FBTztFQUV0QixNQUFNLE9BQU8sS0FBSyxVQUFVLENBQUM7RUFDN0IsSUFBSSxnQkFBZ0IsT0FBTztJQUN6QixPQUFPO0VBQ1QsT0FBTyxJQUFJLG9CQUFvQixPQUFPO0lBQ3BDLHVCQUF1QjtJQUV2QixJQUFJLE1BQU0sS0FBSyxLQUFLLFVBQVUsQ0FBQyxPQUFPLFlBQVk7TUFDaEQsSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLENBQUMsS0FBSyxPQUFPO0lBQ2xEO0VBQ0Y7RUFDQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=14927809252854127484,7814470929840190456 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/41634e30ec873a003c71f1c2c33ec4d9f83a9e44a01d6ca60d3ef06b4db00bbe.js b/vendor/gen/https/jsr.io/41634e30ec873a003c71f1c2c33ec4d9f83a9e44a01d6ca60d3ef06b4db00bbe.js
new file mode 100644
index 0000000..8b2dda0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/41634e30ec873a003c71f1c2c33ec4d9f83a9e44a01d6ca60d3ef06b4db00bbe.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { _format, assertArg } from "../_common/format.ts";
+/**
+ * Generate a path from `ParsedPath` object.
+ *
+ * @example Usage
+ * ```ts
+ * import { format } from "@std/path/posix/format";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = format({
+ * root: "/",
+ * dir: "/path/dir",
+ * base: "file.txt",
+ * ext: ".txt",
+ * name: "file"
+ * });
+ * assertEquals(path, "/path/dir/file.txt");
+ * ```
+ *
+ * @param pathObject The path object to format.
+ * @returns The formatted path.
+ */ export function format(pathObject) {
+ assertArg(pathObject);
+ return _format("/", pathObject);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgX2Zvcm1hdCwgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vZm9ybWF0LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHBhdGggZnJvbSBgUGFyc2VkUGF0aGAgb2JqZWN0LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9mb3JtYXRcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSBmb3JtYXQoe1xuICogICByb290OiBcIi9cIixcbiAqICAgZGlyOiBcIi9wYXRoL2RpclwiLFxuICogICBiYXNlOiBcImZpbGUudHh0XCIsXG4gKiAgIGV4dDogXCIudHh0XCIsXG4gKiAgIG5hbWU6IFwiZmlsZVwiXG4gKiB9KTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi9wYXRoL2Rpci9maWxlLnR4dFwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoT2JqZWN0IFRoZSBwYXRoIG9iamVjdCB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdDogUGFydGlhbDxQYXJzZWRQYXRoPik6IHN0cmluZyB7XG4gIGFzc2VydEFyZyhwYXRoT2JqZWN0KTtcbiAgcmV0dXJuIF9mb3JtYXQoXCIvXCIsIHBhdGhPYmplY3QpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxPQUFPLEVBQUUsU0FBUyxRQUFRLHVCQUF1QjtBQUcxRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FDRCxPQUFPLFNBQVMsT0FBTyxVQUErQjtFQUNwRCxVQUFVO0VBQ1YsT0FBTyxRQUFRLEtBQUs7QUFDdEIifQ==
+// denoCacheMetadata=7276974405939404592,809671434988164050 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/420abd08837ee239adf5e93b512dc8b414bd03aaa189f0eb845fbd299b8b6a78.js b/vendor/gen/https/jsr.io/420abd08837ee239adf5e93b512dc8b414bd03aaa189f0eb845fbd299b8b6a78.js
new file mode 100644
index 0000000..f20e02b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/420abd08837ee239adf5e93b512dc8b414bd03aaa189f0eb845fbd299b8b6a78.js
@@ -0,0 +1,95 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isPosixPathSeparator } from "./_util.ts";
+import { resolve } from "./resolve.ts";
+import { assertArgs } from "../_common/relative.ts";
+/**
+ * Return the relative path from `from` to `to` based on current working directory.
+ *
+ * If `from` and `to` are the same, return an empty string.
+ *
+ * @example Usage
+ * ```ts
+ * import { relative } from "@std/path/posix/relative";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb");
+ * assertEquals(path, "../../impl/bbb");
+ * ```
+ *
+ * @param from The path to start from.
+ * @param to The path to reach.
+ * @returns The relative path.
+ */ export function relative(from, to) {
+ assertArgs(from, to);
+ from = resolve(from);
+ to = resolve(to);
+ if (from === to) return "";
+ // Trim any leading backslashes
+ let fromStart = 1;
+ const fromEnd = from.length;
+ for(; fromStart < fromEnd; ++fromStart){
+ if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break;
+ }
+ const fromLen = fromEnd - fromStart;
+ // Trim any leading backslashes
+ let toStart = 1;
+ const toEnd = to.length;
+ for(; toStart < toEnd; ++toStart){
+ if (!isPosixPathSeparator(to.charCodeAt(toStart))) break;
+ }
+ const toLen = toEnd - toStart;
+ // Compare paths to find the longest common path from root
+ const length = fromLen < toLen ? fromLen : toLen;
+ let lastCommonSep = -1;
+ let i = 0;
+ for(; i <= length; ++i){
+ if (i === length) {
+ if (toLen > length) {
+ if (isPosixPathSeparator(to.charCodeAt(toStart + i))) {
+ // We get here if `from` is the exact base path for `to`.
+ // For example: from='/foo/bar'; to='/foo/bar/baz'
+ return to.slice(toStart + i + 1);
+ } else if (i === 0) {
+ // We get here if `from` is the root
+ // For example: from='/'; to='/foo'
+ return to.slice(toStart + i);
+ }
+ } else if (fromLen > length) {
+ if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='/foo/bar/baz'; to='/foo/bar'
+ lastCommonSep = i;
+ } else if (i === 0) {
+ // We get here if `to` is the root.
+ // For example: from='/foo'; to='/'
+ lastCommonSep = 0;
+ }
+ }
+ break;
+ }
+ const fromCode = from.charCodeAt(fromStart + i);
+ const toCode = to.charCodeAt(toStart + i);
+ if (fromCode !== toCode) break;
+ else if (isPosixPathSeparator(fromCode)) lastCommonSep = i;
+ }
+ let out = "";
+ // Generate the relative path based on the path difference between `to`
+ // and `from`
+ for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
+ if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) {
+ if (out.length === 0) out += "..";
+ else out += "/..";
+ }
+ }
+ // Lastly, append the rest of the destination (`to`) path that comes after
+ // the common path parts
+ if (out.length > 0) return out + to.slice(toStart + lastCommonSep);
+ else {
+ toStart += lastCommonSep;
+ if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart;
+ return to.slice(toStart);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9yZWxhdGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1Bvc2l4UGF0aFNlcGFyYXRvciB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vcmVzb2x2ZS50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0QXJncyB9IGZyb20gXCIuLi9fY29tbW9uL3JlbGF0aXZlLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gYGZyb21gIHRvIGB0b2AgYmFzZWQgb24gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqXG4gKiBJZiBgZnJvbWAgYW5kIGB0b2AgYXJlIHRoZSBzYW1lLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L3JlbGF0aXZlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gcmVsYXRpdmUoXCIvZGF0YS9vcmFuZGVhL3Rlc3QvYWFhXCIsIFwiL2RhdGEvb3JhbmRlYS9pbXBsL2JiYlwiKTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi4uLy4uL2ltcGwvYmJiXCIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGZyb20gVGhlIHBhdGggdG8gc3RhcnQgZnJvbS5cbiAqIEBwYXJhbSB0byBUaGUgcGF0aCB0byByZWFjaC5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJncyhmcm9tLCB0byk7XG5cbiAgZnJvbSA9IHJlc29sdmUoZnJvbSk7XG4gIHRvID0gcmVzb2x2ZSh0byk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCBmcm9tU3RhcnQgPSAxO1xuICBjb25zdCBmcm9tRW5kID0gZnJvbS5sZW5ndGg7XG4gIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tRW5kOyArK2Zyb21TdGFydCkge1xuICAgIGlmICghaXNQb3NpeFBhdGhTZXBhcmF0b3IoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkpKSBicmVhaztcbiAgfVxuICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCB0b1N0YXJ0ID0gMTtcbiAgY29uc3QgdG9FbmQgPSB0by5sZW5ndGg7XG4gIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkge1xuICAgIGlmICghaXNQb3NpeFBhdGhTZXBhcmF0b3IodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSkpIGJyZWFrO1xuICB9XG4gIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICBsZXQgbGFzdENvbW1vblNlcCA9IC0xO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcih0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSkpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYHRvYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6J1xuICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3RcbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nLyc7IHRvPScvZm9vJ1xuICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZnJvbUxlbiA+IGxlbmd0aCkge1xuICAgICAgICBpZiAoaXNQb3NpeFBhdGhTZXBhcmF0b3IoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpKSkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhci9iYXonOyB0bz0nL2Zvby9iYXInXG4gICAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28nOyB0bz0nLydcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKSBicmVhaztcbiAgICBlbHNlIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcihmcm9tQ29kZSkpIGxhc3RDb21tb25TZXAgPSBpO1xuICB9XG5cbiAgbGV0IG91dCA9IFwiXCI7XG4gIC8vIEdlbmVyYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJhc2VkIG9uIHRoZSBwYXRoIGRpZmZlcmVuY2UgYmV0d2VlbiBgdG9gXG4gIC8vIGFuZCBgZnJvbWBcbiAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGZyb21FbmQgfHwgaXNQb3NpeFBhdGhTZXBhcmF0b3IoZnJvbS5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApIG91dCArPSBcIi4uXCI7XG4gICAgICBlbHNlIG91dCArPSBcIi8uLlwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhc3RseSwgYXBwZW5kIHRoZSByZXN0IG9mIHRoZSBkZXN0aW5hdGlvbiAoYHRvYCkgcGF0aCB0aGF0IGNvbWVzIGFmdGVyXG4gIC8vIHRoZSBjb21tb24gcGF0aCBwYXJ0c1xuICBpZiAob3V0Lmxlbmd0aCA+IDApIHJldHVybiBvdXQgKyB0by5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCk7XG4gIGVsc2Uge1xuICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICBpZiAoaXNQb3NpeFBhdGhTZXBhcmF0b3IodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSkpICsrdG9TdGFydDtcbiAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsb0JBQW9C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
+// denoCacheMetadata=47264394419456140,17124182613948114227 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/47d73fd65d0272244d9a0bc6f8b8a6fd770a2850f159a336ab2448bdd3a4fd86.js b/vendor/gen/https/jsr.io/47d73fd65d0272244d9a0bc6f8b8a6fd770a2850f159a336ab2448bdd3a4fd86.js
new file mode 100644
index 0000000..0377ecb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/47d73fd65d0272244d9a0bc6f8b8a6fd770a2850f159a336ab2448bdd3a4fd86.js
@@ -0,0 +1,177 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const padding = "=".charCodeAt(0);
+export const alphabet = {
+ base32: new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),
+ base32hex: new TextEncoder().encode("0123456789ABCDEFGHIJKLMNOPQRSTUV"),
+ base32crockford: new TextEncoder().encode("0123456789ABCDEFGHJKMNPQRSTVWXYZ")
+};
+export const rAlphabet = {
+ base32: new Uint8Array(128).fill(32),
+ base32hex: new Uint8Array(128).fill(32),
+ base32crockford: new Uint8Array(128).fill(32)
+};
+alphabet.base32.forEach((byte, i)=>rAlphabet.base32[byte] = i);
+alphabet.base32hex.forEach((byte, i)=>rAlphabet.base32hex[byte] = i);
+alphabet.base32crockford.forEach((byte, i)=>rAlphabet.base32crockford[byte] = i);
+/**
+ * Calculate the output size needed to encode a given input size for
+ * {@linkcode encodeIntoBase32}.
+ *
+ * @param rawSize The size of the input buffer.
+ * @returns The size of the output buffer.
+ *
+ * @example Basic Usage
+ * ```ts
+ * import { assertEquals } from "@std/assert";
+ * import { calcSizeBase32 } from "@std/encoding/unstable-base32";
+ *
+ * assertEquals(calcSizeBase32(1), 8);
+ * ```
+ */ export function calcSizeBase32(rawSize) {
+ return ((rawSize + 4) / 5 | 0) * 8;
+}
+export function encode(buffer, i, o, alphabet, padding) {
+ i += 4;
+ for(; i < buffer.length; i += 5){
+ let x = buffer[i - 4] << 16 | buffer[i - 3] << 8 | buffer[i - 2];
+ buffer[o++] = alphabet[x >> 19];
+ buffer[o++] = alphabet[x >> 14 & 0x1F];
+ buffer[o++] = alphabet[x >> 9 & 0x1F];
+ buffer[o++] = alphabet[x >> 4 & 0x1F];
+ x = x << 16 | buffer[i - 1] << 8 | buffer[i];
+ buffer[o++] = alphabet[x >> 15 & 0x1F];
+ buffer[o++] = alphabet[x >> 10 & 0x1F];
+ buffer[o++] = alphabet[x >> 5 & 0x1F];
+ buffer[o++] = alphabet[x & 0x1F];
+ }
+ switch(i){
+ case buffer.length + 3:
+ {
+ const x = buffer[i - 4] << 16;
+ buffer[o++] = alphabet[x >> 19];
+ buffer[o++] = alphabet[x >> 14 & 0x1F];
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ break;
+ }
+ case buffer.length + 2:
+ {
+ const x = buffer[i - 4] << 16 | buffer[i - 3] << 8;
+ buffer[o++] = alphabet[x >> 19];
+ buffer[o++] = alphabet[x >> 14 & 0x1F];
+ buffer[o++] = alphabet[x >> 9 & 0x1F];
+ buffer[o++] = alphabet[x >> 4 & 0x1F];
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ break;
+ }
+ case buffer.length + 1:
+ {
+ let x = buffer[i - 4] << 16 | buffer[i - 3] << 8 | buffer[i - 2];
+ buffer[o++] = alphabet[x >> 19];
+ buffer[o++] = alphabet[x >> 14 & 0x1F];
+ buffer[o++] = alphabet[x >> 9 & 0x1F];
+ buffer[o++] = alphabet[x >> 4 & 0x1F];
+ x <<= 16;
+ buffer[o++] = alphabet[x >> 15 & 0x1F];
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ break;
+ }
+ case buffer.length:
+ {
+ let x = buffer[i - 4] << 16 | buffer[i - 3] << 8 | buffer[i - 2];
+ buffer[o++] = alphabet[x >> 19];
+ buffer[o++] = alphabet[x >> 14 & 0x1F];
+ buffer[o++] = alphabet[x >> 9 & 0x1F];
+ buffer[o++] = alphabet[x >> 4 & 0x1F];
+ x = x << 16 | buffer[i - 1] << 8;
+ buffer[o++] = alphabet[x >> 15 & 0x1F];
+ buffer[o++] = alphabet[x >> 10 & 0x1F];
+ buffer[o++] = alphabet[x >> 5 & 0x1F];
+ buffer[o++] = padding;
+ break;
+ }
+ }
+ return o;
+}
+export function decode(buffer, i, o, alphabet, padding) {
+ for(let x = buffer.length - 6; x < buffer.length; ++x){
+ if (buffer[x] === padding) {
+ for(let y = x + 1; y < buffer.length; ++y){
+ if (buffer[y] !== padding) {
+ throw new TypeError(`Cannot decode input as base32: Invalid character (${String.fromCharCode(buffer[y])})`);
+ }
+ }
+ buffer = buffer.subarray(0, x);
+ break;
+ }
+ }
+ switch((buffer.length - o) % 8){
+ case 6:
+ case 3:
+ case 1:
+ throw new RangeError(`Cannot decode input as base32: Length (${buffer.length - o}), excluding padding, must not have a remainder of 1, 3, or 6 when divided by 8`);
+ }
+ i += 7;
+ for(; i < buffer.length; i += 8){
+ let x = getByte(buffer[i - 7], alphabet) << 19 | getByte(buffer[i - 6], alphabet) << 14 | getByte(buffer[i - 5], alphabet) << 9 | getByte(buffer[i - 4], alphabet) << 4;
+ buffer[o++] = x >> 16;
+ buffer[o++] = x >> 8 & 0xFF;
+ x = x << 16 | getByte(buffer[i - 3], alphabet) << 15 | getByte(buffer[i - 2], alphabet) << 10 | getByte(buffer[i - 1], alphabet) << 5 | getByte(buffer[i], alphabet);
+ buffer[o++] = x >> 16 & 0xFF;
+ buffer[o++] = x >> 8 & 0xFF;
+ buffer[o++] = x & 0xFF;
+ }
+ switch(i){
+ case buffer.length + 5:
+ {
+ const x = getByte(buffer[i - 7], alphabet) << 19 | getByte(buffer[i - 6], alphabet) << 14;
+ buffer[o++] = x >> 16;
+ break;
+ }
+ case buffer.length + 3:
+ {
+ const x = getByte(buffer[i - 7], alphabet) << 19 | getByte(buffer[i - 6], alphabet) << 14 | getByte(buffer[i - 5], alphabet) << 9 | getByte(buffer[i - 4], alphabet) << 4;
+ buffer[o++] = x >> 16;
+ buffer[o++] = x >> 8 & 0xFF;
+ break;
+ }
+ case buffer.length + 2:
+ {
+ let x = getByte(buffer[i - 7], alphabet) << 19 | getByte(buffer[i - 6], alphabet) << 14 | getByte(buffer[i - 5], alphabet) << 9 | getByte(buffer[i - 4], alphabet) << 4;
+ buffer[o++] = x >> 16;
+ buffer[o++] = x >> 8 & 0xFF;
+ x = x << 16 | getByte(buffer[i - 3], alphabet) << 15;
+ buffer[o++] = x >> 16 & 0xFF;
+ break;
+ }
+ case buffer.length:
+ {
+ let x = getByte(buffer[i - 7], alphabet) << 19 | getByte(buffer[i - 6], alphabet) << 14 | getByte(buffer[i - 5], alphabet) << 9 | getByte(buffer[i - 4], alphabet) << 4;
+ buffer[o++] = x >> 16;
+ buffer[o++] = x >> 8 & 0xFF;
+ x = x << 16 | getByte(buffer[i - 3], alphabet) << 15 | getByte(buffer[i - 2], alphabet) << 10 | getByte(buffer[i - 1], alphabet) << 5;
+ buffer[o++] = x >> 16 & 0xFF;
+ buffer[o++] = x >> 8 & 0xFF;
+ break;
+ }
+ }
+ return o;
+}
+function getByte(char, alphabet) {
+ const byte = alphabet[char] ?? 32;
+ if (byte === 32) {
+ throw new TypeError(`Cannot decode input as base32: Invalid character (${String.fromCharCode(char)})`);
+ }
+ return byte;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL19jb21tb24zMi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH07XG5cbmV4cG9ydCBjb25zdCBwYWRkaW5nID0gXCI9XCIuY2hhckNvZGVBdCgwKTtcbmV4cG9ydCBjb25zdCBhbHBoYWJldDogUmVjb3JkPEJhc2UzMkFscGhhYmV0LCBVaW50OEFycmF5PiA9IHtcbiAgYmFzZTMyOiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2N1wiKSxcbiAgYmFzZTMyaGV4OiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVlwiKSxcbiAgYmFzZTMyY3JvY2tmb3JkOiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiKSxcbn07XG5leHBvcnQgY29uc3QgckFscGhhYmV0OiBSZWNvcmQ8QmFzZTMyQWxwaGFiZXQsIFVpbnQ4QXJyYXk+ID0ge1xuICBiYXNlMzI6IG5ldyBVaW50OEFycmF5KDEyOCkuZmlsbCgzMiksIC8vIGFscGhhYmV0LmJhc2UzMi5sZW5ndGhcbiAgYmFzZTMyaGV4OiBuZXcgVWludDhBcnJheSgxMjgpLmZpbGwoMzIpLFxuICBiYXNlMzJjcm9ja2ZvcmQ6IG5ldyBVaW50OEFycmF5KDEyOCkuZmlsbCgzMiksXG59O1xuYWxwaGFiZXQuYmFzZTMyXG4gIC5mb3JFYWNoKChieXRlLCBpKSA9PiByQWxwaGFiZXQuYmFzZTMyW2J5dGVdID0gaSk7XG5hbHBoYWJldC5iYXNlMzJoZXhcbiAgLmZvckVhY2goKGJ5dGUsIGkpID0+IHJBbHBoYWJldC5iYXNlMzJoZXhbYnl0ZV0gPSBpKTtcbmFscGhhYmV0LmJhc2UzMmNyb2NrZm9yZFxuICAuZm9yRWFjaCgoYnl0ZSwgaSkgPT4gckFscGhhYmV0LmJhc2UzMmNyb2NrZm9yZFtieXRlXSA9IGkpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBiYXNlMzIgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlMzJPcHRpb25zIHtcbiAgLyoqIFRoZSBiYXNlMzIgYWxwaGFiZXQuIERlZmF1bHRzIHRvIFwiYmFzZTMyXCIgKi9cbiAgYWxwaGFiZXQ/OiBCYXNlMzJBbHBoYWJldDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZTMyIGFscGhhYmV0cy5cbiAqL1xuZXhwb3J0IHR5cGUgQmFzZTMyQWxwaGFiZXQgPSBcImJhc2UzMlwiIHwgXCJiYXNlMzJoZXhcIiB8IFwiYmFzZTMyY3JvY2tmb3JkXCI7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBvdXRwdXQgc2l6ZSBuZWVkZWQgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQgc2l6ZSBmb3JcbiAqIHtAbGlua2NvZGUgZW5jb2RlSW50b0Jhc2UzMn0uXG4gKlxuICogQHBhcmFtIHJhd1NpemUgVGhlIHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlci5cbiAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKiBpbXBvcnQgeyBjYWxjU2l6ZUJhc2UzMiB9IGZyb20gXCJAc3RkL2VuY29kaW5nL3Vuc3RhYmxlLWJhc2UzMlwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhjYWxjU2l6ZUJhc2UzMigxKSwgOCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNTaXplQmFzZTMyKHJhd1NpemU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoKHJhd1NpemUgKyA0KSAvIDUgfCAwKSAqIDg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoXG4gIGJ1ZmZlcjogVWludDhBcnJheV8sXG4gIGk6IG51bWJlcixcbiAgbzogbnVtYmVyLFxuICBhbHBoYWJldDogVWludDhBcnJheSxcbiAgcGFkZGluZzogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgaSArPSA0O1xuICBmb3IgKDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkgKz0gNSkge1xuICAgIGxldCB4ID0gKGJ1ZmZlcltpIC0gNF0hIDw8IDE2KSB8IChidWZmZXJbaSAtIDNdISA8PCA4KSB8IGJ1ZmZlcltpIC0gMl0hO1xuICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxOV0hO1xuICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxNCAmIDB4MUZdITtcbiAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gOSAmIDB4MUZdITtcbiAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gNCAmIDB4MUZdITtcbiAgICB4ID0gKHggPDwgMTYpIHwgKGJ1ZmZlcltpIC0gMV0hIDw8IDgpIHwgYnVmZmVyW2ldITtcbiAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gMTUgJiAweDFGXSE7XG4gICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDEwICYgMHgxRl0hO1xuICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiA1ICYgMHgxRl0hO1xuICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCAmIDB4MUZdITtcbiAgfVxuICBzd2l0Y2ggKGkpIHtcbiAgICBjYXNlIGJ1ZmZlci5sZW5ndGggKyAzOiB7XG4gICAgICBjb25zdCB4ID0gYnVmZmVyW2kgLSA0XSEgPDwgMTY7XG4gICAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gMTldITtcbiAgICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxNCAmIDB4MUZdITtcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIGJ1ZmZlci5sZW5ndGggKyAyOiB7XG4gICAgICBjb25zdCB4ID0gKGJ1ZmZlcltpIC0gNF0hIDw8IDE2KSB8IChidWZmZXJbaSAtIDNdISA8PCA4KTtcbiAgICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxOV0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDE0ICYgMHgxRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDkgJiAweDFGXSE7XG4gICAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gNCAmIDB4MUZdITtcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJ1ZmZlcltvKytdID0gcGFkZGluZztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIGJ1ZmZlci5sZW5ndGggKyAxOiB7XG4gICAgICBsZXQgeCA9IChidWZmZXJbaSAtIDRdISA8PCAxNikgfCAoYnVmZmVyW2kgLSAzXSEgPDwgOCkgfCBidWZmZXJbaSAtIDJdITtcbiAgICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxOV0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDE0ICYgMHgxRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDkgJiAweDFGXSE7XG4gICAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gNCAmIDB4MUZdITtcbiAgICAgIHggPDw9IDE2O1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDE1ICYgMHgxRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBwYWRkaW5nO1xuICAgICAgYnVmZmVyW28rK10gPSBwYWRkaW5nO1xuICAgICAgYnVmZmVyW28rK10gPSBwYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgYnVmZmVyLmxlbmd0aDoge1xuICAgICAgbGV0IHggPSAoYnVmZmVyW2kgLSA0XSEgPDwgMTYpIHwgKGJ1ZmZlcltpIC0gM10hIDw8IDgpIHwgYnVmZmVyW2kgLSAyXSE7XG4gICAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gMTldITtcbiAgICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxNCAmIDB4MUZdITtcbiAgICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiA5ICYgMHgxRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDQgJiAweDFGXSE7XG4gICAgICB4ID0gKHggPDwgMTYpIHwgKGJ1ZmZlcltpIC0gMV0hIDw8IDgpO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDE1ICYgMHgxRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDEwICYgMHgxRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDUgJiAweDFGXSE7XG4gICAgICBidWZmZXJbbysrXSA9IHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoXG4gIGJ1ZmZlcjogVWludDhBcnJheV8sXG4gIGk6IG51bWJlcixcbiAgbzogbnVtYmVyLFxuICBhbHBoYWJldDogVWludDhBcnJheSxcbiAgcGFkZGluZzogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgeCA9IGJ1ZmZlci5sZW5ndGggLSA2OyB4IDwgYnVmZmVyLmxlbmd0aDsgKyt4KSB7XG4gICAgaWYgKGJ1ZmZlclt4XSA9PT0gcGFkZGluZykge1xuICAgICAgZm9yIChsZXQgeSA9IHggKyAxOyB5IDwgYnVmZmVyLmxlbmd0aDsgKyt5KSB7XG4gICAgICAgIGlmIChidWZmZXJbeV0gIT09IHBhZGRpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBkZWNvZGUgaW5wdXQgYXMgYmFzZTMyOiBJbnZhbGlkIGNoYXJhY3RlciAoJHtcbiAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbeV0hKVxuICAgICAgICAgICAgfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgwLCB4KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzd2l0Y2ggKChidWZmZXIubGVuZ3RoIC0gbykgJSA4KSB7XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgMzpcbiAgICBjYXNlIDE6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgYENhbm5vdCBkZWNvZGUgaW5wdXQgYXMgYmFzZTMyOiBMZW5ndGggKCR7XG4gICAgICAgICAgYnVmZmVyLmxlbmd0aCAtIG9cbiAgICAgICAgfSksIGV4Y2x1ZGluZyBwYWRkaW5nLCBtdXN0IG5vdCBoYXZlIGEgcmVtYWluZGVyIG9mIDEsIDMsIG9yIDYgd2hlbiBkaXZpZGVkIGJ5IDhgLFxuICAgICAgKTtcbiAgfVxuXG4gIGkgKz0gNztcbiAgZm9yICg7IGkgPCBidWZmZXIubGVuZ3RoOyBpICs9IDgpIHtcbiAgICBsZXQgeCA9IChnZXRCeXRlKGJ1ZmZlcltpIC0gN10hLCBhbHBoYWJldCkgPDwgMTkpIHxcbiAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNl0hLCBhbHBoYWJldCkgPDwgMTQpIHxcbiAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNV0hLCBhbHBoYWJldCkgPDwgOSkgfFxuICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSA0XSEsIGFscGhhYmV0KSA8PCA0KTtcbiAgICBidWZmZXJbbysrXSA9IHggPj4gMTY7XG4gICAgYnVmZmVyW28rK10gPSB4ID4+IDggJiAweEZGO1xuICAgIHggPSAoeCA8PCAxNikgfFxuICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSAzXSEsIGFscGhhYmV0KSA8PCAxNSkgfFxuICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSAyXSEsIGFscGhhYmV0KSA8PCAxMCkgfFxuICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSAxXSEsIGFscGhhYmV0KSA8PCA1KSB8XG4gICAgICBnZXRCeXRlKGJ1ZmZlcltpXSEsIGFscGhhYmV0KTtcbiAgICBidWZmZXJbbysrXSA9IHggPj4gMTYgJiAweEZGO1xuICAgIGJ1ZmZlcltvKytdID0geCA+PiA4ICYgMHhGRjtcbiAgICBidWZmZXJbbysrXSA9IHggJiAweEZGO1xuICB9XG4gIHN3aXRjaCAoaSkge1xuICAgIGNhc2UgYnVmZmVyLmxlbmd0aCArIDU6IHtcbiAgICAgIGNvbnN0IHggPSAoZ2V0Qnl0ZShidWZmZXJbaSAtIDddISwgYWxwaGFiZXQpIDw8IDE5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNl0hLCBhbHBoYWJldCkgPDwgMTQpO1xuICAgICAgYnVmZmVyW28rK10gPSB4ID4+IDE2O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgYnVmZmVyLmxlbmd0aCArIDM6IHtcbiAgICAgIGNvbnN0IHggPSAoZ2V0Qnl0ZShidWZmZXJbaSAtIDddISwgYWxwaGFiZXQpIDw8IDE5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNl0hLCBhbHBoYWJldCkgPDwgMTQpIHxcbiAgICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSA1XSEsIGFscGhhYmV0KSA8PCA5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNF0hLCBhbHBoYWJldCkgPDwgNCk7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gMTY7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gOCAmIDB4RkY7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBidWZmZXIubGVuZ3RoICsgMjoge1xuICAgICAgbGV0IHggPSAoZ2V0Qnl0ZShidWZmZXJbaSAtIDddISwgYWxwaGFiZXQpIDw8IDE5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNl0hLCBhbHBoYWJldCkgPDwgMTQpIHxcbiAgICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSA1XSEsIGFscGhhYmV0KSA8PCA5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNF0hLCBhbHBoYWJldCkgPDwgNCk7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gMTY7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gOCAmIDB4RkY7XG4gICAgICB4ID0gKHggPDwgMTYpIHxcbiAgICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSAzXSEsIGFscGhhYmV0KSA8PCAxNSk7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gMTYgJiAweEZGO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgYnVmZmVyLmxlbmd0aDoge1xuICAgICAgbGV0IHggPSAoZ2V0Qnl0ZShidWZmZXJbaSAtIDddISwgYWxwaGFiZXQpIDw8IDE5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNl0hLCBhbHBoYWJldCkgPDwgMTQpIHxcbiAgICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSA1XSEsIGFscGhhYmV0KSA8PCA5KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gNF0hLCBhbHBoYWJldCkgPDwgNCk7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gMTY7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gOCAmIDB4RkY7XG4gICAgICB4ID0gKHggPDwgMTYpIHxcbiAgICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSAzXSEsIGFscGhhYmV0KSA8PCAxNSkgfFxuICAgICAgICAoZ2V0Qnl0ZShidWZmZXJbaSAtIDJdISwgYWxwaGFiZXQpIDw8IDEwKSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gMV0hLCBhbHBoYWJldCkgPDwgNSk7XG4gICAgICBidWZmZXJbbysrXSA9IHggPj4gMTYgJiAweEZGO1xuICAgICAgYnVmZmVyW28rK10gPSB4ID4+IDggJiAweEZGO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufVxuXG5mdW5jdGlvbiBnZXRCeXRlKGNoYXI6IG51bWJlciwgYWxwaGFiZXQ6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBieXRlID0gYWxwaGFiZXRbY2hhcl0gPz8gMzI7XG4gIGlmIChieXRlID09PSAzMikgeyAvLyBhbHBoYWJldC5CYXNlMzIubGVuZ3RoXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBDYW5ub3QgZGVjb2RlIGlucHV0IGFzIGJhc2UzMjogSW52YWxpZCBjaGFyYWN0ZXIgKCR7XG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcilcbiAgICAgIH0pYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBieXRlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUtyRCxPQUFPLE1BQU0sVUFBVSxJQUFJLFVBQVUsQ0FBQyxHQUFHO0FBQ3pDLE9BQU8sTUFBTSxXQUErQztFQUMxRCxRQUFRLElBQUksY0FBYyxNQUFNLENBQUM7RUFDakMsV0FBVyxJQUFJLGNBQWMsTUFBTSxDQUFDO0VBQ3BDLGlCQUFpQixJQUFJLGNBQWMsTUFBTSxDQUFDO0FBQzVDLEVBQUU7QUFDRixPQUFPLE1BQU0sWUFBZ0Q7RUFDM0QsUUFBUSxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUM7RUFDakMsV0FBVyxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUM7RUFDcEMsaUJBQWlCLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQztBQUM1QyxFQUFFO0FBQ0YsU0FBUyxNQUFNLENBQ1osT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFNLFVBQVUsTUFBTSxDQUFDLEtBQUssR0FBRztBQUNqRCxTQUFTLFNBQVMsQ0FDZixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQU0sVUFBVSxTQUFTLENBQUMsS0FBSyxHQUFHO0FBQ3BELFNBQVMsZUFBZSxDQUNyQixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQU0sVUFBVSxlQUFlLENBQUMsS0FBSyxHQUFHO0FBZTFEOzs7Ozs7Ozs7Ozs7OztDQWNDLEdBQ0QsT0FBTyxTQUFTLGVBQWUsT0FBZTtFQUM1QyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSTtBQUNuQztBQUVBLE9BQU8sU0FBUyxPQUNkLE1BQW1CLEVBQ25CLENBQVMsRUFDVCxDQUFTLEVBQ1QsUUFBb0IsRUFDcEIsT0FBZTtFQUVmLEtBQUs7RUFDTCxNQUFPLElBQUksT0FBTyxNQUFNLEVBQUUsS0FBSyxFQUFHO0lBQ2hDLElBQUksSUFBSSxBQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSyxLQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSyxJQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUU7SUFDdEUsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHO0lBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLO0lBQ3RDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLO0lBQ3JDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLO0lBQ3JDLElBQUksQUFBQyxLQUFLLEtBQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFLLElBQUssTUFBTSxDQUFDLEVBQUU7SUFDakQsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUs7SUFDdEMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUs7SUFDdEMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUs7SUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLO0VBQ2xDO0VBQ0EsT0FBUTtJQUNOLEtBQUssT0FBTyxNQUFNLEdBQUc7TUFBRztRQUN0QixNQUFNLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFLO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRztRQUMvQixNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSztRQUN0QyxNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ2QsTUFBTSxDQUFDLElBQUksR0FBRztRQUNkLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDZCxNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ2QsTUFBTSxDQUFDLElBQUksR0FBRztRQUNkLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDZDtNQUNGO0lBQ0EsS0FBSyxPQUFPLE1BQU0sR0FBRztNQUFHO1FBQ3RCLE1BQU0sSUFBSSxBQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSyxLQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSztRQUN0RCxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUc7UUFDL0IsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUs7UUFDdEMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDckMsTUFBTSxDQUFDLElBQUksR0FBRztRQUNkLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDZCxNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ2QsTUFBTSxDQUFDLElBQUksR0FBRztRQUNkO01BQ0Y7SUFDQSxLQUFLLE9BQU8sTUFBTSxHQUFHO01BQUc7UUFDdEIsSUFBSSxJQUFJLEFBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFLLEtBQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFLLElBQUssTUFBTSxDQUFDLElBQUksRUFBRTtRQUN0RSxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUc7UUFDL0IsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUs7UUFDdEMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDckMsTUFBTTtRQUNOLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDZCxNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ2QsTUFBTSxDQUFDLElBQUksR0FBRztRQUNkO01BQ0Y7SUFDQSxLQUFLLE9BQU8sTUFBTTtNQUFFO1FBQ2xCLElBQUksSUFBSSxBQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSyxLQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSyxJQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDdEUsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLO1FBQ3JDLElBQUksQUFBQyxLQUFLLEtBQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFLO1FBQ25DLE1BQU0sQ0FBQyxJQUFJLEdBQUcs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
+// denoCacheMetadata=9193889414007083690,17210230952693029698 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/49f6f053887d48ae744d6d0724488bdab682f647ddadaf5fecd0940c9be000d3.js b/vendor/gen/https/jsr.io/49f6f053887d48ae744d6d0724488bdab682f647ddadaf5fecd0940c9be000d3.js
new file mode 100644
index 0000000..d1f09ac
--- /dev/null
+++ b/vendor/gen/https/jsr.io/49f6f053887d48ae744d6d0724488bdab682f647ddadaf5fecd0940c9be000d3.js
@@ -0,0 +1,11 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const str = {
+ tag: "tag:yaml.org,2002:str",
+ kind: "scalar",
+ resolve: ()=>true,
+ construct: (data)=>data !== null ? data : ""
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9zdHIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiLi4vX3R5cGUudHNcIjtcblxuZXhwb3J0IGNvbnN0IHN0cjogVHlwZTxcInNjYWxhclwiLCBzdHJpbmc+ID0ge1xuICB0YWc6IFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXCIsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlc29sdmU6ICgpOiBib29sZWFuID0+IHRydWUsXG4gIGNvbnN0cnVjdDogKGRhdGE6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgPT4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBcIlwiLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLHFEQUFxRDtBQUlyRCxPQUFPLE1BQU0sTUFBOEI7RUFDekMsS0FBSztFQUNMLE1BQU07RUFDTixTQUFTLElBQWU7RUFDeEIsV0FBVyxDQUFDLE9BQWdDLFNBQVMsT0FBTyxPQUFPO0FBQ3JFLEVBQUUifQ==
+// denoCacheMetadata=12443849193812171320,14762642957944446638 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/4a62cc9e15d67262b11752c2aa575b5bc71b9b3e832d30b8312e211c71d82358.js b/vendor/gen/https/jsr.io/4a62cc9e15d67262b11752c2aa575b5bc71b9b3e832d30b8312e211c71d82358.js
new file mode 100644
index 0000000..156e628
--- /dev/null
+++ b/vendor/gen/https/jsr.io/4a62cc9e15d67262b11752c2aa575b5bc71b9b3e832d30b8312e211c71d82358.js
@@ -0,0 +1,25 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { common as _common } from "../_common/common.ts";
+import { SEPARATOR } from "./constants.ts";
+/** Determines the common path from a set of paths for POSIX systems.
+ *
+ * @example Usage
+ * ```ts
+ * import { common } from "@std/path/posix/common";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = common([
+ * "./deno/std/path/mod.ts",
+ * "./deno/std/fs/mod.ts",
+ * ]);
+ * assertEquals(path, "./deno/std/");
+ * ```
+ *
+ * @param paths The paths to compare.
+ * @returns The common path.
+ */ export function common(paths) {
+ return _common(paths, SEPARATOR);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9jb21tb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgY29tbW9uIGFzIF9jb21tb24gfSBmcm9tIFwiLi4vX2NvbW1vbi9jb21tb24udHNcIjtcbmltcG9ydCB7IFNFUEFSQVRPUiB9IGZyb20gXCIuL2NvbnN0YW50cy50c1wiO1xuXG4vKiogRGV0ZXJtaW5lcyB0aGUgY29tbW9uIHBhdGggZnJvbSBhIHNldCBvZiBwYXRocyBmb3IgUE9TSVggc3lzdGVtcy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbW1vbiB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvY29tbW9uXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gY29tbW9uKFtcbiAqICAgXCIuL2Rlbm8vc3RkL3BhdGgvbW9kLnRzXCIsXG4gKiAgIFwiLi9kZW5vL3N0ZC9mcy9tb2QudHNcIixcbiAqIF0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiLi9kZW5vL3N0ZC9cIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aHMgVGhlIHBhdGhzIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyBUaGUgY29tbW9uIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tb24ocGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIF9jb21tb24ocGF0aHMsIFNFUEFSQVRPUik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsT0FBTyxRQUFRLHVCQUF1QjtBQUN6RCxTQUFTLFNBQVMsUUFBUSxpQkFBaUI7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLFNBQVMsT0FBTyxLQUFlO0VBQ3BDLE9BQU8sUUFBUSxPQUFPO0FBQ3hCIn0=
+// denoCacheMetadata=5019980140798978530,16060386034926337416 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/4c8dda6c45b02ddbb9144d5293e9340bc17c145bacb4db4172d5d5fc5677d385.js b/vendor/gen/https/jsr.io/4c8dda6c45b02ddbb9144d5293e9340bc17c145bacb4db4172d5d5fc5677d385.js
new file mode 100644
index 0000000..034e8d8
--- /dev/null
+++ b/vendor/gen/https/jsr.io/4c8dda6c45b02ddbb9144d5293e9340bc17c145bacb4db4172d5d5fc5677d385.js
@@ -0,0 +1,855 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Documentation and interface for walk were adapted from Go
+// https://golang.org/pkg/path/filepath/#Walk
+// Copyright 2009 The Go Authors. All rights reserved. BSD license.
+import { join } from "jsr:@std/path@^1.0.9/join";
+import { toPathString } from "./_to_path_string.ts";
+import { createWalkEntry, createWalkEntrySync } from "./_create_walk_entry.ts";
+function include(path, exts, match, skip) {
+ if (exts && !exts.some((ext)=>path.endsWith(ext))) {
+ return false;
+ }
+ if (match && !match.some((pattern)=>!!path.match(pattern))) {
+ return false;
+ }
+ if (skip && skip.some((pattern)=>!!path.match(pattern))) {
+ return false;
+ }
+ return true;
+}
+/**
+ * Recursively walks through a directory and yields information about each file
+ * and directory encountered.
+ *
+ * The root path determines whether the file paths are relative or absolute.
+ * The root directory is included in the yielded entries.
+ *
+ * Requires `--allow-read` permission.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param root The root directory to start the walk from, as a string or URL.
+ * @param options The options for the walk.
+ * @throws {Deno.errors.NotFound} If the root directory does not exist.
+ *
+ * @returns An async iterable iterator that yields the walk entry objects.
+ *
+ * @example Basic usage
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk("."));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "foo.ts",
+ * // name: "foo.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Maximum file depth
+ *
+ * Setting the `maxDepth` option to `1` will only include the root directory and
+ * its immediate children.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo
+ * └── bar.ts
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { maxDepth: 1 }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "foo",
+ * // name: "foo",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude files
+ *
+ * Setting the `includeFiles` option to `false` will exclude files.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { includeFiles: false }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "foo",
+ * // name: "foo",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false,
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude directories
+ *
+ * Setting the `includeDirs` option to `false` will exclude directories.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { includeDirs: false }));
+ * // [
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude symbolic links
+ *
+ * Setting the `includeSymlinks` option to `false` will exclude symbolic links.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * ├── foo
+ * └── link -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { includeSymlinks: false }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Follow symbolic links
+ *
+ * Setting the `followSymlinks` option to `true` will follow symbolic links,
+ * affecting the `path` property of the walk entry.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── link -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { followSymlinks: true }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "link",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: true
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Canonicalize symbolic links
+ *
+ * Setting the `canonicalize` option to `false` will canonicalize the path of
+ * the followed symbolic link. Meaning, the `path` property of the walk entry
+ * will be the path of the symbolic link itself.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── link -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { followSymlinks: true, canonicalize: true }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "link",
+ * // name: "link",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: true
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Filter by file extensions
+ *
+ * Setting the `exts` option to `[".ts"]` or `["ts"]` will only include entries
+ * with the `.ts` file extension.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.js
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { exts: [".ts"] }));
+ * // [
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Filter by regular expressions
+ *
+ * Setting the `match` option to `[/.s/]` will only include entries with the
+ * letter `s` in their name.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── README.md
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { match: [/s/] }));
+ * // [
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude by regular expressions
+ *
+ * Setting the `skip` option to `[/.s/]` will exclude entries with the letter
+ * `s` in their name.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── README.md
+ * ```
+ *
+ * ```ts ignore
+ * import { walk } from "@std/fs/walk";
+ *
+ * await Array.fromAsync(walk(".", { skip: [/s/] }));
+ * // [
+ * // {
+ * // path: "README.md",
+ * // name: "README.md",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ */ export async function* walk(root, options) {
+ let { maxDepth = Infinity, includeFiles = true, includeDirs = true, includeSymlinks = true, followSymlinks = false, canonicalize = true, exts = undefined, match = undefined, skip = undefined } = options ?? {};
+ if (maxDepth < 0) {
+ return;
+ }
+ root = toPathString(root);
+ if (exts) {
+ exts = exts.map((ext)=>ext.startsWith(".") ? ext : `.${ext}`);
+ }
+ if (includeDirs && include(root, exts, match, skip)) {
+ yield await createWalkEntry(root);
+ }
+ if (maxDepth < 1 || !include(root, undefined, undefined, skip)) {
+ return;
+ }
+ for await (const entry of Deno.readDir(root)){
+ let path = join(root, entry.name);
+ let { isSymlink, isDirectory } = entry;
+ if (isSymlink) {
+ if (!followSymlinks) {
+ if (includeSymlinks && include(path, exts, match, skip)) {
+ yield {
+ path,
+ ...entry
+ };
+ }
+ continue;
+ }
+ const realPath = await Deno.realPath(path);
+ if (canonicalize) {
+ path = realPath;
+ }
+ // Caveat emptor: don't assume |path| is not a symlink. realpath()
+ // resolves symlinks but another process can replace the file system
+ // entity with a different type of entity before we call lstat().
+ ({ isSymlink, isDirectory } = await Deno.lstat(realPath));
+ }
+ if (isSymlink || isDirectory) {
+ const opts = {
+ maxDepth: maxDepth - 1,
+ includeFiles,
+ includeDirs,
+ includeSymlinks,
+ followSymlinks
+ };
+ if (exts !== undefined) {
+ opts.exts = exts;
+ }
+ if (match !== undefined) {
+ opts.match = match;
+ }
+ if (skip !== undefined) {
+ opts.skip = skip;
+ }
+ yield* walk(path, opts);
+ } else if (includeFiles && include(path, exts, match, skip)) {
+ yield {
+ path,
+ ...entry
+ };
+ }
+ }
+}
+/**
+ * Recursively walks through a directory and yields information about each file
+ * and directory encountered.
+ *
+ * The root path determines whether the file paths is relative or absolute.
+ * The root directory is included in the yielded entries.
+ *
+ * Requires `--allow-read` permission.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param root The root directory to start the walk from, as a string or URL.
+ * @param options The options for the walk.
+ *
+ * @returns A synchronous iterable iterator that yields the walk entry objects.
+ *
+ * @example Basic usage
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync("."));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "foo.ts",
+ * // name: "foo.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Maximum file depth
+ *
+ * Setting the `maxDepth` option to `1` will only include the root directory and
+ * its immediate children.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo
+ * └── bar.ts
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { maxDepth: 1 }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "foo",
+ * // name: "foo",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude files
+ *
+ * Setting the `includeFiles` option to `false` will exclude files.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { includeFiles: false }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "foo",
+ * // name: "foo",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false,
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude directories
+ *
+ * Setting the `includeDirs` option to `false` will exclude directories.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { includeDirs: false }));
+ * // [
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude symbolic links
+ *
+ * Setting the `includeSymlinks` option to `false` will exclude symbolic links.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * ├── foo
+ * └── link -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { includeSymlinks: false }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Follow symbolic links
+ *
+ * Setting the `followSymlinks` option to `true` will follow symbolic links,
+ * affecting the `path` property of the walk entry.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── link -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { followSymlinks: true }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "link",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: true
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Canonicalize symbolic links
+ *
+ * Setting the `canonicalize` option to `false` will canonicalize the path of
+ * the followed symbolic link. Meaning, the `path` property of the walk entry
+ * will be the path of the symbolic link itself.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── link -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { followSymlinks: true, canonicalize: true }));
+ * // [
+ * // {
+ * // path: ".",
+ * // name: ".",
+ * // isFile: false,
+ * // isDirectory: true,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // {
+ * // path: "link",
+ * // name: "link",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: true
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Filter by file extensions
+ *
+ * Setting the `exts` option to `[".ts"]` or `["ts"]` will only include entries
+ * with the `.ts` file extension.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.js
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { exts: [".ts"] }));
+ * // [
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Filter by regular expressions
+ *
+ * Setting the `match` option to `[/.s/]` will only include entries with the
+ * letter `s` in their name.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── README.md
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { match: [/s/] }));
+ * // [
+ * // {
+ * // path: "script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude by regular expressions
+ *
+ * Setting the `skip` option to `[/.s/]` will exclude entries with the letter
+ * `s` in their name.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── README.md
+ * ```
+ *
+ * ```ts ignore
+ * import { walkSync } from "@std/fs/walk";
+ *
+ * Array.from(walkSync(".", { skip: [/s/] }));
+ * // [
+ * // {
+ * // path: "README.md",
+ * // name: "README.md",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false
+ * // },
+ * // ]
+ * ```
+ */ export function* walkSync(root, options) {
+ let { maxDepth = Infinity, includeFiles = true, includeDirs = true, includeSymlinks = true, followSymlinks = false, canonicalize = true, exts = undefined, match = undefined, skip = undefined } = options ?? {};
+ root = toPathString(root);
+ if (exts) {
+ exts = exts.map((ext)=>ext.startsWith(".") ? ext : `.${ext}`);
+ }
+ if (maxDepth < 0) {
+ return;
+ }
+ if (includeDirs && include(root, exts, match, skip)) {
+ yield createWalkEntrySync(root);
+ }
+ if (maxDepth < 1 || !include(root, undefined, undefined, skip)) {
+ return;
+ }
+ const entries = Deno.readDirSync(root);
+ for (const entry of entries){
+ let path = join(root, entry.name);
+ let { isSymlink, isDirectory } = entry;
+ if (isSymlink) {
+ if (!followSymlinks) {
+ if (includeSymlinks && include(path, exts, match, skip)) {
+ yield {
+ path,
+ ...entry
+ };
+ }
+ continue;
+ }
+ const realPath = Deno.realPathSync(path);
+ if (canonicalize) {
+ path = realPath;
+ }
+ // Caveat emptor: don't assume |path| is not a symlink. realpath()
+ // resolves symlinks but another process can replace the file system
+ // entity with a different type of entity before we call lstat().
+ ({ isSymlink, isDirectory } = Deno.lstatSync(realPath));
+ }
+ if (isSymlink || isDirectory) {
+ const opts = {
+ maxDepth: maxDepth - 1,
+ includeFiles,
+ includeDirs,
+ includeSymlinks,
+ followSymlinks
+ };
+ if (exts !== undefined) {
+ opts.exts = exts;
+ }
+ if (match !== undefined) {
+ opts.match = match;
+ }
+ if (skip !== undefined) {
+ opts.skip = skip;
+ }
+ yield* walkSync(path, opts);
+ } else if (includeFiles && include(path, exts, match, skip)) {
+ yield {
+ path,
+ ...entry
+ };
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L3dhbGsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIERvY3VtZW50YXRpb24gYW5kIGludGVyZmFjZSBmb3Igd2FsayB3ZXJlIGFkYXB0ZWQgZnJvbSBHb1xuLy8gaHR0cHM6Ly9nb2xhbmcub3JnL3BrZy9wYXRoL2ZpbGVwYXRoLyNXYWxrXG4vLyBDb3B5cmlnaHQgMjAwOSBUaGUgR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gQlNEIGxpY2Vuc2UuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC45L2pvaW5cIjtcbmltcG9ydCB7IHRvUGF0aFN0cmluZyB9IGZyb20gXCIuL190b19wYXRoX3N0cmluZy50c1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlV2Fsa0VudHJ5LFxuICBjcmVhdGVXYWxrRW50cnlTeW5jLFxuICB0eXBlIFdhbGtFbnRyeSxcbn0gZnJvbSBcIi4vX2NyZWF0ZV93YWxrX2VudHJ5LnRzXCI7XG5cbmZ1bmN0aW9uIGluY2x1ZGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgZXh0cz86IHN0cmluZ1tdLFxuICBtYXRjaD86IFJlZ0V4cFtdLFxuICBza2lwPzogUmVnRXhwW10sXG4pOiBib29sZWFuIHtcbiAgaWYgKGV4dHMgJiYgIWV4dHMuc29tZSgoZXh0KTogYm9vbGVhbiA9PiBwYXRoLmVuZHNXaXRoKGV4dCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChtYXRjaCAmJiAhbWF0Y2guc29tZSgocGF0dGVybik6IGJvb2xlYW4gPT4gISFwYXRoLm1hdGNoKHBhdHRlcm4pKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc2tpcCAmJiBza2lwLnNvbWUoKHBhdHRlcm4pOiBib29sZWFuID0+ICEhcGF0aC5tYXRjaChwYXR0ZXJuKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIHdhbGt9IGFuZCB7QGxpbmtjb2RlIHdhbGtTeW5jfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Fsa09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gZGVwdGggb2YgdGhlIGZpbGUgdHJlZSB0byBiZSB3YWxrZWQgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtJbmZpbml0eX1cbiAgICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgZmlsZSBlbnRyaWVzIHNob3VsZCBiZSBpbmNsdWRlZCBvciBub3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgaW5jbHVkZUZpbGVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGRpcmVjdG9yeSBlbnRyaWVzIHNob3VsZCBiZSBpbmNsdWRlZCBvciBub3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgaW5jbHVkZURpcnM/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgc3ltbGluayBlbnRyaWVzIHNob3VsZCBiZSBpbmNsdWRlZCBvciBub3QuXG4gICAqIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSBpZiBgZm9sbG93U3ltbGlua3NgIGlzIHNldCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7dHJ1ZX1cbiAgICovXG4gIGluY2x1ZGVTeW1saW5rcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBzeW1saW5rcyBzaG91bGQgYmUgcmVzb2x2ZWQgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBmb2xsb3dTeW1saW5rcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9sbG93ZWQgc3ltbGluaydzIHBhdGggc2hvdWxkIGJlIGNhbm9uaWNhbGl6ZWQuXG4gICAqIFRoaXMgb3B0aW9uIHdvcmtzIG9ubHkgaWYgYGZvbGxvd1N5bWxpbmtzYCBpcyBub3QgYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQge3RydWV9XG4gICAqL1xuICBjYW5vbmljYWxpemU/OiBib29sZWFuO1xuICAvKipcbiAgICogTGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMgdXNlZCB0byBmaWx0ZXIgZW50cmllcy5cbiAgICogSWYgc3BlY2lmaWVkLCBlbnRyaWVzIHdpdGhvdXQgdGhlIGZpbGUgZXh0ZW5zaW9uIHNwZWNpZmllZCBieSB0aGlzIG9wdGlvblxuICAgKiBhcmUgZXhjbHVkZWQuXG4gICAqXG4gICAqIEZpbGUgZXh0ZW5zaW9ucyB3aXRoIG9yIHdpdGhvdXQgYSBsZWFkaW5nIHBlcmlvZCBhcmUgYWNjZXB0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtbXX1cbiAgICovXG4gIGV4dHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIHVzZWQgdG8gZmlsdGVyIGVudHJpZXMuXG4gICAqIElmIHNwZWNpZmllZCwgZW50cmllcyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIGJ5IHRoaXNcbiAgICogb3B0aW9uIGFyZSBleGNsdWRlZC5cbiAgICovXG4gIG1hdGNoPzogUmVnRXhwW107XG4gIC8qKlxuICAgKiBMaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucyB1c2VkIHRvIGZpbHRlciBlbnRyaWVzLlxuICAgKiBJZiBzcGVjaWZpZWQsIGVudHJpZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCBieSB0aGlzIG9wdGlvbiBhcmVcbiAgICogZXhjbHVkZWQuXG4gICAqL1xuICBza2lwPzogUmVnRXhwW107XG59XG5leHBvcnQgdHlwZSB7IFdhbGtFbnRyeSB9O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHdhbGtzIHRocm91Z2ggYSBkaXJlY3RvcnkgYW5kIHlpZWxkcyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGZpbGVcbiAqIGFuZCBkaXJlY3RvcnkgZW5jb3VudGVyZWQuXG4gKlxuICogVGhlIHJvb3QgcGF0aCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbGUgcGF0aHMgYXJlIHJlbGF0aXZlIG9yIGFic29sdXRlLlxuICogVGhlIHJvb3QgZGlyZWN0b3J5IGlzIGluY2x1ZGVkIGluIHRoZSB5aWVsZGVkIGVudHJpZXMuXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctcmVhZGAgcGVybWlzc2lvbi5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSB3YWxrIGZyb20sIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgd2Fsay5cbiAqIEB0aHJvd3Mge0Rlbm8uZXJyb3JzLk5vdEZvdW5kfSBJZiB0aGUgcm9vdCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuXG4gKlxuICogQHJldHVybnMgQW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdGhhdCB5aWVsZHMgdGhlIHdhbGsgZW50cnkgb2JqZWN0cy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBmb28udHNcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2FsayB9IGZyb20gXCJAc3RkL2ZzL3dhbGtcIjtcbiAqXG4gKiBhd2FpdCBBcnJheS5mcm9tQXN5bmMod2FsayhcIi5cIikpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCIuXCIsXG4gKiAvLyAgICAgbmFtZTogXCIuXCIsXG4gKiAvLyAgICAgaXNGaWxlOiBmYWxzZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcImZvby50c1wiLFxuICogLy8gICAgIG5hbWU6IFwiZm9vLnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBNYXhpbXVtIGZpbGUgZGVwdGhcbiAqXG4gKiBTZXR0aW5nIHRoZSBgbWF4RGVwdGhgIG9wdGlvbiB0byBgMWAgd2lsbCBvbmx5IGluY2x1ZGUgdGhlIHJvb3QgZGlyZWN0b3J5IGFuZFxuICogaXRzIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vXG4gKiAgICAg4pSU4pSA4pSAIGJhci50c1xuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyh3YWxrKFwiLlwiLCB7IG1heERlcHRoOiAxIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiLlwiLFxuICogLy8gICAgIG5hbWU6IFwiLlwiLFxuICogLy8gICAgIGlzRmlsZTogZmFsc2UsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IHRydWUsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJmb29cIixcbiAqIC8vICAgICBuYW1lOiBcImZvb1wiLFxuICogLy8gICAgIGlzRmlsZTogZmFsc2UsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IHRydWUsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRXhjbHVkZSBmaWxlc1xuICpcbiAqIFNldHRpbmcgdGhlIGBpbmNsdWRlRmlsZXNgIG9wdGlvbiB0byBgZmFsc2VgIHdpbGwgZXhjbHVkZSBmaWxlcy5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IHdhbGsgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogYXdhaXQgQXJyYXkuZnJvbUFzeW5jKHdhbGsoXCIuXCIsIHsgaW5jbHVkZUZpbGVzOiBmYWxzZSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi5cIixcbiAqIC8vICAgICBuYW1lOiBcIi5cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiZm9vXCIsXG4gKiAvLyAgICAgbmFtZTogXCJmb29cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2UsXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBFeGNsdWRlIGRpcmVjdG9yaWVzXG4gKlxuICogU2V0dGluZyB0aGUgYGluY2x1ZGVEaXJzYCBvcHRpb24gdG8gYGZhbHNlYCB3aWxsIGV4Y2x1ZGUgZGlyZWN0b3JpZXMuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGZvb1xuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyh3YWxrKFwiLlwiLCB7IGluY2x1ZGVEaXJzOiBmYWxzZSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBFeGNsdWRlIHN5bWJvbGljIGxpbmtzXG4gKlxuICogU2V0dGluZyB0aGUgYGluY2x1ZGVTeW1saW5rc2Agb3B0aW9uIHRvIGBmYWxzZWAgd2lsbCBleGNsdWRlIHN5bWJvbGljIGxpbmtzLlxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUnOKUgOKUgCBmb29cbiAqIOKUlOKUgOKUgCBsaW5rIC0+IHNjcmlwdC50cyAoc3ltYm9saWMgbGluaylcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2FsayB9IGZyb20gXCJAc3RkL2ZzL3dhbGtcIjtcbiAqXG4gKiBhd2FpdCBBcnJheS5mcm9tQXN5bmMod2FsayhcIi5cIiwgeyBpbmNsdWRlU3ltbGlua3M6IGZhbHNlIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiLlwiLFxuICogLy8gICAgIG5hbWU6IFwiLlwiLFxuICogLy8gICAgIGlzRmlsZTogZmFsc2UsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IHRydWUsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRm9sbG93IHN5bWJvbGljIGxpbmtzXG4gKlxuICogU2V0dGluZyB0aGUgYGZvbGxvd1N5bWxpbmtzYCBvcHRpb24gdG8gYHRydWVgIHdpbGwgZm9sbG93IHN5bWJvbGljIGxpbmtzLFxuICogYWZmZWN0aW5nIHRoZSBgcGF0aGAgcHJvcGVydHkgb2YgdGhlIHdhbGsgZW50cnkuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGxpbmsgLT4gc2NyaXB0LnRzIChzeW1ib2xpYyBsaW5rKVxuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyh3YWxrKFwiLlwiLCB7IGZvbGxvd1N5bWxpbmtzOiB0cnVlIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiLlwiLFxuICogLy8gICAgIG5hbWU6IFwiLlwiLFxuICogLy8gICAgIGlzRmlsZTogZmFsc2UsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IHRydWUsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcImxpbmtcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogdHJ1ZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2Fub25pY2FsaXplIHN5bWJvbGljIGxpbmtzXG4gKlxuICogU2V0dGluZyB0aGUgYGNhbm9uaWNhbGl6ZWAgb3B0aW9uIHRvIGBmYWxzZWAgd2lsbCBjYW5vbmljYWxpemUgdGhlIHBhdGggb2ZcbiAqIHRoZSBmb2xsb3dlZCBzeW1ib2xpYyBsaW5rLiBNZWFuaW5nLCB0aGUgYHBhdGhgIHByb3BlcnR5IG9mIHRoZSB3YWxrIGVudHJ5XG4gKiB3aWxsIGJlIHRoZSBwYXRoIG9mIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZi5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgbGluayAtPiBzY3JpcHQudHMgKHN5bWJvbGljIGxpbmspXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IHdhbGsgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogYXdhaXQgQXJyYXkuZnJvbUFzeW5jKHdhbGsoXCIuXCIsIHsgZm9sbG93U3ltbGlua3M6IHRydWUsIGNhbm9uaWNhbGl6ZTogdHJ1ZSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi5cIixcbiAqIC8vICAgICBuYW1lOiBcIi5cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwibGlua1wiLFxuICogLy8gICAgIG5hbWU6IFwibGlua1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiB0cnVlXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBGaWx0ZXIgYnkgZmlsZSBleHRlbnNpb25zXG4gKlxuICogU2V0dGluZyB0aGUgYGV4dHNgIG9wdGlvbiB0byBgW1wiLnRzXCJdYCBvciBgW1widHNcIl1gIHdpbGwgb25seSBpbmNsdWRlIGVudHJpZXNcbiAqIHdpdGggdGhlIGAudHNgIGZpbGUgZXh0ZW5zaW9uLlxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBmb28uanNcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2FsayB9IGZyb20gXCJAc3RkL2ZzL3dhbGtcIjtcbiAqXG4gKiBhd2FpdCBBcnJheS5mcm9tQXN5bmMod2FsayhcIi5cIiwgeyBleHRzOiBbXCIudHNcIl0gfSkpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRmlsdGVyIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAqXG4gKiBTZXR0aW5nIHRoZSBgbWF0Y2hgIG9wdGlvbiB0byBgWy8ucy9dYCB3aWxsIG9ubHkgaW5jbHVkZSBlbnRyaWVzIHdpdGggdGhlXG4gKiBsZXR0ZXIgYHNgIGluIHRoZWlyIG5hbWUuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIFJFQURNRS5tZFxuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyh3YWxrKFwiLlwiLCB7IG1hdGNoOiBbL3MvXSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBFeGNsdWRlIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAqXG4gKiBTZXR0aW5nIHRoZSBgc2tpcGAgb3B0aW9uIHRvIGBbLy5zL11gIHdpbGwgZXhjbHVkZSBlbnRyaWVzIHdpdGggdGhlIGxldHRlclxuICogYHNgIGluIHRoZWlyIG5hbWUuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIFJFQURNRS5tZFxuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyh3YWxrKFwiLlwiLCB7IHNraXA6IFsvcy9dIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiUkVBRE1FLm1kXCIsXG4gKiAvLyAgICAgbmFtZTogXCJSRUFETUUubWRcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vIF1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIHdhbGsoXG4gIHJvb3Q6IHN0cmluZyB8IFVSTCxcbiAgb3B0aW9ucz86IFdhbGtPcHRpb25zLFxuKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFdhbGtFbnRyeT4ge1xuICBsZXQge1xuICAgIG1heERlcHRoID0gSW5maW5pdHksXG4gICAgaW5jbHVkZUZpbGVzID0gdHJ1ZSxcbiAgICBpbmNsdWRlRGlycyA9IHRydWUsXG4gICAgaW5jbHVkZVN5bWxpbmtzID0gdHJ1ZSxcbiAgICBmb2xsb3dTeW1saW5rcyA9IGZhbHNlLFxuICAgIGNhbm9uaWNhbGl6ZSA9IHRydWUsXG4gICAgZXh0cyA9IHVuZGVmaW5lZCxcbiAgICBtYXRjaCA9IHVuZGVmaW5lZCxcbiAgICBza2lwID0gdW5kZWZpbmVkLFxuICB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICBpZiAobWF4RGVwdGggPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJvb3QgPSB0b1BhdGhTdHJpbmcocm9vdCk7XG4gIGlmIChleHRzKSB7XG4gICAgZXh0cyA9IGV4dHMubWFwKChleHQpID0+IGV4dC5zdGFydHNXaXRoKFwiLlwiKSA/IGV4dCA6IGAuJHtleHR9YCk7XG4gIH1cbiAgaWYgKGluY2x1ZGVEaXJzICYmIGluY2x1ZGUocm9vdCwgZXh0cywgbWF0Y2gsIHNraXApKSB7XG4gICAgeWllbGQgYXdhaXQgY3JlYXRlV2Fsa0VudHJ5KHJvb3QpO1xuICB9XG4gIGlmIChtYXhEZXB0aCA8IDEgfHwgIWluY2x1ZGUocm9vdCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHNraXApKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgRGVuby5yZWFkRGlyKHJvb3QpKSB7XG4gICAgbGV0IHBhdGggPSBqb2luKHJvb3QsIGVudHJ5Lm5hbWUpO1xuXG4gICAgbGV0IHsgaXNTeW1saW5rLCBpc0RpcmVjdG9yeSB9ID0gZW50cnk7XG5cbiAgICBpZiAoaXNTeW1saW5rKSB7XG4gICAgICBpZiAoIWZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICAgIGlmIChpbmNsdWRlU3ltbGlua3MgJiYgaW5jbHVkZShwYXRoLCBleHRzLCBtYXRjaCwgc2tpcCkpIHtcbiAgICAgICAgICB5aWVsZCB7IHBhdGgsIC4uLmVudHJ5IH07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWFsUGF0aCA9IGF3YWl0IERlbm8ucmVhbFBhdGgocGF0aCk7XG4gICAgICBpZiAoY2Fub25pY2FsaXplKSB7XG4gICAgICAgIHBhdGggPSByZWFsUGF0aDtcbiAgICAgIH1cbiAgICAgIC8vIENhdmVhdCBlbXB0b3I6IGRvbid0IGFzc3VtZSB8cGF0aHwgaXMgbm90IGEgc3ltbGluay4gcmVhbHBhdGgoKVxuICAgICAgLy8gcmVzb2x2ZXMgc3ltbGlua3MgYnV0IGFub3RoZXIgcHJvY2VzcyBjYW4gcmVwbGFjZSB0aGUgZmlsZSBzeXN0ZW1cbiAgICAgIC8vIGVudGl0eSB3aXRoIGEgZGlmZmVyZW50IHR5cGUgb2YgZW50aXR5IGJlZm9yZSB3ZSBjYWxsIGxzdGF0KCkuXG4gICAgICAoeyBpc1N5bWxpbmssIGlzRGlyZWN0b3J5IH0gPSBhd2FpdCBEZW5vLmxzdGF0KHJlYWxQYXRoKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3ltbGluayB8fCBpc0RpcmVjdG9yeSkge1xuICAgICAgY29uc3Qgb3B0czogV2Fsa09wdGlvbnMgPSB7XG4gICAgICAgIG1heERlcHRoOiBtYXhEZXB0aCAtIDEsXG4gICAgICAgIGluY2x1ZGVGaWxlcyxcbiAgICAgICAgaW5jbHVkZURpcnMsXG4gICAgICAgIGluY2x1ZGVTeW1saW5rcyxcbiAgICAgICAgZm9sbG93U3ltbGlua3MsXG4gICAgICB9O1xuICAgICAgaWYgKGV4dHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRzLmV4dHMgPSBleHRzO1xuICAgICAgfVxuICAgICAgaWYgKG1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0cy5tYXRjaCA9IG1hdGNoO1xuICAgICAgfVxuICAgICAgaWYgKHNraXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRzLnNraXAgPSBza2lwO1xuICAgICAgfVxuICAgICAgeWllbGQqIHdhbGsocGF0aCwgb3B0cyk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlRmlsZXMgJiYgaW5jbHVkZShwYXRoLCBleHRzLCBtYXRjaCwgc2tpcCkpIHtcbiAgICAgIHlpZWxkIHsgcGF0aCwgLi4uZW50cnkgfTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSB3YWxrcyB0aHJvdWdoIGEgZGlyZWN0b3J5IGFuZCB5aWVsZHMgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBmaWxlXG4gKiBhbmQgZGlyZWN0b3J5IGVuY291bnRlcmVkLlxuICpcbiAqIFRoZSByb290IHBhdGggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWxlIHBhdGhzIGlzIHJlbGF0aXZlIG9yIGFic29sdXRlLlxuICogVGhlIHJvb3QgZGlyZWN0b3J5IGlzIGluY2x1ZGVkIGluIHRoZSB5aWVsZGVkIGVudHJpZXMuXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctcmVhZGAgcGVybWlzc2lvbi5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSB3YWxrIGZyb20sIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgd2Fsay5cbiAqXG4gKiBAcmV0dXJucyBBIHN5bmNocm9ub3VzIGl0ZXJhYmxlIGl0ZXJhdG9yIHRoYXQgeWllbGRzIHRoZSB3YWxrIGVudHJ5IG9iamVjdHMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vLnRzXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IHdhbGtTeW5jIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIEFycmF5LmZyb20od2Fsa1N5bmMoXCIuXCIpKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiLlwiLFxuICogLy8gICAgIG5hbWU6IFwiLlwiLFxuICogLy8gICAgIGlzRmlsZTogZmFsc2UsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IHRydWUsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJmb28udHNcIixcbiAqIC8vICAgICBuYW1lOiBcImZvby50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgTWF4aW11bSBmaWxlIGRlcHRoXG4gKlxuICogU2V0dGluZyB0aGUgYG1heERlcHRoYCBvcHRpb24gdG8gYDFgIHdpbGwgb25seSBpbmNsdWRlIHRoZSByb290IGRpcmVjdG9yeSBhbmRcbiAqIGl0cyBpbW1lZGlhdGUgY2hpbGRyZW4uXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGZvb1xuICogICAgIOKUlOKUgOKUgCBiYXIudHNcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2Fsa1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogQXJyYXkuZnJvbSh3YWxrU3luYyhcIi5cIiwgeyBtYXhEZXB0aDogMSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi5cIixcbiAqIC8vICAgICBuYW1lOiBcIi5cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiZm9vXCIsXG4gKiAvLyAgICAgbmFtZTogXCJmb29cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vIF1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEV4Y2x1ZGUgZmlsZXNcbiAqXG4gKiBTZXR0aW5nIHRoZSBgaW5jbHVkZUZpbGVzYCBvcHRpb24gdG8gYGZhbHNlYCB3aWxsIGV4Y2x1ZGUgZmlsZXMuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGZvb1xuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrU3luYyB9IGZyb20gXCJAc3RkL2ZzL3dhbGtcIjtcbiAqXG4gKiBBcnJheS5mcm9tKHdhbGtTeW5jKFwiLlwiLCB7IGluY2x1ZGVGaWxlczogZmFsc2UgfSkpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCIuXCIsXG4gKiAvLyAgICAgbmFtZTogXCIuXCIsXG4gKiAvLyAgICAgaXNGaWxlOiBmYWxzZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcImZvb1wiLFxuICogLy8gICAgIG5hbWU6IFwiZm9vXCIsXG4gKiAvLyAgICAgaXNGaWxlOiBmYWxzZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlLFxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRXhjbHVkZSBkaXJlY3Rvcmllc1xuICpcbiAqIFNldHRpbmcgdGhlIGBpbmNsdWRlRGlyc2Agb3B0aW9uIHRvIGBmYWxzZWAgd2lsbCBleGNsdWRlIGRpcmVjdG9yaWVzLlxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBmb29cbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2Fsa1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogQXJyYXkuZnJvbSh3YWxrU3luYyhcIi5cIiwgeyBpbmNsdWRlRGlyczogZmFsc2UgfSkpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRXhjbHVkZSBzeW1ib2xpYyBsaW5rc1xuICpcbiAqIFNldHRpbmcgdGhlIGBpbmNsdWRlU3ltbGlua3NgIG9wdGlvbiB0byBgZmFsc2VgIHdpbGwgZXhjbHVkZSBzeW1ib2xpYyBsaW5rcy5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJzilIDilIAgZm9vXG4gKiDilJTilIDilIAgbGluayAtPiBzY3JpcHQudHMgKHN5bWJvbGljIGxpbmspXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IHdhbGtTeW5jIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIEFycmF5LmZyb20od2Fsa1N5bmMoXCIuXCIsIHsgaW5jbHVkZVN5bWxpbmtzOiBmYWxzZSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi5cIixcbiAqIC8vICAgICBuYW1lOiBcIi5cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vIF1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZvbGxvdyBzeW1ib2xpYyBsaW5rc1xuICpcbiAqIFNldHRpbmcgdGhlIGBmb2xsb3dTeW1saW5rc2Agb3B0aW9uIHRvIGB0cnVlYCB3aWxsIGZvbGxvdyBzeW1ib2xpYyBsaW5rcyxcbiAqIGFmZmVjdGluZyB0aGUgYHBhdGhgIHByb3BlcnR5IG9mIHRoZSB3YWxrIGVudHJ5LlxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBsaW5rIC0+IHNjcmlwdC50cyAoc3ltYm9saWMgbGluaylcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2Fsa1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogQXJyYXkuZnJvbSh3YWxrU3luYyhcIi5cIiwgeyBmb2xsb3dTeW1saW5rczogdHJ1ZSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi5cIixcbiAqIC8vICAgICBuYW1lOiBcIi5cIixcbiAqIC8vICAgICBpc0ZpbGU6IGZhbHNlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJsaW5rXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IHRydWVcbiAqIC8vICAgfSxcbiAqIC8vIF1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENhbm9uaWNhbGl6ZSBzeW1ib2xpYyBsaW5rc1xuICpcbiAqIFNldHRpbmcgdGhlIGBjYW5vbmljYWxpemVgIG9wdGlvbiB0byBgZmFsc2VgIHdpbGwgY2Fub25pY2FsaXplIHRoZSBwYXRoIG9mXG4gKiB0aGUgZm9sbG93ZWQgc3ltYm9saWMgbGluay4gTWVhbmluZywgdGhlIGBwYXRoYCBwcm9wZXJ0eSBvZiB0aGUgd2FsayBlbnRyeVxuICogd2lsbCBiZSB0aGUgcGF0aCBvZiB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGxpbmsgLT4gc2NyaXB0LnRzIChzeW1ib2xpYyBsaW5rKVxuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyB3YWxrU3luYyB9IGZyb20gXCJAc3RkL2ZzL3dhbGtcIjtcbiAqXG4gKiBBcnJheS5mcm9tKHdhbGtTeW5jKFwiLlwiLCB7IGZvbGxvd1N5bWxpbmtzOiB0cnVlLCBjYW5vbmljYWxpemU6IHRydWUgfSkpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCIuXCIsXG4gKiAvLyAgICAgbmFtZTogXCIuXCIsXG4gKiAvLyAgICAgaXNGaWxlOiBmYWxzZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcImxpbmtcIixcbiAqIC8vICAgICBuYW1lOiBcImxpbmtcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogdHJ1ZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRmlsdGVyIGJ5IGZpbGUgZXh0ZW5zaW9uc1xuICpcbiAqIFNldHRpbmcgdGhlIGBleHRzYCBvcHRpb24gdG8gYFtcIi50c1wiXWAgb3IgYFtcInRzXCJdYCB3aWxsIG9ubHkgaW5jbHVkZSBlbnRyaWVzXG4gKiB3aXRoIHRoZSBgLnRzYCBmaWxlIGV4dGVuc2lvbi5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vLmpzXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IHdhbGtTeW5jIH0gZnJvbSBcIkBzdGQvZnMvd2Fsa1wiO1xuICpcbiAqIEFycmF5LmZyb20od2Fsa1N5bmMoXCIuXCIsIHsgZXh0czogW1wiLnRzXCJdIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2VcbiAqIC8vICAgfSxcbiAqIC8vIF1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlciBieSByZWd1bGFyIGV4cHJlc3Npb25zXG4gKlxuICogU2V0dGluZyB0aGUgYG1hdGNoYCBvcHRpb24gdG8gYFsvLnMvXWAgd2lsbCBvbmx5IGluY2x1ZGUgZW50cmllcyB3aXRoIHRoZVxuICogbGV0dGVyIGBzYCBpbiB0aGVpciBuYW1lLlxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBSRUFETUUubWRcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2Fsa1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogQXJyYXkuZnJvbSh3YWxrU3luYyhcIi5cIiwgeyBtYXRjaDogWy9zL10gfSkpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBuYW1lOiBcInNjcmlwdC50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZVxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRXhjbHVkZSBieSByZWd1bGFyIGV4cHJlc3Npb25zXG4gKlxuICogU2V0dGluZyB0aGUgYHNraXBgIG9wdGlvbiB0byBgWy8ucy9dYCB3aWxsIGV4Y2x1ZGUgZW50cmllcyB3aXRoIHRoZSBsZXR0ZXJcbiAqIGBzYCBpbiB0aGVpciBuYW1lLlxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBSRUFETUUubWRcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgd2Fsa1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy93YWxrXCI7XG4gKlxuICogQXJyYXkuZnJvbSh3YWxrU3luYyhcIi5cIiwgeyBza2lwOiBbL3MvXSB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIlJFQURNRS5tZFwiLFxuICogLy8gICAgIG5hbWU6IFwiUkVBRE1FLm1kXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiB3YWxrU3luYyhcbiAgcm9vdDogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zPzogV2Fsa09wdGlvbnMsXG4pOiBJdGVyYWJsZUl0ZXJhdG9yPFdhbGtFbnRyeT4ge1xuICBsZXQge1xuICAgIG1heERlcHRoID0gSW5maW5pdHksXG4gICAgaW5jbHVkZUZpbGVzID0gdHJ1ZSxcbiAgICBpbmNsdWRlRGlycyA9IHRydWUsXG4gICAgaW5jbHVkZVN5bWxpbmtzID0gdHJ1ZSxcbiAgICBmb2xsb3dTeW1saW5rcyA9IGZhbHNlLFxuICAgIGNhbm9uaWNhbGl6ZSA9IHRydWUsXG4gICAgZXh0cyA9IHVuZGVmaW5lZCxcbiAgICBtYXRjaCA9IHVuZGVmaW5lZCxcbiAgICBza2lwID0gdW5kZWZpbmVkLFxuICB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICByb290ID0gdG9QYXRoU3RyaW5nKHJvb3QpO1xuICBpZiAoZXh0cykge1xuICAgIGV4dHMgPSBleHRzLm1hcCgoZXh0KSA9PiBleHQuc3RhcnRzV2l0aChcIi5cIikgPyBleHQgOiBgLiR7ZXh0fWApO1xuICB9XG4gIGlmIChtYXhEZXB0aCA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGluY2x1ZGVEaXJzICYmIGluY2x1ZGUocm9vdCwgZXh0cywgbWF0Y2gsIHNraXApKSB7XG4gICAgeWllbGQgY3JlYXRlV2Fsa0VudHJ5U3luYyhyb290KTtcbiAgfVxuICBpZiAobWF4RGVwdGggPCAxIHx8ICFpbmNsdWRlKHJvb3QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBza2lwKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbnRyaWVzID0gRGVuby5yZWFkRGlyU3luYyhyb290KTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgbGV0IHBhdGggPSBqb2luKHJvb3QsIGVudHJ5Lm5hbWUpO1xuXG4gICAgbGV0IHsgaXNTeW1saW5rLCBpc0RpcmVjdG9yeSB9ID0gZW50cnk7XG5cbiAgICBpZiAoaXNTeW1saW5rKSB7XG4gICAgICBpZiAoIWZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICAgIGlmIChpbmNsdWRlU3ltbGlua3MgJiYgaW5jbHVkZShwYXRoLCBleHRzLCBtYXRjaCwgc2tpcCkpIHtcbiAgICAgICAgICB5aWVsZCB7IHBhdGgsIC4uLmVudHJ5IH07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWFsUGF0aCA9IERlbm8ucmVhbFBhdGhTeW5jKHBhdGgpO1xuICAgICAgaWYgKGNhbm9uaWNhbGl6ZSkge1xuICAgICAgICBwYXRoID0gcmVhbFBhdGg7XG4gICAgICB9XG4gICAgICAvLyBDYXZlYXQgZW1wdG9yOiBkb24ndCBhc3N1bWUgfHBhdGh8IGlzIG5vdCBhIHN5bWxpbmsuIHJlYWxwYXRoKClcbiAgICAgIC8vIHJlc29sdmVzIHN5bWxpbmtzIGJ1dCBhbm90aGVyIHByb2Nlc3MgY2FuIHJlcGxhY2UgdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBlbnRpdHkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIG9mIGVudGl0eSBiZWZvcmUgd2UgY2FsbCBsc3RhdCgpLlxuICAgICAgKHsgaXNTeW1saW5rLCBpc0RpcmVjdG9yeSB9ID0gRGVuby5sc3RhdFN5bmMocmVhbFBhdGgpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNTeW1saW5rIHx8IGlzRGlyZWN0b3J5KSB7XG4gICAgICBjb25zdCBvcHRzOiBXYWxrT3B0aW9ucyA9IHtcbiAgICAgICAgbWF4RGVwdGg6IG1heERlcHRoIC0gMSxcbiAgICAgICAgaW5jbHVkZUZpbGVzLFxuICAgICAgICBpbmNsdWRlRGlycyxcbiAgICAgICAgaW5jbHVkZVN5bWxpbmtzLFxuICAgICAgICBmb2xsb3dTeW1saW5rcyxcbiAgICAgIH07XG4gICAgICBpZiAoZXh0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdHMuZXh0cyA9IGV4dHM7XG4gICAgICB9XG4gICAgICBpZiAobWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRzLm1hdGNoID0gbWF0Y2g7XG4gICAgICB9XG4gICAgICBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdHMuc2tpcCA9IHNraXA7XG4gICAgICB9XG4gICAgICB5aWVsZCogd2Fsa1N5bmMocGF0aCwgb3B0cyk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlRmlsZXMgJiYgaW5jbHVkZShwYXRoLCBleHRzLCBtYXRjaCwgc2tpcCkpIHtcbiAgICAgIHlpZWxkIHsgcGF0aCwgLi4uZW50cnkgfTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsNERBQTREO0FBQzVELDZDQUE2QztBQUM3QyxtRUFBbUU7QUFDbkUsU0FBUyxJQUFJLFFBQVEsNEJBQTRCO0FBQ2pELFNBQVMsWUFBWSxRQUFRLHVCQUF1QjtBQUNwRCxTQUNFLGVBQWUsRUFDZixtQkFBbUIsUUFFZCwwQkFBMEI7QUFFakMsU0FBUyxRQUNQLElBQVksRUFDWixJQUFlLEVBQ2YsS0FBZ0IsRUFDaEIsSUFBZTtFQUVmLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBaUIsS0FBSyxRQUFRLENBQUMsT0FBTztJQUM1RCxPQUFPO0VBQ1Q7RUFDQSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFVBQXFCLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxXQUFXO0lBQ3JFLE9BQU87RUFDVDtFQUNBLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLFVBQXFCLENBQUMsQ0FBQyxL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
+// denoCacheMetadata=15164055145066163966,15540414624218936283 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/4cd07ccdab851a623a4ab1ee79152bc24bbc59b2664a3e4db97b6c8b1934b39e.js b/vendor/gen/https/jsr.io/4cd07ccdab851a623a4ab1ee79152bc24bbc59b2664a3e4db97b6c8b1934b39e.js
new file mode 100644
index 0000000..87e804b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/4cd07ccdab851a623a4ab1ee79152bc24bbc59b2664a3e4db97b6c8b1934b39e.js
@@ -0,0 +1,9 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+export function assertPath(path) {
+ if (typeof path !== "string") {
+ throw new TypeError(`Path must be a string, received "${JSON.stringify(path)}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2Fzc2VydF9wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGg/OiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBQYXRoIG11c3QgYmUgYSBzdHJpbmcsIHJlY2VpdmVkIFwiJHtKU09OLnN0cmluZ2lmeShwYXRoKX1cImAsXG4gICAgKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFFakQsT0FBTyxTQUFTLFdBQVcsSUFBYTtFQUN0QyxJQUFJLE9BQU8sU0FBUyxVQUFVO0lBQzVCLE1BQU0sSUFBSSxVQUNSLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7RUFFL0Q7QUFDRiJ9
+// denoCacheMetadata=1158748568181035107,9650486414307479560 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/4d6cee0ff1bf9cfe8022c9c6649944bee022bdb32336cc243bce667a69bb3798.js b/vendor/gen/https/jsr.io/4d6cee0ff1bf9cfe8022c9c6649944bee022bdb32336cc243bce667a69bb3798.js
new file mode 100644
index 0000000..8a7bde2
--- /dev/null
+++ b/vendor/gen/https/jsr.io/4d6cee0ff1bf9cfe8022c9c6649944bee022bdb32336cc243bce667a69bb3798.js
@@ -0,0 +1,15 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export function isObject(value) {
+ return value !== null && typeof value === "object";
+}
+export function isNegativeZero(i) {
+ return i === 0 && Number.NEGATIVE_INFINITY === 1 / i;
+}
+export function isPlainObject(object) {
+ return Object.prototype.toString.call(object) === "[object Object]";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8oaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBpID09PSAwICYmIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIGk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iamVjdDogdW5rbm93bik6IG9iamVjdCBpcyBvYmplY3Qge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IFwiW29iamVjdCBPYmplY3RdXCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG9GQUFvRjtBQUNwRiwwRUFBMEU7QUFDMUUscURBQXFEO0FBRXJELE9BQU8sU0FBUyxTQUFTLEtBQWM7RUFDckMsT0FBTyxVQUFVLFFBQVEsT0FBTyxVQUFVO0FBQzVDO0FBRUEsT0FBTyxTQUFTLGVBQWUsQ0FBUztFQUN0QyxPQUFPLE1BQU0sS0FBSyxPQUFPLGlCQUFpQixLQUFLLElBQUk7QUFDckQ7QUFFQSxPQUFPLFNBQVMsY0FBYyxNQUFlO0VBQzNDLE9BQU8sT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQ3BEIn0=
+// denoCacheMetadata=5493907850923699108,8207816919595676271 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/50436fdcbcd0f6c11763b46aaa357399c4dcfc34a2c081d55f05ff6117764ce7.js b/vendor/gen/https/jsr.io/50436fdcbcd0f6c11763b46aaa357399c4dcfc34a2c081d55f05ff6117764ce7.js
new file mode 100644
index 0000000..3e9a836
--- /dev/null
+++ b/vendor/gen/https/jsr.io/50436fdcbcd0f6c11763b46aaa357399c4dcfc34a2c081d55f05ff6117764ce7.js
@@ -0,0 +1,53 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+function toDataView(value) {
+ if (value instanceof DataView) {
+ return value;
+ }
+ return ArrayBuffer.isView(value) ? new DataView(value.buffer, value.byteOffset, value.byteLength) : new DataView(value);
+}
+/**
+ * When checking the values of cryptographic hashes are equal, default
+ * comparisons can be susceptible to timing based attacks, where attacker is
+ * able to find out information about the host system by repeatedly checking
+ * response times to equality comparisons of values.
+ *
+ * It is likely some form of timing safe equality will make its way to the
+ * WebCrypto standard (see:
+ * {@link https://github.com/w3c/webcrypto/issues/270 | w3c/webcrypto#270}), but until
+ * that time, `timingSafeEqual()` is provided:
+ *
+ * @example Usage
+ * ```ts
+ * import { timingSafeEqual } from "@std/crypto/timing-safe-equal";
+ * import { assert } from "@std/assert";
+ *
+ * const a = await crypto.subtle.digest(
+ * "SHA-384",
+ * new TextEncoder().encode("hello world"),
+ * );
+ * const b = await crypto.subtle.digest(
+ * "SHA-384",
+ * new TextEncoder().encode("hello world"),
+ * );
+ *
+ * assert(timingSafeEqual(a, b));
+ * ```
+ *
+ * @param a The first value to compare.
+ * @param b The second value to compare.
+ * @returns `true` if the values are equal, otherwise `false`.
+ */ export function timingSafeEqual(a, b) {
+ if (a.byteLength !== b.byteLength) return false;
+ const dataViewA = toDataView(a);
+ const dataViewB = toDataView(b);
+ const length = a.byteLength;
+ let out = 0;
+ let i = -1;
+ while(++i < length){
+ out |= dataViewA.getUint8(i) ^ dataViewB.getUint8(i);
+ }
+ return out === 0;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY3J5cHRvLzEuMC41L3RpbWluZ19zYWZlX2VxdWFsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmZ1bmN0aW9uIHRvRGF0YVZpZXcoXG4gIHZhbHVlOiBBcnJheUJ1ZmZlclZpZXcgfCBBcnJheUJ1ZmZlckxpa2UgfCBEYXRhVmlldyxcbik6IERhdGFWaWV3IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSlcbiAgICA/IG5ldyBEYXRhVmlldyh2YWx1ZS5idWZmZXIsIHZhbHVlLmJ5dGVPZmZzZXQsIHZhbHVlLmJ5dGVMZW5ndGgpXG4gICAgOiBuZXcgRGF0YVZpZXcodmFsdWUpO1xufVxuXG4vKipcbiAqIFdoZW4gY2hlY2tpbmcgdGhlIHZhbHVlcyBvZiBjcnlwdG9ncmFwaGljIGhhc2hlcyBhcmUgZXF1YWwsIGRlZmF1bHRcbiAqIGNvbXBhcmlzb25zIGNhbiBiZSBzdXNjZXB0aWJsZSB0byB0aW1pbmcgYmFzZWQgYXR0YWNrcywgd2hlcmUgYXR0YWNrZXIgaXNcbiAqIGFibGUgdG8gZmluZCBvdXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3Qgc3lzdGVtIGJ5IHJlcGVhdGVkbHkgY2hlY2tpbmdcbiAqIHJlc3BvbnNlIHRpbWVzIHRvIGVxdWFsaXR5IGNvbXBhcmlzb25zIG9mIHZhbHVlcy5cbiAqXG4gKiBJdCBpcyBsaWtlbHkgc29tZSBmb3JtIG9mIHRpbWluZyBzYWZlIGVxdWFsaXR5IHdpbGwgbWFrZSBpdHMgd2F5IHRvIHRoZVxuICogV2ViQ3J5cHRvIHN0YW5kYXJkIChzZWU6XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJjcnlwdG8vaXNzdWVzLzI3MCB8IHczYy93ZWJjcnlwdG8jMjcwfSksIGJ1dCB1bnRpbFxuICogdGhhdCB0aW1lLCBgdGltaW5nU2FmZUVxdWFsKClgIGlzIHByb3ZpZGVkOlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdGltaW5nU2FmZUVxdWFsIH0gZnJvbSBcIkBzdGQvY3J5cHRvL3RpbWluZy1zYWZlLWVxdWFsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBhID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gKiAgIFwiU0hBLTM4NFwiLFxuICogICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJoZWxsbyB3b3JsZFwiKSxcbiAqICk7XG4gKiBjb25zdCBiID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gKiAgIFwiU0hBLTM4NFwiLFxuICogICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJoZWxsbyB3b3JsZFwiKSxcbiAqICk7XG4gKlxuICogYXNzZXJ0KHRpbWluZ1NhZmVFcXVhbChhLCBiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1pbmdTYWZlRXF1YWwoXG4gIGE6IEFycmF5QnVmZmVyVmlldyB8IEFycmF5QnVmZmVyTGlrZSB8IERhdGFWaWV3LFxuICBiOiBBcnJheUJ1ZmZlclZpZXcgfCBBcnJheUJ1ZmZlckxpa2UgfCBEYXRhVmlldyxcbik6IGJvb2xlYW4ge1xuICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZGF0YVZpZXdBID0gdG9EYXRhVmlldyhhKTtcbiAgY29uc3QgZGF0YVZpZXdCID0gdG9EYXRhVmlldyhiKTtcbiAgY29uc3QgbGVuZ3RoID0gYS5ieXRlTGVuZ3RoO1xuICBsZXQgb3V0ID0gMDtcbiAgbGV0IGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IGxlbmd0aCkge1xuICAgIG91dCB8PSBkYXRhVmlld0EuZ2V0VWludDgoaSkgXiBkYXRhVmlld0IuZ2V0VWludDgoaSk7XG4gIH1cbiAgcmV0dXJuIG91dCA9PT0gMDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsV0FDUCxLQUFtRDtFQUVuRCxJQUFJLGlCQUFpQixVQUFVO0lBQzdCLE9BQU87RUFDVDtFQUNBLE9BQU8sWUFBWSxNQUFNLENBQUMsU0FDdEIsSUFBSSxTQUFTLE1BQU0sTUFBTSxFQUFFLE1BQU0sVUFBVSxFQUFFLE1BQU0sVUFBVSxJQUM3RCxJQUFJLFNBQVM7QUFDbkI7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStCQyxHQUNELE9BQU8sU0FBUyxnQkFDZCxDQUErQyxFQUMvQyxDQUErQztFQUUvQyxJQUFJLEVBQUUsVUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU87RUFDMUMsTUFBTSxZQUFZLFdBQVc7RUFDN0IsTUFBTSxZQUFZLFdBQVc7RUFDN0IsTUFBTSxTQUFTLEVBQUUsVUFBVTtFQUMzQixJQUFJLE1BQU07RUFDVixJQUFJLElBQUksQ0FBQztFQUNULE1BQU8sRUFBRSxJQUFJLE9BQVE7SUFDbkIsT0FBTyxVQUFVLFFBQVEsQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDO0VBQ3BEO0VBQ0EsT0FBTyxRQUFRO0FBQ2pCIn0=
+// denoCacheMetadata=10016019964972805109,10825589616045233547 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/50c2c141172a883abf52dfcc12154f246025a3ff081b6707c82d69b2bfa533ca.js b/vendor/gen/https/jsr.io/50c2c141172a883abf52dfcc12154f246025a3ff081b6707c82d69b2bfa533ca.js
new file mode 100644
index 0000000..59ead7b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/50c2c141172a883abf52dfcc12154f246025a3ff081b6707c82d69b2bfa533ca.js
@@ -0,0 +1,71 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator } from "./_util.ts";
+import { normalize } from "./normalize.ts";
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ *
+ * @example Usage
+ * ```ts
+ * import { join } from "@std/path/windows/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const joined = join("C:\\foo", "bar", "baz\\..");
+ * assertEquals(joined, "C:\\foo\\bar");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `join` from `@std/path/windows/unstable-join`.
+ *
+ * @param paths The paths to join.
+ * @returns The joined path.
+ */ export function join(...paths) {
+ paths.forEach((path)=>assertPath(path));
+ paths = paths.filter((path)=>path.length > 0);
+ if (paths.length === 0) return ".";
+ // Make sure that the joined path doesn't start with two slashes, because
+ // normalize() will mistake it for an UNC path then.
+ //
+ // This step is skipped when it is very clear that the user actually
+ // intended to point at an UNC path. This is assumed when the first
+ // non-empty string arguments starts with exactly two slashes followed by
+ // at least one more non-slash character.
+ //
+ // Note that for normalize() to treat a path as an UNC path it needs to
+ // have at least 2 components, so we don't filter for that here.
+ // This means that the user can use join to construct UNC paths from
+ // a server name and a share name; for example:
+ // path.join('//server', 'share') -> '\\\\server\\share\\'
+ let needsReplace = true;
+ let slashCount = 0;
+ const firstPart = paths[0];
+ if (isPathSeparator(firstPart.charCodeAt(0))) {
+ ++slashCount;
+ const firstLen = firstPart.length;
+ if (firstLen > 1) {
+ if (isPathSeparator(firstPart.charCodeAt(1))) {
+ ++slashCount;
+ if (firstLen > 2) {
+ if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount;
+ else {
+ // We matched a UNC path in the first part
+ needsReplace = false;
+ }
+ }
+ }
+ }
+ }
+ let joined = paths.join("\\");
+ if (needsReplace) {
+ // Find any more consecutive slashes we need to replace
+ for(; slashCount < joined.length; ++slashCount){
+ if (!isPathSeparator(joined.charCodeAt(slashCount))) break;
+ }
+ // Replace the slashes if needed
+ if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`;
+ }
+ return normalize(joined);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2pvaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0UGF0aCB9IGZyb20gXCIuLi9fY29tbW9uL2Fzc2VydF9wYXRoLnRzXCI7XG5pbXBvcnQgeyBpc1BhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIi4vbm9ybWFsaXplLnRzXCI7XG5cbi8qKlxuICogSm9pbiBhbGwgZ2l2ZW4gYSBzZXF1ZW5jZSBvZiBgcGF0aHNgLHRoZW4gbm9ybWFsaXplcyB0aGUgcmVzdWx0aW5nIHBhdGguXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2pvaW5cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGpvaW5lZCA9IGpvaW4oXCJDOlxcXFxmb29cIiwgXCJiYXJcIiwgXCJiYXpcXFxcLi5cIik7XG4gKiBhc3NlcnRFcXVhbHMoam9pbmVkLCBcIkM6XFxcXGZvb1xcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBqb2luYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1qb2luYC5cbiAqXG4gKiBAcGFyYW0gcGF0aHMgVGhlIHBhdGhzIHRvIGpvaW4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IGFzc2VydFBhdGgocGF0aCkpO1xuICBwYXRocyA9IHBhdGhzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5sZW5ndGggPiAwKTtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBqb2luZWQgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggdHdvIHNsYXNoZXMsIGJlY2F1c2VcbiAgLy8gbm9ybWFsaXplKCkgd2lsbCBtaXN0YWtlIGl0IGZvciBhbiBVTkMgcGF0aCB0aGVuLlxuICAvL1xuICAvLyBUaGlzIHN0ZXAgaXMgc2tpcHBlZCB3aGVuIGl0IGlzIHZlcnkgY2xlYXIgdGhhdCB0aGUgdXNlciBhY3R1YWxseVxuICAvLyBpbnRlbmRlZCB0byBwb2ludCBhdCBhbiBVTkMgcGF0aC4gVGhpcyBpcyBhc3N1bWVkIHdoZW4gdGhlIGZpcnN0XG4gIC8vIG5vbi1lbXB0eSBzdHJpbmcgYXJndW1lbnRzIHN0YXJ0cyB3aXRoIGV4YWN0bHkgdHdvIHNsYXNoZXMgZm9sbG93ZWQgYnlcbiAgLy8gYXQgbGVhc3Qgb25lIG1vcmUgbm9uLXNsYXNoIGNoYXJhY3Rlci5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IGZvciBub3JtYWxpemUoKSB0byB0cmVhdCBhIHBhdGggYXMgYW4gVU5DIHBhdGggaXQgbmVlZHMgdG9cbiAgLy8gaGF2ZSBhdCBsZWFzdCAyIGNvbXBvbmVudHMsIHNvIHdlIGRvbid0IGZpbHRlciBmb3IgdGhhdCBoZXJlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHVzZXIgY2FuIHVzZSBqb2luIHRvIGNvbnN0cnVjdCBVTkMgcGF0aHMgZnJvbVxuICAvLyBhIHNlcnZlciBuYW1lIGFuZCBhIHNoYXJlIG5hbWU7IGZvciBleGFtcGxlOlxuICAvLyAgIHBhdGguam9pbignLy9zZXJ2ZXInLCAnc2hhcmUnKSAtPiAnXFxcXFxcXFxzZXJ2ZXJcXFxcc2hhcmVcXFxcJ1xuICBsZXQgbmVlZHNSZXBsYWNlID0gdHJ1ZTtcbiAgbGV0IHNsYXNoQ291bnQgPSAwO1xuICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoc1swXSE7XG4gIGlmIChpc1BhdGhTZXBhcmF0b3IoZmlyc3RQYXJ0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgKytzbGFzaENvdW50O1xuICAgIGNvbnN0IGZpcnN0TGVuID0gZmlyc3RQYXJ0Lmxlbmd0aDtcbiAgICBpZiAoZmlyc3RMZW4gPiAxKSB7XG4gICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICArK3NsYXNoQ291bnQ7XG4gICAgICAgIGlmIChmaXJzdExlbiA+IDIpIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDIpKSkgKytzbGFzaENvdW50O1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyBwYXRoIGluIHRoZSBmaXJzdCBwYXJ0XG4gICAgICAgICAgICBuZWVkc1JlcGxhY2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGV0IGpvaW5lZCA9IHBhdGhzLmpvaW4oXCJcXFxcXCIpO1xuICBpZiAobmVlZHNSZXBsYWNlKSB7XG4gICAgLy8gRmluZCBhbnkgbW9yZSBjb25zZWN1dGl2ZSBzbGFzaGVzIHdlIG5lZWQgdG8gcmVwbGFjZVxuICAgIGZvciAoOyBzbGFzaENvdW50IDwgam9pbmVkLmxlbmd0aDsgKytzbGFzaENvdW50KSB7XG4gICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihqb2luZWQuY2hhckNvZGVBdChzbGFzaENvdW50KSkpIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIHNsYXNoZXMgaWYgbmVlZGVkXG4gICAgaWYgKHNsYXNoQ291bnQgPj0gMikgam9pbmVkID0gYFxcXFwke2pvaW5lZC5zbGljZShzbGFzaENvdW50KX1gO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShqb2luZWQpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsZUFBZSxRQUFRLGFBQWE7QUFDN0MsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7OztDQWlCQyxHQUNELE9BQU8sU0FBUyxLQUFLLEdBQUcsS0FBZTtFQUNyQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLE9BQVMsV0FBVztFQUNuQyxRQUFRLE1BQU0sTUFBTSxDQUFDLENBQUMsT0FBUyxLQUFLLE1BQU0sR0FBRztFQUM3QyxJQUFJLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTztFQUUvQix5RUFBeUU7RUFDekUsb0RBQW9EO0VBQ3BELEVBQUU7RUFDRixvRUFBb0U7RUFDcEUsbUVBQW1FO0VBQ25FLHlFQUF5RTtFQUN6RSx5Q0FBeUM7RUFDekMsRUFBRTtFQUNGLHVFQUF1RTtFQUN2RSxnRUFBZ0U7RUFDaEUsb0VBQW9FO0VBQ3BFLCtDQUErQztFQUMvQyw0REFBNEQ7RUFDNUQsSUFBSSxlQUFlO0VBQ25CLElBQUksYUFBYTtFQUNqQixNQUFNLFlBQVksS0FBSyxDQUFDLEVBQUU7RUFDMUIsSUFBSSxnQkFBZ0IsVUFBVSxVQUFVLENBQUMsS0FBSztJQUM1QyxFQUFFO0lBQ0YsTUFBTSxXQUFXLFVBQVUsTUFBTTtJQUNqQyxJQUFJLFdBQVcsR0FBRztNQUNoQixJQUFJLGdCQUFnQixVQUFVLFVBQVUsQ0FBQyxLQUFLO1FBQzVDLEVBQUU7UUFDRixJQUFJLFdBQVcsR0FBRztVQUNoQixJQUFJLGdCQUFnQixVQUFVLFVBQVUsQ0FBQyxLQUFLLEVBQUU7ZUFDM0M7WUFDSCwwQ0FBMEM7WUFDMUMsZUFBZTtVQUNqQjtRQUNGO01BQ0Y7SUFDRjtFQUNGO0VBQ0EsSUFBSSxTQUFTLE1BQU0sSUFBSSxDQUFDO0VBQ3hCLElBQUksY0FBYztJQUNoQix1REFBdUQ7SUFDdkQsTUFBTyxhQUFhLE9BQU8sTUFBTSxFQUFFLEVBQUUsV0FBWTtNQUMvQyxJQUFJLENBQUMsZ0JBQWdCLE9BQU8sVUFBVSxDQUFDLGNBQWM7SUFDdkQ7SUFFQSxnQ0FBZ0M7SUFDaEMsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxhQUFhO0VBQy9EO0VBRUEsT0FBTyxVQUFVO0FBQ25CIn0=
+// denoCacheMetadata=17100293115144797105,3873617362002709515 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/50ec11ccd831a2a5370f919d392e0412ed7085af7d5d821bc3fce15102f26ea9.js b/vendor/gen/https/jsr.io/50ec11ccd831a2a5370f919d392e0412ed7085af7d5d821bc3fce15102f26ea9.js
new file mode 100644
index 0000000..7d9467f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/50ec11ccd831a2a5370f919d392e0412ed7085af7d5d821bc3fce15102f26ea9.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { fromFileUrl as posixFromFileUrl } from "./posix/from_file_url.ts";
+import { fromFileUrl as windowsFromFileUrl } from "./windows/from_file_url.ts";
+/**
+ * Converts a file URL to a path string.
+ *
+ * @example Usage
+ * ```ts
+ * import { fromFileUrl } from "@std/path/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
+ * assertEquals(fromFileUrl("file:///C:/Users/foo"), "C:\\Users\\foo");
+ * assertEquals(fromFileUrl("file://localhost/home/foo"), "\\home\\foo");
+ * } else {
+ * assertEquals(fromFileUrl("file:///home/foo"), "/home/foo");
+ * }
+ * ```
+ *
+ * @param url The file URL to convert to a path.
+ * @returns The path string.
+ */ export function fromFileUrl(url) {
+ return isWindows ? windowsFromFileUrl(url) : posixFromFileUrl(url);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9mcm9tX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgZnJvbUZpbGVVcmwgYXMgcG9zaXhGcm9tRmlsZVVybCB9IGZyb20gXCIuL3Bvc2l4L2Zyb21fZmlsZV91cmwudHNcIjtcbmltcG9ydCB7IGZyb21GaWxlVXJsIGFzIHdpbmRvd3NGcm9tRmlsZVVybCB9IGZyb20gXCIuL3dpbmRvd3MvZnJvbV9maWxlX3VybC50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsZSBVUkwgdG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC9mcm9tLWZpbGUtdXJsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKSwgXCJcXFxcaG9tZVxcXFxmb29cIik7XG4gKiAgIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vQzovVXNlcnMvZm9vXCIpLCBcIkM6XFxcXFVzZXJzXFxcXGZvb1wiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovL2xvY2FsaG9zdC9ob21lL2Zvb1wiKSwgXCJcXFxcaG9tZVxcXFxmb29cIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMoZnJvbUZpbGVVcmwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpLCBcIi9ob21lL2Zvb1wiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB1cmwgVGhlIGZpbGUgVVJMIHRvIGNvbnZlcnQgdG8gYSBwYXRoLlxuICogQHJldHVybnMgVGhlIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBzdHJpbmcgfCBVUkwpOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0Zyb21GaWxlVXJsKHVybCkgOiBwb3NpeEZyb21GaWxlVXJsKHVybCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsZUFBZSxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFDM0UsU0FBUyxlQUFlLGtCQUFrQixRQUFRLDZCQUE2QjtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQWlCO0VBQzNDLE9BQU8sWUFBWSxtQkFBbUIsT0FBTyxpQkFBaUI7QUFDaEUifQ==
+// denoCacheMetadata=5148178517284371969,17515150741914060454 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/51bfd7542bc0eda1a32293215f01b64eb581456a2370dd96febda3af3ccdbf29.js b/vendor/gen/https/jsr.io/51bfd7542bc0eda1a32293215f01b64eb581456a2370dd96febda3af3ccdbf29.js
new file mode 100644
index 0000000..9e9464b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/51bfd7542bc0eda1a32293215f01b64eb581456a2370dd96febda3af3ccdbf29.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { common as _common } from "./_common/common.ts";
+import { SEPARATOR } from "./constants.ts";
+/**
+ * Determines the common path from a set of paths for the given OS.
+ *
+ * @param paths Paths to search for common path.
+ * @returns The common path.
+ *
+ * @example Usage
+ * ```ts
+ * import { common } from "@std/path/common";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const path = common([
+ * "C:\\deno\\std\\path\\mod.ts",
+ * "C:\\deno\\std\\fs\\mod.ts"
+ * ]);
+ * assertEquals(path, "C:\\deno\\std\\");
+ * } else {
+ * const path = common([
+ * "./deno/std/path/mod.ts",
+ * "./deno/std/fs/mod.ts"
+ * ]);
+ * assertEquals(path, "./deno/std/");
+ * }
+ * ```
+ */ export function common(paths) {
+ return _common(paths, SEPARATOR);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9jb21tb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgY29tbW9uIGFzIF9jb21tb24gfSBmcm9tIFwiLi9fY29tbW9uL2NvbW1vbi50c1wiO1xuaW1wb3J0IHsgU0VQQVJBVE9SIH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgY29tbW9uIHBhdGggZnJvbSBhIHNldCBvZiBwYXRocyBmb3IgdGhlIGdpdmVuIE9TLlxuICpcbiAqIEBwYXJhbSBwYXRocyBQYXRocyB0byBzZWFyY2ggZm9yIGNvbW1vbiBwYXRoLlxuICogQHJldHVybnMgVGhlIGNvbW1vbiBwYXRoLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29tbW9uIH0gZnJvbSBcIkBzdGQvcGF0aC9jb21tb25cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBjb25zdCBwYXRoID0gY29tbW9uKFtcbiAqICAgICBcIkM6XFxcXGRlbm9cXFxcc3RkXFxcXHBhdGhcXFxcbW9kLnRzXCIsXG4gKiAgICAgXCJDOlxcXFxkZW5vXFxcXHN0ZFxcXFxmc1xcXFxtb2QudHNcIlxuICogICBdKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgsIFwiQzpcXFxcZGVub1xcXFxzdGRcXFxcXCIpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc3QgcGF0aCA9IGNvbW1vbihbXG4gKiAgICAgXCIuL2Rlbm8vc3RkL3BhdGgvbW9kLnRzXCIsXG4gKiAgICAgXCIuL2Rlbm8vc3RkL2ZzL21vZC50c1wiXG4gKiAgIF0pO1xuICogICBhc3NlcnRFcXVhbHMocGF0aCwgXCIuL2Rlbm8vc3RkL1wiKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBfY29tbW9uKHBhdGhzLCBTRVBBUkFUT1IpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLE9BQU8sUUFBUSxzQkFBc0I7QUFDeEQsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUJDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sS0FBZTtFQUNwQyxPQUFPLFFBQVEsT0FBTztBQUN4QiJ9
+// denoCacheMetadata=9149851732963502573,12738996882824302011 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/52723ab88f0d7683c38830d4b4913dacb4e28f10cae0c1b3c7edf5edbb3180c0.js b/vendor/gen/https/jsr.io/52723ab88f0d7683c38830d4b4913dacb4e28f10cae0c1b3c7edf5edbb3180c0.js
new file mode 100644
index 0000000..dddc7fa
--- /dev/null
+++ b/vendor/gen/https/jsr.io/52723ab88f0d7683c38830d4b4913dacb4e28f10cae0c1b3c7edf5edbb3180c0.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { join } from "./join.ts";
+import { SEPARATOR } from "./constants.ts";
+import { normalizeGlob } from "./normalize_glob.ts";
+/**
+ * Like join(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { joinGlobs } from "@std/path/posix/join-globs";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = joinGlobs(["foo", "bar", "**"], { globstar: true });
+ * assertEquals(path, "foo/bar/**");
+ * ```
+ *
+ * @param globs The globs to join.
+ * @param options The options to use.
+ * @returns The joined path.
+ */ export function joinGlobs(globs, options = {}) {
+ const { globstar = false } = options;
+ if (!globstar || globs.length === 0) {
+ return join(...globs);
+ }
+ let joined;
+ for (const glob of globs){
+ const path = glob;
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `${SEPARATOR}${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalizeGlob(joined, {
+ globstar
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9qb2luX2dsb2JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwiLi9qb2luLnRzXCI7XG5pbXBvcnQgeyBTRVBBUkFUT1IgfSBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUdsb2IgfSBmcm9tIFwiLi9ub3JtYWxpemVfZ2xvYi50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbi8qKlxuICogTGlrZSBqb2luKCksIGJ1dCBkb2Vzbid0IGNvbGxhcHNlIFwiKipcXC8uLlwiIHdoZW4gYGdsb2JzdGFyYCBpcyB0cnVlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgam9pbkdsb2JzIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9qb2luLWdsb2JzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gam9pbkdsb2JzKFtcImZvb1wiLCBcImJhclwiLCBcIioqXCJdLCB7IGdsb2JzdGFyOiB0cnVlIH0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiZm9vL2Jhci8qKlwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9icyBUaGUgZ2xvYnMgdG8gam9pbi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBqb2luZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBQaWNrPEdsb2JPcHRpb25zLCBcImdsb2JzdGFyXCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGdsb2JzdGFyID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGlmICghZ2xvYnN0YXIgfHwgZ2xvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGpvaW4oLi4uZ2xvYnMpO1xuICB9XG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBnbG9iIG9mIGdsb2JzKSB7XG4gICAgY29uc3QgcGF0aCA9IGdsb2I7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFqb2luZWQpIGpvaW5lZCA9IHBhdGg7XG4gICAgICBlbHNlIGpvaW5lZCArPSBgJHtTRVBBUkFUT1J9JHtwYXRofWA7XG4gICAgfVxuICB9XG4gIGlmICgham9pbmVkKSByZXR1cm4gXCIuXCI7XG4gIHJldHVybiBub3JtYWxpemVHbG9iKGpvaW5lZCwgeyBnbG9ic3RhciB9KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBR3JDLFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBQzNDLFNBQVMsYUFBYSxRQUFRLHNCQUFzQjtBQUlwRDs7Ozs7Ozs7Ozs7Ozs7O0NBZUMsR0FDRCxPQUFPLFNBQVMsVUFDZCxLQUFlLEVBQ2YsVUFBeUMsQ0FBQyxDQUFDO0VBRTNDLE1BQU0sRUFBRSxXQUFXLEtBQUssRUFBRSxHQUFHO0VBQzdCLElBQUksQ0FBQyxZQUFZLE1BQU0sTUFBTSxLQUFLLEdBQUc7SUFDbkMsT0FBTyxRQUFRO0VBQ2pCO0VBQ0EsSUFBSTtFQUNKLEtBQUssTUFBTSxRQUFRLE1BQU87SUFDeEIsTUFBTSxPQUFPO0lBQ2IsSUFBSSxLQUFLLE1BQU0sR0FBRyxHQUFHO01BQ25CLElBQUksQ0FBQyxRQUFRLFNBQVM7V0FDakIsVUFBVSxHQUFHLFlBQVksTUFBTTtJQUN0QztFQUNGO0VBQ0EsSUFBSSxDQUFDLFFBQVEsT0FBTztFQUNwQixPQUFPLGNBQWMsUUFBUTtJQUFFO0VBQVM7QUFDMUMifQ==
+// denoCacheMetadata=8474048573527403996,8715843483137798462 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/52a5ceb4391fa51760fc2e28428cfa87e4f4e1751be6b657bfd4b7e26746aba1.js b/vendor/gen/https/jsr.io/52a5ceb4391fa51760fc2e28428cfa87e4f4e1751be6b657bfd4b7e26746aba1.js
new file mode 100644
index 0000000..1ed4e1e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/52a5ceb4391fa51760fc2e28428cfa87e4f4e1751be6b657bfd4b7e26746aba1.js
@@ -0,0 +1,39 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export function runLengthEncode(arr) {
+ const data = [];
+ const runLengths = [];
+ let prev = Symbol("none");
+ for (const x of arr){
+ if (x === prev) {
+ ++runLengths[runLengths.length - 1];
+ } else {
+ prev = x;
+ data.push(x);
+ runLengths.push(1);
+ }
+ }
+ for (const r of runLengths){
+ if (r >= 0x100) {
+ throw new Error(`Run length too long: ${r}`);
+ }
+ }
+ return {
+ d: btoa(String.fromCharCode(...data)),
+ r: btoa(String.fromCharCode(...runLengths))
+ };
+}
+export function runLengthDecode({ d, r }) {
+ const data = atob(d);
+ const runLengths = atob(r);
+ let out = "";
+ for (const [i, ch] of [
+ ...runLengths
+ ].entries()){
+ out += data[i].repeat(ch.codePointAt(0));
+ }
+ return Uint8Array.from([
+ ...out
+ ].map((x)=>x.codePointAt(0)));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY2xpLzEuMC4xNy9fcnVuX2xlbmd0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQgZnVuY3Rpb24gcnVuTGVuZ3RoRW5jb2RlKGFycjogbnVtYmVyW10pIHtcbiAgY29uc3QgZGF0YTogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgcnVuTGVuZ3RoczogbnVtYmVyW10gPSBbXTtcblxuICBsZXQgcHJldjogc3ltYm9sIHwgbnVtYmVyID0gU3ltYm9sKFwibm9uZVwiKTtcblxuICBmb3IgKGNvbnN0IHggb2YgYXJyKSB7XG4gICAgaWYgKHggPT09IHByZXYpIHtcbiAgICAgICsrcnVuTGVuZ3Roc1tydW5MZW5ndGhzLmxlbmd0aCAtIDFdITtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJldiA9IHg7XG4gICAgICBkYXRhLnB1c2goeCk7XG4gICAgICBydW5MZW5ndGhzLnB1c2goMSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCByIG9mIHJ1bkxlbmd0aHMpIHtcbiAgICBpZiAociA+PSAweDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSdW4gbGVuZ3RoIHRvbyBsb25nOiAke3J9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkOiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZGF0YSkpLFxuICAgIHI6IGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5ydW5MZW5ndGhzKSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5MZW5ndGhEZWNvZGUoeyBkLCByIH06IHsgZDogc3RyaW5nOyByOiBzdHJpbmcgfSkge1xuICBjb25zdCBkYXRhID0gYXRvYihkKTtcbiAgY29uc3QgcnVuTGVuZ3RocyA9IGF0b2Iocik7XG4gIGxldCBvdXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2ksIGNoXSBvZiBbLi4ucnVuTGVuZ3Roc10uZW50cmllcygpKSB7XG4gICAgb3V0ICs9IGRhdGFbaV0hLnJlcGVhdChjaC5jb2RlUG9pbnRBdCgwKSEpO1xuICB9XG5cbiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbLi4ub3V0XS5tYXAoKHgpID0+IHguY29kZVBvaW50QXQoMCkhKSk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBRXJELE9BQU8sU0FBUyxnQkFBZ0IsR0FBYTtFQUMzQyxNQUFNLE9BQWlCLEVBQUU7RUFDekIsTUFBTSxhQUF1QixFQUFFO0VBRS9CLElBQUksT0FBd0IsT0FBTztFQUVuQyxLQUFLLE1BQU0sS0FBSyxJQUFLO0lBQ25CLElBQUksTUFBTSxNQUFNO01BQ2QsRUFBRSxVQUFVLENBQUMsV0FBVyxNQUFNLEdBQUcsRUFBRTtJQUNyQyxPQUFPO01BQ0wsT0FBTztNQUNQLEtBQUssSUFBSSxDQUFDO01BQ1YsV0FBVyxJQUFJLENBQUM7SUFDbEI7RUFDRjtFQUVBLEtBQUssTUFBTSxLQUFLLFdBQVk7SUFDMUIsSUFBSSxLQUFLLE9BQU87TUFDZCxNQUFNLElBQUksTUFBTSxDQUFDLHFCQUFxQixFQUFFLEdBQUc7SUFDN0M7RUFDRjtFQUVBLE9BQU87SUFDTCxHQUFHLEtBQUssT0FBTyxZQUFZLElBQUk7SUFDL0IsR0FBRyxLQUFLLE9BQU8sWUFBWSxJQUFJO0VBQ2pDO0FBQ0Y7QUFFQSxPQUFPLFNBQVMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBNEI7RUFDaEUsTUFBTSxPQUFPLEtBQUs7RUFDbEIsTUFBTSxhQUFhLEtBQUs7RUFDeEIsSUFBSSxNQUFNO0VBRVYsS0FBSyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUk7T0FBSTtHQUFXLENBQUMsT0FBTyxHQUFJO0lBQy9DLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBRSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7RUFDeEM7RUFFQSxPQUFPLFdBQVcsSUFBSSxDQUFDO09BQUk7R0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQU0sRUFBRSxXQUFXLENBQUM7QUFDM0QifQ==
+// denoCacheMetadata=1118774851535590230,4532285022032180039 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5304106c4e963b63ea0d18a201e1b9cdec614d7f987a7c1df04d83dda9ad391a.js b/vendor/gen/https/jsr.io/5304106c4e963b63ea0d18a201e1b9cdec614d7f987a7c1df04d83dda9ad391a.js
new file mode 100644
index 0000000..ff4163d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5304106c4e963b63ea0d18a201e1b9cdec614d7f987a7c1df04d83dda9ad391a.js
@@ -0,0 +1,17 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+export function _format(sep, pathObject) {
+ const dir = pathObject.dir || pathObject.root;
+ const base = pathObject.base || (pathObject.name ?? "") + (pathObject.ext ?? "");
+ if (!dir) return base;
+ if (base === sep) return dir;
+ if (dir === pathObject.root) return dir + base;
+ return dir + sep + base;
+}
+export function assertArg(pathObject) {
+ if (pathObject === null || typeof pathObject !== "object") {
+ throw new TypeError(`The "pathObject" argument must be of type Object, received type "${typeof pathObject}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2Zvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9mb3JtYXQoXG4gIHNlcDogc3RyaW5nLFxuICBwYXRoT2JqZWN0OiBQYXJ0aWFsPFBhcnNlZFBhdGg+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7XG4gIGNvbnN0IGJhc2U6IHN0cmluZyA9IHBhdGhPYmplY3QuYmFzZSB8fFxuICAgIChwYXRoT2JqZWN0Lm5hbWUgPz8gXCJcIikgKyAocGF0aE9iamVjdC5leHQgPz8gXCJcIik7XG4gIGlmICghZGlyKSByZXR1cm4gYmFzZTtcbiAgaWYgKGJhc2UgPT09IHNlcCkgcmV0dXJuIGRpcjtcbiAgaWYgKGRpciA9PT0gcGF0aE9iamVjdC5yb290KSByZXR1cm4gZGlyICsgYmFzZTtcbiAgcmV0dXJuIGRpciArIHNlcCArIGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBcmcocGF0aE9iamVjdDogUGFydGlhbDxQYXJzZWRQYXRoPikge1xuICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QsIHJlY2VpdmVkIHR5cGUgXCIke3R5cGVvZiBwYXRoT2JqZWN0fVwiYCxcbiAgICApO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUlyQyxPQUFPLFNBQVMsUUFDZCxHQUFXLEVBQ1gsVUFBK0I7RUFFL0IsTUFBTSxNQUEwQixXQUFXLEdBQUcsSUFBSSxXQUFXLElBQUk7RUFDakUsTUFBTSxPQUFlLFdBQVcsSUFBSSxJQUNsQyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEVBQUU7RUFDakQsSUFBSSxDQUFDLEtBQUssT0FBTztFQUNqQixJQUFJLFNBQVMsS0FBSyxPQUFPO0VBQ3pCLElBQUksUUFBUSxXQUFXLElBQUksRUFBRSxPQUFPLE1BQU07RUFDMUMsT0FBTyxNQUFNLE1BQU07QUFDckI7QUFFQSxPQUFPLFNBQVMsVUFBVSxVQUErQjtFQUN2RCxJQUFJLGVBQWUsUUFBUSxPQUFPLGVBQWUsVUFBVTtJQUN6RCxNQUFNLElBQUksVUFDUixDQUFDLGlFQUFpRSxFQUFFLE9BQU8sV0FBVyxDQUFDLENBQUM7RUFFNUY7QUFDRiJ9
+// denoCacheMetadata=3778493081554655896,9698638942083816661 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5351942042f1aab5ffc9c2cbd36ae1eb5897741bd7565a8dc4fc7d1403da6d62.js b/vendor/gen/https/jsr.io/5351942042f1aab5ffc9c2cbd36ae1eb5897741bd7565a8dc4fc7d1403da6d62.js
new file mode 100644
index 0000000..7dfdab6
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5351942042f1aab5ffc9c2cbd36ae1eb5897741bd7565a8dc4fc7d1403da6d62.js
@@ -0,0 +1,44 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { extractFrontMatter } from "./_shared.ts";
+import { parse } from "jsr:@std/yaml@^1.0.5/parse";
+import { EXTRACT_YAML_REGEXP } from "./_formats.ts";
+/**
+ * Extracts and parses {@link https://yaml.org | YAML} from the metadata of
+ * front matter content.
+ *
+ * @example Extract YAML front matter
+ * ```ts
+ * import { extract } from "@std/front-matter/yaml";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const output = `---yaml
+ * title: Three dashes marks the spot
+ * ---
+ * Hello, world!`;
+ * const result = extract(output);
+ *
+ * assertEquals(result, {
+ * frontMatter: "title: Three dashes marks the spot",
+ * body: "Hello, world!",
+ * attrs: { title: "Three dashes marks the spot" },
+ * });
+ * ```
+ *
+ * Note: If you need to pass the options to the yaml parse,
+ * use the new version of this API from `@std/yaml/unstable-yaml`.
+ *
+ * @typeParam T The type of the parsed front matter.
+ * @param text The text to extract YAML front matter from.
+ * @returns The extracted YAML front matter and body content.
+ */ export function extract(text) {
+ const { frontMatter, body } = extractFrontMatter(text, EXTRACT_YAML_REGEXP);
+ const attrs = frontMatter ? parse(frontMatter) : {};
+ return {
+ frontMatter,
+ body,
+ attrs
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L3lhbWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgZXh0cmFjdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vX3NoYXJlZC50c1wiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwianNyOkBzdGQveWFtbEBeMS4wLjUvcGFyc2VcIjtcbmltcG9ydCB0eXBlIHsgRXh0cmFjdCB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBFWFRSQUNUX1lBTUxfUkVHRVhQIH0gZnJvbSBcIi4vX2Zvcm1hdHMudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBFeHRyYWN0IH07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHBhcnNlcyB7QGxpbmsgaHR0cHM6Ly95YW1sLm9yZyB8IFlBTUx9IGZyb20gdGhlIG1ldGFkYXRhIG9mXG4gKiBmcm9udCBtYXR0ZXIgY29udGVudC5cbiAqXG4gKiBAZXhhbXBsZSBFeHRyYWN0IFlBTUwgZnJvbnQgbWF0dGVyXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZXh0cmFjdCB9IGZyb20gXCJAc3RkL2Zyb250LW1hdHRlci95YW1sXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBvdXRwdXQgPSBgLS0teWFtbFxuICogdGl0bGU6IFRocmVlIGRhc2hlcyBtYXJrcyB0aGUgc3BvdFxuICogLS0tXG4gKiBIZWxsbywgd29ybGQhYDtcbiAqIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3Qob3V0cHV0KTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMocmVzdWx0LCB7XG4gKiAgIGZyb250TWF0dGVyOiBcInRpdGxlOiBUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3RcIixcbiAqICAgYm9keTogXCJIZWxsbywgd29ybGQhXCIsXG4gKiAgIGF0dHJzOiB7IHRpdGxlOiBcIlRocmVlIGRhc2hlcyBtYXJrcyB0aGUgc3BvdFwiIH0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIG9wdGlvbnMgdG8gdGhlIHlhbWwgcGFyc2UsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgQVBJIGZyb20gYEBzdGQveWFtbC91bnN0YWJsZS15YW1sYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgVGhlIHR5cGUgb2YgdGhlIHBhcnNlZCBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBleHRyYWN0IFlBTUwgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZXh0cmFjdGVkIFlBTUwgZnJvbnQgbWF0dGVyIGFuZCBib2R5IGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0PFQ+KHRleHQ6IHN0cmluZyk6IEV4dHJhY3Q8VD4ge1xuICBjb25zdCB7IGZyb250TWF0dGVyLCBib2R5IH0gPSBleHRyYWN0RnJvbnRNYXR0ZXIodGV4dCwgRVhUUkFDVF9ZQU1MX1JFR0VYUCk7XG4gIGNvbnN0IGF0dHJzID0gKGZyb250TWF0dGVyID8gcGFyc2UoZnJvbnRNYXR0ZXIpIDoge30pIGFzIFQ7XG4gIHJldHVybiB7IGZyb250TWF0dGVyLCBib2R5LCBhdHRycyB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxrQkFBa0IsUUFBUSxlQUFlO0FBQ2xELFNBQVMsS0FBSyxRQUFRLDZCQUE2QjtBQUVuRCxTQUFTLG1CQUFtQixRQUFRLGdCQUFnQjtBQUlwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRCQyxHQUNELE9BQU8sU0FBUyxRQUFXLElBQVk7RUFDckMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxtQkFBbUIsTUFBTTtFQUN2RCxNQUFNLFFBQVMsY0FBYyxNQUFNLGVBQWUsQ0FBQztFQUNuRCxPQUFPO0lBQUU7SUFBYTtJQUFNO0VBQU07QUFDcEMifQ==
+// denoCacheMetadata=3644297134300504316,15385832643506227791 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/548a8a28c6d1bb97e6d28c99071457837531f26c0806d130d385ecb0c3f40e35.js b/vendor/gen/https/jsr.io/548a8a28c6d1bb97e6d28c99071457837531f26c0806d130d385ecb0c3f40e35.js
new file mode 100644
index 0000000..ea12649
--- /dev/null
+++ b/vendor/gen/https/jsr.io/548a8a28c6d1bb97e6d28c99071457837531f26c0806d130d385ecb0c3f40e35.js
@@ -0,0 +1,25 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+export function common(paths, sep) {
+ const [first = "", ...remaining] = paths;
+ const parts = first.split(sep);
+ let endOfPrefix = parts.length;
+ let append = "";
+ for (const path of remaining){
+ const compare = path.split(sep);
+ if (compare.length <= endOfPrefix) {
+ endOfPrefix = compare.length;
+ append = "";
+ }
+ for(let i = 0; i < endOfPrefix; i++){
+ if (compare[i] !== parts[i]) {
+ endOfPrefix = i;
+ append = i === 0 ? "" : sep;
+ break;
+ }
+ }
+ }
+ return parts.slice(0, endOfPrefix).join(sep) + append;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2NvbW1vbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uKHBhdGhzOiBzdHJpbmdbXSwgc2VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBbZmlyc3QgPSBcIlwiLCAuLi5yZW1haW5pbmddID0gcGF0aHM7XG4gIGNvbnN0IHBhcnRzID0gZmlyc3Quc3BsaXQoc2VwKTtcblxuICBsZXQgZW5kT2ZQcmVmaXggPSBwYXJ0cy5sZW5ndGg7XG4gIGxldCBhcHBlbmQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcmVtYWluaW5nKSB7XG4gICAgY29uc3QgY29tcGFyZSA9IHBhdGguc3BsaXQoc2VwKTtcbiAgICBpZiAoY29tcGFyZS5sZW5ndGggPD0gZW5kT2ZQcmVmaXgpIHtcbiAgICAgIGVuZE9mUHJlZml4ID0gY29tcGFyZS5sZW5ndGg7XG4gICAgICBhcHBlbmQgPSBcIlwiO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kT2ZQcmVmaXg7IGkrKykge1xuICAgICAgaWYgKGNvbXBhcmVbaV0gIT09IHBhcnRzW2ldKSB7XG4gICAgICAgIGVuZE9mUHJlZml4ID0gaTtcbiAgICAgICAgYXBwZW5kID0gaSA9PT0gMCA/IFwiXCIgOiBzZXA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHMuc2xpY2UoMCwgZW5kT2ZQcmVmaXgpLmpvaW4oc2VwKSArIGFwcGVuZDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLE9BQU8sU0FBUyxPQUFPLEtBQWUsRUFBRSxHQUFXO0VBQ2pELE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFVBQVUsR0FBRztFQUNuQyxNQUFNLFFBQVEsTUFBTSxLQUFLLENBQUM7RUFFMUIsSUFBSSxjQUFjLE1BQU0sTUFBTTtFQUM5QixJQUFJLFNBQVM7RUFDYixLQUFLLE1BQU0sUUFBUSxVQUFXO0lBQzVCLE1BQU0sVUFBVSxLQUFLLEtBQUssQ0FBQztJQUMzQixJQUFJLFFBQVEsTUFBTSxJQUFJLGFBQWE7TUFDakMsY0FBYyxRQUFRLE1BQU07TUFDNUIsU0FBUztJQUNYO0lBRUEsSUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLGFBQWEsSUFBSztNQUNwQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUMzQixjQUFjO1FBQ2QsU0FBUyxNQUFNLElBQUksS0FBSztRQUN4QjtNQUNGO0lBQ0Y7RUFDRjtFQUNBLE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxhQUFhLElBQUksQ0FBQyxPQUFPO0FBQ2pEIn0=
+// denoCacheMetadata=8256645066389567415,18114461622825755580 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/55ba303596e2b0b0a3440b83abf434b8919584f53f34ee5017729f4dbe5b3cea.js b/vendor/gen/https/jsr.io/55ba303596e2b0b0a3440b83abf434b8919584f53f34ee5017729f4dbe5b3cea.js
new file mode 100644
index 0000000..c5d8fb4
--- /dev/null
+++ b/vendor/gen/https/jsr.io/55ba303596e2b0b0a3440b83abf434b8919584f53f34ee5017729f4dbe5b3cea.js
@@ -0,0 +1,13 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * The character used to separate entries in the PATH environment variable.
+ */ export const DELIMITER = ":";
+/**
+ * The character used to separate components of a file path.
+ */ export const SEPARATOR = "/";
+/**
+ * A regular expression that matches one or more path separators.
+ */ export const SEPARATOR_PATTERN = /\/+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgZW50cmllcyBpbiB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFTElNSVRFUiA9IFwiOlwiIGFzIGNvbnN0O1xuLyoqXG4gKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgY29tcG9uZW50cyBvZiBhIGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUEFSQVRPUiA9IFwiL1wiIGFzIGNvbnN0O1xuLyoqXG4gKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgb25lIG9yIG1vcmUgcGF0aCBzZXBhcmF0b3JzLlxuICovXG5leHBvcnQgY29uc3QgU0VQQVJBVE9SX1BBVFRFUk4gPSAvXFwvKy87XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Q0FFQyxHQUNELE9BQU8sTUFBTSxZQUFZLElBQWE7QUFDdEM7O0NBRUMsR0FDRCxPQUFPLE1BQU0sWUFBWSxJQUFhO0FBQ3RDOztDQUVDLEdBQ0QsT0FBTyxNQUFNLG9CQUFvQixNQUFNIn0=
+// denoCacheMetadata=7692415120176802751,3856687756469946887 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/560e33636905b3f4b7797daddd2356fffc4f8a3d1a8ba29b731b198274973d20.js b/vendor/gen/https/jsr.io/560e33636905b3f4b7797daddd2356fffc4f8a3d1a8ba29b731b198274973d20.js
new file mode 100644
index 0000000..4237e15
--- /dev/null
+++ b/vendor/gen/https/jsr.io/560e33636905b3f4b7797daddd2356fffc4f8a3d1a8ba29b731b198274973d20.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { normalize } from "./normalize.ts";
+import { SEPARATOR_PATTERN } from "./constants.ts";
+/**
+ * Like normalize(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalizeGlob } from "@std/path/posix/normalize-glob";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = normalizeGlob("foo/bar/../*", { globstar: true });
+ * assertEquals(path, "foo/*");
+ * ```
+ *
+ * @param glob The glob to normalize.
+ * @param options The options to use.
+ * @returns The normalized path.
+ */ export function normalizeGlob(glob, options = {}) {
+ const { globstar = false } = options;
+ if (glob.match(/\0/g)) {
+ throw new Error(`Glob contains invalid characters: "${glob}"`);
+ }
+ if (!globstar) {
+ return normalize(glob);
+ }
+ const s = SEPARATOR_PATTERN.source;
+ const badParentPattern = new RegExp(`(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, "g");
+ return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, "..");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9ub3JtYWxpemVfZ2xvYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH0gZnJvbSBcIi4uL19jb21tb24vZ2xvYl90b19yZWdfZXhwLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tIFwiLi9ub3JtYWxpemUudHNcIjtcbmltcG9ydCB7IFNFUEFSQVRPUl9QQVRURVJOIH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfTtcblxuLyoqXG4gKiBMaWtlIG5vcm1hbGl6ZSgpLCBidXQgZG9lc24ndCBjb2xsYXBzZSBcIioqXFwvLi5cIiB3aGVuIGBnbG9ic3RhcmAgaXMgdHJ1ZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IG5vcm1hbGl6ZUdsb2IgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L25vcm1hbGl6ZS1nbG9iXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gbm9ybWFsaXplR2xvYihcImZvby9iYXIvLi4vKlwiLCB7IGdsb2JzdGFyOiB0cnVlIH0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiZm9vLypcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYiBUaGUgZ2xvYiB0byBub3JtYWxpemUuXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byB1c2UuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplR2xvYihcbiAgZ2xvYjogc3RyaW5nLFxuICBvcHRpb25zOiBQaWNrPEdsb2JPcHRpb25zLCBcImdsb2JzdGFyXCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGdsb2JzdGFyID0gZmFsc2UgfTogR2xvYk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAoZ2xvYi5tYXRjaCgvXFwwL2cpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHbG9iIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogXCIke2dsb2J9XCJgKTtcbiAgfVxuICBpZiAoIWdsb2JzdGFyKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZShnbG9iKTtcbiAgfVxuICBjb25zdCBzID0gU0VQQVJBVE9SX1BBVFRFUk4uc291cmNlO1xuICBjb25zdCBiYWRQYXJlbnRQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICBgKD88PSgke3N9fF4pXFxcXCpcXFxcKiR7c30pXFxcXC5cXFxcLig/PSR7c318JClgLFxuICAgIFwiZ1wiLFxuICApO1xuICByZXR1cm4gbm9ybWFsaXplKGdsb2IucmVwbGFjZShiYWRQYXJlbnRQYXR0ZXJuLCBcIlxcMFwiKSkucmVwbGFjZSgvXFwwL2csIFwiLi5cIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUdyQyxTQUFTLFNBQVMsUUFBUSxpQkFBaUI7QUFDM0MsU0FBUyxpQkFBaUIsUUFBUSxpQkFBaUI7QUFJbkQ7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBQ0QsT0FBTyxTQUFTLGNBQ2QsSUFBWSxFQUNaLFVBQXlDLENBQUMsQ0FBQztFQUUzQyxNQUFNLEVBQUUsV0FBVyxLQUFLLEVBQUUsR0FBZ0I7RUFDMUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRO0lBQ3JCLE1BQU0sSUFBSSxNQUFNLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDL0Q7RUFDQSxJQUFJLENBQUMsVUFBVTtJQUNiLE9BQU8sVUFBVTtFQUNuQjtFQUNBLE1BQU0sSUFBSSxrQkFBa0IsTUFBTTtFQUNsQyxNQUFNLG1CQUFtQixJQUFJLE9BQzNCLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQ3pDO0VBRUYsT0FBTyxVQUFVLEtBQUssT0FBTyxDQUFDLGtCQUFrQixPQUFPLE9BQU8sQ0FBQyxPQUFPO0FBQ3hFIn0=
+// denoCacheMetadata=16318712865581256228,12741739365736166250 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/561e93e1856f69ee9e73f3e4fe6c9a1e9006c74d8eedbcb1e83b2b69b070fb48.js b/vendor/gen/https/jsr.io/561e93e1856f69ee9e73f3e4fe6c9a1e9006c74d8eedbcb1e83b2b69b070fb48.js
new file mode 100644
index 0000000..0a9887e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/561e93e1856f69ee9e73f3e4fe6c9a1e9006c74d8eedbcb1e83b2b69b070fb48.js
@@ -0,0 +1,81 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright (c) 2014 Jameson Little. MIT License.
+// This module is browser compatible.
+/**
+ * Utilities for
+ * {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-6 | base32}
+ * encoding and decoding.
+ *
+ * Modified from {@link https://github.com/beatgammit/base64-js}.
+ *
+ * ```ts
+ * import { encodeBase32, decodeBase32 } from "@std/encoding/base32";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(encodeBase32("foobar"), "MZXW6YTBOI======");
+ *
+ * assertEquals(
+ * decodeBase32("MZXW6YTBOI======"),
+ * new TextEncoder().encode("foobar")
+ * );
+ * ```
+ *
+ * @module
+ */ import { calcSizeBase32, decode, encode } from "./_common32.ts";
+import { detach } from "./_common_detach.ts";
+const padding = "=".charCodeAt(0);
+const alphabet = new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567");
+const rAlphabet = new Uint8Array(128).fill(32); //alphabet.length
+alphabet.forEach((byte, i)=>rAlphabet[byte] = i);
+/**
+ * Converts data into a base32-encoded string.
+ *
+ * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-6}
+ *
+ * @param data The data to encode.
+ * @returns The base32-encoded string.
+ *
+ * @example Usage
+ * ```ts
+ * import { encodeBase32 } from "@std/encoding/base32";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(encodeBase32("6c60c0"), "GZRTMMDDGA======");
+ * ```
+ */ export function encodeBase32(data) {
+ if (typeof data === "string") {
+ data = new TextEncoder().encode(data);
+ } else if (data instanceof ArrayBuffer) data = new Uint8Array(data).slice();
+ else data = data.slice();
+ const [output, i] = detach(data, calcSizeBase32(data.length));
+ encode(output, i, 0, alphabet, padding);
+ return new TextDecoder().decode(output);
+}
+/**
+ * Decodes a base32-encoded string.
+ *
+ * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-6}
+ *
+ * @param b32 The base32-encoded string to decode.
+ * @returns The decoded data.
+ *
+ * @example Usage
+ * ```ts
+ * import { decodeBase32 } from "@std/encoding/base32";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(
+ * decodeBase32("GZRTMMDDGA======"),
+ * new TextEncoder().encode("6c60c0"),
+ * );
+ * ```
+ */ export function decodeBase32(b32) {
+ const output = new TextEncoder().encode(b32);
+ if (output.length % 8) {
+ throw new TypeError(`Invalid base32 string: length (${output.length}) must be a multiple of 8`);
+ }
+ // deno-lint-ignore no-explicit-any
+ return new Uint8Array(output.buffer.transfer(decode(output, 0, 0, rAlphabet, padding)));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL2Jhc2UzMi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDE0IEphbWVzb24gTGl0dGxlLiBNSVQgTGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBVdGlsaXRpZXMgZm9yXG4gKiB7QGxpbmsgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzQ2NDguaHRtbCNzZWN0aW9uLTYgfCBiYXNlMzJ9XG4gKiBlbmNvZGluZyBhbmQgZGVjb2RpbmcuXG4gKlxuICogTW9kaWZpZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzfS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZW5jb2RlQmFzZTMyLCBkZWNvZGVCYXNlMzIgfSBmcm9tIFwiQHN0ZC9lbmNvZGluZy9iYXNlMzJcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhlbmNvZGVCYXNlMzIoXCJmb29iYXJcIiksIFwiTVpYVzZZVEJPST09PT09PVwiKTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoXG4gKiAgIGRlY29kZUJhc2UzMihcIk1aWFc2WVRCT0k9PT09PT1cIiksXG4gKiAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcImZvb2JhclwiKVxuICogKTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjYWxjU2l6ZUJhc2UzMiwgZGVjb2RlLCBlbmNvZGUgfSBmcm9tIFwiLi9fY29tbW9uMzIudHNcIjtcbmltcG9ydCB7IGRldGFjaCB9IGZyb20gXCIuL19jb21tb25fZGV0YWNoLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH07XG5cbmNvbnN0IHBhZGRpbmcgPSBcIj1cIi5jaGFyQ29kZUF0KDApO1xuY29uc3QgYWxwaGFiZXQgPSBuZXcgVGV4dEVuY29kZXIoKVxuICAuZW5jb2RlKFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjdcIik7XG5jb25zdCByQWxwaGFiZXQgPSBuZXcgVWludDhBcnJheSgxMjgpLmZpbGwoMzIpOyAvL2FscGhhYmV0Lmxlbmd0aFxuYWxwaGFiZXQuZm9yRWFjaCgoYnl0ZSwgaSkgPT4gckFscGhhYmV0W2J5dGVdID0gaSk7XG5cbi8qKlxuICogQ29udmVydHMgZGF0YSBpbnRvIGEgYmFzZTMyLWVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0NjQ4Lmh0bWwjc2VjdGlvbi02fVxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGVuY29kZS5cbiAqIEByZXR1cm5zIFRoZSBiYXNlMzItZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBlbmNvZGVCYXNlMzIgfSBmcm9tIFwiQHN0ZC9lbmNvZGluZy9iYXNlMzJcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhlbmNvZGVCYXNlMzIoXCI2YzYwYzBcIiksIFwiR1pSVE1NRERHQT09PT09PVwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlQmFzZTMyKGRhdGE6IEFycmF5QnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGRhdGEgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSkgYXMgVWludDhBcnJheV87XG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSkuc2xpY2UoKTtcbiAgZWxzZSBkYXRhID0gZGF0YS5zbGljZSgpO1xuICBjb25zdCBbb3V0cHV0LCBpXSA9IGRldGFjaChcbiAgICBkYXRhIGFzIFVpbnQ4QXJyYXlfLFxuICAgIGNhbGNTaXplQmFzZTMyKChkYXRhIGFzIFVpbnQ4QXJyYXlfKS5sZW5ndGgpLFxuICApO1xuICBlbmNvZGUob3V0cHV0LCBpLCAwLCBhbHBoYWJldCwgcGFkZGluZyk7XG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUob3V0cHV0KTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgYmFzZTMyLWVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0NjQ4Lmh0bWwjc2VjdGlvbi02fVxuICpcbiAqIEBwYXJhbSBiMzIgVGhlIGJhc2UzMi1lbmNvZGVkIHN0cmluZyB0byBkZWNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBkYXRhLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZGVjb2RlQmFzZTMyIH0gZnJvbSBcIkBzdGQvZW5jb2RpbmcvYmFzZTMyXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoXG4gKiAgIGRlY29kZUJhc2UzMihcIkdaUlRNTURER0E9PT09PT1cIiksXG4gKiAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIjZjNjBjMFwiKSxcbiAqICk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUJhc2UzMihiMzI6IHN0cmluZyk6IFVpbnQ4QXJyYXlfIHtcbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGIzMikgYXMgVWludDhBcnJheV87XG4gIGlmIChvdXRwdXQubGVuZ3RoICUgOCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgSW52YWxpZCBiYXNlMzIgc3RyaW5nOiBsZW5ndGggKCR7b3V0cHV0Lmxlbmd0aH0pIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4YCxcbiAgICApO1xuICB9XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIHJldHVybiBuZXcgVWludDhBcnJheSgob3V0cHV0LmJ1ZmZlciBhcyBhbnkpXG4gICAgLnRyYW5zZmVyKGRlY29kZShvdXRwdXQsIDAsIDAsIHJBbHBoYWJldCwgcGFkZGluZykpKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FFRCxTQUFTLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLGlCQUFpQjtBQUNoRSxTQUFTLE1BQU0sUUFBUSxzQkFBc0I7QUFJN0MsTUFBTSxVQUFVLElBQUksVUFBVSxDQUFDO0FBQy9CLE1BQU0sV0FBVyxJQUFJLGNBQ2xCLE1BQU0sQ0FBQztBQUNWLE1BQU0sWUFBWSxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsS0FBSyxpQkFBaUI7QUFDakUsU0FBUyxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQU0sU0FBUyxDQUFDLEtBQUssR0FBRztBQUVoRDs7Ozs7Ozs7Ozs7Ozs7O0NBZUMsR0FDRCxPQUFPLFNBQVMsYUFBYSxJQUF1QztFQUNsRSxJQUFJLE9BQU8sU0FBUyxVQUFVO0lBQzVCLE9BQU8sSUFBSSxjQUFjLE1BQU0sQ0FBQztFQUNsQyxPQUFPLElBQUksZ0JBQWdCLGFBQWEsT0FBTyxJQUFJLFdBQVcsTUFBTSxLQUFLO09BQ3BFLE9BQU8sS0FBSyxLQUFLO0VBQ3RCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUNsQixNQUNBLGVBQWUsQUFBQyxLQUFxQixNQUFNO0VBRTdDLE9BQU8sUUFBUSxHQUFHLEdBQUcsVUFBVTtFQUMvQixPQUFPLElBQUksY0FBYyxNQUFNLENBQUM7QUFDbEM7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBQ0QsT0FBTyxTQUFTLGFBQWEsR0FBVztFQUN0QyxNQUFNLFNBQVMsSUFBSSxjQUFjLE1BQU0sQ0FBQztFQUN4QyxJQUFJLE9BQU8sTUFBTSxHQUFHLEdBQUc7SUFDckIsTUFBTSxJQUFJLFVBQ1IsQ0FBQywrQkFBK0IsRUFBRSxPQUFPLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztFQUU5RTtFQUNBLG1DQUFtQztFQUNuQyxPQUFPLElBQUksV0FBVyxBQUFDLE9BQU8sTUFBTSxDQUNqQyxRQUFRLENBQUMsT0FBTyxRQUFRLEdBQUcsR0FBRyxXQUFXO0FBQzlDIn0=
+// denoCacheMetadata=18355270542933081533,16415477618679115178 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/58252e6d286c880d8773d8a341cfe36914d2bd9c2f6ec9db90d26b95f521f5a0.js b/vendor/gen/https/jsr.io/58252e6d286c880d8773d8a341cfe36914d2bd9c2f6ec9db90d26b95f521f5a0.js
new file mode 100644
index 0000000..65510a1
--- /dev/null
+++ b/vendor/gen/https/jsr.io/58252e6d286c880d8773d8a341cfe36914d2bd9c2f6ec9db90d26b95f521f5a0.js
@@ -0,0 +1,214 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * Options for {@linkcode globToRegExp}, {@linkcode joinGlobs},
+ * {@linkcode normalizeGlob} and {@linkcode expandGlob}.
+ */ const REG_EXP_ESCAPE_CHARS = [
+ "!",
+ "$",
+ "(",
+ ")",
+ "*",
+ "+",
+ ".",
+ "=",
+ "?",
+ "[",
+ "\\",
+ "^",
+ "{",
+ "|"
+];
+const RANGE_ESCAPE_CHARS = [
+ "-",
+ "\\",
+ "]"
+];
+export function _globToRegExp(c, glob, { extended = true, globstar: globstarOption = true, // os = osType,
+caseInsensitive = false } = {}) {
+ if (glob === "") {
+ return /(?!)/;
+ }
+ // Remove trailing separators.
+ let newLength = glob.length;
+ for(; newLength > 1 && c.seps.includes(glob[newLength - 1]); newLength--);
+ glob = glob.slice(0, newLength);
+ let regExpString = "";
+ // Terminates correctly. Trust that `j` is incremented every iteration.
+ for(let j = 0; j < glob.length;){
+ let segment = "";
+ const groupStack = [];
+ let inRange = false;
+ let inEscape = false;
+ let endsWithSep = false;
+ let i = j;
+ // Terminates with `i` at the non-inclusive end of the current segment.
+ for(; i < glob.length && !c.seps.includes(glob[i]); i++){
+ if (inEscape) {
+ inEscape = false;
+ const escapeChars = inRange ? RANGE_ESCAPE_CHARS : REG_EXP_ESCAPE_CHARS;
+ segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
+ continue;
+ }
+ if (glob[i] === c.escapePrefix) {
+ inEscape = true;
+ continue;
+ }
+ if (glob[i] === "[") {
+ if (!inRange) {
+ inRange = true;
+ segment += "[";
+ if (glob[i + 1] === "!") {
+ i++;
+ segment += "^";
+ } else if (glob[i + 1] === "^") {
+ i++;
+ segment += "\\^";
+ }
+ continue;
+ } else if (glob[i + 1] === ":") {
+ let k = i + 1;
+ let value = "";
+ while(glob[k + 1] !== undefined && glob[k + 1] !== ":"){
+ value += glob[k + 1];
+ k++;
+ }
+ if (glob[k + 1] === ":" && glob[k + 2] === "]") {
+ i = k + 2;
+ if (value === "alnum") segment += "\\dA-Za-z";
+ else if (value === "alpha") segment += "A-Za-z";
+ else if (value === "ascii") segment += "\x00-\x7F";
+ else if (value === "blank") segment += "\t ";
+ else if (value === "cntrl") segment += "\x00-\x1F\x7F";
+ else if (value === "digit") segment += "\\d";
+ else if (value === "graph") segment += "\x21-\x7E";
+ else if (value === "lower") segment += "a-z";
+ else if (value === "print") segment += "\x20-\x7E";
+ else if (value === "punct") {
+ segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~";
+ } else if (value === "space") segment += "\\s\v";
+ else if (value === "upper") segment += "A-Z";
+ else if (value === "word") segment += "\\w";
+ else if (value === "xdigit") segment += "\\dA-Fa-f";
+ continue;
+ }
+ }
+ }
+ if (glob[i] === "]" && inRange) {
+ inRange = false;
+ segment += "]";
+ continue;
+ }
+ if (inRange) {
+ segment += glob[i];
+ continue;
+ }
+ if (glob[i] === ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
+ segment += ")";
+ const type = groupStack.pop();
+ if (type === "!") {
+ segment += c.wildcard;
+ } else if (type !== "@") {
+ segment += type;
+ }
+ continue;
+ }
+ if (glob[i] === "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
+ segment += "|";
+ continue;
+ }
+ if (glob[i] === "+" && extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("+");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] === "@" && extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("@");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] === "?") {
+ if (extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("?");
+ segment += "(?:";
+ } else {
+ segment += ".";
+ }
+ continue;
+ }
+ if (glob[i] === "!" && extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("!");
+ segment += "(?!";
+ continue;
+ }
+ if (glob[i] === "{") {
+ groupStack.push("BRACE");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") {
+ groupStack.pop();
+ segment += ")";
+ continue;
+ }
+ if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") {
+ segment += "|";
+ continue;
+ }
+ if (glob[i] === "*") {
+ if (extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("*");
+ segment += "(?:";
+ } else {
+ const prevChar = glob[i - 1];
+ let numStars = 1;
+ while(glob[i + 1] === "*"){
+ i++;
+ numStars++;
+ }
+ const nextChar = glob[i + 1];
+ if (globstarOption && numStars === 2 && [
+ ...c.seps,
+ undefined
+ ].includes(prevChar) && [
+ ...c.seps,
+ undefined
+ ].includes(nextChar)) {
+ segment += c.globstar;
+ endsWithSep = true;
+ } else {
+ segment += c.wildcard;
+ }
+ }
+ continue;
+ }
+ segment += REG_EXP_ESCAPE_CHARS.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
+ }
+ // Check for unclosed groups or a dangling backslash.
+ if (groupStack.length > 0 || inRange || inEscape) {
+ // Parse failure. Take all characters from this segment literally.
+ segment = "";
+ for (const c of glob.slice(j, i)){
+ segment += REG_EXP_ESCAPE_CHARS.includes(c) ? `\\${c}` : c;
+ endsWithSep = false;
+ }
+ }
+ regExpString += segment;
+ if (!endsWithSep) {
+ regExpString += i < glob.length ? c.sep : c.sepMaybe;
+ endsWithSep = true;
+ }
+ // Terminates with `i` at the start of the next segment.
+ while(c.seps.includes(glob[i]))i++;
+ j = i;
+ }
+ regExpString = `^${regExpString}$`;
+ return new RegExp(regExpString, caseInsensitive ? "i" : "");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgZ2xvYlRvUmVnRXhwfSwge0BsaW5rY29kZSBqb2luR2xvYnN9LFxuICoge0BsaW5rY29kZSBub3JtYWxpemVHbG9ifSBhbmQge0BsaW5rY29kZSBleHBhbmRHbG9ifS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iT3B0aW9ucyB7XG4gIC8qKiBFeHRlbmRlZCBnbG9iIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7dHJ1ZX1cbiAgICovXG4gIGV4dGVuZGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JzdGFyIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gICAqIElmIGZhbHNlLCBgKipgIGlzIHRyZWF0ZWQgbGlrZSBgKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgZ2xvYnN0YXI/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciBnbG9ic3RhciBzaG91bGQgYmUgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgY2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgUkVHX0VYUF9FU0NBUEVfQ0hBUlMgPSBbXG4gIFwiIVwiLFxuICBcIiRcIixcbiAgXCIoXCIsXG4gIFwiKVwiLFxuICBcIipcIixcbiAgXCIrXCIsXG4gIFwiLlwiLFxuICBcIj1cIixcbiAgXCI/XCIsXG4gIFwiW1wiLFxuICBcIlxcXFxcIixcbiAgXCJeXCIsXG4gIFwie1wiLFxuICBcInxcIixcbl0gYXMgY29uc3Q7XG5jb25zdCBSQU5HRV9FU0NBUEVfQ0hBUlMgPSBbXCItXCIsIFwiXFxcXFwiLCBcIl1cIl0gYXMgY29uc3Q7XG5cbnR5cGUgUmVnRXhwRXNjYXBlQ2hhciA9IHR5cGVvZiBSRUdfRVhQX0VTQ0FQRV9DSEFSU1tudW1iZXJdO1xudHlwZSBSYW5nZUVzY2FwZUNoYXIgPSB0eXBlb2YgUkFOR0VfRVNDQVBFX0NIQVJTW251bWJlcl07XG50eXBlIEVzY2FwZUNoYXIgPSBSZWdFeHBFc2NhcGVDaGFyIHwgUmFuZ2VFc2NhcGVDaGFyO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JDb25zdGFudHMge1xuICBzZXA6IHN0cmluZztcbiAgc2VwTWF5YmU6IHN0cmluZztcbiAgc2Vwczogc3RyaW5nW107XG4gIGdsb2JzdGFyOiBzdHJpbmc7XG4gIHdpbGRjYXJkOiBzdHJpbmc7XG4gIGVzY2FwZVByZWZpeDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dsb2JUb1JlZ0V4cChcbiAgYzogR2xvYkNvbnN0YW50cyxcbiAgZ2xvYjogc3RyaW5nLFxuICB7XG4gICAgZXh0ZW5kZWQgPSB0cnVlLFxuICAgIGdsb2JzdGFyOiBnbG9ic3Rhck9wdGlvbiA9IHRydWUsXG4gICAgLy8gb3MgPSBvc1R5cGUsXG4gICAgY2FzZUluc2Vuc2l0aXZlID0gZmFsc2UsXG4gIH06IEdsb2JPcHRpb25zID0ge30sXG4pOiBSZWdFeHAge1xuICBpZiAoZ2xvYiA9PT0gXCJcIikge1xuICAgIHJldHVybiAvKD8hKS87XG4gIH1cblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2VwYXJhdG9ycy5cbiAgbGV0IG5ld0xlbmd0aCA9IGdsb2IubGVuZ3RoO1xuICBmb3IgKDsgbmV3TGVuZ3RoID4gMSAmJiBjLnNlcHMuaW5jbHVkZXMoZ2xvYltuZXdMZW5ndGggLSAxXSEpOyBuZXdMZW5ndGgtLSk7XG4gIGdsb2IgPSBnbG9iLnNsaWNlKDAsIG5ld0xlbmd0aCk7XG5cbiAgbGV0IHJlZ0V4cFN0cmluZyA9IFwiXCI7XG5cbiAgLy8gVGVybWluYXRlcyBjb3JyZWN0bHkuIFRydXN0IHRoYXQgYGpgIGlzIGluY3JlbWVudGVkIGV2ZXJ5IGl0ZXJhdGlvbi5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iLmxlbmd0aDspIHtcbiAgICBsZXQgc2VnbWVudCA9IFwiXCI7XG4gICAgY29uc3QgZ3JvdXBTdGFjazogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgaW5SYW5nZSA9IGZhbHNlO1xuICAgIGxldCBpbkVzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBlbmRzV2l0aFNlcCA9IGZhbHNlO1xuICAgIGxldCBpID0gajtcblxuICAgIC8vIFRlcm1pbmF0ZXMgd2l0aCBgaWAgYXQgdGhlIG5vbi1pbmNsdXNpdmUgZW5kIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQuXG4gICAgZm9yICg7IGkgPCBnbG9iLmxlbmd0aCAmJiAhYy5zZXBzLmluY2x1ZGVzKGdsb2JbaV0hKTsgaSsrKSB7XG4gICAgICBpZiAoaW5Fc2NhcGUpIHtcbiAgICAgICAgaW5Fc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXNjYXBlQ2hhcnMgPSAoaW5SYW5nZVxuICAgICAgICAgID8gUkFOR0VfRVNDQVBFX0NIQVJTXG4gICAgICAgICAgOiBSRUdfRVhQX0VTQ0FQRV9DSEFSUykgYXMgdW5rbm93biBhcyBFc2NhcGVDaGFyW107XG4gICAgICAgIHNlZ21lbnQgKz0gZXNjYXBlQ2hhcnMuaW5jbHVkZXMoZ2xvYltpXSEgYXMgRXNjYXBlQ2hhcilcbiAgICAgICAgICA/IGBcXFxcJHtnbG9iW2ldfWBcbiAgICAgICAgICA6IGdsb2JbaV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PT0gYy5lc2NhcGVQcmVmaXgpIHtcbiAgICAgICAgaW5Fc2NhcGUgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwiW1wiKSB7XG4gICAgICAgIGlmICghaW5SYW5nZSkge1xuICAgICAgICAgIGluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgIHNlZ21lbnQgKz0gXCJbXCI7XG4gICAgICAgICAgaWYgKGdsb2JbaSArIDFdID09PSBcIiFcIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgc2VnbWVudCArPSBcIl5cIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGdsb2JbaSArIDFdID09PSBcIl5cIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgc2VnbWVudCArPSBcIlxcXFxeXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGdsb2JbaSArIDFdID09PSBcIjpcIikge1xuICAgICAgICAgIGxldCBrID0gaSArIDE7XG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoZ2xvYltrICsgMV0gIT09IHVuZGVmaW5lZCAmJiBnbG9iW2sgKyAxXSAhPT0gXCI6XCIpIHtcbiAgICAgICAgICAgIHZhbHVlICs9IGdsb2JbayArIDFdO1xuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZ2xvYltrICsgMV0gPT09IFwiOlwiICYmIGdsb2JbayArIDJdID09PSBcIl1cIikge1xuICAgICAgICAgICAgaSA9IGsgKyAyO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcImFsbnVtXCIpIHNlZ21lbnQgKz0gXCJcXFxcZEEtWmEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiYWxwaGFcIikgc2VnbWVudCArPSBcIkEtWmEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiYXNjaWlcIikgc2VnbWVudCArPSBcIlxceDAwLVxceDdGXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJibGFua1wiKSBzZWdtZW50ICs9IFwiXFx0IFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiY250cmxcIikgc2VnbWVudCArPSBcIlxceDAwLVxceDFGXFx4N0ZcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBcImRpZ2l0XCIpIHNlZ21lbnQgKz0gXCJcXFxcZFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiZ3JhcGhcIikgc2VnbWVudCArPSBcIlxceDIxLVxceDdFXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJsb3dlclwiKSBzZWdtZW50ICs9IFwiYS16XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJwcmludFwiKSBzZWdtZW50ICs9IFwiXFx4MjAtXFx4N0VcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBcInB1bmN0XCIpIHtcbiAgICAgICAgICAgICAgc2VnbWVudCArPSBcIiFcXFwiIyQlJicoKSorLFxcXFwtLi86Ozw9Pj9AW1xcXFxcXFxcXFxcXF1eX+KAmHt8fX5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwic3BhY2VcIikgc2VnbWVudCArPSBcIlxcXFxzXFx2XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ1cHBlclwiKSBzZWdtZW50ICs9IFwiQS1aXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ3b3JkXCIpIHNlZ21lbnQgKz0gXCJcXFxcd1wiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwieGRpZ2l0XCIpIHNlZ21lbnQgKz0gXCJcXFxcZEEtRmEtZlwiO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIl1cIiAmJiBpblJhbmdlKSB7XG4gICAgICAgIGluUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudCArPSBcIl1cIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpblJhbmdlKSB7XG4gICAgICAgIHNlZ21lbnQgKz0gZ2xvYltpXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZ2xvYltpXSA9PT0gXCIpXCIgJiYgZ3JvdXBTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSAhPT0gXCJCUkFDRVwiXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudCArPSBcIilcIjtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdyb3VwU3RhY2sucG9wKCkhO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCIhXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IGMud2lsZGNhcmQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gXCJAXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZ2xvYltpXSA9PT0gXCJ8XCIgJiYgZ3JvdXBTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSAhPT0gXCJCUkFDRVwiXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudCArPSBcInxcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIitcIiAmJiBleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PT0gXCIoXCIpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCIrXCIpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PT0gXCJAXCIgJiYgZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT09IFwiKFwiKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiQFwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwiP1wiKSB7XG4gICAgICAgIGlmIChleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiP1wiKTtcbiAgICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCArPSBcIi5cIjtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwiIVwiICYmIGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09PSBcIihcIikge1xuICAgICAgICBpKys7XG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChcIiFcIik7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIoPyFcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIntcIikge1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCJCUkFDRVwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwifVwiICYmIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSA9PT0gXCJCUkFDRVwiKSB7XG4gICAgICAgIGdyb3VwU3RhY2sucG9wKCk7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIpXCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PT0gXCIsXCIgJiYgZ3JvdXBTdGFja1tncm91cFN0YWNrLmxlbmd0aCAtIDFdID09PSBcIkJSQUNFXCIpIHtcbiAgICAgICAgc2VnbWVudCArPSBcInxcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIipcIikge1xuICAgICAgICBpZiAoZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGdyb3VwU3RhY2sucHVzaChcIipcIik7XG4gICAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHByZXZDaGFyID0gZ2xvYltpIC0gMV07XG4gICAgICAgICAgbGV0IG51bVN0YXJzID0gMTtcbiAgICAgICAgICB3aGlsZSAoZ2xvYltpICsgMV0gPT09IFwiKlwiKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBudW1TdGFycysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGdsb2JbaSArIDFdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdsb2JzdGFyT3B0aW9uICYmIG51bVN0YXJzID09PSAyICYmXG4gICAgICAgICAgICBbLi4uYy5zZXBzLCB1bmRlZmluZWRdLmluY2x1ZGVzKHByZXZDaGFyKSAmJlxuICAgICAgICAgICAgWy4uLmMuc2VwcywgdW5kZWZpbmVkXS5pbmNsdWRlcyhuZXh0Q2hhcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlZ21lbnQgKz0gYy5nbG9ic3RhcjtcbiAgICAgICAgICAgIGVuZHNXaXRoU2VwID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VnbWVudCArPSBjLndpbGRjYXJkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCArPSBSRUdfRVhQX0VTQ0FQRV9DSEFSUy5pbmNsdWRlcyhnbG9iW2ldISBhcyBSZWdFeHBFc2NhcGVDaGFyKVxuICAgICAgICA/IGBcXFxcJHtnbG9iW2ldfWBcbiAgICAgICAgOiBnbG9iW2ldO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB1bmNsb3NlZCBncm91cHMgb3IgYSBkYW5nbGluZyBiYWNrc2xhc2guXG4gICAgaWYgKGdyb3VwU3RhY2subGVuZ3RoID4gMCB8fCBpblJhbmdlIHx8IGluRXNjYXBlKSB7XG4gICAgICAvLyBQYXJzZSBmYWlsdXJlLiBUYWtlIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzZWdtZW50IGxpdGVyYWxseS5cbiAgICAgIHNlZ21lbnQgPSBcIlwiO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGdsb2Iuc2xpY2UoaiwgaSkpIHtcbiAgICAgICAgc2VnbWVudCArPSBSRUdfRVhQX0VTQ0FQRV9DSEFSUy5pbmNsdWRlcyhjIGFzIFJlZ0V4cEVzY2FwZUNoYXIpXG4gICAgICAgICAgPyBgXFxcXCR7Y31gXG4gICAgICAgICAgOiBjO1xuICAgICAgICBlbmRzV2l0aFNlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZ0V4cFN0cmluZyArPSBzZWdtZW50O1xuICAgIGlmICghZW5kc1dpdGhTZXApIHtcbiAgICAgIHJlZ0V4cFN0cmluZyArPSBpIDwgZ2xvYi5sZW5ndGggPyBjLnNlcCA6IGMuc2VwTWF5YmU7XG4gICAgICBlbmRzV2l0aFNlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVGVybWluYXRlcyB3aXRoIGBpYCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2VnbWVudC5cbiAgICB3aGlsZSAoYy5zZXBzLmluY2x1ZGVzKGdsb2JbaV0hKSkgaSsrO1xuXG4gICAgaiA9IGk7XG4gIH1cblxuICByZWdFeHBTdHJpbmcgPSBgXiR7cmVnRXhwU3RyaW5nfSRgO1xuICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeHBTdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZSA/IFwiaVwiIDogXCJcIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQzs7O0NBR0MsR0F1QkQsTUFBTSx1QkFBdUI7RUFDM0I7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNEO0FBQ0QsTUFBTSxxQkFBcUI7RUFBQztFQUFLO0VBQU07Q0FBSTtBQWUzQyxPQUFPLFNBQVMsY0FDZCxDQUFnQixFQUNoQixJQUFZLEVBQ1osRUFDRSxXQUFXLElBQUksRUFDZixVQUFVLGlCQUFpQixJQUFJLEVBQy9CLGVBQWU7QUFDZixrQkFBa0IsS0FBSyxFQUNYLEdBQUcsQ0FBQyxDQUFDO0VBRW5CLElBQUksU0FBUyxJQUFJO0lBQ2YsT0FBTztFQUNUO0VBRUEsOEJBQThCO0VBQzlCLElBQUksWUFBWSxLQUFLLE1BQU07RUFDM0IsTUFBTyxZQUFZLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBSTtFQUMvRCxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUc7RUFFckIsSUFBSSxlQUFlO0VBRW5CLHVFQUF1RTtFQUN2RSxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLEVBQUc7SUFDaEMsSUFBSSxVQUFVO0lBQ2QsTUFBTSxhQUF1QixFQUFFO0lBQy9CLElBQUksVUFBVTtJQUNkLElBQUksV0FBVztJQUNmLElBQUksY0FBYztJQUNsQixJQUFJLElBQUk7SUFFUix1RUFBdUU7SUFDdkUsTUFBTyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUksSUFBSztNQUN6RCxJQUFJLFVBQVU7UUFDWixXQUFXO1FBQ1gsTUFBTSxjQUFlLFVBQ2pCLHFCQUNBO1FBQ0osV0FBVyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUNuQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQ2QsSUFBSSxDQUFDLEVBQUU7UUFDWDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1FBQzlCLFdBQVc7UUFDWDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUs7UUFDbkIsSUFBSSxDQUFDLFNBQVM7VUFDWixVQUFVO1VBQ1YsV0FBVztVQUNYLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7WUFDdkI7WUFDQSxXQUFXO1VBQ2IsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLO1lBQzlCO1lBQ0EsV0FBVztVQUNiO1VBQ0E7UUFDRixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7VUFDOUIsSUFBSSxJQUFJLElBQUk7VUFDWixJQUFJLFFBQVE7VUFDWixNQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxhQUFhLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFLO1lBQ3ZELFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNwQjtVQUNGO1VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSztZQUM5QyxJQUFJLElBQUk7WUFDUixJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUM3QixJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsU0FBUztjQUMxQixXQUFXO1lBQ2IsT0FBTyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNwQyxJQUFJLFVBQVUsU0FBUyxXQUFXO2lCQUNsQyxJQUFJLFVBQVUsUUFBUSxXQUFXO2lCQUNqQyxJQUFJLFVBQVUsVUFBVSxXQUFXO1lBQ3hDO1VBQ0Y7UUFDRjtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sU0FBUztRQUM5QixVQUFVO1FBQ1YsV0FBVztRQUNYO01BQ0Y7TUFFQSxJQUFJLFNBQVM7UUFDWCxXQUFXLElBQUksQ0FBQyxFQUFFO1FBQ2xCO01BQ0Y7TUFFQSxJQUNFLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxXQUFXLE1BQU0sR0FBRyxLQUN2QyxVQUFVLENBQUMsV0FBVyxNQUFNLEdBQUcsRUFBRSxLQUFLLFNBQ3RDO1FBQ0EsV0FBVztRQUNYLE1BQU0sT0FBTyxXQUFXLEdBQUc7UUFDM0IsSUFBSSxTQUFTLEtBQUs7VUFDaEIsV0FBVyxFQUFFLFFBQVE7UUFDdkIsT0FBTyxJQUFJLFNBQVMsS0FBSztVQUN2QixXQUFXO1FBQ2I7UUFDQTtNQUNGO01BRUEsSUFDRSxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sV0FBVyxNQUFNLEdBQUcsS0FDdkMsVUFBVSxDQUFDLFdBQVcsTUFBTSxHQUFHLEVBQUUsS0FBSyxTQUN0QztRQUNBLFdBQVc7UUFDWDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSztRQUN0RDtRQUNBLFdBQVcsSUFBSSxDQUFDO1FBQ2hCLFdBQVc7UUFDWDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSztRQUN0RDtRQUNBLFdBQVcsSUFBSSxDQUFDO1FBQ2hCLFdBQVc7UUFDWDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUs7UUFDbkIsSUFBSSxZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLO1VBQ25DO1VBQ0EsV0FBVyxJQUFJLENBQUM7VUFDaEIsV0FBVztRQUNiLE9BQU87VUFDTCxXQUFXO1FBQ2I7UUFDQTtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSztRQUN0RDtRQUNBLFdBQVcsSUFBSSxDQUFDO1FBQ2hCLFdBQVc7UUFDWDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUs7UUFDbkIsV0FBVyxJQUFJLENBQUM7UUFDaEIsV0FBVztRQUNYO01BQ0Y7TUFFQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxVQUFVLENBQUMsV0FBVyxNQUFNLEdBQUcsRUFBRSxLQUFLLFNBQVM7UUFDcEUsV0FBVyxHQUFHO1FBQ2QsV0FBVztRQUNYO01BQ0Y7TUFFQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxVQUFVLENBQUMsV0FBVyxNQUFNLEdBQUcsRUFBRSxLQUFLLFNBQVM7UUFDcEUsV0FBVztRQUNYO01BQ0Y7TUFFQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBSztRQUNuQixJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7VUFDbkM7VUFDQSxXQUFXLElBQUksQ0FBQztVQUNoQixXQUFXO1FBQ2IsT0FBTztVQUNMLE1BQU0sV0FBVyxJQUFJLENBQUMsSUFBSSxFQUFFO1VBQzVCLElBQUksV0FBVztVQUNmLE1BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUs7WUFDMUI7WUFDQTtVQUNGO1VBQ0EsTUFBTSxXQUFXLElBQUksQ0FBQyxJQUFJLEVBQUU7VUFDNUIsSUFDRSxrQkFBa0IsYUFBYSxLQUMvQjtlQUFJLEVBQUUsSUFBSTtZQUFFO1dBQVUsQ0FBQyxRQUFRLENBQUMsYUFDaEM7ZUFBSSxFQUFFLElBQUk7WUFBRTtXQUFVLENBQUMsUUFBUSxDQUFDLFdBQ2hDO1lBQ0EsV0FBVyxFQUFFLFFBQVE7WUFDckIsY0FBYztVQUNoQixPQUFPO1lBQ0wsV0FBVyxFQUFFLFFBQVE7VUFDdkI7UUFDRjtRQUNBO01BQ0Y7TUFFQSxXQUFXLHFCQUFxQixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFDNUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUNkLElBQUksQ0FBQyxFQUFFO0lBQ2I7SUFFQSxxREFBcUQ7SUFDckQsSUFBSSxXQUFXLE1BQU0sR0FBRyxLQUFLLFdBQVcsVUFBVTtNQUNoRCxrRUFBa0U7TUFDbEUsVUFBVTtNQUNWLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsR0FBSTtRQUNoQyxXQUFXLHFCQUFxQixRQUFRLENBQUMsS0FDckMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUNSO1FBQ0osY0FBYztNQUNoQjtJQUNGO0lBRUEsZ0JBQWdCO0lBQ2hCLElBQUksQ0FBQyxhQUFhO01BQ2hCLGdCQUFnQixJQUFJLEtBQUssTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUTtNQUNwRCxjQUFjO0lBQ2hCO0lBRUEsd0RBQXdEO0lBQ3hELE1BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUk7SUFFbEMsSUFBSTtFQUNOO0VBRUEsZUFBZSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztFQUNsQyxPQUFPLElBQUksT0FBTyxjQUFjLGtCQUFrQixNQUFNO0FBQzFEIn0=
+// denoCacheMetadata=6957165210549219853,16413184510828082162 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/590dc3cc72c9f412bf0525f9de88ed9fe5165a6288da3c007a9b5f2c74b438f4.js b/vendor/gen/https/jsr.io/590dc3cc72c9f412bf0525f9de88ed9fe5165a6288da3c007a9b5f2c74b438f4.js
new file mode 100644
index 0000000..81f7078
--- /dev/null
+++ b/vendor/gen/https/jsr.io/590dc3cc72c9f412bf0525f9de88ed9fe5165a6288da3c007a9b5f2c74b438f4.js
@@ -0,0 +1,31 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { relative as posixRelative } from "./posix/relative.ts";
+import { relative as windowsRelative } from "./windows/relative.ts";
+/**
+ * Return the relative path from `from` to `to` based on current working
+ * directory.
+ *
+ * @example Usage
+ * ```ts
+ * import { relative } from "@std/path/relative";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const path = relative("C:\\foobar\\test\\aaa", "C:\\foobar\\impl\\bbb");
+ * assertEquals(path, "..\\..\\impl\\bbb");
+ * } else {
+ * const path = relative("/data/foobar/test/aaa", "/data/foobar/impl/bbb");
+ * assertEquals(path, "../../impl/bbb");
+ * }
+ * ```
+ *
+ * @param from Path in current working directory.
+ * @param to Path in current working directory.
+ * @returns The relative path from `from` to `to`.
+ */ export function relative(from, to) {
+ return isWindows ? windowsRelative(from, to) : posixRelative(from, to);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9yZWxhdGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IHJlbGF0aXZlIGFzIHBvc2l4UmVsYXRpdmUgfSBmcm9tIFwiLi9wb3NpeC9yZWxhdGl2ZS50c1wiO1xuaW1wb3J0IHsgcmVsYXRpdmUgYXMgd2luZG93c1JlbGF0aXZlIH0gZnJvbSBcIi4vd2luZG93cy9yZWxhdGl2ZS50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIGBmcm9tYCB0byBgdG9gIGJhc2VkIG9uIGN1cnJlbnQgd29ya2luZ1xuICogZGlyZWN0b3J5LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3JlbGF0aXZlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgY29uc3QgcGF0aCA9IHJlbGF0aXZlKFwiQzpcXFxcZm9vYmFyXFxcXHRlc3RcXFxcYWFhXCIsIFwiQzpcXFxcZm9vYmFyXFxcXGltcGxcXFxcYmJiXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aCwgXCIuLlxcXFwuLlxcXFxpbXBsXFxcXGJiYlwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnN0IHBhdGggPSByZWxhdGl2ZShcIi9kYXRhL2Zvb2Jhci90ZXN0L2FhYVwiLCBcIi9kYXRhL2Zvb2Jhci9pbXBsL2JiYlwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgsIFwiLi4vLi4vaW1wbC9iYmJcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZnJvbSBQYXRoIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdG8gUGF0aCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpc1dpbmRvd3MgPyB3aW5kb3dzUmVsYXRpdmUoZnJvbSwgdG8pIDogcG9zaXhSZWxhdGl2ZShmcm9tLCB0byk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsWUFBWSxhQUFhLFFBQVEsc0JBQXNCO0FBQ2hFLFNBQVMsWUFBWSxlQUFlLFFBQVEsd0JBQXdCO0FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQkMsR0FDRCxPQUFPLFNBQVMsU0FBUyxJQUFZLEVBQUUsRUFBVTtFQUMvQyxPQUFPLFlBQVksZ0JBQWdCLE1BQU0sTUFBTSxjQUFjLE1BQU07QUFDckUifQ==
+// denoCacheMetadata=4943766333112962144,3510761696935998279 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/59b15946e5c41739f041facf257e61065ca2e759fa92c8dc627590b8ad366543.js b/vendor/gen/https/jsr.io/59b15946e5c41739f041facf257e61065ca2e759fa92c8dc627590b8ad366543.js
new file mode 100644
index 0000000..e9489ad
--- /dev/null
+++ b/vendor/gen/https/jsr.io/59b15946e5c41739f041facf257e61065ca2e759fa92c8dc627590b8ad366543.js
@@ -0,0 +1,104 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/dirname.ts";
+import { CHAR_COLON } from "../_common/constants.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPathSeparator, isPosixPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return the directory path of a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { dirname } from "@std/path/windows/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const dir = dirname("C:\\foo\\bar\\baz.ext");
+ * assertEquals(dir, "C:\\foo\\bar");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `dirname` from `@std/path/windows/unstable-dirname`.
+ *
+ * @param path The path to get the directory from.
+ * @returns The directory path.
+ */ export function dirname(path) {
+ assertArg(path);
+ const len = path.length;
+ let rootEnd = -1;
+ let end = -1;
+ let matchedSlash = true;
+ let offset = 0;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ rootEnd = offset = 1;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ return path;
+ }
+ if (j !== last) {
+ // We matched a UNC root with leftovers
+ // Offset by 1 to include the separator after the UNC root to
+ // treat it as a "normal root" on top of a (UNC) root
+ rootEnd = offset = j + 1;
+ }
+ }
+ }
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ rootEnd = offset = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3;
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid
+ // unnecessary work
+ return path;
+ }
+ for(let i = len - 1; i >= offset; --i){
+ if (isPathSeparator(path.charCodeAt(i))) {
+ if (!matchedSlash) {
+ end = i;
+ break;
+ }
+ } else {
+ // We saw the first non-path separator
+ matchedSlash = false;
+ }
+ }
+ if (end === -1) {
+ if (rootEnd === -1) return ".";
+ else end = rootEnd;
+ }
+ return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2Rpcm5hbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vZGlybmFtZS50c1wiO1xuaW1wb3J0IHsgQ0hBUl9DT0xPTiB9IGZyb20gXCIuLi9fY29tbW9uL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHsgc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9zdHJpcF90cmFpbGluZ19zZXBhcmF0b3JzLnRzXCI7XG5pbXBvcnQge1xuICBpc1BhdGhTZXBhcmF0b3IsXG4gIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICBpc1dpbmRvd3NEZXZpY2VSb290LFxufSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgZGlyZWN0b3J5IHBhdGggb2YgYSBgcGF0aGAuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2Rpcm5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGRpciA9IGRpcm5hbWUoXCJDOlxcXFxmb29cXFxcYmFyXFxcXGJhei5leHRcIik7XG4gKiBhc3NlcnRFcXVhbHMoZGlyLCBcIkM6XFxcXGZvb1xcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBkaXJuYW1lYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1kaXJuYW1lYC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIGRpcmVjdG9yeSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRpcmVjdG9yeSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlybmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRBcmcocGF0aCk7XG5cbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGxldCByb290RW5kID0gLTE7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gb2Zmc2V0ID0gMTtcblxuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMSkpKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgIGxldCBsYXN0ID0gajtcbiAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgIC8vIE9mZnNldCBieSAxIHRvIGluY2x1ZGUgdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgVU5DIHJvb3QgdG9cbiAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgYXMgYSBcIm5vcm1hbCByb290XCIgb24gdG9wIG9mIGEgKFVOQykgcm9vdFxuICAgICAgICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcm9vdEVuZCA9IG9mZnNldCA9IDM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IG9mZnNldDsgLS1pKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSB7XG4gICAgaWYgKHJvb3RFbmQgPT09IC0xKSByZXR1cm4gXCIuXCI7XG4gICAgZWxzZSBlbmQgPSByb290RW5kO1xuICB9XG4gIHJldHVybiBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyhwYXRoLnNsaWNlKDAsIGVuZCksIGlzUG9zaXhQYXRoU2VwYXJhdG9yKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLHdCQUF3QjtBQUNsRCxTQUFTLFVBQVUsUUFBUSwwQkFBMEI7QUFDckQsU0FBUyx1QkFBdUIsUUFBUSwwQ0FBMEM7QUFDbEYsU0FDRSxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLG1CQUFtQixRQUNkLGFBQWE7QUFFcEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBQ0QsT0FBTyxTQUFTLFFBQVEsSUFBWTtFQUNsQyxVQUFVO0VBRVYsTUFBTSxNQUFNLEtBQUssTUFBTTtFQUN2QixJQUFJLFVBQVUsQ0FBQztFQUNmLElBQUksTUFBTSxDQUFDO0VBQ1gsSUFBSSxlQUFlO0VBQ25CLElBQUksU0FBUztFQUNiLE1BQU0sT0FBTyxLQUFLLFVBQVUsQ0FBQztFQUU3QixzQkFBc0I7RUFDdEIsSUFBSSxNQUFNLEdBQUc7SUFDWCxJQUFJLGdCQUFnQixPQUFPO01BQ3pCLG9CQUFvQjtNQUVwQixVQUFVLFNBQVM7TUFFbkIsSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLENBQUMsS0FBSztRQUN2Qyw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJO1FBQ1IsSUFBSSxPQUFPO1FBQ1gsc0NBQXNDO1FBQ3RDLE1BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRztVQUNuQixJQUFJLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxLQUFLO1FBQzNDO1FBQ0EsSUFBSSxJQUFJLE9BQU8sTUFBTSxNQUFNO1VBQ3pCLFdBQVc7VUFDWCxPQUFPO1VBQ1Asa0NBQWtDO1VBQ2xDLE1BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRztZQUNuQixJQUFJLENBQUMsZ0JBQWdCLEtBQUssVUFBVSxDQUFDLEtBQUs7VUFDNUM7VUFDQSxJQUFJLElBQUksT0FBTyxNQUFNLE1BQU07WUFDekIsV0FBVztZQUNYLE9BQU87WUFDUCxzQ0FBc0M7WUFDdEMsTUFBTyxJQUFJLEtBQUssRUFBRSxFQUFHO2NBQ25CLElBQUksZ0JBQWdCLEtBQUssVUFBVSxDQUFDLEtBQUs7WUFDM0M7WUFDQSxJQUFJLE1BQU0sS0FBSztjQUNiLDZCQUE2QjtjQUM3QixPQUFPO1lBQ1Q7WUFDQSxJQUFJLE1BQU0sTUFBTTtjQUNkLHVDQUF1QztjQUV2Qyw2REFBNkQ7Y0FDN0QscURBQXFEO2NBQ3JELFVBQVUsU0FBUyxJQUFJO1lBQ3pCO1VBQ0Y7UUFDRjtNQUNGO0lBQ0YsT0FBTyxJQUFJLG9CQUFvQixPQUFPO01BQ3BDLHVCQUF1QjtNQUV2QixJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sWUFBWTtRQUNyQyxVQUFVLFNBQVM7UUFDbkIsSUFBSSxNQUFNLEdBQUc7VUFDWCxJQUFJLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxLQUFLLFVBQVUsU0FBUztRQUM5RDtNQUNGO0lBQ0Y7RUFDRixPQUFPLElBQUksZ0JBQWdCLE9BQU87SUFDaEMsNkRBQTZEO0lBQzdELG1CQUFtQjtJQUNuQixPQUFPO0VBQ1Q7RUFFQSxJQUFLLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxRQUFRLEVBQUUsRUFBRztJQUN0QyxJQUFJLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxLQUFLO01BQ3ZDLElBQUksQ0FBQyxjQUFjO1FBQ2pCLE1BQU07UUFDTjtNQUNGO0lBQ0YsT0FBTztNQUNMLHNDQUFzQztNQUN0QyxlQUFlO0lBQ2pCO0VBQ0Y7RUFFQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0lBQ2QsSUFBSSxZQUFZLENBQUMsR0FBRyxPQUFPO1NBQ3RCLE1BQU07RUFDYjtFQUNBLE9BQU8sd0JBQXdCLEtBQUssS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUNyRCJ9
+// denoCacheMetadata=17668655450337548276,6950762780350019021 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5a2b3f7cda9dc10babd5c467f85a5ee73f994a8548762b861ed441397aade522.js b/vendor/gen/https/jsr.io/5a2b3f7cda9dc10babd5c467f85a5ee73f994a8548762b861ed441397aade522.js
new file mode 100644
index 0000000..d9d8e6f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5a2b3f7cda9dc10babd5c467f85a5ee73f994a8548762b861ed441397aade522.js
@@ -0,0 +1,7 @@
+// deno-lint-ignore-file no-explicit-any
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+// Check Deno, then the remaining runtimes (e.g. Node, Bun and the browser)
+export const isWindows = globalThis.Deno?.build.os === "windows" || globalThis.navigator?.platform?.startsWith("Win") || globalThis.process?.platform?.startsWith("win") || false;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZGVuby1saW50LWlnbm9yZS1maWxlIG5vLWV4cGxpY2l0LWFueVxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLy8gQ2hlY2sgRGVubywgdGhlbiB0aGUgcmVtYWluaW5nIHJ1bnRpbWVzIChlLmcuIE5vZGUsIEJ1biBhbmQgdGhlIGJyb3dzZXIpXG5leHBvcnQgY29uc3QgaXNXaW5kb3dzOiBib29sZWFuID1cbiAgKGdsb2JhbFRoaXMgYXMgYW55KS5EZW5vPy5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIgfHxcbiAgKGdsb2JhbFRoaXMgYXMgYW55KS5uYXZpZ2F0b3I/LnBsYXRmb3JtPy5zdGFydHNXaXRoKFwiV2luXCIpIHx8XG4gIChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2Vzcz8ucGxhdGZvcm0/LnN0YXJ0c1dpdGgoXCJ3aW5cIikgfHxcbiAgZmFsc2U7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsMkVBQTJFO0FBQzNFLE9BQU8sTUFBTSxZQUNYLEFBQUMsV0FBbUIsSUFBSSxFQUFFLE1BQU0sT0FBTyxhQUN2QyxBQUFDLFdBQW1CLFNBQVMsRUFBRSxVQUFVLFdBQVcsVUFDcEQsQUFBQyxXQUFtQixPQUFPLEVBQUUsVUFBVSxXQUFXLFVBQ2xELE1BQU0ifQ==
+// denoCacheMetadata=942429766422638421,9245551528494870799 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5a3e5143598daa6b6fbe4264ac06f15b7ca7553501fbd415da1cc427f2b370f2.js b/vendor/gen/https/jsr.io/5a3e5143598daa6b6fbe4264ac06f15b7ca7553501fbd415da1cc427f2b370f2.js
new file mode 100644
index 0000000..1d61188
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5a3e5143598daa6b6fbe4264ac06f15b7ca7553501fbd415da1cc427f2b370f2.js
@@ -0,0 +1,50 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArgs, lastPathSegment, stripSuffix } from "../_common/basename.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return the last portion of a `path`.
+ * Trailing directory separators are ignored, and optional suffix is removed.
+ *
+ * @example Usage
+ * ```ts
+ * import { basename } from "@std/path/posix/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(basename("/home/user/Documents/"), "Documents");
+ * assertEquals(basename("/home/user/Documents/image.png"), "image.png");
+ * assertEquals(basename("/home/user/Documents/image.png", ".png"), "image");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * Note: This function doesn't automatically strip hash and query parts from
+ * URLs. If your URL contains a hash or query, remove them before passing the
+ * URL to the function. This can be done by passing the URL to `new URL(url)`,
+ * and setting the `hash` and `search` properties to empty strings.
+ *
+ * ```ts
+ * import { basename } from "@std/path/posix/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(basename("https://deno.land/std/path/mod.ts"), "mod.ts");
+ * assertEquals(basename("https://deno.land/std/path/mod.ts", ".ts"), "mod");
+ * assertEquals(basename("https://deno.land/std/path/mod.ts?a=b"), "mod.ts?a=b");
+ * assertEquals(basename("https://deno.land/std/path/mod.ts#header"), "mod.ts#header");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `basename` from `@std/path/posix/unstable-basename`.
+ *
+ * @param path The path to extract the name from.
+ * @param suffix The suffix to remove from extracted name.
+ * @returns The extracted name.
+ */ export function basename(path, suffix = "") {
+ assertArgs(path, suffix);
+ const lastSegment = lastPathSegment(path, isPosixPathSeparator);
+ const strippedSegment = stripTrailingSeparators(lastSegment, isPosixPathSeparator);
+ return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9iYXNlbmFtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQge1xuICBhc3NlcnRBcmdzLFxuICBsYXN0UGF0aFNlZ21lbnQsXG4gIHN0cmlwU3VmZml4LFxufSBmcm9tIFwiLi4vX2NvbW1vbi9iYXNlbmFtZS50c1wiO1xuaW1wb3J0IHsgc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9zdHJpcF90cmFpbGluZ19zZXBhcmF0b3JzLnRzXCI7XG5pbXBvcnQgeyBpc1Bvc2l4UGF0aFNlcGFyYXRvciB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuXG4gKiBUcmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgaWdub3JlZCwgYW5kIG9wdGlvbmFsIHN1ZmZpeCBpcyByZW1vdmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Jhc2VuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9cIiksIFwiRG9jdW1lbnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiL2hvbWUvdXNlci9Eb2N1bWVudHMvaW1hZ2UucG5nXCIpLCBcImltYWdlLnBuZ1wiKTtcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL2ltYWdlLnBuZ1wiLCBcIi5wbmdcIiksIFwiaW1hZ2VcIik7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXb3JraW5nIHdpdGggVVJMc1xuICpcbiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBhdXRvbWF0aWNhbGx5IHN0cmlwIGhhc2ggYW5kIHF1ZXJ5IHBhcnRzIGZyb21cbiAqIFVSTHMuIElmIHlvdXIgVVJMIGNvbnRhaW5zIGEgaGFzaCBvciBxdWVyeSwgcmVtb3ZlIHRoZW0gYmVmb3JlIHBhc3NpbmcgdGhlXG4gKiBVUkwgdG8gdGhlIGZ1bmN0aW9uLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIFVSTCB0byBgbmV3IFVSTCh1cmwpYCxcbiAqIGFuZCBzZXR0aW5nIHRoZSBgaGFzaGAgYW5kIGBzZWFyY2hgIHByb3BlcnRpZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Jhc2VuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHNcIiksIFwibW9kLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL3BhdGgvbW9kLnRzXCIsIFwiLnRzXCIpLCBcIm1vZFwiKTtcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50cz9hPWJcIiksIFwibW9kLnRzP2E9YlwiKTtcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50cyNoZWFkZXJcIiksIFwibW9kLnRzI2hlYWRlclwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGJhc2VuYW1lYCBmcm9tIGBAc3RkL3BhdGgvcG9zaXgvdW5zdGFibGUtYmFzZW5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGV4dHJhY3QgdGhlIG5hbWUgZnJvbS5cbiAqIEBwYXJhbSBzdWZmaXggVGhlIHN1ZmZpeCB0byByZW1vdmUgZnJvbSBleHRyYWN0ZWQgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBleHRyYWN0ZWQgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2VuYW1lKHBhdGg6IHN0cmluZywgc3VmZml4ID0gXCJcIik6IHN0cmluZyB7XG4gIGFzc2VydEFyZ3MocGF0aCwgc3VmZml4KTtcblxuICBjb25zdCBsYXN0U2VnbWVudCA9IGxhc3RQYXRoU2VnbWVudChwYXRoLCBpc1Bvc2l4UGF0aFNlcGFyYXRvcik7XG4gIGNvbnN0IHN0cmlwcGVkU2VnbWVudCA9IHN0cmlwVHJhaWxpbmdTZXBhcmF0b3JzKFxuICAgIGxhc3RTZWdtZW50LFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xuICByZXR1cm4gc3VmZml4ID8gc3RyaXBTdWZmaXgoc3RyaXBwZWRTZWdtZW50LCBzdWZmaXgpIDogc3RyaXBwZWRTZWdtZW50O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FDRSxVQUFVLEVBQ1YsZUFBZSxFQUNmLFdBQVcsUUFDTix5QkFBeUI7QUFDaEMsU0FBUyx1QkFBdUIsUUFBUSwwQ0FBMEM7QUFDbEYsU0FBUyxvQkFBb0IsUUFBUSxhQUFhO0FBRWxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUNDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsSUFBWSxFQUFFLFNBQVMsRUFBRTtFQUNoRCxXQUFXLE1BQU07RUFFakIsTUFBTSxjQUFjLGdCQUFnQixNQUFNO0VBQzFDLE1BQU0sa0JBQWtCLHdCQUN0QixhQUNBO0VBRUYsT0FBTyxTQUFTLFlBQVksaUJBQWlCLFVBQVU7QUFDekQifQ==
+// denoCacheMetadata=2145197038781110742,6023720020292018312 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5aaf5a8124be57046a016c9b1a7e3d9ba20e9b3865f259c932999ea7636b6e00.js b/vendor/gen/https/jsr.io/5aaf5a8124be57046a016c9b1a7e3d9ba20e9b3865f259c932999ea7636b6e00.js
new file mode 100644
index 0000000..df5fc42
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5aaf5a8124be57046a016c9b1a7e3d9ba20e9b3865f259c932999ea7636b6e00.js
@@ -0,0 +1,152 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { dirname } from "jsr:@std/path@^1.0.9/dirname";
+import { resolve } from "jsr:@std/path@^1.0.9/resolve";
+import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
+import { getFileInfoType } from "./_get_file_info_type.ts";
+import { toPathString } from "./_to_path_string.ts";
+// deno-lint-ignore no-explicit-any
+const isWindows = globalThis.Deno?.build.os === "windows";
+function resolveSymlinkTarget(target, linkName) {
+ if (typeof target !== "string") return target; // URL is always absolute path
+ if (typeof linkName === "string") {
+ return resolve(dirname(linkName), target);
+ } else {
+ return new URL(target, linkName);
+ }
+}
+function getSymlinkOption(type) {
+ return isWindows ? {
+ type: type === "dir" ? "dir" : "file"
+ } : undefined;
+}
+/**
+ * Asynchronously ensures that the link exists, and points to a valid file.
+ *
+ * If the parent directories for the link do not exist, they are created. If the
+ * link already exists, and it is not modified, this function does nothing. If
+ * the link already exists, and it does not point to the given target, an error
+ * is thrown.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param target The source file path as a string or URL. If it is a relative path string, it have to be relative to the link path.
+ * @param linkName The destination link path as a string or URL.
+ *
+ * @returns A void promise that resolves once the link exists.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { ensureSymlink } from "@std/fs/ensure-symlink";
+ *
+ * // Ensures the link `./targetFile.link.dat` exists and points to `./targetFile.dat`
+ * await ensureSymlink("./targetFile.dat", "./targetFile.link.dat");
+ * ```
+ *
+ * @example Ensuring a link in a folder
+ * ```ts ignore
+ * import { ensureSymlink } from "@std/fs/ensure-symlink";
+ *
+ * // Ensures the link `./folder/targetFile.link.dat` exists and points to `./folder/targetFile.dat`
+ * await ensureSymlink("./targetFile.dat", "./folder/targetFile.link.dat");
+ * ```
+ */ export async function ensureSymlink(target, linkName) {
+ const targetRealPath = resolveSymlinkTarget(target, linkName);
+ let srcStatInfo;
+ try {
+ srcStatInfo = await Deno.lstat(targetRealPath);
+ } catch (error) {
+ if (error instanceof Deno.errors.NotFound) {
+ throw new Deno.errors.NotFound(`Cannot ensure symlink as the target path does not exist: ${targetRealPath}`);
+ }
+ throw error;
+ }
+ const srcFilePathType = getFileInfoType(srcStatInfo);
+ await ensureDir(dirname(toPathString(linkName)));
+ const options = getSymlinkOption(srcFilePathType);
+ try {
+ await Deno.symlink(target, linkName, options);
+ } catch (error) {
+ if (!(error instanceof Deno.errors.AlreadyExists)) {
+ throw error;
+ }
+ const linkStatInfo = await Deno.lstat(linkName);
+ if (!linkStatInfo.isSymlink) {
+ const type = getFileInfoType(linkStatInfo);
+ throw new Deno.errors.AlreadyExists(`A '${type}' already exists at the path: ${linkName}`);
+ }
+ const linkPath = await Deno.readLink(linkName);
+ const linkRealPath = resolve(linkPath);
+ if (linkRealPath !== targetRealPath) {
+ throw new Deno.errors.AlreadyExists(`A symlink targeting to an undesired path already exists: ${linkName} -> ${linkRealPath}`);
+ }
+ }
+}
+/**
+ * Synchronously ensures that the link exists, and points to a valid file.
+ *
+ * If the parent directories for the link do not exist, they are created. If the
+ * link already exists, and it is not modified, this function does nothing. If
+ * the link already exists, and it does not point to the given target, an error
+ * is thrown.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param target The source file path as a string or URL. If it is a relative path string, it have to be relative to the link path.
+ * @param linkName The destination link path as a string or URL.
+ * @returns A void value that returns once the link exists.
+ *
+ * @example Basic usage
+ * ```ts ignore
+ * import { ensureSymlinkSync } from "@std/fs/ensure-symlink";
+ *
+ * // Ensures the link `./targetFile.link.dat` exists and points to `./targetFile.dat`
+ * ensureSymlinkSync("./targetFile.dat", "./targetFile.link.dat");
+ * ```
+ *
+ * @example Ensuring a link in a folder
+ * ```ts ignore
+ * import { ensureSymlinkSync } from "@std/fs/ensure-symlink";
+ *
+ * // Ensures the link `./folder/targetFile.link.dat` exists and points to `./folder/targetFile.dat`
+ * ensureSymlinkSync("./targetFile.dat", "./folder/targetFile.link.dat");
+ * ```
+ */ export function ensureSymlinkSync(target, linkName) {
+ const targetRealPath = resolveSymlinkTarget(target, linkName);
+ let srcStatInfo;
+ try {
+ srcStatInfo = Deno.lstatSync(targetRealPath);
+ } catch (error) {
+ if (error instanceof Deno.errors.NotFound) {
+ throw new Deno.errors.NotFound(`Cannot ensure symlink as the target path does not exist: ${targetRealPath}`);
+ }
+ throw error;
+ }
+ const srcFilePathType = getFileInfoType(srcStatInfo);
+ ensureDirSync(dirname(toPathString(linkName)));
+ const options = getSymlinkOption(srcFilePathType);
+ try {
+ Deno.symlinkSync(target, linkName, options);
+ } catch (error) {
+ if (!(error instanceof Deno.errors.AlreadyExists)) {
+ throw error;
+ }
+ const linkStatInfo = Deno.lstatSync(linkName);
+ if (!linkStatInfo.isSymlink) {
+ const type = getFileInfoType(linkStatInfo);
+ throw new Deno.errors.AlreadyExists(`A '${type}' already exists at the path: ${linkName}`);
+ }
+ const linkPath = Deno.readLinkSync(linkName);
+ const linkRealPath = resolve(linkPath);
+ if (linkRealPath !== targetRealPath) {
+ throw new Deno.errors.AlreadyExists(`A symlink targeting to an undesired path already exists: ${linkName} -> ${linkRealPath}`);
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2Vuc3VyZV9zeW1saW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC45L2Rpcm5hbWVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvcmVzb2x2ZVwiO1xuaW1wb3J0IHsgZW5zdXJlRGlyLCBlbnN1cmVEaXJTeW5jIH0gZnJvbSBcIi4vZW5zdXJlX2Rpci50c1wiO1xuaW1wb3J0IHsgZ2V0RmlsZUluZm9UeXBlLCB0eXBlIFBhdGhUeXBlIH0gZnJvbSBcIi4vX2dldF9maWxlX2luZm9fdHlwZS50c1wiO1xuaW1wb3J0IHsgdG9QYXRoU3RyaW5nIH0gZnJvbSBcIi4vX3RvX3BhdGhfc3RyaW5nLnRzXCI7XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5jb25zdCBpc1dpbmRvd3MgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLkRlbm8/LmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZVN5bWxpbmtUYXJnZXQodGFyZ2V0OiBzdHJpbmcgfCBVUkwsIGxpbmtOYW1lOiBzdHJpbmcgfCBVUkwpIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXQgIT09IFwic3RyaW5nXCIpIHJldHVybiB0YXJnZXQ7IC8vIFVSTCBpcyBhbHdheXMgYWJzb2x1dGUgcGF0aFxuICBpZiAodHlwZW9mIGxpbmtOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHJlc29sdmUoZGlybmFtZShsaW5rTmFtZSksIHRhcmdldCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBVUkwodGFyZ2V0LCBsaW5rTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3ltbGlua09wdGlvbihcbiAgdHlwZTogUGF0aFR5cGUgfCB1bmRlZmluZWQsXG4pOiBEZW5vLlN5bWxpbmtPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHsgdHlwZTogdHlwZSA9PT0gXCJkaXJcIiA/IFwiZGlyXCIgOiBcImZpbGVcIiB9IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IGVuc3VyZXMgdGhhdCB0aGUgbGluayBleGlzdHMsIGFuZCBwb2ludHMgdG8gYSB2YWxpZCBmaWxlLlxuICpcbiAqIElmIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgZm9yIHRoZSBsaW5rIGRvIG5vdCBleGlzdCwgdGhleSBhcmUgY3JlYXRlZC4gSWYgdGhlXG4gKiBsaW5rIGFscmVhZHkgZXhpc3RzLCBhbmQgaXQgaXMgbm90IG1vZGlmaWVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gSWZcbiAqIHRoZSBsaW5rIGFscmVhZHkgZXhpc3RzLCBhbmQgaXQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIGdpdmVuIHRhcmdldCwgYW4gZXJyb3JcbiAqIGlzIHRocm93bi5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctd3JpdGVgIHBlcm1pc3Npb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kZW5vLmNvbS9ydW50aW1lL21hbnVhbC9iYXNpY3MvcGVybWlzc2lvbnMjZmlsZS1zeXN0ZW0tYWNjZXNzfVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVubydzIHBlcm1pc3Npb25zIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBzb3VyY2UgZmlsZSBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC4gSWYgaXQgaXMgYSByZWxhdGl2ZSBwYXRoIHN0cmluZywgaXQgaGF2ZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgbGluayBwYXRoLlxuICogQHBhcmFtIGxpbmtOYW1lIFRoZSBkZXN0aW5hdGlvbiBsaW5rIHBhdGggYXMgYSBzdHJpbmcgb3IgVVJMLlxuICpcbiAqIEByZXR1cm5zIEEgdm9pZCBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgbGluayBleGlzdHMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZW5zdXJlU3ltbGluayB9IGZyb20gXCJAc3RkL2ZzL2Vuc3VyZS1zeW1saW5rXCI7XG4gKlxuICogLy8gRW5zdXJlcyB0aGUgbGluayBgLi90YXJnZXRGaWxlLmxpbmsuZGF0YCBleGlzdHMgYW5kIHBvaW50cyB0byBgLi90YXJnZXRGaWxlLmRhdGBcbiAqIGF3YWl0IGVuc3VyZVN5bWxpbmsoXCIuL3RhcmdldEZpbGUuZGF0XCIsIFwiLi90YXJnZXRGaWxlLmxpbmsuZGF0XCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRW5zdXJpbmcgYSBsaW5rIGluIGEgZm9sZGVyXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGVuc3VyZVN5bWxpbmsgfSBmcm9tIFwiQHN0ZC9mcy9lbnN1cmUtc3ltbGlua1wiO1xuICpcbiAqIC8vIEVuc3VyZXMgdGhlIGxpbmsgYC4vZm9sZGVyL3RhcmdldEZpbGUubGluay5kYXRgIGV4aXN0cyBhbmQgcG9pbnRzIHRvIGAuL2ZvbGRlci90YXJnZXRGaWxlLmRhdGBcbiAqIGF3YWl0IGVuc3VyZVN5bWxpbmsoXCIuL3RhcmdldEZpbGUuZGF0XCIsIFwiLi9mb2xkZXIvdGFyZ2V0RmlsZS5saW5rLmRhdFwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU3ltbGluayhcbiAgdGFyZ2V0OiBzdHJpbmcgfCBVUkwsXG4gIGxpbmtOYW1lOiBzdHJpbmcgfCBVUkwsXG4pIHtcbiAgY29uc3QgdGFyZ2V0UmVhbFBhdGggPSByZXNvbHZlU3ltbGlua1RhcmdldCh0YXJnZXQsIGxpbmtOYW1lKTtcbiAgbGV0IHNyY1N0YXRJbmZvO1xuICB0cnkge1xuICAgIHNyY1N0YXRJbmZvID0gYXdhaXQgRGVuby5sc3RhdCh0YXJnZXRSZWFsUGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBEZW5vLmVycm9ycy5Ob3RGb3VuZChcbiAgICAgICAgYENhbm5vdCBlbnN1cmUgc3ltbGluayBhcyB0aGUgdGFyZ2V0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dGFyZ2V0UmVhbFBhdGh9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGNvbnN0IHNyY0ZpbGVQYXRoVHlwZSA9IGdldEZpbGVJbmZvVHlwZShzcmNTdGF0SW5mbyk7XG5cbiAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUodG9QYXRoU3RyaW5nKGxpbmtOYW1lKSkpO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRTeW1saW5rT3B0aW9uKHNyY0ZpbGVQYXRoVHlwZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBEZW5vLnN5bWxpbmsodGFyZ2V0LCBsaW5rTmFtZSwgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BbHJlYWR5RXhpc3RzKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IGxpbmtTdGF0SW5mbyA9IGF3YWl0IERlbm8ubHN0YXQobGlua05hbWUpO1xuICAgIGlmICghbGlua1N0YXRJbmZvLmlzU3ltbGluaykge1xuICAgICAgY29uc3QgdHlwZSA9IGdldEZpbGVJbmZvVHlwZShsaW5rU3RhdEluZm8pO1xuICAgICAgdGhyb3cgbmV3IERlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHMoXG4gICAgICAgIGBBICcke3R5cGV9JyBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcGF0aDogJHtsaW5rTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbGlua1BhdGggPSBhd2FpdCBEZW5vLnJlYWRMaW5rKGxpbmtOYW1lKTtcbiAgICBjb25zdCBsaW5rUmVhbFBhdGggPSByZXNvbHZlKGxpbmtQYXRoKTtcbiAgICBpZiAobGlua1JlYWxQYXRoICE9PSB0YXJnZXRSZWFsUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IERlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHMoXG4gICAgICAgIGBBIHN5bWxpbmsgdGFyZ2V0aW5nIHRvIGFuIHVuZGVzaXJlZCBwYXRoIGFscmVhZHkgZXhpc3RzOiAke2xpbmtOYW1lfSAtPiAke2xpbmtSZWFsUGF0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IGVuc3VyZXMgdGhhdCB0aGUgbGluayBleGlzdHMsIGFuZCBwb2ludHMgdG8gYSB2YWxpZCBmaWxlLlxuICpcbiAqIElmIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgZm9yIHRoZSBsaW5rIGRvIG5vdCBleGlzdCwgdGhleSBhcmUgY3JlYXRlZC4gSWYgdGhlXG4gKiBsaW5rIGFscmVhZHkgZXhpc3RzLCBhbmQgaXQgaXMgbm90IG1vZGlmaWVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gSWZcbiAqIHRoZSBsaW5rIGFscmVhZHkgZXhpc3RzLCBhbmQgaXQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIGdpdmVuIHRhcmdldCwgYW4gZXJyb3JcbiAqIGlzIHRocm93bi5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctd3JpdGVgIHBlcm1pc3Npb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kZW5vLmNvbS9ydW50aW1lL21hbnVhbC9iYXNpY3MvcGVybWlzc2lvbnMjZmlsZS1zeXN0ZW0tYWNjZXNzfVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVubydzIHBlcm1pc3Npb25zIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBzb3VyY2UgZmlsZSBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC4gSWYgaXQgaXMgYSByZWxhdGl2ZSBwYXRoIHN0cmluZywgaXQgaGF2ZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgbGluayBwYXRoLlxuICogQHBhcmFtIGxpbmtOYW1lIFRoZSBkZXN0aW5hdGlvbiBsaW5rIHBhdGggYXMgYSBzdHJpbmcgb3IgVVJMLlxuICogQHJldHVybnMgQSB2b2lkIHZhbHVlIHRoYXQgcmV0dXJucyBvbmNlIHRoZSBsaW5rIGV4aXN0cy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBlbnN1cmVTeW1saW5rU3luYyB9IGZyb20gXCJAc3RkL2ZzL2Vuc3VyZS1zeW1saW5rXCI7XG4gKlxuICogLy8gRW5zdXJlcyB0aGUgbGluayBgLi90YXJnZXRGaWxlLmxpbmsuZGF0YCBleGlzdHMgYW5kIHBvaW50cyB0byBgLi90YXJnZXRGaWxlLmRhdGBcbiAqIGVuc3VyZVN5bWxpbmtTeW5jKFwiLi90YXJnZXRGaWxlLmRhdFwiLCBcIi4vdGFyZ2V0RmlsZS5saW5rLmRhdFwiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEVuc3VyaW5nIGEgbGluayBpbiBhIGZvbGRlclxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBlbnN1cmVTeW1saW5rU3luYyB9IGZyb20gXCJAc3RkL2ZzL2Vuc3VyZS1zeW1saW5rXCI7XG4gKlxuICogLy8gRW5zdXJlcyB0aGUgbGluayBgLi9mb2xkZXIvdGFyZ2V0RmlsZS5saW5rLmRhdGAgZXhpc3RzIGFuZCBwb2ludHMgdG8gYC4vZm9sZGVyL3RhcmdldEZpbGUuZGF0YFxuICogZW5zdXJlU3ltbGlua1N5bmMoXCIuL3RhcmdldEZpbGUuZGF0XCIsIFwiLi9mb2xkZXIvdGFyZ2V0RmlsZS5saW5rLmRhdFwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3ltbGlua1N5bmMoXG4gIHRhcmdldDogc3RyaW5nIHwgVVJMLFxuICBsaW5rTmFtZTogc3RyaW5nIHwgVVJMLFxuKSB7XG4gIGNvbnN0IHRhcmdldFJlYWxQYXRoID0gcmVzb2x2ZVN5bWxpbmtUYXJnZXQodGFyZ2V0LCBsaW5rTmFtZSk7XG4gIGxldCBzcmNTdGF0SW5mbztcbiAgdHJ5IHtcbiAgICBzcmNTdGF0SW5mbyA9IERlbm8ubHN0YXRTeW5jKHRhcmdldFJlYWxQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkge1xuICAgICAgdGhyb3cgbmV3IERlbm8uZXJyb3JzLk5vdEZvdW5kKFxuICAgICAgICBgQ2Fubm90IGVuc3VyZSBzeW1saW5rIGFzIHRoZSB0YXJnZXQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHt0YXJnZXRSZWFsUGF0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgY29uc3Qgc3JjRmlsZVBhdGhUeXBlID0gZ2V0RmlsZUluZm9UeXBlKHNyY1N0YXRJbmZvKTtcblxuICBlbnN1cmVEaXJTeW5jKGRpcm5hbWUodG9QYXRoU3RyaW5nKGxpbmtOYW1lKSkpO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRTeW1saW5rT3B0aW9uKHNyY0ZpbGVQYXRoVHlwZSk7XG5cbiAgdHJ5IHtcbiAgICBEZW5vLnN5bWxpbmtTeW5jKHRhcmdldCwgbGlua05hbWUsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWxyZWFkeUV4aXN0cykpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBsaW5rU3RhdEluZm8gPSBEZW5vLmxzdGF0U3luYyhsaW5rTmFtZSk7XG4gICAgaWYgKCFsaW5rU3RhdEluZm8uaXNTeW1saW5rKSB7XG4gICAgICBjb25zdCB0eXBlID0gZ2V0RmlsZUluZm9UeXBlKGxpbmtTdGF0SW5mbyk7XG4gICAgICB0aHJvdyBuZXcgRGVuby5lcnJvcnMuQWxyZWFkeUV4aXN0cyhcbiAgICAgICAgYEEgJyR7dHlwZX0nIGFscmVhZHkgZXhpc3RzIGF0IHRoZSBwYXRoOiAke2xpbmtOYW1lfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBsaW5rUGF0aCA9IERlbm8ucmVhZExpbmtTeW5jKGxpbmtOYW1lKTtcbiAgICBjb25zdCBsaW5rUmVhbFBhdGggPSByZXNvbHZlKGxpbmtQYXRoKTtcbiAgICBpZiAobGlua1JlYWxQYXRoICE9PSB0YXJnZXRSZWFsUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IERlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHMoXG4gICAgICAgIGBBIHN5bWxpbmsgdGFyZ2V0aW5nIHRvIGFuIHVuZGVzaXJlZCBwYXRoIGFscmVhZHkgZXhpc3RzOiAke2xpbmtOYW1lfSAtPiAke2xpbmtSZWFsUGF0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsU0FBUyxPQUFPLFFBQVEsK0JBQStCO0FBQ3ZELFNBQVMsT0FBTyxRQUFRLCtCQUErQjtBQUN2RCxTQUFTLFNBQVMsRUFBRSxhQUFhLFFBQVEsa0JBQWtCO0FBQzNELFNBQVMsZUFBZSxRQUF1QiwyQkFBMkI7QUFDMUUsU0FBUyxZQUFZLFFBQVEsdUJBQXVCO0FBRXBELG1DQUFtQztBQUNuQyxNQUFNLFlBQVksQUFBQyxXQUFtQixJQUFJLEVBQUUsTUFBTSxPQUFPO0FBRXpELFNBQVMscUJBQXFCLE1BQW9CLEVBQUUsUUFBc0I7RUFDeEUsSUFBSSxPQUFPLFdBQVcsVUFBVSxPQUFPLFFBQVEsOEJBQThCO0VBQzdFLElBQUksT0FBTyxhQUFhLFVBQVU7SUFDaEMsT0FBTyxRQUFRLFFBQVEsV0FBVztFQUNwQyxPQUFPO0lBQ0wsT0FBTyxJQUFJLElBQUksUUFBUTtFQUN6QjtBQUNGO0FBRUEsU0FBUyxpQkFDUCxJQUEwQjtFQUUxQixPQUFPLFlBQVk7SUFBRSxNQUFNLFNBQVMs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
+// denoCacheMetadata=1273745982400005058,10168868461436950531 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5ad0b729bff518ae7b1d0e1b7df87fb6b9211646cf1b700f51bed24d18c41962.js b/vendor/gen/https/jsr.io/5ad0b729bff518ae7b1d0e1b7df87fb6b9211646cf1b700f51bed24d18c41962.js
new file mode 100644
index 0000000..46c6eeb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5ad0b729bff518ae7b1d0e1b7df87fb6b9211646cf1b700f51bed24d18c41962.js
@@ -0,0 +1,129 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright (c) Jason Campbell. MIT license
+// This module is browser compatible.
+/**
+ * Extracts
+ * {@link https://daily-dev-tips.com/posts/what-exactly-is-frontmatter/ | front matter}
+ * from strings. Adapted from
+ * {@link https://github.com/jxson/front-matter/blob/36f139ef797bd9e5196a9ede03ef481d7fbca18e/index.js | jxson/front-matter}.
+ *
+ * ## Supported formats
+ *
+ * ### JSON
+ *
+ * ```ts
+ * import { test, extractJson } from "@std/front-matter";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const str = "---json\n{\"and\": \"this\"}\n---\ndeno is awesome";
+ *
+ * assertEquals(test(str), true);
+ * assertEquals(extractJson(str), {
+ * frontMatter: "{\"and\": \"this\"}",
+ * body: "deno is awesome",
+ * attrs: { and: "this" }
+ * });
+ * ```
+ *
+ * {@linkcode extractJson | extract} and {@linkcode test} support the following
+ * delimiters.
+ *
+ * ```markdown
+ * ---json
+ * {
+ * "and": "this"
+ * }
+ * ---
+ * ```
+ *
+ * ```markdown
+ * {
+ * "is": "JSON"
+ * }
+ * ```
+ *
+ * ### TOML
+ *
+ * ```ts
+ * import { test, extractToml } from "@std/front-matter";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const str = "---toml\nmodule = 'front_matter'\n---\ndeno is awesome";
+ *
+ * assertEquals(test(str), true);
+ * assertEquals(extractToml(str), {
+ * frontMatter: "module = 'front_matter'",
+ * body: "deno is awesome",
+ * attrs: { module: "front_matter" }
+ * });
+ * ```
+ *
+ * {@linkcode extractToml | extract} and {@linkcode test} support the following
+ * delimiters.
+ *
+ * ```markdown
+ * ---toml
+ * this = 'is'
+ * ---
+ * ```
+ *
+ * ```markdown
+ * = toml =
+ * parsed = 'as'
+ * toml = 'data'
+ * = toml =
+ * ```
+ *
+ * ```markdown
+ * +++
+ * is = 'that'
+ * not = 'cool?'
+ * +++
+ * ```
+ *
+ * ### YAML
+ *
+ * ```ts
+ * import { test, extractYaml } from "@std/front-matter";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const str = "---yaml\nmodule: front_matter\n---\ndeno is awesome";
+ *
+ * assertEquals(test(str), true);
+ * assertEquals(extractYaml(str), {
+ * frontMatter: "module: front_matter",
+ * body: "deno is awesome",
+ * attrs: { module: "front_matter" }
+ * });
+ * ```
+ *
+ * {@linkcode extractYaml | extract} and {@linkcode test} support the following
+ * delimiters.
+ *
+ * ```front_matter
+ * ---
+ * these: are
+ * ---
+ * ```
+ *
+ * ```markdown
+ * ---yaml
+ * all: recognized
+ * ---
+ * ```
+ *
+ * ```markdown
+ * = yaml =
+ * as: yaml
+ * = yaml =
+ * ```
+ *
+ * @module
+ */ import { extract as extractJson } from "./json.ts";
+import { extract as extractToml } from "./toml.ts";
+import { extract as extractYaml } from "./yaml.ts";
+export * from "./test.ts";
+export * from "./types.ts";
+export { extractJson, extractToml, extractYaml };
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSBKYXNvbiBDYW1wYmVsbC4gTUlUIGxpY2Vuc2Vcbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBFeHRyYWN0c1xuICoge0BsaW5rIGh0dHBzOi8vZGFpbHktZGV2LXRpcHMuY29tL3Bvc3RzL3doYXQtZXhhY3RseS1pcy1mcm9udG1hdHRlci8gfCBmcm9udCBtYXR0ZXJ9XG4gKiBmcm9tIHN0cmluZ3MuIEFkYXB0ZWQgZnJvbVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9qeHNvbi9mcm9udC1tYXR0ZXIvYmxvYi8zNmYxMzllZjc5N2JkOWU1MTk2YTllZGUwM2VmNDgxZDdmYmNhMThlL2luZGV4LmpzIHwganhzb24vZnJvbnQtbWF0dGVyfS5cbiAqXG4gKiAjIyBTdXBwb3J0ZWQgZm9ybWF0c1xuICpcbiAqICMjIyBKU09OXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRlc3QsIGV4dHJhY3RKc29uIH0gZnJvbSBcIkBzdGQvZnJvbnQtbWF0dGVyXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBzdHIgPSBcIi0tLWpzb25cXG57XFxcImFuZFxcXCI6IFxcXCJ0aGlzXFxcIn1cXG4tLS1cXG5kZW5vIGlzIGF3ZXNvbWVcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHModGVzdChzdHIpLCB0cnVlKTtcbiAqIGFzc2VydEVxdWFscyhleHRyYWN0SnNvbihzdHIpLCB7XG4gKiAgIGZyb250TWF0dGVyOiBcIntcXFwiYW5kXFxcIjogXFxcInRoaXNcXFwifVwiLFxuICogICBib2R5OiBcImRlbm8gaXMgYXdlc29tZVwiLFxuICogICBhdHRyczogeyBhbmQ6IFwidGhpc1wiIH1cbiAqIH0pO1xuICogYGBgXG4gKlxuICoge0BsaW5rY29kZSBleHRyYWN0SnNvbiB8IGV4dHJhY3R9IGFuZCB7QGxpbmtjb2RlIHRlc3R9IHN1cHBvcnQgdGhlIGZvbGxvd2luZ1xuICogZGVsaW1pdGVycy5cbiAqXG4gKiBgYGBtYXJrZG93blxuICogLS0tanNvblxuICoge1xuICogICBcImFuZFwiOiBcInRoaXNcIlxuICogfVxuICogLS0tXG4gKiBgYGBcbiAqXG4gKiBgYGBtYXJrZG93blxuICoge1xuICogICBcImlzXCI6IFwiSlNPTlwiXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgVE9NTFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0ZXN0LCBleHRyYWN0VG9tbCB9IGZyb20gXCJAc3RkL2Zyb250LW1hdHRlclwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc3RyID0gXCItLS10b21sXFxubW9kdWxlID0gJ2Zyb250X21hdHRlcidcXG4tLS1cXG5kZW5vIGlzIGF3ZXNvbWVcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHModGVzdChzdHIpLCB0cnVlKTtcbiAqIGFzc2VydEVxdWFscyhleHRyYWN0VG9tbChzdHIpLCB7XG4gKiAgIGZyb250TWF0dGVyOiBcIm1vZHVsZSA9ICdmcm9udF9tYXR0ZXInXCIsXG4gKiAgIGJvZHk6IFwiZGVubyBpcyBhd2Vzb21lXCIsXG4gKiAgIGF0dHJzOiB7IG1vZHVsZTogXCJmcm9udF9tYXR0ZXJcIiB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIHtAbGlua2NvZGUgZXh0cmFjdFRvbWwgfCBleHRyYWN0fSBhbmQge0BsaW5rY29kZSB0ZXN0fSBzdXBwb3J0IHRoZSBmb2xsb3dpbmdcbiAqIGRlbGltaXRlcnMuXG4gKlxuICogYGBgbWFya2Rvd25cbiAqIC0tLXRvbWxcbiAqIHRoaXMgPSAnaXMnXG4gKiAtLS1cbiAqIGBgYFxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA9IHRvbWwgPVxuICogcGFyc2VkID0gJ2FzJ1xuICogdG9tbCA9ICdkYXRhJ1xuICogPSB0b21sID1cbiAqIGBgYFxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiArKytcbiAqIGlzID0gJ3RoYXQnXG4gKiBub3QgPSAnY29vbD8nXG4gKiArKytcbiAqIGBgYFxuICpcbiAqICMjIyBZQU1MXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRlc3QsIGV4dHJhY3RZYW1sIH0gZnJvbSBcIkBzdGQvZnJvbnQtbWF0dGVyXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBzdHIgPSBcIi0tLXlhbWxcXG5tb2R1bGU6IGZyb250X21hdHRlclxcbi0tLVxcbmRlbm8gaXMgYXdlc29tZVwiO1xuICpcbiAqIGFzc2VydEVxdWFscyh0ZXN0KHN0ciksIHRydWUpO1xuICogYXNzZXJ0RXF1YWxzKGV4dHJhY3RZYW1sKHN0ciksIHtcbiAqICAgZnJvbnRNYXR0ZXI6IFwibW9kdWxlOiBmcm9udF9tYXR0ZXJcIixcbiAqICAgYm9keTogXCJkZW5vIGlzIGF3ZXNvbWVcIixcbiAqICAgYXR0cnM6IHsgbW9kdWxlOiBcImZyb250X21hdHRlclwiIH1cbiAqIH0pO1xuICogYGBgXG4gKlxuICoge0BsaW5rY29kZSBleHRyYWN0WWFtbCB8IGV4dHJhY3R9IGFuZCB7QGxpbmtjb2RlIHRlc3R9IHN1cHBvcnQgdGhlIGZvbGxvd2luZ1xuICogZGVsaW1pdGVycy5cbiAqXG4gKiBgYGBmcm9udF9tYXR0ZXJcbiAqIC0tLVxuICogdGhlc2U6IGFyZVxuICogLS0tXG4gKiBgYGBcbiAqXG4gKiBgYGBtYXJrZG93blxuICogLS0teWFtbFxuICogYWxsOiByZWNvZ25pemVkXG4gKiAtLS1cbiAqIGBgYFxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA9IHlhbWwgPVxuICogYXM6IHlhbWxcbiAqID0geWFtbCA9XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGV4dHJhY3QgYXMgZXh0cmFjdEpzb24gfSBmcm9tIFwiLi9qc29uLnRzXCI7XG5pbXBvcnQgeyBleHRyYWN0IGFzIGV4dHJhY3RUb21sIH0gZnJvbSBcIi4vdG9tbC50c1wiO1xuaW1wb3J0IHsgZXh0cmFjdCBhcyBleHRyYWN0WWFtbCB9IGZyb20gXCIuL3lhbWwudHNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vdGVzdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuZXhwb3J0IHsgZXh0cmFjdEpzb24sIGV4dHJhY3RUb21sLCBleHRyYWN0WWFtbCB9O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCw0Q0FBNEM7QUFDNUMscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0hDLEdBQ0QsU0FBUyxXQUFXLFdBQVcsUUFBUSxZQUFZO0FBQ25ELFNBQVMsV0FBVyxXQUFXLFFBQVEsWUFBWTtBQUNuRCxTQUFTLFdBQVcsV0FBVyxRQUFRLFlBQVk7QUFFbkQsY0FBYyxZQUFZO0FBQzFCLGNBQWMsYUFBYTtBQUUzQixTQUFTLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxHQUFHIn0=
+// denoCacheMetadata=10868004174874085482,12088208579340012596 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5b2ed25f336e15fc393d4e34f9694d457ece3821100c6200e4261af96dd1f320.js b/vendor/gen/https/jsr.io/5b2ed25f336e15fc393d4e34f9694d457ece3821100c6200e4261af96dd1f320.js
new file mode 100644
index 0000000..b26f662
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5b2ed25f336e15fc393d4e34f9694d457ece3821100c6200e4261af96dd1f320.js
@@ -0,0 +1,64 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Returns the index of the last occurrence of the needle array in the source
+ * array, or -1 if it is not present.
+ *
+ * The complexity of this function is `O(source.length * needle.length)`.
+ *
+ * @param source Source array to check.
+ * @param needle Needle array to check for.
+ * @param start Start index in the source array to begin the search. Defaults to
+ * `source.length - 1`.
+ * @returns Index of the last occurrence of the needle array in the source
+ * array, or -1 if it is not present.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { lastIndexOfNeedle } from "@std/bytes/last-index-of-needle";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const needle = new Uint8Array([1, 2]);
+ * const notNeedle = new Uint8Array([5, 0]);
+ *
+ * assertEquals(lastIndexOfNeedle(source, needle), 5);
+ * assertEquals(lastIndexOfNeedle(source, notNeedle), -1);
+ * ```
+ *
+ * @example Start index
+ * ```ts
+ * import { lastIndexOfNeedle } from "@std/bytes/last-index-of-needle";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const needle = new Uint8Array([1, 2]);
+ *
+ * assertEquals(lastIndexOfNeedle(source, needle, 2), 1);
+ * assertEquals(lastIndexOfNeedle(source, needle, 6), 5);
+ * ```
+ * Defining a start index will begin the search at the specified index in the
+ * source array.
+ */ export function lastIndexOfNeedle(source, needle, start = source.length - 1) {
+ if (start < 0) {
+ return -1;
+ }
+ if (start >= source.length) {
+ start = source.length - 1;
+ }
+ const e = needle[needle.length - 1];
+ for(let i = start; i >= 0; i--){
+ if (source[i] !== e) continue;
+ let matched = 1;
+ let j = i;
+ while(matched < needle.length && source[--j] === needle[needle.length - 1 - (i - j)]){
+ matched++;
+ }
+ if (matched === needle.length) {
+ return i - needle.length + 1;
+ }
+ }
+ return -1;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvbGFzdF9pbmRleF9vZl9uZWVkbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBuZWVkbGUgYXJyYXkgaW4gdGhlIHNvdXJjZVxuICogYXJyYXksIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LlxuICpcbiAqIFRoZSBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgYE8oc291cmNlLmxlbmd0aCAqIG5lZWRsZS5sZW5ndGgpYC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFNvdXJjZSBhcnJheSB0byBjaGVjay5cbiAqIEBwYXJhbSBuZWVkbGUgTmVlZGxlIGFycmF5IHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSBzdGFydCBTdGFydCBpbmRleCBpbiB0aGUgc291cmNlIGFycmF5IHRvIGJlZ2luIHRoZSBzZWFyY2guIERlZmF1bHRzIHRvXG4gKiBgc291cmNlLmxlbmd0aCAtIDFgLlxuICogQHJldHVybnMgSW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgbmVlZGxlIGFycmF5IGluIHRoZSBzb3VyY2VcbiAqIGFycmF5LCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGxhc3RJbmRleE9mTmVlZGxlIH0gZnJvbSBcIkBzdGQvYnl0ZXMvbGFzdC1pbmRleC1vZi1uZWVkbGVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAxLCAyLCAxLCAyLCAzXSk7XG4gKiBjb25zdCBuZWVkbGUgPSBuZXcgVWludDhBcnJheShbMSwgMl0pO1xuICogY29uc3Qgbm90TmVlZGxlID0gbmV3IFVpbnQ4QXJyYXkoWzUsIDBdKTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMobGFzdEluZGV4T2ZOZWVkbGUoc291cmNlLCBuZWVkbGUpLCA1KTtcbiAqIGFzc2VydEVxdWFscyhsYXN0SW5kZXhPZk5lZWRsZShzb3VyY2UsIG5vdE5lZWRsZSksIC0xKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFN0YXJ0IGluZGV4XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbGFzdEluZGV4T2ZOZWVkbGUgfSBmcm9tIFwiQHN0ZC9ieXRlcy9sYXN0LWluZGV4LW9mLW5lZWRsZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IG5lZWRsZSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGxhc3RJbmRleE9mTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCAyKSwgMSk7XG4gKiBhc3NlcnRFcXVhbHMobGFzdEluZGV4T2ZOZWVkbGUoc291cmNlLCBuZWVkbGUsIDYpLCA1KTtcbiAqIGBgYFxuICogRGVmaW5pbmcgYSBzdGFydCBpbmRleCB3aWxsIGJlZ2luIHRoZSBzZWFyY2ggYXQgdGhlIHNwZWNpZmllZCBpbmRleCBpbiB0aGVcbiAqIHNvdXJjZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3RJbmRleE9mTmVlZGxlKFxuICBzb3VyY2U6IFVpbnQ4QXJyYXksXG4gIG5lZWRsZTogVWludDhBcnJheSxcbiAgc3RhcnQ6IG51bWJlciA9IHNvdXJjZS5sZW5ndGggLSAxLFxuKTogbnVtYmVyIHtcbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoc3RhcnQgPj0gc291cmNlLmxlbmd0aCkge1xuICAgIHN0YXJ0ID0gc291cmNlLmxlbmd0aCAtIDE7XG4gIH1cbiAgY29uc3QgZSA9IG5lZWRsZVtuZWVkbGUubGVuZ3RoIC0gMV07XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoc291cmNlW2ldICE9PSBlKSBjb250aW51ZTtcbiAgICBsZXQgbWF0Y2hlZCA9IDE7XG4gICAgbGV0IGogPSBpO1xuICAgIHdoaWxlIChcbiAgICAgIG1hdGNoZWQgPCBuZWVkbGUubGVuZ3RoICYmXG4gICAgICBzb3VyY2VbLS1qXSA9PT0gbmVlZGxlW25lZWRsZS5sZW5ndGggLSAxIC0gKGkgLSBqKV1cbiAgICApIHtcbiAgICAgIG1hdGNoZWQrKztcbiAgICB9XG4gICAgaWYgKG1hdGNoZWQgPT09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBpIC0gbmVlZGxlLmxlbmd0aCArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q0MsR0FDRCxPQUFPLFNBQVMsa0JBQ2QsTUFBa0IsRUFDbEIsTUFBa0IsRUFDbEIsUUFBZ0IsT0FBTyxNQUFNLEdBQUcsQ0FBQztFQUVqQyxJQUFJLFFBQVEsR0FBRztJQUNiLE9BQU8sQ0FBQztFQUNWO0VBQ0EsSUFBSSxTQUFTLE9BQU8sTUFBTSxFQUFFO0lBQzFCLFFBQVEsT0FBTyxNQUFNLEdBQUc7RUFDMUI7RUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sTUFBTSxHQUFHLEVBQUU7RUFDbkMsSUFBSyxJQUFJLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSztJQUMvQixJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRztJQUNyQixJQUFJLFVBQVU7SUFDZCxJQUFJLElBQUk7SUFDUixNQUNFLFVBQVUsT0FBTyxNQUFNLElBQ3ZCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxNQUFNLENBQUMsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ25EO01BQ0E7SUFDRjtJQUNBLElBQUksWUFBWSxPQUFPLE1BQU0sRUFBRTtNQUM3QixPQUFPLElBQUksT0FBTyxNQUFNLEdBQUc7SUFDN0I7RUFDRjtFQUNBLE9BQU8sQ0FBQztBQUNWIn0=
+// denoCacheMetadata=4931381517954871612,1911009538987697348 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5c777cdacb2b2650a97900385ce3cdd687aba4f7e98960ce3f524ad23becf40c.js b/vendor/gen/https/jsr.io/5c777cdacb2b2650a97900385ce3cdd687aba4f7e98960ce3f524ad23becf40c.js
new file mode 100644
index 0000000..7ae5ab3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5c777cdacb2b2650a97900385ce3cdd687aba4f7e98960ce3f524ad23becf40c.js
@@ -0,0 +1,28 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { toNamespacedPath as posixToNamespacedPath } from "./posix/to_namespaced_path.ts";
+import { toNamespacedPath as windowsToNamespacedPath } from "./windows/to_namespaced_path.ts";
+/**
+ * Resolves path to a namespace path. This is a no-op on
+ * non-windows systems.
+ *
+ * @example Usage
+ * ```ts
+ * import { toNamespacedPath } from "@std/path/to-namespaced-path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(toNamespacedPath("C:\\foo\\bar"), "\\\\?\\C:\\foo\\bar");
+ * } else {
+ * assertEquals(toNamespacedPath("/foo/bar"), "/foo/bar");
+ * }
+ * ```
+ *
+ * @param path Path to resolve to namespace.
+ * @returns The resolved namespace path.
+ */ export function toNamespacedPath(path) {
+ return isWindows ? windowsToNamespacedPath(path) : posixToNamespacedPath(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS90b19uYW1lc3BhY2VkX3BhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyB0b05hbWVzcGFjZWRQYXRoIGFzIHBvc2l4VG9OYW1lc3BhY2VkUGF0aCB9IGZyb20gXCIuL3Bvc2l4L3RvX25hbWVzcGFjZWRfcGF0aC50c1wiO1xuaW1wb3J0IHsgdG9OYW1lc3BhY2VkUGF0aCBhcyB3aW5kb3dzVG9OYW1lc3BhY2VkUGF0aCB9IGZyb20gXCIuL3dpbmRvd3MvdG9fbmFtZXNwYWNlZF9wYXRoLnRzXCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgcGF0aCB0byBhIG5hbWVzcGFjZSBwYXRoLiAgVGhpcyBpcyBhIG5vLW9wIG9uXG4gKiBub24td2luZG93cyBzeXN0ZW1zLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdG9OYW1lc3BhY2VkUGF0aCB9IGZyb20gXCJAc3RkL3BhdGgvdG8tbmFtZXNwYWNlZC1wYXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHRvTmFtZXNwYWNlZFBhdGgoXCJDOlxcXFxmb29cXFxcYmFyXCIpLCBcIlxcXFxcXFxcP1xcXFxDOlxcXFxmb29cXFxcYmFyXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHRvTmFtZXNwYWNlZFBhdGgoXCIvZm9vL2JhclwiKSwgXCIvZm9vL2JhclwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gcmVzb2x2ZSB0byBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgbmFtZXNwYWNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpc1dpbmRvd3NcbiAgICA/IHdpbmRvd3NUb05hbWVzcGFjZWRQYXRoKHBhdGgpXG4gICAgOiBwb3NpeFRvTmFtZXNwYWNlZFBhdGgocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsb0JBQW9CLHFCQUFxQixRQUFRLGdDQUFnQztBQUMxRixTQUFTLG9CQUFvQix1QkFBdUIsUUFBUSxrQ0FBa0M7QUFFOUY7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUNELE9BQU8sU0FBUyxpQkFBaUIsSUFBWTtFQUMzQyxPQUFPLFlBQ0gsd0JBQXdCLFFBQ3hCLHNCQUFzQjtBQUM1QiJ9
+// denoCacheMetadata=14948196027882635086,13869330107584423005 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5da4665762c15cd959e16747dc6dcd6acdab04f5b2c4fc2b40c6f81faa998e84.js b/vendor/gen/https/jsr.io/5da4665762c15cd959e16747dc6dcd6acdab04f5b2c4fc2b40c6f81faa998e84.js
new file mode 100644
index 0000000..159e62a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5da4665762c15cd959e16747dc6dcd6acdab04f5b2c4fc2b40c6f81faa998e84.js
@@ -0,0 +1,48 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+// Alphabet chars.
+export const CHAR_UPPERCASE_A = 65; /* A */
+export const CHAR_LOWERCASE_A = 97; /* a */
+export const CHAR_UPPERCASE_Z = 90; /* Z */
+export const CHAR_LOWERCASE_Z = 122; /* z */
+// Non-alphabetic chars.
+export const CHAR_DOT = 46; /* . */
+export const CHAR_FORWARD_SLASH = 47; /* / */
+export const CHAR_BACKWARD_SLASH = 92; /* \ */
+export const CHAR_VERTICAL_LINE = 124; /* | */
+export const CHAR_COLON = 58; /* : */
+export const CHAR_QUESTION_MARK = 63; /* ? */
+export const CHAR_UNDERSCORE = 95; /* _ */
+export const CHAR_LINE_FEED = 10; /* \n */
+export const CHAR_CARRIAGE_RETURN = 13; /* \r */
+export const CHAR_TAB = 9; /* \t */
+export const CHAR_FORM_FEED = 12; /* \f */
+export const CHAR_EXCLAMATION_MARK = 33; /* ! */
+export const CHAR_HASH = 35; /* # */
+export const CHAR_SPACE = 32; /* */
+export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */
+export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */
+export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */
+export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */
+export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */
+export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */
+export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */
+export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */
+export const CHAR_HYPHEN_MINUS = 45; /* - */
+export const CHAR_PLUS = 43; /* + */
+export const CHAR_DOUBLE_QUOTE = 34; /* " */
+export const CHAR_SINGLE_QUOTE = 39; /* ' */
+export const CHAR_PERCENT = 37; /* % */
+export const CHAR_SEMICOLON = 59; /* ; */
+export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */
+export const CHAR_GRAVE_ACCENT = 96; /* ` */
+export const CHAR_AT = 64; /* @ */
+export const CHAR_AMPERSAND = 38; /* & */
+export const CHAR_EQUAL = 61; /* = */
+// Digits
+export const CHAR_0 = 48; /* 0 */
+export const CHAR_9 = 57; /* 9 */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vLyBBbHBoYWJldCBjaGFycy5cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9BID0gNjU7IC8qIEEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9BID0gOTc7IC8qIGEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9aID0gOTA7IC8qIFogKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9aID0gMTIyOyAvKiB6ICovXG5cbi8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuZXhwb3J0IGNvbnN0IENIQVJfRE9UID0gNDY7IC8qIC4gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUldBUkRfU0xBU0ggPSA0NzsgLyogLyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQkFDS1dBUkRfU0xBU0ggPSA5MjsgLyogXFwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAxMjQ7IC8qIHwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0NPTE9OID0gNTg7IC8qIDogKi9cbmV4cG9ydCBjb25zdCBDSEFSX1FVRVNUSU9OX01BUksgPSA2MzsgLyogPyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfVU5ERVJTQ09SRSA9IDk1OyAvKiBfICovXG5leHBvcnQgY29uc3QgQ0hBUl9MSU5FX0ZFRUQgPSAxMDsgLyogXFxuICovXG5leHBvcnQgY29uc3QgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSAxMzsgLyogXFxyICovXG5leHBvcnQgY29uc3QgQ0hBUl9UQUIgPSA5OyAvKiBcXHQgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUk1fRkVFRCA9IDEyOyAvKiBcXGYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VYQ0xBTUFUSU9OX01BUksgPSAzMzsgLyogISAqL1xuZXhwb3J0IGNvbnN0IENIQVJfSEFTSCA9IDM1OyAvKiAjICovXG5leHBvcnQgY29uc3QgQ0hBUl9TUEFDRSA9IDMyOyAvKiAgICovXG5leHBvcnQgY29uc3QgQ0hBUl9OT19CUkVBS19TUEFDRSA9IDE2MDsgLyogXFx1MDBBMCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFID0gNjUyNzk7IC8qIFxcdUZFRkYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgPSA5MTsgLyogWyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSA5MzsgLyogXSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUID0gNjA7IC8qIDwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQgPSA2MjsgLyogPiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUID0gMTIzOyAvKiB7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OyAvKiB9ICovXG5leHBvcnQgY29uc3QgQ0hBUl9IWVBIRU5fTUlOVVMgPSA0NTsgLyogLSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUExVUyA9IDQzOyAvKiArICovXG5leHBvcnQgY29uc3QgQ0hBUl9ET1VCTEVfUVVPVEUgPSAzNDsgLyogXCIgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NJTkdMRV9RVU9URSA9IDM5OyAvKiAnICovXG5leHBvcnQgY29uc3QgQ0hBUl9QRVJDRU5UID0gMzc7IC8qICUgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NFTUlDT0xPTiA9IDU5OyAvKiA7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCA9IDk0OyAvKiBeICovXG5leHBvcnQgY29uc3QgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsgLyogYCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQVQgPSA2NDsgLyogQCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQU1QRVJTQU5EID0gMzg7IC8qICYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VRVUFMID0gNjE7IC8qID0gKi9cblxuLy8gRGlnaXRzXG5leHBvcnQgY29uc3QgQ0hBUl8wID0gNDg7IC8qIDAgKi9cbmV4cG9ydCBjb25zdCBDSEFSXzkgPSA1NzsgLyogOSAqL1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxrQkFBa0I7QUFDbEIsT0FBTyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBSztBQUN6QyxPQUFPLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFLO0FBQ3pDLE9BQU8sTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQUs7QUFDekMsT0FBTyxNQUFNLG1CQUFtQixJQUFJLENBQUMsS0FBSztBQUUxQyx3QkFBd0I7QUFDeEIsT0FBTyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUs7QUFDakMsT0FBTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSztBQUMzQyxPQUFPLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFLO0FBQzVDLE9BQU8sTUFBTSxxQkFBcUIsSUFBSSxDQUFDLEtBQUs7QUFDNUMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSztBQUMzQyxPQUFPLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFLO0FBQ3hDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQU07QUFDeEMsT0FBTyxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBTTtBQUM5QyxPQUFPLE1BQU0sV0FBVyxFQUFFLENBQUMsTUFBTTtBQUNqQyxPQUFPLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNO0FBQ3hDLE9BQU8sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQUs7QUFDOUMsT0FBTyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLHNCQUFzQixJQUFJLENBQUMsVUFBVTtBQUNsRCxPQUFPLE1BQU0sZ0NBQWdDLE1BQU0sQ0FBQyxVQUFVO0FBQzlELE9BQU8sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQUs7QUFDakQsT0FBTyxNQUFNLDRCQUE0QixHQUFHLENBQUMsS0FBSztBQUNsRCxPQUFPLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxLQUFLO0FBQ2hELE9BQU8sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQUs7QUFDakQsT0FBTyxNQUFNLDBCQUEwQixJQUFJLENBQUMsS0FBSztBQUNqRCxPQUFPLE1BQU0sMkJBQTJCLElBQUksQ0FBQyxLQUFLO0FBQ2xELE9BQU8sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUs7QUFDMUMsT0FBTyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSztBQUMxQyxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLO0FBQzFDLE9BQU8sTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFLO0FBQ3JDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBSztBQUMvQyxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLO0FBQzFDLE9BQU8sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLO0FBQ2hDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFFbkMsU0FBUztBQUNULE9BQU8sTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLO0FBQy9CLE9BQU8sTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLIn0=
+// denoCacheMetadata=2964153292777835285,13068673423762595761 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/5ff5b9a14f6bb57b6e7c7035553a5a8c12be8daff3b2d2f66ddfd87a704ac89e.js b/vendor/gen/https/jsr.io/5ff5b9a14f6bb57b6e7c7035553a5a8c12be8daff3b2d2f66ddfd87a704ac89e.js
new file mode 100644
index 0000000..2d20166
--- /dev/null
+++ b/vendor/gen/https/jsr.io/5ff5b9a14f6bb57b6e7c7035553a5a8c12be8daff3b2d2f66ddfd87a704ac89e.js
@@ -0,0 +1,117 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH } from "../_common/constants.ts";
+import { resolve } from "./resolve.ts";
+import { assertArgs } from "../_common/relative.ts";
+/**
+ * Return the relative path from `from` to `to` based on current working directory.
+ *
+ * An example in windws, for instance:
+ * from = 'C:\\orandea\\test\\aaa'
+ * to = 'C:\\orandea\\impl\\bbb'
+ * The output of the function should be: '..\\..\\impl\\bbb'
+ *
+ * @example Usage
+ * ```ts
+ * import { relative } from "@std/path/windows/relative";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const relativePath = relative("C:\\foobar\\test\\aaa", "C:\\foobar\\impl\\bbb");
+ * assertEquals(relativePath, "..\\..\\impl\\bbb");
+ * ```
+ *
+ * @param from The path from which to calculate the relative path
+ * @param to The path to which to calculate the relative path
+ * @returns The relative path from `from` to `to`
+ */ export function relative(from, to) {
+ assertArgs(from, to);
+ const fromOrig = resolve(from);
+ const toOrig = resolve(to);
+ if (fromOrig === toOrig) return "";
+ from = fromOrig.toLowerCase();
+ to = toOrig.toLowerCase();
+ if (from === to) return "";
+ // Trim any leading backslashes
+ let fromStart = 0;
+ let fromEnd = from.length;
+ for(; fromStart < fromEnd; ++fromStart){
+ if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break;
+ }
+ // Trim trailing backslashes (applicable to UNC paths only)
+ for(; fromEnd - 1 > fromStart; --fromEnd){
+ if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break;
+ }
+ const fromLen = fromEnd - fromStart;
+ // Trim any leading backslashes
+ let toStart = 0;
+ let toEnd = to.length;
+ for(; toStart < toEnd; ++toStart){
+ if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break;
+ }
+ // Trim trailing backslashes (applicable to UNC paths only)
+ for(; toEnd - 1 > toStart; --toEnd){
+ if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break;
+ }
+ const toLen = toEnd - toStart;
+ // Compare paths to find the longest common path from root
+ const length = fromLen < toLen ? fromLen : toLen;
+ let lastCommonSep = -1;
+ let i = 0;
+ for(; i <= length; ++i){
+ if (i === length) {
+ if (toLen > length) {
+ if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
+ // We get here if `from` is the exact base path for `to`.
+ // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz'
+ return toOrig.slice(toStart + i + 1);
+ } else if (i === 2) {
+ // We get here if `from` is the device root.
+ // For example: from='C:\\'; to='C:\\foo'
+ return toOrig.slice(toStart + i);
+ }
+ }
+ if (fromLen > length) {
+ if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='C:\\foo\\bar'; to='C:\\foo'
+ lastCommonSep = i;
+ } else if (i === 2) {
+ // We get here if `to` is the device root.
+ // For example: from='C:\\foo\\bar'; to='C:\\'
+ lastCommonSep = 3;
+ }
+ }
+ break;
+ }
+ const fromCode = from.charCodeAt(fromStart + i);
+ const toCode = to.charCodeAt(toStart + i);
+ if (fromCode !== toCode) break;
+ else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i;
+ }
+ // We found a mismatch before the first common path separator was seen, so
+ // return the original `to`.
+ if (i !== length && lastCommonSep === -1) {
+ return toOrig;
+ }
+ let out = "";
+ if (lastCommonSep === -1) lastCommonSep = 0;
+ // Generate the relative path based on the path difference between `to` and
+ // `from`
+ for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
+ if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
+ if (out.length === 0) out += "..";
+ else out += "\\..";
+ }
+ }
+ // Lastly, append the rest of the destination (`to`) path that comes after
+ // the common path parts
+ if (out.length > 0) {
+ return out + toOrig.slice(toStart + lastCommonSep, toEnd);
+ } else {
+ toStart += lastCommonSep;
+ if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart;
+ return toOrig.slice(toStart, toEnd);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL3JlbGF0aXZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfQkFDS1dBUkRfU0xBU0ggfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9yZXNvbHZlLnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRBcmdzIH0gZnJvbSBcIi4uL19jb21tb24vcmVsYXRpdmUudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYCBiYXNlZCBvbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICpcbiAqIEFuIGV4YW1wbGUgaW4gd2luZHdzLCBmb3IgaW5zdGFuY2U6XG4gKiAgZnJvbSA9ICdDOlxcXFxvcmFuZGVhXFxcXHRlc3RcXFxcYWFhJ1xuICogIHRvID0gJ0M6XFxcXG9yYW5kZWFcXFxcaW1wbFxcXFxiYmInXG4gKiBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBzaG91bGQgYmU6ICcuLlxcXFwuLlxcXFxpbXBsXFxcXGJiYidcbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL3JlbGF0aXZlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShcIkM6XFxcXGZvb2JhclxcXFx0ZXN0XFxcXGFhYVwiLCBcIkM6XFxcXGZvb2JhclxcXFxpbXBsXFxcXGJiYlwiKTtcbiAqIGFzc2VydEVxdWFscyhyZWxhdGl2ZVBhdGgsIFwiLi5cXFxcLi5cXFxcaW1wbFxcXFxiYmJcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZnJvbSBUaGUgcGF0aCBmcm9tIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgcGF0aFxuICogQHBhcmFtIHRvIFRoZSBwYXRoIHRvIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgcGF0aFxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJncyhmcm9tLCB0byk7XG5cbiAgY29uc3QgZnJvbU9yaWcgPSByZXNvbHZlKGZyb20pO1xuICBjb25zdCB0b09yaWcgPSByZXNvbHZlKHRvKTtcblxuICBpZiAoZnJvbU9yaWcgPT09IHRvT3JpZykgcmV0dXJuIFwiXCI7XG5cbiAgZnJvbSA9IGZyb21PcmlnLnRvTG93ZXJDYXNlKCk7XG4gIHRvID0gdG9PcmlnLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCBmcm9tU3RhcnQgPSAwO1xuICBsZXQgZnJvbUVuZCA9IGZyb20ubGVuZ3RoO1xuICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbUVuZDsgKytmcm9tU3RhcnQpIHtcbiAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIC8vIFRyaW0gdHJhaWxpbmcgYmFja3NsYXNoZXMgKGFwcGxpY2FibGUgdG8gVU5DIHBhdGhzIG9ubHkpXG4gIGZvciAoOyBmcm9tRW5kIC0gMSA+IGZyb21TdGFydDsgLS1mcm9tRW5kKSB7XG4gICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tRW5kIC0gMSkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgbGV0IHRvU3RhcnQgPSAwO1xuICBsZXQgdG9FbmQgPSB0by5sZW5ndGg7XG4gIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICAvLyBUcmltIHRyYWlsaW5nIGJhY2tzbGFzaGVzIChhcHBsaWNhYmxlIHRvIFVOQyBwYXRocyBvbmx5KVxuICBmb3IgKDsgdG9FbmQgLSAxID4gdG9TdGFydDsgLS10b0VuZCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvRW5kIC0gMSkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICBsZXQgbGFzdENvbW1vblNlcCA9IC0xO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXGZvb1xcXFxiYXJcXFxcYmF6J1xuICAgICAgICAgIHJldHVybiB0b09yaWcuc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBkZXZpY2Ugcm9vdC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcJzsgdG89J0M6XFxcXGZvbydcbiAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXGZvbydcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgZGV2aWNlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209J0M6XFxcXGZvb1xcXFxiYXInOyB0bz0nQzpcXFxcJ1xuICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgY29uc3QgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpIGJyZWFrO1xuICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBsYXN0Q29tbW9uU2VwID0gaTtcbiAgfVxuXG4gIC8vIFdlIGZvdW5kIGEgbWlzbWF0Y2ggYmVmb3JlIHRoZSBmaXJzdCBjb21tb24gcGF0aCBzZXBhcmF0b3Igd2FzIHNlZW4sIHNvXG4gIC8vIHJldHVybiB0aGUgb3JpZ2luYWwgYHRvYC5cbiAgaWYgKGkgIT09IGxlbmd0aCAmJiBsYXN0Q29tbW9uU2VwID09PSAtMSkge1xuICAgIHJldHVybiB0b09yaWc7XG4gIH1cblxuICBsZXQgb3V0ID0gXCJcIjtcbiAgaWYgKGxhc3RDb21tb25TZXAgPT09IC0xKSBsYXN0Q29tbW9uU2VwID0gMDtcbiAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2AgYW5kXG4gIC8vIGBmcm9tYFxuICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKSBvdXQgKz0gXCIuLlwiO1xuICAgICAgZWxzZSBvdXQgKz0gXCJcXFxcLi5cIjtcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0bHksIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgZGVzdGluYXRpb24gKGB0b2ApIHBhdGggdGhhdCBjb21lcyBhZnRlclxuICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgaWYgKG91dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG91dCArIHRvT3JpZy5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCwgdG9FbmQpO1xuICB9IGVsc2Uge1xuICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICBpZiAodG9PcmlnLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpICsrdG9TdGFydDtcbiAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQsIHRvRW5kKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxtQkFBbUIsUUFBUSwwQkFBMEI7QUFDOUQsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTLFVBQVUsUUFBUSx5QkFBeUI7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0JDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsSUFBWSxFQUFFLEVBQVU7RUFDL0MsV0FBVyxNQUFNO0VBRWpCLE1BQU0sV0FBVyxRQUFRO0VBQ3pCLE1BQU0sU0FBUyxRQUFRO0VBRXZCLElBQUksYUFBYSxRQUFRLE9BQU87RUFFaEMsT0FBTyxTQUFTLFdBQVc7RUFDM0IsS0FBSyxPQUFPLFdBQVc7RUFFdkIsSUFBSSxTQUFTLElBQUksT0FBTztFQUV4QiwrQkFBK0I7RUFDL0IsSUFBSSxZQUFZO0VBQ2hCLElBQUksVUFBVSxLQUFLLE1BQU07RUFDekIsTUFBTyxZQUFZLFNBQVMsRUFBRSxVQUFXO0lBQ3ZDLElBQUksS0FBSyxVQUFVLENBQUMsZUFBZSxxQkFBcUI7RUFDMUQ7RUFDQSwyREFBMkQ7RUFDM0QsTUFBTyxVQUFVLElBQUksV0FBVyxFQUFFLFFBQVM7SUFDekMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxVQUFVLE9BQU8scUJBQXFCO0VBQzVEO0VBQ0EsTUFBTSxVQUFVLFVBQVU7RUFFMUIsK0JBQStCO0VBQy9CLElBQUksVUFBVTtFQUNkLElBQUksUUFBUSxHQUFHLE1BQU07RUFDckIsTUFBTyxVQUFVLE9BQU8sRUFBRSxRQUFTO0lBQ2pDLElBQUksR0FBRyxVQUFVLENBQUMsYUFBYSxxQkFBcUI7RUFDdEQ7RUFDQSwyREFBMkQ7RUFDM0QsTUFBTyxRQUFRLElBQUksU0FBUyxFQUFFLE1BQU87SUFDbkMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLE9BQU8scUJBQXFCO0VBQ3hEO0VBQ0EsTUFBTSxRQUFRLFFBQVE7RUFFdEIsMERBQTBEO0VBQzFELE1BQU0sU0FBUyxVQUFVLFFBQVEsVUFBVTtFQUMzQyxJQUFJLGdCQUFnQixDQUFDO0VBQ3JCLElBQUksSUFBSTtFQUNSLE1BQU8sS0FBSyxRQUFRLEVBQUUsRUFBRztJQUN2QixJQUFJLE1BQU0sUUFBUTtNQUNoQixJQUFJLFFBQVEsUUFBUTtRQUNsQixJQUFJLEdBQUcsVUFBVSxDQUFDLFVBQVUsT0FBTyxxQkFBcUI7VUFDdEQseURBQXlEO1VBQ3pELDJEQUEyRDtVQUMzRCxPQUFPLE9BQU8sS0FBSyxDQUFDLFVBQVUsSUFBSTtRQUNwQyxPQUFPLElBQUksTUFBTSxHQUFHO1VBQ2xCLDRDQUE0QztVQUM1Qyx5Q0FBeUM7VUFDekMsT0FBTyxPQUFPLEtBQUssQ0FBQyxVQUFVO1FBQ2hDO01BQ0Y7TUFDQSxJQUFJLFVBQVUsUUFBUTtRQUNwQixJQUFJLEtBQUssVUFBVSxDQUFDLFlBQVksT0FBTyxxQkFBcUI7VUFDMUQseURBQXlEO1VBQ3pELGlEQUFpRDtVQUNqRCxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLE1BQU0sR0FBRztVQUNsQiwwQ0FBMEM7VUFDMUMsOENBQThDO1VBQzlDLGdCQUFnQjtRQUNsQjtNQUNGO01BQ0E7SUFDRjtJQUNBLE1BQU0sV0FBVyxLQUFLLFVBQVUsQ0FBQyxZQUFZO0lBQzdDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxVQUFVO0lBQ3ZDLElBQUksYUFBYSxRQUFRO1NBQ3BCLElBQUksYUFBYSxxQkFBcUIsZ0JBQWdCO0VBQzdEO0VBRUEsMEVBQTBFO0VBQzFFLDRCQUE0QjtFQUM1QixJQUFJLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFHO0lBQ3hDLE9BQU87RUFDVDtFQUVBLElBQUksTUFBTTtFQUNWLElBQUksa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0I7RUFDMUMsMkVBQTJFO0VBQzNFLFNBQVM7RUFDVCxJQUFLLElBQUksWUFBWSxnQkFBZ0IsR0FBRyxLQUFLLFNBQVMsRUFBRSxFQUFHO0lBQ3pELElBQUksTUFBTSxXQUFXLEtBQUssVUFBVSxDQUFDLE9BQU8scUJBQXFCO01BQy9ELElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxPQUFPO1dBQ3hCLE9BQU87SUFDZDtFQUNGO0VBRUEsMEVBQTBFO0VBQzFFLHdCQUF3QjtFQUN4QixJQUFJLElBQUksTUFBTSxHQUFHLEdBQUc7SUFDbEIsT0FBTyxNQUFNLE9BQU8sS0FBSyxDQUFDLFVBQVUsZUFBZTtFQUNyRCxPQUFPO0lBQ0wsV0FBVztJQUNYLElBQUksT0FBTyxVQUFVLENBQUMsYUFBYSxxQkFBcUIsRUFBRTtJQUMxRCxPQUFPLE9BQU8sS0FBSyxDQUFDLFNBQVM7RUFDL0I7QUFDRiJ9
+// denoCacheMetadata=12358683919675001962,5129319053798673887 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/60a4950732b161230d657ba32a1f0423c16e3e80101ee98f7220f201b665e466.js b/vendor/gen/https/jsr.io/60a4950732b161230d657ba32a1f0423c16e3e80101ee98f7220f201b665e466.js
new file mode 100644
index 0000000..5e28599
--- /dev/null
+++ b/vendor/gen/https/jsr.io/60a4950732b161230d657ba32a1f0423c16e3e80101ee98f7220f201b665e466.js
@@ -0,0 +1,63 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./constants.ts";
+// Resolves . and .. elements in a path with directory names
+export function normalizeString(path, allowAboveRoot, separator, isPathSeparator) {
+ let res = "";
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let code;
+ for(let i = 0; i <= path.length; ++i){
+ if (i < path.length) code = path.charCodeAt(i);
+ else if (isPathSeparator(code)) break;
+ else code = CHAR_FORWARD_SLASH;
+ if (isPathSeparator(code)) {
+ if (lastSlash === i - 1 || dots === 1) {
+ // NOOP
+ } else if (lastSlash !== i - 1 && dots === 2) {
+ if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf(separator);
+ if (lastSlashIndex === -1) {
+ res = "";
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
+ }
+ lastSlash = i;
+ dots = 0;
+ continue;
+ } else if (res.length === 2 || res.length === 1) {
+ res = "";
+ lastSegmentLength = 0;
+ lastSlash = i;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ if (res.length > 0) res += `${separator}..`;
+ else res = "..";
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);
+ else res = path.slice(lastSlash + 1, i);
+ lastSegmentLength = i - lastSlash - 1;
+ }
+ lastSlash = i;
+ dots = 0;
+ } else if (code === CHAR_DOT && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL25vcm1hbGl6ZV9zdHJpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgQ0hBUl9ET1QsIENIQVJfRk9SV0FSRF9TTEFTSCB9IGZyb20gXCIuL2NvbnN0YW50cy50c1wiO1xuXG4vLyBSZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggd2l0aCBkaXJlY3RvcnkgbmFtZXNcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcoXG4gIHBhdGg6IHN0cmluZyxcbiAgYWxsb3dBYm92ZVJvb3Q6IGJvb2xlYW4sXG4gIHNlcGFyYXRvcjogc3RyaW5nLFxuICBpc1BhdGhTZXBhcmF0b3I6IChjb2RlOiBudW1iZXIpID0+IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICBsZXQgcmVzID0gXCJcIjtcbiAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgbGV0IGxhc3RTbGFzaCA9IC0xO1xuICBsZXQgZG90cyA9IDA7XG4gIGxldCBjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaSA8IHBhdGgubGVuZ3RoKSBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlISkpIGJyZWFrO1xuICAgIGVsc2UgY29kZSA9IENIQVJfRk9SV0FSRF9TTEFTSDtcblxuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSEpKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpIC0gMSB8fCBkb3RzID09PSAxKSB7XG4gICAgICAgIC8vIE5PT1BcbiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpIC0gMSAmJiBkb3RzID09PSAyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXMubGVuZ3RoIDwgMiB8fFxuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSBDSEFSX0RPVCB8fFxuICAgICAgICAgIHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAyKSAhPT0gQ0hBUl9ET1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDIgfHwgcmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHJlcyArPSBgJHtzZXBhcmF0b3J9Li5gO1xuICAgICAgICAgIGVsc2UgcmVzID0gXCIuLlwiO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSByZXMgKz0gc2VwYXJhdG9yICsgcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgZWxzZSByZXMgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgIGRvdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gQ0hBUl9ET1QgJiYgZG90cyAhPT0gLTEpIHtcbiAgICAgICsrZG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxTQUFTLFFBQVEsRUFBRSxrQkFBa0IsUUFBUSxpQkFBaUI7QUFFOUQsNERBQTREO0FBQzVELE9BQU8sU0FBUyxnQkFDZCxJQUFZLEVBQ1osY0FBdUIsRUFDdkIsU0FBaUIsRUFDakIsZUFBMEM7RUFFMUMsSUFBSSxNQUFNO0VBQ1YsSUFBSSxvQkFBb0I7RUFDeEIsSUFBSSxZQUFZLENBQUM7RUFDakIsSUFBSSxPQUFPO0VBQ1gsSUFBSTtFQUNKLElBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLE1BQU0sRUFBRSxFQUFFLEVBQUc7SUFDckMsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLE9BQU8sS0FBSyxVQUFVLENBQUM7U0FDdkMsSUFBSSxnQkFBZ0IsT0FBUTtTQUM1QixPQUFPO0lBRVosSUFBSSxnQkFBZ0IsT0FBUTtNQUMxQixJQUFJLGNBQWMsSUFBSSxLQUFLLFNBQVMsR0FBRztNQUNyQyxPQUFPO01BQ1QsT0FBTyxJQUFJLGNBQWMsSUFBSSxLQUFLLFNBQVMsR0FBRztRQUM1QyxJQUNFLElBQUksTUFBTSxHQUFHLEtBQ2Isc0JBQXNCLEtBQ3RCLElBQUksVUFBVSxDQUFDLElBQUksTUFBTSxHQUFHLE9BQU8sWUFDbkMsSUFBSSxVQUFVLENBQUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxVQUNuQztVQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsR0FBRztZQUNsQixNQUFNLGlCQUFpQixJQUFJLFdBQVcsQ0FBQztZQUN2QyxJQUFJLG1CQUFtQixDQUFDLEdBQUc7Y0FDekIsTUFBTTtjQUNOLG9CQUFvQjtZQUN0QixPQUFPO2NBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHO2NBQ25CLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDO1lBQ3ZEO1lBQ0EsWUFBWTtZQUNaLE9BQU87WUFDUDtVQUNGLE9BQU8sSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLEdBQUc7WUFDL0MsTUFBTTtZQUNOLG9CQUFvQjtZQUNwQixZQUFZO1lBQ1osT0FBTztZQUNQO1VBQ0Y7UUFDRjtRQUNBLElBQUksZ0JBQWdCO1VBQ2xCLElBQUksSUFBSSxNQUFNLEdBQUcsR0FBRyxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7ZUFDdEMsTUFBTTtVQUNYLG9CQUFvQjtRQUN0QjtNQUNGLE9BQU87UUFDTCxJQUFJLElBQUksTUFBTSxHQUFHLEdBQUcsT0FBTyxZQUFZLEtBQUssS0FBSyxDQUFDLFlBQVksR0FBRzthQUM1RCxNQUFNLEtBQUssS0FBSyxDQUFDLFlBQVksR0FBRztRQUNyQyxvQkFBb0IsSUFBSSxZQUFZO01BQ3RDO01BQ0EsWUFBWTtNQUNaLE9BQU87SUFDVCxPQUFPLElBQUksU0FBUyxZQUFZLFNBQVMsQ0FBQyxHQUFHO01BQzNDLEVBQUU7SUFDSixPQUFPO01BQ0wsT0FBTyxDQUFDO0lBQ1Y7RUFDRjtFQUNBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=8989519023525258381,5659464771974533758 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6285dfaf21300225c1ee1691dec58f0fe9dabb33adb0e4cf6790798b02c1111e.js b/vendor/gen/https/jsr.io/6285dfaf21300225c1ee1691dec58f0fe9dabb33adb0e4cf6790798b02c1111e.js
new file mode 100644
index 0000000..f62c1f3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6285dfaf21300225c1ee1691dec58f0fe9dabb33adb0e4cf6790798b02c1111e.js
@@ -0,0 +1,60 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { dirname } from "jsr:@std/path@^1.0.9/dirname";
+import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
+import { toPathString } from "./_to_path_string.ts";
+/**
+ * Asynchronously ensures that the hard link exists.
+ *
+ * If the parent directories for the hard link do not exist, they are created.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param src The source file path as a string or URL. Directory hard links are
+ * not allowed.
+ * @param dest The destination link path as a string or URL.
+ *
+ * @returns A void promise that resolves once the hard link exists.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { ensureLink } from "@std/fs/ensure-link";
+ *
+ * await ensureLink("./folder/targetFile.dat", "./folder/targetFile.link.dat");
+ * ```
+ */ export async function ensureLink(src, dest) {
+ dest = toPathString(dest);
+ await ensureDir(dirname(dest));
+ await Deno.link(toPathString(src), dest);
+}
+/**
+ * Synchronously ensures that the hard link exists.
+ *
+ * If the parent directories for the hard link do not exist, they are created.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param src The source file path as a string or URL. Directory hard links are
+ * not allowed.
+ * @param dest The destination link path as a string or URL.
+ *
+ * @returns A void value that returns once the hard link exists.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { ensureLinkSync } from "@std/fs/ensure-link";
+ *
+ * ensureLinkSync("./folder/targetFile.dat", "./folder/targetFile.link.dat");
+ * ```
+ */ export function ensureLinkSync(src, dest) {
+ dest = toPathString(dest);
+ ensureDirSync(dirname(dest));
+ Deno.linkSync(toPathString(src), dest);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2Vuc3VyZV9saW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC45L2Rpcm5hbWVcIjtcbmltcG9ydCB7IGVuc3VyZURpciwgZW5zdXJlRGlyU3luYyB9IGZyb20gXCIuL2Vuc3VyZV9kaXIudHNcIjtcbmltcG9ydCB7IHRvUGF0aFN0cmluZyB9IGZyb20gXCIuL190b19wYXRoX3N0cmluZy50c1wiO1xuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IGVuc3VyZXMgdGhhdCB0aGUgaGFyZCBsaW5rIGV4aXN0cy5cbiAqXG4gKiBJZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzIGZvciB0aGUgaGFyZCBsaW5rIGRvIG5vdCBleGlzdCwgdGhleSBhcmUgY3JlYXRlZC5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctd3JpdGVgIHBlcm1pc3Npb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kZW5vLmNvbS9ydW50aW1lL21hbnVhbC9iYXNpY3MvcGVybWlzc2lvbnMjZmlsZS1zeXN0ZW0tYWNjZXNzfVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVubydzIHBlcm1pc3Npb25zIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gc3JjIFRoZSBzb3VyY2UgZmlsZSBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC4gRGlyZWN0b3J5IGhhcmQgbGlua3MgYXJlXG4gKiBub3QgYWxsb3dlZC5cbiAqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBsaW5rIHBhdGggYXMgYSBzdHJpbmcgb3IgVVJMLlxuICpcbiAqIEByZXR1cm5zIEEgdm9pZCBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgaGFyZCBsaW5rIGV4aXN0cy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBlbnN1cmVMaW5rIH0gZnJvbSBcIkBzdGQvZnMvZW5zdXJlLWxpbmtcIjtcbiAqXG4gKiBhd2FpdCBlbnN1cmVMaW5rKFwiLi9mb2xkZXIvdGFyZ2V0RmlsZS5kYXRcIiwgXCIuL2ZvbGRlci90YXJnZXRGaWxlLmxpbmsuZGF0XCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVMaW5rKHNyYzogc3RyaW5nIHwgVVJMLCBkZXN0OiBzdHJpbmcgfCBVUkwpIHtcbiAgZGVzdCA9IHRvUGF0aFN0cmluZyhkZXN0KTtcbiAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUoZGVzdCkpO1xuXG4gIGF3YWl0IERlbm8ubGluayh0b1BhdGhTdHJpbmcoc3JjKSwgZGVzdCk7XG59XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBlbnN1cmVzIHRoYXQgdGhlIGhhcmQgbGluayBleGlzdHMuXG4gKlxuICogSWYgdGhlIHBhcmVudCBkaXJlY3RvcmllcyBmb3IgdGhlIGhhcmQgbGluayBkbyBub3QgZXhpc3QsIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctcmVhZGAgYW5kIGAtLWFsbG93LXdyaXRlYCBwZXJtaXNzaW9ucy5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHNyYyBUaGUgc291cmNlIGZpbGUgcGF0aCBhcyBhIHN0cmluZyBvciBVUkwuIERpcmVjdG9yeSBoYXJkIGxpbmtzIGFyZVxuICogbm90IGFsbG93ZWQuXG4gKiBAcGFyYW0gZGVzdCBUaGUgZGVzdGluYXRpb24gbGluayBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqXG4gKiBAcmV0dXJucyBBIHZvaWQgdmFsdWUgdGhhdCByZXR1cm5zIG9uY2UgdGhlIGhhcmQgbGluayBleGlzdHMuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZW5zdXJlTGlua1N5bmMgfSBmcm9tIFwiQHN0ZC9mcy9lbnN1cmUtbGlua1wiO1xuICpcbiAqIGVuc3VyZUxpbmtTeW5jKFwiLi9mb2xkZXIvdGFyZ2V0RmlsZS5kYXRcIiwgXCIuL2ZvbGRlci90YXJnZXRGaWxlLmxpbmsuZGF0XCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMaW5rU3luYyhzcmM6IHN0cmluZyB8IFVSTCwgZGVzdDogc3RyaW5nIHwgVVJMKSB7XG4gIGRlc3QgPSB0b1BhdGhTdHJpbmcoZGVzdCk7XG4gIGVuc3VyZURpclN5bmMoZGlybmFtZShkZXN0KSk7XG5cbiAgRGVuby5saW5rU3luYyh0b1BhdGhTdHJpbmcoc3JjKSwgZGVzdCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELFNBQVMsT0FBTyxRQUFRLCtCQUErQjtBQUN2RCxTQUFTLFNBQVMsRUFBRSxhQUFhLFFBQVEsa0JBQWtCO0FBQzNELFNBQVMsWUFBWSxRQUFRLHVCQUF1QjtBQUVwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNCQyxHQUNELE9BQU8sZUFBZSxXQUFXLEdBQWlCLEVBQUUsSUFBa0I7RUFDcEUsT0FBTyxhQUFhO0VBQ3BCLE1BQU0sVUFBVSxRQUFRO0VBRXhCLE1BQU0sS0FBSyxJQUFJLENBQUMsYUFBYSxNQUFNO0FBQ3JDO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQkMsR0FDRCxPQUFPLFNBQVMsZUFBZSxHQUFpQixFQUFFLElBQWtCO0VBQ2xFLE9BQU8sYUFBYTtFQUNwQixjQUFjLFFBQVE7RUFFdEIsS0FBSyxRQUFRLENBQUMsYUFBYSxNQUFNO0FBQ25DIn0=
+// denoCacheMetadata=885851216026383931,12865618983262542485 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6309c5636a1829309dd3307c9db57a6c498ddace1c314f49005ec1e853b8a559.js b/vendor/gen/https/jsr.io/6309c5636a1829309dd3307c9db57a6c498ddace1c314f49005ec1e853b8a559.js
new file mode 100644
index 0000000..b3d5168
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6309c5636a1829309dd3307c9db57a6c498ddace1c314f49005ec1e853b8a559.js
@@ -0,0 +1,44 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArgs, lastPathSegment, stripSuffix } from "../_common/basename.ts";
+import { CHAR_COLON } from "../_common/constants.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return the last portion of a `path`.
+ * Trailing directory separators are ignored, and optional suffix is removed.
+ *
+ * @example Usage
+ * ```ts
+ * import { basename } from "@std/path/windows/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(basename("C:\\user\\Documents\\"), "Documents");
+ * assertEquals(basename("C:\\user\\Documents\\image.png"), "image.png");
+ * assertEquals(basename("C:\\user\\Documents\\image.png", ".png"), "image");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `basename` from `@std/path/windows/unstable-basename`.
+ *
+ * @param path The path to extract the name from.
+ * @param suffix The suffix to remove from extracted name.
+ * @returns The extracted name.
+ */ export function basename(path, suffix = "") {
+ assertArgs(path, suffix);
+ // Check for a drive letter prefix so as not to mistake the following
+ // path separator as an extra separator at the end of the path that can be
+ // disregarded
+ let start = 0;
+ if (path.length >= 2) {
+ const drive = path.charCodeAt(0);
+ if (isWindowsDeviceRoot(drive)) {
+ if (path.charCodeAt(1) === CHAR_COLON) start = 2;
+ }
+ }
+ const lastSegment = lastPathSegment(path, isPathSeparator, start);
+ const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator);
+ return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2Jhc2VuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7XG4gIGFzc2VydEFyZ3MsXG4gIGxhc3RQYXRoU2VnbWVudCxcbiAgc3RyaXBTdWZmaXgsXG59IGZyb20gXCIuLi9fY29tbW9uL2Jhc2VuYW1lLnRzXCI7XG5pbXBvcnQgeyBDSEFSX0NPTE9OIH0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyB9IGZyb20gXCIuLi9fY29tbW9uL3N0cmlwX3RyYWlsaW5nX3NlcGFyYXRvcnMudHNcIjtcbmltcG9ydCB7IGlzUGF0aFNlcGFyYXRvciwgaXNXaW5kb3dzRGV2aWNlUm9vdCB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuXG4gKiBUcmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgaWdub3JlZCwgYW5kIG9wdGlvbmFsIHN1ZmZpeCBpcyByZW1vdmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvYmFzZW5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcIkM6XFxcXHVzZXJcXFxcRG9jdW1lbnRzXFxcXFwiKSwgXCJEb2N1bWVudHNcIik7XG4gKiBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCJDOlxcXFx1c2VyXFxcXERvY3VtZW50c1xcXFxpbWFnZS5wbmdcIiksIFwiaW1hZ2UucG5nXCIpO1xuICogYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiQzpcXFxcdXNlclxcXFxEb2N1bWVudHNcXFxcaW1hZ2UucG5nXCIsIFwiLnBuZ1wiKSwgXCJpbWFnZVwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGJhc2VuYW1lYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1iYXNlbmFtZWAuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gZXh0cmFjdCB0aGUgbmFtZSBmcm9tLlxuICogQHBhcmFtIHN1ZmZpeCBUaGUgc3VmZml4IHRvIHJlbW92ZSBmcm9tIGV4dHJhY3RlZCBuYW1lLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBzdWZmaXggPSBcIlwiKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJncyhwYXRoLCBzdWZmaXgpO1xuXG4gIC8vIENoZWNrIGZvciBhIGRyaXZlIGxldHRlciBwcmVmaXggc28gYXMgbm90IHRvIG1pc3Rha2UgdGhlIGZvbGxvd2luZ1xuICAvLyBwYXRoIHNlcGFyYXRvciBhcyBhbiBleHRyYSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCB0aGF0IGNhbiBiZVxuICAvLyBkaXNyZWdhcmRlZFxuICBsZXQgc3RhcnQgPSAwO1xuICBpZiAocGF0aC5sZW5ndGggPj0gMikge1xuICAgIGNvbnN0IGRyaXZlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGRyaXZlKSkge1xuICAgICAgaWYgKHBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTikgc3RhcnQgPSAyO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxhc3RTZWdtZW50ID0gbGFzdFBhdGhTZWdtZW50KHBhdGgsIGlzUGF0aFNlcGFyYXRvciwgc3RhcnQpO1xuICBjb25zdCBzdHJpcHBlZFNlZ21lbnQgPSBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyhsYXN0U2VnbWVudCwgaXNQYXRoU2VwYXJhdG9yKTtcbiAgcmV0dXJuIHN1ZmZpeCA/IHN0cmlwU3VmZml4KHN0cmlwcGVkU2VnbWVudCwgc3VmZml4KSA6IHN0cmlwcGVkU2VnbWVudDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQ0UsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLFFBQ04seUJBQXlCO0FBQ2hDLFNBQVMsVUFBVSxRQUFRLDBCQUEwQjtBQUNyRCxTQUFTLHVCQUF1QixRQUFRLDBDQUEwQztBQUNsRixTQUFTLGVBQWUsRUFBRSxtQkFBbUIsUUFBUSxhQUFhO0FBRWxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxTQUFTLElBQVksRUFBRSxTQUFTLEVBQUU7RUFDaEQsV0FBVyxNQUFNO0VBRWpCLHFFQUFxRTtFQUNyRSwwRUFBMEU7RUFDMUUsY0FBYztFQUNkLElBQUksUUFBUTtFQUNaLElBQUksS0FBSyxNQUFNLElBQUksR0FBRztJQUNwQixNQUFNLFFBQVEsS0FBSyxVQUFVLENBQUM7SUFDOUIsSUFBSSxvQkFBb0IsUUFBUTtNQUM5QixJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sWUFBWSxRQUFRO0lBQ2pEO0VBQ0Y7RUFFQSxNQUFNLGNBQWMsZ0JBQWdCLE1BQU0saUJBQWlCO0VBQzNELE1BQU0sa0JBQWtCLHdCQUF3QixhQUFhO0VBQzdELE9BQU8sU0FBUyxZQUFZLGlCQUFpQixVQUFVO0FBQ3pEIn0=
+// denoCacheMetadata=6126291965185441111,13388793222432510517 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6478588dab36d4c6b1fad2b6909e61673d0fcd3cb2fa3dda5df94186b0870130.js b/vendor/gen/https/jsr.io/6478588dab36d4c6b1fad2b6909e61673d0fcd3cb2fa3dda5df94186b0870130.js
new file mode 100644
index 0000000..7150b74
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6478588dab36d4c6b1fad2b6909e61673d0fcd3cb2fa3dda5df94186b0870130.js
@@ -0,0 +1,32 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { types } from "./_db.ts";
+/**
+ * Returns the media type associated with the file extension, or `undefined` if
+ * no media type is found.
+ *
+ * Values are normalized to lower case and matched irrespective of a leading
+ * `.`.
+ *
+ * @param extension The file extension to get the media type for.
+ *
+ * @returns The media type associated with the file extension, or `undefined` if
+ * no media type is found.
+ *
+ * @example Usage
+ * ```ts
+ * import { typeByExtension } from "@std/media-types/type-by-extension";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(typeByExtension("js"), "text/javascript");
+ * assertEquals(typeByExtension(".HTML"), "text/html");
+ * assertEquals(typeByExtension("foo"), undefined);
+ * assertEquals(typeByExtension("file.json"), undefined);
+ * ```
+ */ export function typeByExtension(extension) {
+ extension = extension.startsWith(".") ? extension.slice(1) : extension;
+ // @ts-ignore Work around https://github.com/denoland/dnt/issues/148
+ return types.get(extension.toLowerCase());
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvdHlwZV9ieV9leHRlbnNpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwiLi9fZGIudHNcIjtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtZWRpYSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZSBleHRlbnNpb24sIG9yIGB1bmRlZmluZWRgIGlmXG4gKiBubyBtZWRpYSB0eXBlIGlzIGZvdW5kLlxuICpcbiAqIFZhbHVlcyBhcmUgbm9ybWFsaXplZCB0byBsb3dlciBjYXNlIGFuZCBtYXRjaGVkIGlycmVzcGVjdGl2ZSBvZiBhIGxlYWRpbmdcbiAqIGAuYC5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIFRoZSBmaWxlIGV4dGVuc2lvbiB0byBnZXQgdGhlIG1lZGlhIHR5cGUgZm9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtZWRpYSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZSBleHRlbnNpb24sIG9yIGB1bmRlZmluZWRgIGlmXG4gKiBubyBtZWRpYSB0eXBlIGlzIGZvdW5kLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdHlwZUJ5RXh0ZW5zaW9uIH0gZnJvbSBcIkBzdGQvbWVkaWEtdHlwZXMvdHlwZS1ieS1leHRlbnNpb25cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyh0eXBlQnlFeHRlbnNpb24oXCJqc1wiKSwgXCJ0ZXh0L2phdmFzY3JpcHRcIik7XG4gKiBhc3NlcnRFcXVhbHModHlwZUJ5RXh0ZW5zaW9uKFwiLkhUTUxcIiksIFwidGV4dC9odG1sXCIpO1xuICogYXNzZXJ0RXF1YWxzKHR5cGVCeUV4dGVuc2lvbihcImZvb1wiKSwgdW5kZWZpbmVkKTtcbiAqIGFzc2VydEVxdWFscyh0eXBlQnlFeHRlbnNpb24oXCJmaWxlLmpzb25cIiksIHVuZGVmaW5lZCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVCeUV4dGVuc2lvbihleHRlbnNpb246IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGV4dGVuc2lvbiA9IGV4dGVuc2lvbi5zdGFydHNXaXRoKFwiLlwiKSA/IGV4dGVuc2lvbi5zbGljZSgxKSA6IGV4dGVuc2lvbjtcbiAgLy8gQHRzLWlnbm9yZSBXb3JrIGFyb3VuZCBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZG50L2lzc3Vlcy8xNDhcbiAgcmV0dXJuIHR5cGVzLmdldChleHRlbnNpb24udG9Mb3dlckNhc2UoKSk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLEtBQUssUUFBUSxXQUFXO0FBRWpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0JDLEdBQ0QsT0FBTyxTQUFTLGdCQUFnQixTQUFpQjtFQUMvQyxZQUFZLFVBQVUsVUFBVSxDQUFDLE9BQU8sVUFBVSxLQUFLLENBQUMsS0FBSztFQUM3RCxvRUFBb0U7RUFDcEUsT0FBTyxNQUFNLEdBQUcsQ0FBQyxVQUFVLFdBQVc7QUFDeEMifQ==
+// denoCacheMetadata=18223311315059652447,5703654777241251835 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/651ba47183723c05f7ffd2456f7e0d3d88168e0bf6a00537cc2d2fa1dbfa57c3.js b/vendor/gen/https/jsr.io/651ba47183723c05f7ffd2456f7e0d3d88168e0bf6a00537cc2d2fa1dbfa57c3.js
new file mode 100644
index 0000000..9b9a6b9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/651ba47183723c05f7ffd2456f7e0d3d88168e0bf6a00537cc2d2fa1dbfa57c3.js
@@ -0,0 +1,41 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { join } from "./join.ts";
+import { SEPARATOR } from "./constants.ts";
+import { normalizeGlob } from "./normalize_glob.ts";
+/**
+ * Like join(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ *
+ * ```ts
+ * import { joinGlobs } from "@std/path/windows/join-globs";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const joined = joinGlobs(["foo", "**", "bar"], { globstar: true });
+ * assertEquals(joined, "foo\\**\\bar");
+ * ```
+ *
+ * @param globs The globs to join.
+ * @param options The options for glob pattern.
+ * @returns The joined glob pattern.
+ */ export function joinGlobs(globs, options = {}) {
+ const { globstar = false } = options;
+ if (!globstar || globs.length === 0) {
+ return join(...globs);
+ }
+ let joined;
+ for (const glob of globs){
+ const path = glob;
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `${SEPARATOR}${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalizeGlob(joined, {
+ globstar
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2pvaW5fZ2xvYnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBHbG9iT3B0aW9ucyB9IGZyb20gXCIuLi9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCIuL2pvaW4udHNcIjtcbmltcG9ydCB7IFNFUEFSQVRPUiB9IGZyb20gXCIuL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplR2xvYiB9IGZyb20gXCIuL25vcm1hbGl6ZV9nbG9iLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfTtcblxuLyoqXG4gKiBMaWtlIGpvaW4oKSwgYnV0IGRvZXNuJ3QgY29sbGFwc2UgXCIqKlxcLy4uXCIgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgam9pbkdsb2JzIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2pvaW4tZ2xvYnNcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGpvaW5lZCA9IGpvaW5HbG9icyhbXCJmb29cIiwgXCIqKlwiLCBcImJhclwiXSwgeyBnbG9ic3RhcjogdHJ1ZSB9KTtcbiAqIGFzc2VydEVxdWFscyhqb2luZWQsIFwiZm9vXFxcXCoqXFxcXGJhclwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9icyBUaGUgZ2xvYnMgdG8gam9pbi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBnbG9iIHBhdHRlcm4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIGdsb2IgcGF0dGVybi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBQaWNrPEdsb2JPcHRpb25zLCBcImdsb2JzdGFyXCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGdsb2JzdGFyID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGlmICghZ2xvYnN0YXIgfHwgZ2xvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGpvaW4oLi4uZ2xvYnMpO1xuICB9XG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBnbG9iIG9mIGdsb2JzKSB7XG4gICAgY29uc3QgcGF0aCA9IGdsb2I7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFqb2luZWQpIGpvaW5lZCA9IHBhdGg7XG4gICAgICBlbHNlIGpvaW5lZCArPSBgJHtTRVBBUkFUT1J9JHtwYXRofWA7XG4gICAgfVxuICB9XG4gIGlmICgham9pbmVkKSByZXR1cm4gXCIuXCI7XG4gIHJldHVybiBub3JtYWxpemVHbG9iKGpvaW5lZCwgeyBnbG9ic3RhciB9KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBR3JDLFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBQzNDLFNBQVMsYUFBYSxRQUFRLHNCQUFzQjtBQUlwRDs7Ozs7Ozs7Ozs7Ozs7OztDQWdCQyxHQUNELE9BQU8sU0FBUyxVQUNkLEtBQWUsRUFDZixVQUF5QyxDQUFDLENBQUM7RUFFM0MsTUFBTSxFQUFFLFdBQVcsS0FBSyxFQUFFLEdBQUc7RUFDN0IsSUFBSSxDQUFDLFlBQVksTUFBTSxNQUFNLEtBQUssR0FBRztJQUNuQyxPQUFPLFFBQVE7RUFDakI7RUFDQSxJQUFJO0VBQ0osS0FBSyxNQUFNLFFBQVEsTUFBTztJQUN4QixNQUFNLE9BQU87SUFDYixJQUFJLEtBQUssTUFBTSxHQUFHLEdBQUc7TUFDbkIsSUFBSSxDQUFDLFFBQVEsU0FBUztXQUNqQixVQUFVLEdBQUcsWUFBWSxNQUFNO0lBQ3RDO0VBQ0Y7RUFDQSxJQUFJLENBQUMsUUFBUSxPQUFPO0VBQ3BCLE9BQU8sY0FBYyxRQUFRO0lBQUU7RUFBUztBQUMxQyJ9
+// denoCacheMetadata=4966238593691959618,13762202024271026174 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/65faaccaf28669a72ef1b6830ea46615956c2f248bae796c29cd2292757640e7.js b/vendor/gen/https/jsr.io/65faaccaf28669a72ef1b6830ea46615956c2f248bae796c29cd2292757640e7.js
new file mode 100644
index 0000000..0fba0cd
--- /dev/null
+++ b/vendor/gen/https/jsr.io/65faaccaf28669a72ef1b6830ea46615956c2f248bae796c29cd2292757640e7.js
@@ -0,0 +1,80 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { EXTRACT_REGEXP_MAP } from "./_formats.ts";
+/**
+ * Tests if a string has valid front matter.
+ * Supports {@link https://yaml.org | YAML}, {@link https://toml.io | TOML} and
+ * {@link https://www.json.org/ | JSON}.
+ *
+ * @param str String to test.
+ * @param formats A list of formats to test for. Defaults to all supported formats.
+ * @returns `true` if the string has valid front matter, otherwise `false`.
+ *
+ * @example Test for valid YAML front matter
+ * ```ts
+ * import { test } from "@std/front-matter/test";
+ * import { assert } from "@std/assert";
+ *
+ * const result = test(
+ * `---
+ * title: Three dashes marks the spot
+ * ---
+ * `);
+ * assert(result);
+ * ```
+ *
+ * @example Test for valid TOML front matter
+ * ```ts
+ * import { test } from "@std/front-matter/test";
+ * import { assert } from "@std/assert";
+ *
+ * const result = test(
+ * `---toml
+ * title = 'Three dashes followed by format marks the spot'
+ * ---
+ * `);
+ * assert(result);
+ * ```
+ *
+ * @example Test for valid JSON front matter
+ * ```ts
+ * import { test } from "@std/front-matter/test";
+ * import { assert } from "@std/assert";
+ *
+ * const result = test(
+ * `---json
+ * {"title": "Three dashes followed by format marks the spot"}
+ * ---
+ * `);
+ * assert(result);
+ * ```
+ *
+ * @example JSON front matter is not valid as YAML
+ * ```ts
+ * import { test } from "@std/front-matter/test";
+ * import { assertFalse } from "@std/assert";
+ *
+ * const result = test(
+ * `---json
+ * {"title": "Three dashes followed by format marks the spot"}
+ * ---
+ * `, ["yaml"]);
+ * assertFalse(result);
+ * ```
+ */ export function test(str, formats) {
+ if (!formats) formats = [
+ ...EXTRACT_REGEXP_MAP.keys()
+ ];
+ for (const format of formats){
+ const regexp = EXTRACT_REGEXP_MAP.get(format);
+ if (!regexp) {
+ throw new TypeError(`Unable to test for ${format} front matter format`);
+ }
+ const match = regexp.exec(str);
+ if (match?.index === 0) {
+ return true;
+ }
+ }
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L3Rlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgRVhUUkFDVF9SRUdFWFBfTUFQLCB0eXBlIEZvcm1hdCB9IGZyb20gXCIuL19mb3JtYXRzLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgRm9ybWF0IH07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBzdHJpbmcgaGFzIHZhbGlkIGZyb250IG1hdHRlci5cbiAqIFN1cHBvcnRzIHtAbGluayBodHRwczovL3lhbWwub3JnIHwgWUFNTH0sIHtAbGluayBodHRwczovL3RvbWwuaW8gfCBUT01MfSBhbmRcbiAqIHtAbGluayBodHRwczovL3d3dy5qc29uLm9yZy8gfCBKU09OfS5cbiAqXG4gKiBAcGFyYW0gc3RyIFN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIGZvcm1hdHMgQSBsaXN0IG9mIGZvcm1hdHMgdG8gdGVzdCBmb3IuIERlZmF1bHRzIHRvIGFsbCBzdXBwb3J0ZWQgZm9ybWF0cy5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RyaW5nIGhhcyB2YWxpZCBmcm9udCBtYXR0ZXIsIG90aGVyd2lzZSBgZmFsc2VgLlxuICpcbiAqIEBleGFtcGxlIFRlc3QgZm9yIHZhbGlkIFlBTUwgZnJvbnQgbWF0dGVyXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdGVzdCB9IGZyb20gXCJAc3RkL2Zyb250LW1hdHRlci90ZXN0XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSB0ZXN0KFxuICogYC0tLVxuICogdGl0bGU6IFRocmVlIGRhc2hlcyBtYXJrcyB0aGUgc3BvdFxuICogLS0tXG4gKiBgKTtcbiAqIGFzc2VydChyZXN1bHQpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgVGVzdCBmb3IgdmFsaWQgVE9NTCBmcm9udCBtYXR0ZXJcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0ZXN0IH0gZnJvbSBcIkBzdGQvZnJvbnQtbWF0dGVyL3Rlc3RcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IHRlc3QoXG4gKiBgLS0tdG9tbFxuICogdGl0bGUgPSAnVGhyZWUgZGFzaGVzIGZvbGxvd2VkIGJ5IGZvcm1hdCBtYXJrcyB0aGUgc3BvdCdcbiAqIC0tLVxuICogYCk7XG4gKiBhc3NlcnQocmVzdWx0KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFRlc3QgZm9yIHZhbGlkIEpTT04gZnJvbnQgbWF0dGVyXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdGVzdCB9IGZyb20gXCJAc3RkL2Zyb250LW1hdHRlci90ZXN0XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSB0ZXN0KFxuICogYC0tLWpzb25cbiAqIHtcInRpdGxlXCI6IFwiVGhyZWUgZGFzaGVzIGZvbGxvd2VkIGJ5IGZvcm1hdCBtYXJrcyB0aGUgc3BvdFwifVxuICogLS0tXG4gKiBgKTtcbiAqIGFzc2VydChyZXN1bHQpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgSlNPTiBmcm9udCBtYXR0ZXIgaXMgbm90IHZhbGlkIGFzIFlBTUxcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0ZXN0IH0gZnJvbSBcIkBzdGQvZnJvbnQtbWF0dGVyL3Rlc3RcIjtcbiAqIGltcG9ydCB7IGFzc2VydEZhbHNlIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gdGVzdChcbiAqIGAtLS1qc29uXG4gKiB7XCJ0aXRsZVwiOiBcIlRocmVlIGRhc2hlcyBmb2xsb3dlZCBieSBmb3JtYXQgbWFya3MgdGhlIHNwb3RcIn1cbiAqIC0tLVxuICogYCwgW1wieWFtbFwiXSk7XG4gKiBhc3NlcnRGYWxzZShyZXN1bHQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KHN0cjogc3RyaW5nLCBmb3JtYXRzPzogRm9ybWF0W10pOiBib29sZWFuIHtcbiAgaWYgKCFmb3JtYXRzKSBmb3JtYXRzID0gWy4uLkVYVFJBQ1RfUkVHRVhQX01BUC5rZXlzKCldIGFzIEZvcm1hdFtdO1xuXG4gIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICBjb25zdCByZWdleHAgPSBFWFRSQUNUX1JFR0VYUF9NQVAuZ2V0KGZvcm1hdCk7XG4gICAgaWYgKCFyZWdleHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuYWJsZSB0byB0ZXN0IGZvciAke2Zvcm1hdH0gZnJvbnQgbWF0dGVyIGZvcm1hdGApO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4cC5leGVjKHN0cik7XG4gICAgaWYgKG1hdGNoPy5pbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUVyRCxTQUFTLGtCQUFrQixRQUFxQixnQkFBZ0I7QUFJaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTREQyxHQUNELE9BQU8sU0FBUyxLQUFLLEdBQVcsRUFBRSxPQUFrQjtFQUNsRCxJQUFJLENBQUMsU0FBUyxVQUFVO09BQUksbUJBQW1CLElBQUk7R0FBRztFQUV0RCxLQUFLLE1BQU0sVUFBVSxRQUFTO0lBQzVCLE1BQU0sU0FBUyxtQkFBbUIsR0FBRyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxRQUFRO01BQ1gsTUFBTSxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLG9CQUFvQixDQUFDO0lBQ3hFO0lBQ0EsTUFBTSxRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQzFCLElBQUksT0FBTyxVQUFVLEdBQUc7TUFDdEIsT0FBTztJQUNUO0VBQ0Y7RUFFQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=5725765818060338960,48075601722144883 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6747bf701f3d06962451bf17cd72da9de6bf605cd2a83dc7221c64bbf6831c78.js b/vendor/gen/https/jsr.io/6747bf701f3d06962451bf17cd72da9de6bf605cd2a83dc7221c64bbf6831c78.js
new file mode 100644
index 0000000..b8c3510
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6747bf701f3d06962451bf17cd72da9de6bf605cd2a83dc7221c64bbf6831c78.js
@@ -0,0 +1,28 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { isPlainObject } from "../_utils.ts";
+function resolveYamlOmap(data) {
+ const objectKeys = new Set();
+ for (const object of data){
+ if (!isPlainObject(object)) return false;
+ const keys = Object.keys(object);
+ if (keys.length !== 1) return false;
+ for (const key of keys){
+ if (objectKeys.has(key)) return false;
+ objectKeys.add(key);
+ }
+ }
+ return true;
+}
+export const omap = {
+ tag: "tag:yaml.org,2002:omap",
+ kind: "sequence",
+ resolve: resolveYamlOmap,
+ construct (data) {
+ return data;
+ }
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9vbWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gXCIuLi9fdHlwZS50c1wiO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pOiBib29sZWFuIHtcbiAgY29uc3Qgb2JqZWN0S2V5cyA9IG5ldyBTZXQoKTtcbiAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChvYmplY3QpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKG9iamVjdEtleXMuaGFzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIG9iamVjdEtleXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3Qgb21hcDogVHlwZTxcInNlcXVlbmNlXCIsIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj5bXT4gPSB7XG4gIHRhZzogXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXCIsXG4gIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxPbWFwLFxuICBjb25zdHJ1Y3QoZGF0YSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9LFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFHckQsU0FBUyxhQUFhLFFBQVEsZUFBZTtBQUU3QyxTQUFTLGdCQUFnQixJQUErQjtFQUN0RCxNQUFNLGFBQWEsSUFBSTtFQUN2QixLQUFLLE1BQU0sVUFBVSxLQUFNO0lBQ3pCLElBQUksQ0FBQyxjQUFjLFNBQVMsT0FBTztJQUNuQyxNQUFNLE9BQU8sT0FBTyxJQUFJLENBQUM7SUFDekIsSUFBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLE9BQU87SUFDOUIsS0FBSyxNQUFNLE9BQU8sS0FBTTtNQUN0QixJQUFJLFdBQVcsR0FBRyxDQUFDLE1BQU0sT0FBTztNQUNoQyxXQUFXLEdBQUcsQ0FBQztJQUNqQjtFQUNGO0VBQ0EsT0FBTztBQUNUO0FBRUEsT0FBTyxNQUFNLE9BQXlEO0VBQ3BFLEtBQUs7RUFDTCxNQUFNO0VBQ04sU0FBUztFQUNULFdBQVUsSUFBSTtJQUNaLE9BQU87RUFDVDtBQUNGLEVBQUUifQ==
+// denoCacheMetadata=5721867118394237595,3278364661059839552 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/676979eaa18bc94435f9733ede83ca3be7eb3ab8566b1f9967aaa7b89abb9a9e.js b/vendor/gen/https/jsr.io/676979eaa18bc94435f9733ede83ca3be7eb3ab8566b1f9967aaa7b89abb9a9e.js
new file mode 100644
index 0000000..4a981cf
--- /dev/null
+++ b/vendor/gen/https/jsr.io/676979eaa18bc94435f9733ede83ca3be7eb3ab8566b1f9967aaa7b89abb9a9e.js
@@ -0,0 +1,214 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Options for {@linkcode globToRegExp}, {@linkcode joinGlobs},
+ * {@linkcode normalizeGlob} and {@linkcode expandGlob}.
+ */ const REG_EXP_ESCAPE_CHARS = [
+ "!",
+ "$",
+ "(",
+ ")",
+ "*",
+ "+",
+ ".",
+ "=",
+ "?",
+ "[",
+ "\\",
+ "^",
+ "{",
+ "|"
+];
+const RANGE_ESCAPE_CHARS = [
+ "-",
+ "\\",
+ "]"
+];
+export function _globToRegExp(c, glob, { extended = true, globstar: globstarOption = true, // os = osType,
+caseInsensitive = false } = {}) {
+ if (glob === "") {
+ return /(?!)/;
+ }
+ // Remove trailing separators.
+ let newLength = glob.length;
+ for(; newLength > 1 && c.seps.includes(glob[newLength - 1]); newLength--);
+ glob = glob.slice(0, newLength);
+ let regExpString = "";
+ // Terminates correctly. Trust that `j` is incremented every iteration.
+ for(let j = 0; j < glob.length;){
+ let segment = "";
+ const groupStack = [];
+ let inRange = false;
+ let inEscape = false;
+ let endsWithSep = false;
+ let i = j;
+ // Terminates with `i` at the non-inclusive end of the current segment.
+ for(; i < glob.length && !c.seps.includes(glob[i]); i++){
+ if (inEscape) {
+ inEscape = false;
+ const escapeChars = inRange ? RANGE_ESCAPE_CHARS : REG_EXP_ESCAPE_CHARS;
+ segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
+ continue;
+ }
+ if (glob[i] === c.escapePrefix) {
+ inEscape = true;
+ continue;
+ }
+ if (glob[i] === "[") {
+ if (!inRange) {
+ inRange = true;
+ segment += "[";
+ if (glob[i + 1] === "!") {
+ i++;
+ segment += "^";
+ } else if (glob[i + 1] === "^") {
+ i++;
+ segment += "\\^";
+ }
+ continue;
+ } else if (glob[i + 1] === ":") {
+ let k = i + 1;
+ let value = "";
+ while(glob[k + 1] !== undefined && glob[k + 1] !== ":"){
+ value += glob[k + 1];
+ k++;
+ }
+ if (glob[k + 1] === ":" && glob[k + 2] === "]") {
+ i = k + 2;
+ if (value === "alnum") segment += "\\dA-Za-z";
+ else if (value === "alpha") segment += "A-Za-z";
+ else if (value === "ascii") segment += "\x00-\x7F";
+ else if (value === "blank") segment += "\t ";
+ else if (value === "cntrl") segment += "\x00-\x1F\x7F";
+ else if (value === "digit") segment += "\\d";
+ else if (value === "graph") segment += "\x21-\x7E";
+ else if (value === "lower") segment += "a-z";
+ else if (value === "print") segment += "\x20-\x7E";
+ else if (value === "punct") {
+ segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~";
+ } else if (value === "space") segment += "\\s\v";
+ else if (value === "upper") segment += "A-Z";
+ else if (value === "word") segment += "\\w";
+ else if (value === "xdigit") segment += "\\dA-Fa-f";
+ continue;
+ }
+ }
+ }
+ if (glob[i] === "]" && inRange) {
+ inRange = false;
+ segment += "]";
+ continue;
+ }
+ if (inRange) {
+ segment += glob[i];
+ continue;
+ }
+ if (glob[i] === ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
+ segment += ")";
+ const type = groupStack.pop();
+ if (type === "!") {
+ segment += c.wildcard;
+ } else if (type !== "@") {
+ segment += type;
+ }
+ continue;
+ }
+ if (glob[i] === "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
+ segment += "|";
+ continue;
+ }
+ if (glob[i] === "+" && extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("+");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] === "@" && extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("@");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] === "?") {
+ if (extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("?");
+ segment += "(?:";
+ } else {
+ segment += ".";
+ }
+ continue;
+ }
+ if (glob[i] === "!" && extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("!");
+ segment += "(?!";
+ continue;
+ }
+ if (glob[i] === "{") {
+ groupStack.push("BRACE");
+ segment += "(?:";
+ continue;
+ }
+ if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") {
+ groupStack.pop();
+ segment += ")";
+ continue;
+ }
+ if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") {
+ segment += "|";
+ continue;
+ }
+ if (glob[i] === "*") {
+ if (extended && glob[i + 1] === "(") {
+ i++;
+ groupStack.push("*");
+ segment += "(?:";
+ } else {
+ const prevChar = glob[i - 1];
+ let numStars = 1;
+ while(glob[i + 1] === "*"){
+ i++;
+ numStars++;
+ }
+ const nextChar = glob[i + 1];
+ if (globstarOption && numStars === 2 && [
+ ...c.seps,
+ undefined
+ ].includes(prevChar) && [
+ ...c.seps,
+ undefined
+ ].includes(nextChar)) {
+ segment += c.globstar;
+ endsWithSep = true;
+ } else {
+ segment += c.wildcard;
+ }
+ }
+ continue;
+ }
+ segment += REG_EXP_ESCAPE_CHARS.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
+ }
+ // Check for unclosed groups or a dangling backslash.
+ if (groupStack.length > 0 || inRange || inEscape) {
+ // Parse failure. Take all characters from this segment literally.
+ segment = "";
+ for (const c of glob.slice(j, i)){
+ segment += REG_EXP_ESCAPE_CHARS.includes(c) ? `\\${c}` : c;
+ endsWithSep = false;
+ }
+ }
+ regExpString += segment;
+ if (!endsWithSep) {
+ regExpString += i < glob.length ? c.sep : c.sepMaybe;
+ endsWithSep = true;
+ }
+ // Terminates with `i` at the start of the next segment.
+ while(c.seps.includes(glob[i]))i++;
+ j = i;
+ }
+ regExpString = `^${regExpString}$`;
+ return new RegExp(regExpString, caseInsensitive ? "i" : "");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgZ2xvYlRvUmVnRXhwfSwge0BsaW5rY29kZSBqb2luR2xvYnN9LFxuICoge0BsaW5rY29kZSBub3JtYWxpemVHbG9ifSBhbmQge0BsaW5rY29kZSBleHBhbmRHbG9ifS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iT3B0aW9ucyB7XG4gIC8qKiBFeHRlbmRlZCBnbG9iIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7dHJ1ZX1cbiAgICovXG4gIGV4dGVuZGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JzdGFyIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gICAqIElmIGZhbHNlLCBgKipgIGlzIHRyZWF0ZWQgbGlrZSBgKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgZ2xvYnN0YXI/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciBnbG9ic3RhciBzaG91bGQgYmUgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgY2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgUkVHX0VYUF9FU0NBUEVfQ0hBUlMgPSBbXG4gIFwiIVwiLFxuICBcIiRcIixcbiAgXCIoXCIsXG4gIFwiKVwiLFxuICBcIipcIixcbiAgXCIrXCIsXG4gIFwiLlwiLFxuICBcIj1cIixcbiAgXCI/XCIsXG4gIFwiW1wiLFxuICBcIlxcXFxcIixcbiAgXCJeXCIsXG4gIFwie1wiLFxuICBcInxcIixcbl0gYXMgY29uc3Q7XG5jb25zdCBSQU5HRV9FU0NBUEVfQ0hBUlMgPSBbXCItXCIsIFwiXFxcXFwiLCBcIl1cIl0gYXMgY29uc3Q7XG5cbnR5cGUgUmVnRXhwRXNjYXBlQ2hhciA9IHR5cGVvZiBSRUdfRVhQX0VTQ0FQRV9DSEFSU1tudW1iZXJdO1xudHlwZSBSYW5nZUVzY2FwZUNoYXIgPSB0eXBlb2YgUkFOR0VfRVNDQVBFX0NIQVJTW251bWJlcl07XG50eXBlIEVzY2FwZUNoYXIgPSBSZWdFeHBFc2NhcGVDaGFyIHwgUmFuZ2VFc2NhcGVDaGFyO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JDb25zdGFudHMge1xuICBzZXA6IHN0cmluZztcbiAgc2VwTWF5YmU6IHN0cmluZztcbiAgc2Vwczogc3RyaW5nW107XG4gIGdsb2JzdGFyOiBzdHJpbmc7XG4gIHdpbGRjYXJkOiBzdHJpbmc7XG4gIGVzY2FwZVByZWZpeDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dsb2JUb1JlZ0V4cChcbiAgYzogR2xvYkNvbnN0YW50cyxcbiAgZ2xvYjogc3RyaW5nLFxuICB7XG4gICAgZXh0ZW5kZWQgPSB0cnVlLFxuICAgIGdsb2JzdGFyOiBnbG9ic3Rhck9wdGlvbiA9IHRydWUsXG4gICAgLy8gb3MgPSBvc1R5cGUsXG4gICAgY2FzZUluc2Vuc2l0aXZlID0gZmFsc2UsXG4gIH06IEdsb2JPcHRpb25zID0ge30sXG4pOiBSZWdFeHAge1xuICBpZiAoZ2xvYiA9PT0gXCJcIikge1xuICAgIHJldHVybiAvKD8hKS87XG4gIH1cblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2VwYXJhdG9ycy5cbiAgbGV0IG5ld0xlbmd0aCA9IGdsb2IubGVuZ3RoO1xuICBmb3IgKDsgbmV3TGVuZ3RoID4gMSAmJiBjLnNlcHMuaW5jbHVkZXMoZ2xvYltuZXdMZW5ndGggLSAxXSEpOyBuZXdMZW5ndGgtLSk7XG4gIGdsb2IgPSBnbG9iLnNsaWNlKDAsIG5ld0xlbmd0aCk7XG5cbiAgbGV0IHJlZ0V4cFN0cmluZyA9IFwiXCI7XG5cbiAgLy8gVGVybWluYXRlcyBjb3JyZWN0bHkuIFRydXN0IHRoYXQgYGpgIGlzIGluY3JlbWVudGVkIGV2ZXJ5IGl0ZXJhdGlvbi5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iLmxlbmd0aDspIHtcbiAgICBsZXQgc2VnbWVudCA9IFwiXCI7XG4gICAgY29uc3QgZ3JvdXBTdGFjazogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgaW5SYW5nZSA9IGZhbHNlO1xuICAgIGxldCBpbkVzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBlbmRzV2l0aFNlcCA9IGZhbHNlO1xuICAgIGxldCBpID0gajtcblxuICAgIC8vIFRlcm1pbmF0ZXMgd2l0aCBgaWAgYXQgdGhlIG5vbi1pbmNsdXNpdmUgZW5kIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQuXG4gICAgZm9yICg7IGkgPCBnbG9iLmxlbmd0aCAmJiAhYy5zZXBzLmluY2x1ZGVzKGdsb2JbaV0hKTsgaSsrKSB7XG4gICAgICBpZiAoaW5Fc2NhcGUpIHtcbiAgICAgICAgaW5Fc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXNjYXBlQ2hhcnMgPSAoaW5SYW5nZVxuICAgICAgICAgID8gUkFOR0VfRVNDQVBFX0NIQVJTXG4gICAgICAgICAgOiBSRUdfRVhQX0VTQ0FQRV9DSEFSUykgYXMgdW5rbm93biBhcyBFc2NhcGVDaGFyW107XG4gICAgICAgIHNlZ21lbnQgKz0gZXNjYXBlQ2hhcnMuaW5jbHVkZXMoZ2xvYltpXSEgYXMgRXNjYXBlQ2hhcilcbiAgICAgICAgICA/IGBcXFxcJHtnbG9iW2ldfWBcbiAgICAgICAgICA6IGdsb2JbaV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PT0gYy5lc2NhcGVQcmVmaXgpIHtcbiAgICAgICAgaW5Fc2NhcGUgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwiW1wiKSB7XG4gICAgICAgIGlmICghaW5SYW5nZSkge1xuICAgICAgICAgIGluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgIHNlZ21lbnQgKz0gXCJbXCI7XG4gICAgICAgICAgaWYgKGdsb2JbaSArIDFdID09PSBcIiFcIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgc2VnbWVudCArPSBcIl5cIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGdsb2JbaSArIDFdID09PSBcIl5cIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgc2VnbWVudCArPSBcIlxcXFxeXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGdsb2JbaSArIDFdID09PSBcIjpcIikge1xuICAgICAgICAgIGxldCBrID0gaSArIDE7XG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoZ2xvYltrICsgMV0gIT09IHVuZGVmaW5lZCAmJiBnbG9iW2sgKyAxXSAhPT0gXCI6XCIpIHtcbiAgICAgICAgICAgIHZhbHVlICs9IGdsb2JbayArIDFdO1xuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZ2xvYltrICsgMV0gPT09IFwiOlwiICYmIGdsb2JbayArIDJdID09PSBcIl1cIikge1xuICAgICAgICAgICAgaSA9IGsgKyAyO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcImFsbnVtXCIpIHNlZ21lbnQgKz0gXCJcXFxcZEEtWmEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiYWxwaGFcIikgc2VnbWVudCArPSBcIkEtWmEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiYXNjaWlcIikgc2VnbWVudCArPSBcIlxceDAwLVxceDdGXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJibGFua1wiKSBzZWdtZW50ICs9IFwiXFx0IFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiY250cmxcIikgc2VnbWVudCArPSBcIlxceDAwLVxceDFGXFx4N0ZcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBcImRpZ2l0XCIpIHNlZ21lbnQgKz0gXCJcXFxcZFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiZ3JhcGhcIikgc2VnbWVudCArPSBcIlxceDIxLVxceDdFXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJsb3dlclwiKSBzZWdtZW50ICs9IFwiYS16XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJwcmludFwiKSBzZWdtZW50ICs9IFwiXFx4MjAtXFx4N0VcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBcInB1bmN0XCIpIHtcbiAgICAgICAgICAgICAgc2VnbWVudCArPSBcIiFcXFwiIyQlJicoKSorLFxcXFwtLi86Ozw9Pj9AW1xcXFxcXFxcXFxcXF1eX+KAmHt8fX5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwic3BhY2VcIikgc2VnbWVudCArPSBcIlxcXFxzXFx2XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ1cHBlclwiKSBzZWdtZW50ICs9IFwiQS1aXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ3b3JkXCIpIHNlZ21lbnQgKz0gXCJcXFxcd1wiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwieGRpZ2l0XCIpIHNlZ21lbnQgKz0gXCJcXFxcZEEtRmEtZlwiO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIl1cIiAmJiBpblJhbmdlKSB7XG4gICAgICAgIGluUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudCArPSBcIl1cIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpblJhbmdlKSB7XG4gICAgICAgIHNlZ21lbnQgKz0gZ2xvYltpXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZ2xvYltpXSA9PT0gXCIpXCIgJiYgZ3JvdXBTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSAhPT0gXCJCUkFDRVwiXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudCArPSBcIilcIjtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdyb3VwU3RhY2sucG9wKCkhO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCIhXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IGMud2lsZGNhcmQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gXCJAXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZ2xvYltpXSA9PT0gXCJ8XCIgJiYgZ3JvdXBTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSAhPT0gXCJCUkFDRVwiXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudCArPSBcInxcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIitcIiAmJiBleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PT0gXCIoXCIpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCIrXCIpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PT0gXCJAXCIgJiYgZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT09IFwiKFwiKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiQFwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwiP1wiKSB7XG4gICAgICAgIGlmIChleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiP1wiKTtcbiAgICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCArPSBcIi5cIjtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwiIVwiICYmIGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09PSBcIihcIikge1xuICAgICAgICBpKys7XG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChcIiFcIik7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIoPyFcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIntcIikge1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCJCUkFDRVwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT09IFwifVwiICYmIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSA9PT0gXCJCUkFDRVwiKSB7XG4gICAgICAgIGdyb3VwU3RhY2sucG9wKCk7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIpXCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PT0gXCIsXCIgJiYgZ3JvdXBTdGFja1tncm91cFN0YWNrLmxlbmd0aCAtIDFdID09PSBcIkJSQUNFXCIpIHtcbiAgICAgICAgc2VnbWVudCArPSBcInxcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09PSBcIipcIikge1xuICAgICAgICBpZiAoZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGdyb3VwU3RhY2sucHVzaChcIipcIik7XG4gICAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHByZXZDaGFyID0gZ2xvYltpIC0gMV07XG4gICAgICAgICAgbGV0IG51bVN0YXJzID0gMTtcbiAgICAgICAgICB3aGlsZSAoZ2xvYltpICsgMV0gPT09IFwiKlwiKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBudW1TdGFycysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGdsb2JbaSArIDFdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdsb2JzdGFyT3B0aW9uICYmIG51bVN0YXJzID09PSAyICYmXG4gICAgICAgICAgICBbLi4uYy5zZXBzLCB1bmRlZmluZWRdLmluY2x1ZGVzKHByZXZDaGFyKSAmJlxuICAgICAgICAgICAgWy4uLmMuc2VwcywgdW5kZWZpbmVkXS5pbmNsdWRlcyhuZXh0Q2hhcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlZ21lbnQgKz0gYy5nbG9ic3RhcjtcbiAgICAgICAgICAgIGVuZHNXaXRoU2VwID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VnbWVudCArPSBjLndpbGRjYXJkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCArPSBSRUdfRVhQX0VTQ0FQRV9DSEFSUy5pbmNsdWRlcyhnbG9iW2ldISBhcyBSZWdFeHBFc2NhcGVDaGFyKVxuICAgICAgICA/IGBcXFxcJHtnbG9iW2ldfWBcbiAgICAgICAgOiBnbG9iW2ldO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB1bmNsb3NlZCBncm91cHMgb3IgYSBkYW5nbGluZyBiYWNrc2xhc2guXG4gICAgaWYgKGdyb3VwU3RhY2subGVuZ3RoID4gMCB8fCBpblJhbmdlIHx8IGluRXNjYXBlKSB7XG4gICAgICAvLyBQYXJzZSBmYWlsdXJlLiBUYWtlIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzZWdtZW50IGxpdGVyYWxseS5cbiAgICAgIHNlZ21lbnQgPSBcIlwiO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGdsb2Iuc2xpY2UoaiwgaSkpIHtcbiAgICAgICAgc2VnbWVudCArPSBSRUdfRVhQX0VTQ0FQRV9DSEFSUy5pbmNsdWRlcyhjIGFzIFJlZ0V4cEVzY2FwZUNoYXIpXG4gICAgICAgICAgPyBgXFxcXCR7Y31gXG4gICAgICAgICAgOiBjO1xuICAgICAgICBlbmRzV2l0aFNlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZ0V4cFN0cmluZyArPSBzZWdtZW50O1xuICAgIGlmICghZW5kc1dpdGhTZXApIHtcbiAgICAgIHJlZ0V4cFN0cmluZyArPSBpIDwgZ2xvYi5sZW5ndGggPyBjLnNlcCA6IGMuc2VwTWF5YmU7XG4gICAgICBlbmRzV2l0aFNlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVGVybWluYXRlcyB3aXRoIGBpYCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2VnbWVudC5cbiAgICB3aGlsZSAoYy5zZXBzLmluY2x1ZGVzKGdsb2JbaV0hKSkgaSsrO1xuXG4gICAgaiA9IGk7XG4gIH1cblxuICByZWdFeHBTdHJpbmcgPSBgXiR7cmVnRXhwU3RyaW5nfSRgO1xuICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeHBTdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZSA/IFwiaVwiIDogXCJcIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7O0NBR0MsR0F1QkQsTUFBTSx1QkFBdUI7RUFDM0I7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNEO0FBQ0QsTUFBTSxxQkFBcUI7RUFBQztFQUFLO0VBQU07Q0FBSTtBQWUzQyxPQUFPLFNBQVMsY0FDZCxDQUFnQixFQUNoQixJQUFZLEVBQ1osRUFDRSxXQUFXLElBQUksRUFDZixVQUFVLGlCQUFpQixJQUFJLEVBQy9CLGVBQWU7QUFDZixrQkFBa0IsS0FBSyxFQUNYLEdBQUcsQ0FBQyxDQUFDO0VBRW5CLElBQUksU0FBUyxJQUFJO0lBQ2YsT0FBTztFQUNUO0VBRUEsOEJBQThCO0VBQzlCLElBQUksWUFBWSxLQUFLLE1BQU07RUFDM0IsTUFBTyxZQUFZLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBSTtFQUMvRCxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUc7RUFFckIsSUFBSSxlQUFlO0VBRW5CLHVFQUF1RTtFQUN2RSxJQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLEVBQUc7SUFDaEMsSUFBSSxVQUFVO0lBQ2QsTUFBTSxhQUF1QixFQUFFO0lBQy9CLElBQUksVUFBVTtJQUNkLElBQUksV0FBVztJQUNmLElBQUksY0FBYztJQUNsQixJQUFJLElBQUk7SUFFUix1RUFBdUU7SUFDdkUsTUFBTyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUksSUFBSztNQUN6RCxJQUFJLFVBQVU7UUFD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
+// denoCacheMetadata=14023822740281142119,2406781536396885475 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6a34c89abc1f2de5e2abf89333e993b3cd10d3aaa33652f033913f0e59218890.js b/vendor/gen/https/jsr.io/6a34c89abc1f2de5e2abf89333e993b3cd10d3aaa33652f033913f0e59218890.js
new file mode 100644
index 0000000..f1e083e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6a34c89abc1f2de5e2abf89333e993b3cd10d3aaa33652f033913f0e59218890.js
@@ -0,0 +1,93 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isEOL } from "./_chars.ts";
+import { LoaderState } from "./_loader_state.ts";
+import { SCHEMA_MAP } from "./_schema.ts";
+function sanitizeInput(input) {
+ input = String(input);
+ if (input.length > 0) {
+ // Add trailing `\n` if not exists
+ if (!isEOL(input.charCodeAt(input.length - 1))) input += "\n";
+ // Strip BOM
+ if (input.charCodeAt(0) === 0xfeff) input = input.slice(1);
+ }
+ // Use 0 as string terminator. That significantly simplifies bounds check.
+ input += "\0";
+ return input;
+}
+/**
+ * Parse and return a YAML string as a parsed YAML document object.
+ *
+ * Note: This does not support functions. Untrusted data is safe to parse.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/yaml/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const data = parse(`
+ * id: 1
+ * name: Alice
+ * `);
+ *
+ * assertEquals(data, { id: 1, name: "Alice" });
+ * ```
+ *
+ * @throws {SyntaxError} Throws error on invalid YAML.
+ * @param content YAML string to parse.
+ * @param options Parsing options.
+ * @returns Parsed document.
+ */ export function parse(content, options = {}) {
+ content = sanitizeInput(content);
+ const state = new LoaderState(content, {
+ ...options,
+ schema: SCHEMA_MAP.get(options.schema)
+ });
+ const documentGenerator = state.readDocuments();
+ const document = documentGenerator.next().value;
+ if (!documentGenerator.next().done) {
+ throw new SyntaxError("Found more than 1 document in the stream: expected a single document");
+ }
+ return document ?? null;
+}
+/**
+ * Same as {@linkcode parse}, but understands multi-document YAML sources, and
+ * returns multiple parsed YAML document objects.
+ *
+ * @example Usage
+ * ```ts
+ * import { parseAll } from "@std/yaml/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const data = parseAll(`
+ * ---
+ * id: 1
+ * name: Alice
+ * ---
+ * id: 2
+ * name: Bob
+ * ---
+ * id: 3
+ * name: Eve
+ * `);
+ * assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]);
+ * ```
+ *
+ * @param content YAML string to parse.
+ * @param options Parsing options.
+ * @returns Array of parsed documents.
+ */ export function parseAll(content, options = {}) {
+ content = sanitizeInput(content);
+ const state = new LoaderState(content, {
+ ...options,
+ schema: SCHEMA_MAP.get(options.schema)
+ });
+ return [
+ ...state.readDocuments()
+ ];
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9wYXJzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc0VPTCB9IGZyb20gXCIuL19jaGFycy50c1wiO1xuaW1wb3J0IHsgTG9hZGVyU3RhdGUgfSBmcm9tIFwiLi9fbG9hZGVyX3N0YXRlLnRzXCI7XG5pbXBvcnQgeyBTQ0hFTUFfTUFQLCB0eXBlIFNjaGVtYVR5cGUgfSBmcm9tIFwiLi9fc2NoZW1hLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgU2NoZW1hVHlwZSB9O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBwYXJzZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzY2hlbWEgdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7XCJkZWZhdWx0XCJ9XG4gICAqL1xuICBzY2hlbWE/OiBTY2hlbWFUeXBlO1xuICAvKipcbiAgICogSWYgYHRydWVgLCBkdXBsaWNhdGUga2V5cyB3aWxsIG92ZXJ3cml0ZSBwcmV2aW91cyB2YWx1ZXMuIE90aGVyd2lzZSxcbiAgICogZHVwbGljYXRlIGtleXMgd2lsbCB0aHJvdyBhIHtAbGlua2NvZGUgU3ludGF4RXJyb3J9LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBhbGxvd0R1cGxpY2F0ZUtleXM/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgZGVmaW5lZCwgYSBmdW5jdGlvbiB0byBjYWxsIG9uIHdhcm5pbmcgbWVzc2FnZXMgdGFraW5nIGFuXG4gICAqIHtAbGlua2NvZGUgRXJyb3J9IGFzIGl0cyBvbmx5IGFyZ3VtZW50LlxuICAgKi9cbiAgb25XYXJuaW5nPyhlcnJvcjogRXJyb3IpOiB2b2lkO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUlucHV0KGlucHV0OiBzdHJpbmcpIHtcbiAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXG4gIGlmIChpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgLy8gQWRkIHRyYWlsaW5nIGBcXG5gIGlmIG5vdCBleGlzdHNcbiAgICBpZiAoIWlzRU9MKGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkpKSBpbnB1dCArPSBcIlxcblwiO1xuXG4gICAgLy8gU3RyaXAgQk9NXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDB4ZmVmZikgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgfVxuXG4gIC8vIFVzZSAwIGFzIHN0cmluZyB0ZXJtaW5hdG9yLiBUaGF0IHNpZ25pZmljYW50bHkgc2ltcGxpZmllcyBib3VuZHMgY2hlY2suXG4gIGlucHV0ICs9IFwiXFwwXCI7XG5cbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCByZXR1cm4gYSBZQU1MIHN0cmluZyBhcyBhIHBhcnNlZCBZQU1MIGRvY3VtZW50IG9iamVjdC5cbiAqXG4gKiBOb3RlOiBUaGlzIGRvZXMgbm90IHN1cHBvcnQgZnVuY3Rpb25zLiBVbnRydXN0ZWQgZGF0YSBpcyBzYWZlIHRvIHBhcnNlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQHN0ZC95YW1sL3BhcnNlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBkYXRhID0gcGFyc2UoYFxuICogaWQ6IDFcbiAqIG5hbWU6IEFsaWNlXG4gKiBgKTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZGF0YSwgeyBpZDogMSwgbmFtZTogXCJBbGljZVwiIH0pO1xuICogYGBgXG4gKlxuICogQHRocm93cyB7U3ludGF4RXJyb3J9IFRocm93cyBlcnJvciBvbiBpbnZhbGlkIFlBTUwuXG4gKiBAcGFyYW0gY29udGVudCBZQU1MIHN0cmluZyB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIFBhcnNpbmcgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFBhcnNlZCBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBhcnNlT3B0aW9ucyA9IHt9LFxuKTogdW5rbm93biB7XG4gIGNvbnRlbnQgPSBzYW5pdGl6ZUlucHV0KGNvbnRlbnQpO1xuICBjb25zdCBzdGF0ZSA9IG5ldyBMb2FkZXJTdGF0ZShjb250ZW50LCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBzY2hlbWE6IFNDSEVNQV9NQVAuZ2V0KG9wdGlvbnMuc2NoZW1hISkhLFxuICB9KTtcbiAgY29uc3QgZG9jdW1lbnRHZW5lcmF0b3IgPSBzdGF0ZS5yZWFkRG9jdW1lbnRzKCk7XG4gIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRHZW5lcmF0b3IubmV4dCgpLnZhbHVlO1xuICBpZiAoIWRvY3VtZW50R2VuZXJhdG9yLm5leHQoKS5kb25lKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgXCJGb3VuZCBtb3JlIHRoYW4gMSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtOiBleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudFwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50ID8/IG51bGw7XG59XG5cbi8qKlxuICogU2FtZSBhcyB7QGxpbmtjb2RlIHBhcnNlfSwgYnV0IHVuZGVyc3RhbmRzIG11bHRpLWRvY3VtZW50IFlBTUwgc291cmNlcywgYW5kXG4gKiByZXR1cm5zIG11bHRpcGxlIHBhcnNlZCBZQU1MIGRvY3VtZW50IG9iamVjdHMuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZUFsbCB9IGZyb20gXCJAc3RkL3lhbWwvcGFyc2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGRhdGEgPSBwYXJzZUFsbChgXG4gKiAtLS1cbiAqIGlkOiAxXG4gKiBuYW1lOiBBbGljZVxuICogLS0tXG4gKiBpZDogMlxuICogbmFtZTogQm9iXG4gKiAtLS1cbiAqIGlkOiAzXG4gKiBuYW1lOiBFdmVcbiAqIGApO1xuICogYXNzZXJ0RXF1YWxzKGRhdGEsIFsgeyBpZDogMSwgbmFtZTogXCJBbGljZVwiIH0sIHsgaWQ6IDIsIG5hbWU6IFwiQm9iXCIgfSwgeyBpZDogMywgbmFtZTogXCJFdmVcIiB9XSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY29udGVudCBZQU1MIHN0cmluZyB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIFBhcnNpbmcgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHBhcnNlZCBkb2N1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbChjb250ZW50OiBzdHJpbmcsIG9wdGlvbnM6IFBhcnNlT3B0aW9ucyA9IHt9KTogdW5rbm93biB7XG4gIGNvbnRlbnQgPSBzYW5pdGl6ZUlucHV0KGNvbnRlbnQpO1xuICBjb25zdCBzdGF0ZSA9IG5ldyBMb2FkZXJTdGF0ZShjb250ZW50LCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBzY2hlbWE6IFNDSEVNQV9NQVAuZ2V0KG9wdGlvbnMuc2NoZW1hISkhLFxuICB9KTtcbiAgcmV0dXJuIFsuLi5zdGF0ZS5yZWFkRG9jdW1lbnRzKCldO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvRkFBb0Y7QUFDcEYsMEVBQTBFO0FBQzFFLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxLQUFLLFFBQVEsY0FBYztBQUNwQyxTQUFTLFdBQVcsUUFBUSxxQkFBcUI7QUFDakQsU0FBUyxVQUFVLFFBQXlCLGVBQWU7QUEwQjNELFNBQVMsY0FBYyxLQUFhO0VBQ2xDLFFBQVEsT0FBTztFQUVmLElBQUksTUFBTSxNQUFNLEdBQUcsR0FBRztJQUNwQixrQ0FBa0M7SUFDbEMsSUFBSSxDQUFDLE1BQU0sTUFBTSxVQUFVLENBQUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxTQUFTO0lBRXpELFlBQVk7SUFDWixJQUFJLE1BQU0sVUFBVSxDQUFDLE9BQU8sUUFBUSxRQUFRLE1BQU0sS0FBSyxDQUFDO0VBQzFEO0VBRUEsMEVBQTBFO0VBQzFFLFNBQVM7RUFFVCxPQUFPO0FBQ1Q7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNCQyxHQUNELE9BQU8sU0FBUyxNQUNkLE9BQWUsRUFDZixVQUF3QixDQUFDLENBQUM7RUFFMUIsVUFBVSxjQUFjO0VBQ3hCLE1BQU0sUUFBUSxJQUFJLFlBQVksU0FBUztJQUNyQyxHQUFHLE9BQU87SUFDVixRQUFRLFdBQVcsR0FBRyxDQUFDLFFBQVEsTUFBTTtFQUN2QztFQUNBLE1BQU0sb0JBQW9CLE1BQU0sYUFBYTtFQUM3QyxNQUFNLFdBQVcsa0JBQWtCLElBQUksR0FBRyxLQUFLO0VBQy9DLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLElBQUksRUFBRTtJQUNsQyxNQUFNLElBQUksWUFDUjtFQUVKO0VBQ0EsT0FBTyxZQUFZO0FBQ3JCO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMEJDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsT0FBZSxFQUFFLFVBQXdCLENBQUMsQ0FBQztFQUNsRSxVQUFVLGNBQWM7RUFDeEIsTUFBTSxRQUFRLElBQUksWUFBWSxTQUFTO0lBQ3JDLEdBQUcsT0FBTztJQUNWLFFBQVEsV0FBVyxHQUFHLENBQUMsUUFBUSxNQUFNO0VBQ3ZDO0VBQ0EsT0FBTztPQUFJLE1BQU0sYUFBYTtHQUFHO0FBQ25DIn0=
+// denoCacheMetadata=14411214152827362767,2587073948749365229 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6b0fe05b55b67d65e900040720f1786785fe3230bb279928ba030016c815aeff.js b/vendor/gen/https/jsr.io/6b0fe05b55b67d65e900040720f1786785fe3230bb279928ba030016c815aeff.js
new file mode 100644
index 0000000..2595722
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6b0fe05b55b67d65e900040720f1786785fe3230bb279928ba030016c815aeff.js
@@ -0,0 +1,31 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/from_file_url.ts";
+/**
+ * Converts a file URL to a path string.
+ *
+ * @example Usage
+ * ```ts
+ * import { fromFileUrl } from "@std/path/windows/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
+ * assertEquals(fromFileUrl("file:///C:/Users/foo"), "C:\\Users\\foo");
+ * assertEquals(fromFileUrl("file://localhost/home/foo"), "\\home\\foo");
+ * ```
+ *
+ * @param url The file URL to convert.
+ * @returns The path string.
+ */ export function fromFileUrl(url) {
+ url = assertArg(url);
+ let path = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
+ if (url.hostname !== "") {
+ // Note: The `URL` implementation guarantees that the drive letter and
+ // hostname are mutually exclusive. Otherwise it would not have been valid
+ // to append the hostname and path like this.
+ path = `\\\\${url.hostname}${path}`;
+ }
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2Zyb21fZmlsZV91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vZnJvbV9maWxlX3VybC50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsZSBVUkwgdG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2Zyb20tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vaG9tZS9mb29cIiksIFwiXFxcXGhvbWVcXFxcZm9vXCIpO1xuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIiksIFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpO1xuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovL2xvY2FsaG9zdC9ob21lL2Zvb1wiKSwgXCJcXFxcaG9tZVxcXFxmb29cIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXJsIFRoZSBmaWxlIFVSTCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBVUkwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICB1cmwgPSBhc3NlcnRBcmcodXJsKTtcbiAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLy9nLCBcIlxcXFxcIikucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKS5yZXBsYWNlKC9eXFxcXCooW0EtWmEtel06KShcXFxcfCQpLywgXCIkMVxcXFxcIik7XG4gIGlmICh1cmwuaG9zdG5hbWUgIT09IFwiXCIpIHtcbiAgICAvLyBOb3RlOiBUaGUgYFVSTGAgaW1wbGVtZW50YXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgYW5kXG4gICAgLy8gaG9zdG5hbWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gT3RoZXJ3aXNlIGl0IHdvdWxkIG5vdCBoYXZlIGJlZW4gdmFsaWRcbiAgICAvLyB0byBhcHBlbmQgdGhlIGhvc3RuYW1lIGFuZCBwYXRoIGxpa2UgdGhpcy5cbiAgICBwYXRoID0gYFxcXFxcXFxcJHt1cmwuaG9zdG5hbWV9JHtwYXRofWA7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSw4QkFBOEI7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBQ0QsT0FBTyxTQUFTLFlBQVksR0FBaUI7RUFDM0MsTUFBTSxVQUFVO0VBQ2hCLElBQUksT0FBTyxtQkFDVCxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxNQUFNLE9BQU8sQ0FBQyx3QkFBd0IsUUFDbEUsT0FBTyxDQUFDLHlCQUF5QjtFQUNuQyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUk7SUFDdkIsc0VBQXNFO0lBQ3RFLDBFQUEwRTtJQUMxRSw2Q0FBNkM7SUFDN0MsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNO0VBQ3JDO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=11528200222592288066,710286884957873560 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6b4d93c891018ad595cf8ce1de36ba2333f9ab24ae6ffb40b9c56bee82480636.js b/vendor/gen/https/jsr.io/6b4d93c891018ad595cf8ce1de36ba2333f9ab24ae6ffb40b9c56bee82480636.js
new file mode 100644
index 0000000..7d3bf6d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6b4d93c891018ad595cf8ce1de36ba2333f9ab24ae6ffb40b9c56bee82480636.js
@@ -0,0 +1,11 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+export function assertArg(url) {
+ url = url instanceof URL ? url : new URL(url);
+ if (url.protocol !== "file:") {
+ throw new TypeError(`URL must be a file URL: received "${url.protocol}"`);
+ }
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2Zyb21fZmlsZV91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFyZyh1cmw6IFVSTCB8IHN0cmluZykge1xuICB1cmwgPSB1cmwgaW5zdGFuY2VvZiBVUkwgPyB1cmwgOiBuZXcgVVJMKHVybCk7XG4gIGlmICh1cmwucHJvdG9jb2wgIT09IFwiZmlsZTpcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVVJMIG11c3QgYmUgYSBmaWxlIFVSTDogcmVjZWl2ZWQgXCIke3VybC5wcm90b2NvbH1cImAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsT0FBTyxTQUFTLFVBQVUsR0FBaUI7RUFDekMsTUFBTSxlQUFlLE1BQU0sTUFBTSxJQUFJLElBQUk7RUFDekMsSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTO0lBQzVCLE1BQU0sSUFBSSxVQUNSLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBRXhEO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=13899213134167469369,301577986770782634 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6dc153e700218eaf14764539b39826de198c3a73de2cc26f56ef42136a3dde49.js b/vendor/gen/https/jsr.io/6dc153e700218eaf14764539b39826de198c3a73de2cc26f56ef42136a3dde49.js
new file mode 100644
index 0000000..f2b15ad
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6dc153e700218eaf14764539b39826de198c3a73de2cc26f56ef42136a3dde49.js
@@ -0,0 +1,41 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { extractFrontMatter } from "./_shared.ts";
+import { parse } from "jsr:@std/toml@^1.0.3/parse";
+import { EXTRACT_TOML_REGEXP } from "./_formats.ts";
+/**
+ * Extracts and parses {@link https://toml.io | TOML} from the metadata of
+ * front matter content.
+ *
+ * @example Extract TOML front matter
+ * ```ts
+ * import { extract } from "@std/front-matter/toml";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const output = `---toml
+ * title = "Three dashes marks the spot"
+ * ---
+ * Hello, world!`;
+ * const result = extract(output);
+ *
+ * assertEquals(result, {
+ * frontMatter: 'title = "Three dashes marks the spot"',
+ * body: "Hello, world!",
+ * attrs: { title: "Three dashes marks the spot" },
+ * });
+ * ```
+ *
+ * @typeParam T The type of the parsed front matter.
+ * @param text The text to extract TOML front matter from.
+ * @returns The extracted TOML front matter and body content.
+ */ export function extract(text) {
+ const { frontMatter, body } = extractFrontMatter(text, EXTRACT_TOML_REGEXP);
+ const attrs = frontMatter ? parse(frontMatter) : {};
+ return {
+ frontMatter,
+ body,
+ attrs
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L3RvbWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgZXh0cmFjdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vX3NoYXJlZC50c1wiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwianNyOkBzdGQvdG9tbEBeMS4wLjMvcGFyc2VcIjtcbmltcG9ydCB0eXBlIHsgRXh0cmFjdCB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBFWFRSQUNUX1RPTUxfUkVHRVhQIH0gZnJvbSBcIi4vX2Zvcm1hdHMudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBFeHRyYWN0IH07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHBhcnNlcyB7QGxpbmsgaHR0cHM6Ly90b21sLmlvIHwgVE9NTH0gZnJvbSB0aGUgbWV0YWRhdGEgb2ZcbiAqIGZyb250IG1hdHRlciBjb250ZW50LlxuICpcbiAqIEBleGFtcGxlIEV4dHJhY3QgVE9NTCBmcm9udCBtYXR0ZXJcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRyYWN0IH0gZnJvbSBcIkBzdGQvZnJvbnQtbWF0dGVyL3RvbWxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IG91dHB1dCA9IGAtLS10b21sXG4gKiB0aXRsZSA9IFwiVGhyZWUgZGFzaGVzIG1hcmtzIHRoZSBzcG90XCJcbiAqIC0tLVxuICogSGVsbG8sIHdvcmxkIWA7XG4gKiBjb25zdCByZXN1bHQgPSBleHRyYWN0KG91dHB1dCk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHJlc3VsdCwge1xuICogICBmcm9udE1hdHRlcjogJ3RpdGxlID0gXCJUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3RcIicsXG4gKiAgIGJvZHk6IFwiSGVsbG8sIHdvcmxkIVwiLFxuICogICBhdHRyczogeyB0aXRsZTogXCJUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3RcIiB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIFQgVGhlIHR5cGUgb2YgdGhlIHBhcnNlZCBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBleHRyYWN0IFRPTUwgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZXh0cmFjdGVkIFRPTUwgZnJvbnQgbWF0dGVyIGFuZCBib2R5IGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0PFQ+KHRleHQ6IHN0cmluZyk6IEV4dHJhY3Q8VD4ge1xuICBjb25zdCB7IGZyb250TWF0dGVyLCBib2R5IH0gPSBleHRyYWN0RnJvbnRNYXR0ZXIodGV4dCwgRVhUUkFDVF9UT01MX1JFR0VYUCk7XG5cbiAgY29uc3QgYXR0cnMgPSAoZnJvbnRNYXR0ZXIgPyBwYXJzZShmcm9udE1hdHRlcikgOiB7fSkgYXMgVDtcbiAgcmV0dXJuIHsgZnJvbnRNYXR0ZXIsIGJvZHksIGF0dHJzIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLGtCQUFrQixRQUFRLGVBQWU7QUFDbEQsU0FBUyxLQUFLLFFBQVEsNkJBQTZCO0FBRW5ELFNBQVMsbUJBQW1CLFFBQVEsZ0JBQWdCO0FBSXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUJDLEdBQ0QsT0FBTyxTQUFTLFFBQVcsSUFBWTtFQUNyQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLG1CQUFtQixNQUFNO0VBRXZELE1BQU0sUUFBUyxjQUFjLE1BQU0sZUFBZSxDQUFDO0VBQ25ELE9BQU87SUFBRTtJQUFhO0lBQU07RUFBTTtBQUNwQyJ9
+// denoCacheMetadata=15434664675513041108,14144867996205728024 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6e25cb4ac2850b01023cf179359c85777db38a8dd21d87c852a04d7ea74493fc.js b/vendor/gen/https/jsr.io/6e25cb4ac2850b01023cf179359c85777db38a8dd21d87c852a04d7ea74493fc.js
new file mode 100644
index 0000000..f196bef
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6e25cb4ac2850b01023cf179359c85777db38a8dd21d87c852a04d7ea74493fc.js
@@ -0,0 +1,139 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON } from "../_common/constants.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Resolves path segments into a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { resolve } from "@std/path/windows/resolve";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const resolved = resolve("C:\\foo\\bar", "..\\baz");
+ * assertEquals(resolved, "C:\\foo\\baz");
+ * ```
+ *
+ * @param pathSegments The path segments to process to path
+ * @returns The resolved path
+ */ export function resolve(...pathSegments) {
+ let resolvedDevice = "";
+ let resolvedTail = "";
+ let resolvedAbsolute = false;
+ for(let i = pathSegments.length - 1; i >= -1; i--){
+ let path;
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (i >= 0) {
+ path = pathSegments[i];
+ } else if (!resolvedDevice) {
+ if (typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a drive-letter-less path without a current working directory (CWD)");
+ }
+ path = Deno.cwd();
+ } else {
+ if (typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a relative path without a current working directory (CWD)");
+ }
+ path = Deno.cwd();
+ // Verify that a cwd was found and that it actually points
+ // to our drive. If not, default to the drive's root.
+ if (path === undefined || path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
+ path = `${resolvedDevice}\\`;
+ }
+ }
+ assertPath(path);
+ const len = path.length;
+ // Skip empty entries
+ if (len === 0) continue;
+ let rootEnd = 0;
+ let device = "";
+ let isAbsolute = false;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ // If we started with a separator, we know we at least have an
+ // absolute path of some kind (UNC or otherwise)
+ isAbsolute = true;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ const firstPart = path.slice(last, j);
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ device = `\\\\${firstPart}\\${path.slice(last)}`;
+ rootEnd = j;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
+ rootEnd = j;
+ }
+ }
+ }
+ } else {
+ rootEnd = 1;
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ device = path.slice(0, 2);
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ // Treat separator following drive name as an absolute path
+ // indicator
+ isAbsolute = true;
+ rootEnd = 3;
+ }
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator
+ rootEnd = 1;
+ isAbsolute = true;
+ }
+ if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
+ continue;
+ }
+ if (resolvedDevice.length === 0 && device.length > 0) {
+ resolvedDevice = device;
+ }
+ if (!resolvedAbsolute) {
+ resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
+ resolvedAbsolute = isAbsolute;
+ }
+ if (resolvedAbsolute && resolvedDevice.length > 0) break;
+ }
+ // At this point the path should be resolved to a full absolute path,
+ // but handle relative paths to be safe (might happen when Deno.cwd()
+ // fails)
+ // Normalize the tail path
+ resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
+ return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL3Jlc29sdmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgQ0hBUl9DT0xPTiB9IGZyb20gXCIuLi9fY29tbW9uL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSBcIi4uL19jb21tb24vbm9ybWFsaXplX3N0cmluZy50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0UGF0aCB9IGZyb20gXCIuLi9fY29tbW9uL2Fzc2VydF9wYXRoLnRzXCI7XG5pbXBvcnQgeyBpc1BhdGhTZXBhcmF0b3IsIGlzV2luZG93c0RldmljZVJvb3QgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggc2VnbWVudHMgaW50byBhIGBwYXRoYC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvcmVzb2x2ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKFwiQzpcXFxcZm9vXFxcXGJhclwiLCBcIi4uXFxcXGJhelwiKTtcbiAqIGFzc2VydEVxdWFscyhyZXNvbHZlZCwgXCJDOlxcXFxmb29cXFxcYmF6XCIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGhTZWdtZW50cyBUaGUgcGF0aCBzZWdtZW50cyB0byBwcm9jZXNzIHRvIHBhdGhcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgcmVzb2x2ZWREZXZpY2UgPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRUYWlsID0gXCJcIjtcbiAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTE7IGktLSkge1xuICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB7IERlbm8gfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHBhdGggPSBwYXRoU2VnbWVudHNbaV0hO1xuICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkRGV2aWNlKSB7XG4gICAgICBpZiAodHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJSZXNvbHZlZCBhIGRyaXZlLWxldHRlci1sZXNzIHBhdGggd2l0aG91dCBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBEZW5vPy5lbnY/LmdldCAhPT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBEZW5vPy5jd2QgIT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBhIGN3ZCB3YXMgZm91bmQgYW5kIHRoYXQgaXQgYWN0dWFsbHkgcG9pbnRzXG4gICAgICAvLyB0byBvdXIgZHJpdmUuIElmIG5vdCwgZGVmYXVsdCB0byB0aGUgZHJpdmUncyByb290LlxuICAgICAgaWYgKFxuICAgICAgICBwYXRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgcGF0aC5zbGljZSgwLCAzKS50b0xvd2VyQ2FzZSgpICE9PSBgJHtyZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpfVxcXFxgXG4gICAgICApIHtcbiAgICAgICAgcGF0aCA9IGAke3Jlc29sdmVkRGV2aWNlfVxcXFxgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcblxuICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgIGlmIChsZW4gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgbGV0IHJvb3RFbmQgPSAwO1xuICAgIGxldCBkZXZpY2UgPSBcIlwiO1xuICAgIGxldCBpc0Fic29sdXRlID0gZmFsc2U7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgICBpZiAobGVuID4gMSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICAgIC8vIElmIHdlIHN0YXJ0ZWQgd2l0aCBhIHNlcGFyYXRvciwgd2Uga25vdyB3ZSBhdCBsZWFzdCBoYXZlIGFuXG4gICAgICAgIC8vIGFic29sdXRlIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgICAgbGV0IGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gcGF0aC5zbGljZShsYXN0LCBqKTtcbiAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaiA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcbiAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QpfWA7XG4gICAgICAgICAgICAgICAgcm9vdEVuZCA9IGo7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgICAgZGV2aWNlID0gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0LCBqKX1gO1xuICAgICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgICAgZGV2aWNlID0gcGF0aC5zbGljZSgwLCAyKTtcbiAgICAgICAgICByb290RW5kID0gMjtcbiAgICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSB7XG4gICAgICAgICAgICAgIC8vIFRyZWF0IHNlcGFyYXRvciBmb2xsb3dpbmcgZHJpdmUgbmFtZSBhcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgcGF0aCBzZXBhcmF0b3JcbiAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIHJlc29sdmVkRGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIGRldmljZS50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHBhdGggcG9pbnRzIHRvIGFub3RoZXIgZGV2aWNlIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWREZXZpY2UubGVuZ3RoID09PSAwICYmIGRldmljZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNvbHZlZERldmljZSA9IGRldmljZTtcbiAgICB9XG4gICAgaWYgKCFyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICByZXNvbHZlZFRhaWwgPSBgJHtwYXRoLnNsaWNlKHJvb3RFbmQpfVxcXFwke3Jlc29sdmVkVGFpbH1gO1xuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGU7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkQWJzb2x1dGUgJiYgcmVzb2x2ZWREZXZpY2UubGVuZ3RoID4gMCkgYnJlYWs7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCxcbiAgLy8gYnV0IGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBEZW5vLmN3ZCgpXG4gIC8vIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgdGFpbCBwYXRoXG4gIHJlc29sdmVkVGFpbCA9IG5vcm1hbGl6ZVN0cmluZyhcbiAgICByZXNvbHZlZFRhaWwsXG4gICAgIXJlc29sdmVkQWJzb2x1dGUsXG4gICAgXCJcXFxcXCIsXG4gICAgaXNQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIHJldHVybiByZXNvbHZlZERldmljZSArIChyZXNvbHZlZEFic29sdXRlID8gXCJcXFxcXCIgOiBcIlwiKSArIHJlc29sdmVkVGFpbCB8fCBcIi5cIjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsVUFBVSxRQUFRLDBCQUEwQjtBQUNyRCxTQUFTLGVBQWUsUUFBUSxpQ0FBaUM7QUFDakUsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsZUFBZSxFQUFFLG1CQUFtQixRQUFRLGFBQWE7QUFFbEU7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFHLFlBQXNCO0VBQy9DLElBQUksaUJBQWlCO0VBQ3JCLElBQUksZUFBZTtFQUNuQixJQUFJLG1CQUFtQjtFQUV2QixJQUFLLElBQUksSUFBSSxhQUFhLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUs7SUFDbEQsSUFBSTtJQUNKLG1DQUFtQztJQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUc7SUFDakIsSUFBSSxLQUFLLEdBQUc7TUFDVixPQUFPLFlBQVksQ0FBQyxFQUFFO0lBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtNQUMxQixJQUFJLE9BQU8sTUFBTSxRQUFRLFlBQVk7UUFDbkMsTUFBTSxJQUFJLFVBQ1I7TUFFSjtNQUNBLE9BQU8sS0FBSyxHQUFHO0lBQ2pCLE9BQU87TUFDTCxJQUNFLE9BQU8sTUFBTSxLQUFLLFFBQVEsY0FBYyxPQUFPLE1BQU0sUUFBUSxZQUM3RDtRQUNBLE1BQU0sSUFBSSxVQUNSO01BRUo7TUFDQSxPQUFPLEtBQUssR0FBRztNQUVmLDBEQUEwRDtNQUMxRCxxREFBcUQ7TUFDckQsSUFDRSxTQUFTLGFBQ1QsS0FBSyxLQUFLLENBQUMsR0FBRyxHQUFHLFdBQVcsT0FB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
+// denoCacheMetadata=10190520586420333420,9848684562424408665 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/6f8f7f5108dda9845849548f2d97c52a64621c94a50080622cbbd6ad1df18725.js b/vendor/gen/https/jsr.io/6f8f7f5108dda9845849548f2d97c52a64621c94a50080622cbbd6ad1df18725.js
new file mode 100644
index 0000000..8328c68
--- /dev/null
+++ b/vendor/gen/https/jsr.io/6f8f7f5108dda9845849548f2d97c52a64621c94a50080622cbbd6ad1df18725.js
@@ -0,0 +1,20 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+export function stripTrailingSeparators(segment, isSep) {
+ if (segment.length <= 1) {
+ return segment;
+ }
+ let end = segment.length;
+ for(let i = segment.length - 1; i > 0; i--){
+ if (isSep(segment.charCodeAt(i))) {
+ end = i;
+ } else {
+ break;
+ }
+ }
+ return segment.slice(0, end);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL3N0cmlwX3RyYWlsaW5nX3NlcGFyYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdTZXBhcmF0b3JzKFxuICBzZWdtZW50OiBzdHJpbmcsXG4gIGlzU2VwOiAoY2hhcjogbnVtYmVyKSA9PiBib29sZWFuLFxuKTogc3RyaW5nIHtcbiAgaWYgKHNlZ21lbnQubGVuZ3RoIDw9IDEpIHtcbiAgICByZXR1cm4gc2VnbWVudDtcbiAgfVxuXG4gIGxldCBlbmQgPSBzZWdtZW50Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gc2VnbWVudC5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgaWYgKGlzU2VwKHNlZ21lbnQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIGVuZCA9IGk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50LnNsaWNlKDAsIGVuZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELGlEQUFpRDtBQUNqRCw2REFBNkQ7QUFDN0QscUNBQXFDO0FBRXJDLE9BQU8sU0FBUyx3QkFDZCxPQUFlLEVBQ2YsS0FBZ0M7RUFFaEMsSUFBSSxRQUFRLE1BQU0sSUFBSSxHQUFHO0lBQ3ZCLE9BQU87RUFDVDtFQUVBLElBQUksTUFBTSxRQUFRLE1BQU07RUFFeEIsSUFBSyxJQUFJLElBQUksUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSztJQUMzQyxJQUFJLE1BQU0sUUFBUSxVQUFVLENBQUMsS0FBSztNQUNoQyxNQUFNO0lBQ1IsT0FBTztNQUNMO0lBQ0Y7RUFDRjtFQUVBLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRztBQUMxQiJ9
+// denoCacheMetadata=3145773384819464748,10658932497392680713 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/73024f538622d1ca5bab214faa71cdb9cff76c5fc8527c7e2aec87c13bb316dc.js b/vendor/gen/https/jsr.io/73024f538622d1ca5bab214faa71cdb9cff76c5fc8527c7e2aec87c13bb316dc.js
new file mode 100644
index 0000000..91b7890
--- /dev/null
+++ b/vendor/gen/https/jsr.io/73024f538622d1ca5bab214faa71cdb9cff76c5fc8527c7e2aec87c13bb316dc.js
@@ -0,0 +1,9 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+export function assertPath(path) {
+ if (typeof path !== "string") {
+ throw new TypeError(`Path must be a string, received "${JSON.stringify(path)}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2Fzc2VydF9wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGg/OiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBQYXRoIG11c3QgYmUgYSBzdHJpbmcsIHJlY2VpdmVkIFwiJHtKU09OLnN0cmluZ2lmeShwYXRoKX1cImAsXG4gICAgKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFFakQsT0FBTyxTQUFTLFdBQVcsSUFBYTtFQUN0QyxJQUFJLE9BQU8sU0FBUyxVQUFVO0lBQzVCLE1BQU0sSUFBSSxVQUNSLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7RUFFL0Q7QUFDRiJ9
+// denoCacheMetadata=5161316252443248054,14320655457283198329 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/747afd3f78995a6f93354a3128bc7c3659e1dddad22fa4087da9f47a5a5df701.js b/vendor/gen/https/jsr.io/747afd3f78995a6f93354a3128bc7c3659e1dddad22fa4087da9f47a5a5df701.js
new file mode 100644
index 0000000..466a312
--- /dev/null
+++ b/vendor/gen/https/jsr.io/747afd3f78995a6f93354a3128bc7c3659e1dddad22fa4087da9f47a5a5df701.js
@@ -0,0 +1,17 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+const WHITESPACE_ENCODINGS = {
+ "\u0009": "%09",
+ "\u000A": "%0A",
+ "\u000B": "%0B",
+ "\u000C": "%0C",
+ "\u000D": "%0D",
+ "\u0020": "%20"
+};
+export function encodeWhitespace(string) {
+ return string.replaceAll(/[\s]/g, (c)=>{
+ return WHITESPACE_ENCODINGS[c] ?? c;
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL3RvX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmNvbnN0IFdISVRFU1BBQ0VfRU5DT0RJTkdTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcIlxcdTAwMDlcIjogXCIlMDlcIixcbiAgXCJcXHUwMDBBXCI6IFwiJTBBXCIsXG4gIFwiXFx1MDAwQlwiOiBcIiUwQlwiLFxuICBcIlxcdTAwMENcIjogXCIlMENcIixcbiAgXCJcXHUwMDBEXCI6IFwiJTBEXCIsXG4gIFwiXFx1MDAyMFwiOiBcIiUyMFwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVdoaXRlc3BhY2Uoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2VBbGwoL1tcXHNdL2csIChjKSA9PiB7XG4gICAgcmV0dXJuIFdISVRFU1BBQ0VfRU5DT0RJTkdTW2NdID8/IGM7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsTUFBTSx1QkFBK0M7RUFDbkQsVUFBVTtFQUNWLFVBQVU7RUFDVixVQUFVO0VBQ1YsVUFBVTtFQUNWLFVBQVU7RUFDVixVQUFVO0FBQ1o7QUFFQSxPQUFPLFNBQVMsaUJBQWlCLE1BQWM7RUFDN0MsT0FBTyxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDakMsT0FBTyxvQkFBb0IsQ0FBQyxFQUFFLElBQUk7RUFDcEM7QUFDRiJ9
+// denoCacheMetadata=17988897989042616441,13949134333811092129 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/74a9e65c6c0c814de7082d8591d274f4c8e82f69264757876492fd0311e58682.js b/vendor/gen/https/jsr.io/74a9e65c6c0c814de7082d8591d274f4c8e82f69264757876492fd0311e58682.js
new file mode 100644
index 0000000..2872949
--- /dev/null
+++ b/vendor/gen/https/jsr.io/74a9e65c6c0c814de7082d8591d274f4c8e82f69264757876492fd0311e58682.js
@@ -0,0 +1,46 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Test whether the given string is a glob.
+ *
+ * @example Usage
+ * ```ts
+ * import { isGlob } from "@std/path/is-glob";
+ * import { assert } from "@std/assert";
+ *
+ * assert(!isGlob("foo/bar/../baz"));
+ * assert(isGlob("foo/*ar/../baz"));
+ * ```
+ *
+ * @param str String to test.
+ * @returns `true` if the given string is a glob, otherwise `false`
+ */ export function isGlob(str) {
+ const chars = {
+ "{": "}",
+ "(": ")",
+ "[": "]"
+ };
+ const regex = /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
+ if (str === "") {
+ return false;
+ }
+ let match;
+ while(match = regex.exec(str)){
+ if (match[2]) return true;
+ let idx = match.index + match[0].length;
+ // if an open bracket/brace/paren is escaped,
+ // set the index to the next closing character
+ const open = match[1];
+ const close = open ? chars[open] : null;
+ if (open && close) {
+ const n = str.indexOf(close, idx);
+ if (n !== -1) {
+ idx = n + 1;
+ }
+ }
+ str = str.slice(idx);
+ }
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9pc19nbG9iLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBnbG9iLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNHbG9iIH0gZnJvbSBcIkBzdGQvcGF0aC9pcy1nbG9iXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnQoIWlzR2xvYihcImZvby9iYXIvLi4vYmF6XCIpKTtcbiAqIGFzc2VydChpc0dsb2IoXCJmb28vKmFyLy4uL2JhelwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFN0cmluZyB0byB0ZXN0LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBnbG9iLCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNoYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcIntcIjogXCJ9XCIsIFwiKFwiOiBcIilcIiwgXCJbXCI6IFwiXVwiIH07XG4gIGNvbnN0IHJlZ2V4ID1cbiAgICAvXFxcXCguKXwoXiF8XFwqfFxcP3xbXFxdLispXVxcP3xcXFtbXlxcXFxcXF1dK1xcXXxcXHtbXlxcXFx9XStcXH18XFwoXFw/WzohPV1bXlxcXFwpXStcXCl8XFwoW158XStcXHxbXlxcXFwpXStcXCkpLztcblxuICBpZiAoc3RyID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHN0cikpKSB7XG4gICAgaWYgKG1hdGNoWzJdKSByZXR1cm4gdHJ1ZTtcbiAgICBsZXQgaWR4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cbiAgICAvLyBpZiBhbiBvcGVuIGJyYWNrZXQvYnJhY2UvcGFyZW4gaXMgZXNjYXBlZCxcbiAgICAvLyBzZXQgdGhlIGluZGV4IHRvIHRoZSBuZXh0IGNsb3NpbmcgY2hhcmFjdGVyXG4gICAgY29uc3Qgb3BlbiA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IGNsb3NlID0gb3BlbiA/IGNoYXJzW29wZW5dIDogbnVsbDtcbiAgICBpZiAob3BlbiAmJiBjbG9zZSkge1xuICAgICAgY29uc3QgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpZHgpO1xuICAgICAgaWYgKG4gIT09IC0xKSB7XG4gICAgICAgIGlkeCA9IG4gKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ciA9IHN0ci5zbGljZShpZHgpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE1BQU0sUUFBZ0M7SUFBRSxLQUFLO0lBQUssS0FBSztJQUFLLEtBQUs7RUFBSTtFQUNyRSxNQUFNLFFBQ0o7RUFFRixJQUFJLFFBQVEsSUFBSTtJQUNkLE9BQU87RUFDVDtFQUVBLElBQUk7RUFFSixNQUFRLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBTztJQUNoQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTztJQUNyQixJQUFJLE1BQU0sTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0lBRXZDLDZDQUE2QztJQUM3Qyw4Q0FBOEM7SUFDOUMsTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO0lBQ3JCLE1BQU0sUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUc7SUFDbkMsSUFBSSxRQUFRLE9BQU87TUFDakIsTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU87TUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRztRQUNaLE1BQU0sSUFBSTtNQUNaO0lBQ0Y7SUFFQSxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ2xCO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=7863879360361386436,10111449833257119539 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/762a06d5cb62c7976d8eff7361c8145e3a869b837c701fe66c3ff50d34f5bba6.js b/vendor/gen/https/jsr.io/762a06d5cb62c7976d8eff7361c8145e3a869b837c701fe66c3ff50d34f5bba6.js
new file mode 100644
index 0000000..5d9b6af
--- /dev/null
+++ b/vendor/gen/https/jsr.io/762a06d5cb62c7976d8eff7361c8145e3a869b837c701fe66c3ff50d34f5bba6.js
@@ -0,0 +1,19 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * A parsed path object generated by path.parse() or consumed by path.format().
+ *
+ * @example
+ * ```ts
+ * import { parse } from "@std/path";
+ *
+ * const parsedPathObj = parse("c:\\path\\dir\\index.html");
+ * parsedPathObj.root; // "c:\\"
+ * parsedPathObj.dir; // "c:\\path\\dir"
+ * parsedPathObj.base; // "index.html"
+ * parsedPathObj.ext; // ".html"
+ * parsedPathObj.name; // "index"
+ * ```
+ */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIEEgcGFyc2VkIHBhdGggb2JqZWN0IGdlbmVyYXRlZCBieSBwYXRoLnBhcnNlKCkgb3IgY29uc3VtZWQgYnkgcGF0aC5mb3JtYXQoKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBzdGQvcGF0aFwiO1xuICpcbiAqIGNvbnN0IHBhcnNlZFBhdGhPYmogPSBwYXJzZShcImM6XFxcXHBhdGhcXFxcZGlyXFxcXGluZGV4Lmh0bWxcIik7XG4gKiBwYXJzZWRQYXRoT2JqLnJvb3Q7IC8vIFwiYzpcXFxcXCJcbiAqIHBhcnNlZFBhdGhPYmouZGlyOyAvLyBcImM6XFxcXHBhdGhcXFxcZGlyXCJcbiAqIHBhcnNlZFBhdGhPYmouYmFzZTsgLy8gXCJpbmRleC5odG1sXCJcbiAqIHBhcnNlZFBhdGhPYmouZXh0OyAvLyBcIi5odG1sXCJcbiAqIHBhcnNlZFBhdGhPYmoubmFtZTsgLy8gXCJpbmRleFwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQYXRoIHtcbiAgLyoqXG4gICAqIFRoZSByb290IG9mIHRoZSBwYXRoIHN1Y2ggYXMgJy8nIG9yICdjOlxcJ1xuICAgKi9cbiAgcm9vdDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZ1bGwgZGlyZWN0b3J5IHBhdGggb2YgdGhlIHBhcmVudCBzdWNoIGFzICcvaG9tZS91c2VyL2Rpcicgb3IgJ2M6XFxwYXRoXFxkaXInXG4gICAqL1xuICBkaXI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvbiAoaWYgYW55KSBzdWNoIGFzICdpbmRleC5odG1sJ1xuICAgKi9cbiAgYmFzZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgZXh0ZW5zaW9uIChpZiBhbnkpIHN1Y2ggYXMgJy5odG1sJ1xuICAgKi9cbiAgZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIChpZiBhbnkpIHN1Y2ggYXMgJ2luZGV4J1xuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCJ9
+// denoCacheMetadata=9125149823512923979,1476604798125126188 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/769bbd5bd8b1a0055f7ded6c1675bffee41ad499f3155663351baac1a6d71f5b.js b/vendor/gen/https/jsr.io/769bbd5bd8b1a0055f7ded6c1675bffee41ad499f3155663351baac1a6d71f5b.js
new file mode 100644
index 0000000..100689d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/769bbd5bd8b1a0055f7ded6c1675bffee41ad499f3155663351baac1a6d71f5b.js
@@ -0,0 +1,62 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/dirname.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return the directory path of a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { dirname } from "@std/path/posix/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(dirname("/home/user/Documents/"), "/home/user");
+ * assertEquals(dirname("/home/user/Documents/image.png"), "/home/user/Documents");
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts"), "https://deno.land/std/path");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * ```ts
+ * import { dirname } from "@std/path/posix/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts"), "https://deno.land/std/path");
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts?a=b"), "https://deno.land/std/path");
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts#header"), "https://deno.land/std/path");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `dirname` from `@std/path/posix/unstable-dirname`.
+ *
+ * @param path The path to get the directory from.
+ * @returns The directory path.
+ */ export function dirname(path) {
+ assertArg(path);
+ let end = -1;
+ let matchedNonSeparator = false;
+ for(let i = path.length - 1; i >= 1; --i){
+ if (isPosixPathSeparator(path.charCodeAt(i))) {
+ if (matchedNonSeparator) {
+ end = i;
+ break;
+ }
+ } else {
+ matchedNonSeparator = true;
+ }
+ }
+ // No matches. Fallback based on provided path:
+ //
+ // - leading slashes paths
+ // "/foo" => "/"
+ // "///foo" => "/"
+ // - no slash path
+ // "foo" => "."
+ if (end === -1) {
+ return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : ".";
+ }
+ return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9kaXJuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydEFyZyB9IGZyb20gXCIuLi9fY29tbW9uL2Rpcm5hbWUudHNcIjtcbmltcG9ydCB7IHN0cmlwVHJhaWxpbmdTZXBhcmF0b3JzIH0gZnJvbSBcIi4uL19jb21tb24vc3RyaXBfdHJhaWxpbmdfc2VwYXJhdG9ycy50c1wiO1xuaW1wb3J0IHsgaXNQb3NpeFBhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgZGlyZWN0b3J5IHBhdGggb2YgYSBgcGF0aGAuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9kaXJuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZGlybmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL1wiKSwgXCIvaG9tZS91c2VyXCIpO1xuICogYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9pbWFnZS5wbmdcIiksIFwiL2hvbWUvdXNlci9Eb2N1bWVudHNcIik7XG4gKiBhc3NlcnRFcXVhbHMoZGlybmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50c1wiKSwgXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aFwiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdvcmtpbmcgd2l0aCBVUkxzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Rpcm5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhkaXJuYW1lKFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL3BhdGgvbW9kLnRzXCIpLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoXCIpO1xuICogYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHM/YT1iXCIpLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoXCIpO1xuICogYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHMjaGVhZGVyXCIpLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoXCIpO1xuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgZGlybmFtZWAgZnJvbSBgQHN0ZC9wYXRoL3Bvc2l4L3Vuc3RhYmxlLWRpcm5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgZGlyZWN0b3J5IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGlyZWN0b3J5IHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydEFyZyhwYXRoKTtcblxuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkTm9uU2VwYXJhdG9yID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyAtLWkpIHtcbiAgICBpZiAoaXNQb3NpeFBhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgaWYgKG1hdGNoZWROb25TZXBhcmF0b3IpIHtcbiAgICAgICAgZW5kID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoZWROb25TZXBhcmF0b3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vIG1hdGNoZXMuIEZhbGxiYWNrIGJhc2VkIG9uIHByb3ZpZGVkIHBhdGg6XG4gIC8vXG4gIC8vIC0gbGVhZGluZyBzbGFzaGVzIHBhdGhzXG4gIC8vICAgICBcIi9mb29cIiA9PiBcIi9cIlxuICAvLyAgICAgXCIvLy9mb29cIiA9PiBcIi9cIlxuICAvLyAtIG5vIHNsYXNoIHBhdGhcbiAgLy8gICAgIFwiZm9vXCIgPT4gXCIuXCJcbiAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICByZXR1cm4gaXNQb3NpeFBhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDApKSA/IFwiL1wiIDogXCIuXCI7XG4gIH1cblxuICByZXR1cm4gc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMoXG4gICAgcGF0aC5zbGljZSgwLCBlbmQpLFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxTQUFTLFFBQVEsd0JBQXdCO0FBQ2xELFNBQVMsdUJBQXVCLFFBQVEsMENBQTBDO0FBQ2xGLFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QkMsR0FDRCxPQUFPLFNBQVMsUUFBUSxJQUFZO0VBQ2xDLFVBQVU7RUFFVixJQUFJLE1BQU0sQ0FBQztFQUNYLElBQUksc0JBQXNCO0VBRTFCLElBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRztJQUN6QyxJQUFJLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxLQUFLO01BQzVDLElBQUkscUJBQXFCO1FBQ3ZCLE1BQU07UUFDTjtNQUNGO0lBQ0YsT0FBTztNQUNMLHNCQUFzQjtJQUN4QjtFQUNGO0VBRUEsK0NBQStDO0VBQy9DLEVBQUU7RUFDRiwwQkFBMEI7RUFDMUIsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLElBQUksUUFBUSxDQUFDLEdBQUc7SUFDZCxPQUFPLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxNQUFNLE1BQU07RUFDMUQ7RUFFQSxPQUFPLHdCQUNMLEtBQUssS0FBSyxDQUFDLEdBQUcsTUFDZDtBQUVKIn0=
+// denoCacheMetadata=11113492860492456424,16459553962190930279 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/78a4df5e1ccb1386d9b6208cdf7265e15af199d4337692fa6fd9ac1f33a7618b.js b/vendor/gen/https/jsr.io/78a4df5e1ccb1386d9b6208cdf7265e15af199d4337692fa6fd9ac1f33a7618b.js
new file mode 100644
index 0000000..1a22c82
--- /dev/null
+++ b/vendor/gen/https/jsr.io/78a4df5e1ccb1386d9b6208cdf7265e15af199d4337692fa6fd9ac1f33a7618b.js
@@ -0,0 +1,74 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return the extension of the `path` with leading period.
+ *
+ * @example Usage
+ * ```ts
+ * import { extname } from "@std/path/windows/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const ext = extname("file.ts");
+ * assertEquals(ext, ".ts");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `extname` from `@std/path/windows/unstable-extname`.
+ *
+ * @param path The path to get the extension from.
+ * @returns The extension of the `path`.
+ */ export function extname(path) {
+ assertPath(path);
+ let start = 0;
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Check for a drive letter prefix so as not to mistake the following
+ // path separator as an extra separator at the end of the path that can be
+ // disregarded
+ if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) {
+ start = startPart = 2;
+ }
+ for(let i = path.length - 1; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ return "";
+ }
+ return path.slice(startDot, end);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2V4dG5hbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgQ0hBUl9DT0xPTiwgQ0hBUl9ET1QgfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQYXRoU2VwYXJhdG9yLCBpc1dpbmRvd3NEZXZpY2VSb290IH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgIHdpdGggbGVhZGluZyBwZXJpb2QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2V4dG5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGV4dCA9IGV4dG5hbWUoXCJmaWxlLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGV4dCwgXCIudHNcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBleHRuYW1lYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1leHRuYW1lYC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIGV4dGVuc2lvbiBmcm9tLlxuICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuXG4gIC8vIENoZWNrIGZvciBhIGRyaXZlIGxldHRlciBwcmVmaXggc28gYXMgbm90IHRvIG1pc3Rha2UgdGhlIGZvbGxvd2luZ1xuICAvLyBwYXRoIHNlcGFyYXRvciBhcyBhbiBleHRyYSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCB0aGF0IGNhbiBiZVxuICAvLyBkaXNyZWdhcmRlZFxuXG4gIGlmIChcbiAgICBwYXRoLmxlbmd0aCA+PSAyICYmXG4gICAgcGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OICYmXG4gICAgaXNXaW5kb3dzRGV2aWNlUm9vdChwYXRoLmNoYXJDb2RlQXQoMCkpXG4gICkge1xuICAgIHN0YXJ0ID0gc3RhcnRQYXJ0ID0gMjtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsRUFBRSxRQUFRLFFBQVEsMEJBQTBCO0FBQy9ELFNBQVMsVUFBVSxRQUFRLDRCQUE0QjtBQUN2RCxTQUFTLGVBQWUsRUFBRSxtQkFBbUIsUUFBUSxhQUFhO0FBRWxFOzs7Ozs7Ozs7Ozs7Ozs7OztDQWlCQyxHQUNELE9BQU8sU0FBUyxRQUFRLElBQVk7RUFDbEMsV0FBVztFQUVYLElBQUksUUFBUTtFQUNaLElBQUksV0FBVyxDQUFDO0VBQ2hCLElBQUksWUFBWTtFQUNoQixJQUFJLE1BQU0sQ0FBQztFQUNYLElBQUksZUFBZTtFQUNuQix5RUFBeUU7RUFDekUsbUNBQW1DO0VBQ25DLElBQUksY0FBYztFQUVsQixxRUFBcUU7RUFDckUsMEVBQTBFO0VBQzFFLGNBQWM7RUFFZCxJQUNFLEtBQUssTUFBTSxJQUFJLEtBQ2YsS0FBSyxVQUFVLENBQUMsT0FBTyxjQUN2QixvQkFBb0IsS0FBSyxVQUFVLENBQUMsS0FDcEM7SUFDQSxRQUFRLFlBQVk7RUFDdEI7RUFFQSxJQUFLLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssT0FBTyxFQUFFLEVBQUc7SUFDN0MsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzdCLElBQUksZ0JBQWdCLE9BQU87TUFDekIsb0VBQW9FO01BQ3BFLGdEQUFnRDtNQUNoRCxJQUFJLENBQUMsY0FBYztRQUNqQixZQUFZLElBQUk7UUFDaEI7TUFDRjtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO01BQ2QsbUVBQW1FO01BQ25FLFlBQVk7TUFDWixlQUFlO01BQ2YsTUFBTSxJQUFJO0lBQ1o7SUFDQSxJQUFJLFNBQVMsVUFBVTtNQUNyQixrRUFBa0U7TUFDbEUsSUFBSSxhQUFhLENBQUMsR0FBRyxXQUFXO1dBQzNCLElBQUksZ0JBQWdCLEdBQUcsY0FBYztJQUM1QyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUc7TUFDMUIsdUVBQXVFO01BQ3ZFLHFEQUFxRDtNQUNyRCxjQUFjLENBQUM7SUFDakI7RUFDRjtFQUVBLElBQ0UsYUFBYSxDQUFDLEtBQ2QsUUFBUSxDQUFDLEtBQ1Qsd0RBQXdEO0VBQ3hELGdCQUFnQixLQUNoQiwwREFBMEQ7RUFDekQsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0lBQ0EsT0FBTztFQUNUO0VBQ0EsT0FBTyxLQUFLLEtBQUssQ0FBQyxVQUFVO0FBQzlCIn0=
+// denoCacheMetadata=15942174873077626128,15782438913444249489 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/79723db584e7d9342e232ee1b43cbb3a43290f20feeb991d0afce2089f35dd99.js b/vendor/gen/https/jsr.io/79723db584e7d9342e232ee1b43cbb3a43290f20feeb991d0afce2089f35dd99.js
new file mode 100644
index 0000000..da0841d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/79723db584e7d9342e232ee1b43cbb3a43290f20feeb991d0afce2089f35dd99.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { join as posixJoin } from "./posix/join.ts";
+import { join as windowsJoin } from "./windows/join.ts";
+/**
+ * Joins a sequence of paths, then normalizes the resulting path.
+ *
+ * @example Usage
+ * ```ts
+ * import { join } from "@std/path/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(join("C:\\foo", "bar", "baz\\quux", "garply", ".."), "C:\\foo\\bar\\baz\\quux");
+ * } else {
+ * assertEquals(join("/foo", "bar", "baz/quux", "garply", ".."), "/foo/bar/baz/quux");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `join` from `@std/path/unstable-join`.
+ *
+ * @param paths Paths to be joined and normalized.
+ * @returns The joined and normalized path.
+ */ export function join(...paths) {
+ return isWindows ? windowsJoin(...paths) : posixJoin(...paths);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9qb2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgam9pbiBhcyBwb3NpeEpvaW4gfSBmcm9tIFwiLi9wb3NpeC9qb2luLnRzXCI7XG5pbXBvcnQgeyBqb2luIGFzIHdpbmRvd3NKb2luIH0gZnJvbSBcIi4vd2luZG93cy9qb2luLnRzXCI7XG5cbi8qKlxuICogSm9pbnMgYSBzZXF1ZW5jZSBvZiBwYXRocywgdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgcGF0aC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpvaW4gfSBmcm9tIFwiQHN0ZC9wYXRoL2pvaW5cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoam9pbihcIkM6XFxcXGZvb1wiLCBcImJhclwiLCBcImJhelxcXFxxdXV4XCIsIFwiZ2FycGx5XCIsIFwiLi5cIiksIFwiQzpcXFxcZm9vXFxcXGJhclxcXFxiYXpcXFxccXV1eFwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhqb2luKFwiL2Zvb1wiLCBcImJhclwiLCBcImJhei9xdXV4XCIsIFwiZ2FycGx5XCIsIFwiLi5cIiksIFwiL2Zvby9iYXIvYmF6L3F1dXhcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBqb2luYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtam9pbmAuXG4gKlxuICogQHBhcmFtIHBhdGhzIFBhdGhzIHRvIGJlIGpvaW5lZCBhbmQgbm9ybWFsaXplZC5cbiAqIEByZXR1cm5zIFRoZSBqb2luZWQgYW5kIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHdpbmRvd3NKb2luKC4uLnBhdGhzKSA6IHBvc2l4Sm9pbiguLi5wYXRocyk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsUUFBUSxTQUFTLFFBQVEsa0JBQWtCO0FBQ3BELFNBQVMsUUFBUSxXQUFXLFFBQVEsb0JBQW9CO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxLQUFLLEdBQUcsS0FBZTtFQUNyQyxPQUFPLFlBQVksZUFBZSxTQUFTLGFBQWE7QUFDMUQifQ==
+// denoCacheMetadata=3375357924244136567,9810853541388642278 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/79e1ab97020b4c9a9154275b6fd14a76696de85cd4da82636a97637dcbecde18.js b/vendor/gen/https/jsr.io/79e1ab97020b4c9a9154275b6fd14a76696de85cd4da82636a97637dcbecde18.js
new file mode 100644
index 0000000..1a53b9c
--- /dev/null
+++ b/vendor/gen/https/jsr.io/79e1ab97020b4c9a9154275b6fd14a76696de85cd4da82636a97637dcbecde18.js
@@ -0,0 +1,217 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported mostly from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+/**
+ * Utilities for working with OS-specific file paths.
+ *
+ * Functions from this module will automatically switch to support the path style
+ * of the current OS, either `windows` for Microsoft Windows, or `posix` for
+ * every other operating system, eg. Linux, MacOS, BSD etc.
+ *
+ * To use functions for a specific path style regardless of the current OS
+ * import the modules from the platform sub directory instead.
+ *
+ * ## Basic Path Operations
+ *
+ * ```ts
+ * import * as path from "@std/path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * // Get components of a path
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.basename("C:\\Users\\user\\file.txt"), "file.txt");
+ * assertEquals(path.dirname("C:\\Users\\user\\file.txt"), "C:\\Users\\user");
+ * assertEquals(path.extname("C:\\Users\\user\\file.txt"), ".txt");
+ * } else {
+ * assertEquals(path.basename("/home/user/file.txt"), "file.txt");
+ * assertEquals(path.dirname("/home/user/file.txt"), "/home/user");
+ * assertEquals(path.extname("/home/user/file.txt"), ".txt");
+ * }
+ *
+ * // Join path segments
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.join("C:\\", "Users", "docs", "file.txt"), "C:\\Users\\docs\\file.txt");
+ * } else {
+ * assertEquals(path.join("/home", "user", "docs", "file.txt"), "/home/user/docs/file.txt");
+ * }
+ *
+ * // Normalize a path
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.normalize("C:\\Users\\user\\..\\temp\\.\\file.txt"), "C:\\Users\\temp\\file.txt");
+ * } else {
+ * assertEquals(path.normalize("/home/user/../temp/./file.txt"), "/home/temp/file.txt");
+ * }
+ *
+ * // Resolve absolute path
+ * if (Deno.build.os === "windows") {
+ * const resolved = path.resolve("C:\\foo", "docs", "file.txt");
+ * assertEquals(resolved, "C:\\foo\\docs\\file.txt");
+ * assertEquals(path.isAbsolute(resolved), true);
+ * } else {
+ * const resolved = path.resolve("/foo", "docs", "file.txt");
+ * assertEquals(resolved, "/foo/docs/file.txt");
+ * assertEquals(path.isAbsolute(resolved), true);
+ * }
+ *
+ * // Get relative path
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.relative("C:\\Users", "C:\\Users\\docs\\file.txt"), "docs\\file.txt");
+ * assertEquals(path.relative("C:\\Users", "D:\\Programs"), "D:\\Programs");
+ * } else {
+ * assertEquals(path.relative("/home/user", "/home/user/docs/file.txt"), "docs/file.txt");
+ * assertEquals(path.relative("/home/user", "/var/data"), "../../var/data");
+ * }
+ * ```
+ *
+ * ## Path Parsing and Formatting
+ *
+ * ```ts
+ * import * as path from "@std/path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const parsedWindows = path.parse("C:\\Users\\user\\file.txt");
+ * assertEquals(parsedWindows.root, "C:\\");
+ * assertEquals(parsedWindows.dir, "C:\\Users\\user");
+ * assertEquals(parsedWindows.base, "file.txt");
+ * assertEquals(parsedWindows.ext, ".txt");
+ * assertEquals(parsedWindows.name, "file");
+ *
+ * // Format path from components (Windows)
+ * assertEquals(
+ * path.format({ dir: "C:\\Users\\user", base: "file.txt" }),
+ * "C:\\Users\\user\\file.txt"
+ * );
+ * } else {
+ * const parsedPosix = path.parse("/home/user/file.txt");
+ * assertEquals(parsedPosix.root, "/");
+ * assertEquals(parsedPosix.dir, "/home/user");
+ * assertEquals(parsedPosix.base, "file.txt");
+ * assertEquals(parsedPosix.ext, ".txt");
+ * assertEquals(parsedPosix.name, "file");
+ *
+ * // Format path from components (POSIX)
+ * assertEquals(
+ * path.format({ dir: "/home/user", base: "file.txt" }),
+ * "/home/user/file.txt"
+ * );
+ * }
+ * ```
+ *
+ * ## URL Conversion
+ *
+ * ```ts
+ * import * as path from "@std/path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * // Convert between file URLs and paths
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.fromFileUrl("file:///C:/Users/user/file.txt"), "C:\\Users\\user\\file.txt");
+ * assertEquals(path.toFileUrl("C:\\Users\\user\\file.txt").href, "file:///C:/Users/user/file.txt");
+ * } else {
+ * assertEquals(path.fromFileUrl("file:///home/user/file.txt"), "/home/user/file.txt");
+ * assertEquals(path.toFileUrl("/home/user/file.txt").href, "file:///home/user/file.txt");
+ * }
+ * ```
+ *
+ * ## Path Properties
+ *
+ * ```ts
+ * import * as path from "@std/path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * // Check if path is absolute
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.isAbsolute("C:\\Users"), true);
+ * assertEquals(path.isAbsolute("\\\\Server\\share"), true);
+ * assertEquals(path.isAbsolute("C:relative\\path"), false);
+ * assertEquals(path.isAbsolute("..\\relative\\path"), false);
+ * } else {
+ * assertEquals(path.isAbsolute("/home/user"), true);
+ * assertEquals(path.isAbsolute("./relative/path"), false);
+ * assertEquals(path.isAbsolute("../relative/path"), false);
+ * }
+ *
+ * // Convert to namespaced path (Windows-specific)
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.toNamespacedPath("C:\\Users\\file.txt"), "\\\\?\\C:\\Users\\file.txt");
+ * assertEquals(path.toNamespacedPath("\\\\server\\share\\file.txt"), "\\\\?\\UNC\\server\\share\\file.txt");
+ * } else {
+ * // On POSIX, toNamespacedPath returns the path unchanged
+ * assertEquals(path.toNamespacedPath("/home/user/file.txt"), "/home/user/file.txt");
+ * }
+ * ```
+ *
+ * ## Glob Pattern Utilities
+ *
+ * ```ts
+ * import * as path from "@std/path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * // Check if a string is a glob pattern
+ * assertEquals(path.isGlob("*.txt"), true);
+ *
+ * // Convert glob pattern to RegExp
+ * const pattern = path.globToRegExp("*.txt");
+ * assertEquals(pattern.test("file.txt"), true);
+ *
+ * // Join multiple glob patterns
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.joinGlobs(["src", "**\\*.ts"]), "src\\**\\*.ts");
+ * } else {
+ * assertEquals(path.joinGlobs(["src", "**\/*.ts"]), "src/**\/*.ts");
+ * }
+ *
+ * // Normalize a glob pattern
+ * if (Deno.build.os === "windows") {
+ * assertEquals(path.normalizeGlob("src\\..\\**\\*.ts"), "**\\*.ts");
+ * } else {
+ * assertEquals(path.normalizeGlob("src/../**\/*.ts"), "**\/*.ts");
+ * }
+ * ```
+ *
+ * For POSIX-specific functions:
+ *
+ * ```ts
+ * import { fromFileUrl } from "@std/path/posix/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "/home/foo");
+ * ```
+ *
+ * For Windows-specific functions:
+ *
+ * ```ts
+ * import { fromFileUrl } from "@std/path/windows/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
+ * ```
+ *
+ * Functions for working with URLs can be found in
+ * {@link ./doc/posix/~ | @std/path/posix}.
+ *
+ * @module
+ */ export * from "./basename.ts";
+export * from "./constants.ts";
+export * from "./dirname.ts";
+export * from "./extname.ts";
+export * from "./format.ts";
+export * from "./from_file_url.ts";
+export * from "./is_absolute.ts";
+export * from "./join.ts";
+export * from "./normalize.ts";
+export * from "./parse.ts";
+export * from "./relative.ts";
+export * from "./resolve.ts";
+export * from "./to_file_url.ts";
+export * from "./to_namespaced_path.ts";
+export * from "./common.ts";
+export * from "./types.ts";
+export * from "./glob_to_regexp.ts";
+export * from "./is_glob.ts";
+export * from "./join_globs.ts";
+export * from "./normalize_glob.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBtb3N0bHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogVXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggT1Mtc3BlY2lmaWMgZmlsZSBwYXRocy5cbiAqXG4gKiBGdW5jdGlvbnMgZnJvbSB0aGlzIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIHN1cHBvcnQgdGhlIHBhdGggc3R5bGVcbiAqIG9mIHRoZSBjdXJyZW50IE9TLCBlaXRoZXIgYHdpbmRvd3NgIGZvciBNaWNyb3NvZnQgV2luZG93cywgb3IgYHBvc2l4YCBmb3JcbiAqIGV2ZXJ5IG90aGVyIG9wZXJhdGluZyBzeXN0ZW0sIGVnLiBMaW51eCwgTWFjT1MsIEJTRCBldGMuXG4gKlxuICogVG8gdXNlIGZ1bmN0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYXRoIHN0eWxlIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgT1NcbiAqIGltcG9ydCB0aGUgbW9kdWxlcyBmcm9tIHRoZSBwbGF0Zm9ybSBzdWIgZGlyZWN0b3J5IGluc3RlYWQuXG4gKlxuICogIyMgQmFzaWMgUGF0aCBPcGVyYXRpb25zXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIHBhdGggZnJvbSBcIkBzdGQvcGF0aFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogLy8gR2V0IGNvbXBvbmVudHMgb2YgYSBwYXRoXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguYmFzZW5hbWUoXCJDOlxcXFxVc2Vyc1xcXFx1c2VyXFxcXGZpbGUudHh0XCIpLCBcImZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5kaXJuYW1lKFwiQzpcXFxcVXNlcnNcXFxcdXNlclxcXFxmaWxlLnR4dFwiKSwgXCJDOlxcXFxVc2Vyc1xcXFx1c2VyXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5leHRuYW1lKFwiQzpcXFxcVXNlcnNcXFxcdXNlclxcXFxmaWxlLnR4dFwiKSwgXCIudHh0XCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguYmFzZW5hbWUoXCIvaG9tZS91c2VyL2ZpbGUudHh0XCIpLCBcImZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5kaXJuYW1lKFwiL2hvbWUvdXNlci9maWxlLnR4dFwiKSwgXCIvaG9tZS91c2VyXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5leHRuYW1lKFwiL2hvbWUvdXNlci9maWxlLnR4dFwiKSwgXCIudHh0XCIpO1xuICogfVxuICpcbiAqIC8vIEpvaW4gcGF0aCBzZWdtZW50c1xuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLmpvaW4oXCJDOlxcXFxcIiwgXCJVc2Vyc1wiLCBcImRvY3NcIiwgXCJmaWxlLnR4dFwiKSwgXCJDOlxcXFxVc2Vyc1xcXFxkb2NzXFxcXGZpbGUudHh0XCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguam9pbihcIi9ob21lXCIsIFwidXNlclwiLCBcImRvY3NcIiwgXCJmaWxlLnR4dFwiKSwgXCIvaG9tZS91c2VyL2RvY3MvZmlsZS50eHRcIik7XG4gKiB9XG4gKlxuICogLy8gTm9ybWFsaXplIGEgcGF0aFxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLm5vcm1hbGl6ZShcIkM6XFxcXFVzZXJzXFxcXHVzZXJcXFxcLi5cXFxcdGVtcFxcXFwuXFxcXGZpbGUudHh0XCIpLCBcIkM6XFxcXFVzZXJzXFxcXHRlbXBcXFxcZmlsZS50eHRcIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5ub3JtYWxpemUoXCIvaG9tZS91c2VyLy4uL3RlbXAvLi9maWxlLnR4dFwiKSwgXCIvaG9tZS90ZW1wL2ZpbGUudHh0XCIpO1xuICogfVxuICpcbiAqIC8vIFJlc29sdmUgYWJzb2x1dGUgcGF0aFxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKFwiQzpcXFxcZm9vXCIsIFwiZG9jc1wiLCBcImZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocmVzb2x2ZWQsIFwiQzpcXFxcZm9vXFxcXGRvY3NcXFxcZmlsZS50eHRcIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLmlzQWJzb2x1dGUocmVzb2x2ZWQpLCB0cnVlKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKFwiL2Zvb1wiLCBcImRvY3NcIiwgXCJmaWxlLnR4dFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHJlc29sdmVkLCBcIi9mb28vZG9jcy9maWxlLnR4dFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguaXNBYnNvbHV0ZShyZXNvbHZlZCksIHRydWUpO1xuICogfVxuICpcbiAqIC8vIEdldCByZWxhdGl2ZSBwYXRoXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgucmVsYXRpdmUoXCJDOlxcXFxVc2Vyc1wiLCBcIkM6XFxcXFVzZXJzXFxcXGRvY3NcXFxcZmlsZS50eHRcIiksIFwiZG9jc1xcXFxmaWxlLnR4dFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgucmVsYXRpdmUoXCJDOlxcXFxVc2Vyc1wiLCBcIkQ6XFxcXFByb2dyYW1zXCIpLCBcIkQ6XFxcXFByb2dyYW1zXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgucmVsYXRpdmUoXCIvaG9tZS91c2VyXCIsIFwiL2hvbWUvdXNlci9kb2NzL2ZpbGUudHh0XCIpLCBcImRvY3MvZmlsZS50eHRcIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLnJlbGF0aXZlKFwiL2hvbWUvdXNlclwiLCBcIi92YXIvZGF0YVwiKSwgXCIuLi8uLi92YXIvZGF0YVwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIFBhdGggUGFyc2luZyBhbmQgRm9ybWF0dGluZ1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJAc3RkL3BhdGhcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBjb25zdCBwYXJzZWRXaW5kb3dzID0gcGF0aC5wYXJzZShcIkM6XFxcXFVzZXJzXFxcXHVzZXJcXFxcZmlsZS50eHRcIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXJzZWRXaW5kb3dzLnJvb3QsIFwiQzpcXFxcXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkV2luZG93cy5kaXIsIFwiQzpcXFxcVXNlcnNcXFxcdXNlclwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhcnNlZFdpbmRvd3MuYmFzZSwgXCJmaWxlLnR4dFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhcnNlZFdpbmRvd3MuZXh0LCBcIi50eHRcIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXJzZWRXaW5kb3dzLm5hbWUsIFwiZmlsZVwiKTtcbiAqXG4gKiAgIC8vIEZvcm1hdCBwYXRoIGZyb20gY29tcG9uZW50cyAoV2luZG93cylcbiAqICAgYXNzZXJ0RXF1YWxzKFxuICogICAgIHBhdGguZm9ybWF0KHsgZGlyOiBcIkM6XFxcXFVzZXJzXFxcXHVzZXJcIiwgYmFzZTogXCJmaWxlLnR4dFwiIH0pLFxuICogICAgIFwiQzpcXFxcVXNlcnNcXFxcdXNlclxcXFxmaWxlLnR4dFwiXG4gKiAgICk7XG4gKiB9IGVsc2Uge1xuICogICBjb25zdCBwYXJzZWRQb3NpeCA9IHBhdGgucGFyc2UoXCIvaG9tZS91c2VyL2ZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUG9zaXgucm9vdCwgXCIvXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUG9zaXguZGlyLCBcIi9ob21lL3VzZXJcIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXJzZWRQb3NpeC5iYXNlLCBcImZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUG9zaXguZXh0LCBcIi50eHRcIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXJzZWRQb3NpeC5uYW1lLCBcImZpbGVcIik7XG4gKlxuICogICAvLyBGb3JtYXQgcGF0aCBmcm9tIGNvbXBvbmVudHMgKFBPU0lYKVxuICogICBhc3NlcnRFcXVhbHMoXG4gKiAgICAgcGF0aC5mb3JtYXQoeyBkaXI6IFwiL2hvbWUvdXNlclwiLCBiYXNlOiBcImZpbGUudHh0XCIgfSksXG4gKiAgICAgXCIvaG9tZS91c2VyL2ZpbGUudHh0XCJcbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIFVSTCBDb252ZXJzaW9uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIHBhdGggZnJvbSBcIkBzdGQvcGF0aFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogLy8gQ29udmVydCBiZXR3ZWVuIGZpbGUgVVJMcyBhbmQgcGF0aHNcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5mcm9tRmlsZVVybChcImZpbGU6Ly8vQzovVXNlcnMvdXNlci9maWxlLnR4dFwiKSwgXCJDOlxcXFxVc2Vyc1xcXFx1c2VyXFxcXGZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC50b0ZpbGVVcmwoXCJDOlxcXFxVc2Vyc1xcXFx1c2VyXFxcXGZpbGUudHh0XCIpLmhyZWYsIFwiZmlsZTovLy9DOi9Vc2Vycy91c2VyL2ZpbGUudHh0XCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguZnJvbUZpbGVVcmwoXCJmaWxlOi8vL2hvbWUvdXNlci9maWxlLnR4dFwiKSwgXCIvaG9tZS91c2VyL2ZpbGUudHh0XCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC50b0ZpbGVVcmwoXCIvaG9tZS91c2VyL2ZpbGUudHh0XCIpLmhyZWYsIFwiZmlsZTovLy9ob21lL3VzZXIvZmlsZS50eHRcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBQYXRoIFByb3BlcnRpZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwiQHN0ZC9wYXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiAvLyBDaGVjayBpZiBwYXRoIGlzIGFic29sdXRlXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguaXNBYnNvbHV0ZShcIkM6XFxcXFVzZXJzXCIpLCB0cnVlKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguaXNBYnNvbHV0ZShcIlxcXFxcXFxcU2VydmVyXFxcXHNoYXJlXCIpLCB0cnVlKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguaXNBYnNvbHV0ZShcIkM6cmVsYXRpdmVcXFxccGF0aFwiKSwgZmFsc2UpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5pc0Fic29sdXRlKFwiLi5cXFxccmVsYXRpdmVcXFxccGF0aFwiKSwgZmFsc2UpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGguaXNBYnNvbHV0ZShcIi9ob21lL3VzZXJcIiksIHRydWUpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5pc0Fic29sdXRlKFwiLi9yZWxhdGl2ZS9wYXRoXCIpLCBmYWxzZSk7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLmlzQWJzb2x1dGUoXCIuLi9yZWxhdGl2ZS9wYXRoXCIpLCBmYWxzZSk7XG4gKiB9XG4gKlxuICogLy8gQ29udmVydCB0byBuYW1lc3BhY2VkIHBhdGggKFdpbmRvd3Mtc3BlY2lmaWMpXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgudG9OYW1lc3BhY2VkUGF0aChcIkM6XFxcXFVzZXJzXFxcXGZpbGUudHh0XCIpLCBcIlxcXFxcXFxcP1xcXFxDOlxcXFxVc2Vyc1xcXFxmaWxlLnR4dFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgudG9OYW1lc3BhY2VkUGF0aChcIlxcXFxcXFxcc2VydmVyXFxcXHNoYXJlXFxcXGZpbGUudHh0XCIpLCBcIlxcXFxcXFxcP1xcXFxVTkNcXFxcc2VydmVyXFxcXHNoYXJlXFxcXGZpbGUudHh0XCIpO1xuICogfSBlbHNlIHtcbiAqICAgLy8gT24gUE9TSVgsIHRvTmFtZXNwYWNlZFBhdGggcmV0dXJucyB0aGUgcGF0aCB1bmNoYW5nZWRcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgudG9OYW1lc3BhY2VkUGF0aChcIi9ob21lL3VzZXIvZmlsZS50eHRcIiksIFwiL2hvbWUvdXNlci9maWxlLnR4dFwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIEdsb2IgUGF0dGVybiBVdGlsaXRpZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwiQHN0ZC9wYXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiAvLyBDaGVjayBpZiBhIHN0cmluZyBpcyBhIGdsb2IgcGF0dGVyblxuICogYXNzZXJ0RXF1YWxzKHBhdGguaXNHbG9iKFwiKi50eHRcIiksIHRydWUpO1xuICpcbiAqIC8vIENvbnZlcnQgZ2xvYiBwYXR0ZXJuIHRvIFJlZ0V4cFxuICogY29uc3QgcGF0dGVybiA9IHBhdGguZ2xvYlRvUmVnRXhwKFwiKi50eHRcIik7XG4gKiBhc3NlcnRFcXVhbHMocGF0dGVybi50ZXN0KFwiZmlsZS50eHRcIiksIHRydWUpO1xuICpcbiAqIC8vIEpvaW4gbXVsdGlwbGUgZ2xvYiBwYXR0ZXJuc1xuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLmpvaW5HbG9icyhbXCJzcmNcIiwgXCIqKlxcXFwqLnRzXCJdKSwgXCJzcmNcXFxcKipcXFxcKi50c1wiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhwYXRoLmpvaW5HbG9icyhbXCJzcmNcIiwgXCIqKlxcLyoudHNcIl0pLCBcInNyYy8qKlxcLyoudHNcIik7XG4gKiB9XG4gKlxuICogLy8gTm9ybWFsaXplIGEgZ2xvYiBwYXR0ZXJuXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgubm9ybWFsaXplR2xvYihcInNyY1xcXFwuLlxcXFwqKlxcXFwqLnRzXCIpLCBcIioqXFxcXCoudHNcIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMocGF0aC5ub3JtYWxpemVHbG9iKFwic3JjLy4uLyoqXFwvKi50c1wiKSwgXCIqKlxcLyoudHNcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBGb3IgUE9TSVgtc3BlY2lmaWMgZnVuY3Rpb25zOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvZnJvbS1maWxlLXVybFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKSwgXCIvaG9tZS9mb29cIik7XG4gKiBgYGBcbiAqXG4gKiBGb3IgV2luZG93cy1zcGVjaWZpYyBmdW5jdGlvbnM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2Zyb20tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vaG9tZS9mb29cIiksIFwiXFxcXGhvbWVcXFxcZm9vXCIpO1xuICogYGBgXG4gKlxuICogRnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggVVJMcyBjYW4gYmUgZm91bmQgaW5cbiAqIHtAbGluayAuL2RvYy9wb3NpeC9+IHwgQHN0ZC9wYXRoL3Bvc2l4fS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL2Jhc2VuYW1lLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rpcm5hbWUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4dG5hbWUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnJvbV9maWxlX3VybC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNfYWJzb2x1dGUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2pvaW4udHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25vcm1hbGl6ZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlbGF0aXZlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvbHZlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90b19maWxlX3VybC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdG9fbmFtZXNwYWNlZF9wYXRoLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21tb24udHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nbG9iX3RvX3JlZ2V4cC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNfZ2xvYi50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vam9pbl9nbG9icy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbm9ybWFsaXplX2dsb2IudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELG9FQUFvRTtBQUNwRSxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0xDLEdBQ0QsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxlQUFlO0FBQzdCLGNBQWMsZUFBZTtBQUM3QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxZQUFZO0FBQzFCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsYUFBYTtBQUMzQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWU7QUFDN0IsY0FBYyxtQkFBbUI7QUFDakMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsYUFBYTtBQUMzQixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLGVBQWU7QUFDN0IsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxzQkFBc0IifQ==
+// denoCacheMetadata=2454136495561419247,7747580965380926824 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7a355925927e59c1b259e2a6f95925987a2b7c2f7f42641b4304c4cac214819b.js b/vendor/gen/https/jsr.io/7a355925927e59c1b259e2a6f95925987a2b7c2f7f42641b4304c4cac214819b.js
new file mode 100644
index 0000000..8c2649f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7a355925927e59c1b259e2a6f95925987a2b7c2f7f42641b4304c4cac214819b.js
@@ -0,0 +1,161 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+export function consumeToken(v) {
+ const notPos = indexOf(v, isNotTokenChar);
+ if (notPos === -1) {
+ return [
+ v,
+ ""
+ ];
+ }
+ if (notPos === 0) {
+ return [
+ "",
+ v
+ ];
+ }
+ return [
+ v.slice(0, notPos),
+ v.slice(notPos)
+ ];
+}
+export function consumeValue(v) {
+ if (!v) {
+ return [
+ "",
+ v
+ ];
+ }
+ if (v[0] !== `"`) {
+ return consumeToken(v);
+ }
+ let value = "";
+ for(let i = 1; i < v.length; i++){
+ const r = v[i];
+ if (r === `"`) {
+ return [
+ value,
+ v.slice(i + 1)
+ ];
+ }
+ const next = v[i + 1];
+ if (r === "\\" && typeof next === "string" && isTSpecial(next)) {
+ value += next;
+ i++;
+ continue;
+ }
+ if (r === "\r" || r === "\n") {
+ return [
+ "",
+ v
+ ];
+ }
+ value += v[i];
+ }
+ return [
+ "",
+ v
+ ];
+}
+export function consumeMediaParam(v) {
+ let rest = v.trimStart();
+ if (!rest.startsWith(";")) {
+ return [
+ "",
+ "",
+ v
+ ];
+ }
+ rest = rest.slice(1);
+ rest = rest.trimStart();
+ let param;
+ [param, rest] = consumeToken(rest);
+ param = param.toLowerCase();
+ if (!param) {
+ return [
+ "",
+ "",
+ v
+ ];
+ }
+ rest = rest.slice(1);
+ rest = rest.trimStart();
+ const [value, rest2] = consumeValue(rest);
+ if (value === "" && rest2 === rest) {
+ return [
+ "",
+ "",
+ v
+ ];
+ }
+ rest = rest2;
+ return [
+ param,
+ value,
+ rest
+ ];
+}
+export function decode2331Encoding(v) {
+ const sv = v.split(`'`, 3);
+ if (sv.length !== 3) {
+ return undefined;
+ }
+ const [sv0, , sv2] = sv;
+ const charset = sv0.toLowerCase();
+ if (!charset) {
+ return undefined;
+ }
+ if (charset !== "us-ascii" && charset !== "utf-8") {
+ return undefined;
+ }
+ const encv = decodeURI(sv2);
+ if (!encv) {
+ return undefined;
+ }
+ return encv;
+}
+function indexOf(s, fn) {
+ let i = -1;
+ for (const v of s){
+ i++;
+ if (fn(v)) {
+ return i;
+ }
+ }
+ return -1;
+}
+export function isIterator(obj) {
+ if (obj === null || obj === undefined) {
+ return false;
+ }
+ // deno-lint-ignore no-explicit-any
+ return typeof obj[Symbol.iterator] === "function";
+}
+export function isToken(s) {
+ if (!s) {
+ return false;
+ }
+ return indexOf(s, isNotTokenChar) < 0;
+}
+function isNotTokenChar(r) {
+ return !isTokenChar(r);
+}
+function isTokenChar(r) {
+ const code = r.charCodeAt(0);
+ return code > 0x20 && code < 0x7f && !isTSpecial(r);
+}
+export function isTSpecial(r) {
+ return r[0] ? `()<>@,;:\\"/[]?=`.includes(r[0]) : false;
+}
+const CHAR_CODE_SPACE = " ".charCodeAt(0);
+const CHAR_CODE_TILDE = "~".charCodeAt(0);
+export function needsEncoding(s) {
+ for (const b of s){
+ const charCode = b.charCodeAt(0);
+ if ((charCode < CHAR_CODE_SPACE || charCode > CHAR_CODE_TILDE) && b !== "\t") {
+ return true;
+ }
+ }
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvX3V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IGludGVyZmFjZSBEQkVudHJ5IHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIGNvbXByZXNzaWJsZT86IGJvb2xlYW47XG4gIGNoYXJzZXQ/OiBzdHJpbmc7XG4gIGV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWVUb2tlbih2OiBzdHJpbmcpOiBbdG9rZW46IHN0cmluZywgcmVzdDogc3RyaW5nXSB7XG4gIGNvbnN0IG5vdFBvcyA9IGluZGV4T2YodiwgaXNOb3RUb2tlbkNoYXIpO1xuICBpZiAobm90UG9zID09PSAtMSkge1xuICAgIHJldHVybiBbdiwgXCJcIl07XG4gIH1cbiAgaWYgKG5vdFBvcyA9PT0gMCkge1xuICAgIHJldHVybiBbXCJcIiwgdl07XG4gIH1cbiAgcmV0dXJuIFt2LnNsaWNlKDAsIG5vdFBvcyksIHYuc2xpY2Uobm90UG9zKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lVmFsdWUodjogc3RyaW5nKTogW3ZhbHVlOiBzdHJpbmcsIHJlc3Q6IHN0cmluZ10ge1xuICBpZiAoIXYpIHtcbiAgICByZXR1cm4gW1wiXCIsIHZdO1xuICB9XG4gIGlmICh2WzBdICE9PSBgXCJgKSB7XG4gICAgcmV0dXJuIGNvbnN1bWVUb2tlbih2KTtcbiAgfVxuICBsZXQgdmFsdWUgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHYubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByID0gdltpXTtcbiAgICBpZiAociA9PT0gYFwiYCkge1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgdi5zbGljZShpICsgMSldO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gdltpICsgMV07XG4gICAgaWYgKHIgPT09IFwiXFxcXFwiICYmIHR5cGVvZiBuZXh0ID09PSBcInN0cmluZ1wiICYmIGlzVFNwZWNpYWwobmV4dCkpIHtcbiAgICAgIHZhbHVlICs9IG5leHQ7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHIgPT09IFwiXFxyXCIgfHwgciA9PT0gXCJcXG5cIikge1xuICAgICAgcmV0dXJuIFtcIlwiLCB2XTtcbiAgICB9XG4gICAgdmFsdWUgKz0gdltpXTtcbiAgfVxuICByZXR1cm4gW1wiXCIsIHZdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZU1lZGlhUGFyYW0oXG4gIHY6IHN0cmluZyxcbik6IFtrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgcmVzdDogc3RyaW5nXSB7XG4gIGxldCByZXN0ID0gdi50cmltU3RhcnQoKTtcbiAgaWYgKCFyZXN0LnN0YXJ0c1dpdGgoXCI7XCIpKSB7XG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiLCB2XTtcbiAgfVxuICByZXN0ID0gcmVzdC5zbGljZSgxKTtcbiAgcmVzdCA9IHJlc3QudHJpbVN0YXJ0KCk7XG4gIGxldCBwYXJhbTogc3RyaW5nO1xuICBbcGFyYW0sIHJlc3RdID0gY29uc3VtZVRva2VuKHJlc3QpO1xuICBwYXJhbSA9IHBhcmFtLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghcGFyYW0pIHtcbiAgICByZXR1cm4gW1wiXCIsIFwiXCIsIHZdO1xuICB9XG4gIHJlc3QgPSByZXN0LnNsaWNlKDEpO1xuICByZXN0ID0gcmVzdC50cmltU3RhcnQoKTtcbiAgY29uc3QgW3ZhbHVlLCByZXN0Ml0gPSBjb25zdW1lVmFsdWUocmVzdCk7XG4gIGlmICh2YWx1ZSA9PT0gXCJcIiAmJiByZXN0MiA9PT0gcmVzdCkge1xuICAgIHJldHVybiBbXCJcIiwgXCJcIiwgdl07XG4gIH1cbiAgcmVzdCA9IHJlc3QyO1xuICByZXR1cm4gW3BhcmFtLCB2YWx1ZSwgcmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUyMzMxRW5jb2Rpbmcodjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3YgPSB2LnNwbGl0KGAnYCwgMyk7XG4gIGlmIChzdi5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IFtzdjAsICwgc3YyXSA9IHN2IGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXTtcbiAgY29uc3QgY2hhcnNldCA9IHN2MC50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIWNoYXJzZXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChjaGFyc2V0ICE9PSBcInVzLWFzY2lpXCIgJiYgY2hhcnNldCAhPT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmN2ID0gZGVjb2RlVVJJKHN2Mik7XG4gIGlmICghZW5jdikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGVuY3Y7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2Y8VD4oczogSXRlcmFibGU8VD4sIGZuOiAoczogVCkgPT4gYm9vbGVhbik6IG51bWJlciB7XG4gIGxldCBpID0gLTE7XG4gIGZvciAoY29uc3QgdiBvZiBzKSB7XG4gICAgaSsrO1xuICAgIGlmIChmbih2KSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSXRlcmF0b3I8VD4ob2JqOiB1bmtub3duKTogb2JqIGlzIEl0ZXJhYmxlPFQ+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICByZXR1cm4gdHlwZW9mIChvYmogYXMgYW55KVtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGluZGV4T2YocywgaXNOb3RUb2tlbkNoYXIpIDwgMDtcbn1cblxuZnVuY3Rpb24gaXNOb3RUb2tlbkNoYXIocjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAhaXNUb2tlbkNoYXIocik7XG59XG5cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyKHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBjb2RlID0gci5jaGFyQ29kZUF0KDApO1xuICByZXR1cm4gY29kZSA+IDB4MjAgJiYgY29kZSA8IDB4N2YgJiYgIWlzVFNwZWNpYWwocik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RTcGVjaWFsKHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gclswXSA/IGAoKTw+QCw7OlxcXFxcIi9bXT89YC5pbmNsdWRlcyhyWzBdKSA6IGZhbHNlO1xufVxuXG5jb25zdCBDSEFSX0NPREVfU1BBQ0UgPSBcIiBcIi5jaGFyQ29kZUF0KDApO1xuY29uc3QgQ0hBUl9DT0RFX1RJTERFID0gXCJ+XCIuY2hhckNvZGVBdCgwKTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzRW5jb2Rpbmcoczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgYiBvZiBzKSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBiLmNoYXJDb2RlQXQoMCk7XG4gICAgaWYgKFxuICAgICAgKGNoYXJDb2RlIDwgQ0hBUl9DT0RFX1NQQUNFIHx8IGNoYXJDb2RlID4gQ0hBUl9DT0RFX1RJTERFKSAmJiBiICE9PSBcIlxcdFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQVMxRSxPQUFPLFNB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
+// denoCacheMetadata=11919937667941442457,13446163425307429414 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7a9c1bc33a76752abbdb0526735a4efc927cb49acb2e0652056b65b39e5413b8.js b/vendor/gen/https/jsr.io/7a9c1bc33a76752abbdb0526735a4efc927cb49acb2e0652056b65b39e5413b8.js
new file mode 100644
index 0000000..642a983
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7a9c1bc33a76752abbdb0526735a4efc927cb49acb2e0652056b65b39e5413b8.js
@@ -0,0 +1,35 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { encodeWhitespace } from "../_common/to_file_url.ts";
+import { isAbsolute } from "./is_absolute.ts";
+/**
+ * Converts a path string to a file URL.
+ *
+ * @example Usage
+ * ```ts
+ * import { toFileUrl } from "@std/path/windows/to-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(toFileUrl("\\home\\foo"), new URL("file:///home/foo"));
+ * assertEquals(toFileUrl("C:\\Users\\foo"), new URL("file:///C:/Users/foo"));
+ * assertEquals(toFileUrl("\\\\127.0.0.1\\home\\foo"), new URL("file://127.0.0.1/home/foo"));
+ * ```
+ * @param path The path to convert.
+ * @returns The file URL.
+ */ export function toFileUrl(path) {
+ if (!isAbsolute(path)) {
+ throw new TypeError(`Path must be absolute: received "${path}"`);
+ }
+ const [, hostname, pathname] = path.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
+ const url = new URL("file:///");
+ url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
+ if (hostname !== undefined && hostname !== "localhost") {
+ url.hostname = hostname;
+ if (!url.hostname) {
+ throw new TypeError(`Invalid hostname: "${url.hostname}"`);
+ }
+ }
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL3RvX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGVuY29kZVdoaXRlc3BhY2UgfSBmcm9tIFwiLi4vX2NvbW1vbi90b19maWxlX3VybC50c1wiO1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSB9IGZyb20gXCIuL2lzX2Fic29sdXRlLnRzXCI7XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXRoIHN0cmluZyB0byBhIGZpbGUgVVJMLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdG9GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL3RvLWZpbGUtdXJsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiXFxcXGhvbWVcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2Zvb1wiKSk7XG4gKiBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIikpO1xuICogYXNzZXJ0RXF1YWxzKHRvRmlsZVVybChcIlxcXFxcXFxcMTI3LjAuMC4xXFxcXGhvbWVcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLzEyNy4wLjAuMS9ob21lL2Zvb1wiKSk7XG4gKiBgYGBcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpbGVVcmwocGF0aDogc3RyaW5nKTogVVJMIHtcbiAgaWYgKCFpc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUGF0aCBtdXN0IGJlIGFic29sdXRlOiByZWNlaXZlZCBcIiR7cGF0aH1cImApO1xuICB9XG4gIGNvbnN0IFssIGhvc3RuYW1lLCBwYXRobmFtZV0gPSBwYXRoLm1hdGNoKFxuICAgIC9eKD86Wy9cXFxcXXsyfShbXi9cXFxcXSspKD89Wy9cXFxcXSg/OlteL1xcXFxdfCQpKSk/KC4qKS8sXG4gICkhO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKFwiZmlsZTovLy9cIik7XG4gIHVybC5wYXRobmFtZSA9IGVuY29kZVdoaXRlc3BhY2UocGF0aG5hbWUhLnJlcGxhY2UoLyUvZywgXCIlMjVcIikpO1xuICBpZiAoaG9zdG5hbWUgIT09IHVuZGVmaW5lZCAmJiBob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIikge1xuICAgIHVybC5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuICAgIGlmICghdXJsLmhvc3RuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGhvc3RuYW1lOiBcIiR7dXJsLmhvc3RuYW1lfVwiYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1cmw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLGdCQUFnQixRQUFRLDRCQUE0QjtBQUM3RCxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsVUFBVSxJQUFZO0VBQ3BDLElBQUksQ0FBQyxXQUFXLE9BQU87SUFDckIsTUFBTSxJQUFJLFVBQVUsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUNqRTtFQUNBLE1BQU0sR0FBRyxVQUFVLFNBQVMsR0FBRyxLQUFLLEtBQUssQ0FDdkM7RUFFRixNQUFNLE1BQU0sSUFBSSxJQUFJO0VBQ3BCLElBQUksUUFBUSxHQUFHLGlCQUFpQixTQUFVLE9BQU8sQ0FBQyxNQUFNO0VBQ3hELElBQUksYUFBYSxhQUFhLGFBQWEsYUFBYTtJQUN0RCxJQUFJLFFBQVEsR0FBRztJQUNmLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtNQUNqQixNQUFNLElBQUksVUFBVSxDQUFDLG1CQUFtQixFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRDtFQUNGO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=2663322999922838084,14941618161143651566 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7af12675adbdb192abff581e22d0b8bc64913d7b5ef406c354e1274e423a6383.js b/vendor/gen/https/jsr.io/7af12675adbdb192abff581e22d0b8bc64913d7b5ef406c354e1274e423a6383.js
new file mode 100644
index 0000000..d4fe024
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7af12675adbdb192abff581e22d0b8bc64913d7b5ef406c354e1274e423a6383.js
@@ -0,0 +1,16 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH, CHAR_FORWARD_SLASH, CHAR_LOWERCASE_A, CHAR_LOWERCASE_Z, CHAR_UPPERCASE_A, CHAR_UPPERCASE_Z } from "../_common/constants.ts";
+export function isPosixPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH;
+}
+export function isPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+}
+export function isWindowsDeviceRoot(code) {
+ return code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z || code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL191dGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7XG4gIENIQVJfQkFDS1dBUkRfU0xBU0gsXG4gIENIQVJfRk9SV0FSRF9TTEFTSCxcbiAgQ0hBUl9MT1dFUkNBU0VfQSxcbiAgQ0hBUl9MT1dFUkNBU0VfWixcbiAgQ0hBUl9VUFBFUkNBU0VfQSxcbiAgQ0hBUl9VUFBFUkNBU0VfWixcbn0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFNlcGFyYXRvcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSCB8fCBjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSBDSEFSX0xPV0VSQ0FTRV9BICYmIGNvZGUgPD0gQ0hBUl9MT1dFUkNBU0VfWikgfHxcbiAgICAoY29kZSA+PSBDSEFSX1VQUEVSQ0FTRV9BICYmIGNvZGUgPD0gQ0hBUl9VUFBFUkNBU0VfWilcbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELDZEQUE2RDtBQUM3RCxxQ0FBcUM7QUFFckMsU0FDRSxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixRQUNYLDBCQUEwQjtBQUVqQyxPQUFPLFNBQVMscUJBQXFCLElBQVk7RUFDL0MsT0FBTyxTQUFTO0FBQ2xCO0FBRUEsT0FBTyxTQUFTLGdCQUFnQixJQUFZO0VBQzFDLE9BQU8sU0FBUyxzQkFBc0IsU0FBUztBQUNqRDtBQUVBLE9BQU8sU0FBUyxvQkFBb0IsSUFBWTtFQUM5QyxPQUNFLEFBQUMsUUFBUSxvQkFBb0IsUUFBUSxvQkFDcEMsUUFBUSxvQkFBb0IsUUFBUTtBQUV6QyJ9
+// denoCacheMetadata=4171129387492989809,12313993677460840538 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7b700222389200c367abe08d5c2b036f40a97247c5d8fa22a5a1f2da6a65b9af.js b/vendor/gen/https/jsr.io/7b700222389200c367abe08d5c2b036f40a97247c5d8fa22a5a1f2da6a65b9af.js
new file mode 100644
index 0000000..68ae52e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7b700222389200c367abe08d5c2b036f40a97247c5d8fa22a5a1f2da6a65b9af.js
@@ -0,0 +1,121 @@
+// Copyright 2014-2021 Sindre Sorhus. All rights reserved. MIT license.
+// Copyright 2021 Yoshiya Hinosawa. All rights reserved. MIT license.
+// Copyright 2021 Giuseppe Eletto. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Convert bytes to a human-readable string: 1337 → 1.34 kB
+ *
+ * Based on {@link https://github.com/sindresorhus/pretty-bytes | pretty-bytes}.
+ * A utility for displaying file sizes for humans.
+ *
+ * ```ts
+ * import { format } from "@std/fmt/bytes";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(format(1337), "1.34 kB");
+ * assertEquals(format(100), "100 B");
+ * ```
+ * @module
+ */ /**
+ * Convert bytes to a human-readable string: 1337 → 1.34 kB
+ *
+ * Based on {@link https://github.com/sindresorhus/pretty-bytes | pretty-bytes}.
+ * A utility for displaying file sizes for humans.
+ *
+ * @param num The bytes value to format
+ * @param options The options for formatting
+ * @returns The formatted string
+ *
+ * @example Basic usage
+ * ```ts
+ * import { format } from "@std/fmt/bytes";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(format(1337), "1.34 kB");
+ * assertEquals(format(100), "100 B");
+ * ```
+ *
+ * @example Include bits representation
+ *
+ * ```ts
+ * import { format } from "@std/fmt/bytes";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(format(1337, { bits: true }), "1.34 kbit");
+ * ```
+ *
+ * @example Include sign
+ *
+ * ```ts
+ * import { format } from "@std/fmt/bytes";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(format(42, { signed: true }), "+42 B");
+ * assertEquals(format(-42, { signed: true }), "-42 B");
+ * ```
+ *
+ * @example Change locale
+ *
+ * ```ts
+ * import { format } from "@std/fmt/bytes";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(format(1337, { locale: "de" }), "1,34 kB");
+ * ```
+ */ export function format(num, options = {}) {
+ if (!Number.isFinite(num)) {
+ throw new TypeError(`Expected a finite number, got ${typeof num}: ${num}`);
+ }
+ const UNITS_FIRSTLETTER = (options.bits ? "b" : "B") + "kMGTPEZY";
+ if (options.signed && num === 0) {
+ return ` 0 ${UNITS_FIRSTLETTER[0]}`;
+ }
+ const prefix = num < 0 ? "-" : options.signed ? "+" : "";
+ num = Math.abs(num);
+ const localeOptions = getLocaleOptions(options);
+ if (num < 1) {
+ const numberString = toLocaleString(num, options.locale, localeOptions);
+ return prefix + numberString + " " + UNITS_FIRSTLETTER[0];
+ }
+ const exponent = Math.min(Math.floor(options.binary ? Math.log(num) / Math.log(1024) : Math.log10(num) / 3), UNITS_FIRSTLETTER.length - 1);
+ num /= Math.pow(options.binary ? 1024 : 1000, exponent);
+ if (!localeOptions) {
+ num = Number(num.toPrecision(3));
+ }
+ const numberString = toLocaleString(num, options.locale, localeOptions);
+ let unit = UNITS_FIRSTLETTER[exponent];
+ if (exponent > 0) {
+ unit += options.binary ? "i" : "";
+ unit += options.bits ? "bit" : "B";
+ }
+ return prefix + numberString + " " + unit;
+}
+function getLocaleOptions({ maximumFractionDigits, minimumFractionDigits }) {
+ if (maximumFractionDigits === undefined && minimumFractionDigits === undefined) {
+ return;
+ }
+ const ret = {};
+ if (maximumFractionDigits !== undefined) {
+ ret.maximumFractionDigits = maximumFractionDigits;
+ }
+ if (minimumFractionDigits !== undefined) {
+ ret.minimumFractionDigits = minimumFractionDigits;
+ }
+ return ret;
+}
+/**
+ * Formats the given number using `Number#toLocaleString`.
+ * - If locale is a string, the value is expected to be a locale-key (for example: `de`).
+ * - If locale is true, the system default locale is used for translation.
+ * - If no value for locale is specified, the number is returned unmodified.
+ */ function toLocaleString(num, locale, options) {
+ if (typeof locale === "string" || Array.isArray(locale)) {
+ return num.toLocaleString(locale, options);
+ } else if (locale === true || options !== undefined) {
+ return num.toLocaleString(undefined, options);
+ }
+ return num.toString();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZm10LzEuMC44L2J5dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE0LTIwMjEgU2luZHJlIFNvcmh1cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAyMSBZb3NoaXlhIEhpbm9zYXdhLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDIxIEdpdXNlcHBlIEVsZXR0by4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIENvbnZlcnQgYnl0ZXMgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmc6IDEzMzcg4oaSIDEuMzQga0JcbiAqXG4gKiBCYXNlZCBvbiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9wcmV0dHktYnl0ZXMgfCBwcmV0dHktYnl0ZXN9LlxuICogQSB1dGlsaXR5IGZvciBkaXNwbGF5aW5nIGZpbGUgc2l6ZXMgZm9yIGh1bWFucy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIkBzdGQvZm10L2J5dGVzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZm9ybWF0KDEzMzcpLCBcIjEuMzQga0JcIik7XG4gKiBhc3NlcnRFcXVhbHMoZm9ybWF0KDEwMCksIFwiMTAwIEJcIik7XG4gKiBgYGBcbiAqIEBtb2R1bGVcbiAqL1xuXG50eXBlIExvY2FsZU9wdGlvbnMgPSB7XG4gIG1pbmltdW1GcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgbWF4aW11bUZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xufTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgZm9ybWF0fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVc2VzIGJpdHMgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIGJpdHM/OiBib29sZWFuO1xuICAvKipcbiAgICogVXNlcyBiaW5hcnkgYnl0ZXMgKGUuZy4ga2liaWJ5dGUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBiaW5hcnk/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5jbHVkZSBwbHVzIHNpZ24gZm9yIHBvc2l0aXZlIG51bWJlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIHNpZ25lZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBVc2VzIGxvY2FsaXplZCBudW1iZXIgZm9ybWF0dGluZy4gSWYgaXQgaXMgc2V0IHRvIHRydWUsIHVzZXMgZGVmYXVsdFxuICAgKiBsb2NhbGUgb24gdGhlIHN5c3RlbS4gSWYgaXQncyBzZXQgdG8gc3RyaW5nLCB1c2VzIHRoYXQgbG9jYWxlLiBUaGUgZ2l2ZW5cbiAgICogc3RyaW5nIHNob3VsZCBiZSBhXG4gICAqIHtAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JRVRGX2xhbmd1YWdlX3RhZyB8IEJDUCA0NyBsYW5ndWFnZSB0YWd9LlxuICAgKiBZb3UgY2FuIGFsc28gZ2l2ZSB0aGUgbGlzdCBvZiBsYW5ndWFnZSB0YWdzLlxuICAgKi9cbiAgbG9jYWxlPzogYm9vbGVhbiB8IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byBkaXNwbGF5LiBJZiBuZWl0aGVyXG4gICAqIHtAbGlua2NvZGUgbWluaW11bUZyYWN0aW9uRGlnaXRzfSBvciB7QGxpbmtjb2RlIG1heGltdW1GcmFjdGlvbkRpZ2l0c31cbiAgICogYXJlIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgezN9XG4gICAqL1xuICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRvIGRpc3BsYXkuIElmIG5laXRoZXJcbiAgICoge0BsaW5rY29kZSBtaW5pbXVtRnJhY3Rpb25EaWdpdHN9IG9yIHtAbGlua2NvZGUgbWF4aW11bUZyYWN0aW9uRGlnaXRzfVxuICAgKiBhcmUgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7M31cbiAgICovXG4gIG1heGltdW1GcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGJ5dGVzIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiAxMzM3IOKGkiAxLjM0IGtCXG4gKlxuICogQmFzZWQgb24ge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcHJldHR5LWJ5dGVzIHwgcHJldHR5LWJ5dGVzfS5cbiAqIEEgdXRpbGl0eSBmb3IgZGlzcGxheWluZyBmaWxlIHNpemVzIGZvciBodW1hbnMuXG4gKlxuICogQHBhcmFtIG51bSBUaGUgYnl0ZXMgdmFsdWUgdG8gZm9ybWF0XG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgZm9ybWF0dGluZ1xuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzdHJpbmdcbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJAc3RkL2ZtdC9ieXRlc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZvcm1hdCgxMzM3KSwgXCIxLjM0IGtCXCIpO1xuICogYXNzZXJ0RXF1YWxzKGZvcm1hdCgxMDApLCBcIjEwMCBCXCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgSW5jbHVkZSBiaXRzIHJlcHJlc2VudGF0aW9uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJAc3RkL2ZtdC9ieXRlc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZvcm1hdCgxMzM3LCB7IGJpdHM6IHRydWUgfSksIFwiMS4zNCBrYml0XCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgSW5jbHVkZSBzaWduXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJAc3RkL2ZtdC9ieXRlc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZvcm1hdCg0MiwgeyBzaWduZWQ6IHRydWUgfSksIFwiKzQyIEJcIik7XG4gKiBhc3NlcnRFcXVhbHMoZm9ybWF0KC00MiwgeyBzaWduZWQ6IHRydWUgfSksIFwiLTQyIEJcIik7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBDaGFuZ2UgbG9jYWxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJAc3RkL2ZtdC9ieXRlc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZvcm1hdCgxMzM3LCB7IGxvY2FsZTogXCJkZVwiIH0pLCBcIjEsMzQga0JcIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChcbiAgbnVtOiBudW1iZXIsXG4gIG9wdGlvbnM6IEZvcm1hdE9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIGZpbml0ZSBudW1iZXIsIGdvdCAke3R5cGVvZiBudW19OiAke251bX1gKTtcbiAgfVxuXG4gIGNvbnN0IFVOSVRTX0ZJUlNUTEVUVEVSID0gKG9wdGlvbnMuYml0cyA/IFwiYlwiIDogXCJCXCIpICsgXCJrTUdUUEVaWVwiO1xuXG4gIGlmIChvcHRpb25zLnNpZ25lZCAmJiBudW0gPT09IDApIHtcbiAgICByZXR1cm4gYCAwICR7VU5JVFNfRklSU1RMRVRURVJbMF19YDtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeCA9IG51bSA8IDAgPyBcIi1cIiA6IChvcHRpb25zLnNpZ25lZCA/IFwiK1wiIDogXCJcIik7XG4gIG51bSA9IE1hdGguYWJzKG51bSk7XG5cbiAgY29uc3QgbG9jYWxlT3B0aW9ucyA9IGdldExvY2FsZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgaWYgKG51bSA8IDEpIHtcbiAgICBjb25zdCBudW1iZXJTdHJpbmcgPSB0b0xvY2FsZVN0cmluZyhudW0sIG9wdGlvbnMubG9jYWxlLCBsb2NhbGVPcHRpb25zKTtcbiAgICByZXR1cm4gcHJlZml4ICsgbnVtYmVyU3RyaW5nICsgXCIgXCIgKyBVTklUU19GSVJTVExFVFRFUlswXTtcbiAgfVxuXG4gIGNvbnN0IGV4cG9uZW50ID0gTWF0aC5taW4oXG4gICAgTWF0aC5mbG9vcihcbiAgICAgIG9wdGlvbnMuYmluYXJ5ID8gTWF0aC5sb2cobnVtKSAvIE1hdGgubG9nKDEwMjQpIDogTWF0aC5sb2cxMChudW0pIC8gMyxcbiAgICApLFxuICAgIFVOSVRTX0ZJUlNUTEVUVEVSLmxlbmd0aCAtIDEsXG4gICk7XG4gIG51bSAvPSBNYXRoLnBvdyhvcHRpb25zLmJpbmFyeSA/IDEwMjQgOiAxMDAwLCBleHBvbmVudCk7XG5cbiAgaWYgKCFsb2NhbGVPcHRpb25zKSB7XG4gICAgbnVtID0gTnVtYmVyKG51bS50b1ByZWNpc2lvbigzKSk7XG4gIH1cblxuICBjb25zdCBudW1iZXJTdHJpbmcgPSB0b0xvY2FsZVN0cmluZyhcbiAgICBudW0sXG4gICAgb3B0aW9ucy5sb2NhbGUsXG4gICAgbG9jYWxlT3B0aW9ucyxcbiAgKTtcblxuICBsZXQgdW5pdCA9IFVOSVRTX0ZJUlNUTEVUVEVSW2V4cG9uZW50XTtcbiAgaWYgKGV4cG9uZW50ID4gMCkge1xuICAgIHVuaXQgKz0gb3B0aW9ucy5iaW5hcnkgPyBcImlcIiA6IFwiXCI7XG4gICAgdW5pdCArPSBvcHRpb25zLmJpdHMgPyBcImJpdFwiIDogXCJCXCI7XG4gIH1cblxuICByZXR1cm4gcHJlZml4ICsgbnVtYmVyU3RyaW5nICsgXCIgXCIgKyB1bml0O1xufVxuXG5mdW5jdGlvbiBnZXRMb2NhbGVPcHRpb25zKFxuICB7IG1heGltdW1GcmFjdGlvbkRpZ2l0cywgbWluaW11bUZyYWN0aW9uRGlnaXRzIH06IEZvcm1hdE9wdGlvbnMsXG4pOiBMb2NhbGVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgaWYgKFxuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9PT0gdW5kZWZpbmVkICYmIG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9PT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJldDogTG9jYWxlT3B0aW9ucyA9IHt9O1xuICBpZiAobWF4aW11bUZyYWN0aW9uRGlnaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXQubWF4aW11bUZyYWN0aW9uRGlnaXRzID0gbWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICB9XG4gIGlmIChtaW5pbXVtRnJhY3Rpb25EaWdpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldC5taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBnaXZlbiBudW1iZXIgdXNpbmcgYE51bWJlciN0b0xvY2FsZVN0cmluZ2AuXG4gKiAtIElmIGxvY2FsZSBpcyBhIHN0cmluZywgdGhlIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGEgbG9jYWxlLWtleSAoZm9yIGV4YW1wbGU6IGBkZWApLlxuICogLSBJZiBsb2NhbGUgaXMgdHJ1ZSwgdGhlIHN5c3RlbSBkZWZhdWx0IGxvY2FsZSBpcyB1c2VkIGZvciB0cmFuc2xhdGlvbi5cbiAqIC0gSWYgbm8gdmFsdWUgZm9yIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHRoZSBudW1iZXIgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC5cbiAqL1xuZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoXG4gIG51bTogbnVtYmVyLFxuICBsb2NhbGU6IGJvb2xlYW4gfCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogTG9jYWxlT3B0aW9ucyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgbG9jYWxlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkobG9jYWxlKSkge1xuICAgIHJldHVybiBudW0udG9Mb2NhbGVTdHJpbmcobG9jYWxlLCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChsb2NhbGUgPT09IHRydWUgfHwgb3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIG51bS50b1N0cmluZygpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSxxRUFBcUU7QUFDckUsb0VBQW9FO0FBQ3BFLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FxREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4Q0MsR0FDRCxPQUFPLFNBQVMsT0FDZCxHQUFXLEVBQ1gsVUFBeUIsQ0FBQyxDQUFDO0VBRTNCLElBQUksQ0FBQyxPQUFPLFFBQVEsQ0FBQyxNQUFNO0lBQ3pCLE1BQU0sSUFBSSxVQUFVLENBQUMsOEJBQThCLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxLQUFLO0VBQzNFO0VBRUEsTUFBTSxvQkFBb0IsQ0FBQyxRQUFRLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSTtFQUV2RCxJQUFJLFFBQVEsTUFBTSxJQUFJLFFBQVEsR0FBRztJQUMvQixPQUFPLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtFQUNyQztFQUVBLE1BQU0sU0FBUyxNQUFNLElBQUksTUFBTyxRQUFRLE1BQU0sR0FBRyxNQUFNO0VBQ3ZELE1BQU0sS0FBSyxHQUFHLENBQUM7RUFFZixNQUFNLGdCQUFnQixpQkFBaUI7RUFFdkMsSUFBSSxNQUFNLEdBQUc7SUFDWCxNQUFNLGVBQWUsZUFBZSxLQUFLLFFBQVEsTUFBTSxFQUFFO0lBQ3pELE9BQU8sU0FBUyxlQUFlLE1BQU0saUJBQWlCLENBQUMsRUFBRTtFQUMzRDtFQUVBLE1BQU0sV0FBVyxLQUFLLEdBQUcsQ0FDdkIsS0FBSyxLQUFLLENBQ1IsUUFBUSxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLE9BQU8sSUFFdEUsa0JBQWtCLE1BQU0sR0FBRztFQUU3QixPQUFPLEtBQUssR0FBRyxDQUFDLFFBQVEsTUFBTSxHQUFHLE9BQU8sTUFBTTtFQUU5QyxJQUFJLENBQUMsZUFBZTtJQUNsQixNQUFNLE9BQU8sSUFBSSxXQUFXLENBQUM7RUFDL0I7RUFFQSxNQUFNLGVBQWUsZUFDbkIsS0FDQSxRQUFRLE1BQU0sRUFDZDtFQUdGLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxTQUFTO0VBQ3RDLElBQUksV0FBVyxHQUFHO0lBQ2hCLFFBQVEsUUFBUSxNQUFNLEdBQUcsTUFBTTtJQUMvQixRQUFRLFFBQVEsSUFBSSxHQUFHLFFBQVE7RUFDakM7RUFFQSxPQUFPLFNBQVMsZUFBZSxNQUFNO0FBQ3ZDO0FBRUEsU0FBUyxpQkFDUCxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFpQjtFQUUvRCxJQUNFLDBCQUEwQixhQUFhLDBCQUEwQixXQUNqRTtJQUNBO0VBQ0Y7RUFFQSxNQUFNLE1BQXFCLENBQUM7RUFDNUIsSUFBSSwwQkFBMEIsV0FBVztJQUN2QyxJQUFJLHFCQUFxQixHQUFHO0VBQzlCO0VBQ0EsSUFBSSwwQkFBMEIsV0FBVztJQUN2QyxJQUFJLHFCQUFxQixHQUFHO0VBQzlCO0VBQ0EsT0FBTztBQUNUO0FBRUE7Ozs7O0NBS0MsR0FDRCxTQUFTLGVBQ1AsR0FBVyxFQUNYLE1BQStDLEVBQy9DLE9BQWtDO0VBRWxDLElBQUksT0FBTyxXQUFXLFlBQVksTUFBTSxPQUFPLENBQUMsU0FBUztJQUN2RCxPQUFPLElBQUksY0FBYyxDQUFDLFFBQVE7RUFDcEMsT0FBTyxJQUFJLFdBQVcsUUFBUSxZQUFZLFdBQVc7SUFDbkQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxXQUFXO0VBQ3ZDO0VBRUEsT0FBTyxJQUFJLFFBQVE7QUFDckIifQ==
+// denoCacheMetadata=4639989136864435531,14649888807913702563 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7bf9ff33835356995e82eebb24fe4b52afb4f364360acbb1274723efc2414c23.js b/vendor/gen/https/jsr.io/7bf9ff33835356995e82eebb24fe4b52afb4f364360acbb1274723efc2414c23.js
new file mode 100644
index 0000000..96e6c49
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7bf9ff33835356995e82eebb24fe4b52afb4f364360acbb1274723efc2414c23.js
@@ -0,0 +1,45 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+const YAML_TRUE_BOOLEANS = [
+ "true",
+ "True",
+ "TRUE"
+];
+const YAML_FALSE_BOOLEANS = [
+ "false",
+ "False",
+ "FALSE"
+];
+const YAML_BOOLEANS = [
+ ...YAML_TRUE_BOOLEANS,
+ ...YAML_FALSE_BOOLEANS
+];
+export const bool = {
+ tag: "tag:yaml.org,2002:bool",
+ kind: "scalar",
+ defaultStyle: "lowercase",
+ predicate: (value)=>typeof value === "boolean" || value instanceof Boolean,
+ construct: (data)=>YAML_TRUE_BOOLEANS.includes(data),
+ resolve: (data)=>YAML_BOOLEANS.includes(data),
+ represent: {
+ // deno-lint-ignore ban-types
+ lowercase: (object)=>{
+ const value = object instanceof Boolean ? object.valueOf() : object;
+ return value ? "true" : "false";
+ },
+ // deno-lint-ignore ban-types
+ uppercase: (object)=>{
+ const value = object instanceof Boolean ? object.valueOf() : object;
+ return value ? "TRUE" : "FALSE";
+ },
+ // deno-lint-ignore ban-types
+ camelcase: (object)=>{
+ const value = object instanceof Boolean ? object.valueOf() : object;
+ return value ? "True" : "False";
+ }
+ }
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9ib29sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gXCIuLi9fdHlwZS50c1wiO1xuXG5jb25zdCBZQU1MX1RSVUVfQk9PTEVBTlMgPSBbXCJ0cnVlXCIsIFwiVHJ1ZVwiLCBcIlRSVUVcIl07XG5jb25zdCBZQU1MX0ZBTFNFX0JPT0xFQU5TID0gW1wiZmFsc2VcIiwgXCJGYWxzZVwiLCBcIkZBTFNFXCJdO1xuY29uc3QgWUFNTF9CT09MRUFOUyA9IFsuLi5ZQU1MX1RSVUVfQk9PTEVBTlMsIC4uLllBTUxfRkFMU0VfQk9PTEVBTlNdO1xuXG5leHBvcnQgY29uc3QgYm9vbDogVHlwZTxcInNjYWxhclwiLCBib29sZWFuPiA9IHtcbiAgdGFnOiBcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcIixcbiAga2luZDogXCJzY2FsYXJcIixcbiAgZGVmYXVsdFN0eWxlOiBcImxvd2VyY2FzZVwiLFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIGJvb2xlYW4gPT5cbiAgICB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbixcbiAgY29uc3RydWN0OiAoZGF0YTogc3RyaW5nKTogYm9vbGVhbiA9PiBZQU1MX1RSVUVfQk9PTEVBTlMuaW5jbHVkZXMoZGF0YSksXG4gIHJlc29sdmU6IChkYXRhOiBzdHJpbmcpOiBib29sZWFuID0+IFlBTUxfQk9PTEVBTlMuaW5jbHVkZXMoZGF0YSksXG4gIHJlcHJlc2VudDoge1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG4gICAgbG93ZXJjYXNlOiAob2JqZWN0OiBib29sZWFuIHwgQm9vbGVhbik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4gPyBvYmplY3QudmFsdWVPZigpIDogb2JqZWN0O1xuICAgICAgcmV0dXJuIHZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgfSxcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICAgIHVwcGVyY2FzZTogKG9iamVjdDogYm9vbGVhbiB8IEJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuID8gb2JqZWN0LnZhbHVlT2YoKSA6IG9iamVjdDtcbiAgICAgIHJldHVybiB2YWx1ZSA/IFwiVFJVRVwiIDogXCJGQUxTRVwiO1xuICAgIH0sXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBiYW4tdHlwZXNcbiAgICBjYW1lbGNhc2U6IChvYmplY3Q6IGJvb2xlYW4gfCBCb29sZWFuKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0IGluc3RhbmNlb2YgQm9vbGVhbiA/IG9iamVjdC52YWx1ZU9mKCkgOiBvYmplY3Q7XG4gICAgICByZXR1cm4gdmFsdWUgPyBcIlRydWVcIiA6IFwiRmFsc2VcIjtcbiAgICB9LFxuICB9LFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsTUFBTSxxQkFBcUI7RUFBQztFQUFRO0VBQVE7Q0FBTztBQUNuRCxNQUFNLHNCQUFzQjtFQUFDO0VBQVM7RUFBUztDQUFRO0FBQ3ZELE1BQU0sZ0JBQWdCO0tBQUk7S0FBdUI7Q0FBb0I7QUFFckUsT0FBTyxNQUFNLE9BQWdDO0VBQzNDLEtBQUs7RUFDTCxNQUFNO0VBQ04sY0FBYztFQUNkLFdBQVcsQ0FBQyxRQUNWLE9BQU8sVUFBVSxhQUFhLGlCQUFpQjtFQUNqRCxXQUFXLENBQUMsT0FBMEIsbUJBQW1CLFFBQVEsQ0FBQztFQUNsRSxTQUFTLENBQUMsT0FBMEIsY0FBYyxRQUFRLENBQUM7RUFDM0QsV0FBVztJQUNULDZCQUE2QjtJQUM3QixXQUFXLENBQUM7TUFDVixNQUFNLFFBQVEsa0JBQWtCLFVBQVUsT0FBTyxPQUFPLEtBQUs7TUFDN0QsT0FBTyxRQUFRLFNBQVM7SUFDMUI7SUFDQSw2QkFBNkI7SUFDN0IsV0FBVyxDQUFDO01BQ1YsTUFBTSxRQUFRLGtCQUFrQixVQUFVLE9BQU8sT0FBTyxLQUFLO01BQzdELE9BQU8sUUFBUSxTQUFTO0lBQzFCO0lBQ0EsNkJBQTZCO0lBQzdCLFdBQVcsQ0FBQztNQUNWLE1BQU0sUUFBUSxrQkFBa0IsVUFBVSxPQUFPLE9BQU8sS0FBSztNQUM3RCxPQUFPLFFBQVEsU0FBUztJQUMxQjtFQUNGO0FBQ0YsRUFBRSJ9
+// denoCacheMetadata=2240750430742176594,8156036979188265507 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7e02d6fde9e2a9fd86cfdfe19b8a0abdc309b1e1080fa275a921a36ea9b144bc.js b/vendor/gen/https/jsr.io/7e02d6fde9e2a9fd86cfdfe19b8a0abdc309b1e1080fa275a921a36ea9b144bc.js
new file mode 100644
index 0000000..7843cb3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7e02d6fde9e2a9fd86cfdfe19b8a0abdc309b1e1080fa275a921a36ea9b144bc.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { joinGlobs as posixJoinGlobs } from "./posix/join_globs.ts";
+import { joinGlobs as windowsJoinGlobs } from "./windows/join_globs.ts";
+/**
+ * Joins a sequence of globs, then normalizes the resulting glob.
+ *
+ * Behaves like {@linkcode https://jsr.io/@std/path/doc/~/join | join()}, but
+ * doesn't collapse `**\/..` when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { joinGlobs } from "@std/path/join-globs";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(joinGlobs(["foo", "bar", "..", "baz"]), "foo\\baz");
+ * assertEquals(joinGlobs(["foo", "**", "bar", "..", "baz"], { globstar: true }), "foo\\**\\baz");
+ * } else {
+ * assertEquals(joinGlobs(["foo", "bar", "..", "baz"]), "foo/baz");
+ * assertEquals(joinGlobs(["foo", "**", "bar", "..", "baz"], { globstar: true }), "foo/**\/baz");
+ * }
+ * ```
+ *
+ * @param globs Globs to be joined and normalized.
+ * @param options Glob options.
+ * @returns The joined and normalized glob string.
+ */ export function joinGlobs(globs, options = {}) {
+ return isWindows ? windowsJoinGlobs(globs, options) : posixJoinGlobs(globs, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9qb2luX2dsb2JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfSBmcm9tIFwiLi9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50c1wiO1xuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyBqb2luR2xvYnMgYXMgcG9zaXhKb2luR2xvYnMgfSBmcm9tIFwiLi9wb3NpeC9qb2luX2dsb2JzLnRzXCI7XG5pbXBvcnQgeyBqb2luR2xvYnMgYXMgd2luZG93c0pvaW5HbG9icyB9IGZyb20gXCIuL3dpbmRvd3Mvam9pbl9nbG9icy50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbi8qKlxuICogSm9pbnMgYSBzZXF1ZW5jZSBvZiBnbG9icywgdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgZ2xvYi5cbiAqXG4gKiBCZWhhdmVzIGxpa2Uge0BsaW5rY29kZSBodHRwczovL2pzci5pby9Ac3RkL3BhdGgvZG9jL34vam9pbiB8IGpvaW4oKX0sIGJ1dFxuICogZG9lc24ndCBjb2xsYXBzZSBgKipcXC8uLmAgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luR2xvYnMgfSBmcm9tIFwiQHN0ZC9wYXRoL2pvaW4tZ2xvYnNcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoam9pbkdsb2JzKFtcImZvb1wiLCBcImJhclwiLCBcIi4uXCIsIFwiYmF6XCJdKSwgXCJmb29cXFxcYmF6XCIpO1xuICogICBhc3NlcnRFcXVhbHMoam9pbkdsb2JzKFtcImZvb1wiLCBcIioqXCIsIFwiYmFyXCIsIFwiLi5cIiwgXCJiYXpcIl0sIHsgZ2xvYnN0YXI6IHRydWUgfSksIFwiZm9vXFxcXCoqXFxcXGJhelwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhqb2luR2xvYnMoW1wiZm9vXCIsIFwiYmFyXCIsIFwiLi5cIiwgXCJiYXpcIl0pLCBcImZvby9iYXpcIik7XG4gKiAgIGFzc2VydEVxdWFscyhqb2luR2xvYnMoW1wiZm9vXCIsIFwiKipcIiwgXCJiYXJcIiwgXCIuLlwiLCBcImJhelwiXSwgeyBnbG9ic3RhcjogdHJ1ZSB9KSwgXCJmb28vKipcXC9iYXpcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYnMgR2xvYnMgdG8gYmUgam9pbmVkIGFuZCBub3JtYWxpemVkLlxuICogQHBhcmFtIG9wdGlvbnMgR2xvYiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGpvaW5lZCBhbmQgbm9ybWFsaXplZCBnbG9iIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c0pvaW5HbG9icyhnbG9icywgb3B0aW9ucylcbiAgICA6IHBvc2l4Sm9pbkdsb2JzKGdsb2JzLCBvcHRpb25zKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBR3JDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxhQUFhLGNBQWMsUUFBUSx3QkFBd0I7QUFDcEUsU0FBUyxhQUFhLGdCQUFnQixRQUFRLDBCQUEwQjtBQUl4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1QkMsR0FDRCxPQUFPLFNBQVMsVUFDZCxLQUFlLEVBQ2YsVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sWUFDSCxpQkFBaUIsT0FBTyxXQUN4QixlQUFlLE9BQU87QUFDNUIifQ==
+// denoCacheMetadata=14416926700287474739,16323115856195365116 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7ef95e827d53e7a4dd4d0a2daf85aacd41ca0ed4b387c4c1fb903abec22b7f63.js b/vendor/gen/https/jsr.io/7ef95e827d53e7a4dd4d0a2daf85aacd41ca0ed4b387c4c1fb903abec22b7f63.js
new file mode 100644
index 0000000..81554df
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7ef95e827d53e7a4dd4d0a2daf85aacd41ca0ed4b387c4c1fb903abec22b7f63.js
@@ -0,0 +1,28 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { encodeWhitespace } from "../_common/to_file_url.ts";
+import { isAbsolute } from "./is_absolute.ts";
+/**
+ * Converts a path string to a file URL.
+ *
+ * @example Usage
+ * ```ts
+ * import { toFileUrl } from "@std/path/posix/to-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(toFileUrl("/home/foo"), new URL("file:///home/foo"));
+ * assertEquals(toFileUrl("/home/foo bar"), new URL("file:///home/foo%20bar"));
+ * ```
+ *
+ * @param path The path to convert.
+ * @returns The file URL.
+ */ export function toFileUrl(path) {
+ if (!isAbsolute(path)) {
+ throw new TypeError(`Path must be absolute: received "${path}"`);
+ }
+ const url = new URL("file:///");
+ url.pathname = encodeWhitespace(path.replace(/%/g, "%25").replace(/\\/g, "%5C"));
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC90b19maWxlX3VybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBlbmNvZGVXaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL19jb21tb24vdG9fZmlsZV91cmwudHNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgfSBmcm9tIFwiLi9pc19hYnNvbHV0ZS50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcGF0aCBzdHJpbmcgdG8gYSBmaWxlIFVSTC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvdG8tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyh0b0ZpbGVVcmwoXCIvaG9tZS9mb29cIiksIG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpKTtcbiAqIGFzc2VydEVxdWFscyh0b0ZpbGVVcmwoXCIvaG9tZS9mb28gYmFyXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2ZvbyUyMGJhclwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGZpbGUgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlVXJsKHBhdGg6IHN0cmluZyk6IFVSTCB7XG4gIGlmICghaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFBhdGggbXVzdCBiZSBhYnNvbHV0ZTogcmVjZWl2ZWQgXCIke3BhdGh9XCJgKTtcbiAgfVxuXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoXCJmaWxlOi8vL1wiKTtcbiAgdXJsLnBhdGhuYW1lID0gZW5jb2RlV2hpdGVzcGFjZShcbiAgICBwYXRoLnJlcGxhY2UoLyUvZywgXCIlMjVcIikucmVwbGFjZSgvXFxcXC9nLCBcIiU1Q1wiKSxcbiAgKTtcbiAgcmV0dXJuIHVybDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsZ0JBQWdCLFFBQVEsNEJBQTRCO0FBQzdELFNBQVMsVUFBVSxRQUFRLG1CQUFtQjtBQUU5Qzs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxVQUFVLElBQVk7RUFDcEMsSUFBSSxDQUFDLFdBQVcsT0FBTztJQUNyQixNQUFNLElBQUksVUFBVSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ2pFO0VBRUEsTUFBTSxNQUFNLElBQUksSUFBSTtFQUNwQixJQUFJLFFBQVEsR0FBRyxpQkFDYixLQUFLLE9BQU8sQ0FBQyxNQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU87RUFFM0MsT0FBTztBQUNUIn0=
+// denoCacheMetadata=460925350501805843,18260807639951873378 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/7fe4057724d6a3ff861e6d81afea88473bd0df708dd59158de4eca309bbda2db.js b/vendor/gen/https/jsr.io/7fe4057724d6a3ff861e6d81afea88473bd0df708dd59158de4eca309bbda2db.js
new file mode 100644
index 0000000..4895537
--- /dev/null
+++ b/vendor/gen/https/jsr.io/7fe4057724d6a3ff861e6d81afea88473bd0df708dd59158de4eca309bbda2db.js
@@ -0,0 +1,26 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { parserFactory, toml } from "./_parser.ts";
+/**
+ * Parses a {@link https://toml.io | TOML} string into an object.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/toml/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const tomlString = `title = "TOML Example"
+ * [owner]
+ * name = "Alice"
+ * bio = "Alice is a programmer."`;
+ *
+ * const obj = parse(tomlString);
+ * assertEquals(obj, { title: "TOML Example", owner: { name: "Alice", bio: "Alice is a programmer." } });
+ * ```
+ * @param tomlString TOML string to be parsed.
+ * @returns The parsed JS object.
+ */ export function parse(tomlString) {
+ return parserFactory(toml)(tomlString);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvdG9tbC8xLjAuNi9wYXJzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBwYXJzZXJGYWN0b3J5LCB0b21sIH0gZnJvbSBcIi4vX3BhcnNlci50c1wiO1xuXG4vKipcbiAqIFBhcnNlcyBhIHtAbGluayBodHRwczovL3RvbWwuaW8gfCBUT01MfSBzdHJpbmcgaW50byBhbiBvYmplY3QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAc3RkL3RvbWwvcGFyc2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHRvbWxTdHJpbmcgPSBgdGl0bGUgPSBcIlRPTUwgRXhhbXBsZVwiXG4gKiBbb3duZXJdXG4gKiBuYW1lID0gXCJBbGljZVwiXG4gKiBiaW8gPSBcIkFsaWNlIGlzIGEgcHJvZ3JhbW1lci5cImA7XG4gKlxuICogY29uc3Qgb2JqID0gcGFyc2UodG9tbFN0cmluZyk7XG4gKiBhc3NlcnRFcXVhbHMob2JqLCB7IHRpdGxlOiBcIlRPTUwgRXhhbXBsZVwiLCBvd25lcjogeyBuYW1lOiBcIkFsaWNlXCIsIGJpbzogXCJBbGljZSBpcyBhIHByb2dyYW1tZXIuXCIgfSB9KTtcbiAqIGBgYFxuICogQHBhcmFtIHRvbWxTdHJpbmcgVE9NTCBzdHJpbmcgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBKUyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0b21sU3RyaW5nOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBwYXJzZXJGYWN0b3J5KHRvbWwpKHRvbWxTdHJpbmcpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxhQUFhLEVBQUUsSUFBSSxRQUFRLGVBQWU7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUNELE9BQU8sU0FBUyxNQUFNLFVBQWtCO0VBQ3RDLE9BQU8sY0FBYyxNQUFNO0FBQzdCIn0=
+// denoCacheMetadata=3843191867794975015,15672424288146020302 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/807992fce1e69434fb4f6b410e34161f57cd0c25d162888c7b021ebb3c978979.js b/vendor/gen/https/jsr.io/807992fce1e69434fb4f6b410e34161f57cd0c25d162888c7b021ebb3c978979.js
new file mode 100644
index 0000000..2d06879
--- /dev/null
+++ b/vendor/gen/https/jsr.io/807992fce1e69434fb4f6b410e34161f57cd0c25d162888c7b021ebb3c978979.js
@@ -0,0 +1,10 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_FORWARD_SLASH } from "../_common/constants.ts";
+export function isPosixPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9fdXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBDSEFSX0ZPUldBUkRfU0xBU0ggfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9zaXhQYXRoU2VwYXJhdG9yKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxTQUFTLGtCQUFrQixRQUFRLDBCQUEwQjtBQUU3RCxPQUFPLFNBQVMscUJBQXFCLElBQVk7RUFDL0MsT0FBTyxTQUFTO0FBQ2xCIn0=
+// denoCacheMetadata=10759725938560550747,4014566459724409501 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/84003758484e1d3a99bebf88da29e64a399372453c17163f298aa6a88be5214b.js b/vendor/gen/https/jsr.io/84003758484e1d3a99bebf88da29e64a399372453c17163f298aa6a88be5214b.js
new file mode 100644
index 0000000..706b395
--- /dev/null
+++ b/vendor/gen/https/jsr.io/84003758484e1d3a99bebf88da29e64a399372453c17163f298aa6a88be5214b.js
@@ -0,0 +1,108 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const padding = "=".charCodeAt(0);
+export const alphabet = {
+ base64: new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),
+ base64url: new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")
+};
+export const rAlphabet = {
+ base64: new Uint8Array(128).fill(64),
+ base64url: new Uint8Array(128).fill(64)
+};
+alphabet.base64.forEach((byte, i)=>rAlphabet.base64[byte] = i);
+alphabet.base64url.forEach((byte, i)=>rAlphabet.base64url[byte] = i);
+/**
+ * Calculate the output size needed to encode a given input size for
+ * {@linkcode encodeIntoBase64}.
+ *
+ * @param originalSize The size of the input buffer.
+ * @returns The size of the output buffer.
+ *
+ * @example Basic Usage
+ * ```ts
+ * import { assertEquals } from "@std/assert";
+ * import { calcSizeBase64 } from "@std/encoding/unstable-base64";
+ *
+ * assertEquals(calcSizeBase64(1), 4);
+ * ```
+ */ export function calcSizeBase64(originalSize) {
+ return ((originalSize + 2) / 3 | 0) * 4;
+}
+export function encode(buffer, i, o, alphabet, padding) {
+ i += 2;
+ for(; i < buffer.length; i += 3){
+ const x = buffer[i - 2] << 16 | buffer[i - 1] << 8 | buffer[i];
+ buffer[o++] = alphabet[x >> 18];
+ buffer[o++] = alphabet[x >> 12 & 0x3F];
+ buffer[o++] = alphabet[x >> 6 & 0x3F];
+ buffer[o++] = alphabet[x & 0x3F];
+ }
+ switch(i){
+ case buffer.length + 1:
+ {
+ const x = buffer[i - 2] << 16;
+ buffer[o++] = alphabet[x >> 18];
+ buffer[o++] = alphabet[x >> 12 & 0x3F];
+ buffer[o++] = padding;
+ buffer[o++] = padding;
+ break;
+ }
+ case buffer.length:
+ {
+ const x = buffer[i - 2] << 16 | buffer[i - 1] << 8;
+ buffer[o++] = alphabet[x >> 18];
+ buffer[o++] = alphabet[x >> 12 & 0x3F];
+ buffer[o++] = alphabet[x >> 6 & 0x3F];
+ buffer[o++] = padding;
+ break;
+ }
+ }
+ return o;
+}
+export function decode(buffer, i, o, alphabet, padding) {
+ for(let x = buffer.length - 2; x < buffer.length; ++x){
+ if (buffer[x] === padding) {
+ for(let y = x + 1; y < buffer.length; ++y){
+ if (buffer[y] !== padding) {
+ throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(buffer[y])})`);
+ }
+ }
+ buffer = buffer.subarray(0, x);
+ break;
+ }
+ }
+ if ((buffer.length - o) % 4 === 1) {
+ throw new RangeError(`Cannot decode input as base64: Length (${buffer.length - o}), excluding padding, must not have a remainder of 1 when divided by 4`);
+ }
+ i += 3;
+ for(; i < buffer.length; i += 4){
+ const x = getByte(buffer[i - 3], alphabet) << 18 | getByte(buffer[i - 2], alphabet) << 12 | getByte(buffer[i - 1], alphabet) << 6 | getByte(buffer[i], alphabet);
+ buffer[o++] = x >> 16;
+ buffer[o++] = x >> 8 & 0xFF;
+ buffer[o++] = x & 0xFF;
+ }
+ switch(i){
+ case buffer.length + 1:
+ {
+ const x = getByte(buffer[i - 3], alphabet) << 18 | getByte(buffer[i - 2], alphabet) << 12;
+ buffer[o++] = x >> 16;
+ break;
+ }
+ case buffer.length:
+ {
+ const x = getByte(buffer[i - 3], alphabet) << 18 | getByte(buffer[i - 2], alphabet) << 12 | getByte(buffer[i - 1], alphabet) << 6;
+ buffer[o++] = x >> 16;
+ buffer[o++] = x >> 8 & 0xFF;
+ break;
+ }
+ }
+ return o;
+}
+function getByte(char, alphabet) {
+ const byte = alphabet[char] ?? 64;
+ if (byte === 64) {
+ throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(char)})`);
+ }
+ return byte;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL19jb21tb242NC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlfIH07XG5cbmV4cG9ydCBjb25zdCBwYWRkaW5nID0gXCI9XCIuY2hhckNvZGVBdCgwKTtcbmV4cG9ydCBjb25zdCBhbHBoYWJldDogUmVjb3JkPEJhc2U2NEFscGhhYmV0LCBVaW50OEFycmF5PiA9IHtcbiAgYmFzZTY0OiBuZXcgVGV4dEVuY29kZXIoKVxuICAgIC5lbmNvZGUoXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIpLFxuICBiYXNlNjR1cmw6IG5ldyBUZXh0RW5jb2RlcigpXG4gICAgLmVuY29kZShcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV9cIiksXG59O1xuZXhwb3J0IGNvbnN0IHJBbHBoYWJldDogUmVjb3JkPEJhc2U2NEFscGhhYmV0LCBVaW50OEFycmF5PiA9IHtcbiAgYmFzZTY0OiBuZXcgVWludDhBcnJheSgxMjgpLmZpbGwoNjQpLCAvLyBhbHBoYWJldC5iYXNlNjQubGVuZ3RoXG4gIGJhc2U2NHVybDogbmV3IFVpbnQ4QXJyYXkoMTI4KS5maWxsKDY0KSxcbn07XG5hbHBoYWJldC5iYXNlNjRcbiAgLmZvckVhY2goKGJ5dGUsIGkpID0+IHJBbHBoYWJldC5iYXNlNjRbYnl0ZV0gPSBpKTtcbmFscGhhYmV0LmJhc2U2NHVybFxuICAuZm9yRWFjaCgoYnl0ZSwgaSkgPT4gckFscGhhYmV0LmJhc2U2NHVybFtieXRlXSA9IGkpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBiYXNlNjQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlNjRPcHRpb25zIHtcbiAgLyoqIFRoZSBiYXNlNjQgYWxwaGFiZXQuIERlZmF1bHRzIHRvIFwiYmFzZTY0XCIgKi9cbiAgYWxwaGFiZXQ/OiBCYXNlNjRBbHBoYWJldDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZTY0IGFscGhhYmV0cy5cbiAqL1xuZXhwb3J0IHR5cGUgQmFzZTY0QWxwaGFiZXQgPSBcImJhc2U2NFwiIHwgXCJiYXNlNjR1cmxcIjtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG91dHB1dCBzaXplIG5lZWRlZCB0byBlbmNvZGUgYSBnaXZlbiBpbnB1dCBzaXplIGZvclxuICoge0BsaW5rY29kZSBlbmNvZGVJbnRvQmFzZTY0fS5cbiAqXG4gKiBAcGFyYW0gb3JpZ2luYWxTaXplIFRoZSBzaXplIG9mIHRoZSBpbnB1dCBidWZmZXIuXG4gKiBAcmV0dXJucyBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlci5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICogaW1wb3J0IHsgY2FsY1NpemVCYXNlNjQgfSBmcm9tIFwiQHN0ZC9lbmNvZGluZy91bnN0YWJsZS1iYXNlNjRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoY2FsY1NpemVCYXNlNjQoMSksIDQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjU2l6ZUJhc2U2NChvcmlnaW5hbFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoKG9yaWdpbmFsU2l6ZSArIDIpIC8gMyB8IDApICogNDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShcbiAgYnVmZmVyOiBVaW50OEFycmF5XyxcbiAgaTogbnVtYmVyLFxuICBvOiBudW1iZXIsXG4gIGFscGhhYmV0OiBVaW50OEFycmF5LFxuICBwYWRkaW5nOiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBpICs9IDI7XG4gIGZvciAoOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY29uc3QgeCA9IChidWZmZXJbaSAtIDJdISA8PCAxNikgfCAoYnVmZmVyW2kgLSAxXSEgPDwgOCkgfCBidWZmZXJbaV0hO1xuICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxOF0hO1xuICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxMiAmIDB4M0ZdITtcbiAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gNiAmIDB4M0ZdITtcbiAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggJiAweDNGXSE7XG4gIH1cbiAgc3dpdGNoIChpKSB7XG4gICAgY2FzZSBidWZmZXIubGVuZ3RoICsgMToge1xuICAgICAgY29uc3QgeCA9IGJ1ZmZlcltpIC0gMl0hIDw8IDE2O1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDE4XSE7XG4gICAgICBidWZmZXJbbysrXSA9IGFscGhhYmV0W3ggPj4gMTIgJiAweDNGXSE7XG4gICAgICBidWZmZXJbbysrXSA9IHBhZGRpbmc7XG4gICAgICBidWZmZXJbbysrXSA9IHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBidWZmZXIubGVuZ3RoOiB7XG4gICAgICBjb25zdCB4ID0gKGJ1ZmZlcltpIC0gMl0hIDw8IDE2KSB8IChidWZmZXJbaSAtIDFdISA8PCA4KTtcbiAgICAgIGJ1ZmZlcltvKytdID0gYWxwaGFiZXRbeCA+PiAxOF0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDEyICYgMHgzRl0hO1xuICAgICAgYnVmZmVyW28rK10gPSBhbHBoYWJldFt4ID4+IDYgJiAweDNGXSE7XG4gICAgICBidWZmZXJbbysrXSA9IHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoXG4gIGJ1ZmZlcjogVWludDhBcnJheV8sXG4gIGk6IG51bWJlcixcbiAgbzogbnVtYmVyLFxuICBhbHBoYWJldDogVWludDhBcnJheSxcbiAgcGFkZGluZzogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgeCA9IGJ1ZmZlci5sZW5ndGggLSAyOyB4IDwgYnVmZmVyLmxlbmd0aDsgKyt4KSB7XG4gICAgaWYgKGJ1ZmZlclt4XSA9PT0gcGFkZGluZykge1xuICAgICAgZm9yIChsZXQgeSA9IHggKyAxOyB5IDwgYnVmZmVyLmxlbmd0aDsgKyt5KSB7XG4gICAgICAgIGlmIChidWZmZXJbeV0gIT09IHBhZGRpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBkZWNvZGUgaW5wdXQgYXMgYmFzZTY0OiBJbnZhbGlkIGNoYXJhY3RlciAoJHtcbiAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbeV0hKVxuICAgICAgICAgICAgfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgwLCB4KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoKGJ1ZmZlci5sZW5ndGggLSBvKSAlIDQgPT09IDEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgIGBDYW5ub3QgZGVjb2RlIGlucHV0IGFzIGJhc2U2NDogTGVuZ3RoICgke1xuICAgICAgICBidWZmZXIubGVuZ3RoIC0gb1xuICAgICAgfSksIGV4Y2x1ZGluZyBwYWRkaW5nLCBtdXN0IG5vdCBoYXZlIGEgcmVtYWluZGVyIG9mIDEgd2hlbiBkaXZpZGVkIGJ5IDRgLFxuICAgICk7XG4gIH1cblxuICBpICs9IDM7XG4gIGZvciAoOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgY29uc3QgeCA9IChnZXRCeXRlKGJ1ZmZlcltpIC0gM10hLCBhbHBoYWJldCkgPDwgMTgpIHxcbiAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gMl0hLCBhbHBoYWJldCkgPDwgMTIpIHxcbiAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gMV0hLCBhbHBoYWJldCkgPDwgNikgfFxuICAgICAgZ2V0Qnl0ZShidWZmZXJbaV0hLCBhbHBoYWJldCk7XG4gICAgYnVmZmVyW28rK10gPSB4ID4+IDE2O1xuICAgIGJ1ZmZlcltvKytdID0geCA+PiA4ICYgMHhGRjtcbiAgICBidWZmZXJbbysrXSA9IHggJiAweEZGO1xuICB9XG4gIHN3aXRjaCAoaSkge1xuICAgIGNhc2UgYnVmZmVyLmxlbmd0aCArIDE6IHtcbiAgICAgIGNvbnN0IHggPSAoZ2V0Qnl0ZShidWZmZXJbaSAtIDNdISwgYWxwaGFiZXQpIDw8IDE4KSB8XG4gICAgICAgIChnZXRCeXRlKGJ1ZmZlcltpIC0gMl0hLCBhbHBoYWJldCkgPDwgMTIpO1xuICAgICAgYnVmZmVyW28rK10gPSB4ID4+IDE2O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgYnVmZmVyLmxlbmd0aDoge1xuICAgICAgY29uc3QgeCA9IChnZXRCeXRlKGJ1ZmZlcltpIC0gM10hLCBhbHBoYWJldCkgPDwgMTgpIHxcbiAgICAgICAgKGdldEJ5dGUoYnVmZmVyW2kgLSAyXSEsIGFscGhhYmV0KSA8PCAxMikgfFxuICAgICAgICAoZ2V0Qnl0ZShidWZmZXJbaSAtIDFdISwgYWxwaGFiZXQpIDw8IDYpO1xuICAgICAgYnVmZmVyW28rK10gPSB4ID4+IDE2O1xuICAgICAgYnVmZmVyW28rK10gPSB4ID4+IDggJiAweEZGO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufVxuXG5mdW5jdGlvbiBnZXRCeXRlKGNoYXI6IG51bWJlciwgYWxwaGFiZXQ6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBieXRlID0gYWxwaGFiZXRbY2hhcl0gPz8gNjQ7XG4gIGlmIChieXRlID09PSA2NCkgeyAvLyBhbHBoYWJldC5CYXNlNjQubGVuZ3RoXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBDYW5ub3QgZGVjb2RlIGlucHV0IGFzIGJhc2U2NDogSW52YWxpZCBjaGFyYWN0ZXIgKCR7XG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcilcbiAgICAgIH0pYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBieXRlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUtyRCxPQUFPLE1BQU0sVUFBVSxJQUFJLFVBQVUsQ0FBQyxHQUFHO0FBQ3pDLE9BQU8sTUFBTSxXQUErQztFQUMxRCxRQUFRLElBQUksY0FDVCxNQUFNLENBQUM7RUFDVixXQUFXLElBQUksY0FDWixNQUFNLENBQUM7QUFDWixFQUFFO0FBQ0YsT0FBTyxNQUFNLFlBQWdEO0VBQzNELFFBQVEsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDO0VBQ2pDLFdBQVcsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDO0FBQ3RDLEVBQUU7QUFDRixTQUFTLE1BQU0sQ0FDWixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQU0sVUFBVSxNQUFNLENBQUMsS0FBSyxHQUFHO0FBQ2pELFNBQVMsU0FBUyxDQUNmLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFLLEdBQUc7QUFlcEQ7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsZUFBZSxZQUFvQjtFQUNqRCxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSTtBQUN4QztBQUVBLE9BQU8sU0FBUyxPQUNkLE1BQW1CLEVBQ25CLENBQVMsRUFDVCxDQUFTLEVBQ1QsUUFBb0IsRUFDcEIsT0FBZTtFQUVmLEtBQUs7RUFDTCxNQUFPLElBQUksT0FBTyxNQUFNLEVBQUUsS0FBSyxFQUFHO0lBQ2hDLE1BQU0sSUFBSSxBQUFDLE1BQU0sQ0FBQyxJQUFJLEVB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
+// denoCacheMetadata=7756811618221315489,14840202499170379627 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/85a9de88532df558c8914723531a910b73b52d30a948d4836769a3d85a2c4b76.js b/vendor/gen/https/jsr.io/85a9de88532df558c8914723531a910b73b52d30a948d4836769a3d85a2c4b76.js
new file mode 100644
index 0000000..1ef3061
--- /dev/null
+++ b/vendor/gen/https/jsr.io/85a9de88532df558c8914723531a910b73b52d30a948d4836769a3d85a2c4b76.js
@@ -0,0 +1,10 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_FORWARD_SLASH } from "../_common/constants.ts";
+export function isPosixPathSeparator(code) {
+ return code === CHAR_FORWARD_SLASH;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9fdXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBDSEFSX0ZPUldBUkRfU0xBU0ggfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9zaXhQYXRoU2VwYXJhdG9yKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxTQUFTLGtCQUFrQixRQUFRLDBCQUEwQjtBQUU3RCxPQUFPLFNBQVMscUJBQXFCLElBQVk7RUFDL0MsT0FBTyxTQUFTO0FBQ2xCIn0=
+// denoCacheMetadata=1567545627153975335,5222158270785947831 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8716e215c72c88449c76eb578318d4821148047bf78f5e21398b6703ce3191b4.js b/vendor/gen/https/jsr.io/8716e215c72c88449c76eb578318d4821148047bf78f5e21398b6703ce3191b4.js
new file mode 100644
index 0000000..3bf67ef
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8716e215c72c88449c76eb578318d4821148047bf78f5e21398b6703ce3191b4.js
@@ -0,0 +1,15 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const set = {
+ tag: "tag:yaml.org,2002:set",
+ kind: "mapping",
+ construct: (data)=>data !== null ? data : {},
+ resolve: (data)=>{
+ if (data === null) return true;
+ return Object.values(data).every((it)=>it === null);
+ }
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9zZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBzZXQ6IFR5cGU8XCJtYXBwaW5nXCIsIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4+ID0ge1xuICB0YWc6IFwidGFnOnlhbWwub3JnLDIwMDI6c2V0XCIsXG4gIGtpbmQ6IFwibWFwcGluZ1wiLFxuICBjb25zdHJ1Y3Q6IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+XG4gICAgZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fSxcbiAgcmVzb2x2ZTogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRhdGEpLmV2ZXJ5KChpdCkgPT4gaXQgPT09IG51bGwpO1xuICB9LFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsT0FBTyxNQUFNLE1BQXFEO0VBQ2hFLEtBQUs7RUFDTCxNQUFNO0VBQ04sV0FBVyxDQUFDLE9BQ1YsU0FBUyxPQUFPLE9BQU8sQ0FBQztFQUMxQixTQUFTLENBQUM7SUFDUixJQUFJLFNBQVMsTUFBTSxPQUFPO0lBQzFCLE9BQU8sT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxLQUFPLE9BQU87RUFDbEQ7QUFDRixFQUFFIn0=
+// denoCacheMetadata=7748132789210695546,4577490462689952902 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8723e1f25cd62b03a4a90125bfa0735a433fa48534216660acddc5339e57971d.js b/vendor/gen/https/jsr.io/8723e1f25cd62b03a4a90125bfa0735a433fa48534216660acddc5339e57971d.js
new file mode 100644
index 0000000..27dccec
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8723e1f25cd62b03a4a90125bfa0735a433fa48534216660acddc5339e57971d.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { resolve as posixResolve } from "./posix/resolve.ts";
+import { resolve as windowsResolve } from "./windows/resolve.ts";
+/**
+ * Resolves path segments into a path.
+ *
+ * @example Usage
+ * ```ts
+ * import { resolve } from "@std/path/resolve";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(resolve("C:\\foo", "bar", "baz"), "C:\\foo\\bar\\baz");
+ * assertEquals(resolve("C:\\foo", "C:\\bar", "baz"), "C:\\bar\\baz");
+ * } else {
+ * assertEquals(resolve("/foo", "bar", "baz"), "/foo/bar/baz");
+ * assertEquals(resolve("/foo", "/bar", "baz"), "/bar/baz");
+ * }
+ * ```
+ *
+ * @param pathSegments Path segments to process to path.
+ * @returns The resolved path.
+ */ export function resolve(...pathSegments) {
+ return isWindows ? windowsResolve(...pathSegments) : posixResolve(...pathSegments);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9yZXNvbHZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSBhcyBwb3NpeFJlc29sdmUgfSBmcm9tIFwiLi9wb3NpeC9yZXNvbHZlLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlIGFzIHdpbmRvd3NSZXNvbHZlIH0gZnJvbSBcIi4vd2luZG93cy9yZXNvbHZlLnRzXCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgcGF0aCBzZWdtZW50cyBpbnRvIGEgcGF0aC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Jlc29sdmVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMocmVzb2x2ZShcIkM6XFxcXGZvb1wiLCBcImJhclwiLCBcImJhelwiKSwgXCJDOlxcXFxmb29cXFxcYmFyXFxcXGJhelwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHJlc29sdmUoXCJDOlxcXFxmb29cIiwgXCJDOlxcXFxiYXJcIiwgXCJiYXpcIiksIFwiQzpcXFxcYmFyXFxcXGJhelwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhyZXNvbHZlKFwiL2Zvb1wiLCBcImJhclwiLCBcImJhelwiKSwgXCIvZm9vL2Jhci9iYXpcIik7XG4gKiAgIGFzc2VydEVxdWFscyhyZXNvbHZlKFwiL2Zvb1wiLCBcIi9iYXJcIiwgXCJiYXpcIiksIFwiL2Jhci9iYXpcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIFBhdGggc2VnbWVudHMgdG8gcHJvY2VzcyB0byBwYXRoLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzXG4gICAgPyB3aW5kb3dzUmVzb2x2ZSguLi5wYXRoU2VnbWVudHMpXG4gICAgOiBwb3NpeFJlc29sdmUoLi4ucGF0aFNlZ21lbnRzKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxXQUFXLFlBQVksUUFBUSxxQkFBcUI7QUFDN0QsU0FBUyxXQUFXLGNBQWMsUUFBUSx1QkFBdUI7QUFFakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFHLFlBQXNCO0VBQy9DLE9BQU8sWUFDSCxrQkFBa0IsZ0JBQ2xCLGdCQUFnQjtBQUN0QiJ9
+// denoCacheMetadata=11598194813702196850,8135697438734185210 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/87f385692355b13d6c2d3c59d5637b249b3dbd5e129200cf556a65f3ff1cf348.js b/vendor/gen/https/jsr.io/87f385692355b13d6c2d3c59d5637b249b3dbd5e129200cf556a65f3ff1cf348.js
new file mode 100644
index 0000000..704465f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/87f385692355b13d6c2d3c59d5637b249b3dbd5e129200cf556a65f3ff1cf348.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+import db from "./vendor/db.ts";
+/** A map of the media type for a given extension */ export const types = new Map();
+/** A map of extensions for a given media type. */ const extensions = new Map();
+/** Internal function to populate the maps based on the Mime DB. */ const preference = [
+ "nginx",
+ "apache",
+ undefined,
+ "iana"
+];
+for (const type of Object.keys(db)){
+ const mime = db[type];
+ const exts = mime.extensions;
+ if (!exts || !exts.length) {
+ continue;
+ }
+ // @ts-ignore Work around https://github.com/denoland/dnt/issues/148
+ extensions.set(type, exts);
+ for (const ext of exts){
+ const current = types.get(ext);
+ if (current) {
+ const from = preference.indexOf(db[current].source);
+ const to = preference.indexOf(mime.source);
+ if (current !== "application/octet-stream" && current !== "application/mp4" && (from > to || // @ts-ignore work around https://github.com/denoland/dnt/issues/148
+ from === to && current.startsWith("application/"))) {
+ continue;
+ }
+ }
+ types.set(ext, type);
+ }
+}
+export { db, extensions };
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvX2RiLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgZGIgZnJvbSBcIi4vdmVuZG9yL2RiLnRzXCI7XG5pbXBvcnQgdHlwZSB7IERCRW50cnkgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG5leHBvcnQgdHlwZSBLZXlPZkRiID0ga2V5b2YgdHlwZW9mIGRiO1xuXG4vKiogQSBtYXAgb2YgdGhlIG1lZGlhIHR5cGUgZm9yIGEgZ2l2ZW4gZXh0ZW5zaW9uICovXG5leHBvcnQgY29uc3QgdHlwZXMgPSBuZXcgTWFwPHN0cmluZywgS2V5T2ZEYj4oKTtcblxuLyoqIEEgbWFwIG9mIGV4dGVuc2lvbnMgZm9yIGEgZ2l2ZW4gbWVkaWEgdHlwZS4gKi9cbmNvbnN0IGV4dGVuc2lvbnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcblxuLyoqIEludGVybmFsIGZ1bmN0aW9uIHRvIHBvcHVsYXRlIHRoZSBtYXBzIGJhc2VkIG9uIHRoZSBNaW1lIERCLiAqL1xuY29uc3QgcHJlZmVyZW5jZSA9IFtcIm5naW54XCIsIFwiYXBhY2hlXCIsIHVuZGVmaW5lZCwgXCJpYW5hXCJdO1xuXG5mb3IgKGNvbnN0IHR5cGUgb2YgT2JqZWN0LmtleXMoZGIpIGFzIEtleU9mRGJbXSkge1xuICBjb25zdCBtaW1lID0gZGJbdHlwZV0gYXMgREJFbnRyeTtcbiAgY29uc3QgZXh0cyA9IG1pbWUuZXh0ZW5zaW9ucztcblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgY29udGludWU7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlIFdvcmsgYXJvdW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kbnQvaXNzdWVzLzE0OFxuICBleHRlbnNpb25zLnNldCh0eXBlLCBleHRzKTtcblxuICBmb3IgKGNvbnN0IGV4dCBvZiBleHRzKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHR5cGVzLmdldChleHQpO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICBjb25zdCBmcm9tID0gcHJlZmVyZW5jZS5pbmRleE9mKChkYltjdXJyZW50XSBhcyBEQkVudHJ5KS5zb3VyY2UpO1xuICAgICAgY29uc3QgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnQgIT09IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIgJiZcbiAgICAgICAgY3VycmVudCAhPT0gXCJhcHBsaWNhdGlvbi9tcDRcIiAmJlxuICAgICAgICAoZnJvbSA+IHRvIHx8XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZSB3b3JrIGFyb3VuZCBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZG50L2lzc3Vlcy8xNDhcbiAgICAgICAgICAoZnJvbSA9PT0gdG8gJiYgY3VycmVudC5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vXCIpKSlcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0eXBlcy5zZXQoZXh0LCB0eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBkYiwgZXh0ZW5zaW9ucyB9O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxPQUFPLFFBQVEsaUJBQWlCO0FBS2hDLGtEQUFrRCxHQUNsRCxPQUFPLE1BQU0sUUFBUSxJQUFJLE1BQXVCO0FBRWhELGdEQUFnRCxHQUNoRCxNQUFNLGFBQW9DLElBQUk7QUFFOUMsaUVBQWlFLEdBQ2pFLE1BQU0sYUFBYTtFQUFDO0VBQVM7RUFBVTtFQUFXO0NBQU87QUFFekQsS0FBSyxNQUFNLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBa0I7RUFDL0MsTUFBTSxPQUFPLEVBQUUsQ0FBQyxLQUFLO0VBQ3JCLE1BQU0sT0FBTyxLQUFLLFVBQVU7RUFFNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUN6QjtFQUNGO0VBRUEsb0VBQW9FO0VBQ3BFLFdBQVcsR0FBRyxDQUFDLE1BQU07RUFFckIsS0FBSyxNQUFNLE9BQU8sS0FBTTtJQUN0QixNQUFNLFVBQVUsTUFBTSxHQUFHLENBQUM7SUFDMUIsSUFBSSxTQUFTO01BQ1gsTUFBTSxPQUFPLFdBQVcsT0FBTyxDQUFDLEFBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBYSxNQUFNO01BQy9ELE1BQU0sS0FBSyxXQUFXLE9BQU8sQ0FBQyxLQUFLLE1BQU07TUFFekMsSUFDRSxZQUFZLDhCQUNaLFlBQVkscUJBQ1osQ0FBQyxPQUFPLE1BQ04sb0VBQW9FO01BQ25FLFNBQVMsTUFBTSxRQUFRLFVBQVUsQ0FBQyxlQUFnQixHQUNyRDtRQUNBO01BQ0Y7SUFDRjtJQUVBLE1BQU0sR0FBRyxDQUFDLEtBQUs7RUFDakI7QUFDRjtBQUVBLFNBQVMsRUFBRSxFQUFFLFVBQVUsR0FBRyJ9
+// denoCacheMetadata=11163744675880720223,12008397618873352438 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8830625e22147a5105ac9c36460a9029c630ce356fc1665a5213ead4f55c4c80.js b/vendor/gen/https/jsr.io/8830625e22147a5105ac9c36460a9029c630ce356fc1665a5213ead4f55c4c80.js
new file mode 100644
index 0000000..aec79e9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8830625e22147a5105ac9c36460a9029c630ce356fc1665a5213ead4f55c4c80.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+import { basename } from "jsr:@std/path@^1.0.9/basename";
+import { normalize } from "jsr:@std/path@^1.0.9/normalize";
+import { toPathString } from "./_to_path_string.ts";
+/** Create {@linkcode WalkEntry} for the `path` synchronously. */ export function createWalkEntrySync(path) {
+ path = toPathString(path);
+ path = normalize(path);
+ const name = basename(path);
+ const info = Deno.statSync(path);
+ return {
+ path,
+ name,
+ isFile: info.isFile,
+ isDirectory: info.isDirectory,
+ isSymlink: info.isSymlink
+ };
+}
+/** Create {@linkcode WalkEntry} for the `path` asynchronously. */ export async function createWalkEntry(path) {
+ path = toPathString(path);
+ path = normalize(path);
+ const name = basename(path);
+ const info = await Deno.stat(path);
+ return {
+ path,
+ name,
+ isFile: info.isFile,
+ isDirectory: info.isDirectory,
+ isSymlink: info.isSymlink
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L19jcmVhdGVfd2Fsa19lbnRyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9iYXNlbmFtZVwiO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC45L25vcm1hbGl6ZVwiO1xuaW1wb3J0IHsgdG9QYXRoU3RyaW5nIH0gZnJvbSBcIi4vX3RvX3BhdGhfc3RyaW5nLnRzXCI7XG5cbi8qKlxuICogV2FsayBlbnRyeSBmb3Ige0BsaW5rY29kZSB3YWxrfSwge0BsaW5rY29kZSB3YWxrU3luY30sXG4gKiB7QGxpbmtjb2RlIGV4cGFuZEdsb2J9IGFuZCB7QGxpbmtjb2RlIGV4cGFuZEdsb2JTeW5jfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYWxrRW50cnkgZXh0ZW5kcyBEZW5vLkRpckVudHJ5IHtcbiAgLyoqIEZ1bGwgcGF0aCBvZiB0aGUgZW50cnkuICovXG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqIENyZWF0ZSB7QGxpbmtjb2RlIFdhbGtFbnRyeX0gZm9yIHRoZSBgcGF0aGAgc3luY2hyb25vdXNseS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYWxrRW50cnlTeW5jKHBhdGg6IHN0cmluZyB8IFVSTCk6IFdhbGtFbnRyeSB7XG4gIHBhdGggPSB0b1BhdGhTdHJpbmcocGF0aCk7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoKTtcbiAgY29uc3QgaW5mbyA9IERlbm8uc3RhdFN5bmMocGF0aCk7XG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICBuYW1lLFxuICAgIGlzRmlsZTogaW5mby5pc0ZpbGUsXG4gICAgaXNEaXJlY3Rvcnk6IGluZm8uaXNEaXJlY3RvcnksXG4gICAgaXNTeW1saW5rOiBpbmZvLmlzU3ltbGluayxcbiAgfTtcbn1cblxuLyoqIENyZWF0ZSB7QGxpbmtjb2RlIFdhbGtFbnRyeX0gZm9yIHRoZSBgcGF0aGAgYXN5bmNocm9ub3VzbHkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2Fsa0VudHJ5KHBhdGg6IHN0cmluZyB8IFVSTCk6IFByb21pc2U8V2Fsa0VudHJ5PiB7XG4gIHBhdGggPSB0b1BhdGhTdHJpbmcocGF0aCk7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoKTtcbiAgY29uc3QgaW5mbyA9IGF3YWl0IERlbm8uc3RhdChwYXRoKTtcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG5hbWUsXG4gICAgaXNGaWxlOiBpbmZvLmlzRmlsZSxcbiAgICBpc0RpcmVjdG9yeTogaW5mby5pc0RpcmVjdG9yeSxcbiAgICBpc1N5bWxpbms6IGluZm8uaXNTeW1saW5rLFxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFFakQsU0FBUyxRQUFRLFFBQVEsZ0NBQWdDO0FBQ3pELFNBQVMsU0FBUyxRQUFRLGlDQUFpQztBQUMzRCxTQUFTLFlBQVksUUFBUSx1QkFBdUI7QUFXcEQsK0RBQStELEdBQy9ELE9BQU8sU0FBUyxvQkFBb0IsSUFBa0I7RUFDcEQsT0FBTyxhQUFhO0VBQ3BCLE9BQU8sVUFBVTtFQUNqQixNQUFNLE9BQU8sU0FBUztFQUN0QixNQUFNLE9BQU8sS0FBSyxRQUFRLENBQUM7RUFDM0IsT0FBTztJQUNMO0lBQ0E7SUFDQSxRQUFRLEtBQUssTUFBTTtJQUNuQixhQUFhLEtBQUssV0FBVztJQUM3QixXQUFXLEtBQUssU0FBUztFQUMzQjtBQUNGO0FBRUEsZ0VBQWdFLEdBQ2hFLE9BQU8sZUFBZSxnQkFBZ0IsSUFBa0I7RUFDdEQsT0FBTyxhQUFhO0VBQ3BCLE9BQU8sVUFBVTtFQUNqQixNQUFNLE9BQU8sU0FBUztFQUN0QixNQUFNLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQztFQUM3QixPQUFPO0lBQ0w7SUFDQTtJQUNBLFFBQVEsS0FBSyxNQUFNO0lBQ25CLGFBQWEsS0FBSyxXQUFXO0lBQzdCLFdBQVcsS0FBSyxTQUFTO0VBQzNCO0FBQ0YifQ==
+// denoCacheMetadata=11179096423019822999,927007796123859514 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/899db1f33a2c0cff5cde63f30ca5bced082d934efcbcaba71fc4e480ddded700.js b/vendor/gen/https/jsr.io/899db1f33a2c0cff5cde63f30ca5bced082d934efcbcaba71fc4e480ddded700.js
new file mode 100644
index 0000000..e3280db
--- /dev/null
+++ b/vendor/gen/https/jsr.io/899db1f33a2c0cff5cde63f30ca5bced082d934efcbcaba71fc4e480ddded700.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { isAbsolute as posixIsAbsolute } from "./posix/is_absolute.ts";
+import { isAbsolute as windowsIsAbsolute } from "./windows/is_absolute.ts";
+/**
+ * Verifies whether provided path is absolute.
+ *
+ * @example Usage
+ * ```ts
+ * import { isAbsolute } from "@std/path/is-absolute";
+ * import { assert, assertFalse } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assert(isAbsolute("C:\\home\\foo"));
+ * assertFalse(isAbsolute("home\\foo"));
+ * } else {
+ * assert(isAbsolute("/home/foo"));
+ * assertFalse(isAbsolute("home/foo"));
+ * }
+ * ```
+ *
+ * @param path Path to be verified as absolute.
+ * @returns `true` if path is absolute, `false` otherwise
+ */ export function isAbsolute(path) {
+ return isWindows ? windowsIsAbsolute(path) : posixIsAbsolute(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9pc19hYnNvbHV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgcG9zaXhJc0Fic29sdXRlIH0gZnJvbSBcIi4vcG9zaXgvaXNfYWJzb2x1dGUudHNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgd2luZG93c0lzQWJzb2x1dGUgfSBmcm9tIFwiLi93aW5kb3dzL2lzX2Fic29sdXRlLnRzXCI7XG5cbi8qKlxuICogVmVyaWZpZXMgd2hldGhlciBwcm92aWRlZCBwYXRoIGlzIGFic29sdXRlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNBYnNvbHV0ZSB9IGZyb20gXCJAc3RkL3BhdGgvaXMtYWJzb2x1dGVcIjtcbiAqIGltcG9ydCB7IGFzc2VydCwgYXNzZXJ0RmFsc2UgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0KGlzQWJzb2x1dGUoXCJDOlxcXFxob21lXFxcXGZvb1wiKSk7XG4gKiAgIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCJob21lXFxcXGZvb1wiKSk7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnQoaXNBYnNvbHV0ZShcIi9ob21lL2Zvb1wiKSk7XG4gKiAgIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCJob21lL2Zvb1wiKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBQYXRoIHRvIGJlIHZlcmlmaWVkIGFzIGFic29sdXRlLlxuICogQHJldHVybnMgYHRydWVgIGlmIHBhdGggaXMgYWJzb2x1dGUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0lzQWJzb2x1dGUocGF0aCkgOiBwb3NpeElzQWJzb2x1dGUocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsY0FBYyxlQUFlLFFBQVEseUJBQXlCO0FBQ3ZFLFNBQVMsY0FBYyxpQkFBaUIsUUFBUSwyQkFBMkI7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsV0FBVyxJQUFZO0VBQ3JDLE9BQU8sWUFBWSxrQkFBa0IsUUFBUSxnQkFBZ0I7QUFDL0QifQ==
+// denoCacheMetadata=16320229312657674033,16130092239885903435 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8a11ac2a3ee9720926cf6acb595e4fa0490672b4622b8715d97db262a66d643a.js b/vendor/gen/https/jsr.io/8a11ac2a3ee9720926cf6acb595e4fa0490672b4622b8715d97db262a66d643a.js
new file mode 100644
index 0000000..0a949bb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8a11ac2a3ee9720926cf6acb595e4fa0490672b4622b8715d97db262a66d643a.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { join } from "./join.ts";
+import { SEPARATOR } from "./constants.ts";
+import { normalizeGlob } from "./normalize_glob.ts";
+/**
+ * Like join(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { joinGlobs } from "@std/path/posix/join-globs";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = joinGlobs(["foo", "bar", "**"], { globstar: true });
+ * assertEquals(path, "foo/bar/**");
+ * ```
+ *
+ * @param globs The globs to join.
+ * @param options The options to use.
+ * @returns The joined path.
+ */ export function joinGlobs(globs, options = {}) {
+ const { globstar = false } = options;
+ if (!globstar || globs.length === 0) {
+ return join(...globs);
+ }
+ let joined;
+ for (const glob of globs){
+ const path = glob;
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `${SEPARATOR}${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalizeGlob(joined, {
+ globstar
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9qb2luX2dsb2JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwiLi9qb2luLnRzXCI7XG5pbXBvcnQgeyBTRVBBUkFUT1IgfSBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUdsb2IgfSBmcm9tIFwiLi9ub3JtYWxpemVfZ2xvYi50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbi8qKlxuICogTGlrZSBqb2luKCksIGJ1dCBkb2Vzbid0IGNvbGxhcHNlIFwiKipcXC8uLlwiIHdoZW4gYGdsb2JzdGFyYCBpcyB0cnVlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgam9pbkdsb2JzIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9qb2luLWdsb2JzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gam9pbkdsb2JzKFtcImZvb1wiLCBcImJhclwiLCBcIioqXCJdLCB7IGdsb2JzdGFyOiB0cnVlIH0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiZm9vL2Jhci8qKlwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9icyBUaGUgZ2xvYnMgdG8gam9pbi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBqb2luZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBQaWNrPEdsb2JPcHRpb25zLCBcImdsb2JzdGFyXCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGdsb2JzdGFyID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGlmICghZ2xvYnN0YXIgfHwgZ2xvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGpvaW4oLi4uZ2xvYnMpO1xuICB9XG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBnbG9iIG9mIGdsb2JzKSB7XG4gICAgY29uc3QgcGF0aCA9IGdsb2I7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFqb2luZWQpIGpvaW5lZCA9IHBhdGg7XG4gICAgICBlbHNlIGpvaW5lZCArPSBgJHtTRVBBUkFUT1J9JHtwYXRofWA7XG4gICAgfVxuICB9XG4gIGlmICgham9pbmVkKSByZXR1cm4gXCIuXCI7XG4gIHJldHVybiBub3JtYWxpemVHbG9iKGpvaW5lZCwgeyBnbG9ic3RhciB9KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBR3JDLFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBQzNDLFNBQVMsYUFBYSxRQUFRLHNCQUFzQjtBQUlwRDs7Ozs7Ozs7Ozs7Ozs7O0NBZUMsR0FDRCxPQUFPLFNBQVMsVUFDZCxLQUFlLEVBQ2YsVUFBeUMsQ0FBQyxDQUFDO0VBRTNDLE1BQU0sRUFBRSxXQUFXLEtBQUssRUFBRSxHQUFHO0VBQzdCLElBQUksQ0FBQyxZQUFZLE1BQU0sTUFBTSxLQUFLLEdBQUc7SUFDbkMsT0FBTyxRQUFRO0VBQ2pCO0VBQ0EsSUFBSTtFQUNKLEtBQUssTUFBTSxRQUFRLE1BQU87SUFDeEIsTUFBTSxPQUFPO0lBQ2IsSUFBSSxLQUFLLE1BQU0sR0FBRyxHQUFHO01BQ25CLElBQUksQ0FBQyxRQUFRLFNBQVM7V0FDakIsVUFBVSxHQUFHLFlBQVksTUFBTTtJQUN0QztFQUNGO0VBQ0EsSUFBSSxDQUFDLFFBQVEsT0FBTztFQUNwQixPQUFPLGNBQWMsUUFBUTtJQUFFO0VBQVM7QUFDMUMifQ==
+// denoCacheMetadata=14243324277028634948,12508663592402591262 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8aff16c286c919482b617aa45fb52eb33bd519c292c30a75805c4b2eb34b28a1.js b/vendor/gen/https/jsr.io/8aff16c286c919482b617aa45fb52eb33bd519c292c30a75805c4b2eb34b28a1.js
new file mode 100644
index 0000000..cdab350
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8aff16c286c919482b617aa45fb52eb33bd519c292c30a75805c4b2eb34b28a1.js
@@ -0,0 +1,139 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON } from "../_common/constants.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Resolves path segments into a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { resolve } from "@std/path/windows/resolve";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const resolved = resolve("C:\\foo\\bar", "..\\baz");
+ * assertEquals(resolved, "C:\\foo\\baz");
+ * ```
+ *
+ * @param pathSegments The path segments to process to path
+ * @returns The resolved path
+ */ export function resolve(...pathSegments) {
+ let resolvedDevice = "";
+ let resolvedTail = "";
+ let resolvedAbsolute = false;
+ for(let i = pathSegments.length - 1; i >= -1; i--){
+ let path;
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (i >= 0) {
+ path = pathSegments[i];
+ } else if (!resolvedDevice) {
+ if (typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a drive-letter-less path without a current working directory (CWD)");
+ }
+ path = Deno.cwd();
+ } else {
+ if (typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a relative path without a current working directory (CWD)");
+ }
+ path = Deno.cwd();
+ // Verify that a cwd was found and that it actually points
+ // to our drive. If not, default to the drive's root.
+ if (path === undefined || path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
+ path = `${resolvedDevice}\\`;
+ }
+ }
+ assertPath(path);
+ const len = path.length;
+ // Skip empty entries
+ if (len === 0) continue;
+ let rootEnd = 0;
+ let device = "";
+ let isAbsolute = false;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ // If we started with a separator, we know we at least have an
+ // absolute path of some kind (UNC or otherwise)
+ isAbsolute = true;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ const firstPart = path.slice(last, j);
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ device = `\\\\${firstPart}\\${path.slice(last)}`;
+ rootEnd = j;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
+ rootEnd = j;
+ }
+ }
+ }
+ } else {
+ rootEnd = 1;
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ device = path.slice(0, 2);
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ // Treat separator following drive name as an absolute path
+ // indicator
+ isAbsolute = true;
+ rootEnd = 3;
+ }
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator
+ rootEnd = 1;
+ isAbsolute = true;
+ }
+ if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
+ continue;
+ }
+ if (resolvedDevice.length === 0 && device.length > 0) {
+ resolvedDevice = device;
+ }
+ if (!resolvedAbsolute) {
+ resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
+ resolvedAbsolute = isAbsolute;
+ }
+ if (resolvedAbsolute && resolvedDevice.length > 0) break;
+ }
+ // At this point the path should be resolved to a full absolute path,
+ // but handle relative paths to be safe (might happen when Deno.cwd()
+ // fails)
+ // Normalize the tail path
+ resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
+ return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL3Jlc29sdmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgQ0hBUl9DT0xPTiB9IGZyb20gXCIuLi9fY29tbW9uL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSBcIi4uL19jb21tb24vbm9ybWFsaXplX3N0cmluZy50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0UGF0aCB9IGZyb20gXCIuLi9fY29tbW9uL2Fzc2VydF9wYXRoLnRzXCI7XG5pbXBvcnQgeyBpc1BhdGhTZXBhcmF0b3IsIGlzV2luZG93c0RldmljZVJvb3QgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggc2VnbWVudHMgaW50byBhIGBwYXRoYC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvcmVzb2x2ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKFwiQzpcXFxcZm9vXFxcXGJhclwiLCBcIi4uXFxcXGJhelwiKTtcbiAqIGFzc2VydEVxdWFscyhyZXNvbHZlZCwgXCJDOlxcXFxmb29cXFxcYmF6XCIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGhTZWdtZW50cyBUaGUgcGF0aCBzZWdtZW50cyB0byBwcm9jZXNzIHRvIHBhdGhcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgcmVzb2x2ZWREZXZpY2UgPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRUYWlsID0gXCJcIjtcbiAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTE7IGktLSkge1xuICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB7IERlbm8gfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHBhdGggPSBwYXRoU2VnbWVudHNbaV0hO1xuICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkRGV2aWNlKSB7XG4gICAgICBpZiAodHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJSZXNvbHZlZCBhIGRyaXZlLWxldHRlci1sZXNzIHBhdGggd2l0aG91dCBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBEZW5vPy5lbnY/LmdldCAhPT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBEZW5vPy5jd2QgIT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBhIGN3ZCB3YXMgZm91bmQgYW5kIHRoYXQgaXQgYWN0dWFsbHkgcG9pbnRzXG4gICAgICAvLyB0byBvdXIgZHJpdmUuIElmIG5vdCwgZGVmYXVsdCB0byB0aGUgZHJpdmUncyByb290LlxuICAgICAgaWYgKFxuICAgICAgICBwYXRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgcGF0aC5zbGljZSgwLCAzKS50b0xvd2VyQ2FzZSgpICE9PSBgJHtyZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpfVxcXFxgXG4gICAgICApIHtcbiAgICAgICAgcGF0aCA9IGAke3Jlc29sdmVkRGV2aWNlfVxcXFxgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcblxuICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgIGlmIChsZW4gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgbGV0IHJvb3RFbmQgPSAwO1xuICAgIGxldCBkZXZpY2UgPSBcIlwiO1xuICAgIGxldCBpc0Fic29sdXRlID0gZmFsc2U7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgICBpZiAobGVuID4gMSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICAgIC8vIElmIHdlIHN0YXJ0ZWQgd2l0aCBhIHNlcGFyYXRvciwgd2Uga25vdyB3ZSBhdCBsZWFzdCBoYXZlIGFuXG4gICAgICAgIC8vIGFic29sdXRlIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgICAgbGV0IGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gcGF0aC5zbGljZShsYXN0LCBqKTtcbiAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaiA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcbiAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QpfWA7XG4gICAgICAgICAgICAgICAgcm9vdEVuZCA9IGo7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgICAgZGV2aWNlID0gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0LCBqKX1gO1xuICAgICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgICAgZGV2aWNlID0gcGF0aC5zbGljZSgwLCAyKTtcbiAgICAgICAgICByb290RW5kID0gMjtcbiAgICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSB7XG4gICAgICAgICAgICAgIC8vIFRyZWF0IHNlcGFyYXRvciBmb2xsb3dpbmcgZHJpdmUgbmFtZSBhcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgcGF0aCBzZXBhcmF0b3JcbiAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIHJlc29sdmVkRGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIGRldmljZS50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHBhdGggcG9pbnRzIHRvIGFub3RoZXIgZGV2aWNlIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWREZXZpY2UubGVuZ3RoID09PSAwICYmIGRldmljZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNvbHZlZERldmljZSA9IGRldmljZTtcbiAgICB9XG4gICAgaWYgKCFyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICByZXNvbHZlZFRhaWwgPSBgJHtwYXRoLnNsaWNlKHJvb3RFbmQpfVxcXFwke3Jlc29sdmVkVGFpbH1gO1xuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGU7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkQWJzb2x1dGUgJiYgcmVzb2x2ZWREZXZpY2UubGVuZ3RoID4gMCkgYnJlYWs7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCxcbiAgLy8gYnV0IGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBEZW5vLmN3ZCgpXG4gIC8vIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgdGFpbCBwYXRoXG4gIHJlc29sdmVkVGFpbCA9IG5vcm1hbGl6ZVN0cmluZyhcbiAgICByZXNvbHZlZFRhaWwsXG4gICAgIXJlc29sdmVkQWJzb2x1dGUsXG4gICAgXCJcXFxcXCIsXG4gICAgaXNQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIHJldHVybiByZXNvbHZlZERldmljZSArIChyZXNvbHZlZEFic29sdXRlID8gXCJcXFxcXCIgOiBcIlwiKSArIHJlc29sdmVkVGFpbCB8fCBcIi5cIjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsVUFBVSxRQUFRLDBCQUEwQjtBQUNyRCxTQUFTLGVBQWUsUUFBUSxpQ0FBaUM7QUFDakUsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsZUFBZSxFQUFFLG1CQUFtQixRQUFRLGFBQWE7QUFFbEU7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFHLFlBQXNCO0VBQy9DLElBQUksaUJBQWlCO0VBQ3JCLElBQUksZUFBZTtFQUNuQixJQUFJLG1CQUFtQjtFQUV2QixJQUFLLElBQUksSUFBSSxhQUFhLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUs7SUFDbEQsSUFBSTtJQUNKLG1DQUFtQztJQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUc7SUFDakIsSUFBSSxLQUFLLEdBQUc7TUFDVixPQUFPLFlBQVksQ0FBQyxFQUFFO0lBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtNQUMxQixJQUFJLE9BQU8sTUFBTSxRQUFRLFlBQVk7UUFDbkMsTUFBTSxJQUFJLFVBQ1I7TUFFSjtNQUNBLE9BQU8sS0FBSyxHQUFHO0lBQ2pCLE9BQU87TUFDTCxJQUNFLE9BQU8sTUFBTSxLQUFLLFFBQVEsY0FBYyxPQUFPLE1BQU0sUUFBUSxZQUM3RDtRQUNBLE1BQU0sSUFBSSxVQUNSO01BRUo7TUFDQSxPQUFPLEtBQUssR0FBRztNQUVmLDBEQUEwRDtNQUMxRCxxREFBcUQ7TUFDckQsSUFDRSxTQUFTLGFBQ1QsS0FBSyxLQUFLLENB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
+// denoCacheMetadata=17334109481114947153,8667544689236166222 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8b4e24245a9065e2615ec879005f14842c30d9da9bc0f7d190880e5b306b4fc6.js b/vendor/gen/https/jsr.io/8b4e24245a9065e2615ec879005f14842c30d9da9bc0f7d190880e5b306b4fc6.js
new file mode 100644
index 0000000..cc5a5b3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8b4e24245a9065e2615ec879005f14842c30d9da9bc0f7d190880e5b306b4fc6.js
@@ -0,0 +1,13 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * The character used to separate entries in the PATH environment variable.
+ */ export const DELIMITER = ";";
+/**
+ * The character used to separate components of a file path.
+ */ export const SEPARATOR = "\\";
+/**
+ * A regular expression that matches one or more path separators.
+ */ export const SEPARATOR_PATTERN = /[\\/]+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5leHBvcnQgY29uc3QgREVMSU1JVEVSID0gXCI7XCIgYXMgY29uc3Q7XG4vKipcbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBjb21wb25lbnRzIG9mIGEgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgU0VQQVJBVE9SID0gXCJcXFxcXCIgYXMgY29uc3Q7XG4vKipcbiAqIEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBvbmUgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBTRVBBUkFUT1JfUEFUVEVSTiA9IC9bXFxcXC9dKy87XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQzs7Q0FFQyxHQUNELE9BQU8sTUFBTSxZQUFZLElBQWE7QUFDdEM7O0NBRUMsR0FDRCxPQUFPLE1BQU0sWUFBWSxLQUFjO0FBQ3ZDOztDQUVDLEdBQ0QsT0FBTyxNQUFNLG9CQUFvQixTQUFTIn0=
+// denoCacheMetadata=17668859964459971281,7916944506755840668 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8b7c659a7c5be6d2872c842f5ca8b5e45a8847160f1da1ede807fc18f3209c98.js b/vendor/gen/https/jsr.io/8b7c659a7c5be6d2872c842f5ca8b5e45a8847160f1da1ede807fc18f3209c98.js
new file mode 100644
index 0000000..a996c61
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8b7c659a7c5be6d2872c842f5ca8b5e45a8847160f1da1ede807fc18f3209c98.js
@@ -0,0 +1,19 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Filters the given array, removing all elements that do not match the given predicate
+ * **in place. This means `array` will be modified!**.
+ */ export function filterInPlace(array, predicate) {
+ let outputIndex = 0;
+ for (const cur of array){
+ if (!predicate(cur)) {
+ continue;
+ }
+ array[outputIndex] = cur;
+ outputIndex += 1;
+ }
+ array.splice(outputIndex);
+ return array;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY29sbGVjdGlvbnMvMS4xLjEvX3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogRmlsdGVycyB0aGUgZ2l2ZW4gYXJyYXksIHJlbW92aW5nIGFsbCBlbGVtZW50cyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgZ2l2ZW4gcHJlZGljYXRlXG4gKiAqKmluIHBsYWNlLiBUaGlzIG1lYW5zIGBhcnJheWAgd2lsbCBiZSBtb2RpZmllZCEqKi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckluUGxhY2U8VD4oXG4gIGFycmF5OiBBcnJheTxUPixcbiAgcHJlZGljYXRlOiAoZWw6IFQpID0+IGJvb2xlYW4sXG4pOiBBcnJheTxUPiB7XG4gIGxldCBvdXRwdXRJbmRleCA9IDA7XG5cbiAgZm9yIChjb25zdCBjdXIgb2YgYXJyYXkpIHtcbiAgICBpZiAoIXByZWRpY2F0ZShjdXIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBhcnJheVtvdXRwdXRJbmRleF0gPSBjdXI7XG4gICAgb3V0cHV0SW5kZXggKz0gMTtcbiAgfVxuXG4gIGFycmF5LnNwbGljZShvdXRwdXRJbmRleCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLGNBQ2QsS0FBZSxFQUNmLFNBQTZCO0VBRTdCLElBQUksY0FBYztFQUVsQixLQUFLLE1BQU0sT0FBTyxNQUFPO0lBQ3ZCLElBQUksQ0FBQyxVQUFVLE1BQU07TUFDbkI7SUFDRjtJQUVBLEtBQUssQ0FBQyxZQUFZLEdBQUc7SUFDckIsZUFBZTtFQUNqQjtFQUVBLE1BQU0sTUFBTSxDQUFDO0VBRWIsT0FBTztBQUNUIn0=
+// denoCacheMetadata=16921842693870320869,15103808202423326312 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8d1c890b758033cc6367cbb53714b2eb41dce91e959b4ced1b0f0f650d53fb64.js b/vendor/gen/https/jsr.io/8d1c890b758033cc6367cbb53714b2eb41dce91e959b4ced1b0f0f650d53fb64.js
new file mode 100644
index 0000000..841342e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8d1c890b758033cc6367cbb53714b2eb41dce91e959b4ced1b0f0f650d53fb64.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { common as _common } from "./_common/common.ts";
+import { SEPARATOR } from "./constants.ts";
+/**
+ * Determines the common path from a set of paths for the given OS.
+ *
+ * @param paths Paths to search for common path.
+ * @returns The common path.
+ *
+ * @example Usage
+ * ```ts
+ * import { common } from "@std/path/common";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const path = common([
+ * "C:\\deno\\std\\path\\mod.ts",
+ * "C:\\deno\\std\\fs\\mod.ts"
+ * ]);
+ * assertEquals(path, "C:\\deno\\std\\");
+ * } else {
+ * const path = common([
+ * "./deno/std/path/mod.ts",
+ * "./deno/std/fs/mod.ts"
+ * ]);
+ * assertEquals(path, "./deno/std/");
+ * }
+ * ```
+ */ export function common(paths) {
+ return _common(paths, SEPARATOR);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9jb21tb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgY29tbW9uIGFzIF9jb21tb24gfSBmcm9tIFwiLi9fY29tbW9uL2NvbW1vbi50c1wiO1xuaW1wb3J0IHsgU0VQQVJBVE9SIH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgY29tbW9uIHBhdGggZnJvbSBhIHNldCBvZiBwYXRocyBmb3IgdGhlIGdpdmVuIE9TLlxuICpcbiAqIEBwYXJhbSBwYXRocyBQYXRocyB0byBzZWFyY2ggZm9yIGNvbW1vbiBwYXRoLlxuICogQHJldHVybnMgVGhlIGNvbW1vbiBwYXRoLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29tbW9uIH0gZnJvbSBcIkBzdGQvcGF0aC9jb21tb25cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBjb25zdCBwYXRoID0gY29tbW9uKFtcbiAqICAgICBcIkM6XFxcXGRlbm9cXFxcc3RkXFxcXHBhdGhcXFxcbW9kLnRzXCIsXG4gKiAgICAgXCJDOlxcXFxkZW5vXFxcXHN0ZFxcXFxmc1xcXFxtb2QudHNcIlxuICogICBdKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgsIFwiQzpcXFxcZGVub1xcXFxzdGRcXFxcXCIpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc3QgcGF0aCA9IGNvbW1vbihbXG4gKiAgICAgXCIuL2Rlbm8vc3RkL3BhdGgvbW9kLnRzXCIsXG4gKiAgICAgXCIuL2Rlbm8vc3RkL2ZzL21vZC50c1wiXG4gKiAgIF0pO1xuICogICBhc3NlcnRFcXVhbHMocGF0aCwgXCIuL2Rlbm8vc3RkL1wiKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBfY29tbW9uKHBhdGhzLCBTRVBBUkFUT1IpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLE9BQU8sUUFBUSxzQkFBc0I7QUFDeEQsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUJDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sS0FBZTtFQUNwQyxPQUFPLFFBQVEsT0FBTztBQUN4QiJ9
+// denoCacheMetadata=12660959028440574006,4984166743566449236 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/8d53724239042b86f5795d180122804571647256ffa8e5f8358e5712f4e4af88.js b/vendor/gen/https/jsr.io/8d53724239042b86f5795d180122804571647256ffa8e5f8358e5712f4e4af88.js
new file mode 100644
index 0000000..5b0350f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/8d53724239042b86f5795d180122804571647256ffa8e5f8358e5712f4e4af88.js
@@ -0,0 +1,51 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+/**
+ * Supported format for front matter. `"unknown"` is used when auto format
+ * detection logic fails.
+ */ const BOM = "\\ufeff?";
+const YAML_HEADER = `${BOM}(?:---yaml|= yaml =|---)`;
+const YAML_FOOTER = `(?:= yaml =|---)`;
+const TOML_HEADER = `${BOM}(?:---toml|\\+\\+\\+|= toml =)`;
+const TOML_FOOTER = `(?:---|\\+\\+\\+|= toml =)`;
+const JSON_HEADER = `${BOM}(?:---json|= json =)`;
+const JSON_FOOTER = `(?:---|= json =)`;
+const WHITESPACES = "\\s*";
+const NEWLINE = "\\r?\\n";
+const FRONT_MATTER = "(?<frontMatter>.+?)";
+const BODY = "(?:\\r?\\n(?<body>.+))?";
+const RECOGNIZE_YAML_REGEXP = new RegExp(`^${YAML_HEADER}${WHITESPACES}${NEWLINE}`, "i");
+const RECOGNIZE_TOML_REGEXP = new RegExp(`^${TOML_HEADER}${WHITESPACES}${NEWLINE}`, "i");
+const RECOGNIZE_JSON_REGEXP = new RegExp(`^${JSON_HEADER}${WHITESPACES}${NEWLINE}`, "i");
+export const EXTRACT_YAML_REGEXP = new RegExp(`^${YAML_HEADER}${WHITESPACES}${NEWLINE}${WHITESPACES}(?:${FRONT_MATTER}${WHITESPACES}${NEWLINE})?${YAML_FOOTER}${WHITESPACES}${BODY}$`, "is");
+export const EXTRACT_TOML_REGEXP = new RegExp(`^${TOML_HEADER}${WHITESPACES}${NEWLINE}${WHITESPACES}(?:${FRONT_MATTER}${WHITESPACES}${NEWLINE})?${TOML_FOOTER}${WHITESPACES}${BODY}$`, "is");
+export const EXTRACT_JSON_REGEXP = new RegExp(`^${JSON_HEADER}${WHITESPACES}${NEWLINE}${WHITESPACES}(?:${FRONT_MATTER}${WHITESPACES}${NEWLINE})?${JSON_FOOTER}${WHITESPACES}${BODY}$`, "is");
+export const RECOGNIZE_REGEXP_MAP = new Map([
+ [
+ "yaml",
+ RECOGNIZE_YAML_REGEXP
+ ],
+ [
+ "toml",
+ RECOGNIZE_TOML_REGEXP
+ ],
+ [
+ "json",
+ RECOGNIZE_JSON_REGEXP
+ ]
+]);
+export const EXTRACT_REGEXP_MAP = new Map([
+ [
+ "yaml",
+ EXTRACT_YAML_REGEXP
+ ],
+ [
+ "toml",
+ EXTRACT_TOML_REGEXP
+ ],
+ [
+ "json",
+ EXTRACT_JSON_REGEXP
+ ]
+]);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L19mb3JtYXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbi8qKlxuICogU3VwcG9ydGVkIGZvcm1hdCBmb3IgZnJvbnQgbWF0dGVyLiBgXCJ1bmtub3duXCJgIGlzIHVzZWQgd2hlbiBhdXRvIGZvcm1hdFxuICogZGV0ZWN0aW9uIGxvZ2ljIGZhaWxzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtYXQgPSBcInlhbWxcIiB8IFwidG9tbFwiIHwgXCJqc29uXCI7XG5cbmNvbnN0IEJPTSA9IFwiXFxcXHVmZWZmP1wiO1xuXG5jb25zdCBZQU1MX0hFQURFUiA9IGAke0JPTX0oPzotLS15YW1sfD0geWFtbCA9fC0tLSlgO1xuY29uc3QgWUFNTF9GT09URVIgPSBgKD86PSB5YW1sID18LS0tKWA7XG5cbmNvbnN0IFRPTUxfSEVBREVSID0gYCR7Qk9NfSg/Oi0tLXRvbWx8XFxcXCtcXFxcK1xcXFwrfD0gdG9tbCA9KWA7XG5jb25zdCBUT01MX0ZPT1RFUiA9IGAoPzotLS18XFxcXCtcXFxcK1xcXFwrfD0gdG9tbCA9KWA7XG5cbmNvbnN0IEpTT05fSEVBREVSID0gYCR7Qk9NfSg/Oi0tLWpzb258PSBqc29uID0pYDtcbmNvbnN0IEpTT05fRk9PVEVSID0gYCg/Oi0tLXw9IGpzb24gPSlgO1xuXG5jb25zdCBXSElURVNQQUNFUyA9IFwiXFxcXHMqXCI7XG5jb25zdCBORVdMSU5FID0gXCJcXFxccj9cXFxcblwiO1xuXG5jb25zdCBGUk9OVF9NQVRURVIgPSBcIig/PGZyb250TWF0dGVyPi4rPylcIjtcbmNvbnN0IEJPRFkgPSBcIig/OlxcXFxyP1xcXFxuKD88Ym9keT4uKykpP1wiO1xuXG5jb25zdCBSRUNPR05JWkVfWUFNTF9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICBgXiR7WUFNTF9IRUFERVJ9JHtXSElURVNQQUNFU30ke05FV0xJTkV9YCxcbiAgXCJpXCIsXG4pO1xuY29uc3QgUkVDT0dOSVpFX1RPTUxfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgYF4ke1RPTUxfSEVBREVSfSR7V0hJVEVTUEFDRVN9JHtORVdMSU5FfWAsXG4gIFwiaVwiLFxuKTtcbmNvbnN0IFJFQ09HTklaRV9KU09OX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gIGBeJHtKU09OX0hFQURFUn0ke1dISVRFU1BBQ0VTfSR7TkVXTElORX1gLFxuICBcImlcIixcbik7XG5cbmV4cG9ydCBjb25zdCBFWFRSQUNUX1lBTUxfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgYF4ke1lBTUxfSEVBREVSfSR7V0hJVEVTUEFDRVN9JHtORVdMSU5FfSR7V0hJVEVTUEFDRVN9KD86JHtGUk9OVF9NQVRURVJ9JHtXSElURVNQQUNFU30ke05FV0xJTkV9KT8ke1lBTUxfRk9PVEVSfSR7V0hJVEVTUEFDRVN9JHtCT0RZfSRgLFxuICBcImlzXCIsXG4pO1xuZXhwb3J0IGNvbnN0IEVYVFJBQ1RfVE9NTF9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICBgXiR7VE9NTF9IRUFERVJ9JHtXSElURVNQQUNFU30ke05FV0xJTkV9JHtXSElURVNQQUNFU30oPzoke0ZST05UX01BVFRFUn0ke1dISVRFU1BBQ0VTfSR7TkVXTElORX0pPyR7VE9NTF9GT09URVJ9JHtXSElURVNQQUNFU30ke0JPRFl9JGAsXG4gIFwiaXNcIixcbik7XG5leHBvcnQgY29uc3QgRVhUUkFDVF9KU09OX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gIGBeJHtKU09OX0hFQURFUn0ke1dISVRFU1BBQ0VTfSR7TkVXTElORX0ke1dISVRFU1BBQ0VTfSg/OiR7RlJPTlRfTUFUVEVSfSR7V0hJVEVTUEFDRVN9JHtORVdMSU5FfSk/JHtKU09OX0ZPT1RFUn0ke1dISVRFU1BBQ0VTfSR7Qk9EWX0kYCxcbiAgXCJpc1wiLFxuKTtcblxuZXhwb3J0IGNvbnN0IFJFQ09HTklaRV9SRUdFWFBfTUFQID0gbmV3IE1hcChbXG4gIFtcInlhbWxcIiwgUkVDT0dOSVpFX1lBTUxfUkVHRVhQXSxcbiAgW1widG9tbFwiLCBSRUNPR05JWkVfVE9NTF9SRUdFWFBdLFxuICBbXCJqc29uXCIsIFJFQ09HTklaRV9KU09OX1JFR0VYUF0sXG5dKTtcblxuZXhwb3J0IGNvbnN0IEVYVFJBQ1RfUkVHRVhQX01BUCA9IG5ldyBNYXAoW1xuICBbXCJ5YW1sXCIsIEVYVFJBQ1RfWUFNTF9SRUdFWFBdLFxuICBbXCJ0b21sXCIsIEVYVFJBQ1RfVE9NTF9SRUdFWFBdLFxuICBbXCJqc29uXCIsIEVYVFJBQ1RfSlNPTl9SRUdFWFBdLFxuXSk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBRXJEOzs7Q0FHQyxHQUdELE1BQU0sTUFBTTtBQUVaLE1BQU0sY0FBYyxHQUFHLElBQUksd0JBQXdCLENBQUM7QUFDcEQsTUFBTSxjQUFjLENBQUMsZ0JBQWdCLENBQUM7QUFFdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSw4QkFBOEIsQ0FBQztBQUMxRCxNQUFNLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQztBQUVoRCxNQUFNLGNBQWMsR0FBRyxJQUFJLG9CQUFvQixDQUFDO0FBQ2hELE1BQU0sY0FBYyxDQUFDLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sY0FBYztBQUNwQixNQUFNLFVBQVU7QUFFaEIsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sT0FBTztBQUViLE1BQU0sd0JBQXdCLElBQUksT0FDaEMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxjQUFjLFNBQVMsRUFDekM7QUFFRixNQUFNLHdCQUF3QixJQUFJLE9BQ2hDLENBQUMsQ0FBQyxFQUFFLGNBQWMsY0FBYyxTQUFTLEVBQ3pDO0FBRUYsTUFBTSx3QkFBd0IsSUFBSSxPQUNoQyxDQUFDLENBQUMsRUFBRSxjQUFjLGNBQWMsU0FBUyxFQUN6QztBQUdGLE9BQU8sTUFBTSxzQkFBc0IsSUFBSSxPQUNyQyxDQUFDLENBQUMsRUFBRSxjQUFjLGNBQWMsVUFBVSxZQUFZLEdBQUcsRUFBRSxlQUFlLGNBQWMsUUFBUSxFQUFFLEVBQUUsY0FBYyxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQ3ZJLE1BQ0E7QUFDRixPQUFPLE1BQU0sc0JBQXNCLElBQUksT0FDckMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxjQUFjLFVBQVUsWUFBWSxHQUFHLEVBQUUsZUFBZSxjQUFjLFFBQVEsRUFBRSxFQUFFLGNBQWMsY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUN2SSxNQUNBO0FBQ0YsT0FBTyxNQUFNLHNCQUFzQixJQUFJLE9BQ3JDLENBQUMsQ0FBQyxFQUFFLGNBQWMsY0FBYyxVQUFVLFlBQVksR0FBRyxFQUFFLGVBQWUsY0FBYyxRQUFRLEVBQUUsRUFBRSxjQUFjLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFDdkksTUFDQTtBQUVGLE9BQU8sTUFBTSx1QkFBdUIsSUFBSSxJQUFJO0VBQzFDO0lBQUM7SUFBUTtHQUFzQjtFQUMvQjtJQUFDO0lBQVE7R0FBc0I7RUFDL0I7SUFBQztJQUFRO0dBQXNCO0NBQ2hDLEVBQUU7QUFFSCxPQUFPLE1BQU0scUJBQXFCLElBQUksSUFBSTtFQUN4QztJQUFDO0lBQVE7R0FBb0I7RUFDN0I7SUFBQztJQUFRO0dBQW9CO0VBQzdCO0lBQUM7SUFBUTtHQUFvQjtDQUM5QixFQUFFIn0=
+// denoCacheMetadata=10857738309248229031,11849906769793540634 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/9012576778908b158e024660562adbf3f4f16d402c08352c59ab89a1249c85b1.js b/vendor/gen/https/jsr.io/9012576778908b158e024660562adbf3f4f16d402c08352c59ab89a1249c85b1.js
new file mode 100644
index 0000000..e4fe8e8
--- /dev/null
+++ b/vendor/gen/https/jsr.io/9012576778908b158e024660562adbf3f4f16d402c08352c59ab89a1249c85b1.js
@@ -0,0 +1,87 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { isNegativeZero } from "../_utils.ts";
+const YAML_FLOAT_PATTERN = new RegExp(// 2.5e4, 2.5 and integers
+"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?" + // .2e4, .2
+// special case, seems not from spec
+"|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?" + // .inf
+"|[-+]?\\.(?:inf|Inf|INF)" + // .nan
+"|\\.(?:nan|NaN|NAN))$");
+function resolveYamlFloat(data) {
+ if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`
+ // Probably should update regexp & check speed
+ data[data.length - 1] === "_") {
+ return false;
+ }
+ return true;
+}
+function constructYamlFloat(data) {
+ let value = data.replace(/_/g, "").toLowerCase();
+ const sign = value[0] === "-" ? -1 : 1;
+ if (value[0] && "+-".includes(value[0])) {
+ value = value.slice(1);
+ }
+ if (value === ".inf") {
+ return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
+ }
+ if (value === ".nan") {
+ return NaN;
+ }
+ return sign * parseFloat(value);
+}
+const SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
+function representYamlFloat(// deno-lint-ignore ban-types
+object, style) {
+ const value = object instanceof Number ? object.valueOf() : object;
+ if (isNaN(value)) {
+ switch(style){
+ case "lowercase":
+ return ".nan";
+ case "uppercase":
+ return ".NAN";
+ case "camelcase":
+ return ".NaN";
+ }
+ } else if (Number.POSITIVE_INFINITY === value) {
+ switch(style){
+ case "lowercase":
+ return ".inf";
+ case "uppercase":
+ return ".INF";
+ case "camelcase":
+ return ".Inf";
+ }
+ } else if (Number.NEGATIVE_INFINITY === value) {
+ switch(style){
+ case "lowercase":
+ return "-.inf";
+ case "uppercase":
+ return "-.INF";
+ case "camelcase":
+ return "-.Inf";
+ }
+ } else if (isNegativeZero(value)) {
+ return "-0.0";
+ }
+ const res = value.toString(10);
+ // JS stringifier can build scientific format without dots: 5e-100,
+ // while YAML requires dot: 5.e-100. Fix it with simple hack
+ return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
+}
+function isFloat(object) {
+ if (object instanceof Number) object = object.valueOf();
+ return typeof object === "number" && (object % 1 !== 0 || isNegativeZero(object));
+}
+export const float = {
+ tag: "tag:yaml.org,2002:float",
+ construct: constructYamlFloat,
+ defaultStyle: "lowercase",
+ kind: "scalar",
+ predicate: isFloat,
+ represent: representYamlFloat,
+ resolve: resolveYamlFloat
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9mbG9hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFN0eWxlVmFyaWFudCwgVHlwZSB9IGZyb20gXCIuLi9fdHlwZS50c1wiO1xuaW1wb3J0IHsgaXNOZWdhdGl2ZVplcm8gfSBmcm9tIFwiLi4vX3V0aWxzLnRzXCI7XG5cbmNvbnN0IFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzXG4gIFwiXig/OlstK10/KD86MHxbMS05XVswLTlfXSopKD86XFxcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP1wiICtcbiAgICAvLyAuMmU0LCAuMlxuICAgIC8vIHNwZWNpYWwgY2FzZSwgc2VlbXMgbm90IGZyb20gc3BlY1xuICAgIFwifFxcXFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/XCIgK1xuICAgIC8vIC5pbmZcbiAgICBcInxbLStdP1xcXFwuKD86aW5mfEluZnxJTkYpXCIgK1xuICAgIC8vIC5uYW5cbiAgICBcInxcXFxcLig/Om5hbnxOYU58TkFOKSkkXCIsXG4pO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGE6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8XG4gICAgLy8gUXVpY2sgaGFjayB0byBub3QgYWxsb3cgaW50ZWdlcnMgZW5kIHdpdGggYF9gXG4gICAgLy8gUHJvYmFibHkgc2hvdWxkIHVwZGF0ZSByZWdleHAgJiBjaGVjayBzcGVlZFxuICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gXCJfXCJcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgdmFsdWUgPSBkYXRhLnJlcGxhY2UoL18vZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc2lnbiA9IHZhbHVlWzBdID09PSBcIi1cIiA/IC0xIDogMTtcblxuICBpZiAodmFsdWVbMF0gJiYgXCIrLVwiLmluY2x1ZGVzKHZhbHVlWzBdKSkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT09IFwiLmluZlwiKSB7XG4gICAgcmV0dXJuIHNpZ24gPT09IDEgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBcIi5uYW5cIikge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlKTtcbn1cblxuY29uc3QgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICBvYmplY3Q6IG51bWJlciB8IE51bWJlcixcbiAgc3R5bGU/OiBTdHlsZVZhcmlhbnQsXG4pOiBzdHJpbmcge1xuICBjb25zdCB2YWx1ZSA9IG9iamVjdCBpbnN0YW5jZW9mIE51bWJlciA/IG9iamVjdC52YWx1ZU9mKCkgOiBvYmplY3Q7XG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5uYW5cIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLk5BTlwiO1xuICAgICAgY2FzZSBcImNhbWVsY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuTmFOXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gdmFsdWUpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5pbmZcIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLklORlwiO1xuICAgICAgY2FzZSBcImNhbWVsY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuSW5mXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gdmFsdWUpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi0uaW5mXCI7XG4gICAgICBjYXNlIFwidXBwZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi0uSU5GXCI7XG4gICAgICBjYXNlIFwiY2FtZWxjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi0uSW5mXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTmVnYXRpdmVaZXJvKHZhbHVlKSkge1xuICAgIHJldHVybiBcIi0wLjBcIjtcbiAgfVxuXG4gIGNvbnN0IHJlcyA9IHZhbHVlLnRvU3RyaW5nKDEwKTtcblxuICAvLyBKUyBzdHJpbmdpZmllciBjYW4gYnVpbGQgc2NpZW50aWZpYyBmb3JtYXQgd2l0aG91dCBkb3RzOiA1ZS0xMDAsXG4gIC8vIHdoaWxlIFlBTUwgcmVxdWlyZXMgZG90OiA1LmUtMTAwLiBGaXggaXQgd2l0aCBzaW1wbGUgaGFja1xuXG4gIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKFwiZVwiLCBcIi5lXCIpIDogcmVzO1xufVxuXG5mdW5jdGlvbiBpc0Zsb2F0KG9iamVjdDogdW5rbm93bik6IG9iamVjdCBpcyBudW1iZXIge1xuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKSBvYmplY3QgPSBvYmplY3QudmFsdWVPZigpO1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIChvYmplY3QgJSAxICE9PSAwIHx8IGlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5leHBvcnQgY29uc3QgZmxvYXQ6IFR5cGU8XCJzY2FsYXJcIiwgbnVtYmVyPiA9IHtcbiAgdGFnOiBcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XCIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6IFwibG93ZXJjYXNlXCIsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvRkFBb0Y7QUFDcEYsMEVBQTBFO0FBQzFFLHFEQUFxRDtBQUdyRCxTQUFTLGNBQWMsUUFBUSxlQUFlO0FBRTlDLE1BQU0scUJBQXFCLElBQUksT0FDN0IsMEJBQTBCO0FBQzFCLG1FQUNFLFdBQVc7QUFDWCxvQ0FBb0M7QUFDcEMsb0NBQ0EsT0FBTztBQUNQLDZCQUNBLE9BQU87QUFDUDtBQUdKLFNBQVMsaUJBQWlCLElBQVk7RUFDcEMsSUFDRSxDQUFDLG1CQUFtQixJQUFJLENBQUMsU0FDekIsZ0RBQWdEO0VBQ2hELDhDQUE4QztFQUM5QyxJQUFJLENBQUMsS0FBSyxNQUFNLEdBQUcsRUFBRSxLQUFLLEtBQzFCO0lBQ0EsT0FBTztFQUNUO0VBRUEsT0FBTztBQUNUO0FBRUEsU0FBUyxtQkFBbUIsSUFBWTtFQUN0QyxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLFdBQVc7RUFDOUMsTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUk7RUFFckMsSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUc7SUFDdkMsUUFBUSxNQUFNLEtBQUssQ0FBQztFQUN0QjtFQUVBLElBQUksVUFBVSxRQUFRO0lBQ3BCLE9BQU8sU0FBUyxJQUFJLE9BQU8saUJBQWlCLEdBQUcsT0FBTyxpQkFBaUI7RUFDekU7RUFDQSxJQUFJLFVBQVUsUUFBUTtJQUNwQixPQUFPO0VBQ1Q7RUFDQSxPQUFPLE9BQU8sV0FBVztBQUMzQjtBQUVBLE1BQU0seUJBQXlCO0FBRS9CLFNBQVMsbUJBQ1AsNkJBQTZCO0FBQzdCLE1BQXVCLEVBQ3ZCLEtBQW9CO0VBRXBCLE1BQU0sUUFBUSxrQkFBa0IsU0FBUyxPQUFPLE9BQU8sS0FBSztFQUM1RCxJQUFJLE1BQU0sUUFBUTtJQUNoQixPQUFRO01BQ04sS0FBSztRQUNILE9BQU87TUFDVCxLQUFLO1FBQ0gsT0FBTztNQUNULEtBQUs7UUFDSCxPQUFPO0lBQ1g7RUFDRixPQUFPLElBQUksT0FBTyxpQkFBaUIsS0FBSyxPQUFPO0lBQzdDLE9BQVE7TUFDTixLQUFLO1FBQ0gsT0FBTztNQUNULEtBQUs7UUFDSCxPQUFPO01BQ1QsS0FBSztRQUNILE9BQU87SUFDWDtFQUNGLE9BQU8sSUFBSSxPQUFPLGlCQUFpQixLQUFLLE9BQU87SUFDN0MsT0FBUTtNQUNOLEtBQUs7UUFDSCxPQUFPO01BQ1QsS0FBSztRQUNILE9BQU87TUFDVCxLQUFLO1FBQ0gsT0FBTztJQUNYO0VBQ0YsT0FBTyxJQUFJLGVBQWUsUUFBUTtJQUNoQyxPQUFPO0VBQ1Q7RUFFQSxNQUFNLE1BQU0sTUFBTSxRQUFRLENBQUM7RUFFM0IsbUVBQW1FO0VBQ25FLDREQUE0RDtFQUU1RCxPQUFPLHVCQUF1QixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7QUFDckU7QUFFQSxTQUFTLFFBQVEsTUFBZTtFQUM5QixJQUFJLGtCQUFrQixRQUFRLFNBQVMsT0FBTyxPQUFPO0VBQ3JELE9BQU8sT0FBTyxXQUFXLFlBQ3ZCLENBQUMsU0FBUyxNQUFNLEtBQUssZUFBZSxPQUFPO0FBQy9DO0FBRUEsT0FBTyxNQUFNLFFBQWdDO0VBQzNDLEtBQUs7RUFDTCxXQUFXO0VBQ1gsY0FBYztFQUNkLE1BQU07RUFDTixXQUFXO0VBQ1gsV0FBVztFQUNYLFNBQVM7QUFDWCxFQUFFIn0=
+// denoCacheMetadata=11362213153114377680,6633427795845667555 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/90332a2c99630129e9ac5ad20794927391d60c3a46aba172cfbc4bacbd336134.js b/vendor/gen/https/jsr.io/90332a2c99630129e9ac5ad20794927391d60c3a46aba172cfbc4bacbd336134.js
new file mode 100644
index 0000000..6b5a88d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/90332a2c99630129e9ac5ad20794927391d60c3a46aba172cfbc4bacbd336134.js
@@ -0,0 +1,42 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "../_common/assert_path.ts";
+import { normalize } from "./normalize.ts";
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ *
+ * @example Usage
+ * ```ts
+ * import { join } from "@std/path/posix/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = join("/foo", "bar", "baz/asdf", "quux", "..");
+ * assertEquals(path, "/foo/bar/baz/asdf");
+ * ```
+ *
+ * @example Working with URLs
+ * ```ts
+ * import { join } from "@std/path/posix/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const url = new URL("https://deno.land");
+ * url.pathname = join("std", "path", "mod.ts");
+ * assertEquals(url.href, "https://deno.land/std/path/mod.ts");
+ *
+ * url.pathname = join("//std", "path/", "/mod.ts");
+ * assertEquals(url.href, "https://deno.land/std/path/mod.ts");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `join` from `@std/path/posix/unstable-join`.
+ *
+ * @param paths The paths to join.
+ * @returns The joined path.
+ */ export function join(...paths) {
+ if (paths.length === 0) return ".";
+ paths.forEach((path)=>assertPath(path));
+ const joined = paths.filter((path)=>path.length > 0).join("/");
+ return joined === "" ? "." : normalize(joined);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9qb2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIi4vbm9ybWFsaXplLnRzXCI7XG5cbi8qKlxuICogSm9pbiBhbGwgZ2l2ZW4gYSBzZXF1ZW5jZSBvZiBgcGF0aHNgLHRoZW4gbm9ybWFsaXplcyB0aGUgcmVzdWx0aW5nIHBhdGguXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9qb2luXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gam9pbihcIi9mb29cIiwgXCJiYXJcIiwgXCJiYXovYXNkZlwiLCBcInF1dXhcIiwgXCIuLlwiKTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi9mb28vYmFyL2Jhei9hc2RmXCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgV29ya2luZyB3aXRoIFVSTHNcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9qb2luXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCB1cmwgPSBuZXcgVVJMKFwiaHR0cHM6Ly9kZW5vLmxhbmRcIik7XG4gKiB1cmwucGF0aG5hbWUgPSBqb2luKFwic3RkXCIsIFwicGF0aFwiLCBcIm1vZC50c1wiKTtcbiAqIGFzc2VydEVxdWFscyh1cmwuaHJlZiwgXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHNcIik7XG4gKlxuICogdXJsLnBhdGhuYW1lID0gam9pbihcIi8vc3RkXCIsIFwicGF0aC9cIiwgXCIvbW9kLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKHVybC5ocmVmLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50c1wiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGpvaW5gIGZyb20gYEBzdGQvcGF0aC9wb3NpeC91bnN0YWJsZS1qb2luYC5cbiAqXG4gKiBAcGFyYW0gcGF0aHMgVGhlIHBhdGhzIHRvIGpvaW4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChwYXRocy5sZW5ndGggPT09IDApIHJldHVybiBcIi5cIjtcbiAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4gYXNzZXJ0UGF0aChwYXRoKSk7XG4gIGNvbnN0IGpvaW5lZCA9IHBhdGhzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5sZW5ndGggPiAwKS5qb2luKFwiL1wiKTtcbiAgcmV0dXJuIGpvaW5lZCA9PT0gXCJcIiA/IFwiLlwiIDogbm9ybWFsaXplKGpvaW5lZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QkMsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFHLEtBQWU7RUFDckMsSUFBSSxNQUFNLE1BQU0sS0FBSyxHQUFHLE9BQU87RUFDL0IsTUFBTSxPQUFPLENBQUMsQ0FBQyxPQUFTLFdBQVc7RUFDbkMsTUFBTSxTQUFTLE1BQU0sTUFBTSxDQUFDLENBQUMsT0FBUyxLQUFLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztFQUM1RCxPQUFPLFdBQVcsS0FBSyxNQUFNLFVBQVU7QUFDekMifQ==
+// denoCacheMetadata=17121326762094577775,17185432673470584853 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/90ec6ffe8bc46e52f8dee6e4ac18e9eb05d2961f04043f5c0568a52a5ee68719.js b/vendor/gen/https/jsr.io/90ec6ffe8bc46e52f8dee6e4ac18e9eb05d2961f04043f5c0568a52a5ee68719.js
new file mode 100644
index 0000000..18b9005
--- /dev/null
+++ b/vendor/gen/https/jsr.io/90ec6ffe8bc46e52f8dee6e4ac18e9eb05d2961f04043f5c0568a52a5ee68719.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { normalize } from "./normalize.ts";
+import { SEPARATOR_PATTERN } from "./constants.ts";
+/**
+ * Like normalize(), but doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalizeGlob } from "@std/path/posix/normalize-glob";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = normalizeGlob("foo/bar/../*", { globstar: true });
+ * assertEquals(path, "foo/*");
+ * ```
+ *
+ * @param glob The glob to normalize.
+ * @param options The options to use.
+ * @returns The normalized path.
+ */ export function normalizeGlob(glob, options = {}) {
+ const { globstar = false } = options;
+ if (glob.match(/\0/g)) {
+ throw new Error(`Glob contains invalid characters: "${glob}"`);
+ }
+ if (!globstar) {
+ return normalize(glob);
+ }
+ const s = SEPARATOR_PATTERN.source;
+ const badParentPattern = new RegExp(`(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, "g");
+ return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, "..");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9ub3JtYWxpemVfZ2xvYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH0gZnJvbSBcIi4uL19jb21tb24vZ2xvYl90b19yZWdfZXhwLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tIFwiLi9ub3JtYWxpemUudHNcIjtcbmltcG9ydCB7IFNFUEFSQVRPUl9QQVRURVJOIH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfTtcblxuLyoqXG4gKiBMaWtlIG5vcm1hbGl6ZSgpLCBidXQgZG9lc24ndCBjb2xsYXBzZSBcIioqXFwvLi5cIiB3aGVuIGBnbG9ic3RhcmAgaXMgdHJ1ZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IG5vcm1hbGl6ZUdsb2IgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L25vcm1hbGl6ZS1nbG9iXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gbm9ybWFsaXplR2xvYihcImZvby9iYXIvLi4vKlwiLCB7IGdsb2JzdGFyOiB0cnVlIH0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiZm9vLypcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYiBUaGUgZ2xvYiB0byBub3JtYWxpemUuXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byB1c2UuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplR2xvYihcbiAgZ2xvYjogc3RyaW5nLFxuICBvcHRpb25zOiBQaWNrPEdsb2JPcHRpb25zLCBcImdsb2JzdGFyXCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGdsb2JzdGFyID0gZmFsc2UgfTogR2xvYk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAoZ2xvYi5tYXRjaCgvXFwwL2cpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHbG9iIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogXCIke2dsb2J9XCJgKTtcbiAgfVxuICBpZiAoIWdsb2JzdGFyKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZShnbG9iKTtcbiAgfVxuICBjb25zdCBzID0gU0VQQVJBVE9SX1BBVFRFUk4uc291cmNlO1xuICBjb25zdCBiYWRQYXJlbnRQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICBgKD88PSgke3N9fF4pXFxcXCpcXFxcKiR7c30pXFxcXC5cXFxcLig/PSR7c318JClgLFxuICAgIFwiZ1wiLFxuICApO1xuICByZXR1cm4gbm9ybWFsaXplKGdsb2IucmVwbGFjZShiYWRQYXJlbnRQYXR0ZXJuLCBcIlxcMFwiKSkucmVwbGFjZSgvXFwwL2csIFwiLi5cIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUdyQyxTQUFTLFNBQVMsUUFBUSxpQkFBaUI7QUFDM0MsU0FBUyxpQkFBaUIsUUFBUSxpQkFBaUI7QUFJbkQ7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBQ0QsT0FBTyxTQUFTLGNBQ2QsSUFBWSxFQUNaLFVBQXlDLENBQUMsQ0FBQztFQUUzQyxNQUFNLEVBQUUsV0FBVyxLQUFLLEVBQUUsR0FBZ0I7RUFDMUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRO0lBQ3JCLE1BQU0sSUFBSSxNQUFNLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDL0Q7RUFDQSxJQUFJLENBQUMsVUFBVTtJQUNiLE9BQU8sVUFBVTtFQUNuQjtFQUNBLE1BQU0sSUFBSSxrQkFBa0IsTUFBTTtFQUNsQyxNQUFNLG1CQUFtQixJQUFJLE9BQzNCLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQ3pDO0VBRUYsT0FBTyxVQUFVLEtBQUssT0FBTyxDQUFDLGtCQUFrQixPQUFPLE9BQU8sQ0FBQyxPQUFPO0FBQ3hFIn0=
+// denoCacheMetadata=11868087128212183149,101441925027780406 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/910266dea525a8c1a49ff738196a5e27d7d1d437c43571597b5e2fc30e3033fb.js b/vendor/gen/https/jsr.io/910266dea525a8c1a49ff738196a5e27d7d1d437c43571597b5e2fc30e3033fb.js
new file mode 100644
index 0000000..532a43e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/910266dea525a8c1a49ff738196a5e27d7d1d437c43571597b5e2fc30e3033fb.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { joinGlobs as posixJoinGlobs } from "./posix/join_globs.ts";
+import { joinGlobs as windowsJoinGlobs } from "./windows/join_globs.ts";
+/**
+ * Joins a sequence of globs, then normalizes the resulting glob.
+ *
+ * Behaves like {@linkcode https://jsr.io/@std/path/doc/~/join | join()}, but
+ * doesn't collapse `**\/..` when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { joinGlobs } from "@std/path/join-globs";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(joinGlobs(["foo", "bar", "..", "baz"]), "foo\\baz");
+ * assertEquals(joinGlobs(["foo", "**", "bar", "..", "baz"], { globstar: true }), "foo\\**\\baz");
+ * } else {
+ * assertEquals(joinGlobs(["foo", "bar", "..", "baz"]), "foo/baz");
+ * assertEquals(joinGlobs(["foo", "**", "bar", "..", "baz"], { globstar: true }), "foo/**\/baz");
+ * }
+ * ```
+ *
+ * @param globs Globs to be joined and normalized.
+ * @param options Glob options.
+ * @returns The joined and normalized glob string.
+ */ export function joinGlobs(globs, options = {}) {
+ return isWindows ? windowsJoinGlobs(globs, options) : posixJoinGlobs(globs, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9qb2luX2dsb2JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgR2xvYk9wdGlvbnMgfSBmcm9tIFwiLi9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50c1wiO1xuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyBqb2luR2xvYnMgYXMgcG9zaXhKb2luR2xvYnMgfSBmcm9tIFwiLi9wb3NpeC9qb2luX2dsb2JzLnRzXCI7XG5pbXBvcnQgeyBqb2luR2xvYnMgYXMgd2luZG93c0pvaW5HbG9icyB9IGZyb20gXCIuL3dpbmRvd3Mvam9pbl9nbG9icy50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbi8qKlxuICogSm9pbnMgYSBzZXF1ZW5jZSBvZiBnbG9icywgdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgZ2xvYi5cbiAqXG4gKiBCZWhhdmVzIGxpa2Uge0BsaW5rY29kZSBodHRwczovL2pzci5pby9Ac3RkL3BhdGgvZG9jL34vam9pbiB8IGpvaW4oKX0sIGJ1dFxuICogZG9lc24ndCBjb2xsYXBzZSBgKipcXC8uLmAgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqb2luR2xvYnMgfSBmcm9tIFwiQHN0ZC9wYXRoL2pvaW4tZ2xvYnNcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoam9pbkdsb2JzKFtcImZvb1wiLCBcImJhclwiLCBcIi4uXCIsIFwiYmF6XCJdKSwgXCJmb29cXFxcYmF6XCIpO1xuICogICBhc3NlcnRFcXVhbHMoam9pbkdsb2JzKFtcImZvb1wiLCBcIioqXCIsIFwiYmFyXCIsIFwiLi5cIiwgXCJiYXpcIl0sIHsgZ2xvYnN0YXI6IHRydWUgfSksIFwiZm9vXFxcXCoqXFxcXGJhelwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhqb2luR2xvYnMoW1wiZm9vXCIsIFwiYmFyXCIsIFwiLi5cIiwgXCJiYXpcIl0pLCBcImZvby9iYXpcIik7XG4gKiAgIGFzc2VydEVxdWFscyhqb2luR2xvYnMoW1wiZm9vXCIsIFwiKipcIiwgXCJiYXJcIiwgXCIuLlwiLCBcImJhelwiXSwgeyBnbG9ic3RhcjogdHJ1ZSB9KSwgXCJmb28vKipcXC9iYXpcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYnMgR2xvYnMgdG8gYmUgam9pbmVkIGFuZCBub3JtYWxpemVkLlxuICogQHBhcmFtIG9wdGlvbnMgR2xvYiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGpvaW5lZCBhbmQgbm9ybWFsaXplZCBnbG9iIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c0pvaW5HbG9icyhnbG9icywgb3B0aW9ucylcbiAgICA6IHBvc2l4Sm9pbkdsb2JzKGdsb2JzLCBvcHRpb25zKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBR3JDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxhQUFhLGNBQWMsUUFBUSx3QkFBd0I7QUFDcEUsU0FBUyxhQUFhLGdCQUFnQixRQUFRLDBCQUEwQjtBQUl4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1QkMsR0FDRCxPQUFPLFNBQVMsVUFDZCxLQUFlLEVBQ2YsVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sWUFDSCxpQkFBaUIsT0FBTyxXQUN4QixlQUFlLE9BQU87QUFDNUIifQ==
+// denoCacheMetadata=14270524343680273118,8886328438395208309 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/922f7cb1f4edaef51d69b5613cec55bea117e9f71d3b74f49cadebee27ca9137.js b/vendor/gen/https/jsr.io/922f7cb1f4edaef51d69b5613cec55bea117e9f71d3b74f49cadebee27ca9137.js
new file mode 100644
index 0000000..15cf5c0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/922f7cb1f4edaef51d69b5613cec55bea117e9f71d3b74f49cadebee27ca9137.js
@@ -0,0 +1,12 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const merge = {
+ tag: "tag:yaml.org,2002:merge",
+ kind: "scalar",
+ resolve: (data)=>data === "<<" || data === null,
+ construct: (data)=>data
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9tZXJnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiLi4vX3R5cGUudHNcIjtcblxuZXhwb3J0IGNvbnN0IG1lcmdlOiBUeXBlPFwic2NhbGFyXCIsIHVua25vd24+ID0ge1xuICB0YWc6IFwidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2VcIixcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogKGRhdGE6IHVua25vd24pOiBib29sZWFuID0+IGRhdGEgPT09IFwiPDxcIiB8fCBkYXRhID09PSBudWxsLFxuICBjb25zdHJ1Y3Q6IChkYXRhOiB1bmtub3duKTogdW5rbm93biA9PiBkYXRhLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsT0FBTyxNQUFNLFFBQWlDO0VBQzVDLEtBQUs7RUFDTCxNQUFNO0VBQ04sU0FBUyxDQUFDLE9BQTJCLFNBQVMsUUFBUSxTQUFTO0VBQy9ELFdBQVcsQ0FBQyxPQUEyQjtBQUN6QyxFQUFFIn0=
+// denoCacheMetadata=9499635318342153485,8199520343082147980 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/92434716b7698fef650a97c8f39c0d5b9a386c75f835219feb0ddf94a0156dd9.js b/vendor/gen/https/jsr.io/92434716b7698fef650a97c8f39c0d5b9a386c75f835219feb0ddf94a0156dd9.js
new file mode 100644
index 0000000..4c833f7
--- /dev/null
+++ b/vendor/gen/https/jsr.io/92434716b7698fef650a97c8f39c0d5b9a386c75f835219feb0ddf94a0156dd9.js
@@ -0,0 +1,9 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function assertArg(path) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL2Rpcm5hbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0UGF0aCB9IGZyb20gXCIuL2Fzc2VydF9wYXRoLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBcmcocGF0aDogc3RyaW5nKSB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLFFBQVEsbUJBQW1CO0FBRTlDLE9BQU8sU0FBUyxVQUFVLElBQVk7RUFDcEMsV0FBVztFQUNYLElBQUksS0FBSyxNQUFNLEtBQUssR0FBRyxPQUFPO0FBQ2hDIn0=
+// denoCacheMetadata=17712730746436136858,17593399102706906974 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/9337c54a851fa7e98de02877cc8d9ce59da3ab1f79e4ae31856af9f815a2de5e.js b/vendor/gen/https/jsr.io/9337c54a851fa7e98de02877cc8d9ce59da3ab1f79e4ae31856af9f815a2de5e.js
new file mode 100644
index 0000000..67aaccc
--- /dev/null
+++ b/vendor/gen/https/jsr.io/9337c54a851fa7e98de02877cc8d9ce59da3ab1f79e4ae31856af9f815a2de5e.js
@@ -0,0 +1,10 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function assertArgs(from, to) {
+ assertPath(from);
+ assertPath(to);
+ if (from === to) return "";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL3JlbGF0aXZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi9hc3NlcnRfcGF0aC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXJncyhmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpIHtcbiAgYXNzZXJ0UGF0aChmcm9tKTtcbiAgYXNzZXJ0UGF0aCh0byk7XG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsT0FBTyxTQUFTLFdBQVcsSUFBWSxFQUFFLEVBQVU7RUFDakQsV0FBVztFQUNYLFdBQVc7RUFDWCxJQUFJLFNBQVMsSUFBSSxPQUFPO0FBQzFCIn0=
+// denoCacheMetadata=4217116438509172037,3922427261957141882 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/952cb0109337dc9b2ca17eb596e622208b74117dae73e791d4ce3d8b2e9a74f4.js b/vendor/gen/https/jsr.io/952cb0109337dc9b2ca17eb596e622208b74117dae73e791d4ce3d8b2e9a74f4.js
new file mode 100644
index 0000000..89c09fb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/952cb0109337dc9b2ca17eb596e622208b74117dae73e791d4ce3d8b2e9a74f4.js
@@ -0,0 +1,77 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isIterator, isToken, needsEncoding } from "./_util.ts";
+/**
+ * Serializes the media type and the optional parameters as a media type
+ * conforming to {@link https://www.rfc-editor.org/rfc/rfc2045.html | RFC 2045} and
+ * {@link https://www.rfc-editor.org/rfc/rfc2616.html | RFC 2616}.
+ *
+ * The type and parameter names are written in lower-case.
+ *
+ * When any of the arguments results in a standard violation then the return
+ * value will be an empty string (`""`).
+ *
+ * @param type The media type to serialize.
+ * @param param Optional parameters to serialize.
+ *
+ * @returns The serialized media type.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { formatMediaType } from "@std/media-types/format-media-type";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(formatMediaType("text/plain"), "text/plain");
+ * ```
+ *
+ * @example With parameters
+ * ```ts
+ * import { formatMediaType } from "@std/media-types/format-media-type";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(formatMediaType("text/plain", { charset: "UTF-8" }), "text/plain; charset=UTF-8");
+ * ```
+ */ export function formatMediaType(type, param) {
+ let serializedMediaType = "";
+ const [major = "", sub] = type.split("/");
+ if (!sub) {
+ if (!isToken(type)) {
+ return "";
+ }
+ serializedMediaType += type.toLowerCase();
+ } else {
+ if (!isToken(major) || !isToken(sub)) {
+ return "";
+ }
+ serializedMediaType += `${major.toLowerCase()}/${sub.toLowerCase()}`;
+ }
+ if (param) {
+ param = isIterator(param) ? Object.fromEntries(param) : param;
+ const attrs = Object.keys(param);
+ attrs.sort();
+ for (const attribute of attrs){
+ if (!isToken(attribute)) {
+ return "";
+ }
+ const value = param[attribute];
+ serializedMediaType += `; ${attribute.toLowerCase()}`;
+ const needEnc = needsEncoding(value);
+ if (needEnc) {
+ serializedMediaType += "*";
+ }
+ serializedMediaType += "=";
+ if (needEnc) {
+ serializedMediaType += `utf-8''${encodeURIComponent(value)}`;
+ continue;
+ }
+ if (isToken(value)) {
+ serializedMediaType += value;
+ continue;
+ }
+ serializedMediaType += `"${value.replace(/["\\]/gi, (m)=>`\\${m}`)}"`;
+ }
+ }
+ return serializedMediaType;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvZm9ybWF0X21lZGlhX3R5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNJdGVyYXRvciwgaXNUb2tlbiwgbmVlZHNFbmNvZGluZyB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVkaWEgdHlwZSBhbmQgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXMgYSBtZWRpYSB0eXBlXG4gKiBjb25mb3JtaW5nIHRvIHtAbGluayBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMjA0NS5odG1sIHwgUkZDIDIwNDV9IGFuZFxuICoge0BsaW5rIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMyNjE2Lmh0bWwgfCBSRkMgMjYxNn0uXG4gKlxuICogVGhlIHR5cGUgYW5kIHBhcmFtZXRlciBuYW1lcyBhcmUgd3JpdHRlbiBpbiBsb3dlci1jYXNlLlxuICpcbiAqIFdoZW4gYW55IG9mIHRoZSBhcmd1bWVudHMgcmVzdWx0cyBpbiBhIHN0YW5kYXJkIHZpb2xhdGlvbiB0aGVuIHRoZSByZXR1cm5cbiAqIHZhbHVlIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nIChgXCJcImApLlxuICpcbiAqIEBwYXJhbSB0eXBlIFRoZSBtZWRpYSB0eXBlIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBwYXJhbSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHNlcmlhbGl6ZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBtZWRpYSB0eXBlLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZm9ybWF0TWVkaWFUeXBlIH0gZnJvbSBcIkBzdGQvbWVkaWEtdHlwZXMvZm9ybWF0LW1lZGlhLXR5cGVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhmb3JtYXRNZWRpYVR5cGUoXCJ0ZXh0L3BsYWluXCIpLCBcInRleHQvcGxhaW5cIik7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHBhcmFtZXRlcnNcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmb3JtYXRNZWRpYVR5cGUgfSBmcm9tIFwiQHN0ZC9tZWRpYS10eXBlcy9mb3JtYXQtbWVkaWEtdHlwZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZvcm1hdE1lZGlhVHlwZShcInRleHQvcGxhaW5cIiwgeyBjaGFyc2V0OiBcIlVURi04XCIgfSksIFwidGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TWVkaWFUeXBlKFxuICB0eXBlOiBzdHJpbmcsXG4gIHBhcmFtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IEl0ZXJhYmxlPFtzdHJpbmcsIHN0cmluZ10+LFxuKTogc3RyaW5nIHtcbiAgbGV0IHNlcmlhbGl6ZWRNZWRpYVR5cGUgPSBcIlwiO1xuICBjb25zdCBbbWFqb3IgPSBcIlwiLCBzdWJdID0gdHlwZS5zcGxpdChcIi9cIik7XG4gIGlmICghc3ViKSB7XG4gICAgaWYgKCFpc1Rva2VuKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgc2VyaWFsaXplZE1lZGlhVHlwZSArPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpc1Rva2VuKG1ham9yKSB8fCAhaXNUb2tlbihzdWIpKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgc2VyaWFsaXplZE1lZGlhVHlwZSArPSBgJHttYWpvci50b0xvd2VyQ2FzZSgpfS8ke3N1Yi50b0xvd2VyQ2FzZSgpfWA7XG4gIH1cblxuICBpZiAocGFyYW0pIHtcbiAgICBwYXJhbSA9IGlzSXRlcmF0b3IocGFyYW0pID8gT2JqZWN0LmZyb21FbnRyaWVzKHBhcmFtKSA6IHBhcmFtO1xuICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgIGF0dHJzLnNvcnQoKTtcblxuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJzKSB7XG4gICAgICBpZiAoIWlzVG9rZW4oYXR0cmlidXRlKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1bYXR0cmlidXRlXSE7XG4gICAgICBzZXJpYWxpemVkTWVkaWFUeXBlICs9IGA7ICR7YXR0cmlidXRlLnRvTG93ZXJDYXNlKCl9YDtcblxuICAgICAgY29uc3QgbmVlZEVuYyA9IG5lZWRzRW5jb2RpbmcodmFsdWUpO1xuICAgICAgaWYgKG5lZWRFbmMpIHtcbiAgICAgICAgc2VyaWFsaXplZE1lZGlhVHlwZSArPSBcIipcIjtcbiAgICAgIH1cbiAgICAgIHNlcmlhbGl6ZWRNZWRpYVR5cGUgKz0gXCI9XCI7XG5cbiAgICAgIGlmIChuZWVkRW5jKSB7XG4gICAgICAgIHNlcmlhbGl6ZWRNZWRpYVR5cGUgKz0gYHV0Zi04Jycke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Rva2VuKHZhbHVlKSkge1xuICAgICAgICBzZXJpYWxpemVkTWVkaWFUeXBlICs9IHZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlcmlhbGl6ZWRNZWRpYVR5cGUgKz0gYFwiJHt2YWx1ZS5yZXBsYWNlKC9bXCJcXFxcXS9naSwgKG0pID0+IGBcXFxcJHttfWApfVwiYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlcmlhbGl6ZWRNZWRpYVR5cGU7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxRQUFRLGFBQWE7QUFFaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThCQyxHQUNELE9BQU8sU0FBUyxnQkFDZCxJQUFZLEVBQ1osS0FBMkQ7RUFFM0QsSUFBSSxzQkFBc0I7RUFDMUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQztFQUNyQyxJQUFJLENBQUMsS0FBSztJQUNSLElBQUksQ0FBQyxRQUFRLE9BQU87TUFDbEIsT0FBTztJQUNUO0lBQ0EsdUJBQXVCLEtBQUssV0FBVztFQUN6QyxPQUFPO0lBQ0wsSUFBSSxDQUFDLFFBQVEsVUFBVSxDQUFDLFFBQVEsTUFBTTtNQUNwQyxPQUFPO0lBQ1Q7SUFDQSx1QkFBdUIsR0FBRyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsSUFBSSxXQUFXLElBQUk7RUFDdEU7RUFFQSxJQUFJLE9BQU87SUFDVCxRQUFRLFdBQVcsU0FBUyxPQUFPLFdBQVcsQ0FBQyxTQUFTO0lBQ3hELE1BQU0sUUFBUSxPQUFPLElBQUksQ0FBQztJQUMxQixNQUFNLElBQUk7SUFFVixLQUFLLE1BQU0sYUFBYSxNQUFPO01BQzdCLElBQUksQ0FBQyxRQUFRLFlBQVk7UUFDdkIsT0FBTztNQUNUO01BQ0EsTUFBTSxRQUFRLEtBQUssQ0FBQyxVQUFVO01BQzlCLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxVQUFVLFdBQVcsSUFBSTtNQUVyRCxNQUFNLFVBQVUsY0FBYztNQUM5QixJQUFJLFNBQVM7UUFDWCx1QkFBdUI7TUFDekI7TUFDQSx1QkFBdUI7TUFFdkIsSUFBSSxTQUFTO1FBQ1gsdUJBQXVCLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUFRO1FBQzVEO01BQ0Y7TUFFQSxJQUFJLFFBQVEsUUFBUTtRQUNsQix1QkFBdUI7UUFDdkI7TUFDRjtNQUNBLHVCQUF1QixDQUFDLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFO0VBQ0Y7RUFDQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=1546785954225567495,9425985109680049496 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/95a1cd8a407d14ce1ed34f21e53075771dd66b4336755fb2ab087faa31c6e42f.js b/vendor/gen/https/jsr.io/95a1cd8a407d14ce1ed34f21e53075771dd66b4336755fb2ab087faa31c6e42f.js
new file mode 100644
index 0000000..0253586
--- /dev/null
+++ b/vendor/gen/https/jsr.io/95a1cd8a407d14ce1ed34f21e53075771dd66b4336755fb2ab087faa31c6e42f.js
@@ -0,0 +1,101 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { getFileInfoType } from "./_get_file_info_type.ts";
+/**
+ * Asynchronously ensures that the directory exists, like
+ * {@linkcode https://www.ibm.com/docs/en/aix/7.3?topic=m-mkdir-command#mkdir__row-d3e133766 | mkdir -p}.
+ *
+ * If the directory already exists, this function does nothing. If the directory
+ * does not exist, it is created.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param dir The path of the directory to ensure, as a string or URL.
+ *
+ * @returns A promise that resolves once the directory exists.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { ensureDir } from "@std/fs/ensure-dir";
+ *
+ * await ensureDir("./bar");
+ * ```
+ */ export async function ensureDir(dir) {
+ try {
+ const fileInfo = await Deno.stat(dir);
+ throwIfNotDirectory(fileInfo);
+ return;
+ } catch (err) {
+ if (!(err instanceof Deno.errors.NotFound)) {
+ throw err;
+ }
+ }
+ // The dir doesn't exist. Create it.
+ // This can be racy. So we catch AlreadyExists and check stat again.
+ try {
+ await Deno.mkdir(dir, {
+ recursive: true
+ });
+ } catch (err) {
+ if (!(err instanceof Deno.errors.AlreadyExists)) {
+ throw err;
+ }
+ const fileInfo = await Deno.stat(dir);
+ throwIfNotDirectory(fileInfo);
+ }
+}
+/**
+ * Synchronously ensures that the directory exists, like
+ * {@linkcode https://www.ibm.com/docs/en/aix/7.3?topic=m-mkdir-command#mkdir__row-d3e133766 | mkdir -p}.
+ *
+ * If the directory already exists, this function does nothing. If the directory
+ * does not exist, it is created.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param dir The path of the directory to ensure, as a string or URL.
+ *
+ * @returns A void value that returns once the directory exists.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { ensureDirSync } from "@std/fs/ensure-dir";
+ *
+ * ensureDirSync("./bar");
+ * ```
+ */ export function ensureDirSync(dir) {
+ try {
+ const fileInfo = Deno.statSync(dir);
+ throwIfNotDirectory(fileInfo);
+ return;
+ } catch (err) {
+ if (!(err instanceof Deno.errors.NotFound)) {
+ throw err;
+ }
+ }
+ // The dir doesn't exist. Create it.
+ // This can be racy. So we catch AlreadyExists and check stat again.
+ try {
+ Deno.mkdirSync(dir, {
+ recursive: true
+ });
+ } catch (err) {
+ if (!(err instanceof Deno.errors.AlreadyExists)) {
+ throw err;
+ }
+ const fileInfo = Deno.statSync(dir);
+ throwIfNotDirectory(fileInfo);
+ }
+}
+function throwIfNotDirectory(fileInfo) {
+ if (!fileInfo.isDirectory) {
+ throw new Error(`Failed to ensure directory exists: expected 'dir', got '${getFileInfoType(fileInfo)}'`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2Vuc3VyZV9kaXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbmltcG9ydCB7IGdldEZpbGVJbmZvVHlwZSB9IGZyb20gXCIuL19nZXRfZmlsZV9pbmZvX3R5cGUudHNcIjtcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBlbnN1cmVzIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMsIGxpa2VcbiAqIHtAbGlua2NvZGUgaHR0cHM6Ly93d3cuaWJtLmNvbS9kb2NzL2VuL2FpeC83LjM/dG9waWM9bS1ta2Rpci1jb21tYW5kI21rZGlyX19yb3ctZDNlMTMzNzY2IHwgbWtkaXIgLXB9LlxuICpcbiAqIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiBJZiB0aGUgZGlyZWN0b3J5XG4gKiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC5cbiAqXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctd3JpdGVgIHBlcm1pc3Npb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kZW5vLmNvbS9ydW50aW1lL21hbnVhbC9iYXNpY3MvcGVybWlzc2lvbnMjZmlsZS1zeXN0ZW0tYWNjZXNzfVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVubydzIHBlcm1pc3Npb25zIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gZGlyIFRoZSBwYXRoIG9mIHRoZSBkaXJlY3RvcnkgdG8gZW5zdXJlLCBhcyBhIHN0cmluZyBvciBVUkwuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBlbnN1cmVEaXIgfSBmcm9tIFwiQHN0ZC9mcy9lbnN1cmUtZGlyXCI7XG4gKlxuICogYXdhaXQgZW5zdXJlRGlyKFwiLi9iYXJcIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcihkaXI6IHN0cmluZyB8IFVSTCkge1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVJbmZvID0gYXdhaXQgRGVuby5zdGF0KGRpcik7XG4gICAgdGhyb3dJZk5vdERpcmVjdG9yeShmaWxlSW5mbyk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgZGlyIGRvZXNuJ3QgZXhpc3QuIENyZWF0ZSBpdC5cbiAgLy8gVGhpcyBjYW4gYmUgcmFjeS4gU28gd2UgY2F0Y2ggQWxyZWFkeUV4aXN0cyBhbmQgY2hlY2sgc3RhdCBhZ2Fpbi5cbiAgdHJ5IHtcbiAgICBhd2FpdCBEZW5vLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkFscmVhZHlFeGlzdHMpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUluZm8gPSBhd2FpdCBEZW5vLnN0YXQoZGlyKTtcbiAgICB0aHJvd0lmTm90RGlyZWN0b3J5KGZpbGVJbmZvKTtcbiAgfVxufVxuXG4vKipcbiAqIFN5bmNocm9ub3VzbHkgZW5zdXJlcyB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzLCBsaWtlXG4gKiB7QGxpbmtjb2RlIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9haXgvNy4zP3RvcGljPW0tbWtkaXItY29tbWFuZCNta2Rpcl9fcm93LWQzZTEzMzc2NiB8IG1rZGlyIC1wfS5cbiAqXG4gKiBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gSWYgdGhlIGRpcmVjdG9yeVxuICogZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuXG4gKlxuICogUmVxdWlyZXMgYC0tYWxsb3ctcmVhZGAgYW5kIGAtLWFsbG93LXdyaXRlYCBwZXJtaXNzaW9ucy5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGRpciBUaGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IHRvIGVuc3VyZSwgYXMgYSBzdHJpbmcgb3IgVVJMLlxuICpcbiAqIEByZXR1cm5zIEEgdm9pZCB2YWx1ZSB0aGF0IHJldHVybnMgb25jZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBlbnN1cmVEaXJTeW5jIH0gZnJvbSBcIkBzdGQvZnMvZW5zdXJlLWRpclwiO1xuICpcbiAqIGVuc3VyZURpclN5bmMoXCIuL2JhclwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRGlyU3luYyhkaXI6IHN0cmluZyB8IFVSTCkge1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVJbmZvID0gRGVuby5zdGF0U3luYyhkaXIpO1xuICAgIHRocm93SWZOb3REaXJlY3RvcnkoZmlsZUluZm8pO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGRpciBkb2Vzbid0IGV4aXN0LiBDcmVhdGUgaXQuXG4gIC8vIFRoaXMgY2FuIGJlIHJhY3kuIFNvIHdlIGNhdGNoIEFscmVhZHlFeGlzdHMgYW5kIGNoZWNrIHN0YXQgYWdhaW4uXG4gIHRyeSB7XG4gICAgRGVuby5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWxyZWFkeUV4aXN0cykpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlSW5mbyA9IERlbm8uc3RhdFN5bmMoZGlyKTtcbiAgICB0aHJvd0lmTm90RGlyZWN0b3J5KGZpbGVJbmZvKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmTm90RGlyZWN0b3J5KGZpbGVJbmZvOiBEZW5vLkZpbGVJbmZvKSB7XG4gIGlmICghZmlsZUluZm8uaXNEaXJlY3RvcnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzOiBleHBlY3RlZCAnZGlyJywgZ290ICcke1xuICAgICAgICBnZXRGaWxlSW5mb1R5cGUoZmlsZUluZm8pXG4gICAgICB9J2AsXG4gICAgKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxTQUFTLGVBQWUsUUFBUSwyQkFBMkI7QUFFM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQkMsR0FDRCxPQUFPLGVBQWUsVUFBVSxHQUFpQjtFQUMvQyxJQUFJO0lBQ0YsTUFBTSxXQUFXLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDakMsb0JBQW9CO0lBQ3BCO0VBQ0YsRUFBRSxPQUFPLEtBQUs7SUFDWixJQUFJLENBQUMsQ0FBQyxlQUFlLEtBQUssTUFBTSxDQUFDLFFBQVEsR0FBRztNQUMxQyxNQUFNO0lBQ1I7RUFDRjtFQUVBLG9DQUFvQztFQUNwQyxvRUFBb0U7RUFDcEUsSUFBSTtJQUNGLE1BQU0sS0FBSyxLQUFLLENBQUMsS0FBSztNQUFFLFdBQVc7SUFBSztFQUMxQyxFQUFFLE9BQU8sS0FBSztJQUNaLElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxNQUFNLENBQUMsYUFBYSxHQUFHO01BQy9DLE1BQU07SUFDUjtJQUVBLE1BQU0sV0FBVyxNQUFNLEtBQUssSUFBSSxDQUFDO0lBQ2pDLG9CQUFvQjtFQUN0QjtBQUNGO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQkMsR0FDRCxPQUFPLFNBQVMsY0FBYyxHQUFpQjtFQUM3QyxJQUFJO0lBQ0YsTUFBTSxXQUFXLEtBQUssUUFBUSxDQUFDO0lBQy9CLG9CQUFvQjtJQUNwQjtFQUNGLEVBQUUsT0FBTyxLQUFLO0lBQ1osSUFBSSxDQUFDLENBQUMsZUFBZSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEdBQUc7TUFDMUMsTUFBTTtJQUNSO0VBQ0Y7RUFFQSxvQ0FBb0M7RUFDcEMsb0VBQW9FO0VBQ3BFLElBQUk7SUFDRixLQUFLLFNBQVMsQ0FBQyxLQUFLO01BQUUsV0FBVztJQUFLO0VBQ3hDLEVBQUUsT0FBTyxLQUFLO0lBQ1osSUFBSSxDQUFDLENBQUMsZUFBZSxLQUFLLE1BQU0sQ0FBQyxhQUFhLEdBQUc7TUFDL0MsTUFBTTtJQUNSO0lBRUEsTUFBTSxXQUFXLEtBQUssUUFBUSxDQUFDO0lBQy9CLG9CQUFvQjtFQUN0QjtBQUNGO0FBRUEsU0FBUyxvQkFBb0IsUUFBdUI7RUFDbEQsSUFBSSxDQUFDLFNBQVMsV0FBVyxFQUFFO0lBQ3pCLE1BQU0sSUFBSSxNQUNSLENBQUMsd0RBQXdELEVBQ3ZELGdCQUFnQixVQUNqQixDQUFDLENBQUM7RUFFUDtBQUNGIn0=
+// denoCacheMetadata=2256787284570079412,12836414336115148704 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/97354b4c15b720fc58f4d4222b501edd6a3f090531cea1d3eac1aa677df70d75.js b/vendor/gen/https/jsr.io/97354b4c15b720fc58f4d4222b501edd6a3f090531cea1d3eac1aa677df70d75.js
new file mode 100644
index 0000000..d4005ae
--- /dev/null
+++ b/vendor/gen/https/jsr.io/97354b4c15b720fc58f4d4222b501edd6a3f090531cea1d3eac1aa677df70d75.js
@@ -0,0 +1,165 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return a `ParsedPath` object of the `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/path/windows/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const parsed = parse("C:\\foo\\bar\\baz.ext");
+ * assertEquals(parsed, {
+ * root: "C:\\",
+ * dir: "C:\\foo\\bar",
+ * base: "baz.ext",
+ * ext: ".ext",
+ * name: "baz",
+ * });
+ * ```
+ *
+ * @param path The path to parse.
+ * @returns The `ParsedPath` object.
+ */ export function parse(path) {
+ assertPath(path);
+ const ret = {
+ root: "",
+ dir: "",
+ base: "",
+ ext: "",
+ name: ""
+ };
+ const len = path.length;
+ if (len === 0) return ret;
+ let rootEnd = 0;
+ let code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ rootEnd = 1;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ rootEnd = j;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ rootEnd = j + 1;
+ }
+ }
+ }
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ if (len === 3) {
+ // `path` contains just a drive root, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ ret.base = "\\";
+ return ret;
+ }
+ rootEnd = 3;
+ }
+ } else {
+ // `path` contains just a relative drive root, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ return ret;
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ ret.base = "\\";
+ return ret;
+ }
+ if (rootEnd > 0) ret.root = path.slice(0, rootEnd);
+ let startDot = -1;
+ let startPart = rootEnd;
+ let end = -1;
+ let matchedSlash = true;
+ let i = path.length - 1;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Get non-dir info
+ for(; i >= rootEnd; --i){
+ code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ if (end !== -1) {
+ ret.base = ret.name = path.slice(startPart, end);
+ }
+ } else {
+ ret.name = path.slice(startPart, startDot);
+ ret.base = path.slice(startPart, end);
+ ret.ext = path.slice(startDot, end);
+ }
+ // Fallback to '\' in case there is no basename
+ ret.base = ret.base || "\\";
+ // If the directory is the root, use the entire root as the `dir` including
+ // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the
+ // trailing slash (`C:\abc\def` -> `C:\abc`).
+ if (startPart > 0 && startPart !== rootEnd) {
+ ret.dir = path.slice(0, startPart - 1);
+ } else ret.dir = ret.root;
+ return ret;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL3BhcnNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfQ09MT04sIENIQVJfRE9UIH0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQYXRoU2VwYXJhdG9yLCBpc1dpbmRvd3NEZXZpY2VSb290IH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBQYXJzZWRQYXRoIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIGEgYFBhcnNlZFBhdGhgIG9iamVjdCBvZiB0aGUgYHBhdGhgLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvcGFyc2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhcnNlZCA9IHBhcnNlKFwiQzpcXFxcZm9vXFxcXGJhclxcXFxiYXouZXh0XCIpO1xuICogYXNzZXJ0RXF1YWxzKHBhcnNlZCwge1xuICogICByb290OiBcIkM6XFxcXFwiLFxuICogICBkaXI6IFwiQzpcXFxcZm9vXFxcXGJhclwiLFxuICogICBiYXNlOiBcImJhei5leHRcIixcbiAqICAgZXh0OiBcIi5leHRcIixcbiAqICAgbmFtZTogXCJiYXpcIixcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gcGFyc2UuXG4gKiBAcmV0dXJucyBUaGUgYFBhcnNlZFBhdGhgIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHJldDogUGFyc2VkUGF0aCA9IHsgcm9vdDogXCJcIiwgZGlyOiBcIlwiLCBiYXNlOiBcIlwiLCBleHQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcblxuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIHJldDtcblxuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gMTtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID09PSBsZW4pIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcblxuICAgICAgICAgICAgICByb290RW5kID0gajtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICByb290RW5kID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMykge1xuICAgICAgICAgICAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIGRyaXZlIHJvb3QsIGV4aXQgZWFybHkgdG8gYXZvaWRcbiAgICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgICAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgICAgICByZXQuYmFzZSA9IFwiXFxcXFwiO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgcmVsYXRpdmUgZHJpdmUgcm9vdCwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgIHJldC5iYXNlID0gXCJcXFxcXCI7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGlmIChyb290RW5kID4gMCkgcmV0LnJvb3QgPSBwYXRoLnNsaWNlKDAsIHJvb3RFbmQpO1xuXG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gcm9vdEVuZDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7XG5cbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuXG4gIC8vIEdldCBub24tZGlyIGluZm9cbiAgZm9yICg7IGkgPj0gcm9vdEVuZDsgLS1pKSB7XG4gICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7XG4gICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICByZXQuZXh0ID0gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvICdcXCcgaW4gY2FzZSB0aGVyZSBpcyBubyBiYXNlbmFtZVxuICByZXQuYmFzZSA9IHJldC5iYXNlIHx8IFwiXFxcXFwiO1xuXG4gIC8vIElmIHRoZSBkaXJlY3RvcnkgaXMgdGhlIHJvb3QsIHVzZSB0aGUgZW50aXJlIHJvb3QgYXMgdGhlIGBkaXJgIGluY2x1ZGluZ1xuICAvLyB0aGUgdHJhaWxpbmcgc2xhc2ggaWYgYW55IChgQzpcXGFiY2AgLT4gYEM6XFxgKS4gT3RoZXJ3aXNlLCBzdHJpcCBvdXQgdGhlXG4gIC8vIHRyYWlsaW5nIHNsYXNoIChgQzpcXGFiY1xcZGVmYCAtPiBgQzpcXGFiY2ApLlxuICBpZiAoc3RhcnRQYXJ0ID4gMCAmJiBzdGFydFBhcnQgIT09IHJvb3RFbmQpIHtcbiAgICByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtcbiAgfSBlbHNlIHJldC5kaXIgPSByZXQucm9vdDtcblxuICByZXR1cm4gcmV0O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLEVBQUUsUUFBUSxRQUFRLDBCQUEwQjtBQUUvRCxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxlQUFlLEVBQUUsbUJBQW1CLFFBQVEsYUFBYTtBQUlsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FDRCxPQUFPLFNBQVMsTUFBTSxJQUFZO0VBQ2hDLFdBQVc7RUFFWCxNQUFNLE1BQWtCO0lBQUUsTUFBTTtJQUFJLEtBQUs7SUFBSSxNQUFNO0lBQUksS0FBSztJQUFJLE1BQU07RUFBRztFQUV6RSxNQUFNLE1BQU0sS0FBSyxNQUFNO0VBQ3ZCLElBQUksUUFBUSxHQUFHLE9BQU87RUFFdEIsSUFBSSxVQUFVO0VBQ2QsSUFBSSxPQUFPLEtBQUssVUFBVSxDQUFDO0VBRTNCLHNCQUFzQjtFQUN0QixJQUFJLE1BQU0sR0FBRztJQUNYLElBQUksZ0JBQWdCLE9BQU87TUFDekIsb0JBQW9CO01BRXBCLFVBQVU7TUFDVixJQUFJLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZDLDZDQUE2QztRQUM3QyxJQUFJLElBQUk7UUFDUixJQUFJLE9BQU87UUFDWCxzQ0FBc0M7UUFDdEMsTUFBTyxJQUFJLEtBQUssRUFBRSxFQUFHO1VBQ25CLElBQUksZ0JBQWdCLEtB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
+// denoCacheMetadata=15124701152240990132,7433973758695592333 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/98248e544ed47a15c14f94c7703548db184e7d0af81b715ac68343bc4b5d401c.js b/vendor/gen/https/jsr.io/98248e544ed47a15c14f94c7703548db184e7d0af81b715ac68343bc4b5d401c.js
new file mode 100644
index 0000000..5e272c3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/98248e544ed47a15c14f94c7703548db184e7d0af81b715ac68343bc4b5d401c.js
@@ -0,0 +1,252 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Extensions to the
+ * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API | Web Crypto API}
+ * supporting additional encryption APIs, but also delegating to the built-in
+ * APIs when possible.
+ *
+ * Provides additional digest algorithms that are not part of the WebCrypto
+ * standard as well as a `subtle.digest` and `subtle.digestSync` methods.
+ *
+ * The {@linkcode KeyStack} export implements the {@linkcode KeyRing} interface
+ * for managing rotatable keys for signing data to prevent tampering, like with
+ * HTTP cookies.
+ *
+ * ## Supported algorithms
+ *
+ * Here is a list of supported algorithms. If the algorithm name in WebCrypto
+ * and Wasm/Rust is the same, this library prefers to use the implementation
+ * provided by WebCrypto.
+ *
+ * Length-adjustable algorithms support the
+ * {@linkcode DigestAlgorithmObject.length} option.
+ *
+ * WebCrypto:
+ * - `SHA-384`
+ * - `SHA-256` (length-extendable)
+ * - `SHA-512` (length-extendable)
+ *
+ * Wasm/Rust:
+ * - `BLAKE2B`
+ * - `BLAKE2B-128`
+ * - `BLAKE2B-160`
+ * - `BLAKE2B-224`
+ * - `BLAKE2B-256`
+ * - `BLAKE2B-384`
+ * - `BLAKE2S`
+ * - `BLAKE3` (length-adjustable)
+ * - `KECCAK-224`
+ * - `KECCAK-256`
+ * - `KECCAK-384`
+ * - `KECCAK-512`
+ * - `SHA-384`
+ * - `SHA3-224`
+ * - `SHA3-256`
+ * - `SHA3-384`
+ * - `SHA3-512`
+ * - `SHAKE128` (length-adjustable)
+ * - `SHAKE256` (length-adjustable)
+ * - `TIGER`
+ * - `RIPEMD-160` (length-extendable)
+ * - `SHA-224` (length-extendable)
+ * - `SHA-256` (length-extendable)
+ * - `SHA-512` (length-extendable)
+ * - `MD4` (length-extendable and collidable)
+ * - `MD5` (length-extendable and collidable)
+ * - `SHA-1` (length-extendable and collidable)
+ * - `FNV32` (non-cryptographic)
+ * - `FNV32A` (non-cryptographic)
+ * - `FNV64` (non-cryptographic)
+ * - `FNV64A` (non-cryptographic)
+ *
+ * @example
+ * ```ts
+ * import { crypto } from "@std/crypto";
+ *
+ * // This will delegate to the runtime's WebCrypto implementation.
+ * console.log(
+ * new Uint8Array(
+ * await crypto.subtle.digest(
+ * "SHA-384",
+ * new TextEncoder().encode("hello world"),
+ * ),
+ * ),
+ * );
+ *
+ * // This will use a bundled Wasm/Rust implementation.
+ * console.log(
+ * new Uint8Array(
+ * await crypto.subtle.digest(
+ * "BLAKE3",
+ * new TextEncoder().encode("hello world"),
+ * ),
+ * ),
+ * );
+ * ```
+ *
+ * @example Convert hash to a string
+ *
+ * ```ts
+ * import {
+ * crypto,
+ * } from "@std/crypto";
+ * import { encodeHex } from "@std/encoding/hex"
+ * import { encodeBase64 } from "@std/encoding/base64"
+ *
+ * const hash = await crypto.subtle.digest(
+ * "SHA-384",
+ * new TextEncoder().encode("You hear that Mr. Anderson?"),
+ * );
+ *
+ * // Hex encoding
+ * console.log(encodeHex(hash));
+ *
+ * // Or with base64 encoding
+ * console.log(encodeBase64(hash));
+ * ```
+ *
+ * @module
+ */ import { digest, DIGEST_ALGORITHM_NAMES, DigestContext } from "./_wasm/mod.ts";
+export { DIGEST_ALGORITHM_NAMES };
+/** Digest algorithms supported by WebCrypto. */ const WEB_CRYPTO_DIGEST_ALGORITHM_NAMES = [
+ "SHA-384",
+ "SHA-256",
+ "SHA-512",
+ // insecure (length-extendable and collidable):
+ "SHA-1"
+];
+/**
+ * A copy of the global WebCrypto interface, with methods bound so they're
+ * safe to re-export.
+ */ const webCrypto = ((crypto)=>({
+ getRandomValues: crypto.getRandomValues?.bind(crypto),
+ randomUUID: crypto.randomUUID?.bind(crypto),
+ subtle: {
+ decrypt: crypto.subtle?.decrypt?.bind(crypto.subtle),
+ deriveBits: crypto.subtle?.deriveBits?.bind(crypto.subtle),
+ deriveKey: crypto.subtle?.deriveKey?.bind(crypto.subtle),
+ digest: crypto.subtle?.digest?.bind(crypto.subtle),
+ encrypt: crypto.subtle?.encrypt?.bind(crypto.subtle),
+ exportKey: crypto.subtle?.exportKey?.bind(crypto.subtle),
+ generateKey: crypto.subtle?.generateKey?.bind(crypto.subtle),
+ importKey: crypto.subtle?.importKey?.bind(crypto.subtle),
+ sign: crypto.subtle?.sign?.bind(crypto.subtle),
+ unwrapKey: crypto.subtle?.unwrapKey?.bind(crypto.subtle),
+ verify: crypto.subtle?.verify?.bind(crypto.subtle),
+ wrapKey: crypto.subtle?.wrapKey?.bind(crypto.subtle)
+ }
+ }))(globalThis.crypto);
+function toUint8Array(data) {
+ if (data instanceof Uint8Array) {
+ return data;
+ } else if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ } else if (data instanceof ArrayBuffer) {
+ return new Uint8Array(data);
+ }
+ return undefined;
+}
+/**
+ * A wrapper for WebCrypto which adds support for additional non-standard
+ * algorithms, but delegates to the runtime WebCrypto implementation whenever
+ * possible.
+ */ const stdCrypto = ((x)=>x)({
+ ...webCrypto,
+ subtle: {
+ ...webCrypto.subtle,
+ /**
+ * Polyfills stream support until the Web Crypto API does so:
+ * @see {@link https://github.com/wintercg/proposal-webcrypto-streams}
+ */ async digest (algorithm, data) {
+ const { name, length } = normalizeAlgorithm(algorithm);
+ assertValidDigestLength(length);
+ // We delegate to WebCrypto whenever possible,
+ if (// if the algorithm is supported by the WebCrypto standard,
+ WEB_CRYPTO_DIGEST_ALGORITHM_NAMES.includes(name) && // and the data is a single buffer,
+ isBufferSource(data)) {
+ return await webCrypto.subtle.digest(algorithm, data);
+ } else if (DIGEST_ALGORITHM_NAMES.includes(name)) {
+ if (isBufferSource(data)) {
+ // Otherwise, we use our bundled Wasm implementation via digestSync
+ // if it supports the algorithm.
+ return stdCrypto.subtle.digestSync(algorithm, data);
+ } else if (isIterable(data)) {
+ return stdCrypto.subtle.digestSync(algorithm, data);
+ } else if (isAsyncIterable(data)) {
+ const context = new DigestContext(name);
+ for await (const chunk of data){
+ const chunkBytes = toUint8Array(chunk);
+ if (!chunkBytes) {
+ throw new TypeError("Cannot digest the data: A chunk is not ArrayBuffer nor ArrayBufferView");
+ }
+ context.update(chunkBytes);
+ }
+ return context.digestAndDrop(length).buffer;
+ } else {
+ throw new TypeError(// deno-lint-ignore deno-style-guide/error-message
+ "data must be a BufferSource or [Async]Iterable<BufferSource>");
+ }
+ }
+ // (TypeScript type definitions prohibit this case.) If they're trying
+ // to call an algorithm we don't recognize, pass it along to WebCrypto
+ // in case it's a non-standard algorithm supported by the the runtime
+ // they're using.
+ return await webCrypto.subtle.digest(algorithm, data);
+ },
+ digestSync (algorithm, data) {
+ const { name, length } = normalizeAlgorithm(algorithm);
+ assertValidDigestLength(length);
+ if (isBufferSource(data)) {
+ const bytes = toUint8Array(data);
+ return digest(name, bytes, length).buffer;
+ }
+ if (isIterable(data)) {
+ const context = new DigestContext(name);
+ for (const chunk of data){
+ const chunkBytes = toUint8Array(chunk);
+ if (!chunkBytes) {
+ throw new TypeError("Cannot digest the data: A chunk is not ArrayBuffer nor ArrayBufferView");
+ }
+ context.update(chunkBytes);
+ }
+ return context.digestAndDrop(length).buffer;
+ }
+ throw new TypeError(// deno-lint-ignore deno-style-guide/error-message
+ "data must be a BufferSource or Iterable<BufferSource>");
+ }
+ }
+});
+/*
+ * The largest digest length the current Wasm implementation can support. This
+ * is the value of `isize::MAX` on 32-bit platforms like Wasm, which is the
+ * maximum allowed capacity of a Rust `Vec<u8>`.
+ */ const MAX_DIGEST_LENGTH = 0x7FFF_FFFF;
+/**
+ * Asserts that a number is a valid length for a digest, which must be an
+ * integer that fits in a Rust `Vec<u8>`, or be undefined.
+ */ function assertValidDigestLength(value) {
+ if (value !== undefined && (value < 0 || value > MAX_DIGEST_LENGTH || !Number.isInteger(value))) {
+ throw new RangeError(`length must be an integer between 0 and ${MAX_DIGEST_LENGTH}, inclusive`);
+ }
+}
+function normalizeAlgorithm(algorithm) {
+ return typeof algorithm === "string" ? {
+ name: algorithm.toUpperCase()
+ } : {
+ ...algorithm,
+ name: algorithm.name.toUpperCase()
+ };
+}
+function isBufferSource(obj) {
+ return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);
+}
+function isIterable(obj) {
+ return typeof obj[Symbol.iterator] === "function";
+}
+function isAsyncIterable(obj) {
+ return typeof obj[Symbol.asyncIterator] === "function";
+}
+export { stdCrypto as crypto };
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY3J5cHRvLzEuMC41L2NyeXB0by50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIEV4dGVuc2lvbnMgdG8gdGhlXG4gKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYl9DcnlwdG9fQVBJIHwgV2ViIENyeXB0byBBUEl9XG4gKiBzdXBwb3J0aW5nIGFkZGl0aW9uYWwgZW5jcnlwdGlvbiBBUElzLCBidXQgYWxzbyBkZWxlZ2F0aW5nIHRvIHRoZSBidWlsdC1pblxuICogQVBJcyB3aGVuIHBvc3NpYmxlLlxuICpcbiAqIFByb3ZpZGVzIGFkZGl0aW9uYWwgZGlnZXN0IGFsZ29yaXRobXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIFdlYkNyeXB0b1xuICogc3RhbmRhcmQgYXMgd2VsbCBhcyBhIGBzdWJ0bGUuZGlnZXN0YCBhbmQgYHN1YnRsZS5kaWdlc3RTeW5jYCBtZXRob2RzLlxuICpcbiAqIFRoZSB7QGxpbmtjb2RlIEtleVN0YWNrfSBleHBvcnQgaW1wbGVtZW50cyB0aGUge0BsaW5rY29kZSBLZXlSaW5nfSBpbnRlcmZhY2VcbiAqIGZvciBtYW5hZ2luZyByb3RhdGFibGUga2V5cyBmb3Igc2lnbmluZyBkYXRhIHRvIHByZXZlbnQgdGFtcGVyaW5nLCBsaWtlIHdpdGhcbiAqIEhUVFAgY29va2llcy5cbiAqXG4gKiAjIyBTdXBwb3J0ZWQgYWxnb3JpdGhtc1xuICpcbiAqIEhlcmUgaXMgYSBsaXN0IG9mIHN1cHBvcnRlZCBhbGdvcml0aG1zLiBJZiB0aGUgYWxnb3JpdGhtIG5hbWUgaW4gV2ViQ3J5cHRvXG4gKiBhbmQgV2FzbS9SdXN0IGlzIHRoZSBzYW1lLCB0aGlzIGxpYnJhcnkgcHJlZmVycyB0byB1c2UgdGhlIGltcGxlbWVudGF0aW9uXG4gKiBwcm92aWRlZCBieSBXZWJDcnlwdG8uXG4gKlxuICogTGVuZ3RoLWFkanVzdGFibGUgYWxnb3JpdGhtcyBzdXBwb3J0IHRoZVxuICoge0BsaW5rY29kZSBEaWdlc3RBbGdvcml0aG1PYmplY3QubGVuZ3RofSBvcHRpb24uXG4gKlxuICogV2ViQ3J5cHRvOlxuICogLSBgU0hBLTM4NGBcbiAqIC0gYFNIQS0yNTZgIChsZW5ndGgtZXh0ZW5kYWJsZSlcbiAqIC0gYFNIQS01MTJgIChsZW5ndGgtZXh0ZW5kYWJsZSlcbiAqXG4gKiBXYXNtL1J1c3Q6XG4gKiAtIGBCTEFLRTJCYFxuICogLSBgQkxBS0UyQi0xMjhgXG4gKiAtIGBCTEFLRTJCLTE2MGBcbiAqIC0gYEJMQUtFMkItMjI0YFxuICogLSBgQkxBS0UyQi0yNTZgXG4gKiAtIGBCTEFLRTJCLTM4NGBcbiAqIC0gYEJMQUtFMlNgXG4gKiAtIGBCTEFLRTNgIChsZW5ndGgtYWRqdXN0YWJsZSlcbiAqIC0gYEtFQ0NBSy0yMjRgXG4gKiAtIGBLRUNDQUstMjU2YFxuICogLSBgS0VDQ0FLLTM4NGBcbiAqIC0gYEtFQ0NBSy01MTJgXG4gKiAtIGBTSEEtMzg0YFxuICogLSBgU0hBMy0yMjRgXG4gKiAtIGBTSEEzLTI1NmBcbiAqIC0gYFNIQTMtMzg0YFxuICogLSBgU0hBMy01MTJgXG4gKiAtIGBTSEFLRTEyOGAgKGxlbmd0aC1hZGp1c3RhYmxlKVxuICogLSBgU0hBS0UyNTZgIChsZW5ndGgtYWRqdXN0YWJsZSlcbiAqIC0gYFRJR0VSYFxuICogLSBgUklQRU1ELTE2MGAgKGxlbmd0aC1leHRlbmRhYmxlKVxuICogLSBgU0hBLTIyNGAgKGxlbmd0aC1leHRlbmRhYmxlKVxuICogLSBgU0hBLTI1NmAgKGxlbmd0aC1leHRlbmRhYmxlKVxuICogLSBgU0hBLTUxMmAgKGxlbmd0aC1leHRlbmRhYmxlKVxuICogLSBgTUQ0YCAobGVuZ3RoLWV4dGVuZGFibGUgYW5kIGNvbGxpZGFibGUpXG4gKiAtIGBNRDVgIChsZW5ndGgtZXh0ZW5kYWJsZSBhbmQgY29sbGlkYWJsZSlcbiAqIC0gYFNIQS0xYCAobGVuZ3RoLWV4dGVuZGFibGUgYW5kIGNvbGxpZGFibGUpXG4gKiAtIGBGTlYzMmAgKG5vbi1jcnlwdG9ncmFwaGljKVxuICogLSBgRk5WMzJBYCAobm9uLWNyeXB0b2dyYXBoaWMpXG4gKiAtIGBGTlY2NGAgKG5vbi1jcnlwdG9ncmFwaGljKVxuICogLSBgRk5WNjRBYCAobm9uLWNyeXB0b2dyYXBoaWMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcnlwdG8gfSBmcm9tIFwiQHN0ZC9jcnlwdG9cIjtcbiAqXG4gKiAvLyBUaGlzIHdpbGwgZGVsZWdhdGUgdG8gdGhlIHJ1bnRpbWUncyBXZWJDcnlwdG8gaW1wbGVtZW50YXRpb24uXG4gKiBjb25zb2xlLmxvZyhcbiAqICAgbmV3IFVpbnQ4QXJyYXkoXG4gKiAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gKiAgICAgICBcIlNIQS0zODRcIixcbiAqICAgICAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcImhlbGxvIHdvcmxkXCIpLFxuICogICAgICksXG4gKiAgICksXG4gKiApO1xuICpcbiAqIC8vIFRoaXMgd2lsbCB1c2UgYSBidW5kbGVkIFdhc20vUnVzdCBpbXBsZW1lbnRhdGlvbi5cbiAqIGNvbnNvbGUubG9nKFxuICogICBuZXcgVWludDhBcnJheShcbiAqICAgICBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChcbiAqICAgICAgIFwiQkxBS0UzXCIsXG4gKiAgICAgICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJoZWxsbyB3b3JsZFwiKSxcbiAqICAgICApLFxuICogICApLFxuICogKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENvbnZlcnQgaGFzaCB0byBhIHN0cmluZ1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQge1xuICogICBjcnlwdG8sXG4gKiB9IGZyb20gXCJAc3RkL2NyeXB0b1wiO1xuICogaW1wb3J0IHsgZW5jb2RlSGV4IH0gZnJvbSBcIkBzdGQvZW5jb2RpbmcvaGV4XCJcbiAqIGltcG9ydCB7IGVuY29kZUJhc2U2NCB9IGZyb20gXCJAc3RkL2VuY29kaW5nL2Jhc2U2NFwiXG4gKlxuICogY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KFxuICogICBcIlNIQS0zODRcIixcbiAqICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiWW91IGhlYXIgdGhhdCBNci4gQW5kZXJzb24/XCIpLFxuICogKTtcbiAqXG4gKiAvLyBIZXggZW5jb2RpbmdcbiAqIGNvbnNvbGUubG9nKGVuY29kZUhleChoYXNoKSk7XG4gKlxuICogLy8gT3Igd2l0aCBiYXNlNjQgZW5jb2RpbmdcbiAqIGNvbnNvbGUubG9nKGVuY29kZUJhc2U2NChoYXNoKSk7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7XG4gIGRpZ2VzdCxcbiAgRElHRVNUX0FMR09SSVRITV9OQU1FUyxcbiAgdHlwZSBEaWdlc3RBbGdvcml0aG1OYW1lLFxuICBEaWdlc3RDb250ZXh0LFxufSBmcm9tIFwiLi9fd2FzbS9tb2QudHNcIjtcblxuZXhwb3J0IHsgRElHRVNUX0FMR09SSVRITV9OQU1FUywgdHlwZSBEaWdlc3RBbGdvcml0aG1OYW1lIH07XG5cbi8qKiBEaWdlc3QgYWxnb3JpdGhtcyBzdXBwb3J0ZWQgYnkgV2ViQ3J5cHRvLiAqL1xuY29uc3QgV0VCX0NSWVBUT19ESUdFU1RfQUxHT1JJVEhNX05BTUVTID0gW1xuICBcIlNIQS0zODRcIixcbiAgXCJTSEEtMjU2XCIsXG4gIFwiU0hBLTUxMlwiLFxuICAvLyBpbnNlY3VyZSAobGVuZ3RoLWV4dGVuZGFibGUgYW5kIGNvbGxpZGFibGUpOlxuICBcIlNIQS0xXCIsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIEEgY29weSBvZiB0aGUgZ2xvYmFsIFdlYkNyeXB0byBpbnRlcmZhY2UsIHdpdGggbWV0aG9kcyBib3VuZCBzbyB0aGV5J3JlXG4gKiBzYWZlIHRvIHJlLWV4cG9ydC5cbiAqL1xuY29uc3Qgd2ViQ3J5cHRvID0gKChjcnlwdG8pID0+ICh7XG4gIGdldFJhbmRvbVZhbHVlczogY3J5cHRvLmdldFJhbmRvbVZhbHVlcz8uYmluZChjcnlwdG8pLFxuICByYW5kb21VVUlEOiBjcnlwdG8ucmFuZG9tVVVJRD8uYmluZChjcnlwdG8pLFxuICBzdWJ0bGU6IHtcbiAgICBkZWNyeXB0OiBjcnlwdG8uc3VidGxlPy5kZWNyeXB0Py5iaW5kKGNyeXB0by5zdWJ0bGUpLFxuICAgIGRlcml2ZUJpdHM6IGNyeXB0by5zdWJ0bGU/LmRlcml2ZUJpdHM/LmJpbmQoY3J5cHRvLnN1YnRsZSksXG4gICAgZGVyaXZlS2V5OiBjcnlwdG8uc3VidGxlPy5kZXJpdmVLZXk/LmJpbmQoY3J5cHRvLnN1YnRsZSksXG4gICAgZGlnZXN0OiBjcnlwdG8uc3VidGxlPy5kaWdlc3Q/LmJpbmQoY3J5cHRvLnN1YnRsZSksXG4gICAgZW5jcnlwdDogY3J5cHRvLnN1YnRsZT8uZW5jcnlwdD8uYmluZChjcnlwdG8uc3VidGxlKSxcbiAgICBleHBvcnRLZXk6IGNyeXB0by5zdWJ0bGU/LmV4cG9ydEtleT8uYmluZChjcnlwdG8uc3VidGxlKSxcbiAgICBnZW5lcmF0ZUtleTogY3J5cHRvLnN1YnRsZT8uZ2VuZXJhdGVLZXk/LmJpbmQoY3J5cHRvLnN1YnRsZSksXG4gICAgaW1wb3J0S2V5OiBjcnlwdG8uc3VidGxlPy5pbXBvcnRLZXk/LmJpbmQoY3J5cHRvLnN1YnRsZSksXG4gICAgc2lnbjogY3J5cHRvLnN1YnRsZT8uc2lnbj8uYmluZChjcnlwdG8uc3VidGxlKSxcbiAgICB1bndyYXBLZXk6IGNyeXB0by5zdWJ0bGU/LnVud3JhcEtleT8uYmluZChjcnlwdG8uc3VidGxlKSxcbiAgICB2ZXJpZnk6IGNyeXB0by5zdWJ0bGU/LnZlcmlmeT8uYmluZChjcnlwdG8uc3VidGxlKSxcbiAgICB3cmFwS2V5OiBjcnlwdG8uc3VidGxlPy53cmFwS2V5Py5iaW5kKGNyeXB0by5zdWJ0bGUpLFxuICB9LFxufSkpKGdsb2JhbFRoaXMuY3J5cHRvKTtcblxuZnVuY3Rpb24gdG9VaW50OEFycmF5KGRhdGE6IHVua25vd24pOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkIHtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBFeHRlbnNpb25zIHRvIHRoZSB3ZWIgc3RhbmRhcmQgYFN1YnRsZUNyeXB0b2AgaW50ZXJmYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGRTdWJ0bGVDcnlwdG8gZXh0ZW5kcyBTdWJ0bGVDcnlwdG8ge1xuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBgUHJvbWlzZWAgb2JqZWN0IHRoYXQgd2lsbCBkaWdlc3QgYGRhdGFgIHVzaW5nIHRoZSBzcGVjaWZpZWRcbiAgICogYEFsZ29yaXRobUlkZW50aWZpZXJgLlxuICAgKi9cbiAgZGlnZXN0KFxuICAgIGFsZ29yaXRobTogRGlnZXN0QWxnb3JpdGhtLFxuICAgIGRhdGE6IEJ1ZmZlclNvdXJjZSB8IEFzeW5jSXRlcmFibGU8QnVmZmVyU291cmNlPiB8IEl0ZXJhYmxlPEJ1ZmZlclNvdXJjZT4sXG4gICk6IFByb21pc2U8QXJyYXlCdWZmZXI+O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQXJyYXlCdWZmZXIgd2l0aCB0aGUgcmVzdWx0IG9mIGRpZ2VzdGluZyBgZGF0YWAgdXNpbmcgdGhlXG4gICAqIHNwZWNpZmllZCBgQWxnb3JpdGhtSWRlbnRpZmllcmAuXG4gICAqL1xuICBkaWdlc3RTeW5jKFxuICAgIGFsZ29yaXRobTogRGlnZXN0QWxnb3JpdGhtLFxuICAgIGRhdGE6IEJ1ZmZlclNvdXJjZSB8IEl0ZXJhYmxlPEJ1ZmZlclNvdXJjZT4sXG4gICk6IEFycmF5QnVmZmVyO1xufVxuXG4vKiogRXh0ZW5zaW9ucyB0byB0aGUgV2ViIHtAbGlua2NvZGUgQ3J5cHRvfSBpbnRlcmZhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZENyeXB0byBleHRlbmRzIENyeXB0byB7XG4gIC8qKiBFeHRlbnNpb24gdG8gdGhlIHtAbGlua2NvZGUgY3J5cHRvLlN1YnRsZUNyeXB0b30gaW50ZXJmYWNlLiAqL1xuICByZWFkb25seSBzdWJ0bGU6IFN0ZFN1YnRsZUNyeXB0bztcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIFdlYkNyeXB0byB3aGljaCBhZGRzIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgbm9uLXN0YW5kYXJkXG4gKiBhbGdvcml0aG1zLCBidXQgZGVsZWdhdGVzIHRvIHRoZSBydW50aW1lIFdlYkNyeXB0byBpbXBsZW1lbnRhdGlvbiB3aGVuZXZlclxuICogcG9zc2libGUuXG4gKi9cbmNvbnN0IHN0ZENyeXB0bzogU3RkQ3J5cHRvID0gKCh4KSA9PiB4KSh7XG4gIC4uLndlYkNyeXB0byxcbiAgc3VidGxlOiB7XG4gICAgLi4ud2ViQ3J5cHRvLnN1YnRsZSxcblxuICAgIC8qKlxuICAgICAqIFBvbHlmaWxscyBzdHJlYW0gc3VwcG9ydCB1bnRpbCB0aGUgV2ViIENyeXB0byBBUEkgZG9lcyBzbzpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vd2ludGVyY2cvcHJvcG9zYWwtd2ViY3J5cHRvLXN0cmVhbXN9XG4gICAgICovXG4gICAgYXN5bmMgZGlnZXN0KFxuICAgICAgYWxnb3JpdGhtOiBEaWdlc3RBbGdvcml0aG0sXG4gICAgICBkYXRhOiBCdWZmZXJTb3VyY2UgfCBBc3luY0l0ZXJhYmxlPEJ1ZmZlclNvdXJjZT4gfCBJdGVyYWJsZTxCdWZmZXJTb3VyY2U+LFxuICAgICk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgbGVuZ3RoIH0gPSBub3JtYWxpemVBbGdvcml0aG0oYWxnb3JpdGhtKTtcblxuICAgICAgYXNzZXJ0VmFsaWREaWdlc3RMZW5ndGgobGVuZ3RoKTtcblxuICAgICAgLy8gV2UgZGVsZWdhdGUgdG8gV2ViQ3J5cHRvIHdoZW5ldmVyIHBvc3NpYmxlLFxuICAgICAgaWYgKFxuICAgICAgICAvLyBpZiB0aGUgYWxnb3JpdGhtIGlzIHN1cHBvcnRlZCBieSB0aGUgV2ViQ3J5cHRvIHN0YW5kYXJkLFxuICAgICAgICAoV0VCX0NSWVBUT19ESUdFU1RfQUxHT1JJVEhNX05BTUVTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhcbiAgICAgICAgICBuYW1lLFxuICAgICAgICApICYmXG4gICAgICAgIC8vIGFuZCB0aGUgZGF0YSBpcyBhIHNpbmdsZSBidWZmZXIsXG4gICAgICAgIGlzQnVmZmVyU291cmNlKGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdlYkNyeXB0by5zdWJ0bGUuZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICB9IGVsc2UgaWYgKERJR0VTVF9BTEdPUklUSE1fTkFNRVMuaW5jbHVkZXMobmFtZSBhcyBEaWdlc3RBbGdvcml0aG1OYW1lKSkge1xuICAgICAgICBpZiAoaXNCdWZmZXJTb3VyY2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSBvdXIgYnVuZGxlZCBXYXNtIGltcGxlbWVudGF0aW9uIHZpYSBkaWdlc3RTeW5jXG4gICAgICAgICAgLy8gaWYgaXQgc3VwcG9ydHMgdGhlIGFsZ29yaXRobS5cbiAgICAgICAgICByZXR1cm4gc3RkQ3J5cHRvLnN1YnRsZS5kaWdlc3RTeW5jKGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShkYXRhKSkge1xuICAgICAgICAgIHJldHVybiBzdGRDcnlwdG8uc3VidGxlLmRpZ2VzdFN5bmMoXG4gICAgICAgICAgICBhbGdvcml0aG0sXG4gICAgICAgICAgICBkYXRhIGFzIEl0ZXJhYmxlPEJ1ZmZlclNvdXJjZT4sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FzeW5jSXRlcmFibGUoZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpZ2VzdENvbnRleHQobmFtZSk7XG4gICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBkYXRhIGFzIEFzeW5jSXRlcmFibGU8QnVmZmVyU291cmNlPikge1xuICAgICAgICAgICAgY29uc3QgY2h1bmtCeXRlcyA9IHRvVWludDhBcnJheShjaHVuayk7XG4gICAgICAgICAgICBpZiAoIWNodW5rQnl0ZXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNhbm5vdCBkaWdlc3QgdGhlIGRhdGE6IEEgY2h1bmsgaXMgbm90IEFycmF5QnVmZmVyIG5vciBBcnJheUJ1ZmZlclZpZXdcIixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQudXBkYXRlKGNodW5rQnl0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaWdlc3RBbmREcm9wKGxlbmd0aCkuYnVmZmVyIGFzIEFycmF5QnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGRlbm8tc3R5bGUtZ3VpZGUvZXJyb3ItbWVzc2FnZVxuICAgICAgICAgICAgXCJkYXRhIG11c3QgYmUgYSBCdWZmZXJTb3VyY2Ugb3IgW0FzeW5jXUl0ZXJhYmxlPEJ1ZmZlclNvdXJjZT5cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyAoVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHByb2hpYml0IHRoaXMgY2FzZS4pIElmIHRoZXkncmUgdHJ5aW5nXG4gICAgICAvLyB0byBjYWxsIGFuIGFsZ29yaXRobSB3ZSBkb24ndCByZWNvZ25pemUsIHBhc3MgaXQgYWxvbmcgdG8gV2ViQ3J5cHRvXG4gICAgICAvLyBpbiBjYXNlIGl0J3MgYSBub24tc3RhbmRhcmQgYWxnb3JpdGhtIHN1cHBvcnRlZCBieSB0aGUgdGhlIHJ1bnRpbWVcbiAgICAgIC8vIHRoZXkncmUgdXNpbmcuXG4gICAgICByZXR1cm4gYXdhaXQgd2ViQ3J5cHRvLnN1YnRsZS5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhIGFzIEJ1ZmZlclNvdXJjZSk7XG4gICAgfSxcblxuICAgIGRpZ2VzdFN5bmMoXG4gICAgICBhbGdvcml0aG06IERpZ2VzdEFsZ29yaXRobSxcbiAgICAgIGRhdGE6IEJ1ZmZlclNvdXJjZSB8IEl0ZXJhYmxlPEJ1ZmZlclNvdXJjZT4sXG4gICAgKTogQXJyYXlCdWZmZXIge1xuICAgICAgY29uc3QgeyBuYW1lLCBsZW5ndGggfSA9IG5vcm1hbGl6ZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgYXNzZXJ0VmFsaWREaWdlc3RMZW5ndGgobGVuZ3RoKTtcblxuICAgICAgaWYgKGlzQnVmZmVyU291cmNlKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdG9VaW50OEFycmF5KGRhdGEpITtcbiAgICAgICAgcmV0dXJuIGRpZ2VzdChuYW1lLCBieXRlcywgbGVuZ3RoKS5idWZmZXIgYXMgQXJyYXlCdWZmZXI7XG4gICAgICB9XG4gICAgICBpZiAoaXNJdGVyYWJsZShkYXRhKSkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpZ2VzdENvbnRleHQobmFtZSk7XG4gICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGNodW5rQnl0ZXMgPSB0b1VpbnQ4QXJyYXkoY2h1bmspO1xuICAgICAgICAgIGlmICghY2h1bmtCeXRlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgZGlnZXN0IHRoZSBkYXRhOiBBIGNodW5rIGlzIG5vdCBBcnJheUJ1ZmZlciBub3IgQXJyYXlCdWZmZXJWaWV3XCIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0LnVwZGF0ZShjaHVua0J5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5kaWdlc3RBbmREcm9wKGxlbmd0aCkuYnVmZmVyIGFzIEFycmF5QnVmZmVyO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBkZW5vLXN0eWxlLWd1aWRlL2Vycm9yLW1lc3NhZ2VcbiAgICAgICAgXCJkYXRhIG11c3QgYmUgYSBCdWZmZXJTb3VyY2Ugb3IgSXRlcmFibGU8QnVmZmVyU291cmNlPlwiLFxuICAgICAgKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbi8qXG4gKiBUaGUgbGFyZ2VzdCBkaWdlc3QgbGVuZ3RoIHRoZSBjdXJyZW50IFdhc20gaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQuIFRoaXNcbiAqIGlzIHRoZSB2YWx1ZSBvZiBgaXNpemU6Ok1BWGAgb24gMzItYml0IHBsYXRmb3JtcyBsaWtlIFdhc20sIHdoaWNoIGlzIHRoZVxuICogbWF4aW11bSBhbGxvd2VkIGNhcGFjaXR5IG9mIGEgUnVzdCBgVmVjPHU4PmAuXG4gKi9cbmNvbnN0IE1BWF9ESUdFU1RfTEVOR1RIID0gMHg3RkZGX0ZGRkY7XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IGEgbnVtYmVyIGlzIGEgdmFsaWQgbGVuZ3RoIGZvciBhIGRpZ2VzdCwgd2hpY2ggbXVzdCBiZSBhblxuICogaW50ZWdlciB0aGF0IGZpdHMgaW4gYSBSdXN0IGBWZWM8dTg+YCwgb3IgYmUgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBhc3NlcnRWYWxpZERpZ2VzdExlbmd0aCh2YWx1ZT86IG51bWJlcikge1xuICBpZiAoXG4gICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfRElHRVNUX0xFTkdUSCB8fFxuICAgICAgIU51bWJlci5pc0ludGVnZXIodmFsdWUpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgIGBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgJHtNQVhfRElHRVNUX0xFTkdUSH0sIGluY2x1c2l2ZWAsXG4gICAgKTtcbiAgfVxufVxuXG4vKiogRXh0ZW5kZWQgZGlnZXN0IGFsZ29yaXRobSBvYmplY3RzLiAqL1xuZXhwb3J0IHR5cGUgRGlnZXN0QWxnb3JpdGhtT2JqZWN0ID0ge1xuICBuYW1lOiBEaWdlc3RBbGdvcml0aG1OYW1lO1xuICBsZW5ndGg/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEV4dGVuZGVkIGRpZ2VzdCBhbGdvcml0aG1zIGFjY2VwdGVkIGJ5IHtAbGlua2NvZGUgc3RkQ3J5cHRvLnN1YnRsZS5kaWdlc3R9LlxuICpcbiAqIFRoZSBgbGVuZ3RoYCBvcHRpb24gd2lsbCBiZSBpZ25vcmVkIGZvclxuICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TdWJ0bGVDcnlwdG8vZGlnZXN0I2FsZ29yaXRobSB8IFdlYiBTdGFuZGFyZCBhbGdvcml0aG1zfS5cbiAqL1xuZXhwb3J0IHR5cGUgRGlnZXN0QWxnb3JpdGhtID0gRGlnZXN0QWxnb3JpdGhtTmFtZSB8IERpZ2VzdEFsZ29yaXRobU9iamVjdDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQWxnb3JpdGhtKGFsZ29yaXRobTogRGlnZXN0QWxnb3JpdGhtKSB7XG4gIHJldHVybiAoKHR5cGVvZiBhbGdvcml0aG0gPT09IFwic3RyaW5nXCIpXG4gICAgPyB7IG5hbWU6IGFsZ29yaXRobS50b1VwcGVyQ2FzZSgpIH1cbiAgICA6IHtcbiAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgIG5hbWU6IGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCksXG4gICAgfSkgYXMgRGlnZXN0QWxnb3JpdGhtT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlclNvdXJjZShvYmo6IHVua25vd24pOiBvYmogaXMgQnVmZmVyU291cmNlIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhvYmopO1xufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlPFQ+KG9iajogdW5rbm93bik6IG9iaiBpcyBJdGVyYWJsZTxUPiB7XG4gIHJldHVybiB0eXBlb2YgKG9iaiBhcyBJdGVyYWJsZTxUPilbU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGU8VD4ob2JqOiB1bmtub3duKTogb2JqIGlzIEFzeW5jSXRlcmFibGU8VD4ge1xuICByZXR1cm4gdHlwZW9mIChvYmogYXMgQXN5bmNJdGVyYWJsZTxUPilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmV4cG9ydCB7IHN0ZENyeXB0byBhcyBjcnlwdG8gfTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJHQyxHQUNELFNBQ0UsTUFBTSxFQUNOLHNCQUFzQixFQUV0QixhQUFhLFFBQ1IsaUJBQWlCO0FBRXhCLFNBQVMsc0JBQXNCLEdBQTZCO0FBRTVELDhDQUE4QyxHQUM5QyxNQUFNLG9DQUFvQztF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
+// denoCacheMetadata=12851248219351958936,15237271966104932992 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/98cb00e3517957054dc1b9f9b06db6ce05d5815406747c2845298cbc1890fb68.js b/vendor/gen/https/jsr.io/98cb00e3517957054dc1b9f9b06db6ce05d5815406747c2845298cbc1890fb68.js
new file mode 100644
index 0000000..11d4ae8
--- /dev/null
+++ b/vendor/gen/https/jsr.io/98cb00e3517957054dc1b9f9b06db6ce05d5815406747c2845298cbc1890fb68.js
@@ -0,0 +1,22 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/from_file_url.ts";
+/**
+ * Converts a file URL to a path string.
+ *
+ * @example Usage
+ * ```ts
+ * import { fromFileUrl } from "@std/path/posix/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl(new URL("file:///home/foo")), "/home/foo");
+ * ```
+ *
+ * @param url The file URL to convert.
+ * @returns The path string.
+ */ export function fromFileUrl(url) {
+ url = assertArg(url);
+ return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9mcm9tX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydEFyZyB9IGZyb20gXCIuLi9fY29tbW9uL2Zyb21fZmlsZV91cmwudHNcIjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpbGUgVVJMIHRvIGEgcGF0aCBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvZnJvbS1maWxlLXVybFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpKSwgXCIvaG9tZS9mb29cIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXJsIFRoZSBmaWxlIFVSTCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBVUkwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICB1cmwgPSBhc3NlcnRBcmcodXJsKTtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcbiAgICB1cmwucGF0aG5hbWUucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLDhCQUE4QjtBQUV4RDs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0QsT0FBTyxTQUFTLFlBQVksR0FBaUI7RUFDM0MsTUFBTSxVQUFVO0VBQ2hCLE9BQU8sbUJBQ0wsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLHdCQUF3QjtBQUVqRCJ9
+// denoCacheMetadata=5888410168631165451,15717728533324680760 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/98f0259426a0c81a230d4c389982c1135532ead00f6ed20a8512836d26b91574.js b/vendor/gen/https/jsr.io/98f0259426a0c81a230d4c389982c1135532ead00f6ed20a8512836d26b91574.js
new file mode 100644
index 0000000..b07d5c0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/98f0259426a0c81a230d4c389982c1135532ead00f6ed20a8512836d26b91574.js
@@ -0,0 +1,46 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH, CHAR_COLON, CHAR_DOT, CHAR_QUESTION_MARK } from "../_common/constants.ts";
+import { isWindowsDeviceRoot } from "./_util.ts";
+import { resolve } from "./resolve.ts";
+/**
+ * Resolves path to a namespace path
+ *
+ * @example Usage
+ * ```ts
+ * import { toNamespacedPath } from "@std/path/windows/to-namespaced-path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const namespaced = toNamespacedPath("C:\\foo\\bar");
+ * assertEquals(namespaced, "\\\\?\\C:\\foo\\bar");
+ * ```
+ *
+ * @param path The path to resolve to namespaced path
+ * @returns The resolved namespaced path
+ */ export function toNamespacedPath(path) {
+ // Note: this will *probably* throw somewhere.
+ if (typeof path !== "string") return path;
+ if (path.length === 0) return "";
+ const resolvedPath = resolve(path);
+ if (resolvedPath.length >= 3) {
+ if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {
+ // Possible UNC root
+ if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {
+ const code = resolvedPath.charCodeAt(2);
+ if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {
+ // Matched non-long UNC root, convert the path to a long UNC path
+ return `\\\\?\\UNC\\${resolvedPath.slice(2)}`;
+ }
+ }
+ } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) {
+ // Possible device root
+ if (resolvedPath.charCodeAt(1) === CHAR_COLON && resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {
+ // Matched device root, convert the path to a long UNC path
+ return `\\\\?\\${resolvedPath}`;
+ }
+ }
+ }
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL3RvX25hbWVzcGFjZWRfcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQge1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILFxuICBDSEFSX0NPTE9OLFxuICBDSEFSX0RPVCxcbiAgQ0hBUl9RVUVTVElPTl9NQVJLLFxufSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IGlzV2luZG93c0RldmljZVJvb3QgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3Jlc29sdmUudHNcIjtcblxuLyoqXG4gKiBSZXNvbHZlcyBwYXRoIHRvIGEgbmFtZXNwYWNlIHBhdGhcbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvTmFtZXNwYWNlZFBhdGggfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvdG8tbmFtZXNwYWNlZC1wYXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBuYW1lc3BhY2VkID0gdG9OYW1lc3BhY2VkUGF0aChcIkM6XFxcXGZvb1xcXFxiYXJcIik7XG4gKiBhc3NlcnRFcXVhbHMobmFtZXNwYWNlZCwgXCJcXFxcXFxcXD9cXFxcQzpcXFxcZm9vXFxcXGJhclwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHJlc29sdmUgdG8gbmFtZXNwYWNlZCBwYXRoXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgbmFtZXNwYWNlZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vdGU6IHRoaXMgd2lsbCAqcHJvYmFibHkqIHRocm93IHNvbWV3aGVyZS5cbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSByZXR1cm4gcGF0aDtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcblxuICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgpO1xuXG4gIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID49IDMpIHtcbiAgICBpZiAocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICBjb25zdCBjb2RlID0gcmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMik7XG4gICAgICAgIGlmIChjb2RlICE9PSBDSEFSX1FVRVNUSU9OX01BUksgJiYgY29kZSAhPT0gQ0hBUl9ET1QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIG5vbi1sb25nIFVOQyByb290LCBjb252ZXJ0IHRoZSBwYXRoIHRvIGEgbG9uZyBVTkMgcGF0aFxuICAgICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXFVOQ1xcXFwke3Jlc29sdmVkUGF0aC5zbGljZSgyKX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgaWYgKFxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTiAmJlxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSFxuICAgICAgKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZGV2aWNlIHJvb3QsIGNvbnZlcnQgdGhlIHBhdGggdG8gYSBsb25nIFVOQyBwYXRoXG4gICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXCR7cmVzb2x2ZWRQYXRofWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUNFLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsUUFBUSxFQUNSLGtCQUFrQixRQUNiLDBCQUEwQjtBQUNqQyxTQUFTLG1CQUFtQixRQUFRLGFBQWE7QUFDakQsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQUV2Qzs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxpQkFBaUIsSUFBWTtFQUMzQyw4Q0FBOEM7RUFDOUMsSUFBSSxPQUFPLFNBQVMsVUFBVSxPQUFPO0VBQ3JDLElBQUksS0FBSyxNQUFNLEtBQUssR0FBRyxPQUFPO0VBRTlCLE1BQU0sZUFBZSxRQUFRO0VBRTdCLElBQUksYUFBYSxNQUFNLElBQUksR0FBRztJQUM1QixJQUFJLGFBQWEsVUFBVSxDQUFDLE9BQU8scUJBQXFCO01BQ3RELG9CQUFvQjtNQUVwQixJQUFJLGFBQWEsVUFBVSxDQUFDLE9BQU8scUJBQXFCO1FBQ3RELE1BQU0sT0FBTyxhQUFhLFVBQVUsQ0FBQztRQUNyQyxJQUFJLFNBQVMsc0JBQXNCLFNBQVMsVUFBVTtVQUNwRCxpRUFBaUU7VUFDakUsT0FBTyxDQUFDLFlBQVksRUFBRSxhQUFhLEtBQUssQ0FBQyxJQUFJO1FBQy9DO01BQ0Y7SUFDRixPQUFPLElBQUksb0JBQW9CLGFBQWEsVUFBVSxDQUFDLEtBQUs7TUFDMUQsdUJBQXVCO01BRXZCLElBQ0UsYUFBYSxVQUFVLENBQUMsT0FBTyxjQUMvQixhQUFhLFVBQVUsQ0FBQyxPQUFPLHFCQUMvQjtRQUNBLDJEQUEyRDtRQUMzRCxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWM7TUFDakM7SUFDRjtFQUNGO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=14631925446712950543,8746898558176197145 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/98f62dcda1e98ade7b8eec4fa4b9b5c664c1069ca223bcc2b5a93805f0e97884.js b/vendor/gen/https/jsr.io/98f62dcda1e98ade7b8eec4fa4b9b5c664c1069ca223bcc2b5a93805f0e97884.js
new file mode 100644
index 0000000..27538d3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/98f62dcda1e98ade7b8eec4fa4b9b5c664c1069ca223bcc2b5a93805f0e97884.js
@@ -0,0 +1,13 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * The character used to separate entries in the PATH environment variable.
+ */ export const DELIMITER = ":";
+/**
+ * The character used to separate components of a file path.
+ */ export const SEPARATOR = "/";
+/**
+ * A regular expression that matches one or more path separators.
+ */ export const SEPARATOR_PATTERN = /\/+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgZW50cmllcyBpbiB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFTElNSVRFUiA9IFwiOlwiIGFzIGNvbnN0O1xuLyoqXG4gKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgY29tcG9uZW50cyBvZiBhIGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUEFSQVRPUiA9IFwiL1wiIGFzIGNvbnN0O1xuLyoqXG4gKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgb25lIG9yIG1vcmUgcGF0aCBzZXBhcmF0b3JzLlxuICovXG5leHBvcnQgY29uc3QgU0VQQVJBVE9SX1BBVFRFUk4gPSAvXFwvKy87XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQzs7Q0FFQyxHQUNELE9BQU8sTUFBTSxZQUFZLElBQWE7QUFDdEM7O0NBRUMsR0FDRCxPQUFPLE1BQU0sWUFBWSxJQUFhO0FBQ3RDOztDQUVDLEdBQ0QsT0FBTyxNQUFNLG9CQUFvQixNQUFNIn0=
+// denoCacheMetadata=9738949877297730477,13665888715184974858 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/992b4d94d2181a6ea0f6ca6443106d10e641b5198e04d0a84f446c0485f86a3b.js b/vendor/gen/https/jsr.io/992b4d94d2181a6ea0f6ca6443106d10e641b5198e04d0a84f446c0485f86a3b.js
new file mode 100644
index 0000000..cc482fa
--- /dev/null
+++ b/vendor/gen/https/jsr.io/992b4d94d2181a6ea0f6ca6443106d10e641b5198e04d0a84f446c0485f86a3b.js
@@ -0,0 +1,102 @@
+// Ported from js-yaml v3.13.1:
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2018-2025 the Deno authors. MIT license.
+// [ 64, 65, 66 ] -> [ padding, CR, LF ]
+const BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";
+function resolveYamlBinary(data) {
+ if (data === null) return false;
+ let code;
+ let bitlen = 0;
+ const max = data.length;
+ const map = BASE64_MAP;
+ // Convert one by one.
+ for(let idx = 0; idx < max; idx++){
+ code = map.indexOf(data.charAt(idx));
+ // Skip CR/LF
+ if (code > 64) continue;
+ // Fail on illegal characters
+ if (code < 0) return false;
+ bitlen += 6;
+ }
+ // If there are any bits left, source was corrupted
+ return bitlen % 8 === 0;
+}
+function constructYamlBinary(data) {
+ // remove CR/LF & padding to simplify scan
+ const input = data.replace(/[\r\n=]/g, "");
+ const max = input.length;
+ const map = BASE64_MAP;
+ // Collect by 6*4 bits (3 bytes)
+ const result = [];
+ let bits = 0;
+ for(let idx = 0; idx < max; idx++){
+ if (idx % 4 === 0 && idx) {
+ result.push(bits >> 16 & 0xff);
+ result.push(bits >> 8 & 0xff);
+ result.push(bits & 0xff);
+ }
+ bits = bits << 6 | map.indexOf(input.charAt(idx));
+ }
+ // Dump tail
+ const tailbits = max % 4 * 6;
+ if (tailbits === 0) {
+ result.push(bits >> 16 & 0xff);
+ result.push(bits >> 8 & 0xff);
+ result.push(bits & 0xff);
+ } else if (tailbits === 18) {
+ result.push(bits >> 10 & 0xff);
+ result.push(bits >> 2 & 0xff);
+ } else if (tailbits === 12) {
+ result.push(bits >> 4 & 0xff);
+ }
+ return new Uint8Array(result);
+}
+function representYamlBinary(object) {
+ const max = object.length;
+ const map = BASE64_MAP;
+ // Convert every three bytes to 4 ASCII characters.
+ let result = "";
+ let bits = 0;
+ for(let idx = 0; idx < max; idx++){
+ if (idx % 3 === 0 && idx) {
+ result += map[bits >> 18 & 0x3f];
+ result += map[bits >> 12 & 0x3f];
+ result += map[bits >> 6 & 0x3f];
+ result += map[bits & 0x3f];
+ }
+ bits = (bits << 8) + object[idx];
+ }
+ // Dump tail
+ const tail = max % 3;
+ if (tail === 0) {
+ result += map[bits >> 18 & 0x3f];
+ result += map[bits >> 12 & 0x3f];
+ result += map[bits >> 6 & 0x3f];
+ result += map[bits & 0x3f];
+ } else if (tail === 2) {
+ result += map[bits >> 10 & 0x3f];
+ result += map[bits >> 4 & 0x3f];
+ result += map[bits << 2 & 0x3f];
+ result += map[64];
+ } else if (tail === 1) {
+ result += map[bits >> 2 & 0x3f];
+ result += map[bits << 4 & 0x3f];
+ result += map[64];
+ result += map[64];
+ }
+ return result;
+}
+function isBinary(obj) {
+ return obj instanceof Uint8Array;
+}
+export const binary = {
+ tag: "tag:yaml.org,2002:binary",
+ construct: constructYamlBinary,
+ kind: "scalar",
+ predicate: isBinary,
+ represent: representYamlBinary,
+ resolve: resolveYamlBinary
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9iaW5hcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gXCIuLi9fdHlwZS50c1wiO1xuXG4vLyBbIDY0LCA2NSwgNjYgXSAtPiBbIHBhZGRpbmcsIENSLCBMRiBdXG5jb25zdCBCQVNFNjRfTUFQID1cbiAgXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxcblxcclwiO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEJpbmFyeShkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBsZXQgY29kZTogbnVtYmVyO1xuICBsZXQgYml0bGVuID0gMDtcbiAgY29uc3QgbWF4ID0gZGF0YS5sZW5ndGg7XG4gIGNvbnN0IG1hcCA9IEJBU0U2NF9NQVA7XG5cbiAgLy8gQ29udmVydCBvbmUgYnkgb25lLlxuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgY29kZSA9IG1hcC5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpO1xuXG4gICAgLy8gU2tpcCBDUi9MRlxuICAgIGlmIChjb2RlID4gNjQpIGNvbnRpbnVlO1xuXG4gICAgLy8gRmFpbCBvbiBpbGxlZ2FsIGNoYXJhY3RlcnNcbiAgICBpZiAoY29kZSA8IDApIHJldHVybiBmYWxzZTtcblxuICAgIGJpdGxlbiArPSA2O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBiaXRzIGxlZnQsIHNvdXJjZSB3YXMgY29ycnVwdGVkXG4gIHJldHVybiBiaXRsZW4gJSA4ID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGE6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAvLyByZW1vdmUgQ1IvTEYgJiBwYWRkaW5nIHRvIHNpbXBsaWZ5IHNjYW5cbiAgY29uc3QgaW5wdXQgPSBkYXRhLnJlcGxhY2UoL1tcXHJcXG49XS9nLCBcIlwiKTtcbiAgY29uc3QgbWF4ID0gaW5wdXQubGVuZ3RoO1xuICBjb25zdCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbGxlY3QgYnkgNio0IGJpdHMgKDMgYnl0ZXMpXG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBiaXRzID0gMDtcbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkge1xuICAgICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTYpICYgMHhmZik7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiA4KSAmIDB4ZmYpO1xuICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDB4ZmYpO1xuICAgIH1cblxuICAgIGJpdHMgPSAoYml0cyA8PCA2KSB8IG1hcC5pbmRleE9mKGlucHV0LmNoYXJBdChpZHgpKTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIGNvbnN0IHRhaWxiaXRzID0gKG1heCAlIDQpICogNjtcblxuICBpZiAodGFpbGJpdHMgPT09IDApIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweGZmKTtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiA4KSAmIDB4ZmYpO1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAweGZmKTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTgpIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxMCkgJiAweGZmKTtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAyKSAmIDB4ZmYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxMikge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDQpICYgMHhmZik7XG4gIH1cblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3Q6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICBjb25zdCBtYXggPSBvYmplY3QubGVuZ3RoO1xuICBjb25zdCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgZXZlcnkgdGhyZWUgYnl0ZXMgdG8gNCBBU0NJSSBjaGFyYWN0ZXJzLlxuXG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgYml0cyA9IDA7XG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoaWR4ICUgMyA9PT0gMCAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzZl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M2ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA2KSAmIDB4M2ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzZl07XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF0hO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgY29uc3QgdGFpbCA9IG1heCAlIDM7XG5cbiAgaWYgKHRhaWwgPT09IDApIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDE4KSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzZl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA2KSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBtYXBbYml0cyAmIDB4M2ZdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDIpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEwKSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNCkgJiAweDNmXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzIDw8IDIpICYgMHgzZl07XG4gICAgcmVzdWx0ICs9IG1hcFs2NF07XG4gIH0gZWxzZSBpZiAodGFpbCA9PT0gMSkge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMikgJiAweDNmXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzIDw8IDQpICYgMHgzZl07XG4gICAgcmVzdWx0ICs9IG1hcFs2NF07XG4gICAgcmVzdWx0ICs9IG1hcFs2NF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gaXNCaW5hcnkob2JqOiB1bmtub3duKTogb2JqIGlzIFVpbnQ4QXJyYXkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGNvbnN0IGJpbmFyeTogVHlwZTxcInNjYWxhclwiLCBVaW50OEFycmF5PiA9IHtcbiAgdGFnOiBcInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeVwiLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCaW5hcnksXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHByZWRpY2F0ZTogaXNCaW5hcnksXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEJpbmFyeSxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwwRUFBMEU7QUFDMUUsb0ZBQW9GO0FBQ3BGLHFEQUFxRDtBQUdyRCx3Q0FBd0M7QUFDeEMsTUFBTSxhQUNKO0FBRUYsU0FBUyxrQkFBa0IsSUFBWTtFQUNyQyxJQUFJLFNB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
+// denoCacheMetadata=951669027442543421,8278982904742192468 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/9a5768f12c3d5486b6a5324e94c9a06da3c138ecae2dedb72cbe0c0c86912157.js b/vendor/gen/https/jsr.io/9a5768f12c3d5486b6a5324e94c9a06da3c138ecae2dedb72cbe0c0c86912157.js
new file mode 100644
index 0000000..1fbf33f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/9a5768f12c3d5486b6a5324e94c9a06da3c138ecae2dedb72cbe0c0c86912157.js
@@ -0,0 +1,35 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { encodeWhitespace } from "../_common/to_file_url.ts";
+import { isAbsolute } from "./is_absolute.ts";
+/**
+ * Converts a path string to a file URL.
+ *
+ * @example Usage
+ * ```ts
+ * import { toFileUrl } from "@std/path/windows/to-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(toFileUrl("\\home\\foo"), new URL("file:///home/foo"));
+ * assertEquals(toFileUrl("C:\\Users\\foo"), new URL("file:///C:/Users/foo"));
+ * assertEquals(toFileUrl("\\\\127.0.0.1\\home\\foo"), new URL("file://127.0.0.1/home/foo"));
+ * ```
+ * @param path The path to convert.
+ * @returns The file URL.
+ */ export function toFileUrl(path) {
+ if (!isAbsolute(path)) {
+ throw new TypeError(`Path must be absolute: received "${path}"`);
+ }
+ const [, hostname, pathname] = path.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
+ const url = new URL("file:///");
+ url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
+ if (hostname !== undefined && hostname !== "localhost") {
+ url.hostname = hostname;
+ if (!url.hostname) {
+ throw new TypeError(`Invalid hostname: "${url.hostname}"`);
+ }
+ }
+ return url;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL3RvX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGVuY29kZVdoaXRlc3BhY2UgfSBmcm9tIFwiLi4vX2NvbW1vbi90b19maWxlX3VybC50c1wiO1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSB9IGZyb20gXCIuL2lzX2Fic29sdXRlLnRzXCI7XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXRoIHN0cmluZyB0byBhIGZpbGUgVVJMLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdG9GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL3RvLWZpbGUtdXJsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiXFxcXGhvbWVcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2Zvb1wiKSk7XG4gKiBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIikpO1xuICogYXNzZXJ0RXF1YWxzKHRvRmlsZVVybChcIlxcXFxcXFxcMTI3LjAuMC4xXFxcXGhvbWVcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLzEyNy4wLjAuMS9ob21lL2Zvb1wiKSk7XG4gKiBgYGBcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpbGVVcmwocGF0aDogc3RyaW5nKTogVVJMIHtcbiAgaWYgKCFpc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUGF0aCBtdXN0IGJlIGFic29sdXRlOiByZWNlaXZlZCBcIiR7cGF0aH1cImApO1xuICB9XG4gIGNvbnN0IFssIGhvc3RuYW1lLCBwYXRobmFtZV0gPSBwYXRoLm1hdGNoKFxuICAgIC9eKD86Wy9cXFxcXXsyfShbXi9cXFxcXSspKD89Wy9cXFxcXSg/OlteL1xcXFxdfCQpKSk/KC4qKS8sXG4gICkhO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKFwiZmlsZTovLy9cIik7XG4gIHVybC5wYXRobmFtZSA9IGVuY29kZVdoaXRlc3BhY2UocGF0aG5hbWUhLnJlcGxhY2UoLyUvZywgXCIlMjVcIikpO1xuICBpZiAoaG9zdG5hbWUgIT09IHVuZGVmaW5lZCAmJiBob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIikge1xuICAgIHVybC5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuICAgIGlmICghdXJsLmhvc3RuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGhvc3RuYW1lOiBcIiR7dXJsLmhvc3RuYW1lfVwiYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1cmw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLGdCQUFnQixRQUFRLDRCQUE0QjtBQUM3RCxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsVUFBVSxJQUFZO0VBQ3BDLElBQUksQ0FBQyxXQUFXLE9BQU87SUFDckIsTUFBTSxJQUFJLFVBQVUsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUNqRTtFQUNBLE1BQU0sR0FBRyxVQUFVLFNBQVMsR0FBRyxLQUFLLEtBQUssQ0FDdkM7RUFFRixNQUFNLE1BQU0sSUFBSSxJQUFJO0VBQ3BCLElBQUksUUFBUSxHQUFHLGlCQUFpQixTQUFVLE9BQU8sQ0FBQyxNQUFNO0VBQ3hELElBQUksYUFBYSxhQUFhLGFBQWEsYUFBYTtJQUN0RCxJQUFJLFFBQVEsR0FBRztJQUNmLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtNQUNqQixNQUFNLElBQUksVUFBVSxDQUFDLG1CQUFtQixFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRDtFQUNGO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=3227129872462315296,10480969667969707814 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/9b021aa9d7accb3c15a3433f842c97639b9bd91dbd9be7fba09c9d099164fee6.js b/vendor/gen/https/jsr.io/9b021aa9d7accb3c15a3433f842c97639b9bd91dbd9be7fba09c9d099164fee6.js
new file mode 100644
index 0000000..b11d6c1
--- /dev/null
+++ b/vendor/gen/https/jsr.io/9b021aa9d7accb3c15a3433f842c97639b9bd91dbd9be7fba09c9d099164fee6.js
@@ -0,0 +1,15 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+/**
+ * Get a human readable file type string.
+ *
+ * @param file File information, as returned by {@linkcode Deno.stat} or
+ * {@linkcode Deno.lstat}.
+ *
+ * @returns The file type as a string, or `undefined` if the file type is
+ * unknown.
+ */ export function getFileInfoType(fileInfo) {
+ return fileInfo.isFile ? "file" : fileInfo.isDirectory ? "dir" : fileInfo.isSymlink ? "symlink" : undefined;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L19nZXRfZmlsZV9pbmZvX3R5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cblxuZXhwb3J0IHR5cGUgUGF0aFR5cGUgPSBcImZpbGVcIiB8IFwiZGlyXCIgfCBcInN5bWxpbmtcIjtcblxuLyoqXG4gKiBHZXQgYSBodW1hbiByZWFkYWJsZSBmaWxlIHR5cGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBmaWxlIEZpbGUgaW5mb3JtYXRpb24sIGFzIHJldHVybmVkIGJ5IHtAbGlua2NvZGUgRGVuby5zdGF0fSBvclxuICoge0BsaW5rY29kZSBEZW5vLmxzdGF0fS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZmlsZSB0eXBlIGFzIGEgc3RyaW5nLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgZmlsZSB0eXBlIGlzXG4gKiB1bmtub3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUluZm9UeXBlKGZpbGVJbmZvOiBEZW5vLkZpbGVJbmZvKTogUGF0aFR5cGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZmlsZUluZm8uaXNGaWxlXG4gICAgPyBcImZpbGVcIlxuICAgIDogZmlsZUluZm8uaXNEaXJlY3RvcnlcbiAgICA/IFwiZGlyXCJcbiAgICA6IGZpbGVJbmZvLmlzU3ltbGlua1xuICAgID8gXCJzeW1saW5rXCJcbiAgICA6IHVuZGVmaW5lZDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsaURBQWlEO0FBSWpEOzs7Ozs7OztDQVFDLEdBQ0QsT0FBTyxTQUFTLGdCQUFnQixRQUF1QjtFQUNyRCxPQUFPLFNBQVMsTUFBTSxHQUNsQixTQUNBLFNBQVMsV0FBVyxHQUNwQixRQUNBLFNBQVMsU0FBUyxHQUNsQixZQUNBO0FBQ04ifQ==
+// denoCacheMetadata=12441232959464199775,8145133913644284989 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/9e70c413dd22ed24e5ae6d305c9d42c1eb39670785101b4ffc7fceafa1f7797e.js b/vendor/gen/https/jsr.io/9e70c413dd22ed24e5ae6d305c9d42c1eb39670785101b4ffc7fceafa1f7797e.js
new file mode 100644
index 0000000..adf0b43
--- /dev/null
+++ b/vendor/gen/https/jsr.io/9e70c413dd22ed24e5ae6d305c9d42c1eb39670785101b4ffc7fceafa1f7797e.js
@@ -0,0 +1,46 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * Test whether the given string is a glob.
+ *
+ * @example Usage
+ * ```ts
+ * import { isGlob } from "@std/path/is-glob";
+ * import { assert } from "@std/assert";
+ *
+ * assert(!isGlob("foo/bar/../baz"));
+ * assert(isGlob("foo/*ar/../baz"));
+ * ```
+ *
+ * @param str String to test.
+ * @returns `true` if the given string is a glob, otherwise `false`
+ */ export function isGlob(str) {
+ const chars = {
+ "{": "}",
+ "(": ")",
+ "[": "]"
+ };
+ const regex = /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
+ if (str === "") {
+ return false;
+ }
+ let match;
+ while(match = regex.exec(str)){
+ if (match[2]) return true;
+ let idx = match.index + match[0].length;
+ // if an open bracket/brace/paren is escaped,
+ // set the index to the next closing character
+ const open = match[1];
+ const close = open ? chars[open] : null;
+ if (open && close) {
+ const n = str.indexOf(close, idx);
+ if (n !== -1) {
+ idx = n + 1;
+ }
+ }
+ str = str.slice(idx);
+ }
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9pc19nbG9iLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBnbG9iLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNHbG9iIH0gZnJvbSBcIkBzdGQvcGF0aC9pcy1nbG9iXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnQoIWlzR2xvYihcImZvby9iYXIvLi4vYmF6XCIpKTtcbiAqIGFzc2VydChpc0dsb2IoXCJmb28vKmFyLy4uL2JhelwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFN0cmluZyB0byB0ZXN0LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBnbG9iLCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNoYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcIntcIjogXCJ9XCIsIFwiKFwiOiBcIilcIiwgXCJbXCI6IFwiXVwiIH07XG4gIGNvbnN0IHJlZ2V4ID1cbiAgICAvXFxcXCguKXwoXiF8XFwqfFxcP3xbXFxdLispXVxcP3xcXFtbXlxcXFxcXF1dK1xcXXxcXHtbXlxcXFx9XStcXH18XFwoXFw/WzohPV1bXlxcXFwpXStcXCl8XFwoW158XStcXHxbXlxcXFwpXStcXCkpLztcblxuICBpZiAoc3RyID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHN0cikpKSB7XG4gICAgaWYgKG1hdGNoWzJdKSByZXR1cm4gdHJ1ZTtcbiAgICBsZXQgaWR4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cbiAgICAvLyBpZiBhbiBvcGVuIGJyYWNrZXQvYnJhY2UvcGFyZW4gaXMgZXNjYXBlZCxcbiAgICAvLyBzZXQgdGhlIGluZGV4IHRvIHRoZSBuZXh0IGNsb3NpbmcgY2hhcmFjdGVyXG4gICAgY29uc3Qgb3BlbiA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IGNsb3NlID0gb3BlbiA/IGNoYXJzW29wZW5dIDogbnVsbDtcbiAgICBpZiAob3BlbiAmJiBjbG9zZSkge1xuICAgICAgY29uc3QgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpZHgpO1xuICAgICAgaWYgKG4gIT09IC0xKSB7XG4gICAgICAgIGlkeCA9IG4gKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ciA9IHN0ci5zbGljZShpZHgpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE1BQU0sUUFBZ0M7SUFBRSxLQUFLO0lBQUssS0FBSztJQUFLLEtBQUs7RUFBSTtFQUNyRSxNQUFNLFFBQ0o7RUFFRixJQUFJLFFBQVEsSUFBSTtJQUNkLE9BQU87RUFDVDtFQUVBLElBQUk7RUFFSixNQUFRLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBTztJQUNoQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTztJQUNyQixJQUFJLE1BQU0sTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0lBRXZDLDZDQUE2QztJQUM3Qyw4Q0FBOEM7SUFDOUMsTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO0lBQ3JCLE1BQU0sUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUc7SUFDbkMsSUFBSSxRQUFRLE9BQU87TUFDakIsTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU87TUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRztRQUNaLE1BQU0sSUFBSTtNQUNaO0lBQ0Y7SUFFQSxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ2xCO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=9914055199463671674,905173533948372675 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a0b7e8477b3687472f959d96973062e83a843ecd2caee2a9fb327b10b406bd8f.js b/vendor/gen/https/jsr.io/a0b7e8477b3687472f959d96973062e83a843ecd2caee2a9fb327b10b406bd8f.js
new file mode 100644
index 0000000..808b17a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a0b7e8477b3687472f959d96973062e83a843ecd2caee2a9fb327b10b406bd8f.js
@@ -0,0 +1,28 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { format as posixFormat } from "./posix/format.ts";
+import { format as windowsFormat } from "./windows/format.ts";
+/**
+ * Generate a path from a {@linkcode ParsedPath} object. It does the
+ * opposite of {@linkcode https://jsr.io/@std/path/doc/~/parse | parse()}.
+ *
+ * @example Usage
+ * ```ts
+ * import { format } from "@std/path/format";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(format({ dir: "C:\\path\\to", base: "script.ts" }), "C:\\path\\to\\script.ts");
+ * } else {
+ * assertEquals(format({ dir: "/path/to/dir", base: "script.ts" }), "/path/to/dir/script.ts");
+ * }
+ * ```
+ *
+ * @param pathObject Object with path components.
+ * @returns The formatted path.
+ */ export function format(pathObject) {
+ return isWindows ? windowsFormat(pathObject) : posixFormat(pathObject);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyBmb3JtYXQgYXMgcG9zaXhGb3JtYXQgfSBmcm9tIFwiLi9wb3NpeC9mb3JtYXQudHNcIjtcbmltcG9ydCB7IGZvcm1hdCBhcyB3aW5kb3dzRm9ybWF0IH0gZnJvbSBcIi4vd2luZG93cy9mb3JtYXQudHNcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkUGF0aCB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBwYXRoIGZyb20gYSB7QGxpbmtjb2RlIFBhcnNlZFBhdGh9IG9iamVjdC4gSXQgZG9lcyB0aGVcbiAqIG9wcG9zaXRlIG9mIHtAbGlua2NvZGUgaHR0cHM6Ly9qc3IuaW8vQHN0ZC9wYXRoL2RvYy9+L3BhcnNlIHwgcGFyc2UoKX0uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiQHN0ZC9wYXRoL2Zvcm1hdFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhmb3JtYXQoeyBkaXI6IFwiQzpcXFxccGF0aFxcXFx0b1wiLCBiYXNlOiBcInNjcmlwdC50c1wiIH0pLCBcIkM6XFxcXHBhdGhcXFxcdG9cXFxcc2NyaXB0LnRzXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGZvcm1hdCh7IGRpcjogXCIvcGF0aC90by9kaXJcIiwgYmFzZTogXCJzY3JpcHQudHNcIiB9KSwgXCIvcGF0aC90by9kaXIvc2NyaXB0LnRzXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGhPYmplY3QgT2JqZWN0IHdpdGggcGF0aCBjb21wb25lbnRzLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Q6IFBhcnRpYWw8UGFyc2VkUGF0aD4pOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0Zvcm1hdChwYXRoT2JqZWN0KSA6IHBvc2l4Rm9ybWF0KHBhdGhPYmplY3QpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTLFVBQVUsV0FBVyxRQUFRLG9CQUFvQjtBQUMxRCxTQUFTLFVBQVUsYUFBYSxRQUFRLHNCQUFzQjtBQUc5RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sVUFBK0I7RUFDcEQsT0FBTyxZQUFZLGNBQWMsY0FBYyxZQUFZO0FBQzdEIn0=
+// denoCacheMetadata=9621334086137080607,9623553648236149046 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a16be1205c7305277e3dc0bc58e8ae9fbc68100d59b874588c142e26e7ae057a.js b/vendor/gen/https/jsr.io/a16be1205c7305277e3dc0bc58e8ae9fbc68100d59b874588c142e26e7ae057a.js
new file mode 100644
index 0000000..3b533df
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a16be1205c7305277e3dc0bc58e8ae9fbc68100d59b874588c142e26e7ae057a.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { resolve as posixResolve } from "./posix/resolve.ts";
+import { resolve as windowsResolve } from "./windows/resolve.ts";
+/**
+ * Resolves path segments into a path.
+ *
+ * @example Usage
+ * ```ts
+ * import { resolve } from "@std/path/resolve";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(resolve("C:\\foo", "bar", "baz"), "C:\\foo\\bar\\baz");
+ * assertEquals(resolve("C:\\foo", "C:\\bar", "baz"), "C:\\bar\\baz");
+ * } else {
+ * assertEquals(resolve("/foo", "bar", "baz"), "/foo/bar/baz");
+ * assertEquals(resolve("/foo", "/bar", "baz"), "/bar/baz");
+ * }
+ * ```
+ *
+ * @param pathSegments Path segments to process to path.
+ * @returns The resolved path.
+ */ export function resolve(...pathSegments) {
+ return isWindows ? windowsResolve(...pathSegments) : posixResolve(...pathSegments);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9yZXNvbHZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSBhcyBwb3NpeFJlc29sdmUgfSBmcm9tIFwiLi9wb3NpeC9yZXNvbHZlLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlIGFzIHdpbmRvd3NSZXNvbHZlIH0gZnJvbSBcIi4vd2luZG93cy9yZXNvbHZlLnRzXCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgcGF0aCBzZWdtZW50cyBpbnRvIGEgcGF0aC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Jlc29sdmVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMocmVzb2x2ZShcIkM6XFxcXGZvb1wiLCBcImJhclwiLCBcImJhelwiKSwgXCJDOlxcXFxmb29cXFxcYmFyXFxcXGJhelwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHJlc29sdmUoXCJDOlxcXFxmb29cIiwgXCJDOlxcXFxiYXJcIiwgXCJiYXpcIiksIFwiQzpcXFxcYmFyXFxcXGJhelwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhyZXNvbHZlKFwiL2Zvb1wiLCBcImJhclwiLCBcImJhelwiKSwgXCIvZm9vL2Jhci9iYXpcIik7XG4gKiAgIGFzc2VydEVxdWFscyhyZXNvbHZlKFwiL2Zvb1wiLCBcIi9iYXJcIiwgXCJiYXpcIiksIFwiL2Jhci9iYXpcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIFBhdGggc2VnbWVudHMgdG8gcHJvY2VzcyB0byBwYXRoLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzXG4gICAgPyB3aW5kb3dzUmVzb2x2ZSguLi5wYXRoU2VnbWVudHMpXG4gICAgOiBwb3NpeFJlc29sdmUoLi4ucGF0aFNlZ21lbnRzKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxXQUFXLFlBQVksUUFBUSxxQkFBcUI7QUFDN0QsU0FBUyxXQUFXLGNBQWMsUUFBUSx1QkFBdUI7QUFFakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFHLFlBQXNCO0VBQy9DLE9BQU8sWUFDSCxrQkFBa0IsZ0JBQ2xCLGdCQUFnQjtBQUN0QiJ9
+// denoCacheMetadata=4254090534752271865,4742310458575240755 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a1b7b3e77d09f84a8a399462a64ad12165676a13d7efacf78dfa068c0ad92ec4.js b/vendor/gen/https/jsr.io/a1b7b3e77d09f84a8a399462a64ad12165676a13d7efacf78dfa068c0ad92ec4.js
new file mode 100644
index 0000000..fc4fa8d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a1b7b3e77d09f84a8a399462a64ad12165676a13d7efacf78dfa068c0ad92ec4.js
@@ -0,0 +1,692 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { deepMerge } from "jsr:@std/collections@^1.1.0/deep-merge";
+export class Scanner {
+ #whitespace = /[ \t]/;
+ #position = 0;
+ #source;
+ constructor(source){
+ this.#source = source;
+ }
+ get position() {
+ return this.#position;
+ }
+ get source() {
+ return this.#source;
+ }
+ /**
+ * Get current character
+ * @param index - relative index from current position
+ */ char(index = 0) {
+ return this.#source[this.#position + index] ?? "";
+ }
+ /**
+ * Get sliced string
+ * @param start - start position relative from current position
+ * @param end - end position relative from current position
+ */ slice(start, end) {
+ return this.#source.slice(this.#position + start, this.#position + end);
+ }
+ /**
+ * Move position to next
+ */ next(count = 1) {
+ this.#position += count;
+ }
+ skipWhitespaces() {
+ while(this.#whitespace.test(this.char()) && !this.eof()){
+ this.next();
+ }
+ // Invalid if current char is other kinds of whitespace
+ if (!this.isCurrentCharEOL() && /\s/.test(this.char())) {
+ const escaped = "\\u" + this.char().charCodeAt(0).toString(16);
+ const position = this.#position;
+ throw new SyntaxError(`Cannot parse the TOML: It contains invalid whitespace at position '${position}': \`${escaped}\``);
+ }
+ }
+ nextUntilChar(options = {
+ skipComments: true
+ }) {
+ while(!this.eof()){
+ const char = this.char();
+ if (this.#whitespace.test(char) || this.isCurrentCharEOL()) {
+ this.next();
+ } else if (options.skipComments && this.char() === "#") {
+ // entering comment
+ while(!this.isCurrentCharEOL() && !this.eof()){
+ this.next();
+ }
+ } else {
+ break;
+ }
+ }
+ }
+ /**
+ * Position reached EOF or not
+ */ eof() {
+ return this.#position >= this.#source.length;
+ }
+ isCurrentCharEOL() {
+ return this.char() === "\n" || this.startsWith("\r\n");
+ }
+ startsWith(searchString) {
+ return this.#source.startsWith(searchString, this.#position);
+ }
+ match(regExp) {
+ if (!regExp.sticky) {
+ throw new Error(`RegExp ${regExp} does not have a sticky 'y' flag`);
+ }
+ regExp.lastIndex = this.#position;
+ return this.#source.match(regExp);
+ }
+}
+// -----------------------
+// Utilities
+// -----------------------
+function success(body) {
+ return {
+ ok: true,
+ body
+ };
+}
+function failure() {
+ return {
+ ok: false
+ };
+}
+/**
+ * Creates a nested object from the keys and values.
+ *
+ * e.g. `unflat(["a", "b", "c"], 1)` returns `{ a: { b: { c: 1 } } }`
+ */ export function unflat(keys, values = {}) {
+ return keys.reduceRight((acc, key)=>({
+ [key]: acc
+ }), values);
+}
+export function deepAssignWithTable(target, table) {
+ if (table.key.length === 0 || table.key[0] == null) {
+ throw new Error("Cannot parse the TOML: key length is not a positive number");
+ }
+ const value = target[table.key[0]];
+ if (typeof value === "undefined") {
+ Object.assign(target, unflat(table.key, table.type === "Table" ? table.value : [
+ table.value
+ ]));
+ } else if (Array.isArray(value)) {
+ if (table.type === "TableArray" && table.key.length === 1) {
+ value.push(table.value);
+ } else {
+ const last = value[value.length - 1];
+ deepAssignWithTable(last, {
+ type: table.type,
+ key: table.key.slice(1),
+ value: table.value
+ });
+ }
+ } else if (typeof value === "object" && value !== null) {
+ deepAssignWithTable(value, {
+ type: table.type,
+ key: table.key.slice(1),
+ value: table.value
+ });
+ } else {
+ throw new Error("Unexpected assign");
+ }
+}
+// ---------------------------------
+// Parser combinators and generators
+// ---------------------------------
+// deno-lint-ignore no-explicit-any
+function or(parsers) {
+ return (scanner)=>{
+ for (const parse of parsers){
+ const result = parse(scanner);
+ if (result.ok) return result;
+ }
+ return failure();
+ };
+}
+/** Join the parse results of the given parser into an array.
+ *
+ * If the parser fails at the first attempt, it will return an empty array.
+ */ function join(parser, separator) {
+ const Separator = character(separator);
+ return (scanner)=>{
+ const out = [];
+ const first = parser(scanner);
+ if (!first.ok) return success(out);
+ out.push(first.body);
+ while(!scanner.eof()){
+ if (!Separator(scanner).ok) break;
+ const result = parser(scanner);
+ if (!result.ok) {
+ throw new SyntaxError(`Invalid token after "${separator}"`);
+ }
+ out.push(result.body);
+ }
+ return success(out);
+ };
+}
+/** Join the parse results of the given parser into an array.
+ *
+ * This requires the parser to succeed at least once.
+ */ function join1(parser, separator) {
+ const Separator = character(separator);
+ return (scanner)=>{
+ const first = parser(scanner);
+ if (!first.ok) return failure();
+ const out = [
+ first.body
+ ];
+ while(!scanner.eof()){
+ if (!Separator(scanner).ok) break;
+ const result = parser(scanner);
+ if (!result.ok) {
+ throw new SyntaxError(`Invalid token after "${separator}"`);
+ }
+ out.push(result.body);
+ }
+ return success(out);
+ };
+}
+function kv(keyParser, separator, valueParser) {
+ const Separator = character(separator);
+ return (scanner)=>{
+ const position = scanner.position;
+ const key = keyParser(scanner);
+ if (!key.ok) return failure();
+ const sep = Separator(scanner);
+ if (!sep.ok) {
+ throw new SyntaxError(`key/value pair doesn't have "${separator}"`);
+ }
+ const value = valueParser(scanner);
+ if (!value.ok) {
+ const lineEndIndex = scanner.source.indexOf("\n", scanner.position);
+ const endPosition = lineEndIndex > 0 ? lineEndIndex : scanner.source.length;
+ const line = scanner.source.slice(position, endPosition);
+ throw new SyntaxError(`Cannot parse value on line '${line}'`);
+ }
+ return success(unflat(key.body, value.body));
+ };
+}
+function merge(parser) {
+ return (scanner)=>{
+ const result = parser(scanner);
+ if (!result.ok) return failure();
+ let body = {};
+ for (const record of result.body){
+ if (typeof record === "object" && record !== null) {
+ body = deepMerge(body, record);
+ }
+ }
+ return success(body);
+ };
+}
+function repeat(parser) {
+ return (scanner)=>{
+ const body = [];
+ while(!scanner.eof()){
+ const result = parser(scanner);
+ if (!result.ok) break;
+ body.push(result.body);
+ scanner.nextUntilChar();
+ }
+ if (body.length === 0) return failure();
+ return success(body);
+ };
+}
+function surround(left, parser, right) {
+ const Left = character(left);
+ const Right = character(right);
+ return (scanner)=>{
+ if (!Left(scanner).ok) {
+ return failure();
+ }
+ const result = parser(scanner);
+ if (!result.ok) {
+ throw new SyntaxError(`Invalid token after "${left}"`);
+ }
+ if (!Right(scanner).ok) {
+ throw new SyntaxError(`Not closed by "${right}" after started with "${left}"`);
+ }
+ return success(result.body);
+ };
+}
+function character(str) {
+ return (scanner)=>{
+ scanner.skipWhitespaces();
+ if (!scanner.startsWith(str)) return failure();
+ scanner.next(str.length);
+ scanner.skipWhitespaces();
+ return success(undefined);
+ };
+}
+// -----------------------
+// Parser components
+// -----------------------
+const BARE_KEY_REGEXP = /[A-Za-z0-9_-]+/y;
+export function bareKey(scanner) {
+ scanner.skipWhitespaces();
+ const key = scanner.match(BARE_KEY_REGEXP)?.[0];
+ if (!key) return failure();
+ scanner.next(key.length);
+ return success(key);
+}
+function escapeSequence(scanner) {
+ if (scanner.char() !== "\\") return failure();
+ scanner.next();
+ // See https://toml.io/en/v1.0.0-rc.3#string
+ switch(scanner.char()){
+ case "b":
+ scanner.next();
+ return success("\b");
+ case "t":
+ scanner.next();
+ return success("\t");
+ case "n":
+ scanner.next();
+ return success("\n");
+ case "f":
+ scanner.next();
+ return success("\f");
+ case "r":
+ scanner.next();
+ return success("\r");
+ case "u":
+ case "U":
+ {
+ // Unicode character
+ const codePointLen = scanner.char() === "u" ? 4 : 6;
+ const codePoint = parseInt("0x" + scanner.slice(1, 1 + codePointLen), 16);
+ const str = String.fromCodePoint(codePoint);
+ scanner.next(codePointLen + 1);
+ return success(str);
+ }
+ case '"':
+ scanner.next();
+ return success('"');
+ case "\\":
+ scanner.next();
+ return success("\\");
+ default:
+ throw new SyntaxError(`Invalid escape sequence: \\${scanner.char()}`);
+ }
+}
+export function basicString(scanner) {
+ scanner.skipWhitespaces();
+ if (scanner.char() !== '"') return failure();
+ scanner.next();
+ const acc = [];
+ while(scanner.char() !== '"' && !scanner.eof()){
+ if (scanner.char() === "\n") {
+ throw new SyntaxError("Single-line string cannot contain EOL");
+ }
+ const escapedChar = escapeSequence(scanner);
+ if (escapedChar.ok) {
+ acc.push(escapedChar.body);
+ } else {
+ acc.push(scanner.char());
+ scanner.next();
+ }
+ }
+ if (scanner.eof()) {
+ throw new SyntaxError(`Single-line string is not closed:\n${acc.join("")}`);
+ }
+ scanner.next(); // skip last '""
+ return success(acc.join(""));
+}
+export function literalString(scanner) {
+ scanner.skipWhitespaces();
+ if (scanner.char() !== "'") return failure();
+ scanner.next();
+ const acc = [];
+ while(scanner.char() !== "'" && !scanner.eof()){
+ if (scanner.char() === "\n") {
+ throw new SyntaxError("Single-line string cannot contain EOL");
+ }
+ acc.push(scanner.char());
+ scanner.next();
+ }
+ if (scanner.eof()) {
+ throw new SyntaxError(`Single-line string is not closed:\n${acc.join("")}`);
+ }
+ scanner.next(); // skip last "'"
+ return success(acc.join(""));
+}
+export function multilineBasicString(scanner) {
+ scanner.skipWhitespaces();
+ if (!scanner.startsWith('"""')) return failure();
+ scanner.next(3);
+ if (scanner.char() === "\n") {
+ // The first newline (LF) is trimmed
+ scanner.next();
+ } else if (scanner.startsWith("\r\n")) {
+ // The first newline (CRLF) is trimmed
+ scanner.next(2);
+ }
+ const acc = [];
+ while(!scanner.startsWith('"""') && !scanner.eof()){
+ // line ending backslash
+ if (scanner.startsWith("\\\n")) {
+ scanner.next();
+ scanner.nextUntilChar({
+ skipComments: false
+ });
+ continue;
+ } else if (scanner.startsWith("\\\r\n")) {
+ scanner.next();
+ scanner.nextUntilChar({
+ skipComments: false
+ });
+ continue;
+ }
+ const escapedChar = escapeSequence(scanner);
+ if (escapedChar.ok) {
+ acc.push(escapedChar.body);
+ } else {
+ acc.push(scanner.char());
+ scanner.next();
+ }
+ }
+ if (scanner.eof()) {
+ throw new SyntaxError(`Multi-line string is not closed:\n${acc.join("")}`);
+ }
+ // if ends with 4 `"`, push the fist `"` to string
+ if (scanner.char(3) === '"') {
+ acc.push('"');
+ scanner.next();
+ }
+ scanner.next(3); // skip last '""""
+ return success(acc.join(""));
+}
+export function multilineLiteralString(scanner) {
+ scanner.skipWhitespaces();
+ if (!scanner.startsWith("'''")) return failure();
+ scanner.next(3);
+ if (scanner.char() === "\n") {
+ // The first newline (LF) is trimmed
+ scanner.next();
+ } else if (scanner.startsWith("\r\n")) {
+ // The first newline (CRLF) is trimmed
+ scanner.next(2);
+ }
+ const acc = [];
+ while(!scanner.startsWith("'''") && !scanner.eof()){
+ acc.push(scanner.char());
+ scanner.next();
+ }
+ if (scanner.eof()) {
+ throw new SyntaxError(`Multi-line string is not closed:\n${acc.join("")}`);
+ }
+ // if ends with 4 `'`, push the fist `'` to string
+ if (scanner.char(3) === "'") {
+ acc.push("'");
+ scanner.next();
+ }
+ scanner.next(3); // skip last "'''"
+ return success(acc.join(""));
+}
+const BOOLEAN_REGEXP = /(?:true|false)\b/y;
+export function boolean(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(BOOLEAN_REGEXP);
+ if (!match) return failure();
+ const string = match[0];
+ scanner.next(string.length);
+ const value = string === "true";
+ return success(value);
+}
+const INFINITY_MAP = new Map([
+ [
+ "inf",
+ Infinity
+ ],
+ [
+ "+inf",
+ Infinity
+ ],
+ [
+ "-inf",
+ -Infinity
+ ]
+]);
+const INFINITY_REGEXP = /[+-]?inf\b/y;
+export function infinity(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(INFINITY_REGEXP);
+ if (!match) return failure();
+ const string = match[0];
+ scanner.next(string.length);
+ const value = INFINITY_MAP.get(string);
+ return success(value);
+}
+const NAN_REGEXP = /[+-]?nan\b/y;
+export function nan(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(NAN_REGEXP);
+ if (!match) return failure();
+ const string = match[0];
+ scanner.next(string.length);
+ const value = NaN;
+ return success(value);
+}
+export const dottedKey = join1(or([
+ bareKey,
+ basicString,
+ literalString
+]), ".");
+const BINARY_REGEXP = /0b[01]+(?:_[01]+)*\b/y;
+export function binary(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(BINARY_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ const value = match.slice(2).replaceAll("_", "");
+ const number = parseInt(value, 2);
+ return isNaN(number) ? failure() : success(number);
+}
+const OCTAL_REGEXP = /0o[0-7]+(?:_[0-7]+)*\b/y;
+export function octal(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(OCTAL_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ const value = match.slice(2).replaceAll("_", "");
+ const number = parseInt(value, 8);
+ return isNaN(number) ? failure() : success(number);
+}
+const HEX_REGEXP = /0x[0-9a-f]+(?:_[0-9a-f]+)*\b/yi;
+export function hex(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(HEX_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ const value = match.slice(2).replaceAll("_", "");
+ const number = parseInt(value, 16);
+ return isNaN(number) ? failure() : success(number);
+}
+const INTEGER_REGEXP = /[+-]?[0-9]+(?:_[0-9]+)*\b/y;
+export function integer(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(INTEGER_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ const value = match.replaceAll("_", "");
+ const int = parseInt(value, 10);
+ return success(int);
+}
+const FLOAT_REGEXP = /[+-]?[0-9]+(?:_[0-9]+)*(?:\.[0-9]+(?:_[0-9]+)*)?(?:e[+-]?[0-9]+(?:_[0-9]+)*)?\b/yi;
+export function float(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(FLOAT_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ const value = match.replaceAll("_", "");
+ const float = parseFloat(value);
+ if (isNaN(float)) return failure();
+ return success(float);
+}
+const DATE_TIME_REGEXP = /\d{4}-\d{2}-\d{2}(?:[ 0-9TZ.:+-]+)?\b/y;
+export function dateTime(scanner) {
+ scanner.skipWhitespaces();
+ // example: 1979-05-27
+ const match = scanner.match(DATE_TIME_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ const date = new Date(match.trim());
+ // invalid date
+ if (isNaN(date.getTime())) {
+ throw new SyntaxError(`Invalid date string "${match}"`);
+ }
+ return success(date);
+}
+const LOCAL_TIME_REGEXP = /(\d{2}):(\d{2}):(\d{2})(?:\.[0-9]+)?\b/y;
+export function localTime(scanner) {
+ scanner.skipWhitespaces();
+ const match = scanner.match(LOCAL_TIME_REGEXP)?.[0];
+ if (!match) return failure();
+ scanner.next(match.length);
+ return success(match);
+}
+export function arrayValue(scanner) {
+ scanner.skipWhitespaces();
+ if (scanner.char() !== "[") return failure();
+ scanner.next();
+ const array = [];
+ while(!scanner.eof()){
+ scanner.nextUntilChar();
+ const result = value(scanner);
+ if (!result.ok) break;
+ array.push(result.body);
+ scanner.skipWhitespaces();
+ // may have a next item, but trailing comma is allowed at array
+ if (scanner.char() !== ",") break;
+ scanner.next();
+ }
+ scanner.nextUntilChar();
+ if (scanner.char() !== "]") throw new SyntaxError("Array is not closed");
+ scanner.next();
+ return success(array);
+}
+export function inlineTable(scanner) {
+ scanner.nextUntilChar();
+ if (scanner.char(1) === "}") {
+ scanner.next(2);
+ return success({});
+ }
+ const pairs = surround("{", join(pair, ","), "}")(scanner);
+ if (!pairs.ok) return failure();
+ let table = {};
+ for (const pair of pairs.body){
+ table = deepMerge(table, pair);
+ }
+ return success(table);
+}
+export const value = or([
+ multilineBasicString,
+ multilineLiteralString,
+ basicString,
+ literalString,
+ boolean,
+ infinity,
+ nan,
+ dateTime,
+ localTime,
+ binary,
+ octal,
+ hex,
+ float,
+ integer,
+ arrayValue,
+ inlineTable
+]);
+export const pair = kv(dottedKey, "=", value);
+export function block(scanner) {
+ scanner.nextUntilChar();
+ const result = merge(repeat(pair))(scanner);
+ if (result.ok) return success({
+ type: "Block",
+ value: result.body
+ });
+ return failure();
+}
+export const tableHeader = surround("[", dottedKey, "]");
+export function table(scanner) {
+ scanner.nextUntilChar();
+ const header = tableHeader(scanner);
+ if (!header.ok) return failure();
+ scanner.nextUntilChar();
+ const b = block(scanner);
+ return success({
+ type: "Table",
+ key: header.body,
+ value: b.ok ? b.body.value : {}
+ });
+}
+export const tableArrayHeader = surround("[[", dottedKey, "]]");
+export function tableArray(scanner) {
+ scanner.nextUntilChar();
+ const header = tableArrayHeader(scanner);
+ if (!header.ok) return failure();
+ scanner.nextUntilChar();
+ const b = block(scanner);
+ return success({
+ type: "TableArray",
+ key: header.body,
+ value: b.ok ? b.body.value : {}
+ });
+}
+export function toml(scanner) {
+ const blocks = repeat(or([
+ block,
+ tableArray,
+ table
+ ]))(scanner);
+ let body = {};
+ if (!blocks.ok) return success(body);
+ for (const block of blocks.body){
+ switch(block.type){
+ case "Block":
+ {
+ body = deepMerge(body, block.value);
+ break;
+ }
+ case "Table":
+ {
+ deepAssignWithTable(body, block);
+ break;
+ }
+ case "TableArray":
+ {
+ deepAssignWithTable(body, block);
+ break;
+ }
+ }
+ }
+ return success(body);
+}
+function createParseErrorMessage(scanner, message) {
+ const string = scanner.source.slice(0, scanner.position);
+ const lines = string.split("\n");
+ const row = lines.length;
+ const column = lines.at(-1)?.length ?? 0;
+ return `Parse error on line ${row}, column ${column}: ${message}`;
+}
+export function parserFactory(parser) {
+ return (tomlString)=>{
+ const scanner = new Scanner(tomlString);
+ try {
+ const result = parser(scanner);
+ if (result.ok && scanner.eof()) return result.body;
+ const message = `Unexpected character: "${scanner.char()}"`;
+ throw new SyntaxError(createParseErrorMessage(scanner, message));
+ } catch (error) {
+ if (error instanceof Error) {
+ throw new SyntaxError(createParseErrorMessage(scanner, error.message));
+ }
+ const message = "Invalid error type caught";
+ throw new SyntaxError(createParseErrorMessage(scanner, message));
+ }
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvdG9tbC8xLjAuNi9fcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJqc3I6QHN0ZC9jb2xsZWN0aW9uc0BeMS4xLjAvZGVlcC1tZXJnZVwiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEludGVyZmFjZXMgYW5kIGJhc2UgY2xhc3Nlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBTdWNjZXNzPFQ+IHtcbiAgb2s6IHRydWU7XG4gIGJvZHk6IFQ7XG59XG5pbnRlcmZhY2UgRmFpbHVyZSB7XG4gIG9rOiBmYWxzZTtcbn1cbnR5cGUgUGFyc2VSZXN1bHQ8VD4gPSBTdWNjZXNzPFQ+IHwgRmFpbHVyZTtcblxudHlwZSBQYXJzZXJDb21wb25lbnQ8VCA9IHVua25vd24+ID0gKHNjYW5uZXI6IFNjYW5uZXIpID0+IFBhcnNlUmVzdWx0PFQ+O1xuXG50eXBlIEJsb2NrUGFyc2VSZXN1bHRCb2R5ID0ge1xuICB0eXBlOiBcIkJsb2NrXCI7XG4gIHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0gfCB7XG4gIHR5cGU6IFwiVGFibGVcIjtcbiAga2V5OiBzdHJpbmdbXTtcbiAgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSB8IHtcbiAgdHlwZTogXCJUYWJsZUFycmF5XCI7XG4gIGtleTogc3RyaW5nW107XG4gIHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTY2FubmVyIHtcbiAgI3doaXRlc3BhY2UgPSAvWyBcXHRdLztcbiAgI3Bvc2l0aW9uID0gMDtcbiAgI3NvdXJjZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jc291cmNlID0gc291cmNlO1xuICB9XG5cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbjtcbiAgfVxuICBnZXQgc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLiNzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSBpbmRleCAtIHJlbGF0aXZlIGluZGV4IGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgKi9cbiAgY2hhcihpbmRleCA9IDApIHtcbiAgICByZXR1cm4gdGhpcy4jc291cmNlW3RoaXMuI3Bvc2l0aW9uICsgaW5kZXhdID8/IFwiXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNsaWNlZCBzdHJpbmdcbiAgICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgcG9zaXRpb24gcmVsYXRpdmUgZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAqIEBwYXJhbSBlbmQgLSBlbmQgcG9zaXRpb24gcmVsYXRpdmUgZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAqL1xuICBzbGljZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI3NvdXJjZS5zbGljZSh0aGlzLiNwb3NpdGlvbiArIHN0YXJ0LCB0aGlzLiNwb3NpdGlvbiArIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBwb3NpdGlvbiB0byBuZXh0XG4gICAqL1xuICBuZXh0KGNvdW50OiBudW1iZXIgPSAxKSB7XG4gICAgdGhpcy4jcG9zaXRpb24gKz0gY291bnQ7XG4gIH1cblxuICBza2lwV2hpdGVzcGFjZXMoKSB7XG4gICAgd2hpbGUgKHRoaXMuI3doaXRlc3BhY2UudGVzdCh0aGlzLmNoYXIoKSkgJiYgIXRoaXMuZW9mKCkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgICAvLyBJbnZhbGlkIGlmIGN1cnJlbnQgY2hhciBpcyBvdGhlciBraW5kcyBvZiB3aGl0ZXNwYWNlXG4gICAgaWYgKCF0aGlzLmlzQ3VycmVudENoYXJFT0woKSAmJiAvXFxzLy50ZXN0KHRoaXMuY2hhcigpKSkge1xuICAgICAgY29uc3QgZXNjYXBlZCA9IFwiXFxcXHVcIiArIHRoaXMuY2hhcigpLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLiNwb3NpdGlvbjtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgYENhbm5vdCBwYXJzZSB0aGUgVE9NTDogSXQgY29udGFpbnMgaW52YWxpZCB3aGl0ZXNwYWNlIGF0IHBvc2l0aW9uICcke3Bvc2l0aW9ufSc6IFxcYCR7ZXNjYXBlZH1cXGBgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZXh0VW50aWxDaGFyKG9wdGlvbnM6IHsgc2tpcENvbW1lbnRzPzogYm9vbGVhbiB9ID0geyBza2lwQ29tbWVudHM6IHRydWUgfSkge1xuICAgIHdoaWxlICghdGhpcy5lb2YoKSkge1xuICAgICAgY29uc3QgY2hhciA9IHRoaXMuY2hhcigpO1xuICAgICAgaWYgKHRoaXMuI3doaXRlc3BhY2UudGVzdChjaGFyKSB8fCB0aGlzLmlzQ3VycmVudENoYXJFT0woKSkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5za2lwQ29tbWVudHMgJiYgdGhpcy5jaGFyKCkgPT09IFwiI1wiKSB7XG4gICAgICAgIC8vIGVudGVyaW5nIGNvbW1lbnRcbiAgICAgICAgd2hpbGUgKCF0aGlzLmlzQ3VycmVudENoYXJFT0woKSAmJiAhdGhpcy5lb2YoKSkge1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb24gcmVhY2hlZCBFT0Ygb3Igbm90XG4gICAqL1xuICBlb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uID49IHRoaXMuI3NvdXJjZS5sZW5ndGg7XG4gIH1cblxuICBpc0N1cnJlbnRDaGFyRU9MKCkge1xuICAgIHJldHVybiB0aGlzLmNoYXIoKSA9PT0gXCJcXG5cIiB8fCB0aGlzLnN0YXJ0c1dpdGgoXCJcXHJcXG5cIik7XG4gIH1cblxuICBzdGFydHNXaXRoKHNlYXJjaFN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuI3NvdXJjZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZywgdGhpcy4jcG9zaXRpb24pO1xuICB9XG5cbiAgbWF0Y2gocmVnRXhwOiBSZWdFeHApIHtcbiAgICBpZiAoIXJlZ0V4cC5zdGlja3kpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVnRXhwICR7cmVnRXhwfSBkb2VzIG5vdCBoYXZlIGEgc3RpY2t5ICd5JyBmbGFnYCk7XG4gICAgfVxuICAgIHJlZ0V4cC5sYXN0SW5kZXggPSB0aGlzLiNwb3NpdGlvbjtcbiAgICByZXR1cm4gdGhpcy4jc291cmNlLm1hdGNoKHJlZ0V4cCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFV0aWxpdGllc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gc3VjY2VzczxUPihib2R5OiBUKTogU3VjY2VzczxUPiB7XG4gIHJldHVybiB7IG9rOiB0cnVlLCBib2R5IH07XG59XG5mdW5jdGlvbiBmYWlsdXJlKCk6IEZhaWx1cmUge1xuICByZXR1cm4geyBvazogZmFsc2UgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmVzdGVkIG9iamVjdCBmcm9tIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gKlxuICogZS5nLiBgdW5mbGF0KFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgMSlgIHJldHVybnMgYHsgYTogeyBiOiB7IGM6IDEgfSB9IH1gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmZsYXQoXG4gIGtleXM6IHN0cmluZ1tdLFxuICB2YWx1ZXM6IHVua25vd24gPSB7fSxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIGtleXMucmVkdWNlUmlnaHQoXG4gICAgKGFjYywga2V5KSA9PiAoeyBba2V5XTogYWNjIH0pLFxuICAgIHZhbHVlcyxcbiAgKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ25XaXRoVGFibGUodGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdGFibGU6IHtcbiAgdHlwZTogXCJUYWJsZVwiIHwgXCJUYWJsZUFycmF5XCI7XG4gIGtleTogc3RyaW5nW107XG4gIHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0pIHtcbiAgaWYgKHRhYmxlLmtleS5sZW5ndGggPT09IDAgfHwgdGFibGUua2V5WzBdID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkNhbm5vdCBwYXJzZSB0aGUgVE9NTDoga2V5IGxlbmd0aCBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXJcIixcbiAgICApO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3RhYmxlLmtleVswXV07XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICB0YXJnZXQsXG4gICAgICB1bmZsYXQoXG4gICAgICAgIHRhYmxlLmtleSxcbiAgICAgICAgdGFibGUudHlwZSA9PT0gXCJUYWJsZVwiID8gdGFibGUudmFsdWUgOiBbdGFibGUudmFsdWVdLFxuICAgICAgKSxcbiAgICApO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKHRhYmxlLnR5cGUgPT09IFwiVGFibGVBcnJheVwiICYmIHRhYmxlLmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhbHVlLnB1c2godGFibGUudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0ID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICBkZWVwQXNzaWduV2l0aFRhYmxlKGxhc3QsIHtcbiAgICAgICAgdHlwZTogdGFibGUudHlwZSxcbiAgICAgICAga2V5OiB0YWJsZS5rZXkuc2xpY2UoMSksXG4gICAgICAgIHZhbHVlOiB0YWJsZS52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICBkZWVwQXNzaWduV2l0aFRhYmxlKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB7XG4gICAgICB0eXBlOiB0YWJsZS50eXBlLFxuICAgICAga2V5OiB0YWJsZS5rZXkuc2xpY2UoMSksXG4gICAgICB2YWx1ZTogdGFibGUudmFsdWUsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBhc3NpZ25cIik7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZXIgY29tYmluYXRvcnMgYW5kIGdlbmVyYXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gb3I8VCBleHRlbmRzIHJlYWRvbmx5IFBhcnNlckNvbXBvbmVudDxhbnk+W10+KFxuICBwYXJzZXJzOiBULFxuKTogUGFyc2VyQ29tcG9uZW50PFxuICBSZXR1cm5UeXBlPFRbbnVtYmVyXT4gZXh0ZW5kcyBQYXJzZVJlc3VsdDxpbmZlciBSPiA/IFIgOiBGYWlsdXJlXG4+IHtcbiAgcmV0dXJuIChzY2FubmVyOiBTY2FubmVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBwYXJzZSBvZiBwYXJzZXJzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwYXJzZShzY2FubmVyKTtcbiAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBmYWlsdXJlKCk7XG4gIH07XG59XG5cbi8qKiBKb2luIHRoZSBwYXJzZSByZXN1bHRzIG9mIHRoZSBnaXZlbiBwYXJzZXIgaW50byBhbiBhcnJheS5cbiAqXG4gKiBJZiB0aGUgcGFyc2VyIGZhaWxzIGF0IHRoZSBmaXJzdCBhdHRlbXB0LCBpdCB3aWxsIHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gam9pbjxUPihcbiAgcGFyc2VyOiBQYXJzZXJDb21wb25lbnQ8VD4sXG4gIHNlcGFyYXRvcjogc3RyaW5nLFxuKTogUGFyc2VyQ29tcG9uZW50PFRbXT4ge1xuICBjb25zdCBTZXBhcmF0b3IgPSBjaGFyYWN0ZXIoc2VwYXJhdG9yKTtcbiAgcmV0dXJuIChzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8VFtdPiA9PiB7XG4gICAgY29uc3Qgb3V0OiBUW10gPSBbXTtcbiAgICBjb25zdCBmaXJzdCA9IHBhcnNlcihzY2FubmVyKTtcbiAgICBpZiAoIWZpcnN0Lm9rKSByZXR1cm4gc3VjY2VzcyhvdXQpO1xuICAgIG91dC5wdXNoKGZpcnN0LmJvZHkpO1xuICAgIHdoaWxlICghc2Nhbm5lci5lb2YoKSkge1xuICAgICAgaWYgKCFTZXBhcmF0b3Ioc2Nhbm5lcikub2spIGJyZWFrO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyKHNjYW5uZXIpO1xuICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIHRva2VuIGFmdGVyIFwiJHtzZXBhcmF0b3J9XCJgKTtcbiAgICAgIH1cbiAgICAgIG91dC5wdXNoKHJlc3VsdC5ib2R5KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3Mob3V0KTtcbiAgfTtcbn1cblxuLyoqIEpvaW4gdGhlIHBhcnNlIHJlc3VsdHMgb2YgdGhlIGdpdmVuIHBhcnNlciBpbnRvIGFuIGFycmF5LlxuICpcbiAqIFRoaXMgcmVxdWlyZXMgdGhlIHBhcnNlciB0byBzdWNjZWVkIGF0IGxlYXN0IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIGpvaW4xPFQ+KFxuICBwYXJzZXI6IFBhcnNlckNvbXBvbmVudDxUPixcbiAgc2VwYXJhdG9yOiBzdHJpbmcsXG4pOiBQYXJzZXJDb21wb25lbnQ8VFtdPiB7XG4gIGNvbnN0IFNlcGFyYXRvciA9IGNoYXJhY3RlcihzZXBhcmF0b3IpO1xuICByZXR1cm4gKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxUW10+ID0+IHtcbiAgICBjb25zdCBmaXJzdCA9IHBhcnNlcihzY2FubmVyKTtcbiAgICBpZiAoIWZpcnN0Lm9rKSByZXR1cm4gZmFpbHVyZSgpO1xuICAgIGNvbnN0IG91dDogVFtdID0gW2ZpcnN0LmJvZHldO1xuICAgIHdoaWxlICghc2Nhbm5lci5lb2YoKSkge1xuICAgICAgaWYgKCFTZXBhcmF0b3Ioc2Nhbm5lcikub2spIGJyZWFrO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyKHNjYW5uZXIpO1xuICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIHRva2VuIGFmdGVyIFwiJHtzZXBhcmF0b3J9XCJgKTtcbiAgICAgIH1cbiAgICAgIG91dC5wdXNoKHJlc3VsdC5ib2R5KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3Mob3V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24ga3Y8VD4oXG4gIGtleVBhcnNlcjogUGFyc2VyQ29tcG9uZW50PHN0cmluZ1tdPixcbiAgc2VwYXJhdG9yOiBzdHJpbmcsXG4gIHZhbHVlUGFyc2VyOiBQYXJzZXJDb21wb25lbnQ8VD4sXG4pOiBQYXJzZXJDb21wb25lbnQ8eyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0+IHtcbiAgY29uc3QgU2VwYXJhdG9yID0gY2hhcmFjdGVyKHNlcGFyYXRvcik7XG4gIHJldHVybiAoc2Nhbm5lcjogU2Nhbm5lcik6IFBhcnNlUmVzdWx0PHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9PiA9PiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBzY2FubmVyLnBvc2l0aW9uO1xuICAgIGNvbnN0IGtleSA9IGtleVBhcnNlcihzY2FubmVyKTtcbiAgICBpZiAoIWtleS5vaykgcmV0dXJuIGZhaWx1cmUoKTtcbiAgICBjb25zdCBzZXAgPSBTZXBhcmF0b3Ioc2Nhbm5lcik7XG4gICAgaWYgKCFzZXAub2spIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihga2V5L3ZhbHVlIHBhaXIgZG9lc24ndCBoYXZlIFwiJHtzZXBhcmF0b3J9XCJgKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZVBhcnNlcihzY2FubmVyKTtcbiAgICBpZiAoIXZhbHVlLm9rKSB7XG4gICAgICBjb25zdCBsaW5lRW5kSW5kZXggPSBzY2FubmVyLnNvdXJjZS5pbmRleE9mKFwiXFxuXCIsIHNjYW5uZXIucG9zaXRpb24pO1xuICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSBsaW5lRW5kSW5kZXggPiAwXG4gICAgICAgID8gbGluZUVuZEluZGV4XG4gICAgICAgIDogc2Nhbm5lci5zb3VyY2UubGVuZ3RoO1xuICAgICAgY29uc3QgbGluZSA9IHNjYW5uZXIuc291cmNlLnNsaWNlKHBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYENhbm5vdCBwYXJzZSB2YWx1ZSBvbiBsaW5lICcke2xpbmV9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2Vzcyh1bmZsYXQoa2V5LmJvZHksIHZhbHVlLmJvZHkpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2UoXG4gIHBhcnNlcjogUGFyc2VyQ29tcG9uZW50PHVua25vd25bXT4sXG4pOiBQYXJzZXJDb21wb25lbnQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgcmV0dXJuIChzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIoc2Nhbm5lcik7XG4gICAgaWYgKCFyZXN1bHQub2spIHJldHVybiBmYWlsdXJlKCk7XG4gICAgbGV0IGJvZHkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZXN1bHQuYm9keSkge1xuICAgICAgaWYgKHR5cGVvZiByZWNvcmQgPT09IFwib2JqZWN0XCIgJiYgcmVjb3JkICE9PSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBkZWVwTWVyZ2UoYm9keSwgcmVjb3JkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3MoYm9keSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGVhdDxUPihcbiAgcGFyc2VyOiBQYXJzZXJDb21wb25lbnQ8VD4sXG4pOiBQYXJzZXJDb21wb25lbnQ8VFtdPiB7XG4gIHJldHVybiAoc2Nhbm5lcjogU2Nhbm5lcikgPT4ge1xuICAgIGNvbnN0IGJvZHk6IFRbXSA9IFtdO1xuICAgIHdoaWxlICghc2Nhbm5lci5lb2YoKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyKHNjYW5uZXIpO1xuICAgICAgaWYgKCFyZXN1bHQub2spIGJyZWFrO1xuICAgICAgYm9keS5wdXNoKHJlc3VsdC5ib2R5KTtcbiAgICAgIHNjYW5uZXIubmV4dFVudGlsQ2hhcigpO1xuICAgIH1cbiAgICBpZiAoYm9keS5sZW5ndGggPT09IDApIHJldHVybiBmYWlsdXJlKCk7XG4gICAgcmV0dXJuIHN1Y2Nlc3MoYm9keSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1cnJvdW5kPFQ+KFxuICBsZWZ0OiBzdHJpbmcsXG4gIHBhcnNlcjogUGFyc2VyQ29tcG9uZW50PFQ+LFxuICByaWdodDogc3RyaW5nLFxuKTogUGFyc2VyQ29tcG9uZW50PFQ+IHtcbiAgY29uc3QgTGVmdCA9IGNoYXJhY3RlcihsZWZ0KTtcbiAgY29uc3QgUmlnaHQgPSBjaGFyYWN0ZXIocmlnaHQpO1xuICByZXR1cm4gKHNjYW5uZXI6IFNjYW5uZXIpID0+IHtcbiAgICBpZiAoIUxlZnQoc2Nhbm5lcikub2spIHtcbiAgICAgIHJldHVybiBmYWlsdXJlKCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcihzY2FubmVyKTtcbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIHRva2VuIGFmdGVyIFwiJHtsZWZ0fVwiYCk7XG4gICAgfVxuICAgIGlmICghUmlnaHQoc2Nhbm5lcikub2spIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgYE5vdCBjbG9zZWQgYnkgXCIke3JpZ2h0fVwiIGFmdGVyIHN0YXJ0ZWQgd2l0aCBcIiR7bGVmdH1cImAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcyhyZXN1bHQuYm9keSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlcihzdHI6IHN0cmluZykge1xuICByZXR1cm4gKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDx2b2lkPiA9PiB7XG4gICAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcbiAgICBpZiAoIXNjYW5uZXIuc3RhcnRzV2l0aChzdHIpKSByZXR1cm4gZmFpbHVyZSgpO1xuICAgIHNjYW5uZXIubmV4dChzdHIubGVuZ3RoKTtcbiAgICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICAgIHJldHVybiBzdWNjZXNzKHVuZGVmaW5lZCk7XG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZXIgY29tcG9uZW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgQkFSRV9LRVlfUkVHRVhQID0gL1tBLVphLXowLTlfLV0rL3k7XG5leHBvcnQgZnVuY3Rpb24gYmFyZUtleShzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8c3RyaW5nPiB7XG4gIHNjYW5uZXIuc2tpcFdoaXRlc3BhY2VzKCk7XG4gIGNvbnN0IGtleSA9IHNjYW5uZXIubWF0Y2goQkFSRV9LRVlfUkVHRVhQKT8uWzBdO1xuICBpZiAoIWtleSkgcmV0dXJuIGZhaWx1cmUoKTtcbiAgc2Nhbm5lci5uZXh0KGtleS5sZW5ndGgpO1xuICByZXR1cm4gc3VjY2VzcyhrZXkpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTZXF1ZW5jZShzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8c3RyaW5nPiB7XG4gIGlmIChzY2FubmVyLmNoYXIoKSAhPT0gXCJcXFxcXCIpIHJldHVybiBmYWlsdXJlKCk7XG4gIHNjYW5uZXIubmV4dCgpO1xuICAvLyBTZWUgaHR0cHM6Ly90b21sLmlvL2VuL3YxLjAuMC1yYy4zI3N0cmluZ1xuICBzd2l0Y2ggKHNjYW5uZXIuY2hhcigpKSB7XG4gICAgY2FzZSBcImJcIjpcbiAgICAgIHNjYW5uZXIubmV4dCgpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MoXCJcXGJcIik7XG4gICAgY2FzZSBcInRcIjpcbiAgICAgIHNjYW5uZXIubmV4dCgpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MoXCJcXHRcIik7XG4gICAgY2FzZSBcIm5cIjpcbiAgICAgIHNjYW5uZXIubmV4dCgpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MoXCJcXG5cIik7XG4gICAgY2FzZSBcImZcIjpcbiAgICAgIHNjYW5uZXIubmV4dCgpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MoXCJcXGZcIik7XG4gICAgY2FzZSBcInJcIjpcbiAgICAgIHNjYW5uZXIubmV4dCgpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MoXCJcXHJcIik7XG4gICAgY2FzZSBcInVcIjpcbiAgICBjYXNlIFwiVVwiOiB7XG4gICAgICAvLyBVbmljb2RlIGNoYXJhY3RlclxuICAgICAgY29uc3QgY29kZVBvaW50TGVuID0gc2Nhbm5lci5jaGFyKCkgPT09IFwidVwiID8gNCA6IDY7XG4gICAgICBjb25zdCBjb2RlUG9pbnQgPSBwYXJzZUludChcIjB4XCIgKyBzY2FubmVyLnNsaWNlKDEsIDEgKyBjb2RlUG9pbnRMZW4pLCAxNik7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgc2Nhbm5lci5uZXh0KGNvZGVQb2ludExlbiArIDEpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3Moc3RyKTtcbiAgICB9XG4gICAgY2FzZSAnXCInOlxuICAgICAgc2Nhbm5lci5uZXh0KCk7XG4gICAgICByZXR1cm4gc3VjY2VzcygnXCInKTtcbiAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgc2Nhbm5lci5uZXh0KCk7XG4gICAgICByZXR1cm4gc3VjY2VzcyhcIlxcXFxcIik7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgYEludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiBcXFxcJHtzY2FubmVyLmNoYXIoKX1gLFxuICAgICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzaWNTdHJpbmcoc2Nhbm5lcjogU2Nhbm5lcik6IFBhcnNlUmVzdWx0PHN0cmluZz4ge1xuICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICBpZiAoc2Nhbm5lci5jaGFyKCkgIT09ICdcIicpIHJldHVybiBmYWlsdXJlKCk7XG4gIHNjYW5uZXIubmV4dCgpO1xuICBjb25zdCBhY2MgPSBbXTtcbiAgd2hpbGUgKHNjYW5uZXIuY2hhcigpICE9PSAnXCInICYmICFzY2FubmVyLmVvZigpKSB7XG4gICAgaWYgKHNjYW5uZXIuY2hhcigpID09PSBcIlxcblwiKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJTaW5nbGUtbGluZSBzdHJpbmcgY2Fubm90IGNvbnRhaW4gRU9MXCIpO1xuICAgIH1cbiAgICBjb25zdCBlc2NhcGVkQ2hhciA9IGVzY2FwZVNlcXVlbmNlKHNjYW5uZXIpO1xuICAgIGlmIChlc2NhcGVkQ2hhci5vaykge1xuICAgICAgYWNjLnB1c2goZXNjYXBlZENoYXIuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjYy5wdXNoKHNjYW5uZXIuY2hhcigpKTtcbiAgICAgIHNjYW5uZXIubmV4dCgpO1xuICAgIH1cbiAgfVxuICBpZiAoc2Nhbm5lci5lb2YoKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgIGBTaW5nbGUtbGluZSBzdHJpbmcgaXMgbm90IGNsb3NlZDpcXG4ke2FjYy5qb2luKFwiXCIpfWAsXG4gICAgKTtcbiAgfVxuICBzY2FubmVyLm5leHQoKTsgLy8gc2tpcCBsYXN0ICdcIlwiXG4gIHJldHVybiBzdWNjZXNzKGFjYy5qb2luKFwiXCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpdGVyYWxTdHJpbmcoc2Nhbm5lcjogU2Nhbm5lcik6IFBhcnNlUmVzdWx0PHN0cmluZz4ge1xuICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICBpZiAoc2Nhbm5lci5jaGFyKCkgIT09IFwiJ1wiKSByZXR1cm4gZmFpbHVyZSgpO1xuICBzY2FubmVyLm5leHQoKTtcbiAgY29uc3QgYWNjOiBzdHJpbmdbXSA9IFtdO1xuICB3aGlsZSAoc2Nhbm5lci5jaGFyKCkgIT09IFwiJ1wiICYmICFzY2FubmVyLmVvZigpKSB7XG4gICAgaWYgKHNjYW5uZXIuY2hhcigpID09PSBcIlxcblwiKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJTaW5nbGUtbGluZSBzdHJpbmcgY2Fubm90IGNvbnRhaW4gRU9MXCIpO1xuICAgIH1cbiAgICBhY2MucHVzaChzY2FubmVyLmNoYXIoKSk7XG4gICAgc2Nhbm5lci5uZXh0KCk7XG4gIH1cbiAgaWYgKHNjYW5uZXIuZW9mKCkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICBgU2luZ2xlLWxpbmUgc3RyaW5nIGlzIG5vdCBjbG9zZWQ6XFxuJHthY2Muam9pbihcIlwiKX1gLFxuICAgICk7XG4gIH1cbiAgc2Nhbm5lci5uZXh0KCk7IC8vIHNraXAgbGFzdCBcIidcIlxuICByZXR1cm4gc3VjY2VzcyhhY2Muam9pbihcIlwiKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWxpbmVCYXNpY1N0cmluZyhcbiAgc2Nhbm5lcjogU2Nhbm5lcixcbik6IFBhcnNlUmVzdWx0PHN0cmluZz4ge1xuICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICBpZiAoIXNjYW5uZXIuc3RhcnRzV2l0aCgnXCJcIlwiJykpIHJldHVybiBmYWlsdXJlKCk7XG4gIHNjYW5uZXIubmV4dCgzKTtcbiAgaWYgKHNjYW5uZXIuY2hhcigpID09PSBcIlxcblwiKSB7XG4gICAgLy8gVGhlIGZpcnN0IG5ld2xpbmUgKExGKSBpcyB0cmltbWVkXG4gICAgc2Nhbm5lci5uZXh0KCk7XG4gIH0gZWxzZSBpZiAoc2Nhbm5lci5zdGFydHNXaXRoKFwiXFxyXFxuXCIpKSB7XG4gICAgLy8gVGhlIGZpcnN0IG5ld2xpbmUgKENSTEYpIGlzIHRyaW1tZWRcbiAgICBzY2FubmVyLm5leHQoMik7XG4gIH1cbiAgY29uc3QgYWNjOiBzdHJpbmdbXSA9IFtdO1xuICB3aGlsZSAoIXNjYW5uZXIuc3RhcnRzV2l0aCgnXCJcIlwiJykgJiYgIXNjYW5uZXIuZW9mKCkpIHtcbiAgICAvLyBsaW5lIGVuZGluZyBiYWNrc2xhc2hcbiAgICBpZiAoc2Nhbm5lci5zdGFydHNXaXRoKFwiXFxcXFxcblwiKSkge1xuICAgICAgc2Nhbm5lci5uZXh0KCk7XG4gICAgICBzY2FubmVyLm5leHRVbnRpbENoYXIoeyBza2lwQ29tbWVudHM6IGZhbHNlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChzY2FubmVyLnN0YXJ0c1dpdGgoXCJcXFxcXFxyXFxuXCIpKSB7XG4gICAgICBzY2FubmVyLm5leHQoKTtcbiAgICAgIHNjYW5uZXIubmV4dFVudGlsQ2hhcih7IHNraXBDb21tZW50czogZmFsc2UgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXNjYXBlZENoYXIgPSBlc2NhcGVTZXF1ZW5jZShzY2FubmVyKTtcbiAgICBpZiAoZXNjYXBlZENoYXIub2spIHtcbiAgICAgIGFjYy5wdXNoKGVzY2FwZWRDaGFyLmJvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2MucHVzaChzY2FubmVyLmNoYXIoKSk7XG4gICAgICBzY2FubmVyLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2Nhbm5lci5lb2YoKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgIGBNdWx0aS1saW5lIHN0cmluZyBpcyBub3QgY2xvc2VkOlxcbiR7YWNjLmpvaW4oXCJcIil9YCxcbiAgICApO1xuICB9XG4gIC8vIGlmIGVuZHMgd2l0aCA0IGBcImAsIHB1c2ggdGhlIGZpc3QgYFwiYCB0byBzdHJpbmdcbiAgaWYgKHNjYW5uZXIuY2hhcigzKSA9PT0gJ1wiJykge1xuICAgIGFjYy5wdXNoKCdcIicpO1xuICAgIHNjYW5uZXIubmV4dCgpO1xuICB9XG4gIHNjYW5uZXIubmV4dCgzKTsgLy8gc2tpcCBsYXN0ICdcIlwiXCJcIlxuICByZXR1cm4gc3VjY2VzcyhhY2Muam9pbihcIlwiKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWxpbmVMaXRlcmFsU3RyaW5nKFxuICBzY2FubmVyOiBTY2FubmVyLFxuKTogUGFyc2VSZXN1bHQ8c3RyaW5nPiB7XG4gIHNjYW5uZXIuc2tpcFdoaXRlc3BhY2VzKCk7XG4gIGlmICghc2Nhbm5lci5zdGFydHNXaXRoKFwiJycnXCIpKSByZXR1cm4gZmFpbHVyZSgpO1xuICBzY2FubmVyLm5leHQoMyk7XG4gIGlmIChzY2FubmVyLmNoYXIoKSA9PT0gXCJcXG5cIikge1xuICAgIC8vIFRoZSBmaXJzdCBuZXdsaW5lIChMRikgaXMgdHJpbW1lZFxuICAgIHNjYW5uZXIubmV4dCgpO1xuICB9IGVsc2UgaWYgKHNjYW5uZXIuc3RhcnRzV2l0aChcIlxcclxcblwiKSkge1xuICAgIC8vIFRoZSBmaXJzdCBuZXdsaW5lIChDUkxGKSBpcyB0cmltbWVkXG4gICAgc2Nhbm5lci5uZXh0KDIpO1xuICB9XG4gIGNvbnN0IGFjYzogc3RyaW5nW10gPSBbXTtcbiAgd2hpbGUgKCFzY2FubmVyLnN0YXJ0c1dpdGgoXCInJydcIikgJiYgIXNjYW5uZXIuZW9mKCkpIHtcbiAgICBhY2MucHVzaChzY2FubmVyLmNoYXIoKSk7XG4gICAgc2Nhbm5lci5uZXh0KCk7XG4gIH1cbiAgaWYgKHNjYW5uZXIuZW9mKCkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICBgTXVsdGktbGluZSBzdHJpbmcgaXMgbm90IGNsb3NlZDpcXG4ke2FjYy5qb2luKFwiXCIpfWAsXG4gICAgKTtcbiAgfVxuICAvLyBpZiBlbmRzIHdpdGggNCBgJ2AsIHB1c2ggdGhlIGZpc3QgYCdgIHRvIHN0cmluZ1xuICBpZiAoc2Nhbm5lci5jaGFyKDMpID09PSBcIidcIikge1xuICAgIGFjYy5wdXNoKFwiJ1wiKTtcbiAgICBzY2FubmVyLm5leHQoKTtcbiAgfVxuICBzY2FubmVyLm5leHQoMyk7IC8vIHNraXAgbGFzdCBcIicnJ1wiXG4gIHJldHVybiBzdWNjZXNzKGFjYy5qb2luKFwiXCIpKTtcbn1cblxuY29uc3QgQk9PTEVBTl9SRUdFWFAgPSAvKD86dHJ1ZXxmYWxzZSlcXGIveTtcbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxib29sZWFuPiB7XG4gIHNjYW5uZXIuc2tpcFdoaXRlc3BhY2VzKCk7XG4gIGNvbnN0IG1hdGNoID0gc2Nhbm5lci5tYXRjaChCT09MRUFOX1JFR0VYUCk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBmYWlsdXJlKCk7XG4gIGNvbnN0IHN0cmluZyA9IG1hdGNoWzBdO1xuICBzY2FubmVyLm5leHQoc3RyaW5nLmxlbmd0aCk7XG4gIGNvbnN0IHZhbHVlID0gc3RyaW5nID09PSBcInRydWVcIjtcbiAgcmV0dXJuIHN1Y2Nlc3ModmFsdWUpO1xufVxuXG5jb25zdCBJTkZJTklUWV9NQVAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXG4gIFtcImluZlwiLCBJbmZpbml0eV0sXG4gIFtcIitpbmZcIiwgSW5maW5pdHldLFxuICBbXCItaW5mXCIsIC1JbmZpbml0eV0sXG5dKTtcbmNvbnN0IElORklOSVRZX1JFR0VYUCA9IC9bKy1dP2luZlxcYi95O1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXR5KHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxudW1iZXI+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcbiAgY29uc3QgbWF0Y2ggPSBzY2FubmVyLm1hdGNoKElORklOSVRZX1JFR0VYUCk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBmYWlsdXJlKCk7XG4gIGNvbnN0IHN0cmluZyA9IG1hdGNoWzBdO1xuICBzY2FubmVyLm5leHQoc3RyaW5nLmxlbmd0aCk7XG4gIGNvbnN0IHZhbHVlID0gSU5GSU5JVFlfTUFQLmdldChzdHJpbmcpITtcbiAgcmV0dXJuIHN1Y2Nlc3ModmFsdWUpO1xufVxuXG5jb25zdCBOQU5fUkVHRVhQID0gL1srLV0/bmFuXFxiL3k7XG5leHBvcnQgZnVuY3Rpb24gbmFuKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxudW1iZXI+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcbiAgY29uc3QgbWF0Y2ggPSBzY2FubmVyLm1hdGNoKE5BTl9SRUdFWFApO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gZmFpbHVyZSgpO1xuICBjb25zdCBzdHJpbmcgPSBtYXRjaFswXTtcbiAgc2Nhbm5lci5uZXh0KHN0cmluZy5sZW5ndGgpO1xuICBjb25zdCB2YWx1ZSA9IE5hTjtcbiAgcmV0dXJuIHN1Y2Nlc3ModmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgZG90dGVkS2V5ID0gam9pbjEob3IoW2JhcmVLZXksIGJhc2ljU3RyaW5nLCBsaXRlcmFsU3RyaW5nXSksIFwiLlwiKTtcblxuY29uc3QgQklOQVJZX1JFR0VYUCA9IC8wYlswMV0rKD86X1swMV0rKSpcXGIveTtcbmV4cG9ydCBmdW5jdGlvbiBiaW5hcnkoc2Nhbm5lcjogU2Nhbm5lcik6IFBhcnNlUmVzdWx0PG51bWJlciB8IHN0cmluZz4ge1xuICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICBjb25zdCBtYXRjaCA9IHNjYW5uZXIubWF0Y2goQklOQVJZX1JFR0VYUCk/LlswXTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIGZhaWx1cmUoKTtcbiAgc2Nhbm5lci5uZXh0KG1hdGNoLmxlbmd0aCk7XG4gIGNvbnN0IHZhbHVlID0gbWF0Y2guc2xpY2UoMikucmVwbGFjZUFsbChcIl9cIiwgXCJcIik7XG4gIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KHZhbHVlLCAyKTtcbiAgcmV0dXJuIGlzTmFOKG51bWJlcikgPyBmYWlsdXJlKCkgOiBzdWNjZXNzKG51bWJlcik7XG59XG5cbmNvbnN0IE9DVEFMX1JFR0VYUCA9IC8wb1swLTddKyg/Ol9bMC03XSspKlxcYi95O1xuZXhwb3J0IGZ1bmN0aW9uIG9jdGFsKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxudW1iZXIgfCBzdHJpbmc+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcbiAgY29uc3QgbWF0Y2ggPSBzY2FubmVyLm1hdGNoKE9DVEFMX1JFR0VYUCk/LlswXTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIGZhaWx1cmUoKTtcbiAgc2Nhbm5lci5uZXh0KG1hdGNoLmxlbmd0aCk7XG4gIGNvbnN0IHZhbHVlID0gbWF0Y2guc2xpY2UoMikucmVwbGFjZUFsbChcIl9cIiwgXCJcIik7XG4gIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KHZhbHVlLCA4KTtcbiAgcmV0dXJuIGlzTmFOKG51bWJlcikgPyBmYWlsdXJlKCkgOiBzdWNjZXNzKG51bWJlcik7XG59XG5cbmNvbnN0IEhFWF9SRUdFWFAgPSAvMHhbMC05YS1mXSsoPzpfWzAtOWEtZl0rKSpcXGIveWk7XG5leHBvcnQgZnVuY3Rpb24gaGV4KHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxudW1iZXIgfCBzdHJpbmc+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcbiAgY29uc3QgbWF0Y2ggPSBzY2FubmVyLm1hdGNoKEhFWF9SRUdFWFApPy5bMF07XG4gIGlmICghbWF0Y2gpIHJldHVybiBmYWlsdXJlKCk7XG4gIHNjYW5uZXIubmV4dChtYXRjaC5sZW5ndGgpO1xuICBjb25zdCB2YWx1ZSA9IG1hdGNoLnNsaWNlKDIpLnJlcGxhY2VBbGwoXCJfXCIsIFwiXCIpO1xuICBjb25zdCBudW1iZXIgPSBwYXJzZUludCh2YWx1ZSwgMTYpO1xuICByZXR1cm4gaXNOYU4obnVtYmVyKSA/IGZhaWx1cmUoKSA6IHN1Y2Nlc3MobnVtYmVyKTtcbn1cblxuY29uc3QgSU5URUdFUl9SRUdFWFAgPSAvWystXT9bMC05XSsoPzpfWzAtOV0rKSpcXGIveTtcbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxudW1iZXIgfCBzdHJpbmc+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcbiAgY29uc3QgbWF0Y2ggPSBzY2FubmVyLm1hdGNoKElOVEVHRVJfUkVHRVhQKT8uWzBdO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gZmFpbHVyZSgpO1xuICBzY2FubmVyLm5leHQobWF0Y2gubGVuZ3RoKTtcbiAgY29uc3QgdmFsdWUgPSBtYXRjaC5yZXBsYWNlQWxsKFwiX1wiLCBcIlwiKTtcbiAgY29uc3QgaW50ID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgcmV0dXJuIHN1Y2Nlc3MoaW50KTtcbn1cblxuY29uc3QgRkxPQVRfUkVHRVhQID1cbiAgL1srLV0/WzAtOV0rKD86X1swLTldKykqKD86XFwuWzAtOV0rKD86X1swLTldKykqKT8oPzplWystXT9bMC05XSsoPzpfWzAtOV0rKSopP1xcYi95aTtcbmV4cG9ydCBmdW5jdGlvbiBmbG9hdChzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8bnVtYmVyPiB7XG4gIHNjYW5uZXIuc2tpcFdoaXRlc3BhY2VzKCk7XG4gIGNvbnN0IG1hdGNoID0gc2Nhbm5lci5tYXRjaChGTE9BVF9SRUdFWFApPy5bMF07XG4gIGlmICghbWF0Y2gpIHJldHVybiBmYWlsdXJlKCk7XG4gIHNjYW5uZXIubmV4dChtYXRjaC5sZW5ndGgpO1xuICBjb25zdCB2YWx1ZSA9IG1hdGNoLnJlcGxhY2VBbGwoXCJfXCIsIFwiXCIpO1xuICBjb25zdCBmbG9hdCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICBpZiAoaXNOYU4oZmxvYXQpKSByZXR1cm4gZmFpbHVyZSgpO1xuICByZXR1cm4gc3VjY2VzcyhmbG9hdCk7XG59XG5cbmNvbnN0IERBVEVfVElNRV9SRUdFWFAgPSAvXFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpbIDAtOVRaLjorLV0rKT9cXGIveTtcbmV4cG9ydCBmdW5jdGlvbiBkYXRlVGltZShzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8RGF0ZT4ge1xuICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICAvLyBleGFtcGxlOiAxOTc5LTA1LTI3XG4gIGNvbnN0IG1hdGNoID0gc2Nhbm5lci5tYXRjaChEQVRFX1RJTUVfUkVHRVhQKT8uWzBdO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gZmFpbHVyZSgpO1xuICBzY2FubmVyLm5leHQobWF0Y2gubGVuZ3RoKTtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG1hdGNoLnRyaW0oKSk7XG4gIC8vIGludmFsaWQgZGF0ZVxuICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIGRhdGUgc3RyaW5nIFwiJHttYXRjaH1cImApO1xuICB9XG4gIHJldHVybiBzdWNjZXNzKGRhdGUpO1xufVxuXG5jb25zdCBMT0NBTF9USU1FX1JFR0VYUCA9IC8oXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLlswLTldKyk/XFxiL3k7XG5leHBvcnQgZnVuY3Rpb24gbG9jYWxUaW1lKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDxzdHJpbmc+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcblxuICBjb25zdCBtYXRjaCA9IHNjYW5uZXIubWF0Y2goTE9DQUxfVElNRV9SRUdFWFApPy5bMF07XG4gIGlmICghbWF0Y2gpIHJldHVybiBmYWlsdXJlKCk7XG4gIHNjYW5uZXIubmV4dChtYXRjaC5sZW5ndGgpO1xuICByZXR1cm4gc3VjY2VzcyhtYXRjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVZhbHVlKHNjYW5uZXI6IFNjYW5uZXIpOiBQYXJzZVJlc3VsdDx1bmtub3duW10+IHtcbiAgc2Nhbm5lci5za2lwV2hpdGVzcGFjZXMoKTtcblxuICBpZiAoc2Nhbm5lci5jaGFyKCkgIT09IFwiW1wiKSByZXR1cm4gZmFpbHVyZSgpO1xuICBzY2FubmVyLm5leHQoKTtcblxuICBjb25zdCBhcnJheTogdW5rbm93bltdID0gW107XG4gIHdoaWxlICghc2Nhbm5lci5lb2YoKSkge1xuICAgIHNjYW5uZXIubmV4dFVudGlsQ2hhcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlKHNjYW5uZXIpO1xuICAgIGlmICghcmVzdWx0Lm9rKSBicmVhaztcbiAgICBhcnJheS5wdXNoKHJlc3VsdC5ib2R5KTtcbiAgICBzY2FubmVyLnNraXBXaGl0ZXNwYWNlcygpO1xuICAgIC8vIG1heSBoYXZlIGEgbmV4dCBpdGVtLCBidXQgdHJhaWxpbmcgY29tbWEgaXMgYWxsb3dlZCBhdCBhcnJheVxuICAgIGlmIChzY2FubmVyLmNoYXIoKSAhPT0gXCIsXCIpIGJyZWFrO1xuICAgIHNjYW5uZXIubmV4dCgpO1xuICB9XG4gIHNjYW5uZXIubmV4dFVudGlsQ2hhcigpO1xuXG4gIGlmIChzY2FubmVyLmNoYXIoKSAhPT0gXCJdXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkFycmF5IGlzIG5vdCBjbG9zZWRcIik7XG4gIHNjYW5uZXIubmV4dCgpO1xuXG4gIHJldHVybiBzdWNjZXNzKGFycmF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlubGluZVRhYmxlKFxuICBzY2FubmVyOiBTY2FubmVyLFxuKTogUGFyc2VSZXN1bHQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgc2Nhbm5lci5uZXh0VW50aWxDaGFyKCk7XG4gIGlmIChzY2FubmVyLmNoYXIoMSkgPT09IFwifVwiKSB7XG4gICAgc2Nhbm5lci5uZXh0KDIpO1xuICAgIHJldHVybiBzdWNjZXNzKHt9KTtcbiAgfVxuICBjb25zdCBwYWlycyA9IHN1cnJvdW5kKFwie1wiLCBqb2luKHBhaXIsIFwiLFwiKSwgXCJ9XCIpKHNjYW5uZXIpO1xuICBpZiAoIXBhaXJzLm9rKSByZXR1cm4gZmFpbHVyZSgpO1xuICBsZXQgdGFibGUgPSB7fTtcbiAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzLmJvZHkpIHtcbiAgICB0YWJsZSA9IGRlZXBNZXJnZSh0YWJsZSwgcGFpcik7XG4gIH1cbiAgcmV0dXJuIHN1Y2Nlc3ModGFibGUpO1xufVxuXG5leHBvcnQgY29uc3QgdmFsdWUgPSBvcihbXG4gIG11bHRpbGluZUJhc2ljU3RyaW5nLFxuICBtdWx0aWxpbmVMaXRlcmFsU3RyaW5nLFxuICBiYXNpY1N0cmluZyxcbiAgbGl0ZXJhbFN0cmluZyxcbiAgYm9vbGVhbixcbiAgaW5maW5pdHksXG4gIG5hbixcbiAgZGF0ZVRpbWUsXG4gIGxvY2FsVGltZSxcbiAgYmluYXJ5LFxuICBvY3RhbCxcbiAgaGV4LFxuICBmbG9hdCxcbiAgaW50ZWdlcixcbiAgYXJyYXlWYWx1ZSxcbiAgaW5saW5lVGFibGUsXG5dKTtcblxuZXhwb3J0IGNvbnN0IHBhaXIgPSBrdihkb3R0ZWRLZXksIFwiPVwiLCB2YWx1ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9jayhcbiAgc2Nhbm5lcjogU2Nhbm5lcixcbik6IFBhcnNlUmVzdWx0PEJsb2NrUGFyc2VSZXN1bHRCb2R5PiB7XG4gIHNjYW5uZXIubmV4dFVudGlsQ2hhcigpO1xuICBjb25zdCByZXN1bHQgPSBtZXJnZShyZXBlYXQocGFpcikpKHNjYW5uZXIpO1xuICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gc3VjY2Vzcyh7IHR5cGU6IFwiQmxvY2tcIiwgdmFsdWU6IHJlc3VsdC5ib2R5IH0pO1xuICByZXR1cm4gZmFpbHVyZSgpO1xufVxuXG5leHBvcnQgY29uc3QgdGFibGVIZWFkZXIgPSBzdXJyb3VuZChcIltcIiwgZG90dGVkS2V5LCBcIl1cIik7XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZShzY2FubmVyOiBTY2FubmVyKTogUGFyc2VSZXN1bHQ8QmxvY2tQYXJzZVJlc3VsdEJvZHk+IHtcbiAgc2Nhbm5lci5uZXh0VW50aWxDaGFyKCk7XG4gIGNvbnN0IGhlYWRlciA9IHRhYmxlSGVhZGVyKHNjYW5uZXIpO1xuICBpZiAoIWhlYWRlci5vaykgcmV0dXJuIGZhaWx1cmUoKTtcbiAgc2Nhbm5lci5uZXh0VW50aWxDaGFyKCk7XG4gIGNvbnN0IGIgPSBibG9jayhzY2FubmVyKTtcbiAgcmV0dXJuIHN1Y2Nlc3Moe1xuICAgIHR5cGU6IFwiVGFibGVcIixcbiAgICBrZXk6IGhlYWRlci5ib2R5LFxuICAgIHZhbHVlOiBiLm9rID8gYi5ib2R5LnZhbHVlIDoge30sXG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgdGFibGVBcnJheUhlYWRlciA9IHN1cnJvdW5kKFwiW1tcIiwgZG90dGVkS2V5LCBcIl1dXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVBcnJheShcbiAgc2Nhbm5lcjogU2Nhbm5lcixcbik6IFBhcnNlUmVzdWx0PEJsb2NrUGFyc2VSZXN1bHRCb2R5PiB7XG4gIHNjYW5uZXIubmV4dFVudGlsQ2hhcigpO1xuICBjb25zdCBoZWFkZXIgPSB0YWJsZUFycmF5SGVhZGVyKHNjYW5uZXIpO1xuICBpZiAoIWhlYWRlci5vaykgcmV0dXJuIGZhaWx1cmUoKTtcbiAgc2Nhbm5lci5uZXh0VW50aWxDaGFyKCk7XG4gIGNvbnN0IGIgPSBibG9jayhzY2FubmVyKTtcbiAgcmV0dXJuIHN1Y2Nlc3Moe1xuICAgIHR5cGU6IFwiVGFibGVBcnJheVwiLFxuICAgIGtleTogaGVhZGVyLmJvZHksXG4gICAgdmFsdWU6IGIub2sgPyBiLmJvZHkudmFsdWUgOiB7fSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b21sKFxuICBzY2FubmVyOiBTY2FubmVyLFxuKTogUGFyc2VSZXN1bHQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgYmxvY2tzID0gcmVwZWF0KG9yKFtibG9jaywgdGFibGVBcnJheSwgdGFibGVdKSkoc2Nhbm5lcik7XG4gIGxldCBib2R5ID0ge307XG4gIGlmICghYmxvY2tzLm9rKSByZXR1cm4gc3VjY2Vzcyhib2R5KTtcbiAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MuYm9keSkge1xuICAgIHN3aXRjaCAoYmxvY2sudHlwZSkge1xuICAgICAgY2FzZSBcIkJsb2NrXCI6IHtcbiAgICAgICAgYm9keSA9IGRlZXBNZXJnZShib2R5LCBibG9jay52YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcIlRhYmxlXCI6IHtcbiAgICAgICAgZGVlcEFzc2lnbldpdGhUYWJsZShib2R5LCBibG9jayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcIlRhYmxlQXJyYXlcIjoge1xuICAgICAgICBkZWVwQXNzaWduV2l0aFRhYmxlKGJvZHksIGJsb2NrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdWNjZXNzKGJvZHkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXJzZUVycm9yTWVzc2FnZShzY2FubmVyOiBTY2FubmVyLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RyaW5nID0gc2Nhbm5lci5zb3VyY2Uuc2xpY2UoMCwgc2Nhbm5lci5wb3NpdGlvbik7XG4gIGNvbnN0IGxpbmVzID0gc3RyaW5nLnNwbGl0KFwiXFxuXCIpO1xuICBjb25zdCByb3cgPSBsaW5lcy5sZW5ndGg7XG4gIGNvbnN0IGNvbHVtbiA9IGxpbmVzLmF0KC0xKT8ubGVuZ3RoID8/IDA7XG4gIHJldHVybiBgUGFyc2UgZXJyb3Igb24gbGluZSAke3Jvd30sIGNvbHVtbiAke2NvbHVtbn06ICR7bWVzc2FnZX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRmFjdG9yeTxUPihwYXJzZXI6IFBhcnNlckNvbXBvbmVudDxUPikge1xuICByZXR1cm4gKHRvbWxTdHJpbmc6IHN0cmluZyk6IFQgPT4ge1xuICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgU2Nhbm5lcih0b21sU3RyaW5nKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyKHNjYW5uZXIpO1xuICAgICAgaWYgKHJlc3VsdC5vayAmJiBzY2FubmVyLmVvZigpKSByZXR1cm4gcmVzdWx0LmJvZHk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFVuZXhwZWN0ZWQgY2hhcmFjdGVyOiBcIiR7c2Nhbm5lci5jaGFyKCl9XCJgO1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGNyZWF0ZVBhcnNlRXJyb3JNZXNzYWdlKHNjYW5uZXIsIG1lc3NhZ2UpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGNyZWF0ZVBhcnNlRXJyb3JNZXNzYWdlKHNjYW5uZXIsIGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcIkludmFsaWQgZXJyb3IgdHlwZSBjYXVnaHRcIjtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihjcmVhdGVQYXJzZUVycm9yTWVzc2FnZShzY2FubmVyLCBtZXNzYWdlKSk7XG4gICAgfVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7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
+// denoCacheMetadata=2174145515825431452,13174816863807127724 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a20a0a0104176c5284237e906fcc75e949c8c412c98ff9e2c27b71d6401bc18c.js b/vendor/gen/https/jsr.io/a20a0a0104176c5284237e906fcc75e949c8c412c98ff9e2c27b71d6401bc18c.js
new file mode 100644
index 0000000..de4afe9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a20a0a0104176c5284237e906fcc75e949c8c412c98ff9e2c27b71d6401bc18c.js
@@ -0,0 +1,37 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Returns `true` if the suffix array appears at the end of the source array,
+ * `false` otherwise.
+ *
+ * The complexity of this function is `O(suffix.length)`.
+ *
+ * @param source Source array to check.
+ * @param suffix Suffix array to check for.
+ * @returns `true` if the suffix array appears at the end of the source array,
+ * `false` otherwise.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { endsWith } from "@std/bytes/ends-with";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const suffix = new Uint8Array([1, 2, 3]);
+ *
+ * assertEquals(endsWith(source, suffix), true);
+ * ```
+ */ export function endsWith(source, suffix) {
+ const diff = source.length - suffix.length;
+ if (diff < 0) {
+ return false;
+ }
+ for(let i = suffix.length - 1; i >= 0; i--){
+ if (source[diff + i] !== suffix[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvZW5kc193aXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1ZmZpeCBhcnJheSBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBhcnJheSxcbiAqIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIFRoZSBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgYE8oc3VmZml4Lmxlbmd0aClgLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgU291cmNlIGFycmF5IHRvIGNoZWNrLlxuICogQHBhcmFtIHN1ZmZpeCBTdWZmaXggYXJyYXkgdG8gY2hlY2sgZm9yLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdWZmaXggYXJyYXkgYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZSBzb3VyY2UgYXJyYXksXG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGVuZHNXaXRoIH0gZnJvbSBcIkBzdGQvYnl0ZXMvZW5kcy13aXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMSwgMiwgMSwgMiwgM10pO1xuICogY29uc3Qgc3VmZml4ID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDIsIDNdKTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZW5kc1dpdGgoc291cmNlLCBzdWZmaXgpLCB0cnVlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGgoc291cmNlOiBVaW50OEFycmF5LCBzdWZmaXg6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgY29uc3QgZGlmZiA9IHNvdXJjZS5sZW5ndGggLSBzdWZmaXgubGVuZ3RoO1xuICBpZiAoZGlmZiA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaSA9IHN1ZmZpeC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzb3VyY2VbZGlmZiArIGldICE9PSBzdWZmaXhbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUJDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsTUFBa0IsRUFBRSxNQUFrQjtFQUM3RCxNQUFNLE9BQU8sT0FBTyxNQUFNLEdBQUcsT0FBTyxNQUFNO0VBQzFDLElBQUksT0FBTyxHQUFHO0lBQ1osT0FBTztFQUNUO0VBQ0EsSUFBSyxJQUFJLElBQUksT0FBTyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFO01BQ2xDLE9BQU87SUFDVDtFQUNGO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=13836805235957356807,1940362264811181520 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a274509fe14a74ce9d9ee5de63590df49825b9f75f011b3f6fbb8806ff0e8d84.js b/vendor/gen/https/jsr.io/a274509fe14a74ce9d9ee5de63590df49825b9f75f011b3f6fbb8806ff0e8d84.js
new file mode 100644
index 0000000..186c154
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a274509fe14a74ce9d9ee5de63590df49825b9f75f011b3f6fbb8806ff0e8d84.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { parse as posixParse } from "./posix/parse.ts";
+import { parse as windowsParse } from "./windows/parse.ts";
+/**
+ * Return an object containing the parsed components of the path.
+ *
+ * Use {@linkcode https://jsr.io/@std/path/doc/~/format | format()} to reverse
+ * the result.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/path/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const parsedPathObj = parse("C:\\path\\to\\script.ts");
+ * assertEquals(parsedPathObj.root, "C:\\");
+ * assertEquals(parsedPathObj.dir, "C:\\path\\to");
+ * assertEquals(parsedPathObj.base, "script.ts");
+ * assertEquals(parsedPathObj.ext, ".ts");
+ * assertEquals(parsedPathObj.name, "script");
+ * } else {
+ * const parsedPathObj = parse("/path/to/dir/script.ts");
+ * parsedPathObj.root; // "/"
+ * parsedPathObj.dir; // "/path/to/dir"
+ * parsedPathObj.base; // "script.ts"
+ * parsedPathObj.ext; // ".ts"
+ * parsedPathObj.name; // "script"
+ * }
+ * ```
+ *
+ * @param path Path to process
+ * @returns An object with the parsed path components.
+ */ export function parse(path) {
+ return isWindows ? windowsParse(path) : posixParse(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wYXJzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkUGF0aCB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBwYXJzZSBhcyBwb3NpeFBhcnNlIH0gZnJvbSBcIi4vcG9zaXgvcGFyc2UudHNcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHdpbmRvd3NQYXJzZSB9IGZyb20gXCIuL3dpbmRvd3MvcGFyc2UudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBQYXJzZWRQYXRoIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBjb21wb25lbnRzIG9mIHRoZSBwYXRoLlxuICpcbiAqIFVzZSB7QGxpbmtjb2RlIGh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC9kb2Mvfi9mb3JtYXQgfCBmb3JtYXQoKX0gdG8gcmV2ZXJzZVxuICogdGhlIHJlc3VsdC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBzdGQvcGF0aC9wYXJzZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGNvbnN0IHBhcnNlZFBhdGhPYmogPSBwYXJzZShcIkM6XFxcXHBhdGhcXFxcdG9cXFxcc2NyaXB0LnRzXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUGF0aE9iai5yb290LCBcIkM6XFxcXFwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhcnNlZFBhdGhPYmouZGlyLCBcIkM6XFxcXHBhdGhcXFxcdG9cIik7XG4gKiAgIGFzc2VydEVxdWFscyhwYXJzZWRQYXRoT2JqLmJhc2UsIFwic2NyaXB0LnRzXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUGF0aE9iai5leHQsIFwiLnRzXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGFyc2VkUGF0aE9iai5uYW1lLCBcInNjcmlwdFwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnN0IHBhcnNlZFBhdGhPYmogPSBwYXJzZShcIi9wYXRoL3RvL2Rpci9zY3JpcHQudHNcIik7XG4gKiAgIHBhcnNlZFBhdGhPYmoucm9vdDsgLy8gXCIvXCJcbiAqICAgcGFyc2VkUGF0aE9iai5kaXI7IC8vIFwiL3BhdGgvdG8vZGlyXCJcbiAqICAgcGFyc2VkUGF0aE9iai5iYXNlOyAvLyBcInNjcmlwdC50c1wiXG4gKiAgIHBhcnNlZFBhdGhPYmouZXh0OyAvLyBcIi50c1wiXG4gKiAgIHBhcnNlZFBhdGhPYmoubmFtZTsgLy8gXCJzY3JpcHRcIlxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggUGF0aCB0byBwcm9jZXNzXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkIHBhdGggY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c1BhcnNlKHBhdGgpIDogcG9zaXhQYXJzZShwYXRoKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFFckMsU0FBUyxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFDdkQsU0FBUyxTQUFTLFlBQVksUUFBUSxxQkFBcUI7QUFJM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThCQyxHQUNELE9BQU8sU0FBUyxNQUFNLElBQVk7RUFDaEMsT0FBTyxZQUFZLGFBQWEsUUFBUSxXQUFXO0FBQ3JEIn0=
+// denoCacheMetadata=2517273432130411094,13263517591213717060 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a3264823d25646a082d91622329c08defbdd71814a7eaa3dc69f993b1b035d71.js b/vendor/gen/https/jsr.io/a3264823d25646a082d91622329c08defbdd71814a7eaa3dc69f993b1b035d71.js
new file mode 100644
index 0000000..52b39b3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a3264823d25646a082d91622329c08defbdd71814a7eaa3dc69f993b1b035d71.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { isAbsolute as posixIsAbsolute } from "./posix/is_absolute.ts";
+import { isAbsolute as windowsIsAbsolute } from "./windows/is_absolute.ts";
+/**
+ * Verifies whether provided path is absolute.
+ *
+ * @example Usage
+ * ```ts
+ * import { isAbsolute } from "@std/path/is-absolute";
+ * import { assert, assertFalse } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assert(isAbsolute("C:\\home\\foo"));
+ * assertFalse(isAbsolute("home\\foo"));
+ * } else {
+ * assert(isAbsolute("/home/foo"));
+ * assertFalse(isAbsolute("home/foo"));
+ * }
+ * ```
+ *
+ * @param path Path to be verified as absolute.
+ * @returns `true` if path is absolute, `false` otherwise
+ */ export function isAbsolute(path) {
+ return isWindows ? windowsIsAbsolute(path) : posixIsAbsolute(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9pc19hYnNvbHV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgcG9zaXhJc0Fic29sdXRlIH0gZnJvbSBcIi4vcG9zaXgvaXNfYWJzb2x1dGUudHNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgd2luZG93c0lzQWJzb2x1dGUgfSBmcm9tIFwiLi93aW5kb3dzL2lzX2Fic29sdXRlLnRzXCI7XG5cbi8qKlxuICogVmVyaWZpZXMgd2hldGhlciBwcm92aWRlZCBwYXRoIGlzIGFic29sdXRlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNBYnNvbHV0ZSB9IGZyb20gXCJAc3RkL3BhdGgvaXMtYWJzb2x1dGVcIjtcbiAqIGltcG9ydCB7IGFzc2VydCwgYXNzZXJ0RmFsc2UgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0KGlzQWJzb2x1dGUoXCJDOlxcXFxob21lXFxcXGZvb1wiKSk7XG4gKiAgIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCJob21lXFxcXGZvb1wiKSk7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnQoaXNBYnNvbHV0ZShcIi9ob21lL2Zvb1wiKSk7XG4gKiAgIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCJob21lL2Zvb1wiKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBQYXRoIHRvIGJlIHZlcmlmaWVkIGFzIGFic29sdXRlLlxuICogQHJldHVybnMgYHRydWVgIGlmIHBhdGggaXMgYWJzb2x1dGUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0lzQWJzb2x1dGUocGF0aCkgOiBwb3NpeElzQWJzb2x1dGUocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsY0FBYyxlQUFlLFFBQVEseUJBQXlCO0FBQ3ZFLFNBQVMsY0FBYyxpQkFBaUIsUUFBUSwyQkFBMkI7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsV0FBVyxJQUFZO0VBQ3JDLE9BQU8sWUFBWSxrQkFBa0IsUUFBUSxnQkFBZ0I7QUFDL0QifQ==
+// denoCacheMetadata=14283075286172203899,7705260698456797190 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a7b60c5acd878057b22633c478f52903b96e57744ad9bf47df95bfd5d903b48d.js b/vendor/gen/https/jsr.io/a7b60c5acd878057b22633c478f52903b96e57744ad9bf47df95bfd5d903b48d.js
new file mode 100644
index 0000000..2f84c0e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a7b60c5acd878057b22633c478f52903b96e57744ad9bf47df95bfd5d903b48d.js
@@ -0,0 +1,9 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function assertArg(path) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL25vcm1hbGl6ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBhc3NlcnRQYXRoIH0gZnJvbSBcIi4vYXNzZXJ0X3BhdGgudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFyZyhwYXRoOiBzdHJpbmcpIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCIuXCI7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsT0FBTyxTQUFTLFVBQVUsSUFBWTtFQUNwQyxXQUFXO0VBQ1gsSUFBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLE9BQU87QUFDaEMifQ==
+// denoCacheMetadata=12071784527289267437,4199244228715950958 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a80cf6c3276c9f87132aa5e59667bfd5967a37f532932f755b28cf29a9f9109b.js b/vendor/gen/https/jsr.io/a80cf6c3276c9f87132aa5e59667bfd5967a37f532932f755b28cf29a9f9109b.js
new file mode 100644
index 0000000..6acd47b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a80cf6c3276c9f87132aa5e59667bfd5967a37f532932f755b28cf29a9f9109b.js
@@ -0,0 +1,17 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+const WHITESPACE_ENCODINGS = {
+ "\u0009": "%09",
+ "\u000A": "%0A",
+ "\u000B": "%0B",
+ "\u000C": "%0C",
+ "\u000D": "%0D",
+ "\u0020": "%20"
+};
+export function encodeWhitespace(string) {
+ return string.replaceAll(/[\s]/g, (c)=>{
+ return WHITESPACE_ENCODINGS[c] ?? c;
+ });
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL3RvX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmNvbnN0IFdISVRFU1BBQ0VfRU5DT0RJTkdTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcIlxcdTAwMDlcIjogXCIlMDlcIixcbiAgXCJcXHUwMDBBXCI6IFwiJTBBXCIsXG4gIFwiXFx1MDAwQlwiOiBcIiUwQlwiLFxuICBcIlxcdTAwMENcIjogXCIlMENcIixcbiAgXCJcXHUwMDBEXCI6IFwiJTBEXCIsXG4gIFwiXFx1MDAyMFwiOiBcIiUyMFwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVdoaXRlc3BhY2Uoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2VBbGwoL1tcXHNdL2csIChjKSA9PiB7XG4gICAgcmV0dXJuIFdISVRFU1BBQ0VfRU5DT0RJTkdTW2NdID8/IGM7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsTUFBTSx1QkFBK0M7RUFDbkQsVUFBVTtFQUNWLFVBQVU7RUFDVixVQUFVO0VBQ1YsVUFBVTtFQUNWLFVBQVU7RUFDVixVQUFVO0FBQ1o7QUFFQSxPQUFPLFNBQVMsaUJBQWlCLE1BQWM7RUFDN0MsT0FBTyxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDakMsT0FBTyxvQkFBb0IsQ0FBQyxFQUFFLElBQUk7RUFDcEM7QUFDRiJ9
+// denoCacheMetadata=5674492193195111060,3697114697723333245 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/a8cee04f686812adf569c862c389ea4a108d63b6a64cf60216e8c7104bc659de.js b/vendor/gen/https/jsr.io/a8cee04f686812adf569c862c389ea4a108d63b6a64cf60216e8c7104bc659de.js
new file mode 100644
index 0000000..6463075
--- /dev/null
+++ b/vendor/gen/https/jsr.io/a8cee04f686812adf569c862c389ea4a108d63b6a64cf60216e8c7104bc659de.js
@@ -0,0 +1,84 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_DOT } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return the extension of the `path` with leading period.
+ *
+ * @example Usage
+ * ```ts
+ * import { extname } from "@std/path/posix/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(extname("/home/user/Documents/file.ts"), ".ts");
+ * assertEquals(extname("/home/user/Documents/"), "");
+ * assertEquals(extname("/home/user/Documents/image.png"), ".png");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * Note: This function doesn't automatically strip hash and query parts from
+ * URLs. If your URL contains a hash or query, remove them before passing the
+ * URL to the function. This can be done by passing the URL to `new URL(url)`,
+ * and setting the `hash` and `search` properties to empty strings.
+ *
+ * ```ts
+ * import { extname } from "@std/path/posix/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(extname("https://deno.land/std/path/mod.ts"), ".ts");
+ * assertEquals(extname("https://deno.land/std/path/mod.ts?a=b"), ".ts?a=b");
+ * assertEquals(extname("https://deno.land/std/path/mod.ts#header"), ".ts#header");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `extname` from `@std/path/posix/unstable-extname`.
+ *
+ * @param path The path to get the extension from.
+ * @returns The extension (ex. for `file.ts` returns `.ts`).
+ */ export function extname(path) {
+ assertPath(path);
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ for(let i = path.length - 1; i >= 0; --i){
+ const code = path.charCodeAt(i);
+ if (isPosixPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ return "";
+ }
+ return path.slice(startDot, end);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9leHRuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfRE9UIH0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRQYXRoIH0gZnJvbSBcIi4uL19jb21tb24vYXNzZXJ0X3BhdGgudHNcIjtcbmltcG9ydCB7IGlzUG9zaXhQYXRoU2VwYXJhdG9yIH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgIHdpdGggbGVhZGluZyBwZXJpb2QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9leHRuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZXh0bmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL2ZpbGUudHNcIiksIFwiLnRzXCIpO1xuICogYXNzZXJ0RXF1YWxzKGV4dG5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9cIiksIFwiXCIpO1xuICogYXNzZXJ0RXF1YWxzKGV4dG5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9pbWFnZS5wbmdcIiksIFwiLnBuZ1wiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdvcmtpbmcgd2l0aCBVUkxzXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc3RyaXAgaGFzaCBhbmQgcXVlcnkgcGFydHMgZnJvbVxuICogVVJMcy4gSWYgeW91ciBVUkwgY29udGFpbnMgYSBoYXNoIG9yIHF1ZXJ5LCByZW1vdmUgdGhlbSBiZWZvcmUgcGFzc2luZyB0aGVcbiAqIFVSTCB0byB0aGUgZnVuY3Rpb24uIFRoaXMgY2FuIGJlIGRvbmUgYnkgcGFzc2luZyB0aGUgVVJMIHRvIGBuZXcgVVJMKHVybClgLFxuICogYW5kIHNldHRpbmcgdGhlIGBoYXNoYCBhbmQgYHNlYXJjaGAgcHJvcGVydGllcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9leHRuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZXh0bmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50c1wiKSwgXCIudHNcIik7XG4gKiBhc3NlcnRFcXVhbHMoZXh0bmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50cz9hPWJcIiksIFwiLnRzP2E9YlwiKTtcbiAqIGFzc2VydEVxdWFscyhleHRuYW1lKFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL3BhdGgvbW9kLnRzI2hlYWRlclwiKSwgXCIudHMjaGVhZGVyXCIpO1xuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgZXh0bmFtZWAgZnJvbSBgQHN0ZC9wYXRoL3Bvc2l4L3Vuc3RhYmxlLWV4dG5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgZXh0ZW5zaW9uIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIChleC4gZm9yIGBmaWxlLnRzYCByZXR1cm5zIGAudHNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dG5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFFBQVEsUUFBUSwwQkFBMEI7QUFDbkQsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtDQyxHQUNELE9BQU8sU0FBUyxRQUFRLElBQVk7RUFDbEMsV0FBVztFQUVYLElBQUksV0FBVyxDQUFDO0VBQ2hCLElBQUksWUFBWTtFQUNoQixJQUFJLE1BQU0sQ0FBQztFQUNYLElBQUksZUFBZTtFQUNuQix5RUFBeUU7RUFDekUsbUNBQW1DO0VBQ25DLElBQUksY0FBYztFQUNsQixJQUFLLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUc7SUFDekMsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzdCLElBQUkscUJBQXFCLE9BQU87TUFDOUIsb0VBQW9FO01BQ3BFLGdEQUFnRDtNQUNoRCxJQUFJLENBQUMsY0FBYztRQUNqQixZQUFZLElBQUk7UUFDaEI7TUFDRjtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO01BQ2QsbUVBQW1FO01BQ25FLFlBQVk7TUFDWixlQUFlO01BQ2YsTUFBTSxJQUFJO0lBQ1o7SUFDQSxJQUFJLFNBQVMsVUFBVTtNQUNyQixrRUFBa0U7TUFDbEUsSUFBSSxhQUFhLENBQUMsR0FBRyxXQUFXO1dBQzNCLElBQUksZ0JBQWdCLEdBQUcsY0FBYztJQUM1QyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUc7TUFDMUIsdUVBQXVFO01BQ3ZFLHFEQUFxRDtNQUNyRCxjQUFjLENBQUM7SUFDakI7RUFDRjtFQUVBLElBQ0UsYUFBYSxDQUFDLEtBQ2QsUUFBUSxDQUFDLEtBQ1Qsd0RBQXdEO0VBQ3hELGdCQUFnQixLQUNoQiwwREFBMEQ7RUFDekQsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0lBQ0EsT0FBTztFQUNUO0VBQ0EsT0FBTyxLQUFLLEtBQUssQ0FBQyxVQUFVO0FBQzlCIn0=
+// denoCacheMetadata=4909561769633644580,14739786232708423379 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ab3237661902e46b66589337c5a061918baf367104349b90dd7f910f683eba6b.js b/vendor/gen/https/jsr.io/ab3237661902e46b66589337c5a061918baf367104349b90dd7f910f683eba6b.js
new file mode 100644
index 0000000..25c54a5
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ab3237661902e46b66589337c5a061918baf367104349b90dd7f910f683eba6b.js
@@ -0,0 +1,12 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const seq = {
+ tag: "tag:yaml.org,2002:seq",
+ kind: "sequence",
+ resolve: ()=>true,
+ construct: (data)=>data !== null ? data : []
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9zZXEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBzZXE6IFR5cGU8XCJzZXF1ZW5jZVwiLCB1bmtub3duW10+ID0ge1xuICB0YWc6IFwidGFnOnlhbWwub3JnLDIwMDI6c2VxXCIsXG4gIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgcmVzb2x2ZTogKCk6IGJvb2xlYW4gPT4gdHJ1ZSxcbiAgY29uc3RydWN0OiAoZGF0YTogdW5rbm93bltdIHwgbnVsbCk6IHVua25vd25bXSA9PiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsT0FBTyxNQUFNLE1BQW1DO0VBQzlDLEtBQUs7RUFDTCxNQUFNO0VBQ04sU0FBUyxJQUFlO0VBQ3hCLFdBQVcsQ0FBQyxPQUFzQyxTQUFTLE9BQU8sT0FBTyxFQUFFO0FBQzdFLEVBQUUifQ==
+// denoCacheMetadata=4698891668754298029,4361321976901046884 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ab6c32e2d05c70692da93963f74d258531b9f3d9776bddc3afc7421a2d8ec309.js b/vendor/gen/https/jsr.io/ab6c32e2d05c70692da93963f74d258531b9f3d9776bddc3afc7421a2d8ec309.js
new file mode 100644
index 0000000..7af243b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ab6c32e2d05c70692da93963f74d258531b9f3d9776bddc3afc7421a2d8ec309.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { _format, assertArg } from "../_common/format.ts";
+/**
+ * Generate a path from `ParsedPath` object.
+ *
+ * @example Usage
+ * ```ts
+ * import { format } from "@std/path/windows/format";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = format({
+ * root: "C:\\",
+ * dir: "C:\\path\\dir",
+ * base: "file.txt",
+ * ext: ".txt",
+ * name: "file"
+ * });
+ * assertEquals(path, "C:\\path\\dir\\file.txt");
+ * ```
+ *
+ * @param pathObject The path object to format.
+ * @returns The formatted path.
+ */ export function format(pathObject) {
+ assertArg(pathObject);
+ return _format("\\", pathObject);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2Zvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBfZm9ybWF0LCBhc3NlcnRBcmcgfSBmcm9tIFwiLi4vX2NvbW1vbi9mb3JtYXQudHNcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkUGF0aCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcGF0aCBmcm9tIGBQYXJzZWRQYXRoYCBvYmplY3QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvZm9ybWF0XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gZm9ybWF0KHtcbiAqICAgcm9vdDogXCJDOlxcXFxcIixcbiAqICAgZGlyOiBcIkM6XFxcXHBhdGhcXFxcZGlyXCIsXG4gKiAgIGJhc2U6IFwiZmlsZS50eHRcIixcbiAqICAgZXh0OiBcIi50eHRcIixcbiAqICAgbmFtZTogXCJmaWxlXCJcbiAqIH0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiQzpcXFxccGF0aFxcXFxkaXJcXFxcZmlsZS50eHRcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aE9iamVjdCBUaGUgcGF0aCBvYmplY3QgdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Q6IFBhcnRpYWw8UGFyc2VkUGF0aD4pOiBzdHJpbmcge1xuICBhc3NlcnRBcmcocGF0aE9iamVjdCk7XG4gIHJldHVybiBfZm9ybWF0KFwiXFxcXFwiLCBwYXRoT2JqZWN0KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsT0FBTyxFQUFFLFNBQVMsUUFBUSx1QkFBdUI7QUFHMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0JDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sVUFBK0I7RUFDcEQsVUFBVTtFQUNWLE9BQU8sUUFBUSxNQUFNO0FBQ3ZCIn0=
+// denoCacheMetadata=325087174280104060,4857616609680617316 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ac4da3110b73ce8297daa0a53bd9810ec5f816c9151e9ccbd645543af0af5936.js b/vendor/gen/https/jsr.io/ac4da3110b73ce8297daa0a53bd9810ec5f816c9151e9ccbd645543af0af5936.js
new file mode 100644
index 0000000..86109cb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ac4da3110b73ce8297daa0a53bd9810ec5f816c9151e9ccbd645543af0af5936.js
@@ -0,0 +1,18 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export function detach(buffer, maxSize) {
+ const originalSize = buffer.length;
+ if (buffer.byteOffset) {
+ const b = new Uint8Array(buffer.buffer);
+ b.set(buffer);
+ buffer = b.subarray(0, originalSize);
+ }
+ // deno-lint-ignore no-explicit-any
+ buffer = new Uint8Array(buffer.buffer.transfer(maxSize));
+ buffer.set(buffer.subarray(0, originalSize), maxSize - originalSize);
+ return [
+ buffer,
+ maxSize - originalSize
+ ];
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL19jb21tb25fZGV0YWNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB0eXBlIHsgVWludDhBcnJheV8gfSBmcm9tIFwiLi9fdHlwZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVWludDhBcnJheV8gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRldGFjaChcbiAgYnVmZmVyOiBVaW50OEFycmF5XyxcbiAgbWF4U2l6ZTogbnVtYmVyLFxuKTogW1VpbnQ4QXJyYXlfLCBudW1iZXJdIHtcbiAgY29uc3Qgb3JpZ2luYWxTaXplID0gYnVmZmVyLmxlbmd0aDtcbiAgaWYgKGJ1ZmZlci5ieXRlT2Zmc2V0KSB7XG4gICAgY29uc3QgYiA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlci5idWZmZXIpO1xuICAgIGIuc2V0KGJ1ZmZlcik7XG4gICAgYnVmZmVyID0gYi5zdWJhcnJheSgwLCBvcmlnaW5hbFNpemUpO1xuICB9XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KChidWZmZXIuYnVmZmVyIGFzIGFueSkudHJhbnNmZXIobWF4U2l6ZSkpO1xuICBidWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBvcmlnaW5hbFNpemUpLCBtYXhTaXplIC0gb3JpZ2luYWxTaXplKTtcbiAgcmV0dXJuIFtidWZmZXIsIG1heFNpemUgLSBvcmlnaW5hbFNpemVdO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUtyRCxPQUFPLFNBQVMsT0FDZCxNQUFtQixFQUNuQixPQUFlO0VBRWYsTUFBTSxlQUFlLE9BQU8sTUFBTTtFQUNsQyxJQUFJLE9BQU8sVUFBVSxFQUFFO0lBQ3JCLE1BQU0sSUFBSSxJQUFJLFdBQVcsT0FBTyxNQUFNO0lBQ3RDLEVBQUUsR0FBRyxDQUFDO0lBQ04sU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHO0VBQ3pCO0VBQ0EsbUNBQW1DO0VBQ25DLFNBQVMsSUFBSSxXQUFXLEFBQUMsT0FBTyxNQUFNLENBQVMsUUFBUSxDQUFDO0VBQ3hELE9BQU8sR0FBRyxDQUFDLE9BQU8sUUFBUSxDQUFDLEdBQUcsZUFBZSxVQUFVO0VBQ3ZELE9BQU87SUFBQztJQUFRLFVBQVU7R0FBYTtBQUN6QyJ9
+// denoCacheMetadata=16969328755599606704,9226857896741293420 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ace2f4cea3ca89beea78967ace279c6700de0309d3258a49191432b548ac22b2.js b/vendor/gen/https/jsr.io/ace2f4cea3ca89beea78967ace279c6700de0309d3258a49191432b548ac22b2.js
new file mode 100644
index 0000000..861e278
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ace2f4cea3ca89beea78967ace279c6700de0309d3258a49191432b548ac22b2.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { _format, assertArg } from "../_common/format.ts";
+/**
+ * Generate a path from `ParsedPath` object.
+ *
+ * @example Usage
+ * ```ts
+ * import { format } from "@std/path/windows/format";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = format({
+ * root: "C:\\",
+ * dir: "C:\\path\\dir",
+ * base: "file.txt",
+ * ext: ".txt",
+ * name: "file"
+ * });
+ * assertEquals(path, "C:\\path\\dir\\file.txt");
+ * ```
+ *
+ * @param pathObject The path object to format.
+ * @returns The formatted path.
+ */ export function format(pathObject) {
+ assertArg(pathObject);
+ return _format("\\", pathObject);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2Zvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBfZm9ybWF0LCBhc3NlcnRBcmcgfSBmcm9tIFwiLi4vX2NvbW1vbi9mb3JtYXQudHNcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkUGF0aCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcGF0aCBmcm9tIGBQYXJzZWRQYXRoYCBvYmplY3QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvZm9ybWF0XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBwYXRoID0gZm9ybWF0KHtcbiAqICAgcm9vdDogXCJDOlxcXFxcIixcbiAqICAgZGlyOiBcIkM6XFxcXHBhdGhcXFxcZGlyXCIsXG4gKiAgIGJhc2U6IFwiZmlsZS50eHRcIixcbiAqICAgZXh0OiBcIi50eHRcIixcbiAqICAgbmFtZTogXCJmaWxlXCJcbiAqIH0pO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiQzpcXFxccGF0aFxcXFxkaXJcXFxcZmlsZS50eHRcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aE9iamVjdCBUaGUgcGF0aCBvYmplY3QgdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Q6IFBhcnRpYWw8UGFyc2VkUGF0aD4pOiBzdHJpbmcge1xuICBhc3NlcnRBcmcocGF0aE9iamVjdCk7XG4gIHJldHVybiBfZm9ybWF0KFwiXFxcXFwiLCBwYXRoT2JqZWN0KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsT0FBTyxFQUFFLFNBQVMsUUFBUSx1QkFBdUI7QUFHMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0JDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sVUFBK0I7RUFDcEQsVUFBVTtFQUNWLE9BQU8sUUFBUSxNQUFNO0FBQ3ZCIn0=
+// denoCacheMetadata=8074912514892475318,11379597361437491070 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ad40331effdde59acb79f761b463e2be34bd07e4d6320c9cc305fa0598df503c.js b/vendor/gen/https/jsr.io/ad40331effdde59acb79f761b463e2be34bd07e4d6320c9cc305fa0598df503c.js
new file mode 100644
index 0000000..0008741
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ad40331effdde59acb79f761b463e2be34bd07e4d6320c9cc305fa0598df503c.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { dirname as posixDirname } from "./posix/dirname.ts";
+import { dirname as windowsDirname } from "./windows/dirname.ts";
+/**
+ * Return the directory path of a path.
+ *
+ * @example Usage
+ * ```ts
+ * import { dirname } from "@std/path/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(dirname("C:\\home\\user\\Documents\\image.png"), "C:\\home\\user\\Documents");
+ * } else {
+ * assertEquals(dirname("/home/user/Documents/image.png"), "/home/user/Documents");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `dirname` from `@std/path/unstable-dirname`.
+ *
+ * @param path Path to extract the directory from.
+ * @returns The directory path.
+ */ export function dirname(path) {
+ return isWindows ? windowsDirname(path) : posixDirname(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9kaXJuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgZGlybmFtZSBhcyBwb3NpeERpcm5hbWUgfSBmcm9tIFwiLi9wb3NpeC9kaXJuYW1lLnRzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIGFzIHdpbmRvd3NEaXJuYW1lIH0gZnJvbSBcIi4vd2luZG93cy9kaXJuYW1lLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaXJlY3RvcnkgcGF0aCBvZiBhIHBhdGguXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9kaXJuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCJDOlxcXFxob21lXFxcXHVzZXJcXFxcRG9jdW1lbnRzXFxcXGltYWdlLnBuZ1wiKSwgXCJDOlxcXFxob21lXFxcXHVzZXJcXFxcRG9jdW1lbnRzXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9pbWFnZS5wbmdcIiksIFwiL2hvbWUvdXNlci9Eb2N1bWVudHNcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBkaXJuYW1lYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtZGlybmFtZWAuXG4gKlxuICogQHBhcmFtIHBhdGggUGF0aCB0byBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBkaXJlY3RvcnkgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHdpbmRvd3NEaXJuYW1lKHBhdGgpIDogcG9zaXhEaXJuYW1lKHBhdGgpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTLFdBQVcsWUFBWSxRQUFRLHFCQUFxQjtBQUM3RCxTQUFTLFdBQVcsY0FBYyxRQUFRLHVCQUF1QjtBQUVqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FDRCxPQUFPLFNBQVMsUUFBUSxJQUFZO0VBQ2xDLE9BQU8sWUFBWSxlQUFlLFFBQVEsYUFBYTtBQUN6RCJ9
+// denoCacheMetadata=15225118082755478057,1126276011200736964 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/adbe56f42ba4cca03a81cd613a1d391e8baab107c8ef28d55be2b0cf3522c7a1.js b/vendor/gen/https/jsr.io/adbe56f42ba4cca03a81cd613a1d391e8baab107c8ef28d55be2b0cf3522c7a1.js
new file mode 100644
index 0000000..8969bfb
--- /dev/null
+++ b/vendor/gen/https/jsr.io/adbe56f42ba4cca03a81cd613a1d391e8baab107c8ef28d55be2b0cf3522c7a1.js
@@ -0,0 +1,28 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { toNamespacedPath as posixToNamespacedPath } from "./posix/to_namespaced_path.ts";
+import { toNamespacedPath as windowsToNamespacedPath } from "./windows/to_namespaced_path.ts";
+/**
+ * Resolves path to a namespace path. This is a no-op on
+ * non-windows systems.
+ *
+ * @example Usage
+ * ```ts
+ * import { toNamespacedPath } from "@std/path/to-namespaced-path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(toNamespacedPath("C:\\foo\\bar"), "\\\\?\\C:\\foo\\bar");
+ * } else {
+ * assertEquals(toNamespacedPath("/foo/bar"), "/foo/bar");
+ * }
+ * ```
+ *
+ * @param path Path to resolve to namespace.
+ * @returns The resolved namespace path.
+ */ export function toNamespacedPath(path) {
+ return isWindows ? windowsToNamespacedPath(path) : posixToNamespacedPath(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC90b19uYW1lc3BhY2VkX3BhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyB0b05hbWVzcGFjZWRQYXRoIGFzIHBvc2l4VG9OYW1lc3BhY2VkUGF0aCB9IGZyb20gXCIuL3Bvc2l4L3RvX25hbWVzcGFjZWRfcGF0aC50c1wiO1xuaW1wb3J0IHsgdG9OYW1lc3BhY2VkUGF0aCBhcyB3aW5kb3dzVG9OYW1lc3BhY2VkUGF0aCB9IGZyb20gXCIuL3dpbmRvd3MvdG9fbmFtZXNwYWNlZF9wYXRoLnRzXCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgcGF0aCB0byBhIG5hbWVzcGFjZSBwYXRoLiAgVGhpcyBpcyBhIG5vLW9wIG9uXG4gKiBub24td2luZG93cyBzeXN0ZW1zLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdG9OYW1lc3BhY2VkUGF0aCB9IGZyb20gXCJAc3RkL3BhdGgvdG8tbmFtZXNwYWNlZC1wYXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHRvTmFtZXNwYWNlZFBhdGgoXCJDOlxcXFxmb29cXFxcYmFyXCIpLCBcIlxcXFxcXFxcP1xcXFxDOlxcXFxmb29cXFxcYmFyXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHRvTmFtZXNwYWNlZFBhdGgoXCIvZm9vL2JhclwiKSwgXCIvZm9vL2JhclwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gcmVzb2x2ZSB0byBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgbmFtZXNwYWNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpc1dpbmRvd3NcbiAgICA/IHdpbmRvd3NUb05hbWVzcGFjZWRQYXRoKHBhdGgpXG4gICAgOiBwb3NpeFRvTmFtZXNwYWNlZFBhdGgocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsb0JBQW9CLHFCQUFxQixRQUFRLGdDQUFnQztBQUMxRixTQUFTLG9CQUFvQix1QkFBdUIsUUFBUSxrQ0FBa0M7QUFFOUY7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUNELE9BQU8sU0FBUyxpQkFBaUIsSUFBWTtFQUMzQyxPQUFPLFlBQ0gsd0JBQXdCLFFBQ3hCLHNCQUFzQjtBQUM1QiJ9
+// denoCacheMetadata=178040108035893669,3128329074107370035 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/adc27699f317593c105ce7d06e41bb85f370a37936d5b65a49d55363fb52a133.js b/vendor/gen/https/jsr.io/adc27699f317593c105ce7d06e41bb85f370a37936d5b65a49d55363fb52a133.js
new file mode 100644
index 0000000..48b2d73
--- /dev/null
+++ b/vendor/gen/https/jsr.io/adc27699f317593c105ce7d06e41bb85f370a37936d5b65a49d55363fb52a133.js
@@ -0,0 +1,14 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+import { fromFileUrl } from "jsr:@std/path@^1.0.9/from-file-url";
+/**
+ * Convert a URL or string to a path.
+ *
+ * @param pathUrl A URL or string to be converted.
+ *
+ * @returns The path as a string.
+ */ export function toPathString(pathUrl) {
+ return pathUrl instanceof URL ? fromFileUrl(pathUrl) : pathUrl;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L190b19wYXRoX3N0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9mcm9tLWZpbGUtdXJsXCI7XG5cbi8qKlxuICogQ29udmVydCBhIFVSTCBvciBzdHJpbmcgdG8gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoVXJsIEEgVVJMIG9yIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKlxuICogQHJldHVybnMgVGhlIHBhdGggYXMgYSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhdGhTdHJpbmcoXG4gIHBhdGhVcmw6IHN0cmluZyB8IFVSTCxcbik6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoVXJsIGluc3RhbmNlb2YgVVJMID8gZnJvbUZpbGVVcmwocGF0aFVybCkgOiBwYXRoVXJsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFFakQsU0FBUyxXQUFXLFFBQVEscUNBQXFDO0FBRWpFOzs7Ozs7Q0FNQyxHQUNELE9BQU8sU0FBUyxhQUNkLE9BQXFCO0VBRXJCLE9BQU8sbUJBQW1CLE1BQU0sWUFBWSxXQUFXO0FBQ3pEIn0=
+// denoCacheMetadata=15691150200374183696,13481751721364558662 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/aec75bce0faff15bda446d4f6e5b7f6a678d38af88aa5c7d98969ce9fdcbf265.js b/vendor/gen/https/jsr.io/aec75bce0faff15bda446d4f6e5b7f6a678d38af88aa5c7d98969ce9fdcbf265.js
new file mode 100644
index 0000000..54b7bf6
--- /dev/null
+++ b/vendor/gen/https/jsr.io/aec75bce0faff15bda446d4f6e5b7f6a678d38af88aa5c7d98969ce9fdcbf265.js
@@ -0,0 +1,19 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+/**
+ * Tools for creating interactive command line tools.
+ *
+ * ```ts
+ * import { parseArgs } from "@std/cli/parse-args";
+ * import { assertEquals } from "@std/assert";
+ *
+ * // Same as running `deno run example.ts --foo --bar=baz ./quux.txt`
+ * const args = parseArgs(["--foo", "--bar=baz", "./quux.txt"]);
+ * assertEquals(args, { foo: true, bar: "baz", _: ["./quux.txt"] });
+ * ```
+ *
+ * @module
+ */ export * from "./parse_args.ts";
+export * from "./prompt_secret.ts";
+export * from "./unicode_width.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY2xpLzEuMC4xNy9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuLyoqXG4gKiBUb29scyBmb3IgY3JlYXRpbmcgaW50ZXJhY3RpdmUgY29tbWFuZCBsaW5lIHRvb2xzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiQHN0ZC9jbGkvcGFyc2UtYXJnc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogLy8gU2FtZSBhcyBydW5uaW5nIGBkZW5vIHJ1biBleGFtcGxlLnRzIC0tZm9vIC0tYmFyPWJheiAuL3F1dXgudHh0YFxuICogY29uc3QgYXJncyA9IHBhcnNlQXJncyhbXCItLWZvb1wiLCBcIi0tYmFyPWJhelwiLCBcIi4vcXV1eC50eHRcIl0pO1xuICogYXNzZXJ0RXF1YWxzKGFyZ3MsIHsgZm9vOiB0cnVlLCBiYXI6IFwiYmF6XCIsIF86IFtcIi4vcXV1eC50eHRcIl0gfSk7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2VfYXJncy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvbXB0X3NlY3JldC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5pY29kZV93aWR0aC50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUVyRDs7Ozs7Ozs7Ozs7OztDQWFDLEdBRUQsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxxQkFBcUIifQ==
+// denoCacheMetadata=9010700552710304313,18037737167321663845 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/afa9cfe71a94297bb0a232341d4d1993b5bf6eafdf88867dd1a5c0d45b7f535c.js b/vendor/gen/https/jsr.io/afa9cfe71a94297bb0a232341d4d1993b5bf6eafdf88867dd1a5c0d45b7f535c.js
new file mode 100644
index 0000000..0364dae
--- /dev/null
+++ b/vendor/gen/https/jsr.io/afa9cfe71a94297bb0a232341d4d1993b5bf6eafdf88867dd1a5c0d45b7f535c.js
@@ -0,0 +1,50 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { extract as extractToml } from "./toml.ts";
+import { extract as extractYaml } from "./yaml.ts";
+import { extract as extractJson } from "./json.ts";
+import { RECOGNIZE_REGEXP_MAP } from "./_formats.ts";
+/**
+ * Extracts and parses {@link https://yaml.org | YAML}, {@link https://toml.io |
+ * TOML}, or {@link https://www.json.org/ | JSON} from the metadata of front
+ * matter content, depending on the format.
+ *
+ * @example Usage
+ * ```ts
+ * import { extract } from "@std/front-matter/any";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const output = `---json
+ * {
+ * "title": "Three dashes marks the spot"
+ * }
+ * ---
+ * Hello, world!`;
+ * const result = extract(output);
+ * assertEquals(result, {
+ * frontMatter: '{\n "title": "Three dashes marks the spot"\n}',
+ * body: "Hello, world!",
+ * attrs: { title: "Three dashes marks the spot" }
+ * })
+ * ```
+ *
+ * @typeParam T The type of the parsed front matter.
+ * @param text The text to extract front matter from.
+ * @returns The extracted front matter and body content.
+ */ export function extract(text) {
+ const format = [
+ ...RECOGNIZE_REGEXP_MAP.entries()
+ ].find(([_, regexp])=>regexp.test(text))?.[0];
+ switch(format){
+ case "yaml":
+ return extractYaml(text);
+ case "toml":
+ return extractToml(text);
+ case "json":
+ return extractJson(text);
+ default:
+ throw new TypeError("Unsupported front matter format");
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L2FueS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBleHRyYWN0IGFzIGV4dHJhY3RUb21sIH0gZnJvbSBcIi4vdG9tbC50c1wiO1xuaW1wb3J0IHsgZXh0cmFjdCBhcyBleHRyYWN0WWFtbCB9IGZyb20gXCIuL3lhbWwudHNcIjtcbmltcG9ydCB7IGV4dHJhY3QgYXMgZXh0cmFjdEpzb24gfSBmcm9tIFwiLi9qc29uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3QgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuaW1wb3J0IHsgUkVDT0dOSVpFX1JFR0VYUF9NQVAgfSBmcm9tIFwiLi9fZm9ybWF0cy50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEV4dHJhY3QgfTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgcGFyc2VzIHtAbGluayBodHRwczovL3lhbWwub3JnIHwgWUFNTH0sIHtAbGluayBodHRwczovL3RvbWwuaW8gfFxuICogVE9NTH0sIG9yIHtAbGluayBodHRwczovL3d3dy5qc29uLm9yZy8gfCBKU09OfSBmcm9tIHRoZSBtZXRhZGF0YSBvZiBmcm9udFxuICogbWF0dGVyIGNvbnRlbnQsIGRlcGVuZGluZyBvbiB0aGUgZm9ybWF0LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZXh0cmFjdCB9IGZyb20gXCJAc3RkL2Zyb250LW1hdHRlci9hbnlcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IG91dHB1dCA9IGAtLS1qc29uXG4gKiB7XG4gKiAgIFwidGl0bGVcIjogXCJUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3RcIlxuICogfVxuICogLS0tXG4gKiBIZWxsbywgd29ybGQhYDtcbiAqIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3Qob3V0cHV0KTtcbiAqIGFzc2VydEVxdWFscyhyZXN1bHQsIHtcbiAqICAgZnJvbnRNYXR0ZXI6ICd7XFxuICBcInRpdGxlXCI6IFwiVGhyZWUgZGFzaGVzIG1hcmtzIHRoZSBzcG90XCJcXG59JyxcbiAqICAgYm9keTogXCJIZWxsbywgd29ybGQhXCIsXG4gKiAgIGF0dHJzOiB7IHRpdGxlOiBcIlRocmVlIGRhc2hlcyBtYXJrcyB0aGUgc3BvdFwiIH1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIFQgVGhlIHR5cGUgb2YgdGhlIHBhcnNlZCBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBleHRyYWN0IGZyb250IG1hdHRlciBmcm9tLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBmcm9udCBtYXR0ZXIgYW5kIGJvZHkgY29udGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3Q8VD4odGV4dDogc3RyaW5nKTogRXh0cmFjdDxUPiB7XG4gIGNvbnN0IGZvcm1hdCA9IFsuLi5SRUNPR05JWkVfUkVHRVhQX01BUC5lbnRyaWVzKCldXG4gICAgLmZpbmQoKFtfLCByZWdleHBdKSA9PiByZWdleHAudGVzdCh0ZXh0KSk/LlswXTtcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwieWFtbFwiOlxuICAgICAgcmV0dXJuIGV4dHJhY3RZYW1sPFQ+KHRleHQpO1xuICAgIGNhc2UgXCJ0b21sXCI6XG4gICAgICByZXR1cm4gZXh0cmFjdFRvbWw8VD4odGV4dCk7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBleHRyYWN0SnNvbjxUPih0ZXh0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIGZyb250IG1hdHRlciBmb3JtYXRcIik7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsV0FBVyxXQUFXLFFBQVEsWUFBWTtBQUNuRCxTQUFTLFdBQVcsV0FBVyxRQUFRLFlBQVk7QUFDbkQsU0FBUyxXQUFXLFdBQVcsUUFBUSxZQUFZO0FBRW5ELFNBQVMsb0JBQW9CLFFBQVEsZ0JBQWdCO0FBSXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EyQkMsR0FDRCxPQUFPLFNBQVMsUUFBVyxJQUFZO0VBQ3JDLE1BQU0sU0FBUztPQUFJLHFCQUFxQixPQUFPO0dBQUcsQ0FDL0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtFQUNoRCxPQUFRO0lBQ04sS0FBSztNQUNILE9BQU8sWUFBZTtJQUN4QixLQUFLO01BQ0gsT0FBTyxZQUFlO0lBQ3hCLEtBQUs7TUFDSCxPQUFPLFlBQWU7SUFDeEI7TUFDRSxNQUFNLElBQUksVUFBVTtFQUN4QjtBQUNGIn0=
+// denoCacheMetadata=11076029336203950732,17691004859422482645 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/afe469936d3857e381b7086a6ecb3f6a7b40a0400c10fa2827a1f0200de57a0f.js b/vendor/gen/https/jsr.io/afe469936d3857e381b7086a6ecb3f6a7b40a0400c10fa2827a1f0200de57a0f.js
new file mode 100644
index 0000000..0424030
--- /dev/null
+++ b/vendor/gen/https/jsr.io/afe469936d3857e381b7086a6ecb3f6a7b40a0400c10fa2827a1f0200de57a0f.js
@@ -0,0 +1,77 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+const YAML_DATE_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])" + // [1] year
+"-([0-9][0-9])" + // [2] month
+"-([0-9][0-9])$");
+const YAML_TIMESTAMP_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])" + // [1] year
+"-([0-9][0-9]?)" + // [2] month
+"-([0-9][0-9]?)" + // [3] day
+"(?:[Tt]|[ \\t]+)" + // ...
+"([0-9][0-9]?)" + // [4] hour
+":([0-9][0-9])" + // [5] minute
+":([0-9][0-9])" + // [6] second
+"(?:\\.([0-9]*))?" + // [7] fraction
+"(?:[ \\t]*(Z|([-+])([0-9][0-9]?)" + // [8] tz [9] tz_sign [10] tz_hour
+"(?::([0-9][0-9]))?))?$");
+function resolveYamlTimestamp(data) {
+ if (data === null) return false;
+ if (YAML_DATE_REGEXP.exec(data) !== null) return true;
+ if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;
+ return false;
+}
+function constructYamlTimestamp(data) {
+ let match = YAML_DATE_REGEXP.exec(data);
+ if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);
+ if (match === null) {
+ throw new Error("Cannot construct YAML timestamp: date resolve error");
+ }
+ // match: [1] year [2] month [3] day
+ const year = +match[1];
+ const month = +match[2] - 1; // JS month starts with 0
+ const day = +match[3];
+ if (!match[4]) {
+ // no hour
+ return new Date(Date.UTC(year, month, day));
+ }
+ // match: [4] hour [5] minute [6] second [7] fraction
+ const hour = +match[4];
+ const minute = +match[5];
+ const second = +match[6];
+ let fraction = 0;
+ if (match[7]) {
+ let partFraction = match[7].slice(0, 3);
+ while(partFraction.length < 3){
+ // milli-seconds
+ partFraction += "0";
+ }
+ fraction = +partFraction;
+ }
+ // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
+ let delta = null;
+ if (match[9] && match[10]) {
+ const tzHour = +match[10];
+ const tzMinute = +(match[11] || 0);
+ delta = (tzHour * 60 + tzMinute) * 60000; // delta in milli-seconds
+ if (match[9] === "-") delta = -delta;
+ }
+ const date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
+ if (delta) date.setTime(date.getTime() - delta);
+ return date;
+}
+function representYamlTimestamp(date) {
+ return date.toISOString();
+}
+export const timestamp = {
+ tag: "tag:yaml.org,2002:timestamp",
+ construct: constructYamlTimestamp,
+ predicate (object) {
+ return object instanceof Date;
+ },
+ kind: "scalar",
+ represent: representYamlTimestamp,
+ resolve: resolveYamlTimestamp
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS90aW1lc3RhbXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmNvbnN0IFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICBcIl4oWzAtOV1bMC05XVswLTldWzAtOV0pXCIgKyAvLyBbMV0geWVhclxuICAgIFwiLShbMC05XVswLTldKVwiICsgLy8gWzJdIG1vbnRoXG4gICAgXCItKFswLTldWzAtOV0pJFwiLCAvLyBbM10gZGF5XG4pO1xuXG5jb25zdCBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICBcIl4oWzAtOV1bMC05XVswLTldWzAtOV0pXCIgKyAvLyBbMV0geWVhclxuICAgIFwiLShbMC05XVswLTldPylcIiArIC8vIFsyXSBtb250aFxuICAgIFwiLShbMC05XVswLTldPylcIiArIC8vIFszXSBkYXlcbiAgICBcIig/OltUdF18WyBcXFxcdF0rKVwiICsgLy8gLi4uXG4gICAgXCIoWzAtOV1bMC05XT8pXCIgKyAvLyBbNF0gaG91clxuICAgIFwiOihbMC05XVswLTldKVwiICsgLy8gWzVdIG1pbnV0ZVxuICAgIFwiOihbMC05XVswLTldKVwiICsgLy8gWzZdIHNlY29uZFxuICAgIFwiKD86XFxcXC4oWzAtOV0qKSk/XCIgKyAvLyBbN10gZnJhY3Rpb25cbiAgICBcIig/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPylcIiArIC8vIFs4XSB0eiBbOV0gdHpfc2lnbiBbMTBdIHR6X2hvdXJcbiAgICBcIig/OjooWzAtOV1bMC05XSkpPykpPyRcIiwgLy8gWzExXSB0el9taW51dGVcbik7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sVGltZXN0YW1wKGRhdGE6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGE6IHN0cmluZyk6IERhdGUge1xuICBsZXQgbWF0Y2ggPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29uc3RydWN0IFlBTUwgdGltZXN0YW1wOiBkYXRlIHJlc29sdmUgZXJyb3JcIik7XG4gIH1cblxuICAvLyBtYXRjaDogWzFdIHllYXIgWzJdIG1vbnRoIFszXSBkYXlcblxuICBjb25zdCB5ZWFyID0gK21hdGNoWzFdITtcbiAgY29uc3QgbW9udGggPSArbWF0Y2hbMl0hIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBjb25zdCBkYXkgPSArbWF0Y2hbM10hO1xuXG4gIGlmICghbWF0Y2hbNF0pIHtcbiAgICAvLyBubyBob3VyXG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXkpKTtcbiAgfVxuXG4gIC8vIG1hdGNoOiBbNF0gaG91ciBbNV0gbWludXRlIFs2XSBzZWNvbmQgWzddIGZyYWN0aW9uXG5cbiAgY29uc3QgaG91ciA9ICttYXRjaFs0XTtcbiAgY29uc3QgbWludXRlID0gK21hdGNoWzVdITtcbiAgY29uc3Qgc2Vjb25kID0gK21hdGNoWzZdITtcblxuICBsZXQgZnJhY3Rpb24gPSAwO1xuICBpZiAobWF0Y2hbN10pIHtcbiAgICBsZXQgcGFydEZyYWN0aW9uID0gbWF0Y2hbN10uc2xpY2UoMCwgMyk7XG4gICAgd2hpbGUgKHBhcnRGcmFjdGlvbi5sZW5ndGggPCAzKSB7XG4gICAgICAvLyBtaWxsaS1zZWNvbmRzXG4gICAgICBwYXJ0RnJhY3Rpb24gKz0gXCIwXCI7XG4gICAgfVxuICAgIGZyYWN0aW9uID0gK3BhcnRGcmFjdGlvbjtcbiAgfVxuXG4gIC8vIG1hdGNoOiBbOF0gdHogWzldIHR6X3NpZ24gWzEwXSB0el9ob3VyIFsxMV0gdHpfbWludXRlXG5cbiAgbGV0IGRlbHRhID0gbnVsbDtcbiAgaWYgKG1hdGNoWzldICYmIG1hdGNoWzEwXSkge1xuICAgIGNvbnN0IHR6SG91ciA9ICttYXRjaFsxMF07XG4gICAgY29uc3QgdHpNaW51dGUgPSArKG1hdGNoWzExXSB8fCAwKTtcbiAgICBkZWx0YSA9ICh0ekhvdXIgKiA2MCArIHR6TWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxsaS1zZWNvbmRzXG4gICAgaWYgKG1hdGNoWzldID09PSBcIi1cIikgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoXG4gICAgRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSxcbiAgKTtcblxuICBpZiAoZGVsdGEpIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSAtIGRlbHRhKTtcblxuICByZXR1cm4gZGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbFRpbWVzdGFtcChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRpbWVzdGFtcDogVHlwZTxcInNjYWxhclwiLCBEYXRlPiA9IHtcbiAgdGFnOiBcInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcFwiLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsXG4gIHByZWRpY2F0ZShvYmplY3QpOiBvYmplY3QgaXMgRGF0ZSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIERhdGU7XG4gIH0sXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbFRpbWVzdGFtcCxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvRkFBb0Y7QUFDcEYsMEVBQTBFO0FBQzFFLHFEQUFxRDtBQUlyRCxNQUFNLG1CQUFtQixJQUFJLE9BQzNCLDRCQUE0QixXQUFXO0FBQ3JDLGtCQUFrQixZQUFZO0FBQzlCO0FBR0osTUFBTSx3QkFBd0IsSUFBSSxPQUNoQyw0QkFBNEIsV0FBVztBQUNyQyxtQkFBbUIsWUFBWTtBQUMvQixtQkFBbUIsVUFBVTtBQUM3QixxQkFBcUIsTUFBTTtBQUMzQixrQkFBa0IsV0FBVztBQUM3QixrQkFBa0IsYUFBYTtBQUMvQixrQkFBa0IsYUFBYTtBQUMvQixxQkFBcUIsZUFBZTtBQUNwQyxxQ0FBcUMsa0NBQWtDO0FBQ3ZFO0FBR0osU0FBUyxxQkFBcUIsSUFBWTtFQUN4QyxJQUFJLFNBQVMsTUFBTSxPQUFPO0VBQzFCLElBQUksaUJBQWlCLElBQUksQ0FBQyxVQUFVLE1BQU0sT0FBTztFQUNqRCxJQUFJLHNCQUFzQixJQUFJLENBQUMsVUFBVSxNQUFNLE9BQU87RUFDdEQsT0FBTztBQUNUO0FBRUEsU0FBUyx1QkFBdUIsSUFBWTtFQUMxQyxJQUFJLFFBQVEsaUJBQWlCLElBQUksQ0FBQztFQUNsQyxJQUFJLFVBQVUsTUFBTSxRQUFRLHNCQUFzQixJQUFJLENBQUM7RUFFdkQsSUFBSSxVQUFVLE1BQU07SUFDbEIsTUFBTSxJQUFJLE1BQU07RUFDbEI7RUFFQSxvQ0FBb0M7RUFFcEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7RUFDdEIsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBSSxHQUFHLHlCQUF5QjtFQUN2RCxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtFQUVyQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtJQUNiLFVBQVU7SUFDVixPQUFPLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxNQUFNLE9BQU87RUFDeEM7RUFFQSxxREFBcUQ7RUFFckQsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7RUFDdEIsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7RUFDeEIsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7RUFFeEIsSUFBSSxXQUFXO0VBQ2YsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFO0lBQ1osSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDckMsTUFBTyxhQUFhLE1BQU0sR0FBRyxFQUFHO01BQzlCLGdCQUFnQjtNQUNoQixnQkFBZ0I7SUFDbEI7SUFDQSxXQUFXLENBQUM7RUFDZDtFQUVBLHdEQUF3RDtFQUV4RCxJQUFJLFFBQVE7RUFDWixJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtJQUN6QixNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRztJQUN6QixNQUFNLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxRQUFRLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLHlCQUF5QjtJQUNuRSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxRQUFRLENBQUM7RUFDakM7RUFFQSxNQUFNLE9BQU8sSUFBSSxLQUNmLEtBQUssR0FBRyxDQUFDLE1BQU0sT0FBTyxLQUFLLE1BQU0sUUFBUSxRQUFRO0VBR25ELElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLE9BQU8sS0FBSztFQUV6QyxPQUFPO0FBQ1Q7QUFFQSxTQUFTLHVCQUF1QixJQUFVO0VBQ3hDLE9BQU8sS0FBSyxXQUFXO0FBQ3pCO0FBRUEsT0FBTyxNQUFNLFlBQWtDO0VBQzdDLEtBQUs7RUFDTCxXQUFXO0VBQ1gsV0FBVSxNQUFNO0lBQ2QsT0FBTyxrQkFBa0I7RUFDM0I7RUFDQSxNQUFNO0VBQ04sV0FBVztFQUNYLFNBQVM7QUFDWCxFQUFFIn0=
+// denoCacheMetadata=4788307332203501573,17398744267596112357 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b03f1a0b11c99f0a3aab83a25ae3daebe28abed9beafd56072596f8e80c6c58b.js b/vendor/gen/https/jsr.io/b03f1a0b11c99f0a3aab83a25ae3daebe28abed9beafd56072596f8e80c6c58b.js
new file mode 100644
index 0000000..452359d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b03f1a0b11c99f0a3aab83a25ae3daebe28abed9beafd56072596f8e80c6c58b.js
@@ -0,0 +1,48 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+// Alphabet chars.
+export const CHAR_UPPERCASE_A = 65; /* A */
+export const CHAR_LOWERCASE_A = 97; /* a */
+export const CHAR_UPPERCASE_Z = 90; /* Z */
+export const CHAR_LOWERCASE_Z = 122; /* z */
+// Non-alphabetic chars.
+export const CHAR_DOT = 46; /* . */
+export const CHAR_FORWARD_SLASH = 47; /* / */
+export const CHAR_BACKWARD_SLASH = 92; /* \ */
+export const CHAR_VERTICAL_LINE = 124; /* | */
+export const CHAR_COLON = 58; /* : */
+export const CHAR_QUESTION_MARK = 63; /* ? */
+export const CHAR_UNDERSCORE = 95; /* _ */
+export const CHAR_LINE_FEED = 10; /* \n */
+export const CHAR_CARRIAGE_RETURN = 13; /* \r */
+export const CHAR_TAB = 9; /* \t */
+export const CHAR_FORM_FEED = 12; /* \f */
+export const CHAR_EXCLAMATION_MARK = 33; /* ! */
+export const CHAR_HASH = 35; /* # */
+export const CHAR_SPACE = 32; /* */
+export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */
+export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */
+export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */
+export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */
+export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */
+export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */
+export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */
+export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */
+export const CHAR_HYPHEN_MINUS = 45; /* - */
+export const CHAR_PLUS = 43; /* + */
+export const CHAR_DOUBLE_QUOTE = 34; /* " */
+export const CHAR_SINGLE_QUOTE = 39; /* ' */
+export const CHAR_PERCENT = 37; /* % */
+export const CHAR_SEMICOLON = 59; /* ; */
+export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */
+export const CHAR_GRAVE_ACCENT = 96; /* ` */
+export const CHAR_AT = 64; /* @ */
+export const CHAR_AMPERSAND = 38; /* & */
+export const CHAR_EQUAL = 61; /* = */
+// Digits
+export const CHAR_0 = 48; /* 0 */
+export const CHAR_9 = 57; /* 9 */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vLyBBbHBoYWJldCBjaGFycy5cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9BID0gNjU7IC8qIEEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9BID0gOTc7IC8qIGEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9aID0gOTA7IC8qIFogKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9aID0gMTIyOyAvKiB6ICovXG5cbi8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuZXhwb3J0IGNvbnN0IENIQVJfRE9UID0gNDY7IC8qIC4gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUldBUkRfU0xBU0ggPSA0NzsgLyogLyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQkFDS1dBUkRfU0xBU0ggPSA5MjsgLyogXFwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAxMjQ7IC8qIHwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0NPTE9OID0gNTg7IC8qIDogKi9cbmV4cG9ydCBjb25zdCBDSEFSX1FVRVNUSU9OX01BUksgPSA2MzsgLyogPyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfVU5ERVJTQ09SRSA9IDk1OyAvKiBfICovXG5leHBvcnQgY29uc3QgQ0hBUl9MSU5FX0ZFRUQgPSAxMDsgLyogXFxuICovXG5leHBvcnQgY29uc3QgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSAxMzsgLyogXFxyICovXG5leHBvcnQgY29uc3QgQ0hBUl9UQUIgPSA5OyAvKiBcXHQgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUk1fRkVFRCA9IDEyOyAvKiBcXGYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VYQ0xBTUFUSU9OX01BUksgPSAzMzsgLyogISAqL1xuZXhwb3J0IGNvbnN0IENIQVJfSEFTSCA9IDM1OyAvKiAjICovXG5leHBvcnQgY29uc3QgQ0hBUl9TUEFDRSA9IDMyOyAvKiAgICovXG5leHBvcnQgY29uc3QgQ0hBUl9OT19CUkVBS19TUEFDRSA9IDE2MDsgLyogXFx1MDBBMCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFID0gNjUyNzk7IC8qIFxcdUZFRkYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgPSA5MTsgLyogWyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSA5MzsgLyogXSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUID0gNjA7IC8qIDwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQgPSA2MjsgLyogPiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUID0gMTIzOyAvKiB7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OyAvKiB9ICovXG5leHBvcnQgY29uc3QgQ0hBUl9IWVBIRU5fTUlOVVMgPSA0NTsgLyogLSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUExVUyA9IDQzOyAvKiArICovXG5leHBvcnQgY29uc3QgQ0hBUl9ET1VCTEVfUVVPVEUgPSAzNDsgLyogXCIgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NJTkdMRV9RVU9URSA9IDM5OyAvKiAnICovXG5leHBvcnQgY29uc3QgQ0hBUl9QRVJDRU5UID0gMzc7IC8qICUgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NFTUlDT0xPTiA9IDU5OyAvKiA7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCA9IDk0OyAvKiBeICovXG5leHBvcnQgY29uc3QgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsgLyogYCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQVQgPSA2NDsgLyogQCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQU1QRVJTQU5EID0gMzg7IC8qICYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VRVUFMID0gNjE7IC8qID0gKi9cblxuLy8gRGlnaXRzXG5leHBvcnQgY29uc3QgQ0hBUl8wID0gNDg7IC8qIDAgKi9cbmV4cG9ydCBjb25zdCBDSEFSXzkgPSA1NzsgLyogOSAqL1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxrQkFBa0I7QUFDbEIsT0FBTyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBSztBQUN6QyxPQUFPLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFLO0FBQ3pDLE9BQU8sTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQUs7QUFDekMsT0FBTyxNQUFNLG1CQUFtQixJQUFJLENBQUMsS0FBSztBQUUxQyx3QkFBd0I7QUFDeEIsT0FBTyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUs7QUFDakMsT0FBTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSztBQUMzQyxPQUFPLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFLO0FBQzVDLE9BQU8sTUFBTSxxQkFBcUIsSUFBSSxDQUFDLEtBQUs7QUFDNUMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSztBQUMzQyxPQUFPLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFLO0FBQ3hDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQU07QUFDeEMsT0FBTyxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBTTtBQUM5QyxPQUFPLE1BQU0sV0FBVyxFQUFFLENBQUMsTUFBTTtBQUNqQyxPQUFPLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNO0FBQ3hDLE9BQU8sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQUs7QUFDOUMsT0FBTyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFDbkMsT0FBTyxNQUFNLHNCQUFzQixJQUFJLENBQUMsVUFBVTtBQUNsRCxPQUFPLE1BQU0sZ0NBQWdDLE1BQU0sQ0FBQyxVQUFVO0FBQzlELE9BQU8sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQUs7QUFDakQsT0FBTyxNQUFNLDRCQUE0QixHQUFHLENBQUMsS0FBSztBQUNsRCxPQUFPLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxLQUFLO0FBQ2hELE9BQU8sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQUs7QUFDakQsT0FBTyxNQUFNLDBCQUEwQixJQUFJLENBQUMsS0FBSztBQUNqRCxPQUFPLE1BQU0sMkJBQTJCLElBQUksQ0FBQyxLQUFLO0FBQ2xELE9BQU8sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUs7QUFDMUMsT0FBTyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUs7QUFDbEMsT0FBTyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSztBQUMxQyxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLO0FBQzFDLE9BQU8sTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFLO0FBQ3JDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBSztBQUMvQyxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLO0FBQzFDLE9BQU8sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLO0FBQ2hDLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUs7QUFDdkMsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUs7QUFFbkMsU0FBUztBQUNULE9BQU8sTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLO0FBQy9CLE9BQU8sTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLIn0=
+// denoCacheMetadata=13737898158504449411,8281666398380652731 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b46e482efb61416b06d67206660efaa4111bfb752ff7950d2a7d29feccc31ed8.js b/vendor/gen/https/jsr.io/b46e482efb61416b06d67206660efaa4111bfb752ff7950d2a7d29feccc31ed8.js
new file mode 100644
index 0000000..7c2bef6
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b46e482efb61416b06d67206660efaa4111bfb752ff7950d2a7d29feccc31ed8.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { normalize as posixNormalize } from "./posix/normalize.ts";
+import { normalize as windowsNormalize } from "./windows/normalize.ts";
+/**
+ * Normalize the path, resolving `'..'` and `'.'` segments.
+ *
+ * Note: Resolving these segments does not necessarily mean that all will be
+ * eliminated. A `'..'` at the top-level will be preserved, and an empty path is
+ * canonically `'.'`.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalize } from "@std/path/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(normalize("C:\\foo\\bar\\..\\baz\\quux"), "C:\\foo\\baz\\quux");
+ * } else {
+ * assertEquals(normalize("/foo/bar/../baz/quux"), "/foo/baz/quux");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `normalize` from `@std/path/unstable-normalize`.
+ *
+ * @param path Path to be normalized
+ * @returns The normalized path.
+ */ export function normalize(path) {
+ return isWindows ? windowsNormalize(path) : posixNormalize(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9ub3JtYWxpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemUgYXMgcG9zaXhOb3JtYWxpemUgfSBmcm9tIFwiLi9wb3NpeC9ub3JtYWxpemUudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZSBhcyB3aW5kb3dzTm9ybWFsaXplIH0gZnJvbSBcIi4vd2luZG93cy9ub3JtYWxpemUudHNcIjtcbi8qKlxuICogTm9ybWFsaXplIHRoZSBwYXRoLCByZXNvbHZpbmcgYCcuLidgIGFuZCBgJy4nYCBzZWdtZW50cy5cbiAqXG4gKiBOb3RlOiBSZXNvbHZpbmcgdGhlc2Ugc2VnbWVudHMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGFsbCB3aWxsIGJlXG4gKiBlbGltaW5hdGVkLiBBIGAnLi4nYCBhdCB0aGUgdG9wLWxldmVsIHdpbGwgYmUgcHJlc2VydmVkLCBhbmQgYW4gZW1wdHkgcGF0aCBpc1xuICogY2Fub25pY2FsbHkgYCcuJ2AuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tIFwiQHN0ZC9wYXRoL25vcm1hbGl6ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemUoXCJDOlxcXFxmb29cXFxcYmFyXFxcXC4uXFxcXGJhelxcXFxxdXV4XCIpLCBcIkM6XFxcXGZvb1xcXFxiYXpcXFxccXV1eFwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemUoXCIvZm9vL2Jhci8uLi9iYXovcXV1eFwiKSwgXCIvZm9vL2Jhei9xdXV4XCIpO1xuICogfVxuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgbm9ybWFsaXplYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtbm9ybWFsaXplYC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBQYXRoIHRvIGJlIG5vcm1hbGl6ZWRcbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHdpbmRvd3NOb3JtYWxpemUocGF0aCkgOiBwb3NpeE5vcm1hbGl6ZShwYXRoKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxhQUFhLGNBQWMsUUFBUSx1QkFBdUI7QUFDbkUsU0FBUyxhQUFhLGdCQUFnQixRQUFRLHlCQUF5QjtBQUN2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBd0JDLEdBQ0QsT0FBTyxTQUFTLFVBQVUsSUFBWTtFQUNwQyxPQUFPLFlBQVksaUJBQWlCLFFBQVEsZUFBZTtBQUM3RCJ9
+// denoCacheMetadata=18066234337017903951,4848550183655508090 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b519461d2f80078b67e67a141da6406675a9a13c5f618fa300ba29185b7785b0.js b/vendor/gen/https/jsr.io/b519461d2f80078b67e67a141da6406675a9a13c5f618fa300ba29185b7785b0.js
new file mode 100644
index 0000000..9785d10
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b519461d2f80078b67e67a141da6406675a9a13c5f618fa300ba29185b7785b0.js
@@ -0,0 +1,24 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Verifies whether provided path is absolute.
+ *
+ * @example Usage
+ * ```ts
+ * import { isAbsolute } from "@std/path/posix/is-absolute";
+ * import { assert, assertFalse } from "@std/assert";
+ *
+ * assert(isAbsolute("/home/user/Documents/"));
+ * assertFalse(isAbsolute("home/user/Documents/"));
+ * ```
+ *
+ * @param path The path to verify.
+ * @returns Whether the path is absolute.
+ */ export function isAbsolute(path) {
+ assertPath(path);
+ return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9pc19hYnNvbHV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBhc3NlcnRQYXRoIH0gZnJvbSBcIi4uL19jb21tb24vYXNzZXJ0X3BhdGgudHNcIjtcbmltcG9ydCB7IGlzUG9zaXhQYXRoU2VwYXJhdG9yIH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHByb3ZpZGVkIHBhdGggaXMgYWJzb2x1dGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpc0Fic29sdXRlIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9pcy1hYnNvbHV0ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0LCBhc3NlcnRGYWxzZSB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydChpc0Fic29sdXRlKFwiL2hvbWUvdXNlci9Eb2N1bWVudHMvXCIpKTtcbiAqIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCJob21lL3VzZXIvRG9jdW1lbnRzL1wiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB2ZXJpZnkuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwYXRoIGlzIGFic29sdXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoID4gMCAmJiBpc1Bvc2l4UGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMCkpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLFFBQVEsNEJBQTRCO0FBQ3ZELFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxXQUFXLElBQVk7RUFDckMsV0FBVztFQUNYLE9BQU8sS0FBSyxNQUFNLEdBQUcsS0FBSyxxQkFBcUIsS0FBSyxVQUFVLENBQUM7QUFDakUifQ==
+// denoCacheMetadata=9726472102554170415,3270382341425815551 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b6032b1a54d54ddceef1977651fc7c93aa6aa011bf5e447d7e1ed36d51b9ebd9.js b/vendor/gen/https/jsr.io/b6032b1a54d54ddceef1977651fc7c93aa6aa011bf5e447d7e1ed36d51b9ebd9.js
new file mode 100644
index 0000000..b106fc0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b6032b1a54d54ddceef1977651fc7c93aa6aa011bf5e447d7e1ed36d51b9ebd9.js
@@ -0,0 +1,75 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+// Ported from unicode_width rust crate, Copyright (c) 2015 The Rust Project Developers. MIT license.
+import data from "./_data.json" with {
+ type: "json"
+};
+import { runLengthDecode } from "./_run_length.ts";
+let tables = null;
+function lookupWidth(cp) {
+ if (!tables) tables = data.tables.map(runLengthDecode);
+ const t1Offset = tables[0][cp >> 13 & 0xff];
+ const t2Offset = tables[1][128 * t1Offset + (cp >> 6 & 0x7f)];
+ const packedWidths = tables[2][16 * t2Offset + (cp >> 2 & 0xf)];
+ const width = packedWidths >> 2 * (cp & 0b11) & 0b11;
+ return width === 3 ? 1 : width;
+}
+const cache = new Map();
+function charWidth(char) {
+ if (cache.has(char)) return cache.get(char);
+ const codePoint = char.codePointAt(0);
+ let width = null;
+ if (codePoint < 0x7f) {
+ width = codePoint >= 0x20 ? 1 : codePoint === 0 ? 0 : null;
+ } else if (codePoint >= 0xa0) {
+ width = lookupWidth(codePoint);
+ } else {
+ width = null;
+ }
+ cache.set(char, width);
+ return width;
+}
+/**
+ * Calculate the physical width of a string in a TTY-like environment. This is
+ * useful for cases such as calculating where a line-wrap will occur and
+ * underlining strings.
+ *
+ * The physical width is given by the number of columns required to display
+ * the string. The number of columns a given unicode character occupies can
+ * vary depending on the character itself.
+ *
+ * @param str The string to measure.
+ * @returns The unicode width of the string.
+ *
+ * @example Calculating the unicode width of a string
+ * ```ts
+ * import { unicodeWidth } from "@std/cli/unicode-width";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unicodeWidth("hello world"), 11);
+ * assertEquals(unicodeWidth("天地玄黃宇宙洪荒"), 16);
+ * assertEquals(unicodeWidth("fullwidth"), 18);
+ * ```
+ *
+ * @example Calculating the unicode width of a color-encoded string
+ * ```ts
+ * import { unicodeWidth } from "@std/cli/unicode-width";
+ * import { stripAnsiCode } from "@std/fmt/colors";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unicodeWidth(stripAnsiCode("\x1b[36mголубой\x1b[39m")), 7);
+ * assertEquals(unicodeWidth(stripAnsiCode("\x1b[31m紅色\x1b[39m")), 4);
+ * assertEquals(unicodeWidth(stripAnsiCode("\x1B]8;;https://deno.land\x07🦕\x1B]8;;\x07")), 2);
+ * ```
+ *
+ * Use
+ * {@linkcode https://jsr.io/@std/fmt/doc/colors/~/stripAnsiCode | stripAnsiCode}
+ * to remove ANSI escape codes from a string before passing it to
+ * {@linkcode unicodeWidth}.
+ */ export function unicodeWidth(str) {
+ return [
+ ...str
+ ].map((ch)=>charWidth(ch) ?? 0).reduce((a, b)=>a + b, 0);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY2xpLzEuMC4xNy91bmljb2RlX3dpZHRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4vLyBQb3J0ZWQgZnJvbSB1bmljb2RlX3dpZHRoIHJ1c3QgY3JhdGUsIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUnVzdCBQcm9qZWN0IERldmVsb3BlcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgZGF0YSBmcm9tIFwiLi9fZGF0YS5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQgeyBydW5MZW5ndGhEZWNvZGUgfSBmcm9tIFwiLi9fcnVuX2xlbmd0aC50c1wiO1xuXG5sZXQgdGFibGVzOiBVaW50OEFycmF5W10gfCBudWxsID0gbnVsbDtcbmZ1bmN0aW9uIGxvb2t1cFdpZHRoKGNwOiBudW1iZXIpIHtcbiAgaWYgKCF0YWJsZXMpIHRhYmxlcyA9IGRhdGEudGFibGVzLm1hcChydW5MZW5ndGhEZWNvZGUpO1xuICBjb25zdCB0MU9mZnNldCA9IHRhYmxlc1swXSFbKGNwID4+IDEzKSAmIDB4ZmZdITtcbiAgY29uc3QgdDJPZmZzZXQgPSB0YWJsZXNbMV0hWzEyOCAqIHQxT2Zmc2V0ICsgKChjcCA+PiA2KSAmIDB4N2YpXSE7XG4gIGNvbnN0IHBhY2tlZFdpZHRocyA9IHRhYmxlc1syXSFbMTYgKiB0Mk9mZnNldCArICgoY3AgPj4gMikgJiAweGYpXSE7XG5cbiAgY29uc3Qgd2lkdGggPSAocGFja2VkV2lkdGhzID4+ICgyICogKGNwICYgMGIxMSkpKSAmIDBiMTE7XG5cbiAgcmV0dXJuIHdpZHRoID09PSAzID8gMSA6IHdpZHRoO1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXIgfCBudWxsPigpO1xuZnVuY3Rpb24gY2hhcldpZHRoKGNoYXI6IHN0cmluZykge1xuICBpZiAoY2FjaGUuaGFzKGNoYXIpKSByZXR1cm4gY2FjaGUuZ2V0KGNoYXIpITtcblxuICBjb25zdCBjb2RlUG9pbnQgPSBjaGFyLmNvZGVQb2ludEF0KDApITtcbiAgbGV0IHdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpZiAoY29kZVBvaW50IDwgMHg3Zikge1xuICAgIHdpZHRoID0gY29kZVBvaW50ID49IDB4MjAgPyAxIDogY29kZVBvaW50ID09PSAwID8gMCA6IG51bGw7XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID49IDB4YTApIHtcbiAgICB3aWR0aCA9IGxvb2t1cFdpZHRoKGNvZGVQb2ludCk7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBudWxsO1xuICB9XG5cbiAgY2FjaGUuc2V0KGNoYXIsIHdpZHRoKTtcbiAgcmV0dXJuIHdpZHRoO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcGh5c2ljYWwgd2lkdGggb2YgYSBzdHJpbmcgaW4gYSBUVFktbGlrZSBlbnZpcm9ubWVudC4gVGhpcyBpc1xuICogdXNlZnVsIGZvciBjYXNlcyBzdWNoIGFzIGNhbGN1bGF0aW5nIHdoZXJlIGEgbGluZS13cmFwIHdpbGwgb2NjdXIgYW5kXG4gKiB1bmRlcmxpbmluZyBzdHJpbmdzLlxuICpcbiAqIFRoZSBwaHlzaWNhbCB3aWR0aCBpcyBnaXZlbiBieSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgcmVxdWlyZWQgdG8gZGlzcGxheVxuICogdGhlIHN0cmluZy4gVGhlIG51bWJlciBvZiBjb2x1bW5zIGEgZ2l2ZW4gdW5pY29kZSBjaGFyYWN0ZXIgb2NjdXBpZXMgY2FuXG4gKiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgY2hhcmFjdGVyIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gbWVhc3VyZS5cbiAqIEByZXR1cm5zIFRoZSB1bmljb2RlIHdpZHRoIG9mIHRoZSBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGUgQ2FsY3VsYXRpbmcgdGhlIHVuaWNvZGUgd2lkdGggb2YgYSBzdHJpbmdcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB1bmljb2RlV2lkdGggfSBmcm9tIFwiQHN0ZC9jbGkvdW5pY29kZS13aWR0aFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHVuaWNvZGVXaWR0aChcImhlbGxvIHdvcmxkXCIpLCAxMSk7XG4gKiBhc3NlcnRFcXVhbHModW5pY29kZVdpZHRoKFwi5aSp5Zyw546E6buD5a6H5a6Z5rSq6I2SXCIpLCAxNik7XG4gKiBhc3NlcnRFcXVhbHModW5pY29kZVdpZHRoKFwi772G772V772M772M772X772J772E772U772IXCIpLCAxOCk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBDYWxjdWxhdGluZyB0aGUgdW5pY29kZSB3aWR0aCBvZiBhIGNvbG9yLWVuY29kZWQgc3RyaW5nXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdW5pY29kZVdpZHRoIH0gZnJvbSBcIkBzdGQvY2xpL3VuaWNvZGUtd2lkdGhcIjtcbiAqIGltcG9ydCB7IHN0cmlwQW5zaUNvZGUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHModW5pY29kZVdpZHRoKHN0cmlwQW5zaUNvZGUoXCJcXHgxYlszNm3Qs9C+0LvRg9Cx0L7QuVxceDFiWzM5bVwiKSksIDcpO1xuICogYXNzZXJ0RXF1YWxzKHVuaWNvZGVXaWR0aChzdHJpcEFuc2lDb2RlKFwiXFx4MWJbMzFt57SF6ImyXFx4MWJbMzltXCIpKSwgNCk7XG4gKiBhc3NlcnRFcXVhbHModW5pY29kZVdpZHRoKHN0cmlwQW5zaUNvZGUoXCJcXHgxQl04OztodHRwczovL2Rlbm8ubGFuZFxceDA38J+mlVxceDFCXTg7O1xceDA3XCIpKSwgMik7XG4gKiBgYGBcbiAqXG4gKiBVc2VcbiAqIHtAbGlua2NvZGUgaHR0cHM6Ly9qc3IuaW8vQHN0ZC9mbXQvZG9jL2NvbG9ycy9+L3N0cmlwQW5zaUNvZGUgfCBzdHJpcEFuc2lDb2RlfVxuICogdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGZyb20gYSBzdHJpbmcgYmVmb3JlIHBhc3NpbmcgaXQgdG9cbiAqIHtAbGlua2NvZGUgdW5pY29kZVdpZHRofS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaWNvZGVXaWR0aChzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBbLi4uc3RyXS5tYXAoKGNoKSA9PiBjaGFyV2lkdGgoY2gpID8/IDApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFDckMscUdBQXFHO0FBRXJHLE9BQU8sVUFBVSxvQkFBb0I7RUFBRSxNQUFNO0FBQU8sRUFBRTtBQUN0RCxTQUFTLGVBQWUsUUFBUSxtQkFBbUI7QUFFbkQsSUFBSSxTQUE4QjtBQUNsQyxTQUFTLFlBQVksRUFBVTtFQUM3QixJQUFJLENBQUMsUUFBUSxTQUFTLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQztFQUN0QyxNQUFNLFdBQVcsTUFBTSxDQUFDLEVBQUUsQUFBQyxDQUFDLEFBQUMsTUFBTSxLQUFNLEtBQUs7RUFDOUMsTUFBTSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEFBQUMsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxBQUFDLE1BQU0sSUFBSyxJQUFJLEVBQUU7RUFDaEUsTUFBTSxlQUFlLE1BQU0sQ0FBQyxFQUFFLEFBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxBQUFDLE1BQU0sSUFBSyxHQUFHLEVBQUU7RUFFbEUsTUFBTSxRQUFRLEFBQUMsZ0JBQWlCLElBQUksQ0FBQyxLQUFLLElBQUksSUFBTTtFQUVwRCxPQUFPLFVBQVUsSUFBSSxJQUFJO0FBQzNCO0FBRUEsTUFBTSxRQUFRLElBQUk7QUFDbEIsU0FBUyxVQUFVLElBQVk7RUFDN0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxPQUFPLE9BQU8sTUFBTSxHQUFHLENBQUM7RUFFdEMsTUFBTSxZQUFZLEtBQUssV0FBVyxDQUFDO0VBQ25DLElBQUksUUFBdUI7RUFFM0IsSUFBSSxZQUFZLE1BQU07SUFDcEIsUUFBUSxhQUFhLE9BQU8sSUFBSSxjQUFjLElBQUksSUFBSTtFQUN4RCxPQUFPLElBQUksYUFBYSxNQUFNO0lBQzVCLFFBQVEsWUFBWTtFQUN0QixPQUFPO0lBQ0wsUUFBUTtFQUNWO0VBRUEsTUFBTSxHQUFHLENBQUMsTUFBTTtFQUNoQixPQUFPO0FBQ1Q7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFDQyxHQUNELE9BQU8sU0FBUyxhQUFhLEdBQVc7RUFDdEMsT0FBTztPQUFJO0dBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFPLFVBQVUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBTSxJQUFJLEdBQUc7QUFDMUUifQ==
+// denoCacheMetadata=11356816073894109278,7553829658346204126 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b6447565302b0926e9a9ee9be7baf6b6ee4377252ac301705c902d0bad0e2dca.js b/vendor/gen/https/jsr.io/b6447565302b0926e9a9ee9be7baf6b6ee4377252ac301705c902d0bad0e2dca.js
new file mode 100644
index 0000000..a0dc2c5
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b6447565302b0926e9a9ee9be7baf6b6ee4377252ac301705c902d0bad0e2dca.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Concatenate an array of byte slices into a single slice.
+ *
+ * @param buffers Array of byte slices to concatenate.
+ * @returns A new byte slice containing all the input slices concatenated.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { concat } from "@std/bytes/concat";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const a = new Uint8Array([0, 1, 2]);
+ * const b = new Uint8Array([3, 4, 5]);
+ *
+ * assertEquals(concat([a, b]), new Uint8Array([0, 1, 2, 3, 4, 5]));
+ * ```
+ */ export function concat(buffers) {
+ let length = 0;
+ for (const buffer of buffers){
+ length += buffer.length;
+ }
+ const output = new Uint8Array(length);
+ let index = 0;
+ for (const buffer of buffers){
+ output.set(buffer, index);
+ index += buffer.length;
+ }
+ return output;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvY29uY2F0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgVWludDhBcnJheV8gfSBmcm9tIFwiLi9fdHlwZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVWludDhBcnJheV8gfTtcblxuLyoqXG4gKiBDb25jYXRlbmF0ZSBhbiBhcnJheSBvZiBieXRlIHNsaWNlcyBpbnRvIGEgc2luZ2xlIHNsaWNlLlxuICpcbiAqIEBwYXJhbSBidWZmZXJzIEFycmF5IG9mIGJ5dGUgc2xpY2VzIHRvIGNvbmNhdGVuYXRlLlxuICogQHJldHVybnMgQSBuZXcgYnl0ZSBzbGljZSBjb250YWluaW5nIGFsbCB0aGUgaW5wdXQgc2xpY2VzIGNvbmNhdGVuYXRlZC5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbmNhdCB9IGZyb20gXCJAc3RkL2J5dGVzL2NvbmNhdFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyXSk7XG4gKiBjb25zdCBiID0gbmV3IFVpbnQ4QXJyYXkoWzMsIDQsIDVdKTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoY29uY2F0KFthLCBiXSksIG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAzLCA0LCA1XSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYnVmZmVyczogcmVhZG9ubHkgVWludDhBcnJheVtdKTogVWludDhBcnJheV8ge1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgIGxlbmd0aCArPSBidWZmZXIubGVuZ3RoO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBpbmRleCA9IDA7XG4gIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICBvdXRwdXQuc2V0KGJ1ZmZlciwgaW5kZXgpO1xuICAgIGluZGV4ICs9IGJ1ZmZlci5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFLckM7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLFNBQVMsT0FBTyxPQUE4QjtFQUNuRCxJQUFJLFNBQVM7RUFDYixLQUFLLE1BQU0sVUFBVSxRQUFTO0lBQzVCLFVBQVUsT0FBTyxNQUFNO0VBQ3pCO0VBQ0EsTUFBTSxTQUFTLElBQUksV0FBVztFQUM5QixJQUFJLFFBQVE7RUFDWixLQUFLLE1BQU0sVUFBVSxRQUFTO0lBQzVCLE9BQU8sR0FBRyxDQUFDLFFBQVE7SUFDbkIsU0FBUyxPQUFPLE1BQU07RUFDeEI7RUFFQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=8508854964595650416,8661059135749334705 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b6c2a8bfeeb3680c0fa67ceee394b69e61c8679344242038a6bfb006ece7b5f7.js b/vendor/gen/https/jsr.io/b6c2a8bfeeb3680c0fa67ceee394b69e61c8679344242038a6bfb006ece7b5f7.js
new file mode 100644
index 0000000..87ca740
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b6c2a8bfeeb3680c0fa67ceee394b69e61c8679344242038a6bfb006ece7b5f7.js
@@ -0,0 +1,9 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function assertArg(path) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2Rpcm5hbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0UGF0aCB9IGZyb20gXCIuL2Fzc2VydF9wYXRoLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBcmcocGF0aDogc3RyaW5nKSB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLFFBQVEsbUJBQW1CO0FBRTlDLE9BQU8sU0FBUyxVQUFVLElBQVk7RUFDcEMsV0FBVztFQUNYLElBQUksS0FBSyxNQUFNLEtBQUssR0FBRyxPQUFPO0FBQ2hDIn0=
+// denoCacheMetadata=12071784527289267437,6913605088101689581 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b6c9bf6950bf2470b05ff5d1536cb2bcc7ff6d2d90a030bd8144f0b0940ec257.js b/vendor/gen/https/jsr.io/b6c9bf6950bf2470b05ff5d1536cb2bcc7ff6d2d90a030bd8144f0b0940ec257.js
new file mode 100644
index 0000000..af4d610
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b6c9bf6950bf2470b05ff5d1536cb2bcc7ff6d2d90a030bd8144f0b0940ec257.js
@@ -0,0 +1,31 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/from_file_url.ts";
+/**
+ * Converts a file URL to a path string.
+ *
+ * @example Usage
+ * ```ts
+ * import { fromFileUrl } from "@std/path/windows/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
+ * assertEquals(fromFileUrl("file:///C:/Users/foo"), "C:\\Users\\foo");
+ * assertEquals(fromFileUrl("file://localhost/home/foo"), "\\home\\foo");
+ * ```
+ *
+ * @param url The file URL to convert.
+ * @returns The path string.
+ */ export function fromFileUrl(url) {
+ url = assertArg(url);
+ let path = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
+ if (url.hostname !== "") {
+ // Note: The `URL` implementation guarantees that the drive letter and
+ // hostname are mutually exclusive. Otherwise it would not have been valid
+ // to append the hostname and path like this.
+ path = `\\\\${url.hostname}${path}`;
+ }
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2Zyb21fZmlsZV91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vZnJvbV9maWxlX3VybC50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsZSBVUkwgdG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2Zyb20tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vaG9tZS9mb29cIiksIFwiXFxcXGhvbWVcXFxcZm9vXCIpO1xuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIiksIFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpO1xuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovL2xvY2FsaG9zdC9ob21lL2Zvb1wiKSwgXCJcXFxcaG9tZVxcXFxmb29cIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXJsIFRoZSBmaWxlIFVSTCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBVUkwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICB1cmwgPSBhc3NlcnRBcmcodXJsKTtcbiAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLy9nLCBcIlxcXFxcIikucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKS5yZXBsYWNlKC9eXFxcXCooW0EtWmEtel06KShcXFxcfCQpLywgXCIkMVxcXFxcIik7XG4gIGlmICh1cmwuaG9zdG5hbWUgIT09IFwiXCIpIHtcbiAgICAvLyBOb3RlOiBUaGUgYFVSTGAgaW1wbGVtZW50YXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgYW5kXG4gICAgLy8gaG9zdG5hbWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gT3RoZXJ3aXNlIGl0IHdvdWxkIG5vdCBoYXZlIGJlZW4gdmFsaWRcbiAgICAvLyB0byBhcHBlbmQgdGhlIGhvc3RuYW1lIGFuZCBwYXRoIGxpa2UgdGhpcy5cbiAgICBwYXRoID0gYFxcXFxcXFxcJHt1cmwuaG9zdG5hbWV9JHtwYXRofWA7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSw4QkFBOEI7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBQ0QsT0FBTyxTQUFTLFlBQVksR0FBaUI7RUFDM0MsTUFBTSxVQUFVO0VBQ2hCLElBQUksT0FBTyxtQkFDVCxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxNQUFNLE9BQU8sQ0FBQyx3QkFBd0IsUUFDbEUsT0FBTyxDQUFDLHlCQUF5QjtFQUNuQyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUk7SUFDdkIsc0VBQXNFO0lBQ3RFLDBFQUEwRTtJQUMxRSw2Q0FBNkM7SUFDN0MsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNO0VBQ3JDO0VBQ0EsT0FBTztBQUNUIn0=
+// denoCacheMetadata=17853832658272498677,12490616171629349588 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b766ba6cc8f67eca6b69141d5b966816a727fec3d38098c6c5629f915d597a3b.js b/vendor/gen/https/jsr.io/b766ba6cc8f67eca6b69141d5b966816a727fec3d38098c6c5629f915d597a3b.js
new file mode 100644
index 0000000..b497270
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b766ba6cc8f67eca6b69141d5b966816a727fec3d38098c6c5629f915d597a3b.js
@@ -0,0 +1,62 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/** End-of-line character for POSIX platforms such as macOS and Linux. */ export const LF = "\n";
+/** End-of-line character for Windows platforms. */ export const CRLF = "\r\n";
+/**
+ * End-of-line character evaluated for the current platform.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { EOL } from "@std/fs/eol";
+ *
+ * EOL; // "\n" on POSIX platforms and "\r\n" on Windows
+ * ```
+ */ export const EOL = // deno-lint-ignore no-explicit-any
+globalThis.Deno?.build.os === "windows" ? CRLF : LF;
+const regDetect = /(?:\r?\n)/g;
+/**
+ * Returns the detected EOL character(s) detected in the input string. If no EOL
+ * character is detected, `null` is returned.
+ *
+ * @param content The input string to detect EOL characters.
+ *
+ * @returns The detected EOL character(s) or `null` if no EOL character is detected.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { detect } from "@std/fs/eol";
+ *
+ * detect("deno\r\nis not\r\nnode"); // "\r\n"
+ * detect("deno\nis not\r\nnode"); // "\r\n"
+ * detect("deno\nis not\nnode"); // "\n"
+ * detect("deno is not node"); // null
+ * ```
+ */ export function detect(content) {
+ const d = content.match(regDetect);
+ if (!d || d.length === 0) {
+ return null;
+ }
+ const hasCRLF = d.some((x)=>x === CRLF);
+ return hasCRLF ? CRLF : LF;
+}
+/**
+ * Normalize the input string to the targeted EOL.
+ *
+ * @param content The input string to normalize.
+ * @param eol The EOL character(s) to normalize the input string to.
+ *
+ * @returns The input string normalized to the targeted EOL.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { LF, format } from "@std/fs/eol";
+ *
+ * const CRLFinput = "deno\r\nis not\r\nnode";
+ *
+ * format(CRLFinput, LF); // "deno\nis not\nnode"
+ * ```
+ */ export function format(content, eol) {
+ return content.replace(regDetect, eol);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2VvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKiogRW5kLW9mLWxpbmUgY2hhcmFjdGVyIGZvciBQT1NJWCBwbGF0Zm9ybXMgc3VjaCBhcyBtYWNPUyBhbmQgTGludXguICovXG5leHBvcnQgY29uc3QgTEYgPSBcIlxcblwiIGFzIGNvbnN0O1xuXG4vKiogRW5kLW9mLWxpbmUgY2hhcmFjdGVyIGZvciBXaW5kb3dzIHBsYXRmb3Jtcy4gKi9cbmV4cG9ydCBjb25zdCBDUkxGID0gXCJcXHJcXG5cIiBhcyBjb25zdDtcblxuLyoqXG4gKiBFbmQtb2YtbGluZSBjaGFyYWN0ZXIgZXZhbHVhdGVkIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgaWdub3JlXG4gKiBpbXBvcnQgeyBFT0wgfSBmcm9tIFwiQHN0ZC9mcy9lb2xcIjtcbiAqXG4gKiBFT0w7IC8vIFwiXFxuXCIgb24gUE9TSVggcGxhdGZvcm1zIGFuZCBcIlxcclxcblwiIG9uIFdpbmRvd3NcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgRU9MOiBcIlxcblwiIHwgXCJcXHJcXG5cIiA9XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIChnbG9iYWxUaGlzIGFzIGFueSkuRGVubz8uYnVpbGQub3MgPT09IFwid2luZG93c1wiID8gQ1JMRiA6IExGO1xuXG5jb25zdCByZWdEZXRlY3QgPSAvKD86XFxyP1xcbikvZztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXRlY3RlZCBFT0wgY2hhcmFjdGVyKHMpIGRldGVjdGVkIGluIHRoZSBpbnB1dCBzdHJpbmcuIElmIG5vIEVPTFxuICogY2hhcmFjdGVyIGlzIGRldGVjdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgVGhlIGlucHV0IHN0cmluZyB0byBkZXRlY3QgRU9MIGNoYXJhY3RlcnMuXG4gKlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIEVPTCBjaGFyYWN0ZXIocykgb3IgYG51bGxgIGlmIG5vIEVPTCBjaGFyYWN0ZXIgaXMgZGV0ZWN0ZWQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgZGV0ZWN0IH0gZnJvbSBcIkBzdGQvZnMvZW9sXCI7XG4gKlxuICogZGV0ZWN0KFwiZGVub1xcclxcbmlzIG5vdFxcclxcbm5vZGVcIik7IC8vIFwiXFxyXFxuXCJcbiAqIGRldGVjdChcImRlbm9cXG5pcyBub3RcXHJcXG5ub2RlXCIpOyAvLyBcIlxcclxcblwiXG4gKiBkZXRlY3QoXCJkZW5vXFxuaXMgbm90XFxubm9kZVwiKTsgLy8gXCJcXG5cIlxuICogZGV0ZWN0KFwiZGVubyBpcyBub3Qgbm9kZVwiKTsgLy8gbnVsbFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3QoY29udGVudDogc3RyaW5nKTogdHlwZW9mIEVPTCB8IG51bGwge1xuICBjb25zdCBkID0gY29udGVudC5tYXRjaChyZWdEZXRlY3QpO1xuICBpZiAoIWQgfHwgZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBoYXNDUkxGID0gZC5zb21lKCh4OiBzdHJpbmcpOiBib29sZWFuID0+IHggPT09IENSTEYpO1xuXG4gIHJldHVybiBoYXNDUkxGID8gQ1JMRiA6IExGO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgaW5wdXQgc3RyaW5nIHRvIHRoZSB0YXJnZXRlZCBFT0wuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgVGhlIGlucHV0IHN0cmluZyB0byBub3JtYWxpemUuXG4gKiBAcGFyYW0gZW9sIFRoZSBFT0wgY2hhcmFjdGVyKHMpIHRvIG5vcm1hbGl6ZSB0aGUgaW5wdXQgc3RyaW5nIHRvLlxuICpcbiAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJpbmcgbm9ybWFsaXplZCB0byB0aGUgdGFyZ2V0ZWQgRU9MLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IExGLCBmb3JtYXQgfSBmcm9tIFwiQHN0ZC9mcy9lb2xcIjtcbiAqXG4gKiBjb25zdCBDUkxGaW5wdXQgPSBcImRlbm9cXHJcXG5pcyBub3RcXHJcXG5ub2RlXCI7XG4gKlxuICogZm9ybWF0KENSTEZpbnB1dCwgTEYpOyAvLyBcImRlbm9cXG5pcyBub3RcXG5ub2RlXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KGNvbnRlbnQ6IHN0cmluZywgZW9sOiB0eXBlb2YgRU9MKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShyZWdEZXRlY3QsIGVvbCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyx1RUFBdUUsR0FDdkUsT0FBTyxNQUFNLEtBQUssS0FBYztBQUVoQyxpREFBaUQsR0FDakQsT0FBTyxNQUFNLE9BQU8sT0FBZ0I7QUFFcEM7Ozs7Ozs7OztDQVNDLEdBQ0QsT0FBTyxNQUFNLE1BRVgsQUFEQSxtQ0FBbUM7QUFDbEMsV0FBbUIsSUFBSSxFQUFFLE1BQU0sT0FBTyxZQUFZLE9BQU8sR0FBRztBQUUvRCxNQUFNLFlBQVk7QUFFbEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sT0FBZTtFQUNwQyxNQUFNLElBQUksUUFBUSxLQUFLLENBQUM7RUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEtBQUssR0FBRztJQUN4QixPQUFPO0VBQ1Q7RUFDQSxNQUFNLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUF1QixNQUFNO0VBRXJELE9BQU8sVUFBVSxPQUFPO0FBQzFCO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLFNBQVMsT0FBTyxPQUFlLEVBQUUsR0FBZTtFQUNyRCxPQUFPLFFBQVEsT0FBTyxDQUFDLFdBQVc7QUFDcEMifQ==
+// denoCacheMetadata=3138628334740564728,10698801828556729024 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b8c879dcf8a00694f2d60b43aff97c3c5b71a7c30b1e92e460b45d6e5eae4d5d.js b/vendor/gen/https/jsr.io/b8c879dcf8a00694f2d60b43aff97c3c5b71a7c30b1e92e460b45d6e5eae4d5d.js
new file mode 100644
index 0000000..765b134
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b8c879dcf8a00694f2d60b43aff97c3c5b71a7c30b1e92e460b45d6e5eae4d5d.js
@@ -0,0 +1,111 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * {@linkcode parse} and {@linkcode stringify} for handling
+ * {@link https://toml.io | TOML} encoded data.
+ *
+ * Be sure to read the supported types as not every spec is supported at the
+ * moment and the handling in TypeScript side is a bit different.
+ *
+ * ## Supported types and handling
+ *
+ * - [x] [Keys](https://toml.io/en/latest#keys)
+ * - [ ] [String](https://toml.io/en/latest#string)
+ * - [x] [Multiline String](https://toml.io/en/latest#string)
+ * - [x] [Literal String](https://toml.io/en/latest#string)
+ * - [ ] [Integer](https://toml.io/en/latest#integer)
+ * - [x] [Float](https://toml.io/en/latest#float)
+ * - [x] [Boolean](https://toml.io/en/latest#boolean)
+ * - [x] [Offset Date-time](https://toml.io/en/latest#offset-date-time)
+ * - [x] [Local Date-time](https://toml.io/en/latest#local-date-time)
+ * - [x] [Local Date](https://toml.io/en/latest#local-date)
+ * - [ ] [Local Time](https://toml.io/en/latest#local-time)
+ * - [x] [Table](https://toml.io/en/latest#table)
+ * - [x] [Inline Table](https://toml.io/en/latest#inline-table)
+ * - [ ] [Array of Tables](https://toml.io/en/latest#array-of-tables)
+ *
+ * _Supported with warnings see [Warning](#Warning)._
+ *
+ * ### Warning
+ *
+ * #### String
+ *
+ * Due to the spec, there is no flag to detect regex properly in a TOML
+ * declaration. So the regex is stored as string.
+ *
+ * #### Integer
+ *
+ * For **Binary** / **Octal** / **Hexadecimal** numbers, they are stored as string
+ * to be not interpreted as Decimal.
+ *
+ * #### Local Time
+ *
+ * Because local time does not exist in JavaScript, the local time is stored as a
+ * string.
+ *
+ * #### Array of Tables
+ *
+ * At the moment only simple declarations like below are supported:
+ *
+ * ```toml
+ * [[bin]]
+ * name = "deno"
+ * path = "cli/main.rs"
+ *
+ * [[bin]]
+ * name = "deno_core"
+ * path = "src/foo.rs"
+ *
+ * [[nib]]
+ * name = "node"
+ * path = "not_found"
+ * ```
+ *
+ * will output:
+ *
+ * ```json
+ * {
+ * "bin": [
+ * { "name": "deno", "path": "cli/main.rs" },
+ * { "name": "deno_core", "path": "src/foo.rs" }
+ * ],
+ * "nib": [{ "name": "node", "path": "not_found" }]
+ * }
+ * ```
+ *
+ * ```ts
+ * import { parse, stringify } from "@std/toml";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const obj = {
+ * bin: [
+ * { name: "deno", path: "cli/main.rs" },
+ * { name: "deno_core", path: "src/foo.rs" },
+ * ],
+ * nib: [{ name: "node", path: "not_found" }],
+ * };
+ *
+ * const tomlString = stringify(obj);
+ * assertEquals(tomlString, `
+ * [[bin]]
+ * name = "deno"
+ * path = "cli/main.rs"
+ *
+ * [[bin]]
+ * name = "deno_core"
+ * path = "src/foo.rs"
+ *
+ * [[nib]]
+ * name = "node"
+ * path = "not_found"
+ * `);
+ *
+ * const tomlObject = parse(tomlString);
+ * assertEquals(tomlObject, obj);
+ * ```
+ *
+ * @module
+ */ export * from "./stringify.ts";
+export * from "./parse.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvdG9tbC8xLjAuNi9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiB7QGxpbmtjb2RlIHBhcnNlfSBhbmQge0BsaW5rY29kZSBzdHJpbmdpZnl9IGZvciBoYW5kbGluZ1xuICoge0BsaW5rIGh0dHBzOi8vdG9tbC5pbyB8IFRPTUx9IGVuY29kZWQgZGF0YS5cbiAqXG4gKiBCZSBzdXJlIHRvIHJlYWQgdGhlIHN1cHBvcnRlZCB0eXBlcyBhcyBub3QgZXZlcnkgc3BlYyBpcyBzdXBwb3J0ZWQgYXQgdGhlXG4gKiBtb21lbnQgYW5kIHRoZSBoYW5kbGluZyBpbiBUeXBlU2NyaXB0IHNpZGUgaXMgYSBiaXQgZGlmZmVyZW50LlxuICpcbiAqICMjIFN1cHBvcnRlZCB0eXBlcyBhbmQgaGFuZGxpbmdcbiAqXG4gKiAtIFt4XSBbS2V5c10oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNrZXlzKVxuICogLSBbIF0gW1N0cmluZ10oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNzdHJpbmcpXG4gKiAtIFt4XSBbTXVsdGlsaW5lIFN0cmluZ10oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNzdHJpbmcpXG4gKiAtIFt4XSBbTGl0ZXJhbCBTdHJpbmddKGh0dHBzOi8vdG9tbC5pby9lbi9sYXRlc3Qjc3RyaW5nKVxuICogLSBbIF0gW0ludGVnZXJdKGh0dHBzOi8vdG9tbC5pby9lbi9sYXRlc3QjaW50ZWdlcilcbiAqIC0gW3hdIFtGbG9hdF0oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNmbG9hdClcbiAqIC0gW3hdIFtCb29sZWFuXShodHRwczovL3RvbWwuaW8vZW4vbGF0ZXN0I2Jvb2xlYW4pXG4gKiAtIFt4XSBbT2Zmc2V0IERhdGUtdGltZV0oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNvZmZzZXQtZGF0ZS10aW1lKVxuICogLSBbeF0gW0xvY2FsIERhdGUtdGltZV0oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNsb2NhbC1kYXRlLXRpbWUpXG4gKiAtIFt4XSBbTG9jYWwgRGF0ZV0oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNsb2NhbC1kYXRlKVxuICogLSBbIF0gW0xvY2FsIFRpbWVdKGh0dHBzOi8vdG9tbC5pby9lbi9sYXRlc3QjbG9jYWwtdGltZSlcbiAqIC0gW3hdIFtUYWJsZV0oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCN0YWJsZSlcbiAqIC0gW3hdIFtJbmxpbmUgVGFibGVdKGh0dHBzOi8vdG9tbC5pby9lbi9sYXRlc3QjaW5saW5lLXRhYmxlKVxuICogLSBbIF0gW0FycmF5IG9mIFRhYmxlc10oaHR0cHM6Ly90b21sLmlvL2VuL2xhdGVzdCNhcnJheS1vZi10YWJsZXMpXG4gKlxuICogX1N1cHBvcnRlZCB3aXRoIHdhcm5pbmdzIHNlZSBbV2FybmluZ10oI1dhcm5pbmcpLl9cbiAqXG4gKiAjIyMgV2FybmluZ1xuICpcbiAqICMjIyMgU3RyaW5nXG4gKlxuICogRHVlIHRvIHRoZSBzcGVjLCB0aGVyZSBpcyBubyBmbGFnIHRvIGRldGVjdCByZWdleCBwcm9wZXJseSBpbiBhIFRPTUxcbiAqIGRlY2xhcmF0aW9uLiBTbyB0aGUgcmVnZXggaXMgc3RvcmVkIGFzIHN0cmluZy5cbiAqXG4gKiAjIyMjIEludGVnZXJcbiAqXG4gKiBGb3IgKipCaW5hcnkqKiAvICoqT2N0YWwqKiAvICoqSGV4YWRlY2ltYWwqKiBudW1iZXJzLCB0aGV5IGFyZSBzdG9yZWQgYXMgc3RyaW5nXG4gKiB0byBiZSBub3QgaW50ZXJwcmV0ZWQgYXMgRGVjaW1hbC5cbiAqXG4gKiAjIyMjIExvY2FsIFRpbWVcbiAqXG4gKiBCZWNhdXNlIGxvY2FsIHRpbWUgZG9lcyBub3QgZXhpc3QgaW4gSmF2YVNjcmlwdCwgdGhlIGxvY2FsIHRpbWUgaXMgc3RvcmVkIGFzIGFcbiAqIHN0cmluZy5cbiAqXG4gKiAjIyMjIEFycmF5IG9mIFRhYmxlc1xuICpcbiAqIEF0IHRoZSBtb21lbnQgb25seSBzaW1wbGUgZGVjbGFyYXRpb25zIGxpa2UgYmVsb3cgYXJlIHN1cHBvcnRlZDpcbiAqXG4gKiBgYGB0b21sXG4gKiBbW2Jpbl1dXG4gKiBuYW1lID0gXCJkZW5vXCJcbiAqIHBhdGggPSBcImNsaS9tYWluLnJzXCJcbiAqXG4gKiBbW2Jpbl1dXG4gKiBuYW1lID0gXCJkZW5vX2NvcmVcIlxuICogcGF0aCA9IFwic3JjL2Zvby5yc1wiXG4gKlxuICogW1tuaWJdXVxuICogbmFtZSA9IFwibm9kZVwiXG4gKiBwYXRoID0gXCJub3RfZm91bmRcIlxuICogYGBgXG4gKlxuICogd2lsbCBvdXRwdXQ6XG4gKlxuICogYGBganNvblxuICoge1xuICogICBcImJpblwiOiBbXG4gKiAgICAgeyBcIm5hbWVcIjogXCJkZW5vXCIsIFwicGF0aFwiOiBcImNsaS9tYWluLnJzXCIgfSxcbiAqICAgICB7IFwibmFtZVwiOiBcImRlbm9fY29yZVwiLCBcInBhdGhcIjogXCJzcmMvZm9vLnJzXCIgfVxuICogICBdLFxuICogICBcIm5pYlwiOiBbeyBcIm5hbWVcIjogXCJub2RlXCIsIFwicGF0aFwiOiBcIm5vdF9mb3VuZFwiIH1dXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gXCJAc3RkL3RvbWxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IG9iaiA9IHtcbiAqICAgYmluOiBbXG4gKiAgICAgeyBuYW1lOiBcImRlbm9cIiwgcGF0aDogXCJjbGkvbWFpbi5yc1wiIH0sXG4gKiAgICAgeyBuYW1lOiBcImRlbm9fY29yZVwiLCBwYXRoOiBcInNyYy9mb28ucnNcIiB9LFxuICogICBdLFxuICogICBuaWI6IFt7IG5hbWU6IFwibm9kZVwiLCBwYXRoOiBcIm5vdF9mb3VuZFwiIH1dLFxuICogfTtcbiAqXG4gKiBjb25zdCB0b21sU3RyaW5nID0gc3RyaW5naWZ5KG9iaik7XG4gKiBhc3NlcnRFcXVhbHModG9tbFN0cmluZywgYFxuICogW1tiaW5dXVxuICogbmFtZSA9IFwiZGVub1wiXG4gKiBwYXRoID0gXCJjbGkvbWFpbi5yc1wiXG4gKlxuICogW1tiaW5dXVxuICogbmFtZSA9IFwiZGVub19jb3JlXCJcbiAqIHBhdGggPSBcInNyYy9mb28ucnNcIlxuICpcbiAqIFtbbmliXV1cbiAqIG5hbWUgPSBcIm5vZGVcIlxuICogcGF0aCA9IFwibm90X2ZvdW5kXCJcbiAqIGApO1xuICpcbiAqIGNvbnN0IHRvbWxPYmplY3QgPSBwYXJzZSh0b21sU3RyaW5nKTtcbiAqIGFzc2VydEVxdWFscyh0b21sT2JqZWN0LCBvYmopO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL3N0cmluZ2lmeS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5R0MsR0FFRCxjQUFjLGlCQUFpQjtBQUMvQixjQUFjLGFBQWEifQ==
+// denoCacheMetadata=951080491767076911,7320486915200169876 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/b9859d0030b7e958ce09a6edca0994aab18997d0f063b955d380ea875852a919.js b/vendor/gen/https/jsr.io/b9859d0030b7e958ce09a6edca0994aab18997d0f063b955d380ea875852a919.js
new file mode 100644
index 0000000..a84ca49
--- /dev/null
+++ b/vendor/gen/https/jsr.io/b9859d0030b7e958ce09a6edca0994aab18997d0f063b955d380ea875852a919.js
@@ -0,0 +1,751 @@
+#!/usr/bin/env -S deno run --allow-net --allow-read
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This program serves files in the current directory over HTTP.
+// TODO(bartlomieju): Add tests like these:
+// https://github.com/indexzero/http-server/blob/master/test/http-server-test.js
+/**
+ * Contains functions {@linkcode serveDir} and {@linkcode serveFile} for
+ * building a static file server.
+ *
+ * This module can also be used as a CLI. If you want to run it directly:
+ *
+ * ```shell
+ * > # start server
+ * > deno run --allow-net --allow-read --allow-sys jsr:@std/http/file-server
+ * > # show help
+ * > deno run jsr:@std/http/file-server --help
+ * ```
+ *
+ * If you want to install and run:
+ *
+ * ```shell
+ * > # install
+ * > deno install --allow-net --allow-read --allow-sys --global jsr:@std/http/file-server
+ * > # start server
+ * > file-server
+ * > # show help
+ * > file-server --help
+ * ```
+ *
+ * @module
+ */ import { normalize as posixNormalize } from "jsr:@std/path@^1.0.9/posix/normalize";
+import { extname } from "jsr:@std/path@^1.0.9/extname";
+import { join } from "jsr:@std/path@^1.0.9/join";
+import { relative } from "jsr:@std/path@^1.0.9/relative";
+import { resolve } from "jsr:@std/path@^1.0.9/resolve";
+import { SEPARATOR_PATTERN } from "jsr:@std/path@^1.0.9/constants";
+import { contentType } from "jsr:@std/media-types@^1.1.0/content-type";
+import { eTag, ifNoneMatch } from "./etag.ts";
+import { isRedirectStatus, STATUS_CODE, STATUS_TEXT } from "./status.ts";
+import { ByteSliceStream } from "jsr:@std/streams@^1.0.9/byte-slice-stream";
+import { parseArgs } from "jsr:@std/cli@^1.0.17/parse-args";
+import denoConfig from "./deno.json" with {
+ type: "json"
+};
+import { format as formatBytes } from "jsr:@std/fmt@^1.0.8/bytes";
+import { getNetworkAddress } from "jsr:@std/net@^1.0.4/unstable-get-network-address";
+import { escape } from "jsr:@std/html@^1.0.4/entities";
+import { HEADER } from "./unstable_header.ts";
+import { METHOD } from "./unstable_method.ts";
+const ENV_PERM_STATUS = Deno.permissions.querySync?.({
+ name: "env",
+ variable: "DENO_DEPLOYMENT_ID"
+}).state ?? "granted"; // for deno deploy
+const NET_PERM_STATUS = Deno.permissions.querySync?.({
+ name: "sys",
+ kind: "networkInterfaces"
+}).state ?? "granted"; // for deno deploy
+const DENO_DEPLOYMENT_ID = ENV_PERM_STATUS === "granted" ? Deno.env.get("DENO_DEPLOYMENT_ID") : undefined;
+const HASHED_DENO_DEPLOYMENT_ID = DENO_DEPLOYMENT_ID ? eTag(DENO_DEPLOYMENT_ID, {
+ weak: true
+}) : undefined;
+function modeToString(isDir, maybeMode) {
+ const modeMap = [
+ "---",
+ "--x",
+ "-w-",
+ "-wx",
+ "r--",
+ "r-x",
+ "rw-",
+ "rwx"
+ ];
+ if (maybeMode === null) {
+ return "(unknown mode)";
+ }
+ const mode = maybeMode.toString(8).padStart(3, "0");
+ let output = "";
+ mode.split("").reverse().slice(0, 3).forEach((v)=>{
+ output = `${modeMap[+v]} ${output}`;
+ });
+ output = `${isDir ? "d" : "-"} ${output}`;
+ return output;
+}
+function createStandardResponse(status, init) {
+ const statusText = STATUS_TEXT[status];
+ return new Response(statusText, {
+ status,
+ statusText,
+ ...init
+ });
+}
+/**
+ * parse range header.
+ *
+ * ```ts ignore
+ * parseRangeHeader("bytes=0-100", 500); // => { start: 0, end: 100 }
+ * parseRangeHeader("bytes=0-", 500); // => { start: 0, end: 499 }
+ * parseRangeHeader("bytes=-100", 500); // => { start: 400, end: 499 }
+ * parseRangeHeader("bytes=invalid", 500); // => null
+ * ```
+ *
+ * Note: Currently, no support for multiple Ranges (e.g. `bytes=0-10, 20-30`)
+ */ function parseRangeHeader(rangeValue, fileSize) {
+ const rangeRegex = /bytes=(?<start>\d+)?-(?<end>\d+)?$/u;
+ const parsed = rangeValue.match(rangeRegex);
+ if (!parsed || !parsed.groups) {
+ // failed to parse range header
+ return null;
+ }
+ const { start, end } = parsed.groups;
+ if (start !== undefined) {
+ if (end !== undefined) {
+ return {
+ start: +start,
+ end: +end
+ };
+ } else {
+ return {
+ start: +start,
+ end: fileSize - 1
+ };
+ }
+ } else {
+ if (end !== undefined) {
+ // example: `bytes=-100` means the last 100 bytes.
+ return {
+ start: fileSize - +end,
+ end: fileSize - 1
+ };
+ } else {
+ // failed to parse range header
+ return null;
+ }
+ }
+}
+/**
+ * Resolves a {@linkcode Response} with the requested file as the body.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { serveFile } from "@std/http/file-server";
+ *
+ * Deno.serve((req) => {
+ * return serveFile(req, "README.md");
+ * });
+ * ```
+ *
+ * @param req The server request context used to cleanup the file handle.
+ * @param filePath Path of the file to serve.
+ * @param options Additional options.
+ * @returns A response for the request.
+ */ export async function serveFile(req, filePath, options) {
+ if (req.method !== METHOD.Get && req.method !== METHOD.Head) {
+ return createStandardResponse(STATUS_CODE.MethodNotAllowed);
+ }
+ let { etagAlgorithm: algorithm = "SHA-256", fileInfo } = options ?? {};
+ try {
+ fileInfo ??= await Deno.stat(filePath);
+ } catch (error) {
+ if (error instanceof Deno.errors.NotFound) {
+ await req.body?.cancel();
+ return createStandardResponse(STATUS_CODE.NotFound);
+ } else {
+ throw error;
+ }
+ }
+ if (fileInfo.isDirectory) {
+ await req.body?.cancel();
+ return createStandardResponse(STATUS_CODE.NotFound);
+ }
+ const headers = createBaseHeaders();
+ const etag = fileInfo.mtime ? await eTag(fileInfo, {
+ algorithm
+ }) : await HASHED_DENO_DEPLOYMENT_ID;
+ // Set last modified header if last modification timestamp is available
+ if (fileInfo.mtime) {
+ headers.set(HEADER.LastModified, fileInfo.mtime.toUTCString());
+ }
+ if (etag) {
+ headers.set(HEADER.ETag, etag);
+ }
+ // Set mime-type using the file extension in filePath
+ const contentTypeValue = contentType(extname(filePath));
+ if (contentTypeValue) {
+ headers.set(HEADER.ContentType, contentTypeValue);
+ }
+ const fileSize = fileInfo.size;
+ if (req.method === METHOD.Head) {
+ // Set content length
+ headers.set(HEADER.ContentLength, `${fileSize}`);
+ const status = STATUS_CODE.OK;
+ return new Response(null, {
+ status,
+ statusText: STATUS_TEXT[status],
+ headers
+ });
+ }
+ if (etag || fileInfo.mtime) {
+ // If a `if-none-match` header is present and the value matches the tag or
+ // if a `if-modified-since` header is present and the value is bigger than
+ // the access timestamp value, then return 304
+ const ifNoneMatchValue = req.headers.get(HEADER.IfNoneMatch);
+ const ifModifiedSinceValue = req.headers.get(HEADER.IfModifiedSince);
+ if (!ifNoneMatch(ifNoneMatchValue, etag) || ifNoneMatchValue === null && fileInfo.mtime && ifModifiedSinceValue && fileInfo.mtime.getTime() < new Date(ifModifiedSinceValue).getTime() + 1000) {
+ const status = STATUS_CODE.NotModified;
+ return new Response(null, {
+ status,
+ statusText: STATUS_TEXT[status],
+ headers
+ });
+ }
+ }
+ const rangeValue = req.headers.get(HEADER.Range);
+ // handle range request
+ // Note: Some clients add a Range header to all requests to limit the size of the response.
+ // If the file is empty, ignore the range header and respond with a 200 rather than a 416.
+ // https://github.com/golang/go/blob/0d347544cbca0f42b160424f6bc2458ebcc7b3fc/src/net/http/fs.go#L273-L276
+ if (rangeValue && 0 < fileSize) {
+ const parsed = parseRangeHeader(rangeValue, fileSize);
+ // Returns 200 OK if parsing the range header fails
+ if (!parsed) {
+ // Set content length
+ headers.set(HEADER.ContentLength, `${fileSize}`);
+ const file = await Deno.open(filePath);
+ const status = STATUS_CODE.OK;
+ return new Response(file.readable, {
+ status,
+ statusText: STATUS_TEXT[status],
+ headers
+ });
+ }
+ // Return 416 Range Not Satisfiable if invalid range header value
+ if (parsed.end < 0 || parsed.end < parsed.start || fileSize <= parsed.start) {
+ // Set the "Content-range" header
+ headers.set(HEADER.ContentRange, `bytes */${fileSize}`);
+ return createStandardResponse(STATUS_CODE.RangeNotSatisfiable, {
+ headers
+ });
+ }
+ // clamps the range header value
+ const start = Math.max(0, parsed.start);
+ const end = Math.min(parsed.end, fileSize - 1);
+ // Set the "Content-range" header
+ headers.set(HEADER.ContentRange, `bytes ${start}-${end}/${fileSize}`);
+ // Set content length
+ const contentLength = end - start + 1;
+ headers.set(HEADER.ContentLength, `${contentLength}`);
+ // Return 206 Partial Content
+ const file = await Deno.open(filePath);
+ await file.seek(start, Deno.SeekMode.Start);
+ const sliced = file.readable.pipeThrough(new ByteSliceStream(0, contentLength - 1));
+ const status = STATUS_CODE.PartialContent;
+ return new Response(sliced, {
+ status,
+ statusText: STATUS_TEXT[status],
+ headers
+ });
+ }
+ // Set content length
+ headers.set(HEADER.ContentLength, `${fileSize}`);
+ const file = await Deno.open(filePath);
+ const status = STATUS_CODE.OK;
+ return new Response(file.readable, {
+ status,
+ statusText: STATUS_TEXT[status],
+ headers
+ });
+}
+async function serveDirIndex(dirPath, options) {
+ const { showDotfiles } = options;
+ const dirUrl = `/${relative(options.target, dirPath).replaceAll(new RegExp(SEPARATOR_PATTERN, "g"), "/")}`;
+ const listEntryPromise = [];
+ // if ".." makes sense
+ if (dirUrl !== "/") {
+ const prevPath = join(dirPath, "..");
+ const entryInfo = Deno.stat(prevPath).then((fileInfo)=>({
+ mode: modeToString(true, fileInfo.mode),
+ size: "",
+ name: "../",
+ url: ".."
+ }));
+ listEntryPromise.push(entryInfo);
+ }
+ // Read fileInfo in parallel
+ for await (const entry of Deno.readDir(dirPath)){
+ if (!showDotfiles && entry.name[0] === ".") {
+ continue;
+ }
+ const filePath = join(dirPath, entry.name);
+ const fileUrl = encodeURIComponent(entry.name).replaceAll("%2F", "/");
+ listEntryPromise.push((async ()=>{
+ try {
+ const fileInfo = await Deno.stat(filePath);
+ return {
+ mode: modeToString(entry.isDirectory, fileInfo.mode),
+ size: entry.isFile ? formatBytes(fileInfo.size ?? 0) : "",
+ name: `${entry.name}${entry.isDirectory ? "/" : ""}`,
+ url: `./${fileUrl}${entry.isDirectory ? "/" : ""}`
+ };
+ } catch (error) {
+ // Note: Deno.stat for windows system files may be rejected with os error 32.
+ if (!options.quiet) logError(error);
+ return {
+ mode: "(unknown mode)",
+ size: "",
+ name: `${entry.name}${entry.isDirectory ? "/" : ""}`,
+ url: `./${fileUrl}${entry.isDirectory ? "/" : ""}`
+ };
+ }
+ })());
+ }
+ const listEntry = await Promise.all(listEntryPromise);
+ listEntry.sort((a, b)=>// TODO(iuioiua): Add test to ensure list order is correct
+ a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1);
+ const formattedDirUrl = `${dirUrl.replace(/\/$/, "")}/`;
+ const page = dirViewerTemplate(formattedDirUrl, listEntry);
+ const headers = createBaseHeaders();
+ headers.set(HEADER.ContentType, "text/html; charset=UTF-8");
+ const status = STATUS_CODE.OK;
+ return new Response(page, {
+ status,
+ statusText: STATUS_TEXT[status],
+ headers
+ });
+}
+function serverLog(req, status) {
+ const d = new Date().toISOString();
+ const dateFmt = `[${d.slice(0, 10)} ${d.slice(11, 19)}]`;
+ const url = new URL(req.url);
+ const s = `${dateFmt} [${req.method}] ${url.pathname}${url.search} ${status}`;
+ // using console.debug instead of console.log so chrome inspect users can hide request logs
+ // deno-lint-ignore no-console
+ console.debug(s);
+}
+function createBaseHeaders() {
+ return new Headers({
+ server: "deno",
+ // Set "accept-ranges" so that the client knows it can make range requests on future requests
+ [HEADER.AcceptRanges]: "bytes"
+ });
+}
+function dirViewerTemplate(dirname, entries) {
+ const splitDirname = dirname.split("/").filter((path)=>Boolean(path));
+ const headerPaths = [
+ "home",
+ ...splitDirname
+ ];
+ return `
+ <!DOCTYPE html>
+ <html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+ <title>Deno File Server</title>
+ <style>
+ :root {
+ --background-color: #fafafa;
+ --color: rgba(0, 0, 0, 0.87);
+ }
+ @media (prefers-color-scheme: dark) {
+ :root {
+ --background-color: #292929;
+ --color: #fff;
+ }
+ thead {
+ color: #7f7f7f;
+ }
+ }
+ @media (min-width: 960px) {
+ main {
+ max-width: 960px;
+ }
+ body {
+ padding-left: 32px;
+ padding-right: 32px;
+ }
+ }
+ @media (min-width: 600px) {
+ main {
+ padding-left: 24px;
+ padding-right: 24px;
+ }
+ }
+ body {
+ background: var(--background-color);
+ color: var(--color);
+ font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+ font-weight: 400;
+ line-height: 1.43;
+ font-size: 0.875rem;
+ }
+ a {
+ color: #2196f3;
+ text-decoration: none;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ thead {
+ text-align: left;
+ }
+ thead th {
+ padding-bottom: 12px;
+ }
+ table td {
+ padding: 6px 36px 6px 0px;
+ }
+ .size {
+ text-align: right;
+ padding: 6px 12px 6px 24px;
+ }
+ .mode {
+ font-family: monospace, monospace;
+ }
+ </style>
+ </head>
+ <body>
+ <main>
+ <h1>Index of
+ ${headerPaths.map((path, index)=>{
+ if (path === "") return "";
+ const depth = headerPaths.length - index - 1;
+ let link;
+ if (depth == 0) {
+ link = ".";
+ } else {
+ link = "../".repeat(depth);
+ }
+ return `<a href="${link}">${escape(path)}</a>`;
+ }).join("/")}/
+ </h1>
+ <table>
+ <thead>
+ <tr>
+ <th>Mode</th>
+ <th>Size</th>
+ <th>Name</th>
+ </tr>
+ </thead>
+ ${entries.map((entry)=>`
+ <tr>
+ <td class="mode">
+ ${entry.mode}
+ </td>
+ <td class="size">
+ ${entry.size}
+ </td>
+ <td>
+ <a href="${escape(entry.url)}">${escape(entry.name)}</a>
+ </td>
+ </tr>
+ `).join("")}
+ </table>
+ </main>
+ </body>
+ </html>
+ `;
+}
+/**
+ * Serves the files under the given directory root (opts.fsRoot).
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { serveDir } from "@std/http/file-server";
+ *
+ * Deno.serve((req) => {
+ * const pathname = new URL(req.url).pathname;
+ * if (pathname.startsWith("/static")) {
+ * return serveDir(req, {
+ * fsRoot: "path/to/static/files/dir",
+ * });
+ * }
+ * // Do dynamic responses
+ * return new Response();
+ * });
+ * ```
+ *
+ * @example Changing the URL root
+ *
+ * Requests to `/static/path/to/file` will be served from `./public/path/to/file`.
+ *
+ * ```ts ignore
+ * import { serveDir } from "@std/http/file-server";
+ *
+ * Deno.serve((req) => serveDir(req, {
+ * fsRoot: "public",
+ * urlRoot: "static",
+ * }));
+ * ```
+ *
+ * @param req The request to handle
+ * @param opts Additional options.
+ * @returns A response for the request.
+ */ export async function serveDir(req, opts = {}) {
+ if (req.method !== METHOD.Get) {
+ return createStandardResponse(STATUS_CODE.MethodNotAllowed);
+ }
+ let response;
+ try {
+ response = await createServeDirResponse(req, opts);
+ } catch (error) {
+ if (!opts.quiet) logError(error);
+ response = error instanceof Deno.errors.NotFound ? createStandardResponse(STATUS_CODE.NotFound) : createStandardResponse(STATUS_CODE.InternalServerError);
+ }
+ // Do not update the header if the response is a 301 redirect.
+ const isRedirectResponse = isRedirectStatus(response.status);
+ if (opts.enableCors && !isRedirectResponse) {
+ response.headers.append(HEADER.AccessControlAllowOrigin, "*");
+ response.headers.append(HEADER.AccessControlAllowHeaders, "Origin, X-Requested-With, Content-Type, Accept, Range");
+ }
+ if (!opts.quiet) serverLog(req, response.status);
+ if (opts.headers && !isRedirectResponse) {
+ for (const header of opts.headers){
+ const headerSplit = header.split(":");
+ const name = headerSplit[0];
+ const value = headerSplit.slice(1).join(":");
+ response.headers.append(name, value);
+ }
+ }
+ return response;
+}
+async function createServeDirResponse(req, opts) {
+ const target = opts.fsRoot ?? ".";
+ const urlRoot = opts.urlRoot;
+ const showIndex = opts.showIndex ?? true;
+ const showDotfiles = opts.showDotfiles || false;
+ const { etagAlgorithm = "SHA-256", showDirListing = false, quiet = false } = opts;
+ const url = new URL(req.url);
+ const decodedUrl = decodeURIComponent(url.pathname);
+ let normalizedPath = posixNormalize(decodedUrl);
+ if (urlRoot && !normalizedPath.startsWith("/" + urlRoot)) {
+ return createStandardResponse(STATUS_CODE.NotFound);
+ }
+ // Redirect paths like `/foo////bar` and `/foo/bar/////` to normalized paths.
+ if (normalizedPath !== decodedUrl) {
+ url.pathname = normalizedPath;
+ return Response.redirect(url, 301);
+ }
+ if (urlRoot) {
+ normalizedPath = normalizedPath.replace(urlRoot, "");
+ }
+ // Remove trailing slashes to avoid ENOENT errors
+ // when accessing a path to a file with a trailing slash.
+ if (normalizedPath.endsWith("/")) {
+ normalizedPath = normalizedPath.slice(0, -1);
+ }
+ // Exclude dotfiles if showDotfiles is false
+ if (!showDotfiles && /\/\./.test(normalizedPath)) {
+ return createStandardResponse(STATUS_CODE.NotFound);
+ }
+ const fsPath = join(target, normalizedPath);
+ const fileInfo = await Deno.stat(fsPath);
+ // For files, remove the trailing slash from the path.
+ if (fileInfo.isFile && url.pathname.endsWith("/")) {
+ url.pathname = url.pathname.slice(0, -1);
+ return Response.redirect(url, 301);
+ }
+ // For directories, the path must have a trailing slash.
+ if (fileInfo.isDirectory && !url.pathname.endsWith("/")) {
+ // On directory listing pages,
+ // if the current URL's pathname doesn't end with a slash, any
+ // relative URLs in the index file will resolve against the parent
+ // directory, rather than the current directory. To prevent that, we
+ // return a 301 redirect to the URL with a slash.
+ url.pathname += "/";
+ return Response.redirect(url, 301);
+ }
+ // if target is file, serve file.
+ if (!fileInfo.isDirectory) {
+ return serveFile(req, fsPath, {
+ etagAlgorithm,
+ fileInfo
+ });
+ }
+ // if target is directory, serve index or dir listing.
+ if (showIndex) {
+ const indexPath = join(fsPath, "index.html");
+ let indexFileInfo;
+ try {
+ indexFileInfo = await Deno.lstat(indexPath);
+ } catch (error) {
+ if (!(error instanceof Deno.errors.NotFound)) {
+ throw error;
+ }
+ // skip Not Found error
+ }
+ if (indexFileInfo?.isFile) {
+ return serveFile(req, indexPath, {
+ etagAlgorithm,
+ fileInfo: indexFileInfo
+ });
+ }
+ }
+ if (showDirListing) {
+ return serveDirIndex(fsPath, {
+ showDotfiles,
+ target,
+ quiet
+ });
+ }
+ return createStandardResponse(STATUS_CODE.NotFound);
+}
+function logError(error) {
+ // deno-lint-ignore no-console
+ console.error(`%c${error.message}`, "color: red");
+}
+function main() {
+ const serverArgs = parseArgs(Deno.args, {
+ string: [
+ "port",
+ "host",
+ "cert",
+ "key",
+ "header"
+ ],
+ boolean: [
+ "help",
+ "dir-listing",
+ "dotfiles",
+ "cors",
+ "verbose",
+ "version"
+ ],
+ negatable: [
+ "dir-listing",
+ "dotfiles",
+ "cors"
+ ],
+ collect: [
+ "header"
+ ],
+ default: {
+ "dir-listing": true,
+ dotfiles: true,
+ cors: true,
+ verbose: false,
+ version: false,
+ host: "0.0.0.0",
+ port: undefined,
+ cert: "",
+ key: ""
+ },
+ alias: {
+ p: "port",
+ c: "cert",
+ k: "key",
+ h: "help",
+ v: "verbose",
+ V: "version",
+ H: "header"
+ }
+ });
+ const port = serverArgs.port ? Number(serverArgs.port) : undefined;
+ const headers = serverArgs.header ?? [];
+ const host = serverArgs.host;
+ const certFile = serverArgs.cert;
+ const keyFile = serverArgs.key;
+ if (serverArgs.help) {
+ printUsage();
+ Deno.exit();
+ }
+ if (serverArgs.version) {
+ // deno-lint-ignore no-console
+ console.log(`Deno File Server ${denoConfig.version}`);
+ Deno.exit();
+ }
+ if (keyFile || certFile) {
+ if (keyFile === "" || certFile === "") {
+ // deno-lint-ignore no-console
+ console.log("--key and --cert are required for TLS");
+ printUsage();
+ Deno.exit(1);
+ }
+ }
+ const wild = serverArgs._;
+ const target = resolve(wild[0] ?? "");
+ const handler = (req)=>{
+ return serveDir(req, {
+ fsRoot: target,
+ showDirListing: serverArgs["dir-listing"],
+ showDotfiles: serverArgs.dotfiles,
+ enableCors: serverArgs.cors,
+ quiet: !serverArgs.verbose,
+ headers
+ });
+ };
+ const useTls = !!(keyFile && certFile);
+ function onListen({ port, hostname }) {
+ let networkAddress = undefined;
+ if (NET_PERM_STATUS === "granted") {
+ networkAddress = getNetworkAddress();
+ }
+ const protocol = useTls ? "https" : "http";
+ const host = Deno.build.os === "windows" && hostname === "0.0.0.0" ? "localhost" : hostname;
+ const formattedHost = hostname.includes(":") ? `[${host}]` : host;
+ let message = `Listening on:\n- Local: ${protocol}://${formattedHost}:${port}`;
+ if (networkAddress && !DENO_DEPLOYMENT_ID) {
+ message += `\n- Network: ${protocol}://${networkAddress}:${port}`;
+ }
+ // deno-lint-ignore no-console
+ console.log(message);
+ }
+ // TODO(petamoriken): Migrate `Deno.ServeTcpOptions | (Deno.ServeTcpOptions & Deno.TlsCertifiedKeyOptions)` in v2
+ const options = {
+ hostname: host,
+ onListen
+ };
+ if (port !== undefined) {
+ options.port = port;
+ }
+ if (useTls) {
+ options.cert = Deno.readTextFileSync(certFile);
+ options.key = Deno.readTextFileSync(keyFile);
+ }
+ Deno.serve(options, handler);
+}
+function printUsage() {
+ // deno-lint-ignore no-console
+ console.log(`Deno File Server ${denoConfig.version}
+ Serves a local directory in HTTP.
+
+INSTALL:
+ deno install --allow-net --allow-read --allow-sys jsr:@std/http@${denoConfig.version}/file-server
+
+USAGE:
+ file_server [path] [options]
+
+OPTIONS:
+ -h, --help Prints help information
+ -p, --port <PORT> Set port (default is 8000)
+ --cors Enable CORS via the "Access-Control-Allow-Origin" header
+ --host <HOST> Hostname (default is 0.0.0.0)
+ -c, --cert <FILE> TLS certificate file (enables TLS)
+ -k, --key <FILE> TLS key file (enables TLS)
+ -H, --header <HEADER> Sets a header on every request.
+ (e.g. --header "Cache-Control: no-cache")
+ This option can be specified multiple times.
+ --no-dir-listing Disable directory listing
+ --no-dotfiles Do not show dotfiles
+ --no-cors Disable cross-origin resource sharing
+ -v, --verbose Print request level logs
+ -V, --version Print version information
+
+ All TLS options are required when one is provided.`);
+}
+if (import.meta.main) {
+ main();
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHR0cC8xLjAuMTYvZmlsZV9zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgLVMgZGVubyBydW4gLS1hbGxvdy1uZXQgLS1hbGxvdy1yZWFkXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG4vLyBUaGlzIHByb2dyYW0gc2VydmVzIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvdmVyIEhUVFAuXG4vLyBUT0RPKGJhcnRsb21pZWp1KTogQWRkIHRlc3RzIGxpa2UgdGhlc2U6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vaW5kZXh6ZXJvL2h0dHAtc2VydmVyL2Jsb2IvbWFzdGVyL3Rlc3QvaHR0cC1zZXJ2ZXItdGVzdC5qc1xuXG4vKipcbiAqIENvbnRhaW5zIGZ1bmN0aW9ucyB7QGxpbmtjb2RlIHNlcnZlRGlyfSBhbmQge0BsaW5rY29kZSBzZXJ2ZUZpbGV9IGZvclxuICogYnVpbGRpbmcgYSBzdGF0aWMgZmlsZSBzZXJ2ZXIuXG4gKlxuICogVGhpcyBtb2R1bGUgY2FuIGFsc28gYmUgdXNlZCBhcyBhIENMSS4gSWYgeW91IHdhbnQgdG8gcnVuIGl0IGRpcmVjdGx5OlxuICpcbiAqIGBgYHNoZWxsXG4gKiA+ICMgc3RhcnQgc2VydmVyXG4gKiA+IGRlbm8gcnVuIC0tYWxsb3ctbmV0IC0tYWxsb3ctcmVhZCAtLWFsbG93LXN5cyBqc3I6QHN0ZC9odHRwL2ZpbGUtc2VydmVyXG4gKiA+ICMgc2hvdyBoZWxwXG4gKiA+IGRlbm8gcnVuIGpzcjpAc3RkL2h0dHAvZmlsZS1zZXJ2ZXIgLS1oZWxwXG4gKiBgYGBcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGFuZCBydW46XG4gKlxuICogYGBgc2hlbGxcbiAqID4gIyBpbnN0YWxsXG4gKiA+IGRlbm8gaW5zdGFsbCAtLWFsbG93LW5ldCAtLWFsbG93LXJlYWQgLS1hbGxvdy1zeXMgLS1nbG9iYWwganNyOkBzdGQvaHR0cC9maWxlLXNlcnZlclxuICogPiAjIHN0YXJ0IHNlcnZlclxuICogPiBmaWxlLXNlcnZlclxuICogPiAjIHNob3cgaGVscFxuICogPiBmaWxlLXNlcnZlciAtLWhlbHBcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBub3JtYWxpemUgYXMgcG9zaXhOb3JtYWxpemUgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvcG9zaXgvbm9ybWFsaXplXCI7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC45L2V4dG5hbWVcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvam9pblwiO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvcmVsYXRpdmVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvcmVzb2x2ZVwiO1xuaW1wb3J0IHsgU0VQQVJBVE9SX1BBVFRFUk4gfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50VHlwZSB9IGZyb20gXCJqc3I6QHN0ZC9tZWRpYS10eXBlc0BeMS4xLjAvY29udGVudC10eXBlXCI7XG5pbXBvcnQgeyBlVGFnLCBpZk5vbmVNYXRjaCB9IGZyb20gXCIuL2V0YWcudHNcIjtcbmltcG9ydCB7XG4gIGlzUmVkaXJlY3RTdGF0dXMsXG4gIFNUQVRVU19DT0RFLFxuICBTVEFUVVNfVEVYVCxcbiAgdHlwZSBTdGF0dXNDb2RlLFxufSBmcm9tIFwiLi9zdGF0dXMudHNcIjtcbmltcG9ydCB7IEJ5dGVTbGljZVN0cmVhbSB9IGZyb20gXCJqc3I6QHN0ZC9zdHJlYW1zQF4xLjAuOS9ieXRlLXNsaWNlLXN0cmVhbVwiO1xuaW1wb3J0IHsgcGFyc2VBcmdzIH0gZnJvbSBcImpzcjpAc3RkL2NsaUBeMS4wLjE3L3BhcnNlLWFyZ3NcIjtcbmltcG9ydCBkZW5vQ29uZmlnIGZyb20gXCIuL2Rlbm8uanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IHsgZm9ybWF0IGFzIGZvcm1hdEJ5dGVzIH0gZnJvbSBcImpzcjpAc3RkL2ZtdEBeMS4wLjgvYnl0ZXNcIjtcbmltcG9ydCB7IGdldE5ldHdvcmtBZGRyZXNzIH0gZnJvbSBcImpzcjpAc3RkL25ldEBeMS4wLjQvdW5zdGFibGUtZ2V0LW5ldHdvcmstYWRkcmVzc1wiO1xuaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSBcImpzcjpAc3RkL2h0bWxAXjEuMC40L2VudGl0aWVzXCI7XG5pbXBvcnQgeyBIRUFERVIgfSBmcm9tIFwiLi91bnN0YWJsZV9oZWFkZXIudHNcIjtcbmltcG9ydCB7IE1FVEhPRCB9IGZyb20gXCIuL3Vuc3RhYmxlX21ldGhvZC50c1wiO1xuXG5pbnRlcmZhY2UgRW50cnlJbmZvIHtcbiAgbW9kZTogc3RyaW5nO1xuICBzaXplOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVOVl9QRVJNX1NUQVRVUyA9XG4gIERlbm8ucGVybWlzc2lvbnMucXVlcnlTeW5jPy4oeyBuYW1lOiBcImVudlwiLCB2YXJpYWJsZTogXCJERU5PX0RFUExPWU1FTlRfSURcIiB9KVxuICAgIC5zdGF0ZSA/PyBcImdyYW50ZWRcIjsgLy8gZm9yIGRlbm8gZGVwbG95XG5jb25zdCBORVRfUEVSTV9TVEFUVVMgPVxuICBEZW5vLnBlcm1pc3Npb25zLnF1ZXJ5U3luYz8uKHsgbmFtZTogXCJzeXNcIiwga2luZDogXCJuZXR3b3JrSW50ZXJmYWNlc1wiIH0pXG4gICAgLnN0YXRlID8/IFwiZ3JhbnRlZFwiOyAvLyBmb3IgZGVubyBkZXBsb3lcbmNvbnN0IERFTk9fREVQTE9ZTUVOVF9JRCA9IEVOVl9QRVJNX1NUQVRVUyA9PT0gXCJncmFudGVkXCJcbiAgPyBEZW5vLmVudi5nZXQoXCJERU5PX0RFUExPWU1FTlRfSURcIilcbiAgOiB1bmRlZmluZWQ7XG5jb25zdCBIQVNIRURfREVOT19ERVBMT1lNRU5UX0lEID0gREVOT19ERVBMT1lNRU5UX0lEXG4gID8gZVRhZyhERU5PX0RFUExPWU1FTlRfSUQsIHsgd2VhazogdHJ1ZSB9KVxuICA6IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gbW9kZVRvU3RyaW5nKGlzRGlyOiBib29sZWFuLCBtYXliZU1vZGU6IG51bWJlciB8IG51bGwpOiBzdHJpbmcge1xuICBjb25zdCBtb2RlTWFwID0gW1wiLS0tXCIsIFwiLS14XCIsIFwiLXctXCIsIFwiLXd4XCIsIFwici0tXCIsIFwici14XCIsIFwicnctXCIsIFwicnd4XCJdO1xuXG4gIGlmIChtYXliZU1vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCIodW5rbm93biBtb2RlKVwiO1xuICB9XG4gIGNvbnN0IG1vZGUgPSBtYXliZU1vZGUudG9TdHJpbmcoOCkucGFkU3RhcnQoMywgXCIwXCIpO1xuICBsZXQgb3V0cHV0ID0gXCJcIjtcbiAgbW9kZVxuICAgIC5zcGxpdChcIlwiKVxuICAgIC5yZXZlcnNlKClcbiAgICAuc2xpY2UoMCwgMylcbiAgICAuZm9yRWFjaCgodikgPT4ge1xuICAgICAgb3V0cHV0ID0gYCR7bW9kZU1hcFsrdl19ICR7b3V0cHV0fWA7XG4gICAgfSk7XG4gIG91dHB1dCA9IGAke2lzRGlyID8gXCJkXCIgOiBcIi1cIn0gJHtvdXRwdXR9YDtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRSZXNwb25zZShzdGF0dXM6IFN0YXR1c0NvZGUsIGluaXQ/OiBSZXNwb25zZUluaXQpIHtcbiAgY29uc3Qgc3RhdHVzVGV4dCA9IFNUQVRVU19URVhUW3N0YXR1c107XG4gIHJldHVybiBuZXcgUmVzcG9uc2Uoc3RhdHVzVGV4dCwgeyBzdGF0dXMsIHN0YXR1c1RleHQsIC4uLmluaXQgfSk7XG59XG5cbi8qKlxuICogcGFyc2UgcmFuZ2UgaGVhZGVyLlxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogcGFyc2VSYW5nZUhlYWRlcihcImJ5dGVzPTAtMTAwXCIsICAgNTAwKTsgLy8gPT4geyBzdGFydDogMCwgZW5kOiAxMDAgfVxuICogcGFyc2VSYW5nZUhlYWRlcihcImJ5dGVzPTAtXCIsICAgICAgNTAwKTsgLy8gPT4geyBzdGFydDogMCwgZW5kOiA0OTkgfVxuICogcGFyc2VSYW5nZUhlYWRlcihcImJ5dGVzPS0xMDBcIiwgICAgNTAwKTsgLy8gPT4geyBzdGFydDogNDAwLCBlbmQ6IDQ5OSB9XG4gKiBwYXJzZVJhbmdlSGVhZGVyKFwiYnl0ZXM9aW52YWxpZFwiLCA1MDApOyAvLyA9PiBudWxsXG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBDdXJyZW50bHksIG5vIHN1cHBvcnQgZm9yIG11bHRpcGxlIFJhbmdlcyAoZS5nLiBgYnl0ZXM9MC0xMCwgMjAtMzBgKVxuICovXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyKHJhbmdlVmFsdWU6IHN0cmluZywgZmlsZVNpemU6IG51bWJlcikge1xuICBjb25zdCByYW5nZVJlZ2V4ID0gL2J5dGVzPSg/PHN0YXJ0PlxcZCspPy0oPzxlbmQ+XFxkKyk/JC91O1xuICBjb25zdCBwYXJzZWQgPSByYW5nZVZhbHVlLm1hdGNoKHJhbmdlUmVnZXgpO1xuXG4gIGlmICghcGFyc2VkIHx8ICFwYXJzZWQuZ3JvdXBzKSB7XG4gICAgLy8gZmFpbGVkIHRvIHBhcnNlIHJhbmdlIGhlYWRlclxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBwYXJzZWQuZ3JvdXBzO1xuICBpZiAoc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnQ6ICtzdGFydCwgZW5kOiArZW5kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0OiArc3RhcnQsIGVuZDogZmlsZVNpemUgLSAxIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZXhhbXBsZTogYGJ5dGVzPS0xMDBgIG1lYW5zIHRoZSBsYXN0IDEwMCBieXRlcy5cbiAgICAgIHJldHVybiB7IHN0YXJ0OiBmaWxlU2l6ZSAtICtlbmQsIGVuZDogZmlsZVNpemUgLSAxIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhaWxlZCB0byBwYXJzZSByYW5nZSBoZWFkZXJcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBzZXJ2ZUZpbGV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZUZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhbGdvcml0aG0gdG8gdXNlIGZvciBnZW5lcmF0aW5nIHRoZSBFVGFnLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7XCJTSEEtMjU2XCJ9XG4gICAqL1xuICBldGFnQWxnb3JpdGhtPzogQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG9iamVjdCByZXR1cm5lZCBieSB7QGxpbmtjb2RlIERlbm8uc3RhdH0uIEl0IGlzIHVzZWQgZm9yXG4gICAqIG9wdGltaXphdGlvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHtAbGlua2NvZGUgRGVuby5zdGF0fSB3aXRoIHRoZSBwcm92aWRlZFxuICAgKiBgZmlsZVBhdGhgLlxuICAgKi9cbiAgZmlsZUluZm8/OiBEZW5vLkZpbGVJbmZvO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEge0BsaW5rY29kZSBSZXNwb25zZX0gd2l0aCB0aGUgcmVxdWVzdGVkIGZpbGUgYXMgdGhlIGJvZHkuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgc2VydmVGaWxlIH0gZnJvbSBcIkBzdGQvaHR0cC9maWxlLXNlcnZlclwiO1xuICpcbiAqIERlbm8uc2VydmUoKHJlcSkgPT4ge1xuICogICByZXR1cm4gc2VydmVGaWxlKHJlcSwgXCJSRUFETUUubWRcIik7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSByZXEgVGhlIHNlcnZlciByZXF1ZXN0IGNvbnRleHQgdXNlZCB0byBjbGVhbnVwIHRoZSBmaWxlIGhhbmRsZS5cbiAqIEBwYXJhbSBmaWxlUGF0aCBQYXRoIG9mIHRoZSBmaWxlIHRvIHNlcnZlLlxuICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zLlxuICogQHJldHVybnMgQSByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJ2ZUZpbGUoXG4gIHJlcTogUmVxdWVzdCxcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgb3B0aW9ucz86IFNlcnZlRmlsZU9wdGlvbnMsXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGlmIChyZXEubWV0aG9kICE9PSBNRVRIT0QuR2V0ICYmIHJlcS5tZXRob2QgIT09IE1FVEhPRC5IZWFkKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUmVzcG9uc2UoU1RBVFVTX0NPREUuTWV0aG9kTm90QWxsb3dlZCk7XG4gIH1cblxuICBsZXQgeyBldGFnQWxnb3JpdGhtOiBhbGdvcml0aG0gPSBcIlNIQS0yNTZcIiwgZmlsZUluZm8gfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgdHJ5IHtcbiAgICBmaWxlSW5mbyA/Pz0gYXdhaXQgRGVuby5zdGF0KGZpbGVQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkge1xuICAgICAgYXdhaXQgcmVxLmJvZHk/LmNhbmNlbCgpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUmVzcG9uc2UoU1RBVFVTX0NPREUuTm90Rm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBpZiAoZmlsZUluZm8uaXNEaXJlY3RvcnkpIHtcbiAgICBhd2FpdCByZXEuYm9keT8uY2FuY2VsKCk7XG4gICAgcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUmVzcG9uc2UoU1RBVFVTX0NPREUuTm90Rm91bmQpO1xuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IGNyZWF0ZUJhc2VIZWFkZXJzKCk7XG5cbiAgY29uc3QgZXRhZyA9IGZpbGVJbmZvLm10aW1lXG4gICAgPyBhd2FpdCBlVGFnKGZpbGVJbmZvLCB7IGFsZ29yaXRobSB9KVxuICAgIDogYXdhaXQgSEFTSEVEX0RFTk9fREVQTE9ZTUVOVF9JRDtcblxuICAvLyBTZXQgbGFzdCBtb2RpZmllZCBoZWFkZXIgaWYgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGlzIGF2YWlsYWJsZVxuICBpZiAoZmlsZUluZm8ubXRpbWUpIHtcbiAgICBoZWFkZXJzLnNldChIRUFERVIuTGFzdE1vZGlmaWVkLCBmaWxlSW5mby5tdGltZS50b1VUQ1N0cmluZygpKTtcbiAgfVxuICBpZiAoZXRhZykge1xuICAgIGhlYWRlcnMuc2V0KEhFQURFUi5FVGFnLCBldGFnKTtcbiAgfVxuXG4gIC8vIFNldCBtaW1lLXR5cGUgdXNpbmcgdGhlIGZpbGUgZXh0ZW5zaW9uIGluIGZpbGVQYXRoXG4gIGNvbnN0IGNvbnRlbnRUeXBlVmFsdWUgPSBjb250ZW50VHlwZShleHRuYW1lKGZpbGVQYXRoKSk7XG4gIGlmIChjb250ZW50VHlwZVZhbHVlKSB7XG4gICAgaGVhZGVycy5zZXQoSEVBREVSLkNvbnRlbnRUeXBlLCBjb250ZW50VHlwZVZhbHVlKTtcbiAgfVxuICBjb25zdCBmaWxlU2l6ZSA9IGZpbGVJbmZvLnNpemU7XG5cbiAgaWYgKHJlcS5tZXRob2QgPT09IE1FVEhPRC5IZWFkKSB7XG4gICAgLy8gU2V0IGNvbnRlbnQgbGVuZ3RoXG4gICAgaGVhZGVycy5zZXQoSEVBREVSLkNvbnRlbnRMZW5ndGgsIGAke2ZpbGVTaXplfWApO1xuXG4gICAgY29uc3Qgc3RhdHVzID0gU1RBVFVTX0NPREUuT0s7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgICBzdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiBTVEFUVVNfVEVYVFtzdGF0dXNdLFxuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChldGFnIHx8IGZpbGVJbmZvLm10aW1lKSB7XG4gICAgLy8gSWYgYSBgaWYtbm9uZS1tYXRjaGAgaGVhZGVyIGlzIHByZXNlbnQgYW5kIHRoZSB2YWx1ZSBtYXRjaGVzIHRoZSB0YWcgb3JcbiAgICAvLyBpZiBhIGBpZi1tb2RpZmllZC1zaW5jZWAgaGVhZGVyIGlzIHByZXNlbnQgYW5kIHRoZSB2YWx1ZSBpcyBiaWdnZXIgdGhhblxuICAgIC8vIHRoZSBhY2Nlc3MgdGltZXN0YW1wIHZhbHVlLCB0aGVuIHJldHVybiAzMDRcbiAgICBjb25zdCBpZk5vbmVNYXRjaFZhbHVlID0gcmVxLmhlYWRlcnMuZ2V0KEhFQURFUi5JZk5vbmVNYXRjaCk7XG4gICAgY29uc3QgaWZNb2RpZmllZFNpbmNlVmFsdWUgPSByZXEuaGVhZGVycy5nZXQoSEVBREVSLklmTW9kaWZpZWRTaW5jZSk7XG4gICAgaWYgKFxuICAgICAgKCFpZk5vbmVNYXRjaChpZk5vbmVNYXRjaFZhbHVlLCBldGFnKSkgfHxcbiAgICAgIChpZk5vbmVNYXRjaFZhbHVlID09PSBudWxsICYmXG4gICAgICAgIGZpbGVJbmZvLm10aW1lICYmXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZVZhbHVlICYmXG4gICAgICAgIGZpbGVJbmZvLm10aW1lLmdldFRpbWUoKSA8XG4gICAgICAgICAgbmV3IERhdGUoaWZNb2RpZmllZFNpbmNlVmFsdWUpLmdldFRpbWUoKSArIDEwMDApXG4gICAgKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBTVEFUVVNfQ09ERS5Ob3RNb2RpZmllZDtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IFNUQVRVU19URVhUW3N0YXR1c10sXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByYW5nZVZhbHVlID0gcmVxLmhlYWRlcnMuZ2V0KEhFQURFUi5SYW5nZSk7XG5cbiAgLy8gaGFuZGxlIHJhbmdlIHJlcXVlc3RcbiAgLy8gTm90ZTogU29tZSBjbGllbnRzIGFkZCBhIFJhbmdlIGhlYWRlciB0byBhbGwgcmVxdWVzdHMgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlLlxuICAvLyBJZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWdub3JlIHRoZSByYW5nZSBoZWFkZXIgYW5kIHJlc3BvbmQgd2l0aCBhIDIwMCByYXRoZXIgdGhhbiBhIDQxNi5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nby9ibG9iLzBkMzQ3NTQ0Y2JjYTBmNDJiMTYwNDI0ZjZiYzI0NThlYmNjN2IzZmMvc3JjL25ldC9odHRwL2ZzLmdvI0wyNzMtTDI3NlxuICBpZiAocmFuZ2VWYWx1ZSAmJiAwIDwgZmlsZVNpemUpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVJhbmdlSGVhZGVyKHJhbmdlVmFsdWUsIGZpbGVTaXplKTtcblxuICAgIC8vIFJldHVybnMgMjAwIE9LIGlmIHBhcnNpbmcgdGhlIHJhbmdlIGhlYWRlciBmYWlsc1xuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAvLyBTZXQgY29udGVudCBsZW5ndGhcbiAgICAgIGhlYWRlcnMuc2V0KEhFQURFUi5Db250ZW50TGVuZ3RoLCBgJHtmaWxlU2l6ZX1gKTtcblxuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IERlbm8ub3BlbihmaWxlUGF0aCk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBTVEFUVVNfQ09ERS5PSztcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoZmlsZS5yZWFkYWJsZSwge1xuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IFNUQVRVU19URVhUW3N0YXR1c10sXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gNDE2IFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSBpZiBpbnZhbGlkIHJhbmdlIGhlYWRlciB2YWx1ZVxuICAgIGlmIChcbiAgICAgIHBhcnNlZC5lbmQgPCAwIHx8XG4gICAgICBwYXJzZWQuZW5kIDwgcGFyc2VkLnN0YXJ0IHx8XG4gICAgICBmaWxlU2l6ZSA8PSBwYXJzZWQuc3RhcnRcbiAgICApIHtcbiAgICAgIC8vIFNldCB0aGUgXCJDb250ZW50LXJhbmdlXCIgaGVhZGVyXG4gICAgICBoZWFkZXJzLnNldChIRUFERVIuQ29udGVudFJhbmdlLCBgYnl0ZXMgKi8ke2ZpbGVTaXplfWApO1xuXG4gICAgICByZXR1cm4gY3JlYXRlU3RhbmRhcmRSZXNwb25zZShcbiAgICAgICAgU1RBVFVTX0NPREUuUmFuZ2VOb3RTYXRpc2ZpYWJsZSxcbiAgICAgICAgeyBoZWFkZXJzIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNsYW1wcyB0aGUgcmFuZ2UgaGVhZGVyIHZhbHVlXG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBwYXJzZWQuc3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHBhcnNlZC5lbmQsIGZpbGVTaXplIC0gMSk7XG5cbiAgICAvLyBTZXQgdGhlIFwiQ29udGVudC1yYW5nZVwiIGhlYWRlclxuICAgIGhlYWRlcnMuc2V0KEhFQURFUi5Db250ZW50UmFuZ2UsIGBieXRlcyAke3N0YXJ0fS0ke2VuZH0vJHtmaWxlU2l6ZX1gKTtcblxuICAgIC8vIFNldCBjb250ZW50IGxlbmd0aFxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBlbmQgLSBzdGFydCArIDE7XG4gICAgaGVhZGVycy5zZXQoSEVBREVSLkNvbnRlbnRMZW5ndGgsIGAke2NvbnRlbnRMZW5ndGh9YCk7XG5cbiAgICAvLyBSZXR1cm4gMjA2IFBhcnRpYWwgQ29udGVudFxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBEZW5vLm9wZW4oZmlsZVBhdGgpO1xuICAgIGF3YWl0IGZpbGUuc2VlayhzdGFydCwgRGVuby5TZWVrTW9kZS5TdGFydCk7XG4gICAgY29uc3Qgc2xpY2VkID0gZmlsZS5yZWFkYWJsZVxuICAgICAgLnBpcGVUaHJvdWdoKG5ldyBCeXRlU2xpY2VTdHJlYW0oMCwgY29udGVudExlbmd0aCAtIDEpKTtcbiAgICBjb25zdCBzdGF0dXMgPSBTVEFUVVNfQ09ERS5QYXJ0aWFsQ29udGVudDtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHNsaWNlZCwge1xuICAgICAgc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX1RFWFRbc3RhdHVzXSxcbiAgICAgIGhlYWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICAvLyBTZXQgY29udGVudCBsZW5ndGhcbiAgaGVhZGVycy5zZXQoSEVBREVSLkNvbnRlbnRMZW5ndGgsIGAke2ZpbGVTaXplfWApO1xuXG4gIGNvbnN0IGZpbGUgPSBhd2FpdCBEZW5vLm9wZW4oZmlsZVBhdGgpO1xuICBjb25zdCBzdGF0dXMgPSBTVEFUVVNfQ09ERS5PSztcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShmaWxlLnJlYWRhYmxlLCB7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IFNUQVRVU19URVhUW3N0YXR1c10sXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlcnZlRGlySW5kZXgoXG4gIGRpclBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIHNob3dEb3RmaWxlczogYm9vbGVhbjtcbiAgICB0YXJnZXQ6IHN0cmluZztcbiAgICBxdWlldDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgfSxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgeyBzaG93RG90ZmlsZXMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGRpclVybCA9IGAvJHtcbiAgICByZWxhdGl2ZShvcHRpb25zLnRhcmdldCwgZGlyUGF0aCkucmVwbGFjZUFsbChcbiAgICAgIG5ldyBSZWdFeHAoU0VQQVJBVE9SX1BBVFRFUk4sIFwiZ1wiKSxcbiAgICAgIFwiL1wiLFxuICAgIClcbiAgfWA7XG4gIGNvbnN0IGxpc3RFbnRyeVByb21pc2U6IFByb21pc2U8RW50cnlJbmZvPltdID0gW107XG5cbiAgLy8gaWYgXCIuLlwiIG1ha2VzIHNlbnNlXG4gIGlmIChkaXJVcmwgIT09IFwiL1wiKSB7XG4gICAgY29uc3QgcHJldlBhdGggPSBqb2luKGRpclBhdGgsIFwiLi5cIik7XG4gICAgY29uc3QgZW50cnlJbmZvID0gRGVuby5zdGF0KHByZXZQYXRoKS50aGVuKChmaWxlSW5mbyk6IEVudHJ5SW5mbyA9PiAoe1xuICAgICAgbW9kZTogbW9kZVRvU3RyaW5nKHRydWUsIGZpbGVJbmZvLm1vZGUpLFxuICAgICAgc2l6ZTogXCJcIixcbiAgICAgIG5hbWU6IFwiLi4vXCIsXG4gICAgICB1cmw6IFwiLi5cIixcbiAgICB9KSk7XG4gICAgbGlzdEVudHJ5UHJvbWlzZS5wdXNoKGVudHJ5SW5mbyk7XG4gIH1cblxuICAvLyBSZWFkIGZpbGVJbmZvIGluIHBhcmFsbGVsXG4gIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgRGVuby5yZWFkRGlyKGRpclBhdGgpKSB7XG4gICAgaWYgKCFzaG93RG90ZmlsZXMgJiYgZW50cnkubmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG4gICAgY29uc3QgZmlsZVVybCA9IGVuY29kZVVSSUNvbXBvbmVudChlbnRyeS5uYW1lKVxuICAgICAgLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpO1xuXG4gICAgbGlzdEVudHJ5UHJvbWlzZS5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWxlSW5mbyA9IGF3YWl0IERlbm8uc3RhdChmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogbW9kZVRvU3RyaW5nKGVudHJ5LmlzRGlyZWN0b3J5LCBmaWxlSW5mby5tb2RlKSxcbiAgICAgICAgICBzaXplOiBlbnRyeS5pc0ZpbGUgPyBmb3JtYXRCeXRlcyhmaWxlSW5mby5zaXplID8/IDApIDogXCJcIixcbiAgICAgICAgICBuYW1lOiBgJHtlbnRyeS5uYW1lfSR7ZW50cnkuaXNEaXJlY3RvcnkgPyBcIi9cIiA6IFwiXCJ9YCxcbiAgICAgICAgICB1cmw6IGAuLyR7ZmlsZVVybH0ke2VudHJ5LmlzRGlyZWN0b3J5ID8gXCIvXCIgOiBcIlwifWAsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBOb3RlOiBEZW5vLnN0YXQgZm9yIHdpbmRvd3Mgc3lzdGVtIGZpbGVzIG1heSBiZSByZWplY3RlZCB3aXRoIG9zIGVycm9yIDMyLlxuICAgICAgICBpZiAoIW9wdGlvbnMucXVpZXQpIGxvZ0Vycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiBcIih1bmtub3duIG1vZGUpXCIsXG4gICAgICAgICAgc2l6ZTogXCJcIixcbiAgICAgICAgICBuYW1lOiBgJHtlbnRyeS5uYW1lfSR7ZW50cnkuaXNEaXJlY3RvcnkgPyBcIi9cIiA6IFwiXCJ9YCxcbiAgICAgICAgICB1cmw6IGAuLyR7ZmlsZVVybH0ke2VudHJ5LmlzRGlyZWN0b3J5ID8gXCIvXCIgOiBcIlwifWAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSkoKSk7XG4gIH1cblxuICBjb25zdCBsaXN0RW50cnkgPSBhd2FpdCBQcm9taXNlLmFsbChsaXN0RW50cnlQcm9taXNlKTtcbiAgbGlzdEVudHJ5LnNvcnQoKGEsIGIpID0+XG4gICAgLy8gVE9ETyhpdWlvaXVhKTogQWRkIHRlc3QgdG8gZW5zdXJlIGxpc3Qgb3JkZXIgaXMgY29ycmVjdFxuICAgIGEubmFtZS50b0xvd2VyQ2FzZSgpID4gYi5uYW1lLnRvTG93ZXJDYXNlKCkgPyAxIDogLTFcbiAgKTtcbiAgY29uc3QgZm9ybWF0dGVkRGlyVXJsID0gYCR7ZGlyVXJsLnJlcGxhY2UoL1xcLyQvLCBcIlwiKX0vYDtcbiAgY29uc3QgcGFnZSA9IGRpclZpZXdlclRlbXBsYXRlKGZvcm1hdHRlZERpclVybCwgbGlzdEVudHJ5KTtcblxuICBjb25zdCBoZWFkZXJzID0gY3JlYXRlQmFzZUhlYWRlcnMoKTtcbiAgaGVhZGVycy5zZXQoSEVBREVSLkNvbnRlbnRUeXBlLCBcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiKTtcblxuICBjb25zdCBzdGF0dXMgPSBTVEFUVVNfQ09ERS5PSztcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShwYWdlLCB7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IFNUQVRVU19URVhUW3N0YXR1c10sXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlcnZlckxvZyhyZXE6IFJlcXVlc3QsIHN0YXR1czogbnVtYmVyKSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IGRhdGVGbXQgPSBgWyR7ZC5zbGljZSgwLCAxMCl9ICR7ZC5zbGljZSgxMSwgMTkpfV1gO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICBjb25zdCBzID0gYCR7ZGF0ZUZtdH0gWyR7cmVxLm1ldGhvZH1dICR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH0gJHtzdGF0dXN9YDtcbiAgLy8gdXNpbmcgY29uc29sZS5kZWJ1ZyBpbnN0ZWFkIG9mIGNvbnNvbGUubG9nIHNvIGNocm9tZSBpbnNwZWN0IHVzZXJzIGNhbiBoaWRlIHJlcXVlc3QgbG9nc1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnNvbGVcbiAgY29uc29sZS5kZWJ1ZyhzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUhlYWRlcnMoKTogSGVhZGVycyB7XG4gIHJldHVybiBuZXcgSGVhZGVycyh7XG4gICAgc2VydmVyOiBcImRlbm9cIixcbiAgICAvLyBTZXQgXCJhY2NlcHQtcmFuZ2VzXCIgc28gdGhhdCB0aGUgY2xpZW50IGtub3dzIGl0IGNhbiBtYWtlIHJhbmdlIHJlcXVlc3RzIG9uIGZ1dHVyZSByZXF1ZXN0c1xuICAgIFtIRUFERVIuQWNjZXB0UmFuZ2VzXTogXCJieXRlc1wiLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGlyVmlld2VyVGVtcGxhdGUoZGlybmFtZTogc3RyaW5nLCBlbnRyaWVzOiBFbnRyeUluZm9bXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNwbGl0RGlybmFtZSA9IGRpcm5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcigocGF0aCkgPT4gQm9vbGVhbihwYXRoKSk7XG4gIGNvbnN0IGhlYWRlclBhdGhzID0gW1wiaG9tZVwiLCAuLi5zcGxpdERpcm5hbWVdO1xuXG4gIHJldHVybiBgXG4gICAgPCFET0NUWVBFIGh0bWw+XG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCIgLz5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIiAvPlxuICAgICAgICA8bWV0YSBodHRwLWVxdWl2PVwiWC1VQS1Db21wYXRpYmxlXCIgY29udGVudD1cImllPWVkZ2VcIiAvPlxuICAgICAgICA8dGl0bGU+RGVubyBGaWxlIFNlcnZlcjwvdGl0bGU+XG4gICAgICAgIDxzdHlsZT5cbiAgICAgICAgICA6cm9vdCB7XG4gICAgICAgICAgICAtLWJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gICAgICAgICAgICAtLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgICAgICA6cm9vdCB7XG4gICAgICAgICAgICAgIC0tYmFja2dyb3VuZC1jb2xvcjogIzI5MjkyOTtcbiAgICAgICAgICAgICAgLS1jb2xvcjogI2ZmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoZWFkIHtcbiAgICAgICAgICAgICAgY29sb3I6ICM3ZjdmN2Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAgICAgICAgICAgbWFpbiB7XG4gICAgICAgICAgICAgIG1heC13aWR0aDogOTYwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5IHtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4O1xuICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogNjAwcHgpIHtcbiAgICAgICAgICAgIG1haW4ge1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZC1jb2xvcik7XG4gICAgICAgICAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZjtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS40MztcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgICAgfVxuICAgICAgICAgIGEge1xuICAgICAgICAgICAgY29sb3I6ICMyMTk2ZjM7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGE6aG92ZXIge1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoZWFkIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoZWFkIHRoIHtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWJsZSB0ZCB7XG4gICAgICAgICAgICBwYWRkaW5nOiA2cHggMzZweCA2cHggMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAuc2l6ZSB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMnB4IDZweCAyNHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAubW9kZSB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gICAgICAgICAgfVxuICAgICAgICA8L3N0eWxlPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxtYWluPlxuICAgICAgICAgIDxoMT5JbmRleCBvZlxuICAgICAgICAgICR7XG4gICAgaGVhZGVyUGF0aHNcbiAgICAgIC5tYXAoKHBhdGgsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChwYXRoID09PSBcIlwiKSByZXR1cm4gXCJcIjtcbiAgICAgICAgY29uc3QgZGVwdGggPSBoZWFkZXJQYXRocy5sZW5ndGggLSBpbmRleCAtIDE7XG4gICAgICAgIGxldCBsaW5rO1xuICAgICAgICBpZiAoZGVwdGggPT0gMCkge1xuICAgICAgICAgIGxpbmsgPSBcIi5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rID0gXCIuLi9cIi5yZXBlYXQoZGVwdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7bGlua31cIj4ke2VzY2FwZShwYXRoKX08L2E+YDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIi9cIilcbiAgfS9cbiAgICAgICAgICA8L2gxPlxuICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0aD5Nb2RlPC90aD5cbiAgICAgICAgICAgICAgICA8dGg+U2l6ZTwvdGg+XG4gICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICR7XG4gICAgZW50cmllc1xuICAgICAgLm1hcChcbiAgICAgICAgKGVudHJ5KSA9PiBgXG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2VudHJ5Lm1vZGV9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2VudHJ5LnNpemV9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiJHtlc2NhcGUoZW50cnkudXJsKX1cIj4ke2VzY2FwZShlbnRyeS5uYW1lKX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIGAsXG4gICAgICApXG4gICAgICAuam9pbihcIlwiKVxuICB9XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9tYWluPlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgYDtcbn1cblxuLyoqIEludGVyZmFjZSBmb3Igc2VydmVEaXIgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVEaXJPcHRpb25zIHtcbiAgLyoqIFNlcnZlcyB0aGUgZmlsZXMgdW5kZXIgdGhlIGdpdmVuIGRpcmVjdG9yeSByb290LiBEZWZhdWx0cyB0byB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7XCIuXCJ9XG4gICAqL1xuICBmc1Jvb3Q/OiBzdHJpbmc7XG4gIC8qKiBTcGVjaWZpZWQgdGhhdCBwYXJ0IGlzIHN0cmlwcGVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVxdWVzdGVkIHBhdGhuYW1lLlxuICAgKi9cbiAgdXJsUm9vdD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSBkaXJlY3RvcnkgbGlzdGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgc2hvd0Rpckxpc3Rpbmc/OiBib29sZWFuO1xuICAvKiogU2VydmVzIGRvdGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBzaG93RG90ZmlsZXM/OiBib29sZWFuO1xuICAvKiogU2VydmVzIGBpbmRleC5odG1sYCBhcyB0aGUgaW5kZXggZmlsZSBvZiB0aGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7dHJ1ZX1cbiAgICovXG4gIHNob3dJbmRleD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGUgQ09SUyB2aWEgdGhlXG4gICAqIHtAbGlua2NvZGUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiB8IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbn1cbiAgICogaGVhZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBlbmFibGVDb3JzPzogYm9vbGVhbjtcbiAgLyoqIERvIG5vdCBwcmludCByZXF1ZXN0IGxldmVsIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIHF1aWV0PzogYm9vbGVhbjtcbiAgLyoqIFRoZSBhbGdvcml0aG0gdG8gdXNlIGZvciBnZW5lcmF0aW5nIHRoZSBFVGFnLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7XCJTSEEtMjU2XCJ9XG4gICAqL1xuICBldGFnQWxnb3JpdGhtPzogQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgLyoqIEhlYWRlcnMgdG8gYWRkIHRvIGVhY2ggcmVzcG9uc2VcbiAgICpcbiAgICogQGRlZmF1bHQge1tdfVxuICAgKi9cbiAgaGVhZGVycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlcnZlcyB0aGUgZmlsZXMgdW5kZXIgdGhlIGdpdmVuIGRpcmVjdG9yeSByb290IChvcHRzLmZzUm9vdCkuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgc2VydmVEaXIgfSBmcm9tIFwiQHN0ZC9odHRwL2ZpbGUtc2VydmVyXCI7XG4gKlxuICogRGVuby5zZXJ2ZSgocmVxKSA9PiB7XG4gKiAgIGNvbnN0IHBhdGhuYW1lID0gbmV3IFVSTChyZXEudXJsKS5wYXRobmFtZTtcbiAqICAgaWYgKHBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvc3RhdGljXCIpKSB7XG4gKiAgICAgcmV0dXJuIHNlcnZlRGlyKHJlcSwge1xuICogICAgICAgZnNSb290OiBcInBhdGgvdG8vc3RhdGljL2ZpbGVzL2RpclwiLFxuICogICAgIH0pO1xuICogICB9XG4gKiAgIC8vIERvIGR5bmFtaWMgcmVzcG9uc2VzXG4gKiAgIHJldHVybiBuZXcgUmVzcG9uc2UoKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hhbmdpbmcgdGhlIFVSTCByb290XG4gKlxuICogUmVxdWVzdHMgdG8gYC9zdGF0aWMvcGF0aC90by9maWxlYCB3aWxsIGJlIHNlcnZlZCBmcm9tIGAuL3B1YmxpYy9wYXRoL3RvL2ZpbGVgLlxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgc2VydmVEaXIgfSBmcm9tIFwiQHN0ZC9odHRwL2ZpbGUtc2VydmVyXCI7XG4gKlxuICogRGVuby5zZXJ2ZSgocmVxKSA9PiBzZXJ2ZURpcihyZXEsIHtcbiAqICAgZnNSb290OiBcInB1YmxpY1wiLFxuICogICB1cmxSb290OiBcInN0YXRpY1wiLFxuICogfSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB0byBoYW5kbGVcbiAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VydmVEaXIoXG4gIHJlcTogUmVxdWVzdCxcbiAgb3B0czogU2VydmVEaXJPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGlmIChyZXEubWV0aG9kICE9PSBNRVRIT0QuR2V0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUmVzcG9uc2UoU1RBVFVTX0NPREUuTWV0aG9kTm90QWxsb3dlZCk7XG4gIH1cblxuICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICB0cnkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgY3JlYXRlU2VydmVEaXJSZXNwb25zZShyZXEsIG9wdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghb3B0cy5xdWlldCkgbG9nRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIHJlc3BvbnNlID0gZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZFxuICAgICAgPyBjcmVhdGVTdGFuZGFyZFJlc3BvbnNlKFNUQVRVU19DT0RFLk5vdEZvdW5kKVxuICAgICAgOiBjcmVhdGVTdGFuZGFyZFJlc3BvbnNlKFNUQVRVU19DT0RFLkludGVybmFsU2VydmVyRXJyb3IpO1xuICB9XG5cbiAgLy8gRG8gbm90IHVwZGF0ZSB0aGUgaGVhZGVyIGlmIHRoZSByZXNwb25zZSBpcyBhIDMwMSByZWRpcmVjdC5cbiAgY29uc3QgaXNSZWRpcmVjdFJlc3BvbnNlID0gaXNSZWRpcmVjdFN0YXR1cyhyZXNwb25zZS5zdGF0dXMpO1xuXG4gIGlmIChvcHRzLmVuYWJsZUNvcnMgJiYgIWlzUmVkaXJlY3RSZXNwb25zZSkge1xuICAgIHJlc3BvbnNlLmhlYWRlcnMuYXBwZW5kKEhFQURFUi5BY2Nlc3NDb250cm9sQWxsb3dPcmlnaW4sIFwiKlwiKTtcbiAgICByZXNwb25zZS5oZWFkZXJzLmFwcGVuZChcbiAgICAgIEhFQURFUi5BY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzLFxuICAgICAgXCJPcmlnaW4sIFgtUmVxdWVzdGVkLVdpdGgsIENvbnRlbnQtVHlwZSwgQWNjZXB0LCBSYW5nZVwiLFxuICAgICk7XG4gIH1cblxuICBpZiAoIW9wdHMucXVpZXQpIHNlcnZlckxvZyhyZXEsIHJlc3BvbnNlLnN0YXR1cyk7XG5cbiAgaWYgKG9wdHMuaGVhZGVycyAmJiAhaXNSZWRpcmVjdFJlc3BvbnNlKSB7XG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2Ygb3B0cy5oZWFkZXJzKSB7XG4gICAgICBjb25zdCBoZWFkZXJTcGxpdCA9IGhlYWRlci5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBuYW1lID0gaGVhZGVyU3BsaXRbMF0hO1xuICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXJTcGxpdC5zbGljZSgxKS5qb2luKFwiOlwiKTtcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZlRGlyUmVzcG9uc2UoXG4gIHJlcTogUmVxdWVzdCxcbiAgb3B0czogU2VydmVEaXJPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHRhcmdldCA9IG9wdHMuZnNSb290ID8/IFwiLlwiO1xuICBjb25zdCB1cmxSb290ID0gb3B0cy51cmxSb290O1xuICBjb25zdCBzaG93SW5kZXggPSBvcHRzLnNob3dJbmRleCA/PyB0cnVlO1xuICBjb25zdCBzaG93RG90ZmlsZXMgPSBvcHRzLnNob3dEb3RmaWxlcyB8fCBmYWxzZTtcbiAgY29uc3QgeyBldGFnQWxnb3JpdGhtID0gXCJTSEEtMjU2XCIsIHNob3dEaXJMaXN0aW5nID0gZmFsc2UsIHF1aWV0ID0gZmFsc2UgfSA9XG4gICAgb3B0cztcblxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICBjb25zdCBkZWNvZGVkVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXRobmFtZSk7XG4gIGxldCBub3JtYWxpemVkUGF0aCA9IHBvc2l4Tm9ybWFsaXplKGRlY29kZWRVcmwpO1xuXG4gIGlmICh1cmxSb290ICYmICFub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwiL1wiICsgdXJsUm9vdCkpIHtcbiAgICByZXR1cm4gY3JlYXRlU3RhbmRhcmRSZXNwb25zZShTVEFUVVNfQ09ERS5Ob3RGb3VuZCk7XG4gIH1cblxuICAvLyBSZWRpcmVjdCBwYXRocyBsaWtlIGAvZm9vLy8vL2JhcmAgYW5kIGAvZm9vL2Jhci8vLy8vYCB0byBub3JtYWxpemVkIHBhdGhzLlxuICBpZiAobm9ybWFsaXplZFBhdGggIT09IGRlY29kZWRVcmwpIHtcbiAgICB1cmwucGF0aG5hbWUgPSBub3JtYWxpemVkUGF0aDtcbiAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QodXJsLCAzMDEpO1xuICB9XG5cbiAgaWYgKHVybFJvb3QpIHtcbiAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UodXJsUm9vdCwgXCJcIik7XG4gIH1cblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyB0byBhdm9pZCBFTk9FTlQgZXJyb3JzXG4gIC8vIHdoZW4gYWNjZXNzaW5nIGEgcGF0aCB0byBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICBpZiAobm9ybWFsaXplZFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICAvLyBFeGNsdWRlIGRvdGZpbGVzIGlmIHNob3dEb3RmaWxlcyBpcyBmYWxzZVxuICBpZiAoIXNob3dEb3RmaWxlcyAmJiAvXFwvXFwuLy50ZXN0KG5vcm1hbGl6ZWRQYXRoKSkge1xuICAgIHJldHVybiBjcmVhdGVTdGFuZGFyZFJlc3BvbnNlKFNUQVRVU19DT0RFLk5vdEZvdW5kKTtcbiAgfVxuXG4gIGNvbnN0IGZzUGF0aCA9IGpvaW4odGFyZ2V0LCBub3JtYWxpemVkUGF0aCk7XG4gIGNvbnN0IGZpbGVJbmZvID0gYXdhaXQgRGVuby5zdGF0KGZzUGF0aCk7XG5cbiAgLy8gRm9yIGZpbGVzLCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIHBhdGguXG4gIGlmIChmaWxlSW5mby5pc0ZpbGUgJiYgdXJsLnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgIHVybC5wYXRobmFtZSA9IHVybC5wYXRobmFtZS5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KHVybCwgMzAxKTtcbiAgfVxuICAvLyBGb3IgZGlyZWN0b3JpZXMsIHRoZSBwYXRoIG11c3QgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoLlxuICBpZiAoZmlsZUluZm8uaXNEaXJlY3RvcnkgJiYgIXVybC5wYXRobmFtZS5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAvLyBPbiBkaXJlY3RvcnkgbGlzdGluZyBwYWdlcyxcbiAgICAvLyBpZiB0aGUgY3VycmVudCBVUkwncyBwYXRobmFtZSBkb2Vzbid0IGVuZCB3aXRoIGEgc2xhc2gsIGFueVxuICAgIC8vIHJlbGF0aXZlIFVSTHMgaW4gdGhlIGluZGV4IGZpbGUgd2lsbCByZXNvbHZlIGFnYWluc3QgdGhlIHBhcmVudFxuICAgIC8vIGRpcmVjdG9yeSwgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBUbyBwcmV2ZW50IHRoYXQsIHdlXG4gICAgLy8gcmV0dXJuIGEgMzAxIHJlZGlyZWN0IHRvIHRoZSBVUkwgd2l0aCBhIHNsYXNoLlxuICAgIHVybC5wYXRobmFtZSArPSBcIi9cIjtcbiAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QodXJsLCAzMDEpO1xuICB9XG5cbiAgLy8gaWYgdGFyZ2V0IGlzIGZpbGUsIHNlcnZlIGZpbGUuXG4gIGlmICghZmlsZUluZm8uaXNEaXJlY3RvcnkpIHtcbiAgICByZXR1cm4gc2VydmVGaWxlKHJlcSwgZnNQYXRoLCB7XG4gICAgICBldGFnQWxnb3JpdGhtLFxuICAgICAgZmlsZUluZm8sXG4gICAgfSk7XG4gIH1cblxuICAvLyBpZiB0YXJnZXQgaXMgZGlyZWN0b3J5LCBzZXJ2ZSBpbmRleCBvciBkaXIgbGlzdGluZy5cbiAgaWYgKHNob3dJbmRleCkgeyAvLyBzZXJ2ZSBpbmRleC5odG1sXG4gICAgY29uc3QgaW5kZXhQYXRoID0gam9pbihmc1BhdGgsIFwiaW5kZXguaHRtbFwiKTtcblxuICAgIGxldCBpbmRleEZpbGVJbmZvOiBEZW5vLkZpbGVJbmZvIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBpbmRleEZpbGVJbmZvID0gYXdhaXQgRGVuby5sc3RhdChpbmRleFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIHNraXAgTm90IEZvdW5kIGVycm9yXG4gICAgfVxuXG4gICAgaWYgKGluZGV4RmlsZUluZm8/LmlzRmlsZSkge1xuICAgICAgcmV0dXJuIHNlcnZlRmlsZShyZXEsIGluZGV4UGF0aCwge1xuICAgICAgICBldGFnQWxnb3JpdGhtLFxuICAgICAgICBmaWxlSW5mbzogaW5kZXhGaWxlSW5mbyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaG93RGlyTGlzdGluZykgeyAvLyBzZXJ2ZSBkaXJlY3RvcnkgbGlzdFxuICAgIHJldHVybiBzZXJ2ZURpckluZGV4KGZzUGF0aCwgeyBzaG93RG90ZmlsZXMsIHRhcmdldCwgcXVpZXQgfSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3RhbmRhcmRSZXNwb25zZShTVEFUVVNfQ09ERS5Ob3RGb3VuZCk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yKGVycm9yOiBFcnJvcikge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcihgJWMke2Vycm9yLm1lc3NhZ2V9YCwgXCJjb2xvcjogcmVkXCIpO1xufVxuXG5mdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBzZXJ2ZXJBcmdzID0gcGFyc2VBcmdzKERlbm8uYXJncywge1xuICAgIHN0cmluZzogW1wicG9ydFwiLCBcImhvc3RcIiwgXCJjZXJ0XCIsIFwia2V5XCIsIFwiaGVhZGVyXCJdLFxuICAgIGJvb2xlYW46IFtcImhlbHBcIiwgXCJkaXItbGlzdGluZ1wiLCBcImRvdGZpbGVzXCIsIFwiY29yc1wiLCBcInZlcmJvc2VcIiwgXCJ2ZXJzaW9uXCJdLFxuICAgIG5lZ2F0YWJsZTogW1wiZGlyLWxpc3RpbmdcIiwgXCJkb3RmaWxlc1wiLCBcImNvcnNcIl0sXG4gICAgY29sbGVjdDogW1wiaGVhZGVyXCJdLFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIFwiZGlyLWxpc3RpbmdcIjogdHJ1ZSxcbiAgICAgIGRvdGZpbGVzOiB0cnVlLFxuICAgICAgY29yczogdHJ1ZSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogZmFsc2UsXG4gICAgICBob3N0OiBcIjAuMC4wLjBcIixcbiAgICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICAgIGNlcnQ6IFwiXCIsXG4gICAgICBrZXk6IFwiXCIsXG4gICAgfSxcbiAgICBhbGlhczoge1xuICAgICAgcDogXCJwb3J0XCIsXG4gICAgICBjOiBcImNlcnRcIixcbiAgICAgIGs6IFwia2V5XCIsXG4gICAgICBoOiBcImhlbHBcIixcbiAgICAgIHY6IFwidmVyYm9zZVwiLFxuICAgICAgVjogXCJ2ZXJzaW9uXCIsXG4gICAgICBIOiBcImhlYWRlclwiLFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBwb3J0ID0gc2VydmVyQXJncy5wb3J0ID8gTnVtYmVyKHNlcnZlckFyZ3MucG9ydCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGhlYWRlcnMgPSBzZXJ2ZXJBcmdzLmhlYWRlciA/PyBbXTtcbiAgY29uc3QgaG9zdCA9IHNlcnZlckFyZ3MuaG9zdDtcbiAgY29uc3QgY2VydEZpbGUgPSBzZXJ2ZXJBcmdzLmNlcnQ7XG4gIGNvbnN0IGtleUZpbGUgPSBzZXJ2ZXJBcmdzLmtleTtcblxuICBpZiAoc2VydmVyQXJncy5oZWxwKSB7XG4gICAgcHJpbnRVc2FnZSgpO1xuICAgIERlbm8uZXhpdCgpO1xuICB9XG5cbiAgaWYgKHNlcnZlckFyZ3MudmVyc2lvbikge1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKGBEZW5vIEZpbGUgU2VydmVyICR7ZGVub0NvbmZpZy52ZXJzaW9ufWApO1xuICAgIERlbm8uZXhpdCgpO1xuICB9XG5cbiAgaWYgKGtleUZpbGUgfHwgY2VydEZpbGUpIHtcbiAgICBpZiAoa2V5RmlsZSA9PT0gXCJcIiB8fCBjZXJ0RmlsZSA9PT0gXCJcIikge1xuICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhcIi0ta2V5IGFuZCAtLWNlcnQgYXJlIHJlcXVpcmVkIGZvciBUTFNcIik7XG4gICAgICBwcmludFVzYWdlKCk7XG4gICAgICBEZW5vLmV4aXQoMSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd2lsZCA9IHNlcnZlckFyZ3MuXyBhcyBzdHJpbmdbXTtcbiAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZSh3aWxkWzBdID8/IFwiXCIpO1xuXG4gIGNvbnN0IGhhbmRsZXIgPSAocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxSZXNwb25zZT4gPT4ge1xuICAgIHJldHVybiBzZXJ2ZURpcihyZXEsIHtcbiAgICAgIGZzUm9vdDogdGFyZ2V0LFxuICAgICAgc2hvd0Rpckxpc3Rpbmc6IHNlcnZlckFyZ3NbXCJkaXItbGlzdGluZ1wiXSxcbiAgICAgIHNob3dEb3RmaWxlczogc2VydmVyQXJncy5kb3RmaWxlcyxcbiAgICAgIGVuYWJsZUNvcnM6IHNlcnZlckFyZ3MuY29ycyxcbiAgICAgIHF1aWV0OiAhc2VydmVyQXJncy52ZXJib3NlLFxuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCB1c2VUbHMgPSAhIShrZXlGaWxlICYmIGNlcnRGaWxlKTtcblxuICBmdW5jdGlvbiBvbkxpc3Rlbih7IHBvcnQsIGhvc3RuYW1lIH06IHsgcG9ydDogbnVtYmVyOyBob3N0bmFtZTogc3RyaW5nIH0pIHtcbiAgICBsZXQgbmV0d29ya0FkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoTkVUX1BFUk1fU1RBVFVTID09PSBcImdyYW50ZWRcIikge1xuICAgICAgbmV0d29ya0FkZHJlc3MgPSBnZXROZXR3b3JrQWRkcmVzcygpO1xuICAgIH1cbiAgICBjb25zdCBwcm90b2NvbCA9IHVzZVRscyA/IFwiaHR0cHNcIiA6IFwiaHR0cFwiO1xuICAgIGNvbnN0IGhvc3QgPSAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIgJiYgaG9zdG5hbWUgPT09IFwiMC4wLjAuMFwiKVxuICAgICAgPyBcImxvY2FsaG9zdFwiXG4gICAgICA6IGhvc3RuYW1lO1xuXG4gICAgY29uc3QgZm9ybWF0dGVkSG9zdCA9IGhvc3RuYW1lLmluY2x1ZGVzKFwiOlwiKSA/IGBbJHtob3N0fV1gIDogaG9zdDtcbiAgICBsZXQgbWVzc2FnZSA9XG4gICAgICBgTGlzdGVuaW5nIG9uOlxcbi0gTG9jYWw6ICR7cHJvdG9jb2x9Oi8vJHtmb3JtYXR0ZWRIb3N0fToke3BvcnR9YDtcbiAgICBpZiAobmV0d29ya0FkZHJlc3MgJiYgIURFTk9fREVQTE9ZTUVOVF9JRCkge1xuICAgICAgbWVzc2FnZSArPSBgXFxuLSBOZXR3b3JrOiAke3Byb3RvY29sfTovLyR7bmV0d29ya0FkZHJlc3N9OiR7cG9ydH1gO1xuICAgIH1cbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgfVxuXG4gIC8vIFRPRE8ocGV0YW1vcmlrZW4pOiBNaWdyYXRlIGBEZW5vLlNlcnZlVGNwT3B0aW9ucyB8IChEZW5vLlNlcnZlVGNwT3B0aW9ucyAmIERlbm8uVGxzQ2VydGlmaWVkS2V5T3B0aW9ucylgIGluIHYyXG4gIGNvbnN0IG9wdGlvbnM6IHtcbiAgICBwb3J0PzogbnVtYmVyO1xuICAgIGhvc3RuYW1lPzogc3RyaW5nO1xuICAgIG9uTGlzdGVuPzogKGxvY2FsQWRkcjogRGVuby5OZXRBZGRyKSA9PiB2b2lkO1xuICAgIGNlcnQ/OiBzdHJpbmc7XG4gICAga2V5Pzogc3RyaW5nO1xuICB9ID0ge1xuICAgIGhvc3RuYW1lOiBob3N0LFxuICAgIG9uTGlzdGVuLFxuICB9O1xuICBpZiAocG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wb3J0ID0gcG9ydDtcbiAgfVxuICBpZiAodXNlVGxzKSB7XG4gICAgb3B0aW9ucy5jZXJ0ID0gRGVuby5yZWFkVGV4dEZpbGVTeW5jKGNlcnRGaWxlKTtcbiAgICBvcHRpb25zLmtleSA9IERlbm8ucmVhZFRleHRGaWxlU3luYyhrZXlGaWxlKTtcbiAgfVxuICBEZW5vLnNlcnZlKG9wdGlvbnMsIGhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBwcmludFVzYWdlKCkge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coYERlbm8gRmlsZSBTZXJ2ZXIgJHtkZW5vQ29uZmlnLnZlcnNpb259XG4gIFNlcnZlcyBhIGxvY2FsIGRpcmVjdG9yeSBpbiBIVFRQLlxuXG5JTlNUQUxMOlxuICBkZW5vIGluc3RhbGwgLS1hbGxvdy1uZXQgLS1hbGxvdy1yZWFkIC0tYWxsb3ctc3lzIGpzcjpAc3RkL2h0dHBAJHtkZW5vQ29uZmlnLnZlcnNpb259L2ZpbGUtc2VydmVyXG5cblVTQUdFOlxuICBmaWxlX3NlcnZlciBbcGF0aF0gW29wdGlvbnNdXG5cbk9QVElPTlM6XG4gIC1oLCAtLWhlbHAgICAgICAgICAgICBQcmludHMgaGVscCBpbmZvcm1hdGlvblxuICAtcCwgLS1wb3J0IDxQT1JUPiAgICAgU2V0IHBvcnQgKGRlZmF1bHQgaXMgODAwMClcbiAgLS1jb3JzICAgICAgICAgICAgICAgIEVuYWJsZSBDT1JTIHZpYSB0aGUgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIiBoZWFkZXJcbiAgLS1ob3N0ICAgICA8SE9TVD4gICAgIEhvc3RuYW1lIChkZWZhdWx0IGlzIDAuMC4wLjApXG4gIC1jLCAtLWNlcnQgPEZJTEU+ICAgICBUTFMgY2VydGlmaWNhdGUgZmlsZSAoZW5hYmxlcyBUTFMpXG4gIC1rLCAtLWtleSAgPEZJTEU+ICAgICBUTFMga2V5IGZpbGUgKGVuYWJsZXMgVExTKVxuICAtSCwgLS1oZWFkZXIgPEhFQURFUj4gU2V0cyBhIGhlYWRlciBvbiBldmVyeSByZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gLS1oZWFkZXIgXCJDYWNoZS1Db250cm9sOiBuby1jYWNoZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy5cbiAgLS1uby1kaXItbGlzdGluZyAgICAgIERpc2FibGUgZGlyZWN0b3J5IGxpc3RpbmdcbiAgLS1uby1kb3RmaWxlcyAgICAgICAgIERvIG5vdCBzaG93IGRvdGZpbGVzXG4gIC0tbm8tY29ycyAgICAgICAgICAgICBEaXNhYmxlIGNyb3NzLW9yaWdpbiByZXNvdXJjZSBzaGFyaW5nXG4gIC12LCAtLXZlcmJvc2UgICAgICAgICBQcmludCByZXF1ZXN0IGxldmVsIGxvZ3NcbiAgLVYsIC0tdmVyc2lvbiAgICAgICAgIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb25cblxuICBBbGwgVExTIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHdoZW4gb25lIGlzIHByb3ZpZGVkLmApO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBtYWluKCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLHFEQUFxRDtBQUVyRCxnRUFBZ0U7QUFDaEUsMkNBQTJDO0FBQzNDLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlCQyxHQUVELFNBQVMsYUFBYSxjQUFjLFFBQVEsdUNBQXVDO0FBQ25GLFNBQVMsT0FBTyxRQUFRLCtCQUErQjtBQUN2RCxTQUFTLElBQUksUUFBUSw0QkFBNEI7QUFDakQsU0FBUyxRQUFRLFFBQVEsZ0NBQWdDO0FBQ3pELFNBQVMsT0FBTyxRQUFRLCtCQUErQjtBQUN2RCxTQUFTLGlCQUFpQixRQUFRLGlDQUFpQztBQUNuRSxTQUFTLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBUyxJQUFJLEVBQUUsV0FBVyxRQUFRLFlBQVk7QUFDOUMsU0FDRSxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLFdBQVcsUUFFTixjQUFjO0FBQ3JCLFNBQVMsZUFBZSxRQUFRLDRDQUE0QztBQUM1RSxTQUFTLFNBQVMsUUFBUSxrQ0FBa0M7QUFDNUQsT0FBTyxnQkFBZ0IsbUJBQW1CO0VBQUUsTUFBTTtBQUFPLEVBQUU7QUFDM0QsU0FBUyxVQUFVLFdBQVcsUUFBUSw0QkFBNEI7QUFDbEUsU0FBUyxpQkFBaUIsUUFBUSxtREFBbUQ7QUFDckYsU0FBUyxNQUFNLFFBQVEsZ0NBQWdDO0FBQ3ZELFNBQVMsTUFBTSxRQUFRLHVCQUF1QjtBQUM5QyxTQUFTLE1BQU0sUUFBUSx1QkFBdUI7QUFTOUMsTUFBTSxrQkFDSixLQUFLLFdBQVcsQ0FBQyxTQUFTLEdBQUc7RUFBRSxNQUFNO0VBQU8sVUFBVTtBQUFxQixHQUN4RSxTQUFTLFdBQVcsa0JBQWtCO0FBQzNDLE1BQU0sa0JBQ0osS0FBSyxXQUFXLENBQUMsU0FBUyxHQUFHO0VBQUUsTUFBTTtFQUFPLE1BQU07QUFBb0IsR0FDbkUsU0FBUyxXQUFXLGtCQUFrQjtBQUMzQyxNQUFNLHFCQUFxQixvQkFBb0IsWUFDM0MsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLHdCQUNiO0FBQ0osTUFBTSw0QkFBNEIscUJBQzlCLEtBQUssb0JBQW9CO0VBQUUsTUFBTTtBQUFLLEtBQ3RDO0FBRUosU0FBUyxhQUFhLEtBQWMsRUFBRSxTQUF3QjtFQUM1RCxNQUFNLFVBQVU7SUFBQztJQUFPO0lBQU87SUFBTztJQUFPO0lBQU87SUFBTztJQUFPO0dBQU07RUFFeEUsSUFBSSxjQUFjLE1BQU07SUFDdEIsT0FBTztFQUNUO0VBQ0EsTUFBTSxPQUFPLFVBQVUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUc7RUFDL0MsSUFBSSxTQUFTO0VBQ2IsS0FDRyxLQUFLLENBQUMsSUFDTixPQUFPLEdBQ1AsS0FBSyxDQUFDLEdBQUcsR0FDVCxPQUFPLENBQUMsQ0FBQztJQUNSLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVE7RUFDckM7RUFDRixTQUFTLEdBQUcsUUFBUSxNQUFNLElBQUksQ0FBQyxFQUFFLFFBQVE7RUFDekMsT0FBTztBQUNUO0FBRUEsU0FBUyx1QkFBdUIsTUFBa0IsRUFBRSxJQUFtQjtFQUNyRSxNQUFNLGFBQWEsV0FBVyxDQUFDLE9BQU87RUFDdEMsT0FBTyxJQUFJLFNBQVMsWUFBWTtJQUFFO0lBQVE7SUFBWSxHQUFHLElBQUk7RUFBQztBQUNoRTtBQUVBOzs7Ozs7Ozs7OztDQVdDLEdBQ0QsU0FBUyxpQkFBaUIsVUFBa0IsRUFBRSxRQUFnQjtFQUM1RCxNQUFNLGFBQWE7RUFDbkIsTUFBTSxTQUFTLFdBQVcsS0FBSyxDQUFDO0VBRWhDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxNQUFNLEVBQUU7SUFDN0IsK0JBQStCO0lBQy9CLE9BQU87RUFDVDtFQUVBLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxNQUFNO0VBQ3BDLElBQUksVUFBVSxXQUFXO0lBQ3ZCLElBQUksUUFBUSxXQUFXO01BQ3JCLE9BQU87UUFBRSxPQUFPLENBQUM7UUFBTyxLQUFLLENBQUM7TUFBSTtJQUNwQyxPQUFPO01BQ0wsT0FBTztRQUFFLE9BQU8sQ0FBQztRQUFPLEtBQUssV0FBVztNQUFFO0lBQzVDO0VBQ0YsT0FBTztJQUNMLElBQUksUUFBUSxXQUFXO01BQ3JCLGtEQUFrRDtNQUNsRCxPQUFPO1FBQUUsT0FBTyxXQUFXLENBQUM7UUFBSyxLQUFLLFdBQVc7TUFBRTtJQUNyRCxPQUFPO01BQ0wsK0JBQStCO01BQy9CLE9BQU87SUFDVDtFQUNGO0FBQ0Y7QUFvQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLGVBQWUsVUFDcEIsR0FBWSxFQUNaLFFBQWdCLEVBQ2hCLE9BQTBCO0VBRTFCLElBQUksSUFBSSxNQUFNLEtBQUssT0FBTyxHQUFHLElBQUksSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLEVBQUU7SUFDM0QsT0FBTyx1QkFBdUIsWUFBWSxnQkFBZ0I7RUFDNUQ7RUFFQSxJQUFJLEVBQUUsZUFBZSxZQUFZLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFFckUsSUFBSTtJQUNGLGFBQWEsTUFBTSxLQUFLLElBQUksQ0FBQztFQUMvQixFQUFFLE9BQU8sT0FBTztJQUNkLElBQUksaUJBQWlCLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRTtNQUN6QyxNQUFNLElBQUksSUFBSSxFQUFFO01BQ2hCLE9BQU8sdUJBQXVCLFlBQVksUUFBUTtJQUNwRCxPQUFPO01BQ0wsTUFBTTtJQUNSO0VBQ0Y7RUFFQSxJQUFJLFNBQVMsV0FBVyxFQUFFO0lBQ3hCLE1BQU0sSUFBSSxJQUFJLEVBQUU7SUFDaEIsT0FBTyx1QkFBdUIsWUFBWSxRQUFRO0VBQ3BEO0VBRUEsTUFBTSxVQUFVO0VBRWhCLE1BQU0sT0FBTyxTQUFTLEtBQUssR0FDdkIsTUFBTSxLQUFLLFVBQVU7SUFBRTtFQUFVLEtBQ2pDLE1BQU07RUFFVix1RUFBdUU7RUFDdkUsSUFBSSxTQUFTLEtBQUssRUFBRTtJQUNsQixRQUFRLEdBQUcsQ0FBQyxPQUFPLFlBQVksRUFBRSxTQUFTLEtBQUssQ0FBQyxXQUFXO0VBQzdEO0VBQ0EsSUFBSSxNQUFNO0lBQ1IsUUFBUSxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUU7RUFDM0I7RUFFQSxxREFBcUQ7RUFDckQsTUFBTSxtQkFBbUIsWUFBWSxRQUFRO0VBQzdDLElBQUksa0JBQWtCO0lBQ3BCLFFBQVEsR0FBRyxDQUFDLE9BQU8sV0FBVyxFQUFFO0VBQ2xDO0VBQ0EsTUFBTSxXQUFXLFNBQVMsSUFBSTtFQUU5QixJQUFJLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxFQUFFO0lBQzlCLHFCQUFxQjtJQUNyQixRQUFRLEdBQUcsQ0FBQyxPQUFPLGFBQWEsRUFBRSxHQUFHLFVBQVU7SUFFL0MsTUFBTSxTQUFTLFlBQVksRUFBRTtJQUM3QixPQUFPLElBQUksU0FBUyxNQUFNO01BQ3hCO01BQ0EsWUFBWSxXQUFXLENBQUMsT0FBTztNQUMvQjtJQUNGO0VBQ0Y7RUFFQSxJQUFJLFFBQVEsU0FBUyxLQUFLLEVBQUU7SUFDMUIsMEVBQTBFO0lBQzFFLDBFQUEwRTtJQUMxRSw4Q0FBOEM7SUFDOUMsTUFBTSxtQkFBbUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sV0FBVztJQUMzRCxNQUFNLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxlQUFlO0lBQ25FLElBQ0UsQUFBQyxDQUFDLFlBQVksa0JBQWtCLFNBQy9CLHFCQUFxQixRQUNwQixTQUFTLEtBQUssSUFDZCx3QkFDQSxTQUFTLEtBQUssQ0FBQyxPQUFPLEtBQ3BCLElBQUksS0FBSyxzQkFBc0IsT0FBTyxLQUFLLE1BQy9DO01BQ0EsTUFBTSxTQUFTLFlBQVksV0FBVztNQUN0QyxPQUFPLElBQUksU0FBUyxNQUFNO1FBQ3hCO1FBQ0EsWUFBWSxXQUFXLENBQUMsT0FBTztRQUMvQjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLE1BQU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLO0VBRS9DLHVCQUF1QjtFQUN2QiwyRkFBMkY7RUFDM0YsMEZBQTBGO0VBQzFGLDBHQUEwRztFQUMxRyxJQUFJLGNBQWMsSUFBSSxVQUFVO0lBQzlCLE1BQU0sU0FBUyxpQkFBaUIsWUFBWTtJQUU1QyxtREFBbUQ7SUFDbkQsSUFBSSxDQUFDLFFBQVE7TUFDWCxxQkFBcUI7TUFDckIsUUFBUSxHQUFHLENBQUMsT0FBTyxhQUFhLEVBQUUsR0FBRyxVQUFVO01BRS9DLE1BQU0sT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDO01BQzdCLE1BQU0sU0FBUyxZQUFZLEVBQUU7TUFDN0IsT0FBTyxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDakM7UUFDQSxZQUFZLFdBQVcsQ0FBQyxPQUFPO1FBQy9CO01BQ0Y7SUFDRjtJQUVBLGlFQUFpRTtJQUNqRSxJQUNFLE9BQU8sR0FBRyxHQUFHLEtBQ2IsT0FBTyxHQUFHLEdBQUcsT0FBTyxLQUFLLElBQ3pCLFlBQVksT0FBTyxLQUFLLEVBQ3hCO01BQ0EsaUNBQWlDO01BQ2pDLFFBQVEsR0FBRyxDQUFDLE9BQU8sWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVU7TUFFdEQsT0FBTyx1QkFDTCxZQUFZLG1CQUFtQixFQUMvQjtRQUFFO01BQVE7SUFFZDtJQUVBLGdDQUFnQztJQUNoQyxNQUFNLFFBQVEsS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLEtBQUs7SUFDdEMsTUFBTSxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLFdBQVc7SUFFNUMsaUNBQWlDO0lBQ2pDLFFBQVEsR0FBRyxDQUFDLE9BQU8sWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVU7SUFFcEUscUJBQXFCO0lBQ3JCLE1BQU0sZ0JBQWdCLE1BQU0sUUFBUTtJQUNwQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLGFBQWEsRUFBRSxHQUFHLGVBQWU7SUFFcEQsNkJBQTZCO0lBQzdCLE1BQU0sT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDO0lBQzdCLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxLQUFLO0lBQzFDLE1BQU0sU0FBUyxLQUFLLFFBQVEsQ0FDekIsV0FBVyxDQUFDLElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCO0lBQ3RELE1BQU0sU0FBUyxZQUFZLGNBQWM7SUFDekMsT0FBTyxJQUFJLFNBQVMsUUFBUTtNQUMxQjtNQUNBLFlBQVksV0FBVyxDQUFDLE9BQU87TUFDL0I7SUFDRjtFQUNGO0VBRUEscUJBQXFCO0VBQ3JCLFFBQVEsR0FBRyxDQUFDLE9BQU8sYUFBYSxFQUFFLEdBQUcsVUFBVTtFQUUvQyxNQUFNLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQztFQUM3QixNQUFNLFNBQVMsWUFBWSxFQUFFO0VBQzdCLE9BQU8sSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO0lBQ2pDO0lBQ0EsWUFBWSxXQUFXLENBQUMsT0FBTztJQUMvQjtFQUNGO0FBQ0Y7QUFFQSxlQUFlLGNBQ2IsT0FBZSxFQUNmLE9BSUM7RUFFRCxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUc7RUFDekIsTUFBTSxTQUFTLENBQUMsQ0FBQyxFQUNmLFNBQVMsUUFBUSxNQUFNLEVBQUUsU0FBUyxVQUFVLENBQzFDLElBQUksT0FBTyxtQkFBbUIsTUFDOUIsTUFFRjtFQUNGLE1BQU0sbUJBQXlDLEVBQUU7RUFFakQsc0JBQXNCO0VBQ3RCLElBQUksV0FBVyxLQUFLO0lBQ2xCLE1BQU0sV0FBVyxLQUFLLFNBQVM7SUFDL0IsTUFBTSxZQUFZLEtBQUssSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsV0FBd0IsQ0FBQztRQUNuRSxNQUFNLGFBQWEsTUFBTSxTQUFTLElBQUk7UUFDdEMsTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO01BQ1AsQ0FBQztJQUNELGlCQUFpQixJQUFJLENBQUM7RUFDeEI7RUFFQSw0QkFBNEI7RUFDNUIsV0FBVyxNQUFNLFNBQVMsS0FBSyxPQUFPLENBQUMsU0FBVTtJQUMvQyxJQUFJLENBQUMsZ0JBQWdCLE1BQU0sSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLO01BQzFDO0lBQ0Y7SUFDQSxNQUFNLFdBQVcsS0FBSyxTQUFTLE1BQU0sSUFBSTtJQUN6QyxNQUFNLFVBQVUsbUJBQW1CLE1BQU0sSUFBSSxFQUMxQyxVQUFVLENBQUMsT0FBTztJQUVyQixpQkFBaUIsSUFBSSxDQUFDLENBQUM7TUFDckIsSUFBSTtRQUNGLE1BQU0sV0FBVyxNQUFNLEtBQUssSUFBSSxDQUFDO1FBQ2pDLE9BQU87VUFDTCxNQUFNLGFBQWEsTUFBTSxXQUFXLEVBQUUsU0FBUyxJQUFJO1VBQ25ELE1BQU0sTUFBTSxNQUFNLEdBQUcsWUFBWSxTQUFTLElBQUksSUFBSSxLQUFLO1VBQ3ZELE1BQU0sR0FBRyxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUk7VUFDcEQsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSTtRQUNwRDtNQUNGLEVBQUUsT0FBTyxPQUFPO1FBQ2QsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxTQUFTO1FBQzdCLE9BQU87VUFDTCxNQUFNO1VBQ04sTUFBTTtVQUNOLE1BQU0sR0FBRyxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUk7VUFDcEQsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSTtRQUNwRDtNQUNGO0lBQ0YsQ0FBQztFQUNIO0VBRUEsTUFBTSxZQUFZLE1BQU0sUUFBUSxHQUFHLENBQUM7RUFDcEMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQ2pCLDBEQUEwRDtJQUMxRCxFQUFFLElBQUksQ0FBQyxXQUFXLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQztFQUVyRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7RUFDdkQsTUFBTSxPQUFPLGtCQUFrQixpQkFBaUI7RUFFaEQsTUFBTSxVQUFVO0VBQ2hCLFFBQVEsR0FBRyxDQUFDLE9BQU8sV0FBVyxFQUFFO0VBRWhDLE1BQU0sU0FBUyxZQUFZLEVBQUU7RUFDN0IsT0FBTyxJQUFJLFNBQVMsTUFBTTtJQUN4QjtJQUNBLFlBQVksV0FBVyxDQUFDLE9BQU87SUFDL0I7RUFDRjtBQUNGO0FBRUEsU0FBUyxVQUFVLEdBQVksRUFBRSxNQUFjO0VBQzdDLE1BQU0sSUFBSSxJQUFJLE9BQU8sV0FBVztFQUNoQyxNQUFNLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0VBQ3hELE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHO0VBQzNCLE1BQU0sSUFBSSxHQUFHLFFBQVEsRUFBRSxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUTtFQUM3RSwyRkFBMkY7RUFDM0YsOEJBQThCO0VBQzlCLFFBQVEsS0FBSyxDQUFDO0FBQ2hCO0FBRUEsU0FBUztFQUNQLE9BQU8sSUFBSSxRQUFRO0lBQ2pCLFFBQVE7SUFDUiw2RkFBNkY7SUFDN0YsQ0FBQyxPQUFPLFlBQVksQ0FBQyxFQUFFO0VBQ3pCO0FBQ0Y7QUFFQSxTQUFTLGtCQUFrQixPQUFlLEVBQUUsT0FBb0I7RUFDOUQsTUFBTSxlQUFlLFFBQVEsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBUyxRQUFRO0VBQ2pFLE1BQU0sY0FBYztJQUFDO09BQVc7R0FBYTtFQUU3QyxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUF5RUEsRUFDTixZQUNHLEdBQUcsQ0FBQyxDQUFDLE1BQU07SUFDVixJQUFJLFNBQVMsSUFBSSxPQUFPO0lBQ3hCLE1BQU0sUUFBUSxZQUFZLE1BQU0sR0FBRyxRQUFRO0lBQzNDLElBQUk7SUFDSixJQUFJLFNBQVMsR0FBRztNQUNkLE9BQU87SUFDVCxPQUFPO01BQ0wsT0FBTyxNQUFNLE1BQU0sQ0FBQztJQUN0QjtJQUNBLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxNQUFNLElBQUksQ0FBQztFQUNoRCxHQUNDLElBQUksQ0FBQyxLQUNUOzs7Ozs7Ozs7O1lBVVMsRUFDUixRQUNHLEdBQUcsQ0FDRixDQUFDLFFBQVUsQ0FBQzs7O3NCQUdFLEVBQUUsTUFBTSxJQUFJLENBQUM7OztzQkFHYixFQUFFLE1BQU0sSUFBSSxDQUFDOzs7K0JBR0osRUFBRSxPQUFPLE1BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLE1BQU0sSUFBSSxFQUFFOzs7Z0JBRzFELENBQUMsRUFFVixJQUFJLENBQUMsSUFDVDs7Ozs7RUFLRCxDQUFDO0FBQ0g7QUFvREE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUNDLEdBQ0QsT0FBTyxlQUFlLFNBQ3BCLEdBQVksRUFDWixPQUF3QixDQUFDLENBQUM7RUFFMUIsSUFBSSxJQUFJLE1BQU0sS0FBSyxPQUFPLEdBQUcsRUFBRTtJQUM3QixPQUFPLHVCQUF1QixZQUFZLGdCQUFnQjtFQUM1RDtFQUVBLElBQUk7RUFDSixJQUFJO0lBQ0YsV0FBVyxNQUFNLHVCQUF1QixLQUFLO0VBQy9DLEVBQUUsT0FBTyxPQUFPO0lBQ2QsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLFNBQVM7SUFDMUIsV0FBVyxpQkFBaUIsS0FBSyxNQUFNLENBQUMsUUFBUSxHQUM1Qyx1QkFBdUIsWUFBWSxRQUFRLElBQzNDLHVCQUF1QixZQUFZLG1CQUFtQjtFQUM1RDtFQUVBLDhEQUE4RDtFQUM5RCxNQUFNLHFCQUFxQixpQkFBaUIsU0FBUyxNQUFNO0VBRTNELElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxvQkFBb0I7SUFDMUMsU0FBUyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sd0JBQXdCLEVBQUU7SUFDekQsU0FBUyxPQUFPLENBQUMsTUFBTSxDQUNyQixPQUFPLHlCQUF5QixFQUNoQztFQUVKO0VBRUEsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLFVBQVUsS0FBSyxTQUFTLE1BQU07RUFFL0MsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQjtJQUN2QyxLQUFLLE1BQU0sVUFBVSxLQUFLLE9BQU8sQ0FBRTtNQUNqQyxNQUFNLGNBQWMsT0FBTyxLQUFLLENBQUM7TUFDakMsTUFBTSxPQUFPLFdBQVcsQ0FBQyxFQUFFO01BQzNCLE1BQU0sUUFBUSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztNQUN4QyxTQUFTLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTTtJQUNoQztFQUNGO0VBRUEsT0FBTztBQUNUO0FBRUEsZUFBZSx1QkFDYixHQUFZLEVBQ1osSUFBcUI7RUFFckIsTUFBTSxTQUFTLEtBQUssTUFBTSxJQUFJO0VBQzlCLE1BQU0sVUFBVSxLQUFLLE9BQU87RUFDNUIsTUFBTSxZQUFZLEtBQUssU0FBUyxJQUFJO0VBQ3BDLE1BQU0sZUFBZSxLQUFLLFlBQVksSUFBSTtFQUMxQyxNQUFNLEVBQUUsZ0JBQWdCLFNBQVMsRUFBRSxpQkFBaUIsS0FBSyxFQUFFLFFBQVEsS0FBSyxFQUFFLEdBQ3hFO0VBRUYsTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUc7RUFDM0IsTUFBTSxhQUFhLG1CQUFtQixJQUFJLFFBQVE7RUFDbEQsSUFBSSxpQkFBaUIsZUFBZTtFQUVwQyxJQUFJLFdBQVcsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxNQUFNLFVBQVU7SUFDeEQsT0FBTyx1QkFBdUIsWUFBWSxRQUFRO0VBQ3BEO0VBRUEsNkVBQTZFO0VBQzdFLElBQUksbUJBQW1CLFlBQVk7SUFDakMsSUFBSSxRQUFRLEdBQUc7SUFDZixPQUFPLFNBQVMsUUFBUSxDQUFDLEtBQUs7RUFDaEM7RUFFQSxJQUFJLFNBQVM7SUFDWCxpQkFBaUIsZUFBZSxPQUFPLENBQUMsU0FBUztFQUNuRDtFQUVBLGlEQUFpRDtFQUNqRCx5REFBeUQ7RUFDekQsSUFBSSxlQUFlLFFBQVEsQ0FBQyxNQUFNO0lBQ2hDLGlCQUFpQixlQUFlLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDNUM7RUFFQSw0Q0FBNEM7RUFDNUMsSUFBSSxDQUFDLGdCQUFnQixPQUFPLElBQUksQ0FBQyxpQkFBaUI7SUFDaEQsT0FBTyx1QkFBdUIsWUFBWSxRQUFRO0VBQ3BEO0VBRUEsTUFBTSxTQUFTLEtBQUssUUFBUTtFQUM1QixNQUFNLFdBQVcsTUFBTSxLQUFLLElBQUksQ0FBQztFQUVqQyxzREFBc0Q7RUFDdEQsSUFBSSxTQUFTLE1BQU0sSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUNqRCxJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3RDLE9BQU8sU0FBUyxRQUFRLENBQUMsS0FBSztFQUNoQztFQUNBLHdEQUF3RDtFQUN4RCxJQUFJLFNBQVMsV0FBVyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkQsOEJBQThCO0lBQzlCLDhEQUE4RDtJQUM5RCxrRUFBa0U7SUFDbEUsb0VBQW9FO0lBQ3BFLGlEQUFpRDtJQUNqRCxJQUFJLFFBQVEsSUFBSTtJQUNoQixPQUFPLFNBQVMsUUFBUSxDQUFDLEtBQUs7RUFDaEM7RUFFQSxpQ0FBaUM7RUFDakMsSUFBSSxDQUFDLFNBQVMsV0FBVyxFQUFFO0lBQ3pCLE9BQU8sVUFBVSxLQUFLLFFBQVE7TUFDNUI7TUFDQTtJQUNGO0VBQ0Y7RUFFQSxzREFBc0Q7RUFDdEQsSUFBSSxXQUFXO0lBQ2IsTUFBTSxZQUFZLEtBQUssUUFBUTtJQUUvQixJQUFJO0lBQ0osSUFBSTtNQUNGLGdCQUFnQixNQUFNLEtBQUssS0FBSyxDQUFDO0lBQ25DLEVBQUUsT0FBTyxPQUFPO01BQ2QsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEtBQUssTUFBTSxDQUFDLFFBQVEsR0FBRztRQUM1QyxNQUFNO01BQ1I7SUFDQSx1QkFBdUI7SUFDekI7SUFFQSxJQUFJLGVBQWUsUUFBUTtNQUN6QixPQUFPLFVBQVUsS0FBSyxXQUFXO1FBQy9CO1FBQ0EsVUFBVTtNQUNaO0lBQ0Y7RUFDRjtFQUVBLElBQUksZ0JBQWdCO0lBQ2xCLE9BQU8sY0FBYyxRQUFRO01BQUU7TUFBYztNQUFRO0lBQU07RUFDN0Q7RUFFQSxPQUFPLHVCQUF1QixZQUFZLFFBQVE7QUFDcEQ7QUFFQSxTQUFTLFNBQVMsS0FBWTtFQUM1Qiw4QkFBOEI7RUFDOUIsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxPQUFPLEVBQUUsRUFBRTtBQUN0QztBQUVBLFNBQVM7RUFDUCxNQUFNLGFBQWEsVUFBVSxLQUFLLElBQUksRUFBRTtJQUN0QyxRQUFRO01BQUM7TUFBUTtNQUFRO01BQVE7TUFBTztLQUFTO0lBQ2pELFNBQVM7TUFBQztNQUFRO01BQWU7TUFBWTtNQUFRO01BQVc7S0FBVTtJQUMxRSxXQUFXO01BQUM7TUFBZTtNQUFZO0tBQU87SUFDOUMsU0FBUztNQUFDO0tBQVM7SUFDbkIsU0FBUztNQUNQLGVBQWU7TUFDZixVQUFVO01BQ1YsTUFBTTtNQUNOLFNBQVM7TUFDVCxTQUFTO01BQ1QsTUFBTTtNQUNOLE1BQU07TUFDTixNQUFNO01BQ04sS0FBSztJQUNQO0lBQ0EsT0FBTztNQUNMLEdBQUc7TUFDSCxHQUFHO01BQ0gsR0FBRztNQUNILEdBQUc7TUFDSCxHQUFHO01BQ0gsR0FBRztNQUNILEdBQUc7SUFDTDtFQUNGO0VBQ0EsTUFBTSxPQUFPLFdBQVcsSUFBSSxHQUFHLE9BQU8sV0FBVyxJQUFJLElBQUk7RUFDekQsTUFBTSxVQUFVLFdBQVcsTUFBTSxJQUFJLEVBQUU7RUFDdkMsTUFBTSxPQUFPLFdBQVcsSUFBSTtFQUM1QixNQUFNLFdBQVcsV0FBVyxJQUFJO0VBQ2hDLE1BQU0sVUFBVSxXQUFXLEdBQUc7RUFFOUIsSUFBSSxXQUFXLElBQUksRUFBRTtJQUNuQjtJQUNBLEtBQUssSUFBSTtFQUNYO0VBRUEsSUFBSSxXQUFXLE9BQU8sRUFBRTtJQUN0Qiw4QkFBOEI7SUFDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLE9BQU8sRUFBRTtJQUNwRCxLQUFLLElBQUk7RUFDWDtFQUVBLElBQUksV0FBVyxVQUFVO0lBQ3ZCLElBQUksWUFBWSxNQUFNLGFBQWEsSUFBSTtNQUNyQyw4QkFBOEI7TUFDOUIsUUFBUSxHQUFHLENBQUM7TUFDWjtNQUNBLEtBQUssSUFBSSxDQUFDO0lBQ1o7RUFDRjtFQUVBLE1BQU0sT0FBTyxXQUFXLENBQUM7RUFDekIsTUFBTSxTQUFTLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSTtFQUVsQyxNQUFNLFVBQVUsQ0FBQztJQUNmLE9BQU8sU0FBUyxLQUFLO01BQ25CLFFBQVE7TUFDUixnQkFBZ0IsVUFBVSxDQUFDLGNBQWM7TUFDekMsY0FBYyxXQUFXLFFBQVE7TUFDakMsWUFBWSxXQUFXLElBQUk7TUFDM0IsT0FBTyxDQUFDLFdBQVcsT0FBTztNQUMxQjtJQUNGO0VBQ0Y7RUFFQSxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxRQUFRO0VBRXJDLFNBQVMsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQXNDO0lBQ3RFLElBQUksaUJBQXFDO0lBQ3pDLElBQUksb0JBQW9CLFdBQVc7TUFDakMsaUJBQWlCO0lBQ25CO0lBQ0EsTUFBTSxXQUFXLFNBQVMsVUFBVTtJQUNwQyxNQUFNLE9BQU8sQUFBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssYUFBYSxhQUFhLFlBQ3RELGNBQ0E7SUFFSixNQUFNLGdCQUFnQixTQUFTLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUc7SUFDN0QsSUFBSSxVQUNGLENBQUMsd0JBQXdCLEVBQUUsU0FBUyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTTtJQUNsRSxJQUFJLGtCQUFrQixDQUFDLG9CQUFvQjtNQUN6QyxXQUFXLENBQUMsYUFBYSxFQUFFLFNBQVMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU07SUFDbkU7SUFDQSw4QkFBOEI7SUFDOUIsUUFBUSxHQUFHLENBQUM7RUFDZDtFQUVBLGlIQUFpSDtFQUNqSCxNQUFNLFVBTUY7SUFDRixVQUFVO0lBQ1Y7RUFDRjtFQUNBLElBQUksU0FBUyxXQUFXO0lBQ3RCLFFBQVEsSUFBSSxHQUFHO0VBQ2pCO0VBQ0EsSUFBSSxRQUFRO0lBQ1YsUUFBUSxJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQztJQUNyQyxRQUFRLEdBQUcsR0FBRyxLQUFLLGdCQUFnQixDQUFDO0VBQ3RDO0VBQ0EsS0FBSyxLQUFLLENBQUMsU0FBUztBQUN0QjtBQUVBLFNBQVM7RUFDUCw4QkFBOEI7RUFDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLE9BQU8sQ0FBQzs7OztrRUFJYSxFQUFFLFdBQVcsT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0RBcUJuQyxDQUFDO0FBQ3JEO0FBRUEsSUFBSSxZQUFZLElBQUksRUFBRTtFQUNwQjtBQUNGIn0=
+// denoCacheMetadata=4609447523276394179,2530461268941085721 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/bb1e1102f0410b69a83b390e1ac8899b3368a13f93406c05ea529eee1d9f98f9.js b/vendor/gen/https/jsr.io/bb1e1102f0410b69a83b390e1ac8899b3368a13f93406c05ea529eee1d9f98f9.js
new file mode 100644
index 0000000..33bee13
--- /dev/null
+++ b/vendor/gen/https/jsr.io/bb1e1102f0410b69a83b390e1ac8899b3368a13f93406c05ea529eee1d9f98f9.js
@@ -0,0 +1,274 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Contains the {@linkcode STATUS_CODE} object which contains standard HTTP
+ * status codes and provides several type guards for handling status codes
+ * with type safety.
+ *
+ * @example The status code and status text
+ * ```ts
+ * import {
+ * STATUS_CODE,
+ * STATUS_TEXT,
+ * } from "@std/http/status";
+ *
+ * console.log(STATUS_CODE.NotFound); // Returns 404
+ * console.log(STATUS_TEXT[STATUS_CODE.NotFound]); // Returns "Not Found"
+ * ```
+ *
+ * @example Checking the status code type
+ * ```ts ignore
+ * import { isErrorStatus } from "@std/http/status";
+ *
+ * const res = await fetch("https://example.com/");
+ *
+ * if (isErrorStatus(res.status)) {
+ * // error handling here...
+ * }
+ *
+ * await res.body?.cancel();
+ * ```
+ *
+ * @module
+ */ export const STATUS_CODE = {
+ /** RFC 7231, 6.2.1 */ Continue: 100,
+ /** RFC 7231, 6.2.2 */ SwitchingProtocols: 101,
+ /** RFC 2518, 10.1 */ Processing: 102,
+ /** RFC 8297 **/ EarlyHints: 103,
+ /** RFC 7231, 6.3.1 */ OK: 200,
+ /** RFC 7231, 6.3.2 */ Created: 201,
+ /** RFC 7231, 6.3.3 */ Accepted: 202,
+ /** RFC 7231, 6.3.4 */ NonAuthoritativeInfo: 203,
+ /** RFC 7231, 6.3.5 */ NoContent: 204,
+ /** RFC 7231, 6.3.6 */ ResetContent: 205,
+ /** RFC 7233, 4.1 */ PartialContent: 206,
+ /** RFC 4918, 11.1 */ MultiStatus: 207,
+ /** RFC 5842, 7.1 */ AlreadyReported: 208,
+ /** RFC 3229, 10.4.1 */ IMUsed: 226,
+ /** RFC 7231, 6.4.1 */ MultipleChoices: 300,
+ /** RFC 7231, 6.4.2 */ MovedPermanently: 301,
+ /** RFC 7231, 6.4.3 */ Found: 302,
+ /** RFC 7231, 6.4.4 */ SeeOther: 303,
+ /** RFC 7232, 4.1 */ NotModified: 304,
+ /** RFC 7231, 6.4.5 */ UseProxy: 305,
+ /** RFC 7231, 6.4.7 */ TemporaryRedirect: 307,
+ /** RFC 7538, 3 */ PermanentRedirect: 308,
+ /** RFC 7231, 6.5.1 */ BadRequest: 400,
+ /** RFC 7235, 3.1 */ Unauthorized: 401,
+ /** RFC 7231, 6.5.2 */ PaymentRequired: 402,
+ /** RFC 7231, 6.5.3 */ Forbidden: 403,
+ /** RFC 7231, 6.5.4 */ NotFound: 404,
+ /** RFC 7231, 6.5.5 */ MethodNotAllowed: 405,
+ /** RFC 7231, 6.5.6 */ NotAcceptable: 406,
+ /** RFC 7235, 3.2 */ ProxyAuthRequired: 407,
+ /** RFC 7231, 6.5.7 */ RequestTimeout: 408,
+ /** RFC 7231, 6.5.8 */ Conflict: 409,
+ /** RFC 7231, 6.5.9 */ Gone: 410,
+ /** RFC 7231, 6.5.10 */ LengthRequired: 411,
+ /** RFC 7232, 4.2 */ PreconditionFailed: 412,
+ /** RFC 7231, 6.5.11 */ ContentTooLarge: 413,
+ /** RFC 7231, 6.5.12 */ URITooLong: 414,
+ /** RFC 7231, 6.5.13 */ UnsupportedMediaType: 415,
+ /** RFC 7233, 4.4 */ RangeNotSatisfiable: 416,
+ /** RFC 7231, 6.5.14 */ ExpectationFailed: 417,
+ /** RFC 7168, 2.3.3 */ Teapot: 418,
+ /** RFC 7540, 9.1.2 */ MisdirectedRequest: 421,
+ /** RFC 4918, 11.2 */ UnprocessableEntity: 422,
+ /** RFC 4918, 11.3 */ Locked: 423,
+ /** RFC 4918, 11.4 */ FailedDependency: 424,
+ /** RFC 8470, 5.2 */ TooEarly: 425,
+ /** RFC 7231, 6.5.15 */ UpgradeRequired: 426,
+ /** RFC 6585, 3 */ PreconditionRequired: 428,
+ /** RFC 6585, 4 */ TooManyRequests: 429,
+ /** RFC 6585, 5 */ RequestHeaderFieldsTooLarge: 431,
+ /** RFC 7725, 3 */ UnavailableForLegalReasons: 451,
+ /** RFC 7231, 6.6.1 */ InternalServerError: 500,
+ /** RFC 7231, 6.6.2 */ NotImplemented: 501,
+ /** RFC 7231, 6.6.3 */ BadGateway: 502,
+ /** RFC 7231, 6.6.4 */ ServiceUnavailable: 503,
+ /** RFC 7231, 6.6.5 */ GatewayTimeout: 504,
+ /** RFC 7231, 6.6.6 */ HTTPVersionNotSupported: 505,
+ /** RFC 2295, 8.1 */ VariantAlsoNegotiates: 506,
+ /** RFC 4918, 11.5 */ InsufficientStorage: 507,
+ /** RFC 5842, 7.2 */ LoopDetected: 508,
+ /** RFC 2774, 7 */ NotExtended: 510,
+ /** RFC 6585, 6 */ NetworkAuthenticationRequired: 511
+};
+/** A record of all the status codes text. */ export const STATUS_TEXT = {
+ [STATUS_CODE.Accepted]: "Accepted",
+ [STATUS_CODE.AlreadyReported]: "Already Reported",
+ [STATUS_CODE.BadGateway]: "Bad Gateway",
+ [STATUS_CODE.BadRequest]: "Bad Request",
+ [STATUS_CODE.Conflict]: "Conflict",
+ [STATUS_CODE.Continue]: "Continue",
+ [STATUS_CODE.Created]: "Created",
+ [STATUS_CODE.EarlyHints]: "Early Hints",
+ [STATUS_CODE.ExpectationFailed]: "Expectation Failed",
+ [STATUS_CODE.FailedDependency]: "Failed Dependency",
+ [STATUS_CODE.Forbidden]: "Forbidden",
+ [STATUS_CODE.Found]: "Found",
+ [STATUS_CODE.GatewayTimeout]: "Gateway Timeout",
+ [STATUS_CODE.Gone]: "Gone",
+ [STATUS_CODE.HTTPVersionNotSupported]: "HTTP Version Not Supported",
+ [STATUS_CODE.IMUsed]: "IM Used",
+ [STATUS_CODE.InsufficientStorage]: "Insufficient Storage",
+ [STATUS_CODE.InternalServerError]: "Internal Server Error",
+ [STATUS_CODE.LengthRequired]: "Length Required",
+ [STATUS_CODE.Locked]: "Locked",
+ [STATUS_CODE.LoopDetected]: "Loop Detected",
+ [STATUS_CODE.MethodNotAllowed]: "Method Not Allowed",
+ [STATUS_CODE.MisdirectedRequest]: "Misdirected Request",
+ [STATUS_CODE.MovedPermanently]: "Moved Permanently",
+ [STATUS_CODE.MultiStatus]: "Multi Status",
+ [STATUS_CODE.MultipleChoices]: "Multiple Choices",
+ [STATUS_CODE.NetworkAuthenticationRequired]: "Network Authentication Required",
+ [STATUS_CODE.NoContent]: "No Content",
+ [STATUS_CODE.NonAuthoritativeInfo]: "Non Authoritative Info",
+ [STATUS_CODE.NotAcceptable]: "Not Acceptable",
+ [STATUS_CODE.NotExtended]: "Not Extended",
+ [STATUS_CODE.NotFound]: "Not Found",
+ [STATUS_CODE.NotImplemented]: "Not Implemented",
+ [STATUS_CODE.NotModified]: "Not Modified",
+ [STATUS_CODE.OK]: "OK",
+ [STATUS_CODE.PartialContent]: "Partial Content",
+ [STATUS_CODE.PaymentRequired]: "Payment Required",
+ [STATUS_CODE.PermanentRedirect]: "Permanent Redirect",
+ [STATUS_CODE.PreconditionFailed]: "Precondition Failed",
+ [STATUS_CODE.PreconditionRequired]: "Precondition Required",
+ [STATUS_CODE.Processing]: "Processing",
+ [STATUS_CODE.ProxyAuthRequired]: "Proxy Auth Required",
+ [STATUS_CODE.ContentTooLarge]: "Content Too Large",
+ [STATUS_CODE.RequestHeaderFieldsTooLarge]: "Request Header Fields Too Large",
+ [STATUS_CODE.RequestTimeout]: "Request Timeout",
+ [STATUS_CODE.URITooLong]: "URI Too Long",
+ [STATUS_CODE.RangeNotSatisfiable]: "Range Not Satisfiable",
+ [STATUS_CODE.ResetContent]: "Reset Content",
+ [STATUS_CODE.SeeOther]: "See Other",
+ [STATUS_CODE.ServiceUnavailable]: "Service Unavailable",
+ [STATUS_CODE.SwitchingProtocols]: "Switching Protocols",
+ [STATUS_CODE.Teapot]: "I'm a teapot",
+ [STATUS_CODE.TemporaryRedirect]: "Temporary Redirect",
+ [STATUS_CODE.TooEarly]: "Too Early",
+ [STATUS_CODE.TooManyRequests]: "Too Many Requests",
+ [STATUS_CODE.Unauthorized]: "Unauthorized",
+ [STATUS_CODE.UnavailableForLegalReasons]: "Unavailable For Legal Reasons",
+ [STATUS_CODE.UnprocessableEntity]: "Unprocessable Entity",
+ [STATUS_CODE.UnsupportedMediaType]: "Unsupported Media Type",
+ [STATUS_CODE.UpgradeRequired]: "Upgrade Required",
+ [STATUS_CODE.UseProxy]: "Use Proxy",
+ [STATUS_CODE.VariantAlsoNegotiates]: "Variant Also Negotiates"
+};
+/**
+ * Returns whether the provided number is a valid HTTP status code.
+ *
+ * @example Usage
+ * ```ts
+ * import { isStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isStatus(404));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is a valid status code.
+ */ export function isStatus(status) {
+ return Object.values(STATUS_CODE).includes(status);
+}
+/**
+ * A type guard that determines if the status code is informational.
+ *
+ * @example Usage
+ * ```ts
+ * import { isInformationalStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isInformationalStatus(100));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is an informational status code.
+ */ export function isInformationalStatus(status) {
+ return isStatus(status) && status >= 100 && status < 200;
+}
+/**
+ * A type guard that determines if the status code is successful.
+ *
+ * @example Usage
+ * ```ts
+ * import { isSuccessfulStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isSuccessfulStatus(200));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is a successful status code.
+ */ export function isSuccessfulStatus(status) {
+ return isStatus(status) && status >= 200 && status < 300;
+}
+/**
+ * A type guard that determines if the status code is a redirection.
+ *
+ * @example Usage
+ * ```ts
+ * import { isRedirectStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isRedirectStatus(302));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is a redirect status code.
+ */ export function isRedirectStatus(status) {
+ return isStatus(status) && status >= 300 && status < 400;
+}
+/**
+ * A type guard that determines if the status code is a client error.
+ *
+ * @example Usage
+ * ```ts
+ * import { isClientErrorStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isClientErrorStatus(404));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is a client error status code.
+ */ export function isClientErrorStatus(status) {
+ return isStatus(status) && status >= 400 && status < 500;
+}
+/**
+ * A type guard that determines if the status code is a server error.
+ *
+ * @example Usage
+ * ```ts
+ * import { isServerErrorStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isServerErrorStatus(502));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is a server error status code.
+ */ export function isServerErrorStatus(status) {
+ return isStatus(status) && status >= 500 && status < 600;
+}
+/**
+ * A type guard that determines if the status code is an error.
+ *
+ * @example Usage
+ * ```ts
+ * import { isErrorStatus } from "@std/http/status";
+ * import { assert } from "@std/assert";
+ *
+ * assert(isErrorStatus(502));
+ * ```
+ *
+ * @param status The status to assert against.
+ * @returns Whether or not the provided status is an error status code.
+ */ export function isErrorStatus(status) {
+ return isStatus(status) && status >= 400 && status < 600;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHR0cC8xLjAuMTYvc3RhdHVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogQ29udGFpbnMgdGhlIHtAbGlua2NvZGUgU1RBVFVTX0NPREV9IG9iamVjdCB3aGljaCBjb250YWlucyBzdGFuZGFyZCBIVFRQXG4gKiBzdGF0dXMgY29kZXMgYW5kIHByb3ZpZGVzIHNldmVyYWwgdHlwZSBndWFyZHMgZm9yIGhhbmRsaW5nIHN0YXR1cyBjb2Rlc1xuICogd2l0aCB0eXBlIHNhZmV0eS5cbiAqXG4gKiBAZXhhbXBsZSBUaGUgc3RhdHVzIGNvZGUgYW5kIHN0YXR1cyB0ZXh0XG4gKiBgYGB0c1xuICogaW1wb3J0IHtcbiAqICAgU1RBVFVTX0NPREUsXG4gKiAgIFNUQVRVU19URVhULFxuICogfSBmcm9tIFwiQHN0ZC9odHRwL3N0YXR1c1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKFNUQVRVU19DT0RFLk5vdEZvdW5kKTsgLy8gUmV0dXJucyA0MDRcbiAqIGNvbnNvbGUubG9nKFNUQVRVU19URVhUW1NUQVRVU19DT0RFLk5vdEZvdW5kXSk7IC8vIFJldHVybnMgXCJOb3QgRm91bmRcIlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ2hlY2tpbmcgdGhlIHN0YXR1cyBjb2RlIHR5cGVcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgaXNFcnJvclN0YXR1cyB9IGZyb20gXCJAc3RkL2h0dHAvc3RhdHVzXCI7XG4gKlxuICogY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXCJodHRwczovL2V4YW1wbGUuY29tL1wiKTtcbiAqXG4gKiBpZiAoaXNFcnJvclN0YXR1cyhyZXMuc3RhdHVzKSkge1xuICogICAvLyBlcnJvciBoYW5kbGluZyBoZXJlLi4uXG4gKiB9XG4gKlxuICogYXdhaXQgcmVzLmJvZHk/LmNhbmNlbCgpO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmV4cG9ydCBjb25zdCBTVEFUVVNfQ09ERSA9IHtcbiAgLyoqIFJGQyA3MjMxLCA2LjIuMSAqL1xuICBDb250aW51ZTogMTAwLFxuICAvKiogUkZDIDcyMzEsIDYuMi4yICovXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICAvKiogUkZDIDI1MTgsIDEwLjEgKi9cbiAgUHJvY2Vzc2luZzogMTAyLFxuICAvKiogUkZDIDgyOTcgKiovXG4gIEVhcmx5SGludHM6IDEwMyxcblxuICAvKiogUkZDIDcyMzEsIDYuMy4xICovXG4gIE9LOiAyMDAsXG4gIC8qKiBSRkMgNzIzMSwgNi4zLjIgKi9cbiAgQ3JlYXRlZDogMjAxLFxuICAvKiogUkZDIDcyMzEsIDYuMy4zICovXG4gIEFjY2VwdGVkOiAyMDIsXG4gIC8qKiBSRkMgNzIzMSwgNi4zLjQgKi9cbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm86IDIwMyxcbiAgLyoqIFJGQyA3MjMxLCA2LjMuNSAqL1xuICBOb0NvbnRlbnQ6IDIwNCxcbiAgLyoqIFJGQyA3MjMxLCA2LjMuNiAqL1xuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgLyoqIFJGQyA3MjMzLCA0LjEgKi9cbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgLyoqIFJGQyA0OTE4LCAxMS4xICovXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIC8qKiBSRkMgNTg0MiwgNy4xICovXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICAvKiogUkZDIDMyMjksIDEwLjQuMSAqL1xuICBJTVVzZWQ6IDIyNixcblxuICAvKiogUkZDIDcyMzEsIDYuNC4xICovXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICAvKiogUkZDIDcyMzEsIDYuNC4yICovXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgLyoqIFJGQyA3MjMxLCA2LjQuMyAqL1xuICBGb3VuZDogMzAyLFxuICAvKiogUkZDIDcyMzEsIDYuNC40ICovXG4gIFNlZU90aGVyOiAzMDMsXG4gIC8qKiBSRkMgNzIzMiwgNC4xICovXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIC8qKiBSRkMgNzIzMSwgNi40LjUgKi9cbiAgVXNlUHJveHk6IDMwNSxcbiAgLyoqIFJGQyA3MjMxLCA2LjQuNyAqL1xuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICAvKiogUkZDIDc1MzgsIDMgKi9cbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcblxuICAvKiogUkZDIDcyMzEsIDYuNS4xICovXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgLyoqIFJGQyA3MjM1LCAzLjEgKi9cbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjIgKi9cbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjMgKi9cbiAgRm9yYmlkZGVuOiA0MDMsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjQgKi9cbiAgTm90Rm91bmQ6IDQwNCxcbiAgLyoqIFJGQyA3MjMxLCA2LjUuNSAqL1xuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjYgKi9cbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICAvKiogUkZDIDcyMzUsIDMuMiAqL1xuICBQcm94eUF1dGhSZXF1aXJlZDogNDA3LFxuICAvKiogUkZDIDcyMzEsIDYuNS43ICovXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjggKi9cbiAgQ29uZmxpY3Q6IDQwOSxcbiAgLyoqIFJGQyA3MjMxLCA2LjUuOSAqL1xuICBHb25lOiA0MTAsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjEwICovXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIC8qKiBSRkMgNzIzMiwgNC4yICovXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICAvKiogUkZDIDcyMzEsIDYuNS4xMSAqL1xuICBDb250ZW50VG9vTGFyZ2U6IDQxMyxcbiAgLyoqIFJGQyA3MjMxLCA2LjUuMTIgKi9cbiAgVVJJVG9vTG9uZzogNDE0LFxuICAvKiogUkZDIDcyMzEsIDYuNS4xMyAqL1xuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICAvKiogUkZDIDcyMzMsIDQuNCAqL1xuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIC8qKiBSRkMgNzIzMSwgNi41LjE0ICovXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIC8qKiBSRkMgNzE2OCwgMi4zLjMgKi9cbiAgVGVhcG90OiA0MTgsXG4gIC8qKiBSRkMgNzU0MCwgOS4xLjIgKi9cbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIC8qKiBSRkMgNDkxOCwgMTEuMiAqL1xuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIC8qKiBSRkMgNDkxOCwgMTEuMyAqL1xuICBMb2NrZWQ6IDQyMyxcbiAgLyoqIFJGQyA0OTE4LCAxMS40ICovXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgLyoqIFJGQyA4NDcwLCA1LjIgKi9cbiAgVG9vRWFybHk6IDQyNSxcbiAgLyoqIFJGQyA3MjMxLCA2LjUuMTUgKi9cbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIC8qKiBSRkMgNjU4NSwgMyAqL1xuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICAvKiogUkZDIDY1ODUsIDQgKi9cbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIC8qKiBSRkMgNjU4NSwgNSAqL1xuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgLyoqIFJGQyA3NzI1LCAzICovXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG5cbiAgLyoqIFJGQyA3MjMxLCA2LjYuMSAqL1xuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIC8qKiBSRkMgNzIzMSwgNi42LjIgKi9cbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgLyoqIFJGQyA3MjMxLCA2LjYuMyAqL1xuICBCYWRHYXRld2F5OiA1MDIsXG4gIC8qKiBSRkMgNzIzMSwgNi42LjQgKi9cbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIC8qKiBSRkMgNzIzMSwgNi42LjUgKi9cbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgLyoqIFJGQyA3MjMxLCA2LjYuNiAqL1xuICBIVFRQVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICAvKiogUkZDIDIyOTUsIDguMSAqL1xuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgLyoqIFJGQyA0OTE4LCAxMS41ICovXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgLyoqIFJGQyA1ODQyLCA3LjIgKi9cbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIC8qKiBSRkMgMjc3NCwgNyAqL1xuICBOb3RFeHRlbmRlZDogNTEwLFxuICAvKiogUkZDIDY1ODUsIDYgKi9cbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn0gYXMgY29uc3Q7XG5cbi8qKiBBbiBIVFRQIHN0YXR1cyBjb2RlLiAqL1xuZXhwb3J0IHR5cGUgU3RhdHVzQ29kZSA9IHR5cGVvZiBTVEFUVVNfQ09ERVtrZXlvZiB0eXBlb2YgU1RBVFVTX0NPREVdO1xuXG4vKiogQSByZWNvcmQgb2YgYWxsIHRoZSBzdGF0dXMgY29kZXMgdGV4dC4gKi9cbmV4cG9ydCBjb25zdCBTVEFUVVNfVEVYVCA9IHtcbiAgW1NUQVRVU19DT0RFLkFjY2VwdGVkXTogXCJBY2NlcHRlZFwiLFxuICBbU1RBVFVTX0NPREUuQWxyZWFkeVJlcG9ydGVkXTogXCJBbHJlYWR5IFJlcG9ydGVkXCIsXG4gIFtTVEFUVVNfQ09ERS5CYWRHYXRld2F5XTogXCJCYWQgR2F0ZXdheVwiLFxuICBbU1RBVFVTX0NPREUuQmFkUmVxdWVzdF06IFwiQmFkIFJlcXVlc3RcIixcbiAgW1NUQVRVU19DT0RFLkNvbmZsaWN0XTogXCJDb25mbGljdFwiLFxuICBbU1RBVFVTX0NPREUuQ29udGludWVdOiBcIkNvbnRpbnVlXCIsXG4gIFtTVEFUVVNfQ09ERS5DcmVhdGVkXTogXCJDcmVhdGVkXCIsXG4gIFtTVEFUVVNfQ09ERS5FYXJseUhpbnRzXTogXCJFYXJseSBIaW50c1wiLFxuICBbU1RBVFVTX0NPREUuRXhwZWN0YXRpb25GYWlsZWRdOiBcIkV4cGVjdGF0aW9uIEZhaWxlZFwiLFxuICBbU1RBVFVTX0NPREUuRmFpbGVkRGVwZW5kZW5jeV06IFwiRmFpbGVkIERlcGVuZGVuY3lcIixcbiAgW1NUQVRVU19DT0RFLkZvcmJpZGRlbl06IFwiRm9yYmlkZGVuXCIsXG4gIFtTVEFUVVNfQ09ERS5Gb3VuZF06IFwiRm91bmRcIixcbiAgW1NUQVRVU19DT0RFLkdhdGV3YXlUaW1lb3V0XTogXCJHYXRld2F5IFRpbWVvdXRcIixcbiAgW1NUQVRVU19DT0RFLkdvbmVdOiBcIkdvbmVcIixcbiAgW1NUQVRVU19DT0RFLkhUVFBWZXJzaW9uTm90U3VwcG9ydGVkXTogXCJIVFRQIFZlcnNpb24gTm90IFN1cHBvcnRlZFwiLFxuICBbU1RBVFVTX0NPREUuSU1Vc2VkXTogXCJJTSBVc2VkXCIsXG4gIFtTVEFUVVNfQ09ERS5JbnN1ZmZpY2llbnRTdG9yYWdlXTogXCJJbnN1ZmZpY2llbnQgU3RvcmFnZVwiLFxuICBbU1RBVFVTX0NPREUuSW50ZXJuYWxTZXJ2ZXJFcnJvcl06IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIsXG4gIFtTVEFUVVNfQ09ERS5MZW5ndGhSZXF1aXJlZF06IFwiTGVuZ3RoIFJlcXVpcmVkXCIsXG4gIFtTVEFUVVNfQ09ERS5Mb2NrZWRdOiBcIkxvY2tlZFwiLFxuICBbU1RBVFVTX0NPREUuTG9vcERldGVjdGVkXTogXCJMb29wIERldGVjdGVkXCIsXG4gIFtTVEFUVVNfQ09ERS5NZXRob2ROb3RBbGxvd2VkXTogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcbiAgW1NUQVRVU19DT0RFLk1pc2RpcmVjdGVkUmVxdWVzdF06IFwiTWlzZGlyZWN0ZWQgUmVxdWVzdFwiLFxuICBbU1RBVFVTX0NPREUuTW92ZWRQZXJtYW5lbnRseV06IFwiTW92ZWQgUGVybWFuZW50bHlcIixcbiAgW1NUQVRVU19DT0RFLk11bHRpU3RhdHVzXTogXCJNdWx0aSBTdGF0dXNcIixcbiAgW1NUQVRVU19DT0RFLk11bHRpcGxlQ2hvaWNlc106IFwiTXVsdGlwbGUgQ2hvaWNlc1wiLFxuICBbU1RBVFVTX0NPREUuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRdOlxuICAgIFwiTmV0d29yayBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFxuICBbU1RBVFVTX0NPREUuTm9Db250ZW50XTogXCJObyBDb250ZW50XCIsXG4gIFtTVEFUVVNfQ09ERS5Ob25BdXRob3JpdGF0aXZlSW5mb106IFwiTm9uIEF1dGhvcml0YXRpdmUgSW5mb1wiLFxuICBbU1RBVFVTX0NPREUuTm90QWNjZXB0YWJsZV06IFwiTm90IEFjY2VwdGFibGVcIixcbiAgW1NUQVRVU19DT0RFLk5vdEV4dGVuZGVkXTogXCJOb3QgRXh0ZW5kZWRcIixcbiAgW1NUQVRVU19DT0RFLk5vdEZvdW5kXTogXCJOb3QgRm91bmRcIixcbiAgW1NUQVRVU19DT0RFLk5vdEltcGxlbWVudGVkXTogXCJOb3QgSW1wbGVtZW50ZWRcIixcbiAgW1NUQVRVU19DT0RFLk5vdE1vZGlmaWVkXTogXCJOb3QgTW9kaWZpZWRcIixcbiAgW1NUQVRVU19DT0RFLk9LXTogXCJPS1wiLFxuICBbU1RBVFVTX0NPREUuUGFydGlhbENvbnRlbnRdOiBcIlBhcnRpYWwgQ29udGVudFwiLFxuICBbU1RBVFVTX0NPREUuUGF5bWVudFJlcXVpcmVkXTogXCJQYXltZW50IFJlcXVpcmVkXCIsXG4gIFtTVEFUVVNfQ09ERS5QZXJtYW5lbnRSZWRpcmVjdF06IFwiUGVybWFuZW50IFJlZGlyZWN0XCIsXG4gIFtTVEFUVVNfQ09ERS5QcmVjb25kaXRpb25GYWlsZWRdOiBcIlByZWNvbmRpdGlvbiBGYWlsZWRcIixcbiAgW1NUQVRVU19DT0RFLlByZWNvbmRpdGlvblJlcXVpcmVkXTogXCJQcmVjb25kaXRpb24gUmVxdWlyZWRcIixcbiAgW1NUQVRVU19DT0RFLlByb2Nlc3NpbmddOiBcIlByb2Nlc3NpbmdcIixcbiAgW1NUQVRVU19DT0RFLlByb3h5QXV0aFJlcXVpcmVkXTogXCJQcm94eSBBdXRoIFJlcXVpcmVkXCIsXG4gIFtTVEFUVVNfQ09ERS5Db250ZW50VG9vTGFyZ2VdOiBcIkNvbnRlbnQgVG9vIExhcmdlXCIsXG4gIFtTVEFUVVNfQ09ERS5SZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2VdOiBcIlJlcXVlc3QgSGVhZGVyIEZpZWxkcyBUb28gTGFyZ2VcIixcbiAgW1NUQVRVU19DT0RFLlJlcXVlc3RUaW1lb3V0XTogXCJSZXF1ZXN0IFRpbWVvdXRcIixcbiAgW1NUQVRVU19DT0RFLlVSSVRvb0xvbmddOiBcIlVSSSBUb28gTG9uZ1wiLFxuICBbU1RBVFVTX0NPREUuUmFuZ2VOb3RTYXRpc2ZpYWJsZV06IFwiUmFuZ2UgTm90IFNhdGlzZmlhYmxlXCIsXG4gIFtTVEFUVVNfQ09ERS5SZXNldENvbnRlbnRdOiBcIlJlc2V0IENvbnRlbnRcIixcbiAgW1NUQVRVU19DT0RFLlNlZU90aGVyXTogXCJTZWUgT3RoZXJcIixcbiAgW1NUQVRVU19DT0RFLlNlcnZpY2VVbmF2YWlsYWJsZV06IFwiU2VydmljZSBVbmF2YWlsYWJsZVwiLFxuICBbU1RBVFVTX0NPREUuU3dpdGNoaW5nUHJvdG9jb2xzXTogXCJTd2l0Y2hpbmcgUHJvdG9jb2xzXCIsXG4gIFtTVEFUVVNfQ09ERS5UZWFwb3RdOiBcIkknbSBhIHRlYXBvdFwiLFxuICBbU1RBVFVTX0NPREUuVGVtcG9yYXJ5UmVkaXJlY3RdOiBcIlRlbXBvcmFyeSBSZWRpcmVjdFwiLFxuICBbU1RBVFVTX0NPREUuVG9vRWFybHldOiBcIlRvbyBFYXJseVwiLFxuICBbU1RBVFVTX0NPREUuVG9vTWFueVJlcXVlc3RzXTogXCJUb28gTWFueSBSZXF1ZXN0c1wiLFxuICBbU1RBVFVTX0NPREUuVW5hdXRob3JpemVkXTogXCJVbmF1dGhvcml6ZWRcIixcbiAgW1NUQVRVU19DT0RFLlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zXTogXCJVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29uc1wiLFxuICBbU1RBVFVTX0NPREUuVW5wcm9jZXNzYWJsZUVudGl0eV06IFwiVW5wcm9jZXNzYWJsZSBFbnRpdHlcIixcbiAgW1NUQVRVU19DT0RFLlVuc3VwcG9ydGVkTWVkaWFUeXBlXTogXCJVbnN1cHBvcnRlZCBNZWRpYSBUeXBlXCIsXG4gIFtTVEFUVVNfQ09ERS5VcGdyYWRlUmVxdWlyZWRdOiBcIlVwZ3JhZGUgUmVxdWlyZWRcIixcbiAgW1NUQVRVU19DT0RFLlVzZVByb3h5XTogXCJVc2UgUHJveHlcIixcbiAgW1NUQVRVU19DT0RFLlZhcmlhbnRBbHNvTmVnb3RpYXRlc106IFwiVmFyaWFudCBBbHNvIE5lZ290aWF0ZXNcIixcbn0gYXMgY29uc3Q7XG5cbi8qKiBBbiBIVFRQIHN0YXR1cyB0ZXh0LiAqL1xuZXhwb3J0IHR5cGUgU3RhdHVzVGV4dCA9IHR5cGVvZiBTVEFUVVNfVEVYVFtrZXlvZiB0eXBlb2YgU1RBVFVTX1RFWFRdO1xuXG4vKiogQW4gSFRUUCBzdGF0dXMgdGhhdCBpcyBhIGluZm9ybWF0aW9uYWwgKDFYWCkuICovXG5leHBvcnQgdHlwZSBJbmZvcm1hdGlvbmFsU3RhdHVzID1cbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuQ29udGludWVcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuU3dpdGNoaW5nUHJvdG9jb2xzXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlByb2Nlc3NpbmdcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuRWFybHlIaW50cztcblxuLyoqIEFuIEhUVFAgc3RhdHVzIHRoYXQgaXMgYSBzdWNjZXNzICgyWFgpLiAqL1xuZXhwb3J0IHR5cGUgU3VjY2Vzc2Z1bFN0YXR1cyA9XG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLk9LXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkNyZWF0ZWRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuQWNjZXB0ZWRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuTm9uQXV0aG9yaXRhdGl2ZUluZm9cbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuTm9Db250ZW50XG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlJlc2V0Q29udGVudFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5QYXJ0aWFsQ29udGVudFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5NdWx0aVN0YXR1c1xuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5BbHJlYWR5UmVwb3J0ZWRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuSU1Vc2VkO1xuXG4vKiogQW4gSFRUUCBzdGF0dXMgdGhhdCBpcyBhIHJlZGlyZWN0ICgzWFgpLiAqL1xuZXhwb3J0IHR5cGUgUmVkaXJlY3RTdGF0dXMgPVxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5NdWx0aXBsZUNob2ljZXMgLy8gMzAwXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLk1vdmVkUGVybWFuZW50bHkgLy8gMzAxXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkZvdW5kIC8vIDMwMlxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5TZWVPdGhlciAvLyAzMDNcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuVXNlUHJveHkgLy8gMzA1IC0gREVQUkVDQVRFRFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5UZW1wb3JhcnlSZWRpcmVjdCAvLyAzMDdcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuUGVybWFuZW50UmVkaXJlY3Q7IC8vIDMwOFxuXG4vKiogQW4gSFRUUCBzdGF0dXMgdGhhdCBpcyBhIGNsaWVudCBlcnJvciAoNFhYKS4gKi9cbmV4cG9ydCB0eXBlIENsaWVudEVycm9yU3RhdHVzID1cbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuQmFkUmVxdWVzdFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5VbmF1dGhvcml6ZWRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuUGF5bWVudFJlcXVpcmVkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkZvcmJpZGRlblxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5Ob3RGb3VuZFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5NZXRob2ROb3RBbGxvd2VkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLk5vdEFjY2VwdGFibGVcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuUHJveHlBdXRoUmVxdWlyZWRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuUmVxdWVzdFRpbWVvdXRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuQ29uZmxpY3RcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuR29uZVxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5MZW5ndGhSZXF1aXJlZFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5QcmVjb25kaXRpb25GYWlsZWRcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuQ29udGVudFRvb0xhcmdlXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlVSSVRvb0xvbmdcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuVW5zdXBwb3J0ZWRNZWRpYVR5cGVcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuUmFuZ2VOb3RTYXRpc2ZpYWJsZVxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5FeHBlY3RhdGlvbkZhaWxlZFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5UZWFwb3RcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuTWlzZGlyZWN0ZWRSZXF1ZXN0XG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlVucHJvY2Vzc2FibGVFbnRpdHlcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuTG9ja2VkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkZhaWxlZERlcGVuZGVuY3lcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuVXBncmFkZVJlcXVpcmVkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlByZWNvbmRpdGlvblJlcXVpcmVkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlRvb01hbnlSZXF1ZXN0c1xuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5SZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2VcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM7XG5cbi8qKiBBbiBIVFRQIHN0YXR1cyB0aGF0IGlzIGEgc2VydmVyIGVycm9yICg1WFgpLiAqL1xuZXhwb3J0IHR5cGUgU2VydmVyRXJyb3JTdGF0dXMgPVxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5JbnRlcm5hbFNlcnZlckVycm9yXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLk5vdEltcGxlbWVudGVkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkJhZEdhdGV3YXlcbiAgfCB0eXBlb2YgU1RBVFVTX0NPREUuU2VydmljZVVuYXZhaWxhYmxlXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkdhdGV3YXlUaW1lb3V0XG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkhUVFBWZXJzaW9uTm90U3VwcG9ydGVkXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLlZhcmlhbnRBbHNvTmVnb3RpYXRlc1xuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5JbnN1ZmZpY2llbnRTdG9yYWdlXG4gIHwgdHlwZW9mIFNUQVRVU19DT0RFLkxvb3BEZXRlY3RlZFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5Ob3RFeHRlbmRlZFxuICB8IHR5cGVvZiBTVEFUVVNfQ09ERS5OZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDtcblxuLyoqIEFuIEhUVFAgc3RhdHVzIHRoYXQgaXMgYW4gZXJyb3IgKDRYWCBhbmQgNVhYKS4gKi9cbmV4cG9ydCB0eXBlIEVycm9yU3RhdHVzID0gQ2xpZW50RXJyb3JTdGF0dXMgfCBTZXJ2ZXJFcnJvclN0YXR1cztcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIG51bWJlciBpcyBhIHZhbGlkIEhUVFAgc3RhdHVzIGNvZGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpc1N0YXR1cyB9IGZyb20gXCJAc3RkL2h0dHAvc3RhdHVzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnQoaXNTdGF0dXMoNDA0KSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RhdHVzIFRoZSBzdGF0dXMgdG8gYXNzZXJ0IGFnYWluc3QuXG4gKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgc3RhdHVzIGlzIGEgdmFsaWQgc3RhdHVzIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXR1cyhzdGF0dXM6IG51bWJlcik6IHN0YXR1cyBpcyBTdGF0dXNDb2RlIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoU1RBVFVTX0NPREUpLmluY2x1ZGVzKHN0YXR1cyBhcyBTdGF0dXNDb2RlKTtcbn1cblxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBzdGF0dXMgY29kZSBpcyBpbmZvcm1hdGlvbmFsLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNJbmZvcm1hdGlvbmFsU3RhdHVzIH0gZnJvbSBcIkBzdGQvaHR0cC9zdGF0dXNcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydChpc0luZm9ybWF0aW9uYWxTdGF0dXMoMTAwKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RhdHVzIFRoZSBzdGF0dXMgdG8gYXNzZXJ0IGFnYWluc3QuXG4gKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgc3RhdHVzIGlzIGFuIGluZm9ybWF0aW9uYWwgc3RhdHVzIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luZm9ybWF0aW9uYWxTdGF0dXMoXG4gIHN0YXR1czogbnVtYmVyLFxuKTogc3RhdHVzIGlzIEluZm9ybWF0aW9uYWxTdGF0dXMge1xuICByZXR1cm4gaXNTdGF0dXMoc3RhdHVzKSAmJiBzdGF0dXMgPj0gMTAwICYmIHN0YXR1cyA8IDIwMDtcbn1cblxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBzdGF0dXMgY29kZSBpcyBzdWNjZXNzZnVsLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNTdWNjZXNzZnVsU3RhdHVzIH0gZnJvbSBcIkBzdGQvaHR0cC9zdGF0dXNcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydChpc1N1Y2Nlc3NmdWxTdGF0dXMoMjAwKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RhdHVzIFRoZSBzdGF0dXMgdG8gYXNzZXJ0IGFnYWluc3QuXG4gKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgc3RhdHVzIGlzIGEgc3VjY2Vzc2Z1bCBzdGF0dXMgY29kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VjY2Vzc2Z1bFN0YXR1cyhcbiAgc3RhdHVzOiBudW1iZXIsXG4pOiBzdGF0dXMgaXMgU3VjY2Vzc2Z1bFN0YXR1cyB7XG4gIHJldHVybiBpc1N0YXR1cyhzdGF0dXMpICYmIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xufVxuXG4vKipcbiAqIEEgdHlwZSBndWFyZCB0aGF0IGRldGVybWluZXMgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGEgcmVkaXJlY3Rpb24uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpc1JlZGlyZWN0U3RhdHVzIH0gZnJvbSBcIkBzdGQvaHR0cC9zdGF0dXNcIjtcbiAqIGltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydChpc1JlZGlyZWN0U3RhdHVzKDMwMikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0YXR1cyBUaGUgc3RhdHVzIHRvIGFzc2VydCBhZ2FpbnN0LlxuICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHN0YXR1cyBpcyBhIHJlZGlyZWN0IHN0YXR1cyBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWRpcmVjdFN0YXR1cyhzdGF0dXM6IG51bWJlcik6IHN0YXR1cyBpcyBSZWRpcmVjdFN0YXR1cyB7XG4gIHJldHVybiBpc1N0YXR1cyhzdGF0dXMpICYmIHN0YXR1cyA+PSAzMDAgJiYgc3RhdHVzIDwgNDAwO1xufVxuXG4vKipcbiAqIEEgdHlwZSBndWFyZCB0aGF0IGRldGVybWluZXMgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGEgY2xpZW50IGVycm9yLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNDbGllbnRFcnJvclN0YXR1cyB9IGZyb20gXCJAc3RkL2h0dHAvc3RhdHVzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnQoaXNDbGllbnRFcnJvclN0YXR1cyg0MDQpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdGF0dXMgVGhlIHN0YXR1cyB0byBhc3NlcnQgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzdGF0dXMgaXMgYSBjbGllbnQgZXJyb3Igc3RhdHVzIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NsaWVudEVycm9yU3RhdHVzKFxuICBzdGF0dXM6IG51bWJlcixcbik6IHN0YXR1cyBpcyBDbGllbnRFcnJvclN0YXR1cyB7XG4gIHJldHVybiBpc1N0YXR1cyhzdGF0dXMpICYmIHN0YXR1cyA+PSA0MDAgJiYgc3RhdHVzIDwgNTAwO1xufVxuXG4vKipcbiAqIEEgdHlwZSBndWFyZCB0aGF0IGRldGVybWluZXMgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGEgc2VydmVyIGVycm9yLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNTZXJ2ZXJFcnJvclN0YXR1cyB9IGZyb20gXCJAc3RkL2h0dHAvc3RhdHVzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnQoaXNTZXJ2ZXJFcnJvclN0YXR1cyg1MDIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdGF0dXMgVGhlIHN0YXR1cyB0byBhc3NlcnQgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzdGF0dXMgaXMgYSBzZXJ2ZXIgZXJyb3Igc3RhdHVzIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZlckVycm9yU3RhdHVzKFxuICBzdGF0dXM6IG51bWJlcixcbik6IHN0YXR1cyBpcyBTZXJ2ZXJFcnJvclN0YXR1cyB7XG4gIHJldHVybiBpc1N0YXR1cyhzdGF0dXMpICYmIHN0YXR1cyA+PSA1MDAgJiYgc3RhdHVzIDwgNjAwO1xufVxuXG4vKipcbiAqIEEgdHlwZSBndWFyZCB0aGF0IGRldGVybWluZXMgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGFuIGVycm9yLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXNFcnJvclN0YXR1cyB9IGZyb20gXCJAc3RkL2h0dHAvc3RhdHVzXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnQoaXNFcnJvclN0YXR1cyg1MDIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdGF0dXMgVGhlIHN0YXR1cyB0byBhc3NlcnQgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzdGF0dXMgaXMgYW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yU3RhdHVzKHN0YXR1czogbnVtYmVyKTogc3RhdHVzIGlzIEVycm9yU3RhdHVzIHtcbiAgcmV0dXJuIGlzU3RhdHVzKHN0YXR1cykgJiYgc3RhdHVz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
+// denoCacheMetadata=2161517556870421720,14842027141846010287 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/bb905bc2f8533ff77cd0689d547cd97ee453c168804747a23f3917c658337a63.js b/vendor/gen/https/jsr.io/bb905bc2f8533ff77cd0689d547cd97ee453c168804747a23f3917c658337a63.js
new file mode 100644
index 0000000..8b956c0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/bb905bc2f8533ff77cd0689d547cd97ee453c168804747a23f3917c658337a63.js
@@ -0,0 +1,86 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { _globToRegExp } from "../_common/glob_to_reg_exp.ts";
+const constants = {
+ sep: "(?:\\\\|/)+",
+ sepMaybe: "(?:\\\\|/)*",
+ seps: [
+ "\\",
+ "/"
+ ],
+ globstar: "(?:[^\\\\/]*(?:\\\\|/|$)+)*",
+ wildcard: "[^\\\\/]*",
+ escapePrefix: "`"
+};
+/** Convert a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment.
+ *
+ * @example Usage
+ * ```ts
+ * import { globToRegExp } from "@std/path/windows/glob-to-regexp";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(globToRegExp("*.js"), /^[^\\/]*\.js(?:\\|\/)*$/);
+ * ```
+ *
+ * @param glob Glob string to convert.
+ * @param options Conversion options.
+ * @returns The regular expression equivalent to the glob.
+ */ export function globToRegExp(glob, options = {}) {
+ return _globToRegExp(constants, glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2dsb2JfdG9fcmVnZXhwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7XG4gIF9nbG9iVG9SZWdFeHAsXG4gIHR5cGUgR2xvYkNvbnN0YW50cyxcbiAgdHlwZSBHbG9iT3B0aW9ucyxcbn0gZnJvbSBcIi4uL19jb21tb24vZ2xvYl90b19yZWdfZXhwLnRzXCI7XG5cbmNvbnN0IGNvbnN0YW50czogR2xvYkNvbnN0YW50cyA9IHtcbiAgc2VwOiBcIig/OlxcXFxcXFxcfC8pK1wiLFxuICBzZXBNYXliZTogXCIoPzpcXFxcXFxcXHwvKSpcIixcbiAgc2VwczogW1wiXFxcXFwiLCBcIi9cIl0sXG4gIGdsb2JzdGFyOiBcIig/OlteXFxcXFxcXFwvXSooPzpcXFxcXFxcXHwvfCQpKykqXCIsXG4gIHdpbGRjYXJkOiBcIlteXFxcXFxcXFwvXSpcIixcbiAgZXNjYXBlUHJlZml4OiBcImBcIixcbn07XG5cbi8qKiBDb252ZXJ0IGEgZ2xvYiBzdHJpbmcgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogVHJpZXMgdG8gbWF0Y2ggYmFzaCBnbG9iIGV4cGFuc2lvbiBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEJhc2ljIGdsb2Igc3ludGF4OlxuICogLSBgKmAgLSBNYXRjaGVzIGV2ZXJ5dGhpbmcgd2l0aG91dCBsZWF2aW5nIHRoZSBwYXRoIHNlZ21lbnQuXG4gKiAtIGA/YCAtIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiAtIGB7Zm9vLGJhcn1gIC0gTWF0Y2hlcyBgZm9vYCBvciBgYmFyYC5cbiAqIC0gYFthYmNkXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW2EtZF1gIC0gTWF0Y2hlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFshYWJjZF1gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBiZXNpZGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW1s6PGNsYXNzPjpdXWAgLSBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIGA8Y2xhc3M+YC5cbiAqICAgICAtIGBbWzphbG51bTpdXWAgLSBNYXRjaGVzIGFueSBkaWdpdCBvciBsZXR0ZXIuXG4gKiAgICAgLSBgW1s6ZGlnaXQ6XWFiY11gIC0gTWF0Y2hlcyBhbnkgZGlnaXQsIGBhYCwgYGJgIG9yIGBjYC5cbiAqICAgICAtIFNlZSBodHRwczovL2ZhY2VsZXNzdXNlci5naXRodWIuaW8vd2NtYXRjaC9nbG9iLyNwb3NpeC1jaGFyYWN0ZXItY2xhc3Nlc1xuICogICAgICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG4gKiAtIGBcXGAgLSBFc2NhcGVzIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgYW4gYG9zYCBvdGhlciB0aGFuIGBcIndpbmRvd3NcImAuXG4gKiAtIFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICogLSBgL2AgLSBQYXRoIHNlcGFyYXRvci5cbiAqIC0gYFxcYCAtIEFkZGl0aW9uYWwgcGF0aCBzZXBhcmF0b3Igb25seSBmb3IgYG9zYCBzZXQgdG8gYFwid2luZG93c1wiYC5cbiAqXG4gKiBFeHRlbmRlZCBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGV4dGVuZGVkOiB0cnVlIH1gLlxuICogLSBgPyhmb298YmFyKWAgLSBNYXRjaGVzIDAgb3IgMSBpbnN0YW5jZSBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYEAoZm9vfGJhcilgIC0gTWF0Y2hlcyAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLiBUaGV5IGJlaGF2ZSB0aGUgc2FtZS5cbiAqIC0gYCooZm9vfGJhcilgIC0gTWF0Y2hlcyBfbl8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgKyhmb298YmFyKWAgLSBNYXRjaGVzIF9uID4gMF8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgIShmb298YmFyKWAgLSBNYXRjaGVzIGFueXRoaW5nIG90aGVyIHRoYW4gYHtmb28sYmFyfWAuXG4gKiAtIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvYmFzaC1leHRlbmRlZC1nbG9iYmluZy5cbiAqXG4gKiBHbG9ic3RhciBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGdsb2JzdGFyOiB0cnVlIH1gLlxuICogLSBgKipgIC0gTWF0Y2hlcyBhbnkgbnVtYmVyIG9mIGFueSBwYXRoIHNlZ21lbnRzLlxuICogICAgIC0gTXVzdCBjb21wcmlzZSBpdHMgZW50aXJlIHBhdGggc2VnbWVudCBpbiB0aGUgcHJvdmlkZWQgZ2xvYi5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gKlxuICogTm90ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIFRoZSBnZW5lcmF0ZWQgYFJlZ0V4cGAgaXMgYW5jaG9yZWQgYXQgYm90aCBzdGFydCBhbmQgZW5kLlxuICogLSBSZXBlYXRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHRvbGVyYXRlZC4gVHJhaWxpbmcgc2VwYXJhdG9ycyBpbiB0aGVcbiAqICAgcHJvdmlkZWQgZ2xvYiBoYXZlIG5vIG1lYW5pbmcgYW5kIGFyZSBkaXNjYXJkZWQuXG4gKiAtIEFic29sdXRlIGdsb2JzIHdpbGwgb25seSBtYXRjaCBhYnNvbHV0ZSBwYXRocywgZXRjLlxuICogLSBFbXB0eSBnbG9icyB3aWxsIG1hdGNoIG5vdGhpbmcuXG4gKiAtIEFueSBzcGVjaWFsIGdsb2Igc3ludGF4IG11c3QgYmUgY29udGFpbmVkIHRvIG9uZSBwYXRoIHNlZ21lbnQuIEZvciBleGFtcGxlLFxuICogICBgPyhmb298YmFyL2JheilgIGlzIGludmFsaWQuIFRoZSBzZXBhcmF0b3Igd2lsbCB0YWtlIHByZWNlZGVuY2UgYW5kIHRoZVxuICogICBmaXJzdCBzZWdtZW50IGVuZHMgd2l0aCBhbiB1bmNsb3NlZCBncm91cC5cbiAqIC0gSWYgYSBwYXRoIHNlZ21lbnQgZW5kcyB3aXRoIHVuY2xvc2VkIGdyb3VwcyBvciBhIGRhbmdsaW5nIGVzY2FwZSBwcmVmaXgsIGFcbiAqICAgcGFyc2UgZXJyb3IgaGFzIG9jY3VycmVkLiBFdmVyeSBjaGFyYWN0ZXIgZm9yIHRoYXQgc2VnbWVudCBpcyB0YWtlblxuICogICBsaXRlcmFsbHkgaW4gdGhpcyBldmVudC5cbiAqXG4gKiBMaW1pdGF0aW9uczpcbiAqIC0gQSBuZWdhdGl2ZSBncm91cCBsaWtlIGAhKGZvb3xiYXIpYCB3aWxsIHdyb25nbHkgYmUgY29udmVydGVkIHRvIGEgbmVnYXRpdmVcbiAqICAgbG9vay1haGVhZCBmb2xsb3dlZCBieSBhIHdpbGRjYXJkLiBUaGlzIG1lYW5zIHRoYXQgYCEoZm9vKS5qc2Agd2lsbCB3cm9uZ2x5XG4gKiAgIGZhaWwgdG8gbWF0Y2ggYGZvb2Jhci5qc2AsIGV2ZW4gdGhvdWdoIGBmb29iYXJgIGlzIG5vdCBgZm9vYC4gRWZmZWN0aXZlbHksXG4gKiAgIGAhKGZvb3xiYXIpYCBpcyB0cmVhdGVkIGxpa2UgYCEoQChmb298YmFyKSopYC4gVGhpcyB3aWxsIHdvcmsgY29ycmVjdGx5IGlmXG4gKiAgIHRoZSBncm91cCBvY2N1cnMgbm90IG5lc3RlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZ2xvYlRvUmVnRXhwIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2dsb2ItdG8tcmVnZXhwXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZ2xvYlRvUmVnRXhwKFwiKi5qc1wiKSwgL15bXlxcXFwvXSpcXC5qcyg/OlxcXFx8XFwvKSokLyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYiBHbG9iIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHBhcmFtIG9wdGlvbnMgQ29udmVyc2lvbiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlcXVpdmFsZW50IHRvIHRoZSBnbG9iLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2xvYlRvUmVnRXhwKFxuICBnbG9iOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdsb2JPcHRpb25zID0ge30sXG4pOiBSZWdFeHAge1xuICByZXR1cm4gX2dsb2JUb1JlZ0V4cChjb25zdGFudHMsIGdsb2IsIG9wdGlvbnMpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FDRSxhQUFhLFFBR1IsZ0NBQWdDO0FBRXZDLE1BQU0sWUFBMkI7RUFDL0IsS0FBSztFQUNMLFVBQVU7RUFDVixNQUFNO0lBQUM7SUFBTTtHQUFJO0VBQ2pCLFVBQVU7RUFDVixVQUFVO0VBQ1YsY0FBYztBQUNoQjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUVDLEdBQ0QsT0FBTyxTQUFTLGFBQ2QsSUFBWSxFQUNaLFVBQXVCLENBQUMsQ0FBQztFQUV6QixPQUFPLGNBQWMsV0FBVyxNQUFNO0FBQ3hDIn0=
+// denoCacheMetadata=5914738211100328384,2118686392906479722 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/bc4fb8b9edfcac38bb3444c2744233b88b823fef1cd9e6691d1e40e7cc02beec.js b/vendor/gen/https/jsr.io/bc4fb8b9edfcac38bb3444c2744233b88b823fef1cd9e6691d1e40e7cc02beec.js
new file mode 100644
index 0000000..f02aade
--- /dev/null
+++ b/vendor/gen/https/jsr.io/bc4fb8b9edfcac38bb3444c2744233b88b823fef1cd9e6691d1e40e7cc02beec.js
@@ -0,0 +1,331 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Converts a JSON with Comments (JSONC) string into an object.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/jsonc";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(parse('{"foo": "bar"}'), { foo: "bar" });
+ * assertEquals(parse('{"foo": "bar", }'), { foo: "bar" });
+ * assertEquals(parse('{"foo": "bar", } /* comment *\/'), { foo: "bar" });
+ * ```
+ *
+ * @throws {SyntaxError} If the JSONC string is invalid.
+ * @param text A valid JSONC string.
+ * @returns The parsed JsonValue from the JSONC string.
+ */ export function parse(text) {
+ if (new.target) {
+ throw new TypeError("Cannot create an instance: parse is not a constructor");
+ }
+ return new JsoncParser(text).parse();
+}
+// First tokenize and then parse the token.
+class JsoncParser {
+ #whitespace = new Set(" \t\r\n");
+ #numberEndToken = new Set([
+ ..."[]{}:,/",
+ ...this.#whitespace
+ ]);
+ #text;
+ #length;
+ #tokenized;
+ constructor(text){
+ this.#text = `${text}`;
+ this.#length = this.#text.length;
+ this.#tokenized = this.#tokenize();
+ }
+ parse() {
+ const token = this.#getNext();
+ const res = this.#parseJsonValue(token);
+ // make sure all characters have been read
+ const { done, value } = this.#tokenized.next();
+ if (!done) {
+ throw new SyntaxError(buildErrorMessage(value));
+ }
+ return res;
+ }
+ /** Read the next token. If the token is read to the end, it throws a SyntaxError. */ #getNext() {
+ const { done, value } = this.#tokenized.next();
+ if (done) {
+ throw new SyntaxError("Cannot parse JSONC: unexpected end of JSONC input");
+ }
+ return value;
+ }
+ /** Split the JSONC string into token units. Whitespace and comments are skipped. */ *#tokenize() {
+ for(let i = 0; i < this.#length; i++){
+ // skip whitespace
+ if (this.#whitespace.has(this.#text[i])) {
+ continue;
+ }
+ // skip multi line comment (`/*...*/`)
+ if (this.#text[i] === "/" && this.#text[i + 1] === "*") {
+ i += 2;
+ let hasEndOfComment = false;
+ for(; i < this.#length; i++){
+ if (this.#text[i] === "*" && this.#text[i + 1] === "/") {
+ hasEndOfComment = true;
+ break;
+ }
+ }
+ if (!hasEndOfComment) {
+ throw new SyntaxError("Cannot parse JSONC: unexpected end of JSONC input");
+ }
+ i++;
+ continue;
+ }
+ // skip single line comment (`//...`)
+ if (this.#text[i] === "/" && this.#text[i + 1] === "/") {
+ i += 2;
+ for(; i < this.#length; i++){
+ if (this.#text[i] === "\n" || this.#text[i] === "\r") {
+ break;
+ }
+ }
+ continue;
+ }
+ switch(this.#text[i]){
+ case "{":
+ yield {
+ type: "BeginObject",
+ position: i
+ };
+ break;
+ case "}":
+ yield {
+ type: "EndObject",
+ position: i
+ };
+ break;
+ case "[":
+ yield {
+ type: "BeginArray",
+ position: i
+ };
+ break;
+ case "]":
+ yield {
+ type: "EndArray",
+ position: i
+ };
+ break;
+ case ":":
+ yield {
+ type: "NameSeparator",
+ position: i
+ };
+ break;
+ case ",":
+ yield {
+ type: "ValueSeparator",
+ position: i
+ };
+ break;
+ case '"':
+ {
+ const startIndex = i;
+ // Need to handle consecutive backslashes correctly
+ // '"\\""' => '"'
+ // '"\\\\"' => '\\'
+ // '"\\\\\\""' => '\\"'
+ // '"\\\\\\\\"' => '\\\\'
+ let shouldEscapeNext = false;
+ i++;
+ for(; i < this.#length; i++){
+ if (this.#text[i] === '"' && !shouldEscapeNext) {
+ break;
+ }
+ shouldEscapeNext = this.#text[i] === "\\" && !shouldEscapeNext;
+ }
+ yield {
+ type: "String",
+ sourceText: this.#text.substring(startIndex, i + 1),
+ position: startIndex
+ };
+ break;
+ }
+ default:
+ {
+ const startIndex = i;
+ for(; i < this.#length; i++){
+ if (this.#numberEndToken.has(this.#text[i])) {
+ break;
+ }
+ }
+ i--;
+ yield {
+ type: "NullOrTrueOrFalseOrNumber",
+ sourceText: this.#text.substring(startIndex, i + 1),
+ position: startIndex
+ };
+ }
+ }
+ }
+ }
+ #parseJsonValue(value) {
+ switch(value.type){
+ case "BeginObject":
+ return this.#parseObject();
+ case "BeginArray":
+ return this.#parseArray();
+ case "NullOrTrueOrFalseOrNumber":
+ return this.#parseNullOrTrueOrFalseOrNumber(value);
+ case "String":
+ return this.#parseString(value);
+ default:
+ throw new SyntaxError(buildErrorMessage(value));
+ }
+ }
+ #parseObject() {
+ const target = {};
+ // ┌─token1
+ // { }
+ // ┌─────────────token1
+ // │ ┌─────────token2
+ // │ │ ┌─────token3
+ // │ │ │ ┌─token4
+ // { "key" : value }
+ // ┌───────────────token1
+ // │ ┌───────────token2
+ // │ │ ┌───────token3
+ // │ │ │ ┌───token4
+ // │ │ │ │ ┌─token1
+ // { "key" : value , }
+ // ┌─────────────────────────────token1
+ // │ ┌─────────────────────────token2
+ // │ │ ┌─────────────────────token3
+ // │ │ │ ┌─────────────────token4
+ // │ │ │ │ ┌─────────────token1
+ // │ │ │ │ │ ┌─────────token2
+ // │ │ │ │ │ │ ┌─────token3
+ // │ │ │ │ │ │ │ ┌─token4
+ // { "key" : value , "key" : value }
+ while(true){
+ const token1 = this.#getNext();
+ if (token1.type === "EndObject") {
+ return target;
+ }
+ if (token1.type !== "String") {
+ throw new SyntaxError(buildErrorMessage(token1));
+ }
+ const key = this.#parseString(token1);
+ const token2 = this.#getNext();
+ if (token2.type !== "NameSeparator") {
+ throw new SyntaxError(buildErrorMessage(token2));
+ }
+ const token3 = this.#getNext();
+ Object.defineProperty(target, key, {
+ value: this.#parseJsonValue(token3),
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ const token4 = this.#getNext();
+ if (token4.type === "EndObject") {
+ return target;
+ }
+ if (token4.type !== "ValueSeparator") {
+ throw new SyntaxError(buildErrorMessage(token4));
+ }
+ }
+ }
+ #parseArray() {
+ const target = [];
+ // ┌─token1
+ // [ ]
+ // ┌─────────────token1
+ // │ ┌─────────token2
+ // [ value ]
+ // ┌───────token1
+ // │ ┌───token2
+ // │ │ ┌─token1
+ // [ value , ]
+ // ┌─────────────token1
+ // │ ┌─────────token2
+ // │ │ ┌─────token1
+ // │ │ │ ┌─token2
+ // [ value , value ]
+ while(true){
+ const token1 = this.#getNext();
+ if (token1.type === "EndArray") {
+ return target;
+ }
+ target.push(this.#parseJsonValue(token1));
+ const token2 = this.#getNext();
+ if (token2.type === "EndArray") {
+ return target;
+ }
+ if (token2.type !== "ValueSeparator") {
+ throw new SyntaxError(buildErrorMessage(token2));
+ }
+ }
+ }
+ #parseString(value) {
+ let parsed;
+ try {
+ // Use JSON.parse to handle `\u0000` etc. correctly.
+ parsed = JSON.parse(value.sourceText);
+ } catch {
+ throw new SyntaxError(buildErrorMessage(value));
+ }
+ if (typeof parsed !== "string") {
+ throw new TypeError(`Parsed value is not a string: ${parsed}`);
+ }
+ return parsed;
+ }
+ #parseNullOrTrueOrFalseOrNumber(value) {
+ if (value.sourceText === "null") {
+ return null;
+ }
+ if (value.sourceText === "true") {
+ return true;
+ }
+ if (value.sourceText === "false") {
+ return false;
+ }
+ let parsed;
+ try {
+ // Use JSON.parse to handle `+100`, `Infinity` etc. correctly.
+ parsed = JSON.parse(value.sourceText);
+ } catch {
+ throw new SyntaxError(buildErrorMessage(value));
+ }
+ if (typeof parsed !== "number") {
+ throw new TypeError(`Parsed value is not a number: ${parsed}`);
+ }
+ return parsed;
+ }
+}
+function buildErrorMessage({ type, sourceText, position }) {
+ let token = "";
+ switch(type){
+ case "BeginObject":
+ token = "{";
+ break;
+ case "EndObject":
+ token = "}";
+ break;
+ case "BeginArray":
+ token = "[";
+ break;
+ case "EndArray":
+ token = "]";
+ break;
+ case "NameSeparator":
+ token = ":";
+ break;
+ case "ValueSeparator":
+ token = ",";
+ break;
+ case "NullOrTrueOrFalseOrNumber":
+ case "String":
+ // Truncate the string so that it is within 30 lengths.
+ token = 30 < sourceText.length ? `${sourceText.slice(0, 30)}...` : sourceText;
+ break;
+ }
+ return `Cannot parse JSONC: unexpected token "${token}" in JSONC at position ${position}`;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvanNvbmMvMS4wLjIvcGFyc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBKc29uVmFsdWUgfSBmcm9tIFwianNyOkBzdGQvanNvbkBeMS4wLjIvdHlwZXNcIjtcbmV4cG9ydCB0eXBlIHsgSnNvblZhbHVlIH07XG5cbi8qKlxuICogQ29udmVydHMgYSBKU09OIHdpdGggQ29tbWVudHMgKEpTT05DKSBzdHJpbmcgaW50byBhbiBvYmplY3QuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAc3RkL2pzb25jXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMocGFyc2UoJ3tcImZvb1wiOiBcImJhclwifScpLCB7IGZvbzogXCJiYXJcIiB9KTtcbiAqIGFzc2VydEVxdWFscyhwYXJzZSgne1wiZm9vXCI6IFwiYmFyXCIsIH0nKSwgeyBmb286IFwiYmFyXCIgfSk7XG4gKiBhc3NlcnRFcXVhbHMocGFyc2UoJ3tcImZvb1wiOiBcImJhclwiLCB9IC8qIGNvbW1lbnQgKlxcLycpLCB7IGZvbzogXCJiYXJcIiB9KTtcbiAqIGBgYFxuICpcbiAqIEB0aHJvd3Mge1N5bnRheEVycm9yfSBJZiB0aGUgSlNPTkMgc3RyaW5nIGlzIGludmFsaWQuXG4gKiBAcGFyYW0gdGV4dCBBIHZhbGlkIEpTT05DIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgSnNvblZhbHVlIGZyb20gdGhlIEpTT05DIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQ6IHN0cmluZyk6IEpzb25WYWx1ZSB7XG4gIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiQ2Fubm90IGNyZWF0ZSBhbiBpbnN0YW5jZTogcGFyc2UgaXMgbm90IGEgY29uc3RydWN0b3JcIixcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXcgSnNvbmNQYXJzZXIodGV4dCkucGFyc2UoKTtcbn1cblxudHlwZSBUb2tlblR5cGUgPVxuICB8IFwiQmVnaW5PYmplY3RcIlxuICB8IFwiRW5kT2JqZWN0XCJcbiAgfCBcIkJlZ2luQXJyYXlcIlxuICB8IFwiRW5kQXJyYXlcIlxuICB8IFwiTmFtZVNlcGFyYXRvclwiXG4gIHwgXCJWYWx1ZVNlcGFyYXRvclwiXG4gIHwgXCJOdWxsT3JUcnVlT3JGYWxzZU9yTnVtYmVyXCJcbiAgfCBcIlN0cmluZ1wiO1xuXG50eXBlIFRva2VuID0ge1xuICB0eXBlOiBFeGNsdWRlPFxuICAgIFRva2VuVHlwZSxcbiAgICBcIlN0cmluZ1wiIHwgXCJOdWxsT3JUcnVlT3JGYWxzZU9yTnVtYmVyXCJcbiAgPjtcbiAgc291cmNlVGV4dD86IHVuZGVmaW5lZDtcbiAgcG9zaXRpb246IG51bWJlcjtcbn0gfCB7XG4gIHR5cGU6IFwiU3RyaW5nXCI7XG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbiAgcG9zaXRpb246IG51bWJlcjtcbn0gfCB7XG4gIHR5cGU6IFwiTnVsbE9yVHJ1ZU9yRmFsc2VPck51bWJlclwiO1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG59O1xuXG4vLyBGaXJzdCB0b2tlbml6ZSBhbmQgdGhlbiBwYXJzZSB0aGUgdG9rZW4uXG5jbGFzcyBKc29uY1BhcnNlciB7XG4gIHJlYWRvbmx5ICN3aGl0ZXNwYWNlID0gbmV3IFNldChcIiBcXHRcXHJcXG5cIik7XG4gIHJlYWRvbmx5ICNudW1iZXJFbmRUb2tlbiA9IG5ldyBTZXQoWy4uLlwiW117fTosL1wiLCAuLi50aGlzLiN3aGl0ZXNwYWNlXSk7XG4gICN0ZXh0OiBzdHJpbmc7XG4gICNsZW5ndGg6IG51bWJlcjtcbiAgI3Rva2VuaXplZDogR2VuZXJhdG9yPFRva2VuLCB2b2lkPjtcbiAgY29uc3RydWN0b3IodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy4jdGV4dCA9IGAke3RleHR9YDtcbiAgICB0aGlzLiNsZW5ndGggPSB0aGlzLiN0ZXh0Lmxlbmd0aDtcbiAgICB0aGlzLiN0b2tlbml6ZWQgPSB0aGlzLiN0b2tlbml6ZSgpO1xuICB9XG4gIHBhcnNlKCk6IEpzb25WYWx1ZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLiNnZXROZXh0KCk7XG4gICAgY29uc3QgcmVzID0gdGhpcy4jcGFyc2VKc29uVmFsdWUodG9rZW4pO1xuXG4gICAgLy8gbWFrZSBzdXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiByZWFkXG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gdGhpcy4jdG9rZW5pemVkLm5leHQoKTtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihidWlsZEVycm9yTWVzc2FnZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqIFJlYWQgdGhlIG5leHQgdG9rZW4uIElmIHRoZSB0b2tlbiBpcyByZWFkIHRvIHRoZSBlbmQsIGl0IHRocm93cyBhIFN5bnRheEVycm9yLiAqL1xuICAjZ2V0TmV4dCgpOiBUb2tlbiB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gdGhpcy4jdG9rZW5pemVkLm5leHQoKTtcbiAgICBpZiAoZG9uZSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBwYXJzZSBKU09OQzogdW5leHBlY3RlZCBlbmQgb2YgSlNPTkMgaW5wdXRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvKiogU3BsaXQgdGhlIEpTT05DIHN0cmluZyBpbnRvIHRva2VuIHVuaXRzLiBXaGl0ZXNwYWNlIGFuZCBjb21tZW50cyBhcmUgc2tpcHBlZC4gKi9cbiAgKiN0b2tlbml6ZSgpOiBHZW5lcmF0b3I8VG9rZW4sIHZvaWQ+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI2xlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBza2lwIHdoaXRlc3BhY2VcbiAgICAgIGlmICh0aGlzLiN3aGl0ZXNwYWNlLmhhcyh0aGlzLiN0ZXh0W2ldISkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHNraXAgbXVsdGkgbGluZSBjb21tZW50IChgLyouLi4qL2ApXG4gICAgICBpZiAodGhpcy4jdGV4dFtpXSA9PT0gXCIvXCIgJiYgdGhpcy4jdGV4dFtpICsgMV0gPT09IFwiKlwiKSB7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgbGV0IGhhc0VuZE9mQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICBmb3IgKDsgaSA8IHRoaXMuI2xlbmd0aDsgaSsrKSB7IC8vIHJlYWQgdW50aWwgZmluZCBgKi9gXG4gICAgICAgICAgaWYgKHRoaXMuI3RleHRbaV0gPT09IFwiKlwiICYmIHRoaXMuI3RleHRbaSArIDFdID09PSBcIi9cIikge1xuICAgICAgICAgICAgaGFzRW5kT2ZDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0VuZE9mQ29tbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IHBhcnNlIEpTT05DOiB1bmV4cGVjdGVkIGVuZCBvZiBKU09OQyBpbnB1dFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gc2tpcCBzaW5nbGUgbGluZSBjb21tZW50IChgLy8uLi5gKVxuICAgICAgaWYgKHRoaXMuI3RleHRbaV0gPT09IFwiL1wiICYmIHRoaXMuI3RleHRbaSArIDFdID09PSBcIi9cIikge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGZvciAoOyBpIDwgdGhpcy4jbGVuZ3RoOyBpKyspIHsgLy8gcmVhZCB1bnRpbCBmaW5kIGBcXG5gIG9yIGBcXHJgXG4gICAgICAgICAgaWYgKHRoaXMuI3RleHRbaV0gPT09IFwiXFxuXCIgfHwgdGhpcy4jdGV4dFtpXSA9PT0gXCJcXHJcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHRoaXMuI3RleHRbaV0pIHtcbiAgICAgICAgY2FzZSBcIntcIjpcbiAgICAgICAgICB5aWVsZCB7IHR5cGU6IFwiQmVnaW5PYmplY3RcIiwgcG9zaXRpb246IGkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIn1cIjpcbiAgICAgICAgICB5aWVsZCB7IHR5cGU6IFwiRW5kT2JqZWN0XCIsIHBvc2l0aW9uOiBpIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgeWllbGQgeyB0eXBlOiBcIkJlZ2luQXJyYXlcIiwgcG9zaXRpb246IGkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIl1cIjpcbiAgICAgICAgICB5aWVsZCB7IHR5cGU6IFwiRW5kQXJyYXlcIiwgcG9zaXRpb246IGkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIjpcIjpcbiAgICAgICAgICB5aWVsZCB7IHR5cGU6IFwiTmFtZVNlcGFyYXRvclwiLCBwb3NpdGlvbjogaSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiLFwiOlxuICAgICAgICAgIHlpZWxkIHsgdHlwZTogXCJWYWx1ZVNlcGFyYXRvclwiLCBwb3NpdGlvbjogaSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdcIic6IHsgLy8gcGFyc2Ugc3RyaW5nIHRva2VuXG4gICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgLy8gTmVlZCB0byBoYW5kbGUgY29uc2VjdXRpdmUgYmFja3NsYXNoZXMgY29ycmVjdGx5XG4gICAgICAgICAgLy8gJ1wiXFxcXFwiXCInID0+ICdcIidcbiAgICAgICAgICAvLyAnXCJcXFxcXFxcXFwiJyA9PiAnXFxcXCdcbiAgICAgICAgICAvLyAnXCJcXFxcXFxcXFxcXFxcIlwiJyA9PiAnXFxcXFwiJ1xuICAgICAgICAgIC8vICdcIlxcXFxcXFxcXFxcXFxcXFxcIicgPT4gJ1xcXFxcXFxcJ1xuICAgICAgICAgIGxldCBzaG91bGRFc2NhcGVOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGZvciAoOyBpIDwgdGhpcy4jbGVuZ3RoOyBpKyspIHsgLy8gcmVhZCB1bnRpbCBmaW5kIGBcImBcbiAgICAgICAgICAgIGlmICh0aGlzLiN0ZXh0W2ldID09PSAnXCInICYmICFzaG91bGRFc2NhcGVOZXh0KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hvdWxkRXNjYXBlTmV4dCA9IHRoaXMuI3RleHRbaV0gPT09IFwiXFxcXFwiICYmICFzaG91bGRFc2NhcGVOZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgc291cmNlVGV4dDogdGhpcy4jdGV4dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaSArIDEpLFxuICAgICAgICAgICAgcG9zaXRpb246IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7IC8vIHBhcnNlIG51bGwsIHRydWUsIGZhbHNlIG9yIG51bWJlciB0b2tlblxuICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpO1xuICAgICAgICAgIGZvciAoOyBpIDwgdGhpcy4jbGVuZ3RoOyBpKyspIHsgLy8gcmVhZCB1bnRpbCBmaW5kIG51bWJlckVuZFRva2VuXG4gICAgICAgICAgICBpZiAodGhpcy4jbnVtYmVyRW5kVG9rZW4uaGFzKHRoaXMuI3RleHRbaV0hKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaS0tO1xuICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgIHR5cGU6IFwiTnVsbE9yVHJ1ZU9yRmFsc2VPck51bWJlclwiLFxuICAgICAgICAgICAgc291cmNlVGV4dDogdGhpcy4jdGV4dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaSArIDEpLFxuICAgICAgICAgICAgcG9zaXRpb246IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNwYXJzZUpzb25WYWx1ZSh2YWx1ZTogVG9rZW4pOiBKc29uVmFsdWUge1xuICAgIHN3aXRjaCAodmFsdWUudHlwZSkge1xuICAgICAgY2FzZSBcIkJlZ2luT2JqZWN0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJzZU9iamVjdCgpO1xuICAgICAgY2FzZSBcIkJlZ2luQXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhcnNlQXJyYXkoKTtcbiAgICAgIGNhc2UgXCJOdWxsT3JUcnVlT3JGYWxzZU9yTnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJzZU51bGxPclRydWVPckZhbHNlT3JOdW1iZXIodmFsdWUpO1xuICAgICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdGhpcy4jcGFyc2VTdHJpbmcodmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGJ1aWxkRXJyb3JNZXNzYWdlKHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgI3BhcnNlT2JqZWN0KCk6IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIHwgdW5kZWZpbmVkIH0ge1xuICAgIGNvbnN0IHRhcmdldDogeyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfSA9IHt9O1xuICAgIC8vICAg4pSM4pSAdG9rZW4xXG4gICAgLy8geyB9XG4gICAgLy8gICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIB0b2tlbjFcbiAgICAvLyAgICAgIOKUgiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgHRva2VuMlxuICAgIC8vICAgICAg4pSCICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSAdG9rZW4zXG4gICAgLy8gICAgICDilIIgICDilIIgICDilIIgICDilIzilIB0b2tlbjRcbiAgICAvLyAgeyBcImtleVwiIDogdmFsdWUgfVxuICAgIC8vICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAdG9rZW4xXG4gICAgLy8gICAgICDilIIgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIB0b2tlbjJcbiAgICAvLyAgICAgIOKUgiAgIOKUgiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgHRva2VuM1xuICAgIC8vICAgICAg4pSCICAg4pSCICAg4pSCICAg4pSM4pSA4pSA4pSAdG9rZW40XG4gICAgLy8gICAgICDilIIgICDilIIgICDilIIgICDilIIg4pSM4pSAdG9rZW4xXG4gICAgLy8gIHsgXCJrZXlcIiA6IHZhbHVlICwgfVxuICAgIC8vICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAdG9rZW4xXG4gICAgLy8gICAgICDilIIgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIB0b2tlbjJcbiAgICAvLyAgICAgIOKUgiAgIOKUgiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgHRva2VuM1xuICAgIC8vICAgICAg4pSCICAg4pSCICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAdG9rZW40XG4gICAgLy8gICAgICDilIIgICDilIIgICDilIIgICDilIIgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIB0b2tlbjFcbiAgICAvLyAgICAgIOKUgiAgIOKUgiAgIOKUgiAgIOKUgiAgIOKUgiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgHRva2VuMlxuICAgIC8vICAgICAg4pSCICAg4pSCICAg4pSCICAg4pSCICAg4pSCICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSAdG9rZW4zXG4gICAgLy8gICAgICDilIIgICDilIIgICDilIIgICDilIIgICDilIIgICDilIIgICDilIIgICDilIzilIB0b2tlbjRcbiAgICAvLyAgeyBcImtleVwiIDogdmFsdWUgLCBcImtleVwiIDogdmFsdWUgfVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB0b2tlbjEgPSB0aGlzLiNnZXROZXh0KCk7XG4gICAgICBpZiAodG9rZW4xLnR5cGUgPT09IFwiRW5kT2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICAgIGlmICh0b2tlbjEudHlwZSAhPT0gXCJTdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYnVpbGRFcnJvck1lc3NhZ2UodG9rZW4xKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLiNwYXJzZVN0cmluZyh0b2tlbjEpO1xuXG4gICAgICBjb25zdCB0b2tlbjIgPSB0aGlzLiNnZXROZXh0KCk7XG4gICAgICBpZiAodG9rZW4yLnR5cGUgIT09IFwiTmFtZVNlcGFyYXRvclwiKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihidWlsZEVycm9yTWVzc2FnZSh0b2tlbjIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW4zID0gdGhpcy4jZ2V0TmV4dCgpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICAgIHZhbHVlOiB0aGlzLiNwYXJzZUpzb25WYWx1ZSh0b2tlbjMpLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRva2VuNCA9IHRoaXMuI2dldE5leHQoKTtcbiAgICAgIGlmICh0b2tlbjQudHlwZSA9PT0gXCJFbmRPYmplY3RcIikge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgICAgaWYgKHRva2VuNC50eXBlICE9PSBcIlZhbHVlU2VwYXJhdG9yXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGJ1aWxkRXJyb3JNZXNzYWdlKHRva2VuNCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNwYXJzZUFycmF5KCk6IEpzb25WYWx1ZVtdIHtcbiAgICBjb25zdCB0YXJnZXQ6IEpzb25WYWx1ZVtdID0gW107XG4gICAgLy8gICDilIzilIB0b2tlbjFcbiAgICAvLyBbIF1cbiAgICAvLyAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgHRva2VuMVxuICAgIC8vICAgICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAdG9rZW4yXG4gICAgLy8gIFsgdmFsdWUgXVxuICAgIC8vICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSAdG9rZW4xXG4gICAgLy8gICAgICDilIIgICDilIzilIDilIDilIB0b2tlbjJcbiAgICAvLyAgICAgIOKUgiAgIOKUgiDilIzilIB0b2tlbjFcbiAgICAvLyAgWyB2YWx1ZSAsIF1cbiAgICAvLyAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgHRva2VuMVxuICAgIC8vICAgICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAdG9rZW4yXG4gICAgLy8gICAgICDilIIgICDilIIgICDilIzilIDilIDilIDilIDilIB0b2tlbjFcbiAgICAvLyAgICAgIOKUgiAgIOKUgiAgIOKUgiAgIOKUjOKUgHRva2VuMlxuICAgIC8vICBbIHZhbHVlICwgdmFsdWUgXVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB0b2tlbjEgPSB0aGlzLiNnZXROZXh0KCk7XG4gICAgICBpZiAodG9rZW4xLnR5cGUgPT09IFwiRW5kQXJyYXlcIikge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgICAgdGFyZ2V0LnB1c2godGhpcy4jcGFyc2VKc29uVmFsdWUodG9rZW4xKSk7XG5cbiAgICAgIGNvbnN0IHRva2VuMiA9IHRoaXMuI2dldE5leHQoKTtcbiAgICAgIGlmICh0b2tlbjIudHlwZSA9PT0gXCJFbmRBcnJheVwiKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgICBpZiAodG9rZW4yLnR5cGUgIT09IFwiVmFsdWVTZXBhcmF0b3JcIikge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYnVpbGRFcnJvck1lc3NhZ2UodG9rZW4yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3BhcnNlU3RyaW5nKHZhbHVlOiB7XG4gICAgdHlwZTogXCJTdHJpbmdcIjtcbiAgICBzb3VyY2VUZXh0OiBzdHJpbmc7XG4gICAgcG9zaXRpb246IG51bWJlcjtcbiAgfSk6IHN0cmluZyB7XG4gICAgbGV0IHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIEpTT04ucGFyc2UgdG8gaGFuZGxlIGBcXHUwMDAwYCBldGMuIGNvcnJlY3RseS5cbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodmFsdWUuc291cmNlVGV4dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYnVpbGRFcnJvck1lc3NhZ2UodmFsdWUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFBhcnNlZCB2YWx1ZSBpcyBub3QgYSBzdHJpbmc6ICR7cGFyc2VkfWApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgI3BhcnNlTnVsbE9yVHJ1ZU9yRmFsc2VPck51bWJlcih2YWx1ZToge1xuICAgIHR5cGU6IFwiTnVsbE9yVHJ1ZU9yRmFsc2VPck51bWJlclwiO1xuICAgIHNvdXJjZVRleHQ6IHN0cmluZztcbiAgICBwb3NpdGlvbjogbnVtYmVyO1xuICB9KTogbnVsbCB8IGJvb2xlYW4gfCBudW1iZXIge1xuICAgIGlmICh2YWx1ZS5zb3VyY2VUZXh0ID09PSBcIm51bGxcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zb3VyY2VUZXh0ID09PSBcInRydWVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zb3VyY2VUZXh0ID09PSBcImZhbHNlXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIEpTT04ucGFyc2UgdG8gaGFuZGxlIGArMTAwYCwgYEluZmluaXR5YCBldGMuIGNvcnJlY3RseS5cbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodmFsdWUuc291cmNlVGV4dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYnVpbGRFcnJvck1lc3NhZ2UodmFsdWUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFBhcnNlZCB2YWx1ZSBpcyBub3QgYSBudW1iZXI6ICR7cGFyc2VkfWApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXJyb3JNZXNzYWdlKHsgdHlwZSwgc291cmNlVGV4dCwgcG9zaXRpb24gfTogVG9rZW4pOiBzdHJpbmcge1xuICBsZXQgdG9rZW4gPSBcIlwiO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiQmVnaW5PYmplY3RcIjpcbiAgICAgIHRva2VuID0gXCJ7XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiRW5kT2JqZWN0XCI6XG4gICAgICB0b2tlbiA9IFwifVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIkJlZ2luQXJyYXlcIjpcbiAgICAgIHRva2VuID0gXCJbXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiRW5kQXJyYXlcIjpcbiAgICAgIHRva2VuID0gXCJdXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiTmFtZVNlcGFyYXRvclwiOlxuICAgICAgdG9rZW4gPSBcIjpcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJWYWx1ZVNlcGFyYXRvclwiOlxuICAgICAgdG9rZW4gPSBcIixcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJOdWxsT3JUcnVlT3JGYWxzZU9yTnVtYmVyXCI6XG4gICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgICAgLy8gVHJ1bmNhdGUgdGhlIHN0cmluZyBzbyB0aGF0IGl0IGlzIHdpdGhpbiAzMCBsZW5ndGhzLlxuICAgICAgdG9rZW4gPSAzMCA8IHNvdXJjZVRleHQubGVuZ3RoXG4gICAgICAgID8gYCR7c291cmNlVGV4dC5zbGljZSgwLCAzMCl9Li4uYFxuICAgICAgICA6IHNvdXJjZVRleHQ7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gYENhbm5vdCBwYXJzZSBKU09OQzogdW5leHBlY3RlZCB0b2tlbiBcIiR7dG9rZW59XCIgaW4gSlNPTkMgYXQgcG9zaXRpb24gJHtwb3NpdGlvbn1gO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFLckM7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLFNBQVMsTUFBTSxJQUFZO0VBQ2hDLElBQUksWUFBWTtJQUNkLE1BQU0sSUFBSSxVQUNSO0VBRUo7RUFDQSxPQUFPLElBQUksWUFBWSxNQUFNLEtBQUs7QUFDcEM7QUE2QkEsMkNBQTJDO0FBQzNDLE1BQU07RUFDSyxDQUFBLFVBQVcsR0FBRyxJQUFJLElBQUksV0FBVztFQUNqQyxDQUFBLGNBQWUsR0FBRyxJQUFJLElBQUk7T0FBSTtPQUFjLElBQUksQ0FBQyxDQUFBLFVBQVc7R0FBQyxFQUFFO0VBQ3hFLENBQUEsSUFBSyxDQUFTO0VBQ2QsQ0FBQSxNQUFPLENBQVM7RUFDaEIsQ0FBQSxTQUFVLENBQXlCO0VBQ25DLFlBQVksSUFBWSxDQUFFO0lBQ3hCLElBQUksQ0FBQyxDQUFBLElBQUssR0FBRyxHQUFHLE1BQU07SUFDdEIsSUFBSSxDQUFDLENBQUEsTUFBTyxHQUFHLElBQUksQ0FBQyxDQUFBLElBQUssQ0FBQyxNQUFNO0lBQ2hDLElBQUksQ0FBQyxDQUFBLFNBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQSxRQUFTO0VBQ2xDO0VBQ0EsUUFBbUI7SUFDakIsTUFBTSxRQUFRLElBQUksQ0FBQyxDQUFBLE9BQVE7SUFDM0IsTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFBLGNBQWUsQ0FBQztJQUVqQywwQ0FBMEM7SUFDMUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQSxTQUFVLENBQUMsSUFBSTtJQUM1QyxJQUFJLENBQUMsTUFBTTtNQUNULE1BQU0sSUFBSSxZQUFZLGtCQUFrQjtJQUMxQztJQUVBLE9BQU87RUFDVDtFQUNBLG1G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
+// denoCacheMetadata=2275276431085541839,6896860856939913524 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/c4dab3e93e863ba69bb87220ccdf01bedbe71f1db791125469f780ab2a8b939e.js b/vendor/gen/https/jsr.io/c4dab3e93e863ba69bb87220ccdf01bedbe71f1db791125469f780ab2a8b939e.js
new file mode 100644
index 0000000..0e29c2a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/c4dab3e93e863ba69bb87220ccdf01bedbe71f1db791125469f780ab2a8b939e.js
@@ -0,0 +1,85 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { _globToRegExp } from "../_common/glob_to_reg_exp.ts";
+const constants = {
+ sep: "/+",
+ sepMaybe: "/*",
+ seps: [
+ "/"
+ ],
+ globstar: "(?:[^/]*(?:/|$)+)*",
+ wildcard: "[^/]*",
+ escapePrefix: "\\"
+};
+/** Convert a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment.
+ *
+ * @example Usage
+ * ```ts
+ * import { globToRegExp } from "@std/path/posix/glob-to-regexp";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(globToRegExp("*.js"), /^[^/]*\.js\/*$/);
+ * ```
+ *
+ * @param glob Glob string to convert.
+ * @param options Conversion options.
+ * @returns The regular expression equivalent to the glob.
+ */ export function globToRegExp(glob, options = {}) {
+ return _globToRegExp(constants, glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9nbG9iX3RvX3JlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQge1xuICBfZ2xvYlRvUmVnRXhwLFxuICB0eXBlIEdsb2JDb25zdGFudHMsXG4gIHR5cGUgR2xvYk9wdGlvbnMsXG59IGZyb20gXCIuLi9fY29tbW9uL2dsb2JfdG9fcmVnX2V4cC50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbmNvbnN0IGNvbnN0YW50czogR2xvYkNvbnN0YW50cyA9IHtcbiAgc2VwOiBcIi8rXCIsXG4gIHNlcE1heWJlOiBcIi8qXCIsXG4gIHNlcHM6IFtcIi9cIl0sXG4gIGdsb2JzdGFyOiBcIig/OlteL10qKD86L3wkKSspKlwiLFxuICB3aWxkY2FyZDogXCJbXi9dKlwiLFxuICBlc2NhcGVQcmVmaXg6IFwiXFxcXFwiLFxufTtcblxuLyoqIENvbnZlcnQgYSBnbG9iIHN0cmluZyB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBUcmllcyB0byBtYXRjaCBiYXNoIGdsb2IgZXhwYW5zaW9uIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXG4gKlxuICogQmFzaWMgZ2xvYiBzeW50YXg6XG4gKiAtIGAqYCAtIE1hdGNoZXMgZXZlcnl0aGluZyB3aXRob3V0IGxlYXZpbmcgdGhlIHBhdGggc2VnbWVudC5cbiAqIC0gYD9gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIC0gYHtmb28sYmFyfWAgLSBNYXRjaGVzIGBmb29gIG9yIGBiYXJgLlxuICogLSBgW2FiY2RdYCAtIE1hdGNoZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbYS1kXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgWyFhYmNkXWAgLSBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIGJlc2lkZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbWzo8Y2xhc3M+Ol1dYCAtIE1hdGNoZXMgYW55IGNoYXJhY3RlciBiZWxvbmdpbmcgdG8gYDxjbGFzcz5gLlxuICogICAgIC0gYFtbOmFsbnVtOl1dYCAtIE1hdGNoZXMgYW55IGRpZ2l0IG9yIGxldHRlci5cbiAqICAgICAtIGBbWzpkaWdpdDpdYWJjXWAgLSBNYXRjaGVzIGFueSBkaWdpdCwgYGFgLCBgYmAgb3IgYGNgLlxuICogICAgIC0gU2VlIGh0dHBzOi8vZmFjZWxlc3N1c2VyLmdpdGh1Yi5pby93Y21hdGNoL2dsb2IvI3Bvc2l4LWNoYXJhY3Rlci1jbGFzc2VzXG4gKiAgICAgICBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBjaGFyYWN0ZXIgY2xhc3Nlcy5cbiAqIC0gYFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBhbiBgb3NgIG90aGVyIHRoYW4gYFwid2luZG93c1wiYC5cbiAqIC0gXFxgIC0gRXNjYXBlcyB0aGUgbmV4dCBjaGFyYWN0ZXIgZm9yIGBvc2Agc2V0IHRvIGBcIndpbmRvd3NcImAuXG4gKiAtIGAvYCAtIFBhdGggc2VwYXJhdG9yLlxuICogLSBgXFxgIC0gQWRkaXRpb25hbCBwYXRoIHNlcGFyYXRvciBvbmx5IGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICpcbiAqIEV4dGVuZGVkIHN5bnRheDpcbiAqIC0gUmVxdWlyZXMgYHsgZXh0ZW5kZWQ6IHRydWUgfWAuXG4gKiAtIGA/KGZvb3xiYXIpYCAtIE1hdGNoZXMgMCBvciAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgQChmb298YmFyKWAgLSBNYXRjaGVzIDEgaW5zdGFuY2Ugb2YgYHtmb28sYmFyfWAuIFRoZXkgYmVoYXZlIHRoZSBzYW1lLlxuICogLSBgKihmb298YmFyKWAgLSBNYXRjaGVzIF9uXyBpbnN0YW5jZXMgb2YgYHtmb28sYmFyfWAuXG4gKiAtIGArKGZvb3xiYXIpYCAtIE1hdGNoZXMgX24gPiAwXyBpbnN0YW5jZXMgb2YgYHtmb28sYmFyfWAuXG4gKiAtIGAhKGZvb3xiYXIpYCAtIE1hdGNoZXMgYW55dGhpbmcgb3RoZXIgdGhhbiBge2ZvbyxiYXJ9YC5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLlxuICpcbiAqIEdsb2JzdGFyIHN5bnRheDpcbiAqIC0gUmVxdWlyZXMgYHsgZ2xvYnN0YXI6IHRydWUgfWAuXG4gKiAtIGAqKmAgLSBNYXRjaGVzIGFueSBudW1iZXIgb2YgYW55IHBhdGggc2VnbWVudHMuXG4gKiAgICAgLSBNdXN0IGNvbXByaXNlIGl0cyBlbnRpcmUgcGF0aCBzZWdtZW50IGluIHRoZSBwcm92aWRlZCBnbG9iLlxuICogLSBTZWUgaHR0cHM6Ly93d3cubGludXhqb3VybmFsLmNvbS9jb250ZW50L2dsb2JzdGFyLW5ldy1iYXNoLWdsb2JiaW5nLW9wdGlvbi5cbiAqXG4gKiBOb3RlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIC0gVGhlIGdlbmVyYXRlZCBgUmVnRXhwYCBpcyBhbmNob3JlZCBhdCBib3RoIHN0YXJ0IGFuZCBlbmQuXG4gKiAtIFJlcGVhdGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgdG9sZXJhdGVkLiBUcmFpbGluZyBzZXBhcmF0b3JzIGluIHRoZVxuICogICBwcm92aWRlZCBnbG9iIGhhdmUgbm8gbWVhbmluZyBhbmQgYXJlIGRpc2NhcmRlZC5cbiAqIC0gQWJzb2x1dGUgZ2xvYnMgd2lsbCBvbmx5IG1hdGNoIGFic29sdXRlIHBhdGhzLCBldGMuXG4gKiAtIEVtcHR5IGdsb2JzIHdpbGwgbWF0Y2ggbm90aGluZy5cbiAqIC0gQW55IHNwZWNpYWwgZ2xvYiBzeW50YXggbXVzdCBiZSBjb250YWluZWQgdG8gb25lIHBhdGggc2VnbWVudC4gRm9yIGV4YW1wbGUsXG4gKiAgIGA/KGZvb3xiYXIvYmF6KWAgaXMgaW52YWxpZC4gVGhlIHNlcGFyYXRvciB3aWxsIHRha2UgcHJlY2VkZW5jZSBhbmQgdGhlXG4gKiAgIGZpcnN0IHNlZ21lbnQgZW5kcyB3aXRoIGFuIHVuY2xvc2VkIGdyb3VwLlxuICogLSBJZiBhIHBhdGggc2VnbWVudCBlbmRzIHdpdGggdW5jbG9zZWQgZ3JvdXBzIG9yIGEgZGFuZ2xpbmcgZXNjYXBlIHByZWZpeCwgYVxuICogICBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQuIEV2ZXJ5IGNoYXJhY3RlciBmb3IgdGhhdCBzZWdtZW50IGlzIHRha2VuXG4gKiAgIGxpdGVyYWxseSBpbiB0aGlzIGV2ZW50LlxuICpcbiAqIExpbWl0YXRpb25zOlxuICogLSBBIG5lZ2F0aXZlIGdyb3VwIGxpa2UgYCEoZm9vfGJhcilgIHdpbGwgd3JvbmdseSBiZSBjb252ZXJ0ZWQgdG8gYSBuZWdhdGl2ZVxuICogICBsb29rLWFoZWFkIGZvbGxvd2VkIGJ5IGEgd2lsZGNhcmQuIFRoaXMgbWVhbnMgdGhhdCBgIShmb28pLmpzYCB3aWxsIHdyb25nbHlcbiAqICAgZmFpbCB0byBtYXRjaCBgZm9vYmFyLmpzYCwgZXZlbiB0aG91Z2ggYGZvb2JhcmAgaXMgbm90IGBmb29gLiBFZmZlY3RpdmVseSxcbiAqICAgYCEoZm9vfGJhcilgIGlzIHRyZWF0ZWQgbGlrZSBgIShAKGZvb3xiYXIpKilgLiBUaGlzIHdpbGwgd29yayBjb3JyZWN0bHkgaWZcbiAqICAgdGhlIGdyb3VwIG9jY3VycyBub3QgbmVzdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBnbG9iVG9SZWdFeHAgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2dsb2ItdG8tcmVnZXhwXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZ2xvYlRvUmVnRXhwKFwiKi5qc1wiKSwgL15bXi9dKlxcLmpzXFwvKiQvKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9iIEdsb2Igc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gb3B0aW9ucyBDb252ZXJzaW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVndWxhciBleHByZXNzaW9uIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnbG9iVG9SZWdFeHAoXG4gIGdsb2I6IHN0cmluZyxcbiAgb3B0aW9uczogR2xvYk9wdGlvbnMgPSB7fSxcbik6IFJlZ0V4cCB7XG4gIHJldHVybiBfZ2xvYlRvUmVnRXhwKGNvbnN0YW50cywgZ2xvYiwgb3B0aW9ucyk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUNFLGFBQWEsUUFHUixnQ0FBZ0M7QUFJdkMsTUFBTSxZQUEyQjtFQUMvQixLQUFLO0VBQ0wsVUFBVTtFQUNWLE1BQU07SUFBQztHQUFJO0VBQ1gsVUFBVTtFQUNWLFVBQVU7RUFDVixjQUFjO0FBQ2hCO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtRUMsR0FDRCxPQUFPLFNBQVMsYUFDZCxJQUFZLEVBQ1osVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sY0FBYyxXQUFXLE1BQU07QUFDeEMifQ==
+// denoCacheMetadata=9086989031102252531,3430792538847865662 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/c503ebed74a8963596fcf649c89c8b399e81df46df930177056c5968545b18f8.js b/vendor/gen/https/jsr.io/c503ebed74a8963596fcf649c89c8b399e81df46df930177056c5968545b18f8.js
new file mode 100644
index 0000000..6eb213f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/c503ebed74a8963596fcf649c89c8b399e81df46df930177056c5968545b18f8.js
@@ -0,0 +1,947 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors
+// on npm.
+/**
+ * String formatters and utilities for dealing with ANSI color codes.
+ *
+ * > [!IMPORTANT]
+ * > If printing directly to the console, it's recommended to style console
+ * > output using CSS (guide
+ * > {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/console#styling_console_output | here}).
+ *
+ * This module supports `NO_COLOR` environmental variable disabling any coloring
+ * if `NO_COLOR` is set.
+ *
+ * ```ts no-assert
+ * import {
+ * bgBlue,
+ * bgRgb24,
+ * bgRgb8,
+ * bold,
+ * italic,
+ * red,
+ * rgb24,
+ * rgb8,
+ * } from "@std/fmt/colors";
+ *
+ * console.log(bgBlue(italic(red(bold("Hello, World!")))));
+ *
+ * // also supports 8bit colors
+ *
+ * console.log(rgb8("Hello, World!", 42));
+ *
+ * console.log(bgRgb8("Hello, World!", 42));
+ *
+ * // and 24bit rgb
+ *
+ * console.log(rgb24("Hello, World!", {
+ * r: 41,
+ * g: 42,
+ * b: 43,
+ * }));
+ *
+ * console.log(bgRgb24("Hello, World!", {
+ * r: 41,
+ * g: 42,
+ * b: 43,
+ * }));
+ * ```
+ *
+ * @module
+ */ // deno-lint-ignore no-explicit-any
+const { Deno } = globalThis;
+const noColor = typeof Deno?.noColor === "boolean" ? Deno.noColor : false;
+let enabled = !noColor;
+/**
+ * Enable or disable text color when styling.
+ *
+ * `@std/fmt/colors` automatically detects NO_COLOR environmental variable
+ * and disables text color. Use this API only when the automatic detection
+ * doesn't work.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { setColorEnabled } from "@std/fmt/colors";
+ *
+ * // Disable text color
+ * setColorEnabled(false);
+ *
+ * // Enable text color
+ * setColorEnabled(true);
+ * ```
+ *
+ * @param value The boolean value to enable or disable text color
+ */ export function setColorEnabled(value) {
+ if (Deno?.noColor) {
+ return;
+ }
+ enabled = value;
+}
+/**
+ * Get whether text color change is enabled or disabled.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { getColorEnabled } from "@std/fmt/colors";
+ *
+ * console.log(getColorEnabled()); // true if enabled, false if disabled
+ * ```
+ * @returns `true` if text color is enabled, `false` otherwise
+ */ export function getColorEnabled() {
+ return enabled;
+}
+/**
+ * Builds color code
+ * @param open
+ * @param close
+ */ function code(open, close) {
+ return {
+ open: `\x1b[${open.join(";")}m`,
+ close: `\x1b[${close}m`,
+ regexp: new RegExp(`\\x1b\\[${close}m`, "g")
+ };
+}
+/**
+ * Applies color and background based on color code and its associated text
+ * @param str The text to apply color settings to
+ * @param code The color code to apply
+ */ function run(str, code) {
+ return enabled ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` : str;
+}
+/**
+ * Reset the text modified.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { reset } from "@std/fmt/colors";
+ *
+ * console.log(reset("Hello, world!"));
+ * ```
+ *
+ * @param str The text to reset
+ * @returns The text with reset color
+ */ export function reset(str) {
+ return run(str, code([
+ 0
+ ], 0));
+}
+/**
+ * Make the text bold.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bold } from "@std/fmt/colors";
+ *
+ * console.log(bold("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bold
+ * @returns The bold text
+ */ export function bold(str) {
+ return run(str, code([
+ 1
+ ], 22));
+}
+/**
+ * The text emits only a small amount of light.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { dim } from "@std/fmt/colors";
+ *
+ * console.log(dim("Hello, world!"));
+ * ```
+ *
+ * @param str The text to dim
+ * @returns The dimmed text
+ *
+ * Warning: Not all terminal emulators support `dim`.
+ * For compatibility across all terminals, use {@linkcode gray} or {@linkcode brightBlack} instead.
+ */ export function dim(str) {
+ return run(str, code([
+ 2
+ ], 22));
+}
+/**
+ * Make the text italic.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { italic } from "@std/fmt/colors";
+ *
+ * console.log(italic("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make italic
+ * @returns The italic text
+ */ export function italic(str) {
+ return run(str, code([
+ 3
+ ], 23));
+}
+/**
+ * Make the text underline.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { underline } from "@std/fmt/colors";
+ *
+ * console.log(underline("Hello, world!"));
+ * ```
+ *
+ * @param str The text to underline
+ * @returns The underlined text
+ */ export function underline(str) {
+ return run(str, code([
+ 4
+ ], 24));
+}
+/**
+ * Invert background color and text color.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { inverse } from "@std/fmt/colors";
+ *
+ * console.log(inverse("Hello, world!"));
+ * ```
+ *
+ * @param str The text to invert its color
+ * @returns The inverted text
+ */ export function inverse(str) {
+ return run(str, code([
+ 7
+ ], 27));
+}
+/**
+ * Make the text hidden.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { hidden } from "@std/fmt/colors";
+ *
+ * console.log(hidden("Hello, world!"));
+ * ```
+ *
+ * @param str The text to hide
+ * @returns The hidden text
+ */ export function hidden(str) {
+ return run(str, code([
+ 8
+ ], 28));
+}
+/**
+ * Put horizontal line through the center of the text.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { strikethrough } from "@std/fmt/colors";
+ *
+ * console.log(strikethrough("Hello, world!"));
+ * ```
+ *
+ * @param str The text to strike through
+ * @returns The text with horizontal line through the center
+ */ export function strikethrough(str) {
+ return run(str, code([
+ 9
+ ], 29));
+}
+/**
+ * Set text color to black.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { black } from "@std/fmt/colors";
+ *
+ * console.log(black("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make black
+ * @returns The black text
+ */ export function black(str) {
+ return run(str, code([
+ 30
+ ], 39));
+}
+/**
+ * Set text color to red.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { red } from "@std/fmt/colors";
+ *
+ * console.log(red("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make red
+ * @returns The red text
+ */ export function red(str) {
+ return run(str, code([
+ 31
+ ], 39));
+}
+/**
+ * Set text color to green.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { green } from "@std/fmt/colors";
+ *
+ * console.log(green("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make green
+ * @returns The green text
+ */ export function green(str) {
+ return run(str, code([
+ 32
+ ], 39));
+}
+/**
+ * Set text color to yellow.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { yellow } from "@std/fmt/colors";
+ *
+ * console.log(yellow("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make yellow
+ * @returns The yellow text
+ */ export function yellow(str) {
+ return run(str, code([
+ 33
+ ], 39));
+}
+/**
+ * Set text color to blue.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { blue } from "@std/fmt/colors";
+ *
+ * console.log(blue("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make blue
+ * @returns The blue text
+ */ export function blue(str) {
+ return run(str, code([
+ 34
+ ], 39));
+}
+/**
+ * Set text color to magenta.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { magenta } from "@std/fmt/colors";
+ *
+ * console.log(magenta("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make magenta
+ * @returns The magenta text
+ */ export function magenta(str) {
+ return run(str, code([
+ 35
+ ], 39));
+}
+/**
+ * Set text color to cyan.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { cyan } from "@std/fmt/colors";
+ *
+ * console.log(cyan("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make cyan
+ * @returns The cyan text
+ */ export function cyan(str) {
+ return run(str, code([
+ 36
+ ], 39));
+}
+/**
+ * Set text color to white.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { white } from "@std/fmt/colors";
+ *
+ * console.log(white("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make white
+ * @returns The white text
+ */ export function white(str) {
+ return run(str, code([
+ 37
+ ], 39));
+}
+/**
+ * Set text color to gray.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { gray } from "@std/fmt/colors";
+ *
+ * console.log(gray("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make gray
+ * @returns The gray text
+ */ export function gray(str) {
+ return brightBlack(str);
+}
+/**
+ * Set text color to bright black.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightBlack } from "@std/fmt/colors";
+ *
+ * console.log(brightBlack("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright black
+ * @returns The bright black text
+ */ export function brightBlack(str) {
+ return run(str, code([
+ 90
+ ], 39));
+}
+/**
+ * Set text color to bright red.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightRed } from "@std/fmt/colors";
+ *
+ * console.log(brightRed("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright red
+ * @returns The bright red text
+ */ export function brightRed(str) {
+ return run(str, code([
+ 91
+ ], 39));
+}
+/**
+ * Set text color to bright green.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightGreen } from "@std/fmt/colors";
+ *
+ * console.log(brightGreen("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright green
+ * @returns The bright green text
+ */ export function brightGreen(str) {
+ return run(str, code([
+ 92
+ ], 39));
+}
+/**
+ * Set text color to bright yellow.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightYellow } from "@std/fmt/colors";
+ *
+ * console.log(brightYellow("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright yellow
+ * @returns The bright yellow text
+ */ export function brightYellow(str) {
+ return run(str, code([
+ 93
+ ], 39));
+}
+/**
+ * Set text color to bright blue.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightBlue } from "@std/fmt/colors";
+ *
+ * console.log(brightBlue("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright blue
+ * @returns The bright blue text
+ */ export function brightBlue(str) {
+ return run(str, code([
+ 94
+ ], 39));
+}
+/**
+ * Set text color to bright magenta.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightMagenta } from "@std/fmt/colors";
+ *
+ * console.log(brightMagenta("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright magenta
+ * @returns The bright magenta text
+ */ export function brightMagenta(str) {
+ return run(str, code([
+ 95
+ ], 39));
+}
+/**
+ * Set text color to bright cyan.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightCyan } from "@std/fmt/colors";
+ *
+ * console.log(brightCyan("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright cyan
+ * @returns The bright cyan text
+ */ export function brightCyan(str) {
+ return run(str, code([
+ 96
+ ], 39));
+}
+/**
+ * Set text color to bright white.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { brightWhite } from "@std/fmt/colors";
+ *
+ * console.log(brightWhite("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make bright white
+ * @returns The bright white text
+ */ export function brightWhite(str) {
+ return run(str, code([
+ 97
+ ], 39));
+}
+/**
+ * Set background color to black.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBlack } from "@std/fmt/colors";
+ *
+ * console.log(bgBlack("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background black
+ * @returns The text with black background
+ */ export function bgBlack(str) {
+ return run(str, code([
+ 40
+ ], 49));
+}
+/**
+ * Set background color to red.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgRed } from "@std/fmt/colors";
+ *
+ * console.log(bgRed("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background red
+ * @returns The text with red background
+ */ export function bgRed(str) {
+ return run(str, code([
+ 41
+ ], 49));
+}
+/**
+ * Set background color to green.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgGreen } from "@std/fmt/colors";
+ *
+ * console.log(bgGreen("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background green
+ * @returns The text with green background
+ */ export function bgGreen(str) {
+ return run(str, code([
+ 42
+ ], 49));
+}
+/**
+ * Set background color to yellow.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgYellow } from "@std/fmt/colors";
+ *
+ * console.log(bgYellow("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background yellow
+ * @returns The text with yellow background
+ */ export function bgYellow(str) {
+ return run(str, code([
+ 43
+ ], 49));
+}
+/**
+ * Set background color to blue.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBlue } from "@std/fmt/colors";
+ *
+ * console.log(bgBlue("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background blue
+ * @returns The text with blue background
+ */ export function bgBlue(str) {
+ return run(str, code([
+ 44
+ ], 49));
+}
+/**
+ * Set background color to magenta.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgMagenta } from "@std/fmt/colors";
+ *
+ * console.log(bgMagenta("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background magenta
+ * @returns The text with magenta background
+ */ export function bgMagenta(str) {
+ return run(str, code([
+ 45
+ ], 49));
+}
+/**
+ * Set background color to cyan.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgCyan } from "@std/fmt/colors";
+ *
+ * console.log(bgCyan("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background cyan
+ * @returns The text with cyan background
+ */ export function bgCyan(str) {
+ return run(str, code([
+ 46
+ ], 49));
+}
+/**
+ * Set background color to white.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgWhite } from "@std/fmt/colors";
+ *
+ * console.log(bgWhite("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background white
+ * @returns The text with white background
+ */ export function bgWhite(str) {
+ return run(str, code([
+ 47
+ ], 49));
+}
+/**
+ * Set background color to bright black.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightBlack } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightBlack("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright black
+ * @returns The text with bright black background
+ */ export function bgBrightBlack(str) {
+ return run(str, code([
+ 100
+ ], 49));
+}
+/**
+ * Set background color to bright red.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightRed } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightRed("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright red
+ * @returns The text with bright red background
+ */ export function bgBrightRed(str) {
+ return run(str, code([
+ 101
+ ], 49));
+}
+/**
+ * Set background color to bright green.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightGreen } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightGreen("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright green
+ * @returns The text with bright green background
+ */ export function bgBrightGreen(str) {
+ return run(str, code([
+ 102
+ ], 49));
+}
+/**
+ * Set background color to bright yellow.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightYellow } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightYellow("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright yellow
+ * @returns The text with bright yellow background
+ */ export function bgBrightYellow(str) {
+ return run(str, code([
+ 103
+ ], 49));
+}
+/**
+ * Set background color to bright blue.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightBlue } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightBlue("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright blue
+ * @returns The text with bright blue background
+ */ export function bgBrightBlue(str) {
+ return run(str, code([
+ 104
+ ], 49));
+}
+/**
+ * Set background color to bright magenta.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightMagenta } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightMagenta("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright magenta
+ * @returns The text with bright magenta background
+ */ export function bgBrightMagenta(str) {
+ return run(str, code([
+ 105
+ ], 49));
+}
+/**
+ * Set background color to bright cyan.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightCyan } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightCyan("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright cyan
+ * @returns The text with bright cyan background
+ */ export function bgBrightCyan(str) {
+ return run(str, code([
+ 106
+ ], 49));
+}
+/**
+ * Set background color to bright white.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgBrightWhite } from "@std/fmt/colors";
+ *
+ * console.log(bgBrightWhite("Hello, world!"));
+ * ```
+ *
+ * @param str The text to make its background bright white
+ * @returns The text with bright white background
+ */ export function bgBrightWhite(str) {
+ return run(str, code([
+ 107
+ ], 49));
+}
+/* Special Color Sequences */ /**
+ * Clam and truncate color codes
+ * @param n The input number
+ * @param max The number to truncate to
+ * @param min The number to truncate from
+ */ function clampAndTruncate(n, max = 255, min = 0) {
+ return Math.trunc(Math.max(Math.min(n, max), min));
+}
+/**
+ * Set text color using paletted 8bit colors.
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { rgb8 } from "@std/fmt/colors";
+ *
+ * console.log(rgb8("Hello, world!", 42));
+ * ```
+ *
+ * @param str The text color to apply paletted 8bit colors to
+ * @param color The color code
+ * @returns The text with paletted 8bit color
+ */ export function rgb8(str, color) {
+ return run(str, code([
+ 38,
+ 5,
+ clampAndTruncate(color)
+ ], 39));
+}
+/**
+ * Set background color using paletted 8bit colors.
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { bgRgb8 } from "@std/fmt/colors";
+ *
+ * console.log(bgRgb8("Hello, world!", 42));
+ * ```
+ *
+ * @param str The text color to apply paletted 8bit background colors to
+ * @param color code
+ * @returns The text with paletted 8bit background color
+ */ export function bgRgb8(str, color) {
+ return run(str, code([
+ 48,
+ 5,
+ clampAndTruncate(color)
+ ], 49));
+}
+/**
+ * Set text color using 24bit rgb.
+ * `color` can be a number in range `0x000000` to `0xffffff` or
+ * an `Rgb`.
+ *
+ * @example To produce the color magenta:
+ * ```ts no-assert
+ * import { rgb24 } from "@std/fmt/colors";
+ *
+ * rgb24("foo", 0xff00ff);
+ * rgb24("foo", {r: 255, g: 0, b: 255});
+ * ```
+ * @param str The text color to apply 24bit rgb to
+ * @param color The color code
+ * @returns The text with 24bit rgb color
+ */ export function rgb24(str, color) {
+ if (typeof color === "number") {
+ return run(str, code([
+ 38,
+ 2,
+ color >> 16 & 0xff,
+ color >> 8 & 0xff,
+ color & 0xff
+ ], 39));
+ }
+ return run(str, code([
+ 38,
+ 2,
+ clampAndTruncate(color.r),
+ clampAndTruncate(color.g),
+ clampAndTruncate(color.b)
+ ], 39));
+}
+/**
+ * Set background color using 24bit rgb.
+ * `color` can be a number in range `0x000000` to `0xffffff` or
+ * an `Rgb`.
+ *
+ * @example To produce the color magenta:
+ * ```ts no-assert
+ * import { bgRgb24 } from "@std/fmt/colors";
+ *
+ * bgRgb24("foo", 0xff00ff);
+ * bgRgb24("foo", {r: 255, g: 0, b: 255});
+ * ```
+ * @param str The text color to apply 24bit rgb to
+ * @param color The color code
+ * @returns The text with 24bit rgb color
+ */ export function bgRgb24(str, color) {
+ if (typeof color === "number") {
+ return run(str, code([
+ 48,
+ 2,
+ color >> 16 & 0xff,
+ color >> 8 & 0xff,
+ color & 0xff
+ ], 49));
+ }
+ return run(str, code([
+ 48,
+ 2,
+ clampAndTruncate(color.r),
+ clampAndTruncate(color.g),
+ clampAndTruncate(color.b)
+ ], 49));
+}
+// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js
+const ANSI_PATTERN = new RegExp([
+ "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
+ "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))"
+].join("|"), "g");
+/**
+ * Remove ANSI escape codes from the string.
+ *
+ * @example Usage
+ * ```ts no-assert
+ * import { stripAnsiCode, red } from "@std/fmt/colors";
+ *
+ * console.log(stripAnsiCode(red("Hello, world!")));
+ * ```
+ *
+ * @param string The text to remove ANSI escape codes from
+ * @returns The text without ANSI escape codes
+ */ export function stripAnsiCode(string) {
+ return string.replace(ANSI_PATTERN, "");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZm10LzEuMC44L2NvbG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuLy8gQSBtb2R1bGUgdG8gcHJpbnQgQU5TSSB0ZXJtaW5hbCBjb2xvcnMuIEluc3BpcmVkIGJ5IGNoYWxrLCBrbGV1ciwgYW5kIGNvbG9yc1xuLy8gb24gbnBtLlxuXG4vKipcbiAqIFN0cmluZyBmb3JtYXR0ZXJzIGFuZCB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqID4gWyFJTVBPUlRBTlRdXG4gKiA+IElmIHByaW50aW5nIGRpcmVjdGx5IHRvIHRoZSBjb25zb2xlLCBpdCdzIHJlY29tbWVuZGVkIHRvIHN0eWxlIGNvbnNvbGVcbiAqID4gb3V0cHV0IHVzaW5nIENTUyAoZ3VpZGVcbiAqID4ge0BsaW5rY29kZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvY29uc29sZSNzdHlsaW5nX2NvbnNvbGVfb3V0cHV0IHwgaGVyZX0pLlxuICpcbiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIGBOT19DT0xPUmAgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBkaXNhYmxpbmcgYW55IGNvbG9yaW5nXG4gKiBpZiBgTk9fQ09MT1JgIGlzIHNldC5cbiAqXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7XG4gKiAgIGJnQmx1ZSxcbiAqICAgYmdSZ2IyNCxcbiAqICAgYmdSZ2I4LFxuICogICBib2xkLFxuICogICBpdGFsaWMsXG4gKiAgIHJlZCxcbiAqICAgcmdiMjQsXG4gKiAgIHJnYjgsXG4gKiB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhiZ0JsdWUoaXRhbGljKHJlZChib2xkKFwiSGVsbG8sIFdvcmxkIVwiKSkpKSk7XG4gKlxuICogLy8gYWxzbyBzdXBwb3J0cyA4Yml0IGNvbG9yc1xuICpcbiAqIGNvbnNvbGUubG9nKHJnYjgoXCJIZWxsbywgV29ybGQhXCIsIDQyKSk7XG4gKlxuICogY29uc29sZS5sb2coYmdSZ2I4KFwiSGVsbG8sIFdvcmxkIVwiLCA0MikpO1xuICpcbiAqIC8vIGFuZCAyNGJpdCByZ2JcbiAqXG4gKiBjb25zb2xlLmxvZyhyZ2IyNChcIkhlbGxvLCBXb3JsZCFcIiwge1xuICogICByOiA0MSxcbiAqICAgZzogNDIsXG4gKiAgIGI6IDQzLFxuICogfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnUmdiMjQoXCJIZWxsbywgV29ybGQhXCIsIHtcbiAqICAgcjogNDEsXG4gKiAgIGc6IDQyLFxuICogICBiOiA0MyxcbiAqIH0pKTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuY29uc3QgeyBEZW5vIH0gPSBnbG9iYWxUaGlzIGFzIGFueTtcbmNvbnN0IG5vQ29sb3IgPSB0eXBlb2YgRGVubz8ubm9Db2xvciA9PT0gXCJib29sZWFuXCJcbiAgPyBEZW5vLm5vQ29sb3IgYXMgYm9vbGVhblxuICA6IGZhbHNlO1xuXG5pbnRlcmZhY2UgQ29kZSB7XG4gIG9wZW46IHN0cmluZztcbiAgY2xvc2U6IHN0cmluZztcbiAgcmVnZXhwOiBSZWdFeHA7XG59XG5cbi8qKiBSR0IgOC1iaXRzIHBlciBjaGFubmVsLiBFYWNoIGluIHJhbmdlIGAwLT4yNTVgIG9yIGAweDAwLT4weGZmYCAqL1xuZXhwb3J0IGludGVyZmFjZSBSZ2Ige1xuICAvKiogUmVkIGNvbXBvbmVudCB2YWx1ZSAqL1xuICByOiBudW1iZXI7XG4gIC8qKiBHcmVlbiBjb21wb25lbnQgdmFsdWUgKi9cbiAgZzogbnVtYmVyO1xuICAvKiogQmx1ZSBjb21wb25lbnQgdmFsdWUgKi9cbiAgYjogbnVtYmVyO1xufVxuXG5sZXQgZW5hYmxlZCA9ICFub0NvbG9yO1xuXG4vKipcbiAqIEVuYWJsZSBvciBkaXNhYmxlIHRleHQgY29sb3Igd2hlbiBzdHlsaW5nLlxuICpcbiAqIGBAc3RkL2ZtdC9jb2xvcnNgIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBOT19DT0xPUiBlbnZpcm9ubWVudGFsIHZhcmlhYmxlXG4gKiBhbmQgZGlzYWJsZXMgdGV4dCBjb2xvci4gVXNlIHRoaXMgQVBJIG9ubHkgd2hlbiB0aGUgYXV0b21hdGljIGRldGVjdGlvblxuICogZG9lc24ndCB3b3JrLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHNldENvbG9yRW5hYmxlZCB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiAvLyBEaXNhYmxlIHRleHQgY29sb3JcbiAqIHNldENvbG9yRW5hYmxlZChmYWxzZSk7XG4gKlxuICogLy8gRW5hYmxlIHRleHQgY29sb3JcbiAqIHNldENvbG9yRW5hYmxlZCh0cnVlKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgYm9vbGVhbiB2YWx1ZSB0byBlbmFibGUgb3IgZGlzYWJsZSB0ZXh0IGNvbG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2xvckVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgaWYgKERlbm8/Lm5vQ29sb3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbmFibGVkID0gdmFsdWU7XG59XG5cbi8qKlxuICogR2V0IHdoZXRoZXIgdGV4dCBjb2xvciBjaGFuZ2UgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBnZXRDb2xvckVuYWJsZWQgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coZ2V0Q29sb3JFbmFibGVkKCkpOyAvLyB0cnVlIGlmIGVuYWJsZWQsIGZhbHNlIGlmIGRpc2FibGVkXG4gKiBgYGBcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0ZXh0IGNvbG9yIGlzIGVuYWJsZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvckVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbmFibGVkO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb2xvciBjb2RlXG4gKiBAcGFyYW0gb3BlblxuICogQHBhcmFtIGNsb3NlXG4gKi9cbmZ1bmN0aW9uIGNvZGUob3BlbjogbnVtYmVyW10sIGNsb3NlOiBudW1iZXIpOiBDb2RlIHtcbiAgcmV0dXJuIHtcbiAgICBvcGVuOiBgXFx4MWJbJHtvcGVuLmpvaW4oXCI7XCIpfW1gLFxuICAgIGNsb3NlOiBgXFx4MWJbJHtjbG9zZX1tYCxcbiAgICByZWdleHA6IG5ldyBSZWdFeHAoYFxcXFx4MWJcXFxcWyR7Y2xvc2V9bWAsIFwiZ1wiKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGNvbG9yIGFuZCBiYWNrZ3JvdW5kIGJhc2VkIG9uIGNvbG9yIGNvZGUgYW5kIGl0cyBhc3NvY2lhdGVkIHRleHRcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gYXBwbHkgY29sb3Igc2V0dGluZ3MgdG9cbiAqIEBwYXJhbSBjb2RlIFRoZSBjb2xvciBjb2RlIHRvIGFwcGx5XG4gKi9cbmZ1bmN0aW9uIHJ1bihzdHI6IHN0cmluZywgY29kZTogQ29kZSk6IHN0cmluZyB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBgJHtjb2RlLm9wZW59JHtzdHIucmVwbGFjZShjb2RlLnJlZ2V4cCwgY29kZS5vcGVuKX0ke2NvZGUuY2xvc2V9YFxuICAgIDogc3RyO1xufVxuXG4vKipcbiAqIFJlc2V0IHRoZSB0ZXh0IG1vZGlmaWVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHJlc2V0IH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKHJlc2V0KFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIHJlc2V0XG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHJlc2V0IGNvbG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFswXSwgMCkpO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIHRleHQgYm9sZC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBib2xkIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJvbGQoXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBib2xkXG4gKiBAcmV0dXJucyBUaGUgYm9sZCB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib2xkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzFdLCAyMikpO1xufVxuXG4vKipcbiAqIFRoZSB0ZXh0IGVtaXRzIG9ubHkgYSBzbWFsbCBhbW91bnQgb2YgbGlnaHQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgZGltIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGRpbShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBkaW1cbiAqIEByZXR1cm5zIFRoZSBkaW1tZWQgdGV4dFxuICpcbiAqIFdhcm5pbmc6IE5vdCBhbGwgdGVybWluYWwgZW11bGF0b3JzIHN1cHBvcnQgYGRpbWAuXG4gKiBGb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgYWxsIHRlcm1pbmFscywgdXNlIHtAbGlua2NvZGUgZ3JheX0gb3Ige0BsaW5rY29kZSBicmlnaHRCbGFja30gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsyXSwgMjIpKTtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGl0YWxpYy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBpdGFsaWMgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coaXRhbGljKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRhbGljXG4gKiBAcmV0dXJucyBUaGUgaXRhbGljIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGl0YWxpYyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszXSwgMjMpKTtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IHVuZGVybGluZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyB1bmRlcmxpbmUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2codW5kZXJsaW5lKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIHVuZGVybGluZVxuICogQHJldHVybnMgVGhlIHVuZGVybGluZWQgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJsaW5lKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzRdLCAyNCkpO1xufVxuXG4vKipcbiAqIEludmVydCBiYWNrZ3JvdW5kIGNvbG9yIGFuZCB0ZXh0IGNvbG9yLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGludmVyc2UgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coaW52ZXJzZShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBpbnZlcnQgaXRzIGNvbG9yXG4gKiBAcmV0dXJucyBUaGUgaW52ZXJ0ZWQgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs3XSwgMjcpKTtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGhpZGRlbi5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBoaWRkZW4gfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coaGlkZGVuKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIGhpZGVcbiAqIEByZXR1cm5zIFRoZSBoaWRkZW4gdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZGVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzhdLCAyOCkpO1xufVxuXG4vKipcbiAqIFB1dCBob3Jpem9udGFsIGxpbmUgdGhyb3VnaCB0aGUgY2VudGVyIG9mIHRoZSB0ZXh0LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHN0cmlrZXRocm91Z2ggfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coc3RyaWtldGhyb3VnaChcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBzdHJpa2UgdGhyb3VnaFxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBob3Jpem9udGFsIGxpbmUgdGhyb3VnaCB0aGUgY2VudGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzldLCAyOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsYWNrLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJsYWNrIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJsYWNrKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgYmxhY2tcbiAqIEByZXR1cm5zIFRoZSBibGFjayB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibGFjayhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszMF0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gcmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHJlZCB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhyZWQoXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSByZWRcbiAqIEByZXR1cm5zIFRoZSByZWQgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMxXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBncmVlbi5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBncmVlbiB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhncmVlbihcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGdyZWVuXG4gKiBAcmV0dXJucyBUaGUgZ3JlZW4gdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzJdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHllbGxvdy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyB5ZWxsb3cgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coeWVsbG93KFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgeWVsbG93XG4gKiBAcmV0dXJucyBUaGUgeWVsbG93IHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHllbGxvdyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszM10sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYmx1ZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBibHVlIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJsdWUoXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBibHVlXG4gKiBAcmV0dXJucyBUaGUgYmx1ZSB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM0XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBtYWdlbnRhLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IG1hZ2VudGEgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2cobWFnZW50YShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIG1hZ2VudGFcbiAqIEByZXR1cm5zIFRoZSBtYWdlbnRhIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hZ2VudGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzVdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGN5YW4uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgY3lhbiB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhjeWFuKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgY3lhblxuICogQHJldHVybnMgVGhlIGN5YW4gdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3lhbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszNl0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gd2hpdGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgd2hpdGUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2cod2hpdGUoXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSB3aGl0ZVxuICogQHJldHVybnMgVGhlIHdoaXRlIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM3XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBncmF5LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGdyYXkgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coZ3JheShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGdyYXlcbiAqIEByZXR1cm5zIFRoZSBncmF5IHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXkoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYnJpZ2h0QmxhY2soc3RyKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYnJpZ2h0QmxhY2sgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYnJpZ2h0QmxhY2soXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBicmlnaHQgYmxhY2tcbiAqIEByZXR1cm5zIFRoZSBicmlnaHQgYmxhY2sgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0QmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTBdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCByZWQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYnJpZ2h0UmVkIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJyaWdodFJlZChcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGJyaWdodCByZWRcbiAqIEByZXR1cm5zIFRoZSBicmlnaHQgcmVkIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodFJlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5MV0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJyaWdodEdyZWVuIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJyaWdodEdyZWVuKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgYnJpZ2h0IGdyZWVuXG4gKiBAcmV0dXJucyBUaGUgYnJpZ2h0IGdyZWVuIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkyXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJyaWdodFllbGxvdyB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhicmlnaHRZZWxsb3coXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBicmlnaHQgeWVsbG93XG4gKiBAcmV0dXJucyBUaGUgYnJpZ2h0IHllbGxvdyB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTNdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBibHVlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJyaWdodEJsdWUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYnJpZ2h0Qmx1ZShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGJyaWdodCBibHVlXG4gKiBAcmV0dXJucyBUaGUgYnJpZ2h0IGJsdWUgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0Qmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5NF0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYnJpZ2h0TWFnZW50YSB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhicmlnaHRNYWdlbnRhKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgYnJpZ2h0IG1hZ2VudGFcbiAqIEByZXR1cm5zIFRoZSBicmlnaHQgbWFnZW50YSB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk1XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBicmlnaHRDeWFuIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJyaWdodEN5YW4oXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBicmlnaHQgY3lhblxuICogQHJldHVybnMgVGhlIGJyaWdodCBjeWFuIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTZdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCB3aGl0ZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBicmlnaHRXaGl0ZSB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhicmlnaHRXaGl0ZShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGJyaWdodCB3aGl0ZVxuICogQHJldHVybnMgVGhlIGJyaWdodCB3aGl0ZSB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRXaGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5N10sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYmxhY2suXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdCbGFjayB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhiZ0JsYWNrKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmxhY2tcbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggYmxhY2sgYmFja2dyb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCbGFjayhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0MF0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gcmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJnUmVkIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnUmVkKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgcmVkXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHJlZCBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0MV0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gZ3JlZW4uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdHcmVlbiB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhiZ0dyZWVuKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgZ3JlZW5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggZ3JlZW4gYmFja2dyb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdHcmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0Ml0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8geWVsbG93LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJnWWVsbG93IH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnWWVsbG93KFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgeWVsbG93XG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHllbGxvdyBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1llbGxvdyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0M10sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYmx1ZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBiZ0JsdWUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYmdCbHVlKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmx1ZVxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBibHVlIGJhY2tncm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0NF0sIDQ5KSk7XG59XG5cbi8qKlxuICogIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIG1hZ2VudGEuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdNYWdlbnRhIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnTWFnZW50YShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIG1hZ2VudGFcbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggbWFnZW50YSBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ01hZ2VudGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDVdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGN5YW4uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdDeWFuIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnQ3lhbihcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGN5YW5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggY3lhbiBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0N5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDZdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIHdoaXRlLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJnV2hpdGUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYmdXaGl0ZShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIHdoaXRlXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHdoaXRlIGJhY2tncm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnV2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDddLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCBibGFjay5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBiZ0JyaWdodEJsYWNrIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnQnJpZ2h0QmxhY2soXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQgYmxhY2tcbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggYnJpZ2h0IGJsYWNrIGJhY2tncm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0QmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAwXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgcmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJnQnJpZ2h0UmVkIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnQnJpZ2h0UmVkKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0IHJlZFxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBicmlnaHQgcmVkIGJhY2tncm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0UmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMV0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJnQnJpZ2h0R3JlZW4gfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYmdCcmlnaHRHcmVlbihcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodCBncmVlblxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBicmlnaHQgZ3JlZW4gYmFja2dyb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRHcmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDJdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCB5ZWxsb3cuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdCcmlnaHRZZWxsb3cgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYmdCcmlnaHRZZWxsb3coXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQgeWVsbG93XG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGJyaWdodCB5ZWxsb3cgYmFja2dyb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAzXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgYmx1ZS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBiZ0JyaWdodEJsdWUgfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2coYmdCcmlnaHRCbHVlKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0IGJsdWVcbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggYnJpZ2h0IGJsdWUgYmFja2dyb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNF0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdCcmlnaHRNYWdlbnRhIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnQnJpZ2h0TWFnZW50YShcIkhlbGxvLCB3b3JsZCFcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodCBtYWdlbnRhXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGJyaWdodCBtYWdlbnRhIGJhY2tncm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0TWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDVdLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCBjeWFuLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IGJnQnJpZ2h0Q3lhbiB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhiZ0JyaWdodEN5YW4oXCJIZWxsbywgd29ybGQhXCIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQgY3lhblxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBicmlnaHQgY3lhbiBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA2XSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgd2hpdGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdCcmlnaHRXaGl0ZSB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhiZ0JyaWdodFdoaXRlKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0IHdoaXRlXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGJyaWdodCB3aGl0ZSBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodFdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwN10sIDQ5KSk7XG59XG5cbi8qIFNwZWNpYWwgQ29sb3IgU2VxdWVuY2VzICovXG5cbi8qKlxuICogQ2xhbSBhbmQgdHJ1bmNhdGUgY29sb3IgY29kZXNcbiAqIEBwYXJhbSBuIFRoZSBpbnB1dCBudW1iZXJcbiAqIEBwYXJhbSBtYXggVGhlIG51bWJlciB0byB0cnVuY2F0ZSB0b1xuICogQHBhcmFtIG1pbiBUaGUgbnVtYmVyIHRvIHRydW5jYXRlIGZyb21cbiAqL1xuZnVuY3Rpb24gY2xhbXBBbmRUcnVuY2F0ZShuOiBudW1iZXIsIG1heCA9IDI1NSwgbWluID0gMCk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnRydW5jKE1hdGgubWF4KE1hdGgubWluKG4sIG1heCksIG1pbikpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHVzaW5nIHBhbGV0dGVkIDhiaXQgY29sb3JzLlxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSM4LWJpdFxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHJnYjggfSBmcm9tIFwiQHN0ZC9mbXQvY29sb3JzXCI7XG4gKlxuICogY29uc29sZS5sb2cocmdiOChcIkhlbGxvLCB3b3JsZCFcIiwgNDIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgY29sb3IgdG8gYXBwbHkgcGFsZXR0ZWQgOGJpdCBjb2xvcnMgdG9cbiAqIEBwYXJhbSBjb2xvciBUaGUgY29sb3IgY29kZVxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBwYWxldHRlZCA4Yml0IGNvbG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2I4KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM4LCA1LCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yKV0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgcGFsZXR0ZWQgOGJpdCBjb2xvcnMuXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlIzgtYml0XG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIG5vLWFzc2VydFxuICogaW1wb3J0IHsgYmdSZ2I4IH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGNvbnNvbGUubG9nKGJnUmdiOChcIkhlbGxvLCB3b3JsZCFcIiwgNDIpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHRleHQgY29sb3IgdG8gYXBwbHkgcGFsZXR0ZWQgOGJpdCBiYWNrZ3JvdW5kIGNvbG9ycyB0b1xuICogQHBhcmFtIGNvbG9yIGNvZGVcbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggcGFsZXR0ZWQgOGJpdCBiYWNrZ3JvdW5kIGNvbG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JnYjgoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDgsIDUsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IpXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB1c2luZyAyNGJpdCByZ2IuXG4gKiBgY29sb3JgIGNhbiBiZSBhIG51bWJlciBpbiByYW5nZSBgMHgwMDAwMDBgIHRvIGAweGZmZmZmZmAgb3JcbiAqIGFuIGBSZ2JgLlxuICpcbiAqIEBleGFtcGxlIFRvIHByb2R1Y2UgdGhlIGNvbG9yIG1hZ2VudGE6XG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHJnYjI0IH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIHJnYjI0KFwiZm9vXCIsIDB4ZmYwMGZmKTtcbiAqIHJnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIFRoZSB0ZXh0IGNvbG9yIHRvIGFwcGx5IDI0Yml0IHJnYiB0b1xuICogQHBhcmFtIGNvbG9yIFRoZSBjb2xvciBjb2RlXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIDI0Yml0IHJnYiBjb2xvclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmdiMjQoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIgfCBSZ2IpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHJ1bihcbiAgICAgIHN0cixcbiAgICAgIGNvZGUoXG4gICAgICAgIFszOCwgMiwgKGNvbG9yID4+IDE2KSAmIDB4ZmYsIChjb2xvciA+PiA4KSAmIDB4ZmYsIGNvbG9yICYgMHhmZl0sXG4gICAgICAgIDM5LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBydW4oXG4gICAgc3RyLFxuICAgIGNvZGUoXG4gICAgICBbXG4gICAgICAgIDM4LFxuICAgICAgICAyLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpLFxuICAgICAgXSxcbiAgICAgIDM5LFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgMjRiaXQgcmdiLlxuICogYGNvbG9yYCBjYW4gYmUgYSBudW1iZXIgaW4gcmFuZ2UgYDB4MDAwMDAwYCB0byBgMHhmZmZmZmZgIG9yXG4gKiBhbiBgUmdiYC5cbiAqXG4gKiBAZXhhbXBsZSBUbyBwcm9kdWNlIHRoZSBjb2xvciBtYWdlbnRhOlxuICogYGBgdHMgbm8tYXNzZXJ0XG4gKiBpbXBvcnQgeyBiZ1JnYjI0IH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiO1xuICpcbiAqIGJnUmdiMjQoXCJmb29cIiwgMHhmZjAwZmYpO1xuICogYmdSZ2IyNChcImZvb1wiLCB7cjogMjU1LCBnOiAwLCBiOiAyNTV9KTtcbiAqIGBgYFxuICogQHBhcmFtIHN0ciBUaGUgdGV4dCBjb2xvciB0byBhcHBseSAyNGJpdCByZ2IgdG9cbiAqIEBwYXJhbSBjb2xvciBUaGUgY29sb3IgY29kZVxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCAyNGJpdCByZ2IgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnUmdiMjQoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIgfCBSZ2IpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHJ1bihcbiAgICAgIHN0cixcbiAgICAgIGNvZGUoXG4gICAgICAgIFs0OCwgMiwgKGNvbG9yID4+IDE2KSAmIDB4ZmYsIChjb2xvciA+PiA4KSAmIDB4ZmYsIGNvbG9yICYgMHhmZl0sXG4gICAgICAgIDQ5LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBydW4oXG4gICAgc3RyLFxuICAgIGNvZGUoXG4gICAgICBbXG4gICAgICAgIDQ4LFxuICAgICAgICAyLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpLFxuICAgICAgXSxcbiAgICAgIDQ5LFxuICAgICksXG4gICk7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXJlZ2V4L2Jsb2IvMDJmYTg5M2Q2MTlkM2RhODU0MTFhY2M4ZmQ0ZTJlZWEwZTk1YTlkOS9pbmRleC5qc1xuY29uc3QgQU5TSV9QQVRURVJOID0gbmV3IFJlZ0V4cChcbiAgW1xuICAgIFwiW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiLFxuICAgIFwiKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFhaY2YtbnEtdXk9Pjx+XSkpXCIsXG4gIF0uam9pbihcInxcIiksXG4gIFwiZ1wiLFxuKTtcblxuLyoqXG4gKiBSZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbSB0aGUgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBuby1hc3NlcnRcbiAqIGltcG9ydCB7IHN0cmlwQW5zaUNvZGUsIHJlZCB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIjtcbiAqXG4gKiBjb25zb2xlLmxvZyhzdHJpcEFuc2lDb2RlKHJlZChcIkhlbGxvLCB3b3JsZCFcIikpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHJpbmcgVGhlIHRleHQgdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGZyb21cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGhvdXQgQU5TSSBlc2NhcGUgY29kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQW5zaUNvZGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoQU5TSV9QQVRURVJOLCBcIlwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBQ3JDLCtFQUErRTtBQUMvRSxVQUFVO0FBRVY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0NDLEdBRUQsbUNBQW1DO0FBQ25DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNqQixNQUFNLFVBQVUsT0FBTyxNQUFNLFlBQVksWUFDckMsS0FBSyxPQUFPLEdBQ1o7QUFrQkosSUFBSSxVQUFVLENBQUM7QUFFZjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNELE9BQU8sU0FBUyxnQkFBZ0IsS0FBYztFQUM1QyxJQUFJLE1BQU0sU0FBUztJQUNqQjtFQUNGO0VBRUEsVUFBVTtBQUNaO0FBRUE7Ozs7Ozs7Ozs7Q0FVQyxHQUNELE9BQU8sU0FBUztFQUNkLE9BQU87QUFDVDtBQUVBOzs7O0NBSUMsR0FDRCxTQUFTLEtBQUssSUFBYyxFQUFFLEtBQWE7RUFDekMsT0FBTztJQUNMLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQzFDO0FBQ0Y7QUFFQTs7OztDQUlDLEdBQ0QsU0FBUyxJQUFJLEdBQVcsRUFBRSxJQUFVO0VBQ2xDLE9BQU8sVUFDSCxHQUFHLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEdBQ2pFO0FBQ047QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0NBZUMsR0FDRCxPQUFPLFNBQVMsSUFBSSxHQUFXO0VBQzdCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsVUFBVSxHQUFXO0VBQ25DLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFXO0VBQ2pDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsY0FBYyxHQUFXO0VBQ3ZDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFFLEVBQUU7QUFDNUI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsSUFBSSxHQUFXO0VBQzdCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsT0FBTyxHQUFXO0VBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsUUFBUSxHQUFXO0VBQ2pDLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsTUFBTSxHQUFXO0VBQy9CLE9BQU8sSUFBSSxLQUFLLEtBQUs7SUFBQztHQUFHLEVBQUU7QUFDN0I7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLFNBQVMsS0FBSyxHQUFXO0VBQzlCLE9BQU8sWUFBWTtBQUNyQjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQVc7RUFDckMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxVQUFVLEdBQVc7RUFDbkMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQVc7RUFDckMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxhQUFhLEdBQVc7RUFDdEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxXQUFXLEdBQVc7RUFDcEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxjQUFjLEdBQVc7RUFDdkMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxXQUFXLEdBQVc7RUFDcEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQVc7RUFDckMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxRQUFRLEdBQVc7RUFDakMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxNQUFNLEdBQVc7RUFDL0IsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxRQUFRLEdBQVc7RUFDakMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxTQUFTLEdBQVc7RUFDbEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxPQUFPLEdBQVc7RUFDaEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxVQUFVLEdBQVc7RUFDbkMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxPQUFPLEdBQVc7RUFDaEMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBUyxRQUFRLEdBQVc7RUFDakMsT0FBTyxJQUFJLEtBQUssS0FBSztJQUFDO0dBQUcsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FB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
+// denoCacheMetadata=11683421588818424058,11980953391411266504 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/c5a9c53010e29942c373acf9060630c1aa073f501d5e59b0c412901c445b0f2a.js b/vendor/gen/https/jsr.io/c5a9c53010e29942c373acf9060630c1aa073f501d5e59b0c412901c445b0f2a.js
new file mode 100644
index 0000000..f20bb5a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/c5a9c53010e29942c373acf9060630c1aa073f501d5e59b0c412901c445b0f2a.js
@@ -0,0 +1,121 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/normalize.ts";
+import { CHAR_COLON } from "../_common/constants.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Normalize the `path`, resolving `'..'` and `'.'` segments.
+ * Note that resolving these segments does not necessarily mean that all will be eliminated.
+ * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalize } from "@std/path/windows/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const normalized = normalize("C:\\foo\\..\\bar");
+ * assertEquals(normalized, "C:\\bar");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `normalize` from `@std/path/windows/unstable-normalize`.
+ *
+ * @param path The path to normalize
+ * @returns The normalized path
+ */ export function normalize(path) {
+ assertArg(path);
+ const len = path.length;
+ let rootEnd = 0;
+ let device;
+ let isAbsolute = false;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ // If we started with a separator, we know we at least have an absolute
+ // path of some kind (UNC or otherwise)
+ isAbsolute = true;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ const firstPart = path.slice(last, j);
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ // Return the normalized version of the UNC root since there
+ // is nothing left to process
+ return `\\\\${firstPart}\\${path.slice(last)}\\`;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
+ rootEnd = j;
+ }
+ }
+ }
+ } else {
+ rootEnd = 1;
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ device = path.slice(0, 2);
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ // Treat separator following drive name as an absolute path
+ // indicator
+ isAbsolute = true;
+ rootEnd = 3;
+ }
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid unnecessary
+ // work
+ return "\\";
+ }
+ let tail;
+ if (rootEnd < len) {
+ tail = normalizeString(path.slice(rootEnd), !isAbsolute, "\\", isPathSeparator);
+ } else {
+ tail = "";
+ }
+ if (tail.length === 0 && !isAbsolute) tail = ".";
+ if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {
+ tail += "\\";
+ }
+ if (device === undefined) {
+ if (isAbsolute) {
+ if (tail.length > 0) return `\\${tail}`;
+ else return "\\";
+ }
+ return tail;
+ } else if (isAbsolute) {
+ if (tail.length > 0) return `${device}\\${tail}`;
+ else return `${device}\\`;
+ }
+ return device + tail;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL25vcm1hbGl6ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBhc3NlcnRBcmcgfSBmcm9tIFwiLi4vX2NvbW1vbi9ub3JtYWxpemUudHNcIjtcbmltcG9ydCB7IENIQVJfQ09MT04gfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gXCIuLi9fY29tbW9uL25vcm1hbGl6ZV9zdHJpbmcudHNcIjtcbmltcG9ydCB7IGlzUGF0aFNlcGFyYXRvciwgaXNXaW5kb3dzRGV2aWNlUm9vdCB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBgcGF0aGAsIHJlc29sdmluZyBgJy4uJ2AgYW5kIGAnLidgIHNlZ21lbnRzLlxuICogTm90ZSB0aGF0IHJlc29sdmluZyB0aGVzZSBzZWdtZW50cyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgYWxsIHdpbGwgYmUgZWxpbWluYXRlZC5cbiAqIEEgYCcuLidgIGF0IHRoZSB0b3AtbGV2ZWwgd2lsbCBiZSBwcmVzZXJ2ZWQsIGFuZCBhbiBlbXB0eSBwYXRoIGlzIGNhbm9uaWNhbGx5IGAnLidgLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL25vcm1hbGl6ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZShcIkM6XFxcXGZvb1xcXFwuLlxcXFxiYXJcIik7XG4gKiBhc3NlcnRFcXVhbHMobm9ybWFsaXplZCwgXCJDOlxcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBub3JtYWxpemVgIGZyb20gYEBzdGQvcGF0aC93aW5kb3dzL3Vuc3RhYmxlLW5vcm1hbGl6ZWAuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJnKHBhdGgpO1xuXG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBkZXZpY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAvLyBUcnkgdG8gbWF0Y2ggYSByb290XG4gIGlmIChsZW4gPiAxKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gUG9zc2libGUgVU5DIHJvb3RcblxuICAgICAgLy8gSWYgd2Ugc3RhcnRlZCB3aXRoIGEgc2VwYXJhdG9yLCB3ZSBrbm93IHdlIGF0IGxlYXN0IGhhdmUgYW4gYWJzb2x1dGVcbiAgICAgIC8vIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG5cbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoLnNsaWNlKGxhc3QsIGopO1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgVU5DIHJvb3Qgc2luY2UgdGhlcmVcbiAgICAgICAgICAgICAgLy8gaXMgbm90aGluZyBsZWZ0IHRvIHByb2Nlc3NcblxuICAgICAgICAgICAgICByZXR1cm4gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0KX1cXFxcYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QsIGopfWA7XG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVuZCA9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGRldmljZSA9IHBhdGguc2xpY2UoMCwgMik7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgLy8gVHJlYXQgc2VwYXJhdG9yIGZvbGxvd2luZyBkcml2ZSBuYW1lIGFzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICByb290RW5kID0gMztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuICAgIC8vIHdvcmtcbiAgICByZXR1cm4gXCJcXFxcXCI7XG4gIH1cblxuICBsZXQgdGFpbDogc3RyaW5nO1xuICBpZiAocm9vdEVuZCA8IGxlbikge1xuICAgIHRhaWwgPSBub3JtYWxpemVTdHJpbmcoXG4gICAgICBwYXRoLnNsaWNlKHJvb3RFbmQpLFxuICAgICAgIWlzQWJzb2x1dGUsXG4gICAgICBcIlxcXFxcIixcbiAgICAgIGlzUGF0aFNlcGFyYXRvcixcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRhaWwgPSBcIlwiO1xuICB9XG4gIGlmICh0YWlsLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgdGFpbCA9IFwiLlwiO1xuICBpZiAodGFpbC5sZW5ndGggPiAwICYmIGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQobGVuIC0gMSkpKSB7XG4gICAgdGFpbCArPSBcIlxcXFxcIjtcbiAgfVxuICBpZiAoZGV2aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgICAgaWYgKHRhaWwubGVuZ3RoID4gMCkgcmV0dXJuIGBcXFxcJHt0YWlsfWA7XG4gICAgICBlbHNlIHJldHVybiBcIlxcXFxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRhaWw7XG4gIH0gZWxzZSBpZiAoaXNBYnNvbHV0ZSkge1xuICAgIGlmICh0YWlsLmxlbmd0aCA+IDApIHJldHVybiBgJHtkZXZpY2V9XFxcXCR7dGFpbH1gO1xuICAgIGVsc2UgcmV0dXJuIGAke2RldmljZX1cXFxcYDtcbiAgfVxuICByZXR1cm4gZGV2aWNlICsgdGFpbDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLDBCQUEwQjtBQUNwRCxTQUFTLFVBQVUsUUFBUSwwQkFBMEI7QUFDckQsU0FBUyxlQUFlLFFBQVEsaUNBQWlDO0FBQ2pFLFNBQVMsZUFBZSxFQUFFLG1C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
+// denoCacheMetadata=15467683293632384173,12610656767582473609 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/c5f0f2266368c0c131094c035b462a4e5aa9ecb04434dcfebf483e2e1e3533a1.js b/vendor/gen/https/jsr.io/c5f0f2266368c0c131094c035b462a4e5aa9ecb04434dcfebf483e2e1e3533a1.js
new file mode 100644
index 0000000..2fac9c0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/c5f0f2266368c0c131094c035b462a4e5aa9ecb04434dcfebf483e2e1e3533a1.js
@@ -0,0 +1,94 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { join } from "jsr:@std/path@^1.0.9/join";
+import { toPathString } from "./_to_path_string.ts";
+/**
+ * Asynchronously ensures that a directory is empty.
+ *
+ * If the directory does not exist, it is created. The directory itself is not
+ * deleted.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param dir The path of the directory to empty, as a string or URL.
+ *
+ * @returns A void promise that resolves once the directory is empty.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { emptyDir } from "@std/fs/empty-dir";
+ *
+ * await emptyDir("./foo");
+ * ```
+ */ export async function emptyDir(dir) {
+ try {
+ const items = await Array.fromAsync(Deno.readDir(dir));
+ await Promise.all(items.map((item)=>{
+ if (item && item.name) {
+ const filepath = join(toPathString(dir), item.name);
+ return Deno.remove(filepath, {
+ recursive: true
+ });
+ }
+ }));
+ } catch (err) {
+ if (!(err instanceof Deno.errors.NotFound)) {
+ throw err;
+ }
+ // if not exist. then create it
+ await Deno.mkdir(dir, {
+ recursive: true
+ });
+ }
+}
+/**
+ * Synchronously ensures that a directory is empty deletes the directory
+ * contents it is not empty.
+ *
+ * If the directory does not exist, it is created. The directory itself is not
+ * deleted.
+ *
+ * Requires `--allow-read` and `--allow-write` permissions.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param dir The path of the directory to empty, as a string or URL.
+ *
+ * @returns A void value that returns once the directory is empty.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { emptyDirSync } from "@std/fs/empty-dir";
+ *
+ * emptyDirSync("./foo");
+ * ```
+ */ export function emptyDirSync(dir) {
+ try {
+ const items = [
+ ...Deno.readDirSync(dir)
+ ];
+ // If the directory exists, remove all entries inside it.
+ while(items.length){
+ const item = items.shift();
+ if (item && item.name) {
+ const filepath = join(toPathString(dir), item.name);
+ Deno.removeSync(filepath, {
+ recursive: true
+ });
+ }
+ }
+ } catch (err) {
+ if (!(err instanceof Deno.errors.NotFound)) {
+ throw err;
+ }
+ // if not exist. then create it
+ Deno.mkdirSync(dir, {
+ recursive: true
+ });
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2VtcHR5X2Rpci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9qb2luXCI7XG5pbXBvcnQgeyB0b1BhdGhTdHJpbmcgfSBmcm9tIFwiLi9fdG9fcGF0aF9zdHJpbmcudHNcIjtcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBlbnN1cmVzIHRoYXQgYSBkaXJlY3RvcnkgaXMgZW1wdHkuXG4gKlxuICogSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gVGhlIGRpcmVjdG9yeSBpdHNlbGYgaXMgbm90XG4gKiBkZWxldGVkLlxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXJlYWRgIGFuZCBgLS1hbGxvdy13cml0ZWAgcGVybWlzc2lvbnMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL3J1bnRpbWUvbWFudWFsL2Jhc2ljcy9wZXJtaXNzaW9ucyNmaWxlLXN5c3RlbS1hY2Nlc3N9XG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEZW5vJ3MgcGVybWlzc2lvbnMgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBkaXIgVGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSB0byBlbXB0eSwgYXMgYSBzdHJpbmcgb3IgVVJMLlxuICpcbiAqIEByZXR1cm5zIEEgdm9pZCBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGVtcHR5RGlyIH0gZnJvbSBcIkBzdGQvZnMvZW1wdHktZGlyXCI7XG4gKlxuICogYXdhaXQgZW1wdHlEaXIoXCIuL2Zvb1wiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW1wdHlEaXIoZGlyOiBzdHJpbmcgfCBVUkwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IGF3YWl0IEFycmF5LmZyb21Bc3luYyhEZW5vLnJlYWREaXIoZGlyKSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0ubmFtZSkge1xuICAgICAgICBjb25zdCBmaWxlcGF0aCA9IGpvaW4odG9QYXRoU3RyaW5nKGRpciksIGl0ZW0ubmFtZSk7XG4gICAgICAgIHJldHVybiBEZW5vLnJlbW92ZShmaWxlcGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICAvLyBpZiBub3QgZXhpc3QuIHRoZW4gY3JlYXRlIGl0XG4gICAgYXdhaXQgRGVuby5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBlbnN1cmVzIHRoYXQgYSBkaXJlY3RvcnkgaXMgZW1wdHkgZGVsZXRlcyB0aGUgZGlyZWN0b3J5XG4gKiBjb250ZW50cyBpdCBpcyBub3QgZW1wdHkuXG4gKlxuICogSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gVGhlIGRpcmVjdG9yeSBpdHNlbGYgaXMgbm90XG4gKiBkZWxldGVkLlxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXJlYWRgIGFuZCBgLS1hbGxvdy13cml0ZWAgcGVybWlzc2lvbnMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL3J1bnRpbWUvbWFudWFsL2Jhc2ljcy9wZXJtaXNzaW9ucyNmaWxlLXN5c3RlbS1hY2Nlc3N9XG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEZW5vJ3MgcGVybWlzc2lvbnMgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBkaXIgVGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSB0byBlbXB0eSwgYXMgYSBzdHJpbmcgb3IgVVJMLlxuICpcbiAqIEByZXR1cm5zIEEgdm9pZCB2YWx1ZSB0aGF0IHJldHVybnMgb25jZSB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGVtcHR5RGlyU3luYyB9IGZyb20gXCJAc3RkL2ZzL2VtcHR5LWRpclwiO1xuICpcbiAqIGVtcHR5RGlyU3luYyhcIi4vZm9vXCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eURpclN5bmMoZGlyOiBzdHJpbmcgfCBVUkwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi5EZW5vLnJlYWREaXJTeW5jKGRpcildO1xuXG4gICAgLy8gSWYgdGhlIGRpcmVjdG9yeSBleGlzdHMsIHJlbW92ZSBhbGwgZW50cmllcyBpbnNpZGUgaXQuXG4gICAgd2hpbGUgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtLm5hbWUpIHtcbiAgICAgICAgY29uc3QgZmlsZXBhdGggPSBqb2luKHRvUGF0aFN0cmluZyhkaXIpLCBpdGVtLm5hbWUpO1xuICAgICAgICBEZW5vLnJlbW92ZVN5bmMoZmlsZXBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIC8vIGlmIG5vdCBleGlzdC4gdGhlbiBjcmVhdGUgaXRcbiAgICBEZW5vLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELFNBQVMsSUFBSSxRQUFRLDRCQUE0QjtBQUNqRCxTQUFTLFlBQVksUUFBUSx1QkFBdUI7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCQyxHQUNELE9BQU8sZUFBZSxTQUFTLEdBQWlCO0VBQzlDLElBQUk7SUFDRixNQUFNLFFBQVEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxLQUFLLE9BQU8sQ0FBQztJQUVqRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDM0IsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ3JCLE1BQU0sV0FBVyxLQUFLLGFBQWEsTUFBTSxLQUFLLElBQUk7UUFDbEQsT0FBTyxLQUFLLE1BQU0sQ0FBQyxVQUFVO1VBQUUsV0FBVztRQUFLO01BQ2pEO0lBQ0Y7RUFDRixFQUFFLE9BQU8sS0FBSztJQUNaLElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxNQUFNLENBQUMsUUFBUSxHQUFHO01BQzFDLE1BQU07SUFDUjtJQUVBLCtCQUErQjtJQUMvQixNQUFNLEtBQUssS0FBSyxDQUFDLEtBQUs7TUFBRSxXQUFXO0lBQUs7RUFDMUM7QUFDRjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0JDLEdBQ0QsT0FBTyxTQUFTLGFBQWEsR0FBaUI7RUFDNUMsSUFBSTtJQUNGLE1BQU0sUUFBUTtTQUFJLEtBQUssV0FBVyxDQUFDO0tBQUs7SUFFeEMseURBQXlEO0lBQ3pELE1BQU8sTUFBTSxNQUFNLENBQUU7TUFDbkIsTUFBTSxPQUFPLE1BQU0sS0FBSztNQUN4QixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsTUFBTSxXQUFXLEtBQUssYUFBYSxNQUFNLEtBQUssSUFBSTtRQUNsRCxLQUFLLFVBQVUsQ0FBQyxVQUFVO1VBQUUsV0FBVztRQUFLO01BQzlDO0lBQ0Y7RUFDRixFQUFFLE9BQU8sS0FBSztJQUNaLElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxNQUFNLENBQUMsUUFBUSxHQUFHO01BQzFDLE1BQU07SUFDUjtJQUNBLCtCQUErQjtJQUMvQixLQUFLLFNBQVMsQ0FBQyxLQUFLO01BQUUsV0FBVztJQUFLO0VBQ3hDO0FBQ0YifQ==
+// denoCacheMetadata=3546192096263073851,17095290498113129028 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/c7b43dd6851d84d742dcf098b509ce07b71a7f617222f2b719745d65d5c8f6f9.js b/vendor/gen/https/jsr.io/c7b43dd6851d84d742dcf098b509ce07b71a7f617222f2b719745d65d5c8f6f9.js
new file mode 100644
index 0000000..8d4bcc3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/c7b43dd6851d84d742dcf098b509ce07b71a7f617222f2b719745d65d5c8f6f9.js
@@ -0,0 +1,109 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_DOT } from "../_common/constants.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return a `ParsedPath` object of the `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/path/posix/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = parse("/home/user/file.txt");
+ * assertEquals(path, {
+ * root: "/",
+ * dir: "/home/user",
+ * base: "file.txt",
+ * ext: ".txt",
+ * name: "file"
+ * });
+ * ```
+ *
+ * @param path The path to parse.
+ * @returns The parsed path object.
+ */ export function parse(path) {
+ assertPath(path);
+ const ret = {
+ root: "",
+ dir: "",
+ base: "",
+ ext: "",
+ name: ""
+ };
+ if (path.length === 0) return ret;
+ const isAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ let start;
+ if (isAbsolute) {
+ ret.root = "/";
+ start = 1;
+ } else {
+ start = 0;
+ }
+ let startDot = -1;
+ let startPart = 0;
+ let end = -1;
+ let matchedSlash = true;
+ let i = path.length - 1;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Get non-dir info
+ for(; i >= start; --i){
+ const code = path.charCodeAt(i);
+ if (isPosixPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ if (end !== -1) {
+ if (startPart === 0 && isAbsolute) {
+ ret.base = ret.name = path.slice(1, end);
+ } else {
+ ret.base = ret.name = path.slice(startPart, end);
+ }
+ }
+ // Fallback to '/' in case there is no basename
+ ret.base = ret.base || "/";
+ } else {
+ if (startPart === 0 && isAbsolute) {
+ ret.name = path.slice(1, startDot);
+ ret.base = path.slice(1, end);
+ } else {
+ ret.name = path.slice(startPart, startDot);
+ ret.base = path.slice(startPart, end);
+ }
+ ret.ext = path.slice(startDot, end);
+ }
+ if (startPart > 0) {
+ ret.dir = stripTrailingSeparators(path.slice(0, startPart - 1), isPosixPathSeparator);
+ } else if (isAbsolute) ret.dir = "/";
+ return ret;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9wYXJzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBDSEFSX0RPVCB9IGZyb20gXCIuLi9fY29tbW9uL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRQYXRoIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyB9IGZyb20gXCIuLi9fY29tbW9uL3N0cmlwX3RyYWlsaW5nX3NlcGFyYXRvcnMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQb3NpeFBhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG5leHBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuLyoqXG4gKiBSZXR1cm4gYSBgUGFyc2VkUGF0aGAgb2JqZWN0IG9mIHRoZSBgcGF0aGAuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvcGFyc2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSBwYXJzZShcIi9ob21lL3VzZXIvZmlsZS50eHRcIik7XG4gKiBhc3NlcnRFcXVhbHMocGF0aCwge1xuICogICByb290OiBcIi9cIixcbiAqICAgZGlyOiBcIi9ob21lL3VzZXJcIixcbiAqICAgYmFzZTogXCJmaWxlLnR4dFwiLFxuICogICBleHQ6IFwiLnR4dFwiLFxuICogICBuYW1lOiBcImZpbGVcIlxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGF0aCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShwYXRoOiBzdHJpbmcpOiBQYXJzZWRQYXRoIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBjb25zdCByZXQ6IFBhcnNlZFBhdGggPSB7IHJvb3Q6IFwiXCIsIGRpcjogXCJcIiwgYmFzZTogXCJcIiwgZXh0OiBcIlwiLCBuYW1lOiBcIlwiIH07XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcbiAgY29uc3QgaXNBYnNvbHV0ZSA9IGlzUG9zaXhQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgwKSk7XG4gIGxldCBzdGFydDogbnVtYmVyO1xuICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgIHJldC5yb290ID0gXCIvXCI7XG4gICAgc3RhcnQgPSAxO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBpID0gcGF0aC5sZW5ndGggLSAxO1xuXG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcblxuICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gIGZvciAoOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byAnLycgaW4gY2FzZSB0aGVyZSBpcyBubyBiYXNlbmFtZVxuICAgIHJldC5iYXNlID0gcmV0LmJhc2UgfHwgXCIvXCI7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSB7XG4gICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKDEsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgfVxuICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICB9XG5cbiAgaWYgKHN0YXJ0UGFydCA+IDApIHtcbiAgICByZXQuZGlyID0gc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMoXG4gICAgICBwYXRoLnNsaWNlKDAsIHN0YXJ0UGFydCAtIDEpLFxuICAgICAgaXNQb3NpeFBhdGhTZXBhcmF0b3IsXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gXCIvXCI7XG5cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsUUFBUSxRQUFRLDBCQUEwQjtBQUVuRCxTQUFTLHVCQUF1QixRQUFRLDBDQUEwQztBQUNsRixTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxvQkFBb0IsUUFBUSxhQUFhO0FBSWxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxNQUFNLElBQVk7RUFDaEMsV0FBVztFQUVYLE1BQU0sTUFBa0I7SUFBRSxNQUFNO0lBQUksS0FBSztJQUFJLE1BQU07SUFBSSxLQUFLO0lBQUksTUFBTTtFQUFHO0VBQ3pFLElBQUksS0FBSyxNQUFNLEtBQUssR0FBRyxPQUFPO0VBQzlCLE1BQU0sYUFBYSxxQkFBcUIsS0FBSyxVQUFVLENBQUM7RUFDeEQsSUFBSTtFQUNKLElBQUksWUFBWTtJQUNkLElBQUksSUFBSSxHQUFHO0lBQ1gsUUFBUTtFQUNWLE9BQU87SUFDTCxRQUFRO0VBQ1Y7RUFDQSxJQUFJLFdBQVcsQ0FBQztFQUNoQixJQUFJLFlBQVk7RUFDaEIsSUFBSSxNQUFNLENBQUM7RUFDWCxJQUFJLGVBQWU7RUFDbkIsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0VBRXRCLHlFQUF5RTtFQUN6RSxtQ0FBbUM7RUFDbkMsSUFBSSxjQUFjO0VBRWxCLG1CQUFtQjtFQUNuQixNQUFPLEtBQUssT0FBTyxFQUFFLEVBQUc7SUFDdEIsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzdCLElBQUkscUJBQXFCLE9BQU87TUFDOUIsb0VBQW9FO01BQ3BFLGdEQUFnRDtNQUNoRCxJQUFJLENBQUMsY0FBYztRQUNqQixZQUFZLElBQUk7UUFDaEI7TUFDRjtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO01BQ2QsbUVBQW1FO01BQ25FLFlBQVk7TUFDWixlQUFlO01BQ2YsTUFBTSxJQUFJO0lBQ1o7SUFDQSxJQUFJLFNBQVMsVUFBVTtNQUNyQixrRUFBa0U7TUFDbEUsSUFBSSxhQUFhLENBQUMsR0FBRyxXQUFXO1dBQzNCLElBQUksZ0JBQWdCLEdBQUcsY0FBYztJQUM1QyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUc7TUFDMUIsdUVBQXVFO01BQ3ZFLHFEQUFxRDtNQUNyRCxjQUFjLENBQUM7SUFDakI7RUFDRjtFQUVBLElBQ0UsYUFBYSxDQUFDLEtBQ2QsUUFBUSxDQUFDLEtBQ1Qsd0RBQXdEO0VBQ3hELGdCQUFnQixLQUNoQiwwREFBMEQ7RUFDekQsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0lBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztNQUNkLElBQUksY0FBYyxLQUFLLFlBQVk7UUFDakMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRztNQUN0QyxPQUFPO1FBQ0wsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsV0FBVztNQUM5QztJQUNGO0lBQ0EsK0NBQStDO0lBQy9DLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJO0VBQ3pCLE9BQU87SUFDTCxJQUFJLGNBQWMsS0FBSyxZQUFZO01BQ2pDLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUc7TUFDekIsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRztJQUMzQixPQUFPO01BQ0wsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsV0FBVztNQUNqQyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxXQUFXO0lBQ25DO0lBQ0EsSUFBSSxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsVUFBVTtFQUNqQztFQUVBLElBQUksWUFBWSxHQUFHO0lBQ2pCLElBQUksR0FBRyxHQUFHLHdCQUNSLEtBQUssS0FBSyxDQUFDLEdBQUcsWUFBWSxJQUMxQjtFQUVKLE9BQU8sSUFBSSxZQUFZLElBQUksR0FBRyxHQUFHO0VBRWpDLE9BQU87QUFDVCJ9
+// denoCacheMetadata=18290735263433514791,14253643832242925544 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/c913ceb3f6a5cf75818eb291e60821c1913312480db1afa9743a41de0181636f.js b/vendor/gen/https/jsr.io/c913ceb3f6a5cf75818eb291e60821c1913312480db1afa9743a41de0181636f.js
new file mode 100644
index 0000000..46058d8
--- /dev/null
+++ b/vendor/gen/https/jsr.io/c913ceb3f6a5cf75818eb291e60821c1913312480db1afa9743a41de0181636f.js
@@ -0,0 +1,53 @@
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * {@linkcode parse} and {@linkcode stringify} for handling
+ * {@link https://yaml.org/ | YAML} encoded data.
+ *
+ * Ported from
+ * {@link https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da | js-yaml v3.13.1}.
+ *
+ * Use {@linkcode parseAll} for parsing multiple documents in a single YAML
+ * string.
+ *
+ * This package generally supports
+ * {@link https://yaml.org/spec/1.2.2/ | YAML 1.2.x} (latest) and some
+ * {@link https://yaml.org/spec/1.1/current.html | YAML 1.1} features that are
+ * commonly used in the wild.
+ *
+ * Supported YAML 1.1 features include:
+ * - {@link https://yaml.org/type/merge.html | Merge} type (`<<` symbol)
+ *
+ * Unsupported YAML 1.1 features include:
+ * - Yes, No, On, Off literals for bool type
+ * - Sexagesimal numbers (e.g. `3:25:45`)
+ *
+ * ```ts
+ * import { parse, stringify } from "@std/yaml";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const data = parse(`
+ * foo: bar
+ * baz:
+ * - qux
+ * - quux
+ * `);
+ * assertEquals(data, { foo: "bar", baz: [ "qux", "quux" ] });
+ *
+ * const yaml = stringify({ foo: "bar", baz: ["qux", "quux"] });
+ * assertEquals(yaml, `foo: bar
+ * baz:
+ * - qux
+ * - quux
+ * `);
+ * ```
+ *
+ * ## Limitations
+ * - `binary` type is currently not stable.
+ *
+ * @module
+ */ export * from "./parse.ts";
+export * from "./stringify.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICoge0BsaW5rY29kZSBwYXJzZX0gYW5kIHtAbGlua2NvZGUgc3RyaW5naWZ5fSBmb3IgaGFuZGxpbmdcbiAqIHtAbGluayBodHRwczovL3lhbWwub3JnLyB8IFlBTUx9IGVuY29kZWQgZGF0YS5cbiAqXG4gKiBQb3J0ZWQgZnJvbVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYSB8IGpzLXlhbWwgdjMuMTMuMX0uXG4gKlxuICogVXNlIHtAbGlua2NvZGUgcGFyc2VBbGx9IGZvciBwYXJzaW5nIG11bHRpcGxlIGRvY3VtZW50cyBpbiBhIHNpbmdsZSBZQU1MXG4gKiBzdHJpbmcuXG4gKlxuICogVGhpcyBwYWNrYWdlIGdlbmVyYWxseSBzdXBwb3J0c1xuICoge0BsaW5rIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIuMi8gfCBZQU1MIDEuMi54fSAobGF0ZXN0KSBhbmQgc29tZVxuICoge0BsaW5rIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjEvY3VycmVudC5odG1sIHwgWUFNTCAxLjF9IGZlYXR1cmVzIHRoYXQgYXJlXG4gKiBjb21tb25seSB1c2VkIGluIHRoZSB3aWxkLlxuICpcbiAqIFN1cHBvcnRlZCBZQU1MIDEuMSBmZWF0dXJlcyBpbmNsdWRlOlxuICogLSB7QGxpbmsgaHR0cHM6Ly95YW1sLm9yZy90eXBlL21lcmdlLmh0bWwgfCBNZXJnZX0gdHlwZSAoYDw8YCBzeW1ib2wpXG4gKlxuICogVW5zdXBwb3J0ZWQgWUFNTCAxLjEgZmVhdHVyZXMgaW5jbHVkZTpcbiAqIC0gWWVzLCBObywgT24sIE9mZiBsaXRlcmFscyBmb3IgYm9vbCB0eXBlXG4gKiAtIFNleGFnZXNpbWFsIG51bWJlcnMgKGUuZy4gYDM6MjU6NDVgKVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSBcIkBzdGQveWFtbFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgZGF0YSA9IHBhcnNlKGBcbiAqIGZvbzogYmFyXG4gKiBiYXo6XG4gKiAgIC0gcXV4XG4gKiAgIC0gcXV1eFxuICogYCk7XG4gKiBhc3NlcnRFcXVhbHMoZGF0YSwgeyBmb286IFwiYmFyXCIsIGJhejogWyBcInF1eFwiLCBcInF1dXhcIiBdIH0pO1xuICpcbiAqIGNvbnN0IHlhbWwgPSBzdHJpbmdpZnkoeyBmb286IFwiYmFyXCIsIGJhejogW1wicXV4XCIsIFwicXV1eFwiXSB9KTtcbiAqIGFzc2VydEVxdWFscyh5YW1sLCBgZm9vOiBiYXJcbiAqIGJhejpcbiAqICAgLSBxdXhcbiAqICAgLSBxdXV4XG4gKiBgKTtcbiAqIGBgYFxuICpcbiAqICMjIExpbWl0YXRpb25zXG4gKiAtIGBiaW5hcnlgIHR5cGUgaXMgY3VycmVudGx5IG5vdCBzdGFibGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdHJpbmdpZnkudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThDQyxHQUVELGNBQWMsYUFBYTtBQUMzQixjQUFjLGlCQUFpQiJ9
+// denoCacheMetadata=15891147873618292317,8972921377856590254 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ca0f20d4b84d6ae651de68bd07becc010bdedb6be433f7d841129070f16166c8.js b/vendor/gen/https/jsr.io/ca0f20d4b84d6ae651de68bd07becc010bdedb6be433f7d841129070f16166c8.js
new file mode 100644
index 0000000..0484ca2
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ca0f20d4b84d6ae651de68bd07becc010bdedb6be433f7d841129070f16166c8.js
@@ -0,0 +1,21 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * Converts a path to a namespaced path. This function returns the path as is on posix.
+ *
+ * @example Usage
+ * ```ts
+ * import { toNamespacedPath } from "@std/path/posix/to-namespaced-path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(toNamespacedPath("/home/foo"), "/home/foo");
+ * ```
+ *
+ * @param path The path.
+ * @returns The namespaced path.
+ */ export function toNamespacedPath(path) {
+ // Non-op on posix systems
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC90b19uYW1lc3BhY2VkX3BhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggdG8gYSBuYW1lc3BhY2VkIHBhdGguIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCBhcyBpcyBvbiBwb3NpeC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvTmFtZXNwYWNlZFBhdGggfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L3RvLW5hbWVzcGFjZWQtcGF0aFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHRvTmFtZXNwYWNlZFBhdGgoXCIvaG9tZS9mb29cIiksIFwiL2hvbWUvZm9vXCIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgbmFtZXNwYWNlZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYW1lc3BhY2VkUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBOb24tb3Agb24gcG9zaXggc3lzdGVtc1xuICByZXR1cm4gcGF0aDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDRCxPQUFPLFNBQVMsaUJBQWlCLElBQVk7RUFDM0MsMEJBQTBCO0VBQzFCLE9BQU87QUFDVCJ9
+// denoCacheMetadata=14212196544956254176,16995230182257545306 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/cb315c9c97ffdce335482e9fa441d05411ea3b89d8f3058e4777516917187a8e.js b/vendor/gen/https/jsr.io/cb315c9c97ffdce335482e9fa441d05411ea3b89d8f3058e4777516917187a8e.js
new file mode 100644
index 0000000..3cef34a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/cb315c9c97ffdce335482e9fa441d05411ea3b89d8f3058e4777516917187a8e.js
@@ -0,0 +1,35 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Helper functions for working with
+ * {@linkcode https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array | Uint8Array}
+ * byte slices.
+ *
+ * ```ts
+ * import { concat, indexOfNeedle, endsWith } from "@std/bytes";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const a = new Uint8Array([0, 1, 2]);
+ * const b = new Uint8Array([3, 4, 5]);
+ *
+ * const c = concat([a, b]);
+ *
+ * assertEquals(c, new Uint8Array([0, 1, 2, 3, 4, 5]));
+ *
+ * assertEquals(indexOfNeedle(c, new Uint8Array([2, 3])), 2);
+ *
+ * assertEquals(endsWith(c, b), true);
+ * ```
+ *
+ * @module
+ */ export * from "./concat.ts";
+export * from "./copy.ts";
+export * from "./ends_with.ts";
+export * from "./equals.ts";
+export * from "./includes_needle.ts";
+export * from "./index_of_needle.ts";
+export * from "./last_index_of_needle.ts";
+export * from "./repeat.ts";
+export * from "./starts_with.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoXG4gKiB7QGxpbmtjb2RlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1VpbnQ4QXJyYXkgfCBVaW50OEFycmF5fVxuICogYnl0ZSBzbGljZXMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbmNhdCwgaW5kZXhPZk5lZWRsZSwgZW5kc1dpdGggfSBmcm9tIFwiQHN0ZC9ieXRlc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyXSk7XG4gKiBjb25zdCBiID0gbmV3IFVpbnQ4QXJyYXkoWzMsIDQsIDVdKTtcbiAqXG4gKiBjb25zdCBjID0gY29uY2F0KFthLCBiXSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGMsIG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAzLCA0LCA1XSkpO1xuICpcbiAqIGFzc2VydEVxdWFscyhpbmRleE9mTmVlZGxlKGMsIG5ldyBVaW50OEFycmF5KFsyLCAzXSkpLCAyKTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZW5kc1dpdGgoYywgYiksIHRydWUpO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb25jYXQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvcHkudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZHNfd2l0aC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXF1YWxzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbmNsdWRlc19uZWVkbGUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4X29mX25lZWRsZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGFzdF9pbmRleF9vZl9uZWVkbGUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlcGVhdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRzX3dpdGgudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0JDLEdBQ0QsY0FBYyxjQUFjO0FBQzVCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLGNBQWM7QUFDNUIsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsbUJBQW1CIn0=
+// denoCacheMetadata=5541560902761538946,8550250106762646797 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ce27067ea7c10f0cde68eeb1b15fbf030e7260a319a44a394093aa2d91db5f53.js b/vendor/gen/https/jsr.io/ce27067ea7c10f0cde68eeb1b15fbf030e7260a319a44a394093aa2d91db5f53.js
new file mode 100644
index 0000000..c9c1025
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ce27067ea7c10f0cde68eeb1b15fbf030e7260a319a44a394093aa2d91db5f53.js
@@ -0,0 +1,22 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/from_file_url.ts";
+/**
+ * Converts a file URL to a path string.
+ *
+ * @example Usage
+ * ```ts
+ * import { fromFileUrl } from "@std/path/posix/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl(new URL("file:///home/foo")), "/home/foo");
+ * ```
+ *
+ * @param url The file URL to convert.
+ * @returns The path string.
+ */ export function fromFileUrl(url) {
+ url = assertArg(url);
+ return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9mcm9tX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydEFyZyB9IGZyb20gXCIuLi9fY29tbW9uL2Zyb21fZmlsZV91cmwudHNcIjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpbGUgVVJMIHRvIGEgcGF0aCBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvZnJvbS1maWxlLXVybFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpKSwgXCIvaG9tZS9mb29cIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXJsIFRoZSBmaWxlIFVSTCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBVUkwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICB1cmwgPSBhc3NlcnRBcmcodXJsKTtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcbiAgICB1cmwucGF0aG5hbWUucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLDhCQUE4QjtBQUV4RDs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0QsT0FBTyxTQUFTLFlBQVksR0FBaUI7RUFDM0MsTUFBTSxVQUFVO0VBQ2hCLE9BQU8sbUJBQ0wsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLHdCQUF3QjtBQUVqRCJ9
+// denoCacheMetadata=12995210725555087204,17824235322591116648 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/cf0e6de6d6b02318bf9ee1b292abc26f5646b5de42190b80c825effe19007796.js b/vendor/gen/https/jsr.io/cf0e6de6d6b02318bf9ee1b292abc26f5646b5de42190b80c825effe19007796.js
new file mode 100644
index 0000000..99dad0c
--- /dev/null
+++ b/vendor/gen/https/jsr.io/cf0e6de6d6b02318bf9ee1b292abc26f5646b5de42190b80c825effe19007796.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { toFileUrl as posixToFileUrl } from "./posix/to_file_url.ts";
+import { toFileUrl as windowsToFileUrl } from "./windows/to_file_url.ts";
+/**
+ * Converts a path string to a file URL.
+ *
+ * @example Usage
+ * ```ts
+ * import { toFileUrl } from "@std/path/to-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(toFileUrl("\\home\\foo"), new URL("file:///home/foo"));
+ * assertEquals(toFileUrl("C:\\Users\\foo"), new URL("file:///C:/Users/foo"));
+ * assertEquals(toFileUrl("\\\\127.0.0.1\\home\\foo"), new URL("file://127.0.0.1/home/foo"));
+ * } else {
+ * assertEquals(toFileUrl("/home/foo"), new URL("file:///home/foo"));
+ * }
+ * ```
+ *
+ * @param path Path to convert to file URL.
+ * @returns The file URL equivalent to the path.
+ */ export function toFileUrl(path) {
+ return isWindows ? windowsToFileUrl(path) : posixToFileUrl(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS90b19maWxlX3VybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IHRvRmlsZVVybCBhcyBwb3NpeFRvRmlsZVVybCB9IGZyb20gXCIuL3Bvc2l4L3RvX2ZpbGVfdXJsLnRzXCI7XG5pbXBvcnQgeyB0b0ZpbGVVcmwgYXMgd2luZG93c1RvRmlsZVVybCB9IGZyb20gXCIuL3dpbmRvd3MvdG9fZmlsZV91cmwudHNcIjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggc3RyaW5nIHRvIGEgZmlsZSBVUkwuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0b0ZpbGVVcmwgfSBmcm9tIFwiQHN0ZC9wYXRoL3RvLWZpbGUtdXJsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKHRvRmlsZVVybChcIlxcXFxob21lXFxcXGZvb1wiKSwgbmV3IFVSTChcImZpbGU6Ly8vaG9tZS9mb29cIikpO1xuICogICBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpLCBuZXcgVVJMKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIikpO1xuICogICBhc3NlcnRFcXVhbHModG9GaWxlVXJsKFwiXFxcXFxcXFwxMjcuMC4wLjFcXFxcaG9tZVxcXFxmb29cIiksIG5ldyBVUkwoXCJmaWxlOi8vMTI3LjAuMC4xL2hvbWUvZm9vXCIpKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyh0b0ZpbGVVcmwoXCIvaG9tZS9mb29cIiksIG5ldyBVUkwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gY29udmVydCB0byBmaWxlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIFVSTCBlcXVpdmFsZW50IHRvIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlVXJsKHBhdGg6IHN0cmluZyk6IFVSTCB7XG4gIHJldHVybiBpc1dpbmRvd3MgPyB3aW5kb3dzVG9GaWxlVXJsKHBhdGgpIDogcG9zaXhUb0ZpbGVVcmwocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsYUFBYSxjQUFjLFFBQVEseUJBQXlCO0FBQ3JFLFNBQVMsYUFBYSxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQkMsR0FDRCxPQUFPLFNBQVMsVUFBVSxJQUFZO0VBQ3BDLE9BQU8sWUFBWSxpQkFBaUIsUUFBUSxlQUFlO0FBQzdEIn0=
+// denoCacheMetadata=17444697340405645388,12321269542767879158 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d06808fe6097adace2ddf2186702ab3d63d1bd46e4f59748e6bfe886c3871fd5.js b/vendor/gen/https/jsr.io/d06808fe6097adace2ddf2186702ab3d63d1bd46e4f59748e6bfe886c3871fd5.js
new file mode 100644
index 0000000..9a55a7e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d06808fe6097adace2ddf2186702ab3d63d1bd46e4f59748e6bfe886c3871fd5.js
@@ -0,0 +1,36 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Verifies whether provided path is absolute.
+ *
+ * @example Usage
+ * ```ts
+ * import { isAbsolute } from "@std/path/windows/is-absolute";
+ * import { assert, assertFalse } from "@std/assert";
+ *
+ * assert(isAbsolute("C:\\foo\\bar"));
+ * assertFalse(isAbsolute("..\\baz"));
+ * ```
+ *
+ * @param path The path to verify.
+ * @returns `true` if the path is absolute, `false` otherwise.
+ */ export function isAbsolute(path) {
+ assertPath(path);
+ const len = path.length;
+ if (len === 0) return false;
+ const code = path.charCodeAt(0);
+ if (isPathSeparator(code)) {
+ return true;
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (len > 2 && path.charCodeAt(1) === CHAR_COLON) {
+ if (isPathSeparator(path.charCodeAt(2))) return true;
+ }
+ }
+ return false;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2lzX2Fic29sdXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfQ09MT04gfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQYXRoU2VwYXJhdG9yLCBpc1dpbmRvd3NEZXZpY2VSb290IH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHByb3ZpZGVkIHBhdGggaXMgYWJzb2x1dGUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpc0Fic29sdXRlIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2lzLWFic29sdXRlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnQsIGFzc2VydEZhbHNlIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0KGlzQWJzb2x1dGUoXCJDOlxcXFxmb29cXFxcYmFyXCIpKTtcbiAqIGFzc2VydEZhbHNlKGlzQWJzb2x1dGUoXCIuLlxcXFxiYXpcIikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdmVyaWZ5LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkge1xuICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICBpZiAobGVuID4gMiAmJiBwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsVUFBVSxRQUFRLDBCQUEwQjtBQUNyRCxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxlQUFlLEVBQUUsbUJBQW1CLFFBQVEsYUFBYTtBQUVsRTs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxXQUFXLElBQVk7RUFDckMsV0FBVztFQUVYLE1BQU0sTUFBTSxLQUFLLE1BQU07RUFDdkIsSUFBSSxRQUFRLEdBQUcsT0FBTztFQUV0QixNQUFNLE9BQU8sS0FBSyxVQUFVLENBQUM7RUFDN0IsSUFBSSxnQkFBZ0IsT0FBTztJQUN6QixPQUFPO0VBQ1QsT0FBTyxJQUFJLG9CQUFvQixPQUFPO0lBQ3BDLHVCQUF1QjtJQUV2QixJQUFJLE1BQU0sS0FBSyxLQUFLLFVBQVUsQ0FBQyxPQUFPLFlBQVk7TUFDaEQsSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLENBQUMsS0FBSyxPQUFPO0lBQ2xEO0VBQ0Y7RUFDQSxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=710331920401935489,17293135830649487563 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d16c9512c025de36eaf781853df942212b9dba9e62b4e0b8f622367783646eeb.js b/vendor/gen/https/jsr.io/d16c9512c025de36eaf781853df942212b9dba9e62b4e0b8f622367783646eeb.js
new file mode 100644
index 0000000..987f197
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d16c9512c025de36eaf781853df942212b9dba9e62b4e0b8f622367783646eeb.js
@@ -0,0 +1,116 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/** Object structure for a list of HTML entities. */ const rawToEntityEntries = [
+ [
+ "&",
+ "&amp;"
+ ],
+ [
+ "<",
+ "&lt;"
+ ],
+ [
+ ">",
+ "&gt;"
+ ],
+ [
+ '"',
+ "&quot;"
+ ],
+ [
+ "'",
+ "&#39;"
+ ]
+];
+const defaultEntityList = Object.fromEntries([
+ ...rawToEntityEntries.map(([raw, entity])=>[
+ entity,
+ raw
+ ]),
+ [
+ "&apos;",
+ "'"
+ ],
+ [
+ "&nbsp;",
+ "\xa0"
+ ]
+]);
+const rawToEntity = new Map(rawToEntityEntries);
+const rawRe = new RegExp(`[${[
+ ...rawToEntity.keys()
+].join("")}]`, "g");
+/**
+ * Escapes text for safe interpolation into HTML text content and quoted attributes.
+ *
+ * @example Usage
+ * ```ts
+ * import { escape } from "@std/html/entities";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(escape("<>'&AA"), "&lt;&gt;&#39;&amp;AA");
+ *
+ * // Characters that don't need to be escaped will be left alone,
+ * // even if named HTML entities exist for them.
+ * assertEquals(escape("þð"), "þð");
+ * ```
+ *
+ * @param str The string to escape.
+ * @returns The escaped string.
+ */ export function escape(str) {
+ return str.replaceAll(rawRe, (m)=>rawToEntity.get(m));
+}
+const defaultUnescapeOptions = {
+ entityList: defaultEntityList
+};
+const MAX_CODE_POINT = 0x10ffff;
+const RX_DEC_ENTITY = /&#([0-9]+);/g;
+const RX_HEX_ENTITY = /&#x(\p{AHex}+);/gu;
+const entityListRegexCache = new WeakMap();
+/**
+ * Unescapes HTML entities in text.
+ *
+ * Default options only handle `&<>'"` and numeric entities.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { unescape } from "@std/html/entities";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unescape("&lt;&gt;&#39;&amp;AA"), "<>'&AA");
+ * assertEquals(unescape("&thorn;&eth;"), "&thorn;&eth;");
+ * ```
+ *
+ * @example Using a custom entity list
+ *
+ * This uses the full named entity list from the HTML spec (~47K un-minified)
+ *
+ * ```ts
+ * import { unescape } from "@std/html/entities";
+ * import entityList from "@std/html/named-entity-list.json" with { type: "json" };
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unescape("&lt;&gt;&#39;&amp;AA", { entityList }), "<>'&AA");
+ * ```
+ *
+ * @param str The string to unescape.
+ * @param options Options for unescaping.
+ * @returns The unescaped string.
+ */ export function unescape(str, options = {}) {
+ const { entityList } = {
+ ...defaultUnescapeOptions,
+ ...options
+ };
+ let entityRe = entityListRegexCache.get(entityList);
+ if (!entityRe) {
+ entityRe = new RegExp(`(${Object.keys(entityList).sort((a, b)=>b.length - a.length).join("|")})`, "g");
+ entityListRegexCache.set(entityList, entityRe);
+ }
+ return str.replaceAll(entityRe, (m)=>entityList[m]).replaceAll(RX_DEC_ENTITY, (_, dec)=>codePointStrToChar(dec, 10)).replaceAll(RX_HEX_ENTITY, (_, hex)=>codePointStrToChar(hex, 16));
+}
+function codePointStrToChar(codePointStr, radix) {
+ const codePoint = parseInt(codePointStr, radix);
+ return codePoint > MAX_CODE_POINT ? "�" : String.fromCodePoint(codePoint);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHRtbC8xLjAuNC9lbnRpdGllcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKiogT2JqZWN0IHN0cnVjdHVyZSBmb3IgYSBsaXN0IG9mIEhUTUwgZW50aXRpZXMuICovXG5leHBvcnQgdHlwZSBFbnRpdHlMaXN0ID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuY29uc3QgcmF3VG9FbnRpdHlFbnRyaWVzID0gW1xuICBbXCImXCIsIFwiJmFtcDtcIl0sXG4gIFtcIjxcIiwgXCImbHQ7XCJdLFxuICBbXCI+XCIsIFwiJmd0O1wiXSxcbiAgWydcIicsIFwiJnF1b3Q7XCJdLFxuICBbXCInXCIsIFwiJiMzOTtcIl0sXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBkZWZhdWx0RW50aXR5TGlzdDogRW50aXR5TGlzdCA9IE9iamVjdC5mcm9tRW50cmllcyhbXG4gIC4uLnJhd1RvRW50aXR5RW50cmllcy5tYXAoKFtyYXcsIGVudGl0eV0pID0+IFtlbnRpdHksIHJhd10pLFxuICBbXCImYXBvcztcIiwgXCInXCJdLFxuICBbXCImbmJzcDtcIiwgXCJcXHhhMFwiXSxcbl0pO1xuXG5jb25zdCByYXdUb0VudGl0eSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KHJhd1RvRW50aXR5RW50cmllcyk7XG5cbmNvbnN0IHJhd1JlID0gbmV3IFJlZ0V4cChgWyR7Wy4uLnJhd1RvRW50aXR5LmtleXMoKV0uam9pbihcIlwiKX1dYCwgXCJnXCIpO1xuXG4vKipcbiAqIEVzY2FwZXMgdGV4dCBmb3Igc2FmZSBpbnRlcnBvbGF0aW9uIGludG8gSFRNTCB0ZXh0IGNvbnRlbnQgYW5kIHF1b3RlZCBhdHRyaWJ1dGVzLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSBcIkBzdGQvaHRtbC9lbnRpdGllc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGVzY2FwZShcIjw+JyZBQVwiKSwgXCImbHQ7Jmd0OyYjMzk7JmFtcDtBQVwiKTtcbiAqXG4gKiAvLyBDaGFyYWN0ZXJzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBlc2NhcGVkIHdpbGwgYmUgbGVmdCBhbG9uZSxcbiAqIC8vIGV2ZW4gaWYgbmFtZWQgSFRNTCBlbnRpdGllcyBleGlzdCBmb3IgdGhlbS5cbiAqIGFzc2VydEVxdWFscyhlc2NhcGUoXCLDvsOwXCIpLCBcIsO+w7BcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKHJhd1JlLCAobSkgPT4gcmF3VG9FbnRpdHkuZ2V0KG0pISk7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIHVuZXNjYXBlfS4gKi9cbmV4cG9ydCB0eXBlIFVuZXNjYXBlT3B0aW9ucyA9IHsgZW50aXR5TGlzdDogRW50aXR5TGlzdCB9O1xuXG5jb25zdCBkZWZhdWx0VW5lc2NhcGVPcHRpb25zOiBVbmVzY2FwZU9wdGlvbnMgPSB7XG4gIGVudGl0eUxpc3Q6IGRlZmF1bHRFbnRpdHlMaXN0LFxufTtcblxuY29uc3QgTUFYX0NPREVfUE9JTlQgPSAweDEwZmZmZjtcblxuY29uc3QgUlhfREVDX0VOVElUWSA9IC8mIyhbMC05XSspOy9nO1xuY29uc3QgUlhfSEVYX0VOVElUWSA9IC8mI3goXFxwe0FIZXh9Kyk7L2d1O1xuXG5jb25zdCBlbnRpdHlMaXN0UmVnZXhDYWNoZSA9IG5ldyBXZWFrTWFwPEVudGl0eUxpc3QsIFJlZ0V4cD4oKTtcblxuLyoqXG4gKiBVbmVzY2FwZXMgSFRNTCBlbnRpdGllcyBpbiB0ZXh0LlxuICpcbiAqIERlZmF1bHQgb3B0aW9ucyBvbmx5IGhhbmRsZSBgJjw+J1wiYCBhbmQgbnVtZXJpYyBlbnRpdGllcy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHVuZXNjYXBlIH0gZnJvbSBcIkBzdGQvaHRtbC9lbnRpdGllc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKFwiJmx0OyZndDsmIzM5OyZhbXA7QUFcIiksIFwiPD4nJkFBXCIpO1xuICogYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKFwiJnRob3JuOyZldGg7XCIpLCBcIiZ0aG9ybjsmZXRoO1wiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFVzaW5nIGEgY3VzdG9tIGVudGl0eSBsaXN0XG4gKlxuICogVGhpcyB1c2VzIHRoZSBmdWxsIG5hbWVkIGVudGl0eSBsaXN0IGZyb20gdGhlIEhUTUwgc3BlYyAofjQ3SyB1bi1taW5pZmllZClcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdW5lc2NhcGUgfSBmcm9tIFwiQHN0ZC9odG1sL2VudGl0aWVzXCI7XG4gKiBpbXBvcnQgZW50aXR5TGlzdCBmcm9tIFwiQHN0ZC9odG1sL25hbWVkLWVudGl0eS1saXN0Lmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyh1bmVzY2FwZShcIiZsdDsmZ3Q7JiMzOTsmYW1wO0FBXCIsIHsgZW50aXR5TGlzdCB9KSwgXCI8PicmQUFcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gdW5lc2NhcGUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB1bmVzY2FwaW5nLlxuICogQHJldHVybnMgVGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZShcbiAgc3RyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBhcnRpYWw8VW5lc2NhcGVPcHRpb25zPiA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgeyBlbnRpdHlMaXN0IH0gPSB7IC4uLmRlZmF1bHRVbmVzY2FwZU9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBsZXQgZW50aXR5UmUgPSBlbnRpdHlMaXN0UmVnZXhDYWNoZS5nZXQoZW50aXR5TGlzdCk7XG5cbiAgaWYgKCFlbnRpdHlSZSkge1xuICAgIGVudGl0eVJlID0gbmV3IFJlZ0V4cChcbiAgICAgIGAoJHtcbiAgICAgICAgT2JqZWN0LmtleXMoZW50aXR5TGlzdClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgICAuam9pbihcInxcIilcbiAgICAgIH0pYCxcbiAgICAgIFwiZ1wiLFxuICAgICk7XG5cbiAgICBlbnRpdHlMaXN0UmVnZXhDYWNoZS5zZXQoZW50aXR5TGlzdCwgZW50aXR5UmUpO1xuICB9XG5cbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlQWxsKGVudGl0eVJlLCAobSkgPT4gZW50aXR5TGlzdFttXSEpXG4gICAgLnJlcGxhY2VBbGwoUlhfREVDX0VOVElUWSwgKF8sIGRlYykgPT4gY29kZVBvaW50U3RyVG9DaGFyKGRlYywgMTApKVxuICAgIC5yZXBsYWNlQWxsKFJYX0hFWF9FTlRJVFksIChfLCBoZXgpID0+IGNvZGVQb2ludFN0clRvQ2hhcihoZXgsIDE2KSk7XG59XG5cbmZ1bmN0aW9uIGNvZGVQb2ludFN0clRvQ2hhcihjb2RlUG9pbnRTdHI6IHN0cmluZywgcmFkaXg6IG51bWJlcikge1xuICBjb25zdCBjb2RlUG9pbnQgPSBwYXJzZUludChjb2RlUG9pbnRTdHIsIHJhZGl4KTtcblxuICByZXR1cm4gY29kZVBvaW50ID4gTUFYX0NPREVfUE9JTlQgPyBcIu+/vVwiIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLGtEQUFrRCxHQUdsRCxNQUFNLHFCQUFxQjtFQUN6QjtJQUFDO0lBQUs7R0FBUTtFQUNkO0lBQUM7SUFBSztHQUFPO0VBQ2I7SUFBQztJQUFLO0dBQU87RUFDYjtJQUFDO0lBQUs7R0FBUztFQUNmO0lBQUM7SUFBSztHQUFRO0NBQ2Y7QUFFRCxNQUFNLG9CQUFnQyxPQUFPLFdBQVcsQ0FBQztLQUNwRCxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sR0FBSztNQUFDO01BQVE7S0FBSTtFQUMxRDtJQUFDO0lBQVU7R0FBSTtFQUNmO0lBQUM7SUFBVTtHQUFPO0NBQ25CO0FBRUQsTUFBTSxjQUFjLElBQUksSUFBb0I7QUFFNUMsTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRTtLQUFJLFlBQVksSUFBSTtDQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFFbEU7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sR0FBVztFQUNoQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFNLFlBQVksR0FBRyxDQUFDO0FBQ3REO0FBS0EsTUFBTSx5QkFBMEM7RUFDOUMsWUFBWTtBQUNkO0FBRUEsTUFBTSxpQkFBaUI7QUFFdkIsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxnQkFBZ0I7QUFFdEIsTUFBTSx1QkFBdUIsSUFBSTtBQUVqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QkMsR0FDRCxPQUFPLFNBQVMsU0FDZCxHQUFXLEVBQ1gsVUFBb0MsQ0FBQyxDQUFDO0VBRXRDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRztJQUFFLEdBQUcsc0JBQXNCO0lBQUUsR0FBRyxPQUFPO0VBQUM7RUFFL0QsSUFBSSxXQUFXLHFCQUFxQixHQUFHLENBQUM7RUFFeEMsSUFBSSxDQUFDLFVBQVU7SUFDYixXQUFXLElBQUksT0FDYixDQUFDLENBQUMsRUFDQSxPQUFPLElBQUksQ0FBQyxZQUNULElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFDbEMsSUFBSSxDQUFDLEtBQ1QsQ0FBQyxDQUFDLEVBQ0g7SUFHRixxQkFBcUIsR0FBRyxDQUFDLFlBQVk7RUFDdkM7RUFFQSxPQUFPLElBQ0osVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQ3pDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFRLG1CQUFtQixLQUFLLEtBQzlELFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFRLG1CQUFtQixLQUFLO0FBQ25FO0FBRUEsU0FBUyxtQkFBbUIsWUFBb0IsRUFBRSxLQUFhO0VBQzdELE1BQU0sWUFBWSxTQUFTLGNBQWM7RUFFekMsT0FBTyxZQUFZLGlCQUFpQixNQUFNLE9BQU8sYUFBYSxDQUFDO0FBQ2pFIn0=
+// denoCacheMetadata=9910753934585003460,7211462811621688976 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d1a28cffd932ac7e2195b10c3497bf832935d5d3a7dde0770ae98a9728fada08.js b/vendor/gen/https/jsr.io/d1a28cffd932ac7e2195b10c3497bf832935d5d3a7dde0770ae98a9728fada08.js
new file mode 100644
index 0000000..361bbe1
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d1a28cffd932ac7e2195b10c3497bf832935d5d3a7dde0770ae98a9728fada08.js
@@ -0,0 +1,63 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./constants.ts";
+// Resolves . and .. elements in a path with directory names
+export function normalizeString(path, allowAboveRoot, separator, isPathSeparator) {
+ let res = "";
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let code;
+ for(let i = 0; i <= path.length; ++i){
+ if (i < path.length) code = path.charCodeAt(i);
+ else if (isPathSeparator(code)) break;
+ else code = CHAR_FORWARD_SLASH;
+ if (isPathSeparator(code)) {
+ if (lastSlash === i - 1 || dots === 1) {
+ // NOOP
+ } else if (lastSlash !== i - 1 && dots === 2) {
+ if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf(separator);
+ if (lastSlashIndex === -1) {
+ res = "";
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
+ }
+ lastSlash = i;
+ dots = 0;
+ continue;
+ } else if (res.length === 2 || res.length === 1) {
+ res = "";
+ lastSegmentLength = 0;
+ lastSlash = i;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ if (res.length > 0) res += `${separator}..`;
+ else res = "..";
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);
+ else res = path.slice(lastSlash + 1, i);
+ lastSegmentLength = i - lastSlash - 1;
+ }
+ lastSlash = i;
+ dots = 0;
+ } else if (code === CHAR_DOT && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL25vcm1hbGl6ZV9zdHJpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgQ0hBUl9ET1QsIENIQVJfRk9SV0FSRF9TTEFTSCB9IGZyb20gXCIuL2NvbnN0YW50cy50c1wiO1xuXG4vLyBSZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggd2l0aCBkaXJlY3RvcnkgbmFtZXNcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcoXG4gIHBhdGg6IHN0cmluZyxcbiAgYWxsb3dBYm92ZVJvb3Q6IGJvb2xlYW4sXG4gIHNlcGFyYXRvcjogc3RyaW5nLFxuICBpc1BhdGhTZXBhcmF0b3I6IChjb2RlOiBudW1iZXIpID0+IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICBsZXQgcmVzID0gXCJcIjtcbiAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgbGV0IGxhc3RTbGFzaCA9IC0xO1xuICBsZXQgZG90cyA9IDA7XG4gIGxldCBjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaSA8IHBhdGgubGVuZ3RoKSBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlISkpIGJyZWFrO1xuICAgIGVsc2UgY29kZSA9IENIQVJfRk9SV0FSRF9TTEFTSDtcblxuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSEpKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpIC0gMSB8fCBkb3RzID09PSAxKSB7XG4gICAgICAgIC8vIE5PT1BcbiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpIC0gMSAmJiBkb3RzID09PSAyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXMubGVuZ3RoIDwgMiB8fFxuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSBDSEFSX0RPVCB8fFxuICAgICAgICAgIHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAyKSAhPT0gQ0hBUl9ET1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDIgfHwgcmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHJlcyArPSBgJHtzZXBhcmF0b3J9Li5gO1xuICAgICAgICAgIGVsc2UgcmVzID0gXCIuLlwiO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSByZXMgKz0gc2VwYXJhdG9yICsgcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgZWxzZSByZXMgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgIGRvdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gQ0hBUl9ET1QgJiYgZG90cyAhPT0gLTEpIHtcbiAgICAgICsrZG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHFDQUFxQztBQUVyQyxTQUFTLFFBQVEsRUFBRSxrQkFBa0IsUUFBUSxpQkFBaUI7QUFFOUQsNERBQTREO0FBQzVELE9BQU8sU0FBUyxnQkFDZCxJQUFZLEVBQ1osY0FBdUIsRUFDdkIsU0FBaUIsRUFDakIsZUFBMEM7RUFFMUMsSUFBSSxNQUFNO0VBQ1YsSUFBSSxvQkFBb0I7RUFDeEIsSUFBSSxZQUFZLENBQUM7RUFDakIsSUFBSSxPQUFPO0VBQ1gsSUFBSTtFQUNKLElBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLE1BQU0sRUFBRSxFQUFFLEVBQUc7SUFDckMsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLE9BQU8sS0FBSyxVQUFVLENBQUM7U0FDdkMsSUFBSSxnQkFBZ0IsT0FBUTtTQUM1QixPQUFPO0lBRVosSUFBSSxnQkFBZ0IsT0FBUTtNQUMxQixJQUFJLGNBQWMsSUFBSSxLQUFLLFNBQVMsR0FBRztNQUNyQyxPQUFPO01BQ1QsT0FBTyxJQUFJLGNBQWMsSUFBSSxLQUFLLFNBQVMsR0FBRztRQUM1QyxJQUNFLElBQUksTUFBTSxHQUFHLEtBQ2Isc0JBQXNCLEtBQ3RCLElBQUksVUFBVSxDQUFDLElBQUksTUFBTSxHQUFHLE9BQU8sWUFDbkMsSUFBSSxVQUFVLENBQUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxVQUNuQztVQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsR0FBRztZQUNsQixNQUFNLGlCQUFpQixJQUFJLFdBQVcsQ0FBQztZQUN2QyxJQUFJLG1CQUFtQixDQUFDLEdBQUc7Y0FDekIsTUFBTTtjQUNOLG9CQUFvQjtZQUN0QixPQUFPO2NBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHO2NBQ25CLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDO1lBQ3ZEO1lBQ0EsWUFBWTtZQUNaLE9BQU87WUFDUDtVQUNGLE9BQU8sSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLEdBQUc7WUFDL0MsTUFBTTtZQUNOLG9CQUFvQjtZQUNwQixZQUFZO1lBQ1osT0FBTztZQUNQO1VBQ0Y7UUFDRjtRQUNBLElBQUksZ0JBQWdCO1VBQ2xCLElBQUksSUFBSSxNQUFNLEdBQUcsR0FBRyxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7ZUFDdEMsTUFBTTtVQUNYLG9CQUFvQjtRQUN0QjtNQUNGLE9BQU87UUFDTCxJQUFJLElBQUksTUFBTSxHQUFHLEdBQUcsT0FBTyxZQUFZLEtBQUssS0FBSyxDQUFDLFlBQVksR0FBRzthQUM1RCxNQUFNLEtBQUssS0FBSyxDQUFDLFlBQVksR0FBRztRQUNyQyxvQkFBb0IsSUFBSSxZQUFZO01BQ3RDO01BQ0EsWUFBWTtNQUNaLE9BQU87SUFDVCxPQUFPLElBQUksU0FBUyxZQUFZLFNBQVMsQ0FBQyxHQUFHO01BQzNDLEVBQUU7SUFDSixPQUFPO01BQ0wsT0FBTyxDQUFDO0lBQ1Y7RUFDRjtFQUNBLE9BQU87QUFDVCJ9
+// denoCacheMetadata=9501868522652898936,11766380831951928653 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d20b5f91a0f87c99ad77b39a05130c575462a7d0c85cdc29f3994df327f1f683.js b/vendor/gen/https/jsr.io/d20b5f91a0f87c99ad77b39a05130c575462a7d0c85cdc29f3994df327f1f683.js
new file mode 100644
index 0000000..815eaa3
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d20b5f91a0f87c99ad77b39a05130c575462a7d0c85cdc29f3994df327f1f683.js
@@ -0,0 +1,22 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Provides tools for working with
+ * {@link https://code.visualstudio.com/docs/languages/json#_json-with-comments | JSONC}
+ * (JSON with comments).
+ *
+ * Currently, this module only provides a means of parsing JSONC. JSONC
+ * serialization is not yet supported.
+ *
+ * ```ts
+ * import { parse } from "@std/jsonc";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(parse('{"foo": "bar", } // comment'), { foo: "bar" });
+ * assertEquals(parse('{"foo": "bar", } /* comment *\/'), { foo: "bar" });
+ * ```
+ *
+ * @module
+ */ export * from "./parse.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvanNvbmMvMS4wLjIvbW9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogUHJvdmlkZXMgdG9vbHMgZm9yIHdvcmtpbmcgd2l0aFxuICoge0BsaW5rIGh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tL2RvY3MvbGFuZ3VhZ2VzL2pzb24jX2pzb24td2l0aC1jb21tZW50cyB8IEpTT05DfVxuICogKEpTT04gd2l0aCBjb21tZW50cykuXG4gKlxuICogQ3VycmVudGx5LCB0aGlzIG1vZHVsZSBvbmx5IHByb3ZpZGVzIGEgbWVhbnMgb2YgcGFyc2luZyBKU09OQy4gSlNPTkNcbiAqIHNlcmlhbGl6YXRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBzdGQvanNvbmNcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhwYXJzZSgne1wiZm9vXCI6IFwiYmFyXCIsIH0gLy8gY29tbWVudCcpLCB7IGZvbzogXCJiYXJcIiB9KTtcbiAqIGFzc2VydEVxdWFscyhwYXJzZSgne1wiZm9vXCI6IFwiYmFyXCIsIH0gLyogY29tbWVudCAqXFwvJyksIHsgZm9vOiBcImJhclwiIH0pO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9wYXJzZS50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBQ0QsY0FBYyxhQUFhIn0=
+// denoCacheMetadata=2644297559304325782,10846175827182115339 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d284c0b38d5698704caef2b0deb1a25ef5082748b28a14bd398e4b12ff038284.js b/vendor/gen/https/jsr.io/d284c0b38d5698704caef2b0deb1a25ef5082748b28a14bd398e4b12ff038284.js
new file mode 100644
index 0000000..d37e23b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d284c0b38d5698704caef2b0deb1a25ef5082748b28a14bd398e4b12ff038284.js
@@ -0,0 +1,214 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+// This module is generated from {@link https://www.iana.org/assignments/http-methods/http-methods.xhtml#methods | IANA Hypertext Transfer Protocol (HTTP) Method Registry}
+/**
+ * HTTP Methods derived from IANA Hypertext Transfer Protocol (HTTP) Method Registry
+ *
+ * @experimental **UNSTABLE**: New API, yet to be vetted.
+ *
+ * @see {@link https://www.iana.org/assignments/http-methods/http-methods.xhtml#methods | IANA Hypertext Transfer Protocol (HTTP) Method Registry}
+ */ export const METHOD = {
+ /**
+ * ACL (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3744 | RFC3744, Section 8.1}
+ */ Acl: "ACL",
+ /**
+ * BASELINE-CONTROL (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 12.6}
+ */ BaselineControl: "BASELINE-CONTROL",
+ /**
+ * BIND (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc5842 | RFC5842, Section 4}
+ */ Bind: "BIND",
+ /**
+ * CHECKIN (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 4.4, Section 9.4}
+ */ Checkin: "CHECKIN",
+ /**
+ * CHECKOUT (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 4.3, Section 8.8}
+ */ Checkout: "CHECKOUT",
+ /**
+ * CONNECT (Safe: no; Idempotent: no)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.6}
+ */ Connect: "CONNECT",
+ /**
+ * COPY (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.8}
+ */ Copy: "COPY",
+ /**
+ * DELETE (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.5}
+ */ Delete: "DELETE",
+ /**
+ * GET (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.1}
+ */ Get: "GET",
+ /**
+ * HEAD (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.2}
+ */ Head: "HEAD",
+ /**
+ * LABEL (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 8.2}
+ */ Label: "LABEL",
+ /**
+ * LINK (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc2068 | RFC2068, Section 19.6.1.2}
+ */ Link: "LINK",
+ /**
+ * LOCK (Safe: no; Idempotent: no)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.10}
+ */ Lock: "LOCK",
+ /**
+ * MERGE (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 11.2}
+ */ Merge: "MERGE",
+ /**
+ * MKACTIVITY (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 13.5}
+ */ Mkactivity: "MKACTIVITY",
+ /**
+ * MKCALENDAR (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4791 | RFC4791, Section 5.3.1}
+ * @see {@link https://www.iana.org/go/rfc8144 | RFC8144, Section 2.3}
+ */ Mkcalendar: "MKCALENDAR",
+ /**
+ * MKCOL (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.3}
+ * @see {@link https://www.iana.org/go/rfc5689 | RFC5689, Section 3}
+ * @see {@link https://www.iana.org/go/rfc8144 | RFC8144, Section 2.3}
+ */ Mkcol: "MKCOL",
+ /**
+ * MKREDIRECTREF (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4437 | RFC4437, Section 6}
+ */ Mkredirectref: "MKREDIRECTREF",
+ /**
+ * MKWORKSPACE (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 6.3}
+ */ Mkworkspace: "MKWORKSPACE",
+ /**
+ * MOVE (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.9}
+ */ Move: "MOVE",
+ /**
+ * OPTIONS (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.7}
+ */ Options: "OPTIONS",
+ /**
+ * ORDERPATCH (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3648 | RFC3648, Section 7}
+ */ Orderpatch: "ORDERPATCH",
+ /**
+ * PATCH (Safe: no; Idempotent: no)
+ *
+ * @see {@link https://www.iana.org/go/rfc5789 | RFC5789, Section 2}
+ */ Patch: "PATCH",
+ /**
+ * POST (Safe: no; Idempotent: no)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.3}
+ */ Post: "POST",
+ /**
+ * PRI (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9113 | RFC9113, Section 3.4}
+ */ Pri: "PRI",
+ /**
+ * PROPFIND (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.1}
+ * @see {@link https://www.iana.org/go/rfc8144 | RFC8144, Section 2.1}
+ */ Propfind: "PROPFIND",
+ /**
+ * PROPPATCH (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.2}
+ * @see {@link https://www.iana.org/go/rfc8144 | RFC8144, Section 2.2}
+ */ Proppatch: "PROPPATCH",
+ /**
+ * PUT (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.4}
+ */ Put: "PUT",
+ /**
+ * REBIND (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc5842 | RFC5842, Section 6}
+ */ Rebind: "REBIND",
+ /**
+ * REPORT (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 3.6}
+ * @see {@link https://www.iana.org/go/rfc8144 | RFC8144, Section 2.1}
+ */ Report: "REPORT",
+ /**
+ * SEARCH (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc5323 | RFC5323, Section 2}
+ */ Search: "SEARCH",
+ /**
+ * TRACE (Safe: yes; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc9110 | RFC9110, Section 9.3.8}
+ */ Trace: "TRACE",
+ /**
+ * UNBIND (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc5842 | RFC5842, Section 5}
+ */ Unbind: "UNBIND",
+ /**
+ * UNCHECKOUT (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 4.5}
+ */ Uncheckout: "UNCHECKOUT",
+ /**
+ * UNLINK (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc2068 | RFC2068, Section 19.6.1.3}
+ */ Unlink: "UNLINK",
+ /**
+ * UNLOCK (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4918 | RFC4918, Section 9.11}
+ */ Unlock: "UNLOCK",
+ /**
+ * UPDATE (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 7.1}
+ */ Update: "UPDATE",
+ /**
+ * UPDATEREDIRECTREF (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc4437 | RFC4437, Section 7}
+ */ Updateredirectref: "UPDATEREDIRECTREF",
+ /**
+ * VERSION-CONTROL (Safe: no; Idempotent: yes)
+ *
+ * @see {@link https://www.iana.org/go/rfc3253 | RFC3253, Section 3.5}
+ */ VersionControl: "VERSION-CONTROL"
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHR0cC8xLjAuMTYvdW5zdGFibGVfbWV0aG9kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4vLyBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1tZXRob2RzL2h0dHAtbWV0aG9kcy54aHRtbCNtZXRob2RzIHwgSUFOQSBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgKEhUVFApIE1ldGhvZCBSZWdpc3RyeX1cblxuLyoqXG4gKiBIVFRQIE1ldGhvZHMgZGVyaXZlZCBmcm9tIElBTkEgSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIChIVFRQKSBNZXRob2QgUmVnaXN0cnlcbiAqXG4gKiBAZXhwZXJpbWVudGFsICoqVU5TVEFCTEUqKjogTmV3IEFQSSwgeWV0IHRvIGJlIHZldHRlZC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9odHRwLW1ldGhvZHMvaHR0cC1tZXRob2RzLnhodG1sI21ldGhvZHMgfCBJQU5BIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCAoSFRUUCkgTWV0aG9kIFJlZ2lzdHJ5fVxuICovXG5leHBvcnQgY29uc3QgTUVUSE9EID0ge1xuICAvKipcbiAgICogQUNMIChTYWZlOiBubzsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMzNzQ0IHwgUkZDMzc0NCwgU2VjdGlvbiA4LjF9XG4gICAqL1xuICBBY2w6IFwiQUNMXCIsXG5cbiAgLyoqXG4gICAqIEJBU0VMSU5FLUNPTlRST0wgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzMyNTMgfCBSRkMzMjUzLCBTZWN0aW9uIDEyLjZ9XG4gICAqL1xuICBCYXNlbGluZUNvbnRyb2w6IFwiQkFTRUxJTkUtQ09OVFJPTFwiLFxuXG4gIC8qKlxuICAgKiBCSU5EIChTYWZlOiBubzsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM1ODQyIHwgUkZDNTg0MiwgU2VjdGlvbiA0fVxuICAgKi9cbiAgQmluZDogXCJCSU5EXCIsXG5cbiAgLyoqXG4gICAqIENIRUNLSU4gKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzMyNTMgfCBSRkMzMjUzLCBTZWN0aW9uIDQuNCwgU2VjdGlvbiA5LjR9XG4gICAqL1xuICBDaGVja2luOiBcIkNIRUNLSU5cIixcblxuICAvKipcbiAgICogQ0hFQ0tPVVQgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzMyNTMgfCBSRkMzMjUzLCBTZWN0aW9uIDQuMywgU2VjdGlvbiA4Ljh9XG4gICAqL1xuICBDaGVja291dDogXCJDSEVDS09VVFwiLFxuXG4gIC8qKlxuICAgKiBDT05ORUNUIChTYWZlOiBubzsgSWRlbXBvdGVudDogbm8pXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDkuMy42fVxuICAgKi9cbiAgQ29ubmVjdDogXCJDT05ORUNUXCIsXG5cbiAgLyoqXG4gICAqIENPUFkgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkM0OTE4LCBTZWN0aW9uIDkuOH1cbiAgICovXG4gIENvcHk6IFwiQ09QWVwiLFxuXG4gIC8qKlxuICAgKiBERUxFVEUgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDkuMy41fVxuICAgKi9cbiAgRGVsZXRlOiBcIkRFTEVURVwiLFxuXG4gIC8qKlxuICAgKiBHRVQgKFNhZmU6IHllczsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiA5LjMuMX1cbiAgICovXG4gIEdldDogXCJHRVRcIixcblxuICAvKipcbiAgICogSEVBRCAoU2FmZTogeWVzOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDkuMy4yfVxuICAgKi9cbiAgSGVhZDogXCJIRUFEXCIsXG5cbiAgLyoqXG4gICAqIExBQkVMIChTYWZlOiBubzsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMzMjUzIHwgUkZDMzI1MywgU2VjdGlvbiA4LjJ9XG4gICAqL1xuICBMYWJlbDogXCJMQUJFTFwiLFxuXG4gIC8qKlxuICAgKiBMSU5LIChTYWZlOiBubzsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMyMDY4IHwgUkZDMjA2OCwgU2VjdGlvbiAxOS42LjEuMn1cbiAgICovXG4gIExpbms6IFwiTElOS1wiLFxuXG4gIC8qKlxuICAgKiBMT0NLIChTYWZlOiBubzsgSWRlbXBvdGVudDogbm8pXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkM0OTE4LCBTZWN0aW9uIDkuMTB9XG4gICAqL1xuICBMb2NrOiBcIkxPQ0tcIixcblxuICAvKipcbiAgICogTUVSR0UgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzMyNTMgfCBSRkMzMjUzLCBTZWN0aW9uIDExLjJ9XG4gICAqL1xuICBNZXJnZTogXCJNRVJHRVwiLFxuXG4gIC8qKlxuICAgKiBNS0FDVElWSVRZIChTYWZlOiBubzsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMzMjUzIHwgUkZDMzI1MywgU2VjdGlvbiAxMy41fVxuICAgKi9cbiAgTWthY3Rpdml0eTogXCJNS0FDVElWSVRZXCIsXG5cbiAgLyoqXG4gICAqIE1LQ0FMRU5EQVIgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ3OTEgfCBSRkM0NzkxLCBTZWN0aW9uIDUuMy4xfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4MTQ0IHwgUkZDODE0NCwgU2VjdGlvbiAyLjN9XG4gICAqL1xuICBNa2NhbGVuZGFyOiBcIk1LQ0FMRU5EQVJcIixcblxuICAvKipcbiAgICogTUtDT0wgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkM0OTE4LCBTZWN0aW9uIDkuM31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNTY4OSB8IFJGQzU2ODksIFNlY3Rpb24gM31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjODE0NCB8IFJGQzgxNDQsIFNlY3Rpb24gMi4zfVxuICAgKi9cbiAgTWtjb2w6IFwiTUtDT0xcIixcblxuICAvKipcbiAgICogTUtSRURJUkVDVFJFRiAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNDQzNyB8IFJGQzQ0MzcsIFNlY3Rpb24gNn1cbiAgICovXG4gIE1rcmVkaXJlY3RyZWY6IFwiTUtSRURJUkVDVFJFRlwiLFxuXG4gIC8qKlxuICAgKiBNS1dPUktTUEFDRSAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMzI1MyB8IFJGQzMyNTMsIFNlY3Rpb24gNi4zfVxuICAgKi9cbiAgTWt3b3Jrc3BhY2U6IFwiTUtXT1JLU1BBQ0VcIixcblxuICAvKipcbiAgICogTU9WRSAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNDkxOCB8IFJGQzQ5MTgsIFNlY3Rpb24gOS45fVxuICAgKi9cbiAgTW92ZTogXCJNT1ZFXCIsXG5cbiAgLyoqXG4gICAqIE9QVElPTlMgKFNhZmU6IHllczsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM5MTEwIHwgUkZDOTExMCwgU2VjdGlvbiA5LjMuN31cbiAgICovXG4gIE9wdGlvbnM6IFwiT1BUSU9OU1wiLFxuXG4gIC8qKlxuICAgKiBPUkRFUlBBVENIIChTYWZlOiBubzsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmMzNjQ4IHwgUkZDMzY0OCwgU2VjdGlvbiA3fVxuICAgKi9cbiAgT3JkZXJwYXRjaDogXCJPUkRFUlBBVENIXCIsXG5cbiAgLyoqXG4gICAqIFBBVENIIChTYWZlOiBubzsgSWRlbXBvdGVudDogbm8pXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzU3ODkgfCBSRkM1Nzg5LCBTZWN0aW9uIDJ9XG4gICAqL1xuICBQYXRjaDogXCJQQVRDSFwiLFxuXG4gIC8qKlxuICAgKiBQT1NUIChTYWZlOiBubzsgSWRlbXBvdGVudDogbm8pXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTAgfCBSRkM5MTEwLCBTZWN0aW9uIDkuMy4zfVxuICAgKi9cbiAgUG9zdDogXCJQT1NUXCIsXG5cbiAgLyoqXG4gICAqIFBSSSAoU2FmZTogeWVzOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzkxMTMgfCBSRkM5MTEzLCBTZWN0aW9uIDMuNH1cbiAgICovXG4gIFByaTogXCJQUklcIixcblxuICAvKipcbiAgICogUFJPUEZJTkQgKFNhZmU6IHllczsgSWRlbXBvdGVudDogeWVzKVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM0OTE4IHwgUkZDNDkxOCwgU2VjdGlvbiA5LjF9XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzgxNDQgfCBSRkM4MTQ0LCBTZWN0aW9uIDIuMX1cbiAgICovXG4gIFByb3BmaW5kOiBcIlBST1BGSU5EXCIsXG5cbiAgLyoqXG4gICAqIFBST1BQQVRDSCAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNDkxOCB8IFJGQzQ5MTgsIFNlY3Rpb24gOS4yfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4MTQ0IHwgUkZDODE0NCwgU2VjdGlvbiAyLjJ9XG4gICAqL1xuICBQcm9wcGF0Y2g6IFwiUFJPUFBBVENIXCIsXG5cbiAgLyoqXG4gICAqIFBVVCAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gOS4zLjR9XG4gICAqL1xuICBQdXQ6IFwiUFVUXCIsXG5cbiAgLyoqXG4gICAqIFJFQklORCAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNTg0MiB8IFJGQzU4NDIsIFNlY3Rpb24gNn1cbiAgICovXG4gIFJlYmluZDogXCJSRUJJTkRcIixcblxuICAvKipcbiAgICogUkVQT1JUIChTYWZlOiB5ZXM7IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMzI1MyB8IFJGQzMyNTMsIFNlY3Rpb24gMy42fVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5pYW5hLm9yZy9nby9yZmM4MTQ0IHwgUkZDODE0NCwgU2VjdGlvbiAyLjF9XG4gICAqL1xuICBSZXBvcnQ6IFwiUkVQT1JUXCIsXG5cbiAgLyoqXG4gICAqIFNFQVJDSCAoU2FmZTogeWVzOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzUzMjMgfCBSRkM1MzIzLCBTZWN0aW9uIDJ9XG4gICAqL1xuICBTZWFyY2g6IFwiU0VBUkNIXCIsXG5cbiAgLyoqXG4gICAqIFRSQUNFIChTYWZlOiB5ZXM7IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjOTExMCB8IFJGQzkxMTAsIFNlY3Rpb24gOS4zLjh9XG4gICAqL1xuICBUcmFjZTogXCJUUkFDRVwiLFxuXG4gIC8qKlxuICAgKiBVTkJJTkQgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzU4NDIgfCBSRkM1ODQyLCBTZWN0aW9uIDV9XG4gICAqL1xuICBVbmJpbmQ6IFwiVU5CSU5EXCIsXG5cbiAgLyoqXG4gICAqIFVOQ0hFQ0tPVVQgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzMyNTMgfCBSRkMzMjUzLCBTZWN0aW9uIDQuNX1cbiAgICovXG4gIFVuY2hlY2tvdXQ6IFwiVU5DSEVDS09VVFwiLFxuXG4gIC8qKlxuICAgKiBVTkxJTksgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzIwNjggfCBSRkMyMDY4LCBTZWN0aW9uIDE5LjYuMS4zfVxuICAgKi9cbiAgVW5saW5rOiBcIlVOTElOS1wiLFxuXG4gIC8qKlxuICAgKiBVTkxPQ0sgKFNhZmU6IG5vOyBJZGVtcG90ZW50OiB5ZXMpXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LmlhbmEub3JnL2dvL3JmYzQ5MTggfCBSRkM0OTE4LCBTZWN0aW9uIDkuMTF9XG4gICAqL1xuICBVbmxvY2s6IFwiVU5MT0NLXCIsXG5cbiAgLyoqXG4gICAqIFVQREFURSAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMzI1MyB8IFJGQzMyNTMsIFNlY3Rpb24gNy4xfVxuICAgKi9cbiAgVXBkYXRlOiBcIlVQREFURVwiLFxuXG4gIC8qKlxuICAgKiBVUERBVEVSRURJUkVDVFJFRiAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjNDQzNyB8IFJGQzQ0MzcsIFNlY3Rpb24gN31cbiAgICovXG4gIFVwZGF0ZXJlZGlyZWN0cmVmOiBcIlVQREFURVJFRElSRUNUUkVGXCIsXG5cbiAgLyoqXG4gICAqIFZFUlNJT04tQ09OVFJPTCAoU2FmZTogbm87IElkZW1wb3RlbnQ6IHllcylcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuaWFuYS5vcmcvZ28vcmZjMzI1MyB8IFJGQzMyNTMsIFNlY3Rpb24gMy41fVxuICAgKi9cbiAgVmVyc2lvbkNvbnRyb2w6IFwiVkVSU0lPTi1DT05UUk9MXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEEgSFRUUCBNZXRob2RcbiAqXG4gKiBAZXhwZXJpbWVudGFsICoqVU5TVEFCTEUqKjogTmV3IEFQSSwgeWV0IHRvIGJlIHZldHRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgTWV0aG9kID0gdHlwZW9mIE1FVEhPRFtrZXlvZiB0eXBlb2YgTUVUSE9EXTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBQ3JDLDJLQUEySztBQUUzSzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU0sU0FBUztFQUNwQjs7OztHQUlDLEdBQ0QsS0FBSztFQUVMOzs7O0dBSUMsR0FDRCxpQkFBaUI7RUFFakI7Ozs7R0FJQyxHQUNELE1BQU07RUFFTjs7OztHQUlDLEdBQ0QsU0FBUztFQUVUOzs7O0dBSUMsR0FDRCxVQUFVO0VBRVY7Ozs7R0FJQyxHQUNELFNBQVM7RUFFVDs7OztHQUlDLEdBQ0QsTUFBTTtFQUVOOzs7O0dBSUMsR0FDRCxRQUFRO0VBRVI7Ozs7R0FJQyxHQUNELEtBQUs7RUFFTDs7OztHQUlDLEdBQ0QsTUFBTTtFQUVOOzs7O0dBSUMsR0FDRCxPQUFPO0VBRVA7Ozs7R0FJQyxHQUNELE1BQU07RUFFTjs7OztHQUlDLEdBQ0QsTUFBTTtFQUVOOzs7O0dBSUMsR0FDRCxPQUFPO0VBRVA7Ozs7R0FJQyxHQUNELFlBQVk7RUFFWjs7Ozs7R0FLQyxHQUNELFlBQVk7RUFFWjs7Ozs7O0dBTUMsR0FDRCxPQUFPO0VBRVA7Ozs7R0FJQyxHQUNELGVBQWU7RUFFZjs7OztHQUlDLEdBQ0QsYUFBYTtFQUViOzs7O0dBSUMsR0FDRCxNQUFNO0VBRU47Ozs7R0FJQyxHQUNELFNBQVM7RUFFVDs7OztHQUlDLEdBQ0QsWUFBWTtFQUVaOzs7O0dBSUMsR0FDRCxPQUFPO0VBRVA7Ozs7R0FJQyxHQUNELE1BQU07RUFFTjs7OztHQUlDLEdBQ0QsS0FBSztFQUVMOzs7OztHQUtDLEdBQ0QsVUFBVTtFQUVWOzs7OztHQUtDLEdBQ0QsV0FBVztFQUVYOzs7O0dBSUMsR0FDRCxLQUFLO0VBRUw7Ozs7R0FJQyxHQUNELFFBQVE7RUFFUjs7Ozs7R0FLQyxHQUNELFFBQVE7RUFFUjs7OztHQUlDLEdBQ0QsUUFBUTtFQUVSOzs7O0dBSUMsR0FDRCxPQUFPO0VBRVA7Ozs7R0FJQyxHQUNELFFBQVE7RUFFUjs7OztHQUlDLEdBQ0QsWUFBWTtFQUVaOzs7O0dBSUMsR0FDRCxRQUFRO0VBRVI7Ozs7R0FJQyxHQUNELFFBQVE7RUFFUjs7OztHQUlDLEdBQ0QsUUFBUTtFQUVSOzs7O0dBSUMsR0FDRCxtQkFBbUI7RUFFbkI7Ozs7R0FJQyxHQUNELGdCQUFnQjtBQUNsQixFQUFXIn0=
+// denoCacheMetadata=18034263677883797545,7191391916459398733 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d31abe7d26b93fcfed50f679445732e9683ba27d600a0859738e51a99175ed8f.js b/vendor/gen/https/jsr.io/d31abe7d26b93fcfed50f679445732e9683ba27d600a0859738e51a99175ed8f.js
new file mode 100644
index 0000000..840f4c5
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d31abe7d26b93fcfed50f679445732e9683ba27d600a0859738e51a99175ed8f.js
@@ -0,0 +1,20 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { isPlainObject } from "../_utils.ts";
+function resolveYamlPairs(data) {
+ if (data === null) return true;
+ return data.every((it)=>isPlainObject(it) && Object.keys(it).length === 1);
+}
+export const pairs = {
+ tag: "tag:yaml.org,2002:pairs",
+ construct (data) {
+ // Converts an array of objects into an array of key-value pairs.
+ return data?.flatMap(Object.entries) ?? [];
+ },
+ kind: "sequence",
+ resolve: resolveYamlPairs
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9wYWlycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiLi4vX3R5cGUudHNcIjtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiLi4vX3V0aWxzLnRzXCI7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YTogdW5rbm93bltdW10pOiBib29sZWFuIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZGF0YS5ldmVyeSgoaXQpID0+IGlzUGxhaW5PYmplY3QoaXQpICYmIE9iamVjdC5rZXlzKGl0KS5sZW5ndGggPT09IDEpO1xufVxuXG5leHBvcnQgY29uc3QgcGFpcnM6IFR5cGU8XCJzZXF1ZW5jZVwiPiA9IHtcbiAgdGFnOiBcInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzXCIsXG4gIGNvbnN0cnVjdChkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgbnVsbCk6IFtzdHJpbmcsIHVua25vd25dW10ge1xuICAgIC8vIENvbnZlcnRzIGFuIGFycmF5IG9mIG9iamVjdHMgaW50byBhbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAgcmV0dXJuIGRhdGE/LmZsYXRNYXAoT2JqZWN0LmVudHJpZXMpID8/IFtdO1xuICB9LFxuICBraW5kOiBcInNlcXVlbmNlXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvRkFBb0Y7QUFDcEYsMEVBQTBFO0FBQzFFLHFEQUFxRDtBQUdyRCxTQUFTLGFBQWEsUUFBUSxlQUFlO0FBRTdDLFNBQVMsaUJBQWlCLElBQWlCO0VBQ3pDLElBQUksU0FBUyxNQUFNLE9BQU87RUFDMUIsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQU8sY0FBYyxPQUFPLE9BQU8sSUFBSSxDQUFDLElBQUksTUFBTSxLQUFLO0FBQzVFO0FBRUEsT0FBTyxNQUFNLFFBQTBCO0VBQ3JDLEtBQUs7RUFDTCxXQUFVLElBQXNDO0lBQzlDLGlFQUFpRTtJQUNqRSxPQUFPLE1BQU0sUUFBUSxPQUFPLE9BQU8sS0FBSyxFQUFFO0VBQzVDO0VBQ0EsTUFBTTtFQUNOLFNBQVM7QUFDWCxFQUFFIn0=
+// denoCacheMetadata=10057837188069262499,17023145598712586771 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d3219b96fafc0b02f7f7775c919795c35e5f6e9119b484954ac57e3df1248f59.js b/vendor/gen/https/jsr.io/d3219b96fafc0b02f7f7775c919795c35e5f6e9119b484954ac57e3df1248f59.js
new file mode 100644
index 0000000..4cb6601
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d3219b96fafc0b02f7f7775c919795c35e5f6e9119b484954ac57e3df1248f59.js
@@ -0,0 +1,40 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertPath } from "./assert_path.ts";
+export function stripSuffix(name, suffix) {
+ if (suffix.length >= name.length) {
+ return name;
+ }
+ const lenDiff = name.length - suffix.length;
+ for(let i = suffix.length - 1; i >= 0; --i){
+ if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) {
+ return name;
+ }
+ }
+ return name.slice(0, -suffix.length);
+}
+export function lastPathSegment(path, isSep, start = 0) {
+ let matchedNonSeparator = false;
+ let end = path.length;
+ for(let i = path.length - 1; i >= start; --i){
+ if (isSep(path.charCodeAt(i))) {
+ if (matchedNonSeparator) {
+ start = i + 1;
+ break;
+ }
+ } else if (!matchedNonSeparator) {
+ matchedNonSeparator = true;
+ end = i + 1;
+ }
+ }
+ return path.slice(start, end);
+}
+export function assertArgs(path, suffix) {
+ assertPath(path);
+ if (path.length === 0) return path;
+ if (typeof suffix !== "string") {
+ throw new TypeError(`Suffix must be a string, received "${JSON.stringify(suffix)}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9fY29tbW9uL2Jhc2VuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi9hc3NlcnRfcGF0aC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBTdWZmaXgobmFtZTogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdWZmaXgubGVuZ3RoID49IG5hbWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBjb25zdCBsZW5EaWZmID0gbmFtZS5sZW5ndGggLSBzdWZmaXgubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSBzdWZmaXgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBpZiAobmFtZS5jaGFyQ29kZUF0KGxlbkRpZmYgKyBpKSAhPT0gc3VmZml4LmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3RQYXRoU2VnbWVudChcbiAgcGF0aDogc3RyaW5nLFxuICBpc1NlcDogKGNoYXI6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgc3RhcnQgPSAwLFxuKTogc3RyaW5nIHtcbiAgbGV0IG1hdGNoZWROb25TZXBhcmF0b3IgPSBmYWxzZTtcbiAgbGV0IGVuZCA9IHBhdGgubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgIGlmIChpc1NlcChwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICBpZiAobWF0Y2hlZE5vblNlcGFyYXRvcikge1xuICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFtYXRjaGVkTm9uU2VwYXJhdG9yKSB7XG4gICAgICBtYXRjaGVkTm9uU2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXJncyhwYXRoOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHBhdGg7XG4gIGlmICh0eXBlb2Ygc3VmZml4ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBTdWZmaXggbXVzdCBiZSBhIHN0cmluZywgcmVjZWl2ZWQgXCIke0pTT04uc3RyaW5naWZ5KHN1ZmZpeCl9XCJgLFxuICAgICk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsVUFBVSxRQUFRLG1CQUFtQjtBQUU5QyxPQUFPLFNBQVMsWUFBWSxJQUFZLEVBQUUsTUFBYztFQUN0RCxJQUFJLE9BQU8sTUFBTSxJQUFJLEtBQUssTUFBTSxFQUFFO0lBQ2hDLE9BQU87RUFDVDtFQUVBLE1BQU0sVUFBVSxLQUFLLE1BQU0sR0FBRyxPQUFPLE1BQU07RUFFM0MsSUFBSyxJQUFJLElBQUksT0FBTyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFHO0lBQzNDLElBQUksS0FBSyxVQUFVLENBQUMsVUFBVSxPQUFPLE9BQU8sVUFBVSxDQUFDLElBQUk7TUFDekQsT0FBTztJQUNUO0VBQ0Y7RUFFQSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLE1BQU07QUFDckM7QUFFQSxPQUFPLFNBQVMsZ0JBQ2QsSUFBWSxFQUNaLEtBQWdDLEVBQ2hDLFFBQVEsQ0FBQztFQUVULElBQUksc0JBQXNCO0VBQzFCLElBQUksTUFBTSxLQUFLLE1BQU07RUFFckIsSUFBSyxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsR0FBRyxLQUFLLE9BQU8sRUFBRSxFQUFHO0lBQzdDLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLO01BQzdCLElBQUkscUJBQXFCO1FBQ3ZCLFFBQVEsSUFBSTtRQUNaO01BQ0Y7SUFDRixPQUFPLElBQUksQ0FBQyxxQkFBcUI7TUFDL0Isc0JBQXNCO01BQ3RCLE1BQU0sSUFBSTtJQUNaO0VBQ0Y7RUFFQSxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87QUFDM0I7QUFFQSxPQUFPLFNBQVMsV0FBVyxJQUFZLEVBQUUsTUFBYztFQUNyRCxXQUFXO0VBQ1gsSUFBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLE9BQU87RUFDOUIsSUFBSSxPQUFPLFdBQVcsVUFBVTtJQUM5QixNQUFNLElBQUksVUFDUixDQUFDLG1DQUFtQyxFQUFFLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBRW5FO0FBQ0YifQ==
+// denoCacheMetadata=11810669894591115474,15625054205076490655 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d3745929d47019970406c35c201d22c399e2f5293d7a7cb59b8813dfda1bb82d.js b/vendor/gen/https/jsr.io/d3745929d47019970406c35c201d22c399e2f5293d7a7cb59b8813dfda1bb82d.js
new file mode 100644
index 0000000..b6cedd9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d3745929d47019970406c35c201d22c399e2f5293d7a7cb59b8813dfda1bb82d.js
@@ -0,0 +1,311 @@
+import { dirname, join } from "jsr:@std/path@^1.0.6";
+import { NativeLoader } from "./loader_native.ts";
+import { PortableLoader } from "./loader_portable.ts";
+import { findWorkspace, isInNodeModules } from "./shared.ts";
+import { esbuildResolutionToURL, isNodeModulesResolution, urlToEsbuildResolution } from "./shared.ts";
+const LOADERS = [
+ "native",
+ "portable"
+];
+/** The default loader to use. */ export const DEFAULT_LOADER = await Deno.permissions.query({
+ name: "run"
+}).then((res)=>res.state !== "granted") ? "portable" : "native";
+const BUILTIN_NODE_MODULES = new Set([
+ "assert",
+ "assert/strict",
+ "async_hooks",
+ "buffer",
+ "child_process",
+ "cluster",
+ "console",
+ "constants",
+ "crypto",
+ "dgram",
+ "diagnostics_channel",
+ "dns",
+ "dns/promises",
+ "domain",
+ "events",
+ "fs",
+ "fs/promises",
+ "http",
+ "http2",
+ "https",
+ "module",
+ "net",
+ "os",
+ "path",
+ "path/posix",
+ "path/win32",
+ "perf_hooks",
+ "process",
+ "punycode",
+ "querystring",
+ "repl",
+ "readline",
+ "stream",
+ "stream/consumers",
+ "stream/promises",
+ "stream/web",
+ "string_decoder",
+ "sys",
+ "test",
+ "timers",
+ "timers/promises",
+ "tls",
+ "tty",
+ "url",
+ "util",
+ "util/types",
+ "v8",
+ "vm",
+ "worker_threads",
+ "zlib"
+]);
+/**
+ * The Deno loader plugin for esbuild. This plugin will load fully qualified
+ * `file`, `http`, `https`, and `data` URLs.
+ *
+ * **Note** that this plugin does not do relative->absolute specifier
+ * resolution, or import map resolution. You must use the `denoResolverPlugin`
+ * _before_ the `denoLoaderPlugin` to do that.
+ *
+ * This plugin can be backed by two different loaders, the `native` loader and
+ * the `portable` loader.
+ *
+ * ### Native Loader
+ *
+ * The native loader shells out to the Deno executable under the hood to load
+ * files. Requires `--allow-read` and `--allow-run`. In this mode the download
+ * cache is shared with the Deno executable. This mode respects deno.lock,
+ * DENO_DIR, DENO_AUTH_TOKENS, and all similar loading configuration. Files are
+ * cached on disk in the same Deno cache as the Deno executable, and will not be
+ * re-downloaded on subsequent builds.
+ *
+ * NPM specifiers can be used in the native loader without requiring a local
+ * `node_modules` directory. NPM packages are resolved, downloaded, cached, and
+ * loaded in the same way as the Deno executable does.
+ *
+ * JSR specifiers can be used without restrictions in the native loader. To
+ * ensure dependencies are de-duplicated correctly, it is recommended to use a
+ * lockfile.
+ *
+ * ### Portable Loader
+ *
+ * The portable loader does module downloading and caching with only Web APIs.
+ * Requires `--allow-read` and/or `--allow-net`. This mode does not respect
+ * deno.lock, DENO_DIR, DENO_AUTH_TOKENS, or any other loading configuration. It
+ * does not cache downloaded files. It will re-download files on every build.
+ *
+ * NPM specifiers can be used in the portable loader, but require a local
+ * `node_modules` directory. The `node_modules` directory must be created prior
+ * using Deno's `--node-modules-dir` flag.
+ *
+ * JSR specifiers require a lockfile to be present to resolve.
+ */ export function denoLoaderPlugin(options = {}) {
+ const loader = options.loader ?? DEFAULT_LOADER;
+ if (LOADERS.indexOf(loader) === -1) {
+ throw new Error(`Invalid loader: ${loader}`);
+ }
+ return {
+ name: "deno-loader",
+ setup (build) {
+ const cwd = build.initialOptions.absWorkingDir ?? Deno.cwd();
+ let nodeModulesDir = null;
+ let loaderImpl;
+ const packageIdByNodeModules = new Map();
+ build.onStart(function onStart() {
+ loaderImpl?.[Symbol.dispose]?.();
+ loaderImpl = undefined;
+ packageIdByNodeModules.clear();
+ let nodeModulesDirOpt = options.nodeModulesDir;
+ let lockPath = options.lockPath;
+ if (nodeModulesDirOpt === undefined || loader === "portable" && lockPath === undefined) {
+ const workspace = findWorkspace(cwd, build.initialOptions.entryPoints, options.configPath);
+ try {
+ if (nodeModulesDirOpt === undefined) {
+ nodeModulesDirOpt = workspace.node_modules_dir();
+ }
+ if (loader === "portable" && lockPath === undefined) {
+ lockPath = workspace.lock_path();
+ }
+ } finally{
+ workspace.free();
+ }
+ }
+ if (nodeModulesDirOpt === "auto" || nodeModulesDirOpt === "manual") {
+ nodeModulesDir = join(cwd, "node_modules");
+ }
+ switch(loader){
+ case "native":
+ loaderImpl = new NativeLoader({
+ infoOptions: {
+ cwd,
+ config: options.configPath,
+ importMap: options.importMapURL,
+ lock: options.lockPath,
+ nodeModulesDir: nodeModulesDirOpt
+ }
+ });
+ break;
+ case "portable":
+ {
+ loaderImpl = new PortableLoader({
+ lock: lockPath
+ });
+ }
+ }
+ });
+ async function onResolve(args) {
+ if (isNodeModulesResolution(args)) {
+ if (BUILTIN_NODE_MODULES.has(args.path) || BUILTIN_NODE_MODULES.has("node:" + args.path)) {
+ return {
+ path: args.path,
+ external: true
+ };
+ }
+ if (nodeModulesDir !== null) {
+ return undefined;
+ } else if (loaderImpl.nodeModulesDirForPackage && loaderImpl.packageIdFromNameInPackage) {
+ let parentPackageId;
+ let path = args.importer;
+ while(true){
+ const packageId = packageIdByNodeModules.get(path);
+ if (packageId) {
+ parentPackageId = packageId;
+ break;
+ }
+ const pathBefore = path;
+ path = dirname(path);
+ if (path === pathBefore) break;
+ }
+ if (!parentPackageId) {
+ throw new Error(`Could not find package ID for importer: ${args.importer}`);
+ }
+ if (args.path.startsWith(".")) {
+ return undefined;
+ } else {
+ let packageName;
+ let pathParts;
+ if (args.path.startsWith("@")) {
+ const [scope, name, ...rest] = args.path.split("/");
+ packageName = `${scope}/${name}`;
+ pathParts = rest;
+ } else {
+ const [name, ...rest] = args.path.split("/");
+ packageName = name;
+ pathParts = rest;
+ }
+ const packageId = loaderImpl.packageIdFromNameInPackage(packageName, parentPackageId);
+ const id = packageId ?? parentPackageId;
+ const resolveDir = await loaderImpl.nodeModulesDirForPackage(id);
+ packageIdByNodeModules.set(resolveDir, id);
+ const path = [
+ packageName,
+ ...pathParts
+ ].join("/");
+ return await build.resolve(path, {
+ kind: args.kind,
+ resolveDir,
+ importer: args.importer
+ });
+ }
+ } else {
+ throw new Error(`To use "npm:" specifiers, you must specify 'nodeModulesDir: "manual"', or use 'loader: "native"'.`);
+ }
+ }
+ const specifier = esbuildResolutionToURL(args);
+ // Once we have an absolute path, let the loader resolver figure out
+ // what to do with it.
+ const res = await loaderImpl.resolve(specifier);
+ switch(res.kind){
+ case "esm":
+ {
+ const { specifier } = res;
+ return urlToEsbuildResolution(specifier);
+ }
+ case "npm":
+ {
+ let resolveDir;
+ if (nodeModulesDir !== null) {
+ resolveDir = nodeModulesDir;
+ } else if (loaderImpl.nodeModulesDirForPackage) {
+ resolveDir = await loaderImpl.nodeModulesDirForPackage(res.packageId);
+ packageIdByNodeModules.set(resolveDir, res.packageId);
+ } else {
+ throw new Error(`To use "npm:" specifiers, you must specify 'nodeModulesDir: "manual"', or use 'loader: "native"'.`);
+ }
+ const path = `${res.packageName}${res.path ?? ""}`;
+ return await build.resolve(path, {
+ kind: args.kind,
+ resolveDir,
+ importer: args.importer
+ });
+ }
+ case "node":
+ {
+ return {
+ path: res.path,
+ external: true
+ };
+ }
+ }
+ }
+ build.onResolve({
+ filter: /.*/,
+ namespace: "file"
+ }, onResolve);
+ build.onResolve({
+ filter: /.*/,
+ namespace: "http"
+ }, onResolve);
+ build.onResolve({
+ filter: /.*/,
+ namespace: "https"
+ }, onResolve);
+ build.onResolve({
+ filter: /.*/,
+ namespace: "data"
+ }, onResolve);
+ build.onResolve({
+ filter: /.*/,
+ namespace: "npm"
+ }, onResolve);
+ build.onResolve({
+ filter: /.*/,
+ namespace: "jsr"
+ }, onResolve);
+ build.onResolve({
+ filter: /.*/,
+ namespace: "node"
+ }, onResolve);
+ function onLoad(args) {
+ if (args.namespace === "file" && isInNodeModules(args.path)) {
+ // inside node_modules, just let esbuild do it's thing
+ return undefined;
+ }
+ const specifier = esbuildResolutionToURL(args);
+ return loaderImpl.loadEsm(specifier);
+ }
+ // TODO(lucacasonato): once https://github.com/evanw/esbuild/pull/2968 is fixed, remove the catch all "file" handler
+ build.onLoad({
+ filter: /.*/,
+ namespace: "file"
+ }, onLoad);
+ build.onLoad({
+ filter: /.*/,
+ namespace: "http"
+ }, onLoad);
+ build.onLoad({
+ filter: /.*/,
+ namespace: "https"
+ }, onLoad);
+ build.onLoad({
+ filter: /.*/,
+ namespace: "data"
+ }, onLoad);
+ }
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL3NyYy9wbHVnaW5fZGVub19sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBlc2J1aWxkIGZyb20gXCIuL2VzYnVpbGRfdHlwZXMudHNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjZcIjtcbmltcG9ydCB7IE5hdGl2ZUxvYWRlciB9IGZyb20gXCIuL2xvYWRlcl9uYXRpdmUudHNcIjtcbmltcG9ydCB7IFBvcnRhYmxlTG9hZGVyIH0gZnJvbSBcIi4vbG9hZGVyX3BvcnRhYmxlLnRzXCI7XG5pbXBvcnQgeyBmaW5kV29ya3NwYWNlLCBpc0luTm9kZU1vZHVsZXMgfSBmcm9tIFwiLi9zaGFyZWQudHNcIjtcbmltcG9ydCB7XG4gIGVzYnVpbGRSZXNvbHV0aW9uVG9VUkwsXG4gIGlzTm9kZU1vZHVsZXNSZXNvbHV0aW9uLFxuICB0eXBlIExvYWRlcixcbiAgdXJsVG9Fc2J1aWxkUmVzb2x1dGlvbixcbn0gZnJvbSBcIi4vc2hhcmVkLnRzXCI7XG5cbi8qKiBPcHRpb25zIGZvciB0aGUge0BsaW5rIGRlbm9Mb2FkZXJQbHVnaW59LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW5vTG9hZGVyUGx1Z2luT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoaWNoIGxvYWRlciB0byB1c2UuIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIHVzZSB0aGUgYG5hdGl2ZWAgbG9hZGVyLFxuICAgKiB1bmxlc3MgdGhlIGAtLWFsbG93LXJ1bmAgcGVybWlzc2lvbiBoYXMgbm90IGJlZW4gZ2l2ZW4uXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgZGVub0xvYWRlclBsdWdpbn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGRpZmZlcmVudCBsb2FkZXJzLlxuICAgKi9cbiAgbG9hZGVyPzogXCJuYXRpdmVcIiB8IFwicG9ydGFibGVcIjtcblxuICAvKipcbiAgICogU3BlY2lmeSB0aGUgcGF0aCB0byBhIGRlbm8uanNvbiBjb25maWcgZmlsZSB0byB1c2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgKiB0aGUgYC0tY29uZmlnYCBmbGFnIHRvIHRoZSBEZW5vIGV4ZWN1dGFibGUuIFRoaXMgcGF0aCBtdXN0IGJlIGFic29sdXRlLlxuICAgKlxuICAgKiBOT1RFOiBJbXBvcnQgbWFwcyBpbiB0aGUgY29uZmlnIGZpbGUgYXJlIG5vdCB1c2VkIHRvIGluZm9ybSByZXNvbHV0aW9uLCBhc1xuICAgKiB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBieSB0aGUgYGRlbm9SZXNvbHZlclBsdWdpbmAuIFRoaXMgb3B0aW9uIGlzIG9ubHlcbiAgICogdXNlZCB3aGVuIHNwZWNpZnlpbmcgYGxvYWRlcjogXCJuYXRpdmVcImAgdG8gbW9yZSBlZmZpY2llbnRseSBsb2FkIG1vZHVsZXNcbiAgICogZnJvbSB0aGUgY2FjaGUuIFdoZW4gc3BlY2lmeWluZyBgbG9hZGVyOiBcIm5hdGl2ZVwiYCwgdGhpcyBvcHRpb24gbXVzdCBiZSBpblxuICAgKiBzeW5jIHdpdGggdGhlIGBjb25maWdQYXRoYCBvcHRpb24gZm9yIGBkZW5vUmVzb2x2ZXJQbHVnaW5gLlxuICAgKlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgcGx1Z2luIHdpbGwgYXR0ZW1wdCB0byBmaW5kIHRoZSBuZWFyZXN0IGRlbm8uanNvbiBhbmRcbiAgICogdXNlIHRoYXQuIElmIHRoZSBkZW5vLmpzb24gaXMgcGFydCBvZiBhIHdvcmtzcGFjZSwgdGhlIHBsdWdpbiB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgd29ya3NwYWNlIHJvb3QuXG4gICAqL1xuICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmeSBhIFVSTCB0byBhbiBpbXBvcnQgbWFwIGZpbGUgdG8gdXNlIHdoZW4gcmVzb2x2aW5nIGltcG9ydFxuICAgKiBzcGVjaWZpZXJzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGAtLWltcG9ydC1tYXBgIGZsYWcgdG8gdGhlIERlbm9cbiAgICogZXhlY3V0YWJsZS4gVGhpcyBVUkwgbWF5IGJlIHJlbW90ZSBvciBhIGxvY2FsIGZpbGUgVVJMLlxuICAgKlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVuby5qc29uIGNvbmZpZyBmaWxlIGlzIGNvbnN1bHRlZCB0b1xuICAgKiBkZXRlcm1pbmUgd2hhdCBpbXBvcnQgbWFwIHRvIHVzZSwgaWYgYW55LlxuICAgKlxuICAgKiBOT1RFOiBJbXBvcnQgbWFwcyBpbiB0aGUgY29uZmlnIGZpbGUgYXJlIG5vdCB1c2VkIHRvIGluZm9ybSByZXNvbHV0aW9uLCBhc1xuICAgKiB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBieSB0aGUgYGRlbm9SZXNvbHZlclBsdWdpbmAuIFRoaXMgb3B0aW9uIGlzIG9ubHlcbiAgICogdXNlZCB3aGVuIHNwZWNpZnlpbmcgYGxvYWRlcjogXCJuYXRpdmVcImAgdG8gbW9yZSBlZmZpY2llbnRseSBsb2FkIG1vZHVsZXNcbiAgICogZnJvbSB0aGUgY2FjaGUuIFdoZW4gc3BlY2lmeWluZyBgbG9hZGVyOiBcIm5hdGl2ZVwiYCwgdGhpcyBvcHRpb24gbXVzdCBiZSBpblxuICAgKiBzeW5jIHdpdGggdGhlIGBpbXBvcnRNYXBVUkxgIG9wdGlvbiBmb3IgYGRlbm9SZXNvbHZlclBsdWdpbmAuXG4gICAqL1xuICBpbXBvcnRNYXBVUkw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBwYXRoIHRvIGEgbG9jayBmaWxlIHRvIHVzZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBgLS1sb2NrYFxuICAgKiBmbGFnIHRvIHRoZSBEZW5vIGV4ZWN1dGFibGUuIFRoaXMgcGF0aCBtdXN0IGJlIGFic29sdXRlLlxuICAgKlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVuby5qc29uIGNvbmZpZyBmaWxlIGlzIGNvbnN1bHRlZCB0b1xuICAgKiBkZXRlcm1pbmUgd2hhdCBpbXBvcnQgbWFwIHRvIHVzZSwgaWYgYW55LlxuICAgKlxuICAgKiBBIGxvY2tmaWxlIG11c3QgYmUgcHJlc2VudCB0byByZXNvbHZlIGBqc3I6YCBzcGVjaWZpZXJzIHdpdGggdGhlIGBwb3J0YWJsZWBcbiAgICogbG9hZGVyLiBXaGVuIHVzaW5nIHRoZSBgbmF0aXZlYCBsb2FkZXIsIGEgbG9ja2ZpbGUgaXMgbm90IHJlcXVpcmVkLCBidXQgdG9cbiAgICogZW5zdXJlIGRlcGVuZGVuY2llcyBhcmUgZGUtZHVwbGljYXRlZCBjb3JyZWN0bHksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhXG4gICAqIGxvY2tmaWxlLlxuICAgKlxuICAgKiBOT1RFOiB3aGVuIHVzaW5nIGBsb2FkZXI6IFwicG9ydGFibGVcImAsIGludGVncml0eSBjaGVja3MgYXJlIG5vdCBwZXJmb3JtZWRcbiAgICogZm9yIEVTTSBtb2R1bGVzLlxuICAgKi9cbiAgbG9ja1BhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IGhvdyB0aGUgbG9hZGVyIHNob3VsZCBoYW5kbGUgTlBNIHBhY2thZ2VzLiBCeSBkZWZhdWx0IGFuZCBpZiB0aGlzXG4gICAqIG9wdGlvbiBpcyBzZXQgdG8gYG5vbmVgLCB0aGUgbG9hZGVyIHdpbGwgdXNlIHRoZSBnbG9iYWwgY2FjaGUgdG8gcmVzb2x2ZVxuICAgKiBOUE0gcGFja2FnZXMuIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBgbWFudWFsYCwgdGhlIGxvYWRlciB3aWxsIHVzZSBhXG4gICAqIG1hbnVhbGx5IG1hbmFnZWQgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5LiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYGF1dG9gLFxuICAgKiB0aGUgbG9hZGVyIHdpbGwgdXNlIGEgbG9jYWwgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVuby5qc29uIGNvbmZpZyBmaWxlIGlzIGNvbnN1bHRlZCB0b1xuICAgKiBkZXRlcm1pbmUgd2hpY2ggbW9kZSB0byB1c2UuIElmIG5vIGNvbmZpZyBmaWxlIGlzIHByZXNlbnQsIG9yIHRoZSBjb25maWdcbiAgICogZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IHRoaXMgb3B0aW9uLCB0aGUgZGVmYXVsdCBpcyBgbm9uZWAgaWYgbm8gcGFja2FnZS5qc29uXG4gICAqIGlzIHByZXNlbnQsIGFuZCBgYXV0b2AgaWYgYSBwYWNrYWdlLmpzb24gaXMgcHJlc2VudC5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aGVuIHVzaW5nIHRoZSBgcG9ydGFibGVgIGxvYWRlciwgYXMgdGhlIHBvcnRhYmxlXG4gICAqIGxvYWRlciBhbHdheXMgdXNlcyBhIG1hbnVhbCBgbm9kZV9tb2R1bGVzYCBkaXJlY3RvcnkgKGVxdWl2YWxlbnQgb2ZcbiAgICogYG5vZGVNb2R1bGVzRGlyOiBcIm1hbnVhbFwiYCkuXG4gICAqL1xuICBub2RlTW9kdWxlc0Rpcj86IFwiYXV0b1wiIHwgXCJtYW51YWxcIiB8IFwibm9uZVwiO1xufVxuXG5jb25zdCBMT0FERVJTID0gW1wibmF0aXZlXCIsIFwicG9ydGFibGVcIl0gYXMgY29uc3Q7XG5cbi8qKiBUaGUgZGVmYXVsdCBsb2FkZXIgdG8gdXNlLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9BREVSOiBcIm5hdGl2ZVwiIHwgXCJwb3J0YWJsZVwiID1cbiAgYXdhaXQgRGVuby5wZXJtaXNzaW9ucy5xdWVyeSh7IG5hbWU6IFwicnVuXCIgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5zdGF0ZSAhPT0gXCJncmFudGVkXCIpXG4gICAgPyBcInBvcnRhYmxlXCJcbiAgICA6IFwibmF0aXZlXCI7XG5cbmNvbnN0IEJVSUxUSU5fTk9ERV9NT0RVTEVTID0gbmV3IFNldChbXG4gIFwiYXNzZXJ0XCIsXG4gIFwiYXNzZXJ0L3N0cmljdFwiLFxuICBcImFzeW5jX2hvb2tzXCIsXG4gIFwiYnVmZmVyXCIsXG4gIFwiY2hpbGRfcHJvY2Vzc1wiLFxuICBcImNsdXN0ZXJcIixcbiAgXCJjb25zb2xlXCIsXG4gIFwiY29uc3RhbnRzXCIsXG4gIFwiY3J5cHRvXCIsXG4gIFwiZGdyYW1cIixcbiAgXCJkaWFnbm9zdGljc19jaGFubmVsXCIsXG4gIFwiZG5zXCIsXG4gIFwiZG5zL3Byb21pc2VzXCIsXG4gIFwiZG9tYWluXCIsXG4gIFwiZXZlbnRzXCIsXG4gIFwiZnNcIixcbiAgXCJmcy9wcm9taXNlc1wiLFxuICBcImh0dHBcIixcbiAgXCJodHRwMlwiLFxuICBcImh0dHBzXCIsXG4gIFwibW9kdWxlXCIsXG4gIFwibmV0XCIsXG4gIFwib3NcIixcbiAgXCJwYXRoXCIsXG4gIFwicGF0aC9wb3NpeFwiLFxuICBcInBhdGgvd2luMzJcIixcbiAgXCJwZXJmX2hvb2tzXCIsXG4gIFwicHJvY2Vzc1wiLFxuICBcInB1bnljb2RlXCIsXG4gIFwicXVlcnlzdHJpbmdcIixcbiAgXCJyZXBsXCIsXG4gIFwicmVhZGxpbmVcIixcbiAgXCJzdHJlYW1cIixcbiAgXCJzdHJlYW0vY29uc3VtZXJzXCIsXG4gIFwic3RyZWFtL3Byb21pc2VzXCIsXG4gIFwic3RyZWFtL3dlYlwiLFxuICBcInN0cmluZ19kZWNvZGVyXCIsXG4gIFwic3lzXCIsXG4gIFwidGVzdFwiLFxuICBcInRpbWVyc1wiLFxuICBcInRpbWVycy9wcm9taXNlc1wiLFxuICBcInRsc1wiLFxuICBcInR0eVwiLFxuICBcInVybFwiLFxuICBcInV0aWxcIixcbiAgXCJ1dGlsL3R5cGVzXCIsXG4gIFwidjhcIixcbiAgXCJ2bVwiLFxuICBcIndvcmtlcl90aHJlYWRzXCIsXG4gIFwiemxpYlwiLFxuXSk7XG5cbi8qKlxuICogVGhlIERlbm8gbG9hZGVyIHBsdWdpbiBmb3IgZXNidWlsZC4gVGhpcyBwbHVnaW4gd2lsbCBsb2FkIGZ1bGx5IHF1YWxpZmllZFxuICogYGZpbGVgLCBgaHR0cGAsIGBodHRwc2AsIGFuZCBgZGF0YWAgVVJMcy5cbiAqXG4gKiAqKk5vdGUqKiB0aGF0IHRoaXMgcGx1Z2luIGRvZXMgbm90IGRvIHJlbGF0aXZlLT5hYnNvbHV0ZSBzcGVjaWZpZXJcbiAqIHJlc29sdXRpb24sIG9yIGltcG9ydCBtYXAgcmVzb2x1dGlvbi4gWW91IG11c3QgdXNlIHRoZSBgZGVub1Jlc29sdmVyUGx1Z2luYFxuICogX2JlZm9yZV8gdGhlIGBkZW5vTG9hZGVyUGx1Z2luYCB0byBkbyB0aGF0LlxuICpcbiAqIFRoaXMgcGx1Z2luIGNhbiBiZSBiYWNrZWQgYnkgdHdvIGRpZmZlcmVudCBsb2FkZXJzLCB0aGUgYG5hdGl2ZWAgbG9hZGVyIGFuZFxuICogdGhlIGBwb3J0YWJsZWAgbG9hZGVyLlxuICpcbiAqICMjIyBOYXRpdmUgTG9hZGVyXG4gKlxuICogVGhlIG5hdGl2ZSBsb2FkZXIgc2hlbGxzIG91dCB0byB0aGUgRGVubyBleGVjdXRhYmxlIHVuZGVyIHRoZSBob29kIHRvIGxvYWRcbiAqIGZpbGVzLiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQgYC0tYWxsb3ctcnVuYC4gSW4gdGhpcyBtb2RlIHRoZSBkb3dubG9hZFxuICogY2FjaGUgaXMgc2hhcmVkIHdpdGggdGhlIERlbm8gZXhlY3V0YWJsZS4gVGhpcyBtb2RlIHJlc3BlY3RzIGRlbm8ubG9jayxcbiAqIERFTk9fRElSLCBERU5PX0FVVEhfVE9LRU5TLCBhbmQgYWxsIHNpbWlsYXIgbG9hZGluZyBjb25maWd1cmF0aW9uLiBGaWxlcyBhcmVcbiAqIGNhY2hlZCBvbiBkaXNrIGluIHRoZSBzYW1lIERlbm8gY2FjaGUgYXMgdGhlIERlbm8gZXhlY3V0YWJsZSwgYW5kIHdpbGwgbm90IGJlXG4gKiByZS1kb3dubG9hZGVkIG9uIHN1YnNlcXVlbnQgYnVpbGRzLlxuICpcbiAqIE5QTSBzcGVjaWZpZXJzIGNhbiBiZSB1c2VkIGluIHRoZSBuYXRpdmUgbG9hZGVyIHdpdGhvdXQgcmVxdWlyaW5nIGEgbG9jYWxcbiAqIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeS4gTlBNIHBhY2thZ2VzIGFyZSByZXNvbHZlZCwgZG93bmxvYWRlZCwgY2FjaGVkLCBhbmRcbiAqIGxvYWRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIERlbm8gZXhlY3V0YWJsZSBkb2VzLlxuICpcbiAqIEpTUiBzcGVjaWZpZXJzIGNhbiBiZSB1c2VkIHdpdGhvdXQgcmVzdHJpY3Rpb25zIGluIHRoZSBuYXRpdmUgbG9hZGVyLiBUb1xuICogZW5zdXJlIGRlcGVuZGVuY2llcyBhcmUgZGUtZHVwbGljYXRlZCBjb3JyZWN0bHksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhXG4gKiBsb2NrZmlsZS5cbiAqXG4gKiAjIyMgUG9ydGFibGUgTG9hZGVyXG4gKlxuICogVGhlIHBvcnRhYmxlIGxvYWRlciBkb2VzIG1vZHVsZSBkb3dubG9hZGluZyBhbmQgY2FjaGluZyB3aXRoIG9ubHkgV2ViIEFQSXMuXG4gKiBSZXF1aXJlcyBgLS1hbGxvdy1yZWFkYCBhbmQvb3IgYC0tYWxsb3ctbmV0YC4gVGhpcyBtb2RlIGRvZXMgbm90IHJlc3BlY3RcbiAqIGRlbm8ubG9jaywgREVOT19ESVIsIERFTk9fQVVUSF9UT0tFTlMsIG9yIGFueSBvdGhlciBsb2FkaW5nIGNvbmZpZ3VyYXRpb24uIEl0XG4gKiBkb2VzIG5vdCBjYWNoZSBkb3dubG9hZGVkIGZpbGVzLiBJdCB3aWxsIHJlLWRvd25sb2FkIGZpbGVzIG9uIGV2ZXJ5IGJ1aWxkLlxuICpcbiAqIE5QTSBzcGVjaWZpZXJzIGNhbiBiZSB1c2VkIGluIHRoZSBwb3J0YWJsZSBsb2FkZXIsIGJ1dCByZXF1aXJlIGEgbG9jYWxcbiAqIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeS4gVGhlIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeSBtdXN0IGJlIGNyZWF0ZWQgcHJpb3JcbiAqIHVzaW5nIERlbm8ncyBgLS1ub2RlLW1vZHVsZXMtZGlyYCBmbGFnLlxuICpcbiAqIEpTUiBzcGVjaWZpZXJzIHJlcXVpcmUgYSBsb2NrZmlsZSB0byBiZSBwcmVzZW50IHRvIHJlc29sdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW5vTG9hZGVyUGx1Z2luKFxuICBvcHRpb25zOiBEZW5vTG9hZGVyUGx1Z2luT3B0aW9ucyA9IHt9LFxuKTogZXNidWlsZC5QbHVnaW4ge1xuICBjb25zdCBsb2FkZXIgPSBvcHRpb25zLmxvYWRlciA/PyBERUZBVUxUX0xPQURFUjtcbiAgaWYgKExPQURFUlMuaW5kZXhPZihsb2FkZXIpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsb2FkZXI6ICR7bG9hZGVyfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJkZW5vLWxvYWRlclwiLFxuICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICBjb25zdCBjd2QgPSBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyID8/IERlbm8uY3dkKCk7XG5cbiAgICAgIGxldCBub2RlTW9kdWxlc0Rpcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgbG9hZGVySW1wbDogTG9hZGVyIHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBwYWNrYWdlSWRCeU5vZGVNb2R1bGVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgICAgYnVpbGQub25TdGFydChmdW5jdGlvbiBvblN0YXJ0KCkge1xuICAgICAgICBsb2FkZXJJbXBsPy5bU3ltYm9sLmRpc3Bvc2VdPy4oKTtcbiAgICAgICAgbG9hZGVySW1wbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUlkQnlOb2RlTW9kdWxlcy5jbGVhcigpO1xuXG4gICAgICAgIGxldCBub2RlTW9kdWxlc0Rpck9wdDogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJub25lXCIgfCB1bmRlZmluZWQgPVxuICAgICAgICAgIG9wdGlvbnMubm9kZU1vZHVsZXNEaXI7XG4gICAgICAgIGxldCBsb2NrUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5sb2NrUGF0aDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChub2RlTW9kdWxlc0Rpck9wdCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAobG9hZGVyID09PSBcInBvcnRhYmxlXCIgJiYgbG9ja1BhdGggPT09IHVuZGVmaW5lZCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2UoXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5lbnRyeVBvaW50cyxcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZmlnUGF0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobm9kZU1vZHVsZXNEaXJPcHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBub2RlTW9kdWxlc0Rpck9wdCA9IHdvcmtzcGFjZS5ub2RlX21vZHVsZXNfZGlyKCkgYXNcbiAgICAgICAgICAgICAgICB8IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgfCBcIm1hbnVhbFwiXG4gICAgICAgICAgICAgICAgfCBcIm5vbmVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsb2FkZXIgPT09IFwicG9ydGFibGVcIiAmJiBsb2NrUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGxvY2tQYXRoID0gd29ya3NwYWNlLmxvY2tfcGF0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB3b3Jrc3BhY2UuZnJlZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9kZU1vZHVsZXNEaXJPcHQgPT09IFwiYXV0b1wiIHx8XG4gICAgICAgICAgbm9kZU1vZHVsZXNEaXJPcHQgPT09IFwibWFudWFsXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZU1vZHVsZXNEaXIgPSBqb2luKGN3ZCwgXCJub2RlX21vZHVsZXNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGxvYWRlcikge1xuICAgICAgICAgIGNhc2UgXCJuYXRpdmVcIjpcbiAgICAgICAgICAgIGxvYWRlckltcGwgPSBuZXcgTmF0aXZlTG9hZGVyKHtcbiAgICAgICAgICAgICAgaW5mb09wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgaW1wb3J0TWFwOiBvcHRpb25zLmltcG9ydE1hcFVSTCxcbiAgICAgICAgICAgICAgICBsb2NrOiBvcHRpb25zLmxvY2tQYXRoLFxuICAgICAgICAgICAgICAgIG5vZGVNb2R1bGVzRGlyOiBub2RlTW9kdWxlc0Rpck9wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInBvcnRhYmxlXCI6IHtcbiAgICAgICAgICAgIGxvYWRlckltcGwgPSBuZXcgUG9ydGFibGVMb2FkZXIoe1xuICAgICAgICAgICAgICBsb2NrOiBsb2NrUGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIG9uUmVzb2x2ZShcbiAgICAgICAgYXJnczogZXNidWlsZC5PblJlc29sdmVBcmdzLFxuICAgICAgKTogUHJvbWlzZTxlc2J1aWxkLk9uUmVzb2x2ZVJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoaXNOb2RlTW9kdWxlc1Jlc29sdXRpb24oYXJncykpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBCVUlMVElOX05PREVfTU9EVUxFUy5oYXMoYXJncy5wYXRoKSB8fFxuICAgICAgICAgICAgQlVJTFRJTl9OT0RFX01PRFVMRVMuaGFzKFwibm9kZTpcIiArIGFyZ3MucGF0aClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBhdGg6IGFyZ3MucGF0aCxcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZU1vZHVsZXNEaXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGxvYWRlckltcGwhLm5vZGVNb2R1bGVzRGlyRm9yUGFja2FnZSAmJlxuICAgICAgICAgICAgbG9hZGVySW1wbCEucGFja2FnZUlkRnJvbU5hbWVJblBhY2thZ2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBwYXJlbnRQYWNrYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBwYXRoID0gYXJncy5pbXBvcnRlcjtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VJZEJ5Tm9kZU1vZHVsZXMuZ2V0KHBhdGgpO1xuICAgICAgICAgICAgICBpZiAocGFja2FnZUlkKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50UGFja2FnZUlkID0gcGFja2FnZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhCZWZvcmUgPSBwYXRoO1xuICAgICAgICAgICAgICBwYXRoID0gZGlybmFtZShwYXRoKTtcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhdGhCZWZvcmUpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwYXJlbnRQYWNrYWdlSWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBwYWNrYWdlIElEIGZvciBpbXBvcnRlcjogJHthcmdzLmltcG9ydGVyfWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXJncy5wYXRoLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsZXQgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgbGV0IHBhdGhQYXJ0czogc3RyaW5nW107XG4gICAgICAgICAgICAgIGlmIChhcmdzLnBhdGguc3RhcnRzV2l0aChcIkBcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc2NvcGUsIG5hbWUsIC4uLnJlc3RdID0gYXJncy5wYXRoLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSA9IGAke3Njb3BlfS8ke25hbWV9YDtcbiAgICAgICAgICAgICAgICBwYXRoUGFydHMgPSByZXN0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IGFyZ3MucGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHBhdGhQYXJ0cyA9IHJlc3Q7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcGFja2FnZUlkID0gbG9hZGVySW1wbCEucGFja2FnZUlkRnJvbU5hbWVJblBhY2thZ2UoXG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgcGFyZW50UGFja2FnZUlkLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBpZCA9IHBhY2thZ2VJZCA/PyBwYXJlbnRQYWNrYWdlSWQ7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVEaXIgPSBhd2FpdCBsb2FkZXJJbXBsIS5ub2RlTW9kdWxlc0RpckZvclBhY2thZ2UoaWQpO1xuICAgICAgICAgICAgICBwYWNrYWdlSWRCeU5vZGVNb2R1bGVzLnNldChyZXNvbHZlRGlyLCBpZCk7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBbcGFja2FnZU5hbWUsIC4uLnBhdGhQYXJ0c10uam9pbihcIi9cIik7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBidWlsZC5yZXNvbHZlKHBhdGgsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBhcmdzLmtpbmQsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZURpcixcbiAgICAgICAgICAgICAgICBpbXBvcnRlcjogYXJncy5pbXBvcnRlcixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRvIHVzZSBcIm5wbTpcIiBzcGVjaWZpZXJzLCB5b3UgbXVzdCBzcGVjaWZ5ICdub2RlTW9kdWxlc0RpcjogXCJtYW51YWxcIicsIG9yIHVzZSAnbG9hZGVyOiBcIm5hdGl2ZVwiJy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gZXNidWlsZFJlc29sdXRpb25Ub1VSTChhcmdzKTtcblxuICAgICAgICAvLyBPbmNlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCwgbGV0IHRoZSBsb2FkZXIgcmVzb2x2ZXIgZmlndXJlIG91dFxuICAgICAgICAvLyB3aGF0IHRvIGRvIHdpdGggaXQuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGxvYWRlckltcGwhLnJlc29sdmUoc3BlY2lmaWVyKTtcblxuICAgICAgICBzd2l0Y2ggKHJlcy5raW5kKSB7XG4gICAgICAgICAgY2FzZSBcImVzbVwiOiB7XG4gICAgICAgICAgICBjb25zdCB7IHNwZWNpZmllciB9ID0gcmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVybFRvRXNidWlsZFJlc29sdXRpb24oc3BlY2lmaWVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIm5wbVwiOiB7XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZURpcjogc3RyaW5nO1xuICAgICAgICAgICAgaWYgKG5vZGVNb2R1bGVzRGlyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJlc29sdmVEaXIgPSBub2RlTW9kdWxlc0RpcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9hZGVySW1wbCEubm9kZU1vZHVsZXNEaXJGb3JQYWNrYWdlKSB7XG4gICAgICAgICAgICAgIHJlc29sdmVEaXIgPSBhd2FpdCBsb2FkZXJJbXBsIS5ub2RlTW9kdWxlc0RpckZvclBhY2thZ2UoXG4gICAgICAgICAgICAgICAgcmVzLnBhY2thZ2VJZCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcGFja2FnZUlkQnlOb2RlTW9kdWxlcy5zZXQocmVzb2x2ZURpciwgcmVzLnBhY2thZ2VJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFRvIHVzZSBcIm5wbTpcIiBzcGVjaWZpZXJzLCB5b3UgbXVzdCBzcGVjaWZ5ICdub2RlTW9kdWxlc0RpcjogXCJtYW51YWxcIicsIG9yIHVzZSAnbG9hZGVyOiBcIm5hdGl2ZVwiJy5gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0aCA9IGAke3Jlcy5wYWNrYWdlTmFtZX0ke3Jlcy5wYXRoID8/IFwiXCJ9YDtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidWlsZC5yZXNvbHZlKHBhdGgsIHtcbiAgICAgICAgICAgICAga2luZDogYXJncy5raW5kLFxuICAgICAgICAgICAgICByZXNvbHZlRGlyLFxuICAgICAgICAgICAgICBpbXBvcnRlcjogYXJncy5pbXBvcnRlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibm9kZVwiOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwYXRoOiByZXMucGF0aCxcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGQub25SZXNvbHZlKHsgZmlsdGVyOiAvLiovLCBuYW1lc3BhY2U6IFwiZmlsZVwiIH0sIG9uUmVzb2x2ZSk7XG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8sIG5hbWVzcGFjZTogXCJodHRwXCIgfSwgb25SZXNvbHZlKTtcbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLywgbmFtZXNwYWNlOiBcImh0dHBzXCIgfSwgb25SZXNvbHZlKTtcbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLywgbmFtZXNwYWNlOiBcImRhdGFcIiB9LCBvblJlc29sdmUpO1xuICAgICAgYnVpbGQub25SZXNvbHZlKHsgZmlsdGVyOiAvLiovLCBuYW1lc3BhY2U6IFwibnBtXCIgfSwgb25SZXNvbHZlKTtcbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLywgbmFtZXNwYWNlOiBcImpzclwiIH0sIG9uUmVzb2x2ZSk7XG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8sIG5hbWVzcGFjZTogXCJub2RlXCIgfSwgb25SZXNvbHZlKTtcblxuICAgICAgZnVuY3Rpb24gb25Mb2FkKFxuICAgICAgICBhcmdzOiBlc2J1aWxkLk9uTG9hZEFyZ3MsXG4gICAgICApOiBQcm9taXNlPGVzYnVpbGQuT25Mb2FkUmVzdWx0IHwgbnVsbCB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoYXJncy5uYW1lc3BhY2UgPT09IFwiZmlsZVwiICYmIGlzSW5Ob2RlTW9kdWxlcyhhcmdzLnBhdGgpKSB7XG4gICAgICAgICAgLy8gaW5zaWRlIG5vZGVfbW9kdWxlcywganVzdCBsZXQgZXNidWlsZCBkbyBpdCdzIHRoaW5nXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGVjaWZpZXIgPSBlc2J1aWxkUmVzb2x1dGlvblRvVVJMKGFyZ3MpO1xuICAgICAgICByZXR1cm4gbG9hZGVySW1wbCEubG9hZEVzbShzcGVjaWZpZXIpO1xuICAgICAgfVxuICAgICAgLy8gVE9ETyhsdWNhY2Fzb25hdG8pOiBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL3B1bGwvMjk2OCBpcyBmaXhlZCwgcmVtb3ZlIHRoZSBjYXRjaCBhbGwgXCJmaWxlXCIgaGFuZGxlclxuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvLiovLCBuYW1lc3BhY2U6IFwiZmlsZVwiIH0sIG9uTG9hZCk7XG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC8uKi8sIG5hbWVzcGFjZTogXCJodHRwXCIgfSwgb25Mb2FkKTtcbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogLy4qLywgbmFtZXNwYWNlOiBcImh0dHBzXCIgfSwgb25Mb2FkKTtcbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogLy4qLywgbmFtZXNwYWNlOiBcImRhdGFcIiB9LCBvbkxvYWQpO1xuICAgIH0sXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxPQUFPLEVBQUUsSUFBSSxRQUFRLHVCQUF1QjtBQUNyRCxTQUFTLFlBQVksUUFBUSxxQkFBcUI7QUFDbEQsU0FBUyxjQUFjLFFBQVEsdUJBQXVCO0FBQ3RELFNBQVMsYUFBYSxFQUFFLGVBQWUsUUFBUSxjQUFjO0FBQzdELFNBQ0Usc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUV2QixzQkFBc0IsUUFDakIsY0FBYztBQTZFckIsTUFBTSxVQUFVO0VBQUM7RUFBVTtDQUFX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
+// denoCacheMetadata=11400073764165193245,2091627671307936359 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d4462d78a8e03200bae927934258fa95e966d8c682c893e2c630ffb61628ccfe.js b/vendor/gen/https/jsr.io/d4462d78a8e03200bae927934258fa95e966d8c682c893e2c630ffb61628ccfe.js
new file mode 100644
index 0000000..326eb8e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d4462d78a8e03200bae927934258fa95e966d8c682c893e2c630ffb61628ccfe.js
@@ -0,0 +1,104 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/dirname.ts";
+import { CHAR_COLON } from "../_common/constants.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPathSeparator, isPosixPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return the directory path of a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { dirname } from "@std/path/windows/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const dir = dirname("C:\\foo\\bar\\baz.ext");
+ * assertEquals(dir, "C:\\foo\\bar");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `dirname` from `@std/path/windows/unstable-dirname`.
+ *
+ * @param path The path to get the directory from.
+ * @returns The directory path.
+ */ export function dirname(path) {
+ assertArg(path);
+ const len = path.length;
+ let rootEnd = -1;
+ let end = -1;
+ let matchedSlash = true;
+ let offset = 0;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ rootEnd = offset = 1;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ return path;
+ }
+ if (j !== last) {
+ // We matched a UNC root with leftovers
+ // Offset by 1 to include the separator after the UNC root to
+ // treat it as a "normal root" on top of a (UNC) root
+ rootEnd = offset = j + 1;
+ }
+ }
+ }
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ rootEnd = offset = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3;
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid
+ // unnecessary work
+ return path;
+ }
+ for(let i = len - 1; i >= offset; --i){
+ if (isPathSeparator(path.charCodeAt(i))) {
+ if (!matchedSlash) {
+ end = i;
+ break;
+ }
+ } else {
+ // We saw the first non-path separator
+ matchedSlash = false;
+ }
+ }
+ if (end === -1) {
+ if (rootEnd === -1) return ".";
+ else end = rootEnd;
+ }
+ return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2Rpcm5hbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vZGlybmFtZS50c1wiO1xuaW1wb3J0IHsgQ0hBUl9DT0xPTiB9IGZyb20gXCIuLi9fY29tbW9uL2NvbnN0YW50cy50c1wiO1xuaW1wb3J0IHsgc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMgfSBmcm9tIFwiLi4vX2NvbW1vbi9zdHJpcF90cmFpbGluZ19zZXBhcmF0b3JzLnRzXCI7XG5pbXBvcnQge1xuICBpc1BhdGhTZXBhcmF0b3IsXG4gIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICBpc1dpbmRvd3NEZXZpY2VSb290LFxufSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgZGlyZWN0b3J5IHBhdGggb2YgYSBgcGF0aGAuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2Rpcm5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGRpciA9IGRpcm5hbWUoXCJDOlxcXFxmb29cXFxcYmFyXFxcXGJhei5leHRcIik7XG4gKiBhc3NlcnRFcXVhbHMoZGlyLCBcIkM6XFxcXGZvb1xcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBkaXJuYW1lYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1kaXJuYW1lYC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIGRpcmVjdG9yeSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRpcmVjdG9yeSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlybmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRBcmcocGF0aCk7XG5cbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGxldCByb290RW5kID0gLTE7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gb2Zmc2V0ID0gMTtcblxuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMSkpKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgIGxldCBsYXN0ID0gajtcbiAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgIC8vIE9mZnNldCBieSAxIHRvIGluY2x1ZGUgdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgVU5DIHJvb3QgdG9cbiAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgYXMgYSBcIm5vcm1hbCByb290XCIgb24gdG9wIG9mIGEgKFVOQykgcm9vdFxuICAgICAgICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcm9vdEVuZCA9IG9mZnNldCA9IDM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IG9mZnNldDsgLS1pKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSB7XG4gICAgaWYgKHJvb3RFbmQgPT09IC0xKSByZXR1cm4gXCIuXCI7XG4gICAgZWxzZSBlbmQgPSByb290RW5kO1xuICB9XG4gIHJldHVybiBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyhwYXRoLnNsaWNlKDAsIGVuZCksIGlzUG9zaXhQYXRoU2VwYXJhdG9yKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLHdCQUF3QjtBQUNsRCxTQUFT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
+// denoCacheMetadata=6555987361175469730,625806111020819002 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d4b76e8922cdf2472e27b2787ab6d9f85911f093958dfe3bc27dde1bac6168ad.js b/vendor/gen/https/jsr.io/d4b76e8922cdf2472e27b2787ab6d9f85911f093958dfe3bc27dde1bac6168ad.js
new file mode 100644
index 0000000..ae5ea1e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d4b76e8922cdf2472e27b2787ab6d9f85911f093958dfe3bc27dde1bac6168ad.js
@@ -0,0 +1,51 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Copy bytes from the source array to the destination array and returns the
+ * number of bytes copied.
+ *
+ * If the source array is larger than what the `dst` array can hold, only the
+ * amount of bytes that fit in the `dst` array are copied.
+ *
+ * @param src Source array to copy from.
+ * @param dst Destination array to copy to.
+ * @param offset Offset in the destination array to start copying to. Defaults
+ * to 0.
+ * @returns Number of bytes copied.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { copy } from "@std/bytes/copy";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const src = new Uint8Array([9, 8, 7]);
+ * const dst = new Uint8Array([0, 1, 2, 3, 4, 5]);
+ *
+ * assertEquals(copy(src, dst), 3);
+ * assertEquals(dst, new Uint8Array([9, 8, 7, 3, 4, 5]));
+ * ```
+ *
+ * @example Copy with offset
+ * ```ts
+ * import { copy } from "@std/bytes/copy";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const src = new Uint8Array([1, 1, 1, 1]);
+ * const dst = new Uint8Array([0, 0, 0, 0]);
+ *
+ * assertEquals(copy(src, dst, 1), 3);
+ * assertEquals(dst, new Uint8Array([0, 1, 1, 1]));
+ * ```
+ * Defining an offset will start copying at the specified index in the
+ * destination array.
+ */ export function copy(src, dst, offset = 0) {
+ offset = Math.max(0, Math.min(offset, dst.byteLength));
+ const dstBytesAvailable = dst.byteLength - offset;
+ if (src.byteLength > dstBytesAvailable) {
+ src = src.subarray(0, dstBytesAvailable);
+ }
+ dst.set(src, offset);
+ return src.byteLength;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvY29weS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIENvcHkgYnl0ZXMgZnJvbSB0aGUgc291cmNlIGFycmF5IHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheSBhbmQgcmV0dXJucyB0aGVcbiAqIG51bWJlciBvZiBieXRlcyBjb3BpZWQuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBhcnJheSBpcyBsYXJnZXIgdGhhbiB3aGF0IHRoZSBgZHN0YCBhcnJheSBjYW4gaG9sZCwgb25seSB0aGVcbiAqIGFtb3VudCBvZiBieXRlcyB0aGF0IGZpdCBpbiB0aGUgYGRzdGAgYXJyYXkgYXJlIGNvcGllZC5cbiAqXG4gKiBAcGFyYW0gc3JjIFNvdXJjZSBhcnJheSB0byBjb3B5IGZyb20uXG4gKiBAcGFyYW0gZHN0IERlc3RpbmF0aW9uIGFycmF5IHRvIGNvcHkgdG8uXG4gKiBAcGFyYW0gb2Zmc2V0IE9mZnNldCBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXkgdG8gc3RhcnQgY29weWluZyB0by4gRGVmYXVsdHNcbiAqIHRvIDAuXG4gKiBAcmV0dXJucyBOdW1iZXIgb2YgYnl0ZXMgY29waWVkLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29weSB9IGZyb20gXCJAc3RkL2J5dGVzL2NvcHlcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHNyYyA9IG5ldyBVaW50OEFycmF5KFs5LCA4LCA3XSk7XG4gKiBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMywgNCwgNV0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhjb3B5KHNyYywgZHN0KSwgMyk7XG4gKiBhc3NlcnRFcXVhbHMoZHN0LCBuZXcgVWludDhBcnJheShbOSwgOCwgNywgMywgNCwgNV0pKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENvcHkgd2l0aCBvZmZzZXRcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb3B5IH0gZnJvbSBcIkBzdGQvYnl0ZXMvY29weVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc3JjID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDEsIDEsIDFdKTtcbiAqIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAwXSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGNvcHkoc3JjLCBkc3QsIDEpLCAzKTtcbiAqIGFzc2VydEVxdWFscyhkc3QsIG5ldyBVaW50OEFycmF5KFswLCAxLCAxLCAxXSkpO1xuICogYGBgXG4gKiBEZWZpbmluZyBhbiBvZmZzZXQgd2lsbCBzdGFydCBjb3B5aW5nIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggaW4gdGhlXG4gKiBkZXN0aW5hdGlvbiBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc3JjOiBVaW50OEFycmF5LCBkc3Q6IFVpbnQ4QXJyYXksIG9mZnNldCA9IDApOiBudW1iZXIge1xuICBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihvZmZzZXQsIGRzdC5ieXRlTGVuZ3RoKSk7XG4gIGNvbnN0IGRzdEJ5dGVzQXZhaWxhYmxlID0gZHN0LmJ5dGVMZW5ndGggLSBvZmZzZXQ7XG4gIGlmIChzcmMuYnl0ZUxlbmd0aCA+IGRzdEJ5dGVzQXZhaWxhYmxlKSB7XG4gICAgc3JjID0gc3JjLnN1YmFycmF5KDAsIGRzdEJ5dGVzQXZhaWxhYmxlKTtcbiAgfVxuICBkc3Quc2V0KHNyYywgb2Zmc2V0KTtcbiAgcmV0dXJuIHNyYy5ieXRlTGVuZ3RoO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0NDLEdBQ0QsT0FBTyxTQUFTLEtBQUssR0FBZSxFQUFFLEdBQWUsRUFBRSxTQUFTLENBQUM7RUFDL0QsU0FBUyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLFFBQVEsSUFBSSxVQUFVO0VBQ3BELE1BQU0sb0JBQW9CLElBQUksVUFBVSxHQUFHO0VBQzNDLElBQUksSUFBSSxVQUFVLEdBQUcsbUJBQW1CO0lBQ3RDLE1BQU0sSUFBSSxRQUFRLENBQUMsR0FBRztFQUN4QjtFQUNBLElBQUksR0FBRyxDQUFDLEtBQUs7RUFDYixPQUFPLElBQUksVUFBVTtBQUN2QiJ9
+// denoCacheMetadata=16159230279178325535,17931808895107412719 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d66d545141b19d2745c8934c4ea43789bcc5d2db57aeaf5b133ce50847a520ad.js b/vendor/gen/https/jsr.io/d66d545141b19d2745c8934c4ea43789bcc5d2db57aeaf5b133ce50847a520ad.js
new file mode 100644
index 0000000..785d0f0
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d66d545141b19d2745c8934c4ea43789bcc5d2db57aeaf5b133ce50847a520ad.js
@@ -0,0 +1,31 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { relative as posixRelative } from "./posix/relative.ts";
+import { relative as windowsRelative } from "./windows/relative.ts";
+/**
+ * Return the relative path from `from` to `to` based on current working
+ * directory.
+ *
+ * @example Usage
+ * ```ts
+ * import { relative } from "@std/path/relative";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * const path = relative("C:\\foobar\\test\\aaa", "C:\\foobar\\impl\\bbb");
+ * assertEquals(path, "..\\..\\impl\\bbb");
+ * } else {
+ * const path = relative("/data/foobar/test/aaa", "/data/foobar/impl/bbb");
+ * assertEquals(path, "../../impl/bbb");
+ * }
+ * ```
+ *
+ * @param from Path in current working directory.
+ * @param to Path in current working directory.
+ * @returns The relative path from `from` to `to`.
+ */ export function relative(from, to) {
+ return isWindows ? windowsRelative(from, to) : posixRelative(from, to);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9yZWxhdGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IHJlbGF0aXZlIGFzIHBvc2l4UmVsYXRpdmUgfSBmcm9tIFwiLi9wb3NpeC9yZWxhdGl2ZS50c1wiO1xuaW1wb3J0IHsgcmVsYXRpdmUgYXMgd2luZG93c1JlbGF0aXZlIH0gZnJvbSBcIi4vd2luZG93cy9yZWxhdGl2ZS50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIGBmcm9tYCB0byBgdG9gIGJhc2VkIG9uIGN1cnJlbnQgd29ya2luZ1xuICogZGlyZWN0b3J5LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3JlbGF0aXZlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgY29uc3QgcGF0aCA9IHJlbGF0aXZlKFwiQzpcXFxcZm9vYmFyXFxcXHRlc3RcXFxcYWFhXCIsIFwiQzpcXFxcZm9vYmFyXFxcXGltcGxcXFxcYmJiXCIpO1xuICogICBhc3NlcnRFcXVhbHMocGF0aCwgXCIuLlxcXFwuLlxcXFxpbXBsXFxcXGJiYlwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnN0IHBhdGggPSByZWxhdGl2ZShcIi9kYXRhL2Zvb2Jhci90ZXN0L2FhYVwiLCBcIi9kYXRhL2Zvb2Jhci9pbXBsL2JiYlwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKHBhdGgsIFwiLi4vLi4vaW1wbC9iYmJcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZnJvbSBQYXRoIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdG8gUGF0aCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpc1dpbmRvd3MgPyB3aW5kb3dzUmVsYXRpdmUoZnJvbSwgdG8pIDogcG9zaXhSZWxhdGl2ZShmcm9tLCB0byk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsWUFBWSxhQUFhLFFBQVEsc0JBQXNCO0FBQ2hFLFNBQVMsWUFBWSxlQUFlLFFBQVEsd0JBQXdCO0FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQkMsR0FDRCxPQUFPLFNBQVMsU0FBUyxJQUFZLEVBQUUsRUFBVTtFQUMvQyxPQUFPLFlBQVksZ0JBQWdCLE1BQU0sTUFBTSxjQUFjLE1BQU07QUFDckUifQ==
+// denoCacheMetadata=3970865628188685982,13342588272175175639 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d7701d0e3d46aa0a2f44434d9ecb33d4a0624b75f54da0d6ea5daa2454cab1d2.js b/vendor/gen/https/jsr.io/d7701d0e3d46aa0a2f44434d9ecb33d4a0624b75f54da0d6ea5daa2454cab1d2.js
new file mode 100644
index 0000000..56bb615
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d7701d0e3d46aa0a2f44434d9ecb33d4a0624b75f54da0d6ea5daa2454cab1d2.js
@@ -0,0 +1,19 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * A parsed path object generated by path.parse() or consumed by path.format().
+ *
+ * @example
+ * ```ts
+ * import { parse } from "@std/path";
+ *
+ * const parsedPathObj = parse("c:\\path\\dir\\index.html");
+ * parsedPathObj.root; // "c:\\"
+ * parsedPathObj.dir; // "c:\\path\\dir"
+ * parsedPathObj.base; // "index.html"
+ * parsedPathObj.ext; // ".html"
+ * parsedPathObj.name; // "index"
+ * ```
+ */
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIEEgcGFyc2VkIHBhdGggb2JqZWN0IGdlbmVyYXRlZCBieSBwYXRoLnBhcnNlKCkgb3IgY29uc3VtZWQgYnkgcGF0aC5mb3JtYXQoKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBzdGQvcGF0aFwiO1xuICpcbiAqIGNvbnN0IHBhcnNlZFBhdGhPYmogPSBwYXJzZShcImM6XFxcXHBhdGhcXFxcZGlyXFxcXGluZGV4Lmh0bWxcIik7XG4gKiBwYXJzZWRQYXRoT2JqLnJvb3Q7IC8vIFwiYzpcXFxcXCJcbiAqIHBhcnNlZFBhdGhPYmouZGlyOyAvLyBcImM6XFxcXHBhdGhcXFxcZGlyXCJcbiAqIHBhcnNlZFBhdGhPYmouYmFzZTsgLy8gXCJpbmRleC5odG1sXCJcbiAqIHBhcnNlZFBhdGhPYmouZXh0OyAvLyBcIi5odG1sXCJcbiAqIHBhcnNlZFBhdGhPYmoubmFtZTsgLy8gXCJpbmRleFwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQYXRoIHtcbiAgLyoqXG4gICAqIFRoZSByb290IG9mIHRoZSBwYXRoIHN1Y2ggYXMgJy8nIG9yICdjOlxcJ1xuICAgKi9cbiAgcm9vdDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZ1bGwgZGlyZWN0b3J5IHBhdGggb2YgdGhlIHBhcmVudCBzdWNoIGFzICcvaG9tZS91c2VyL2Rpcicgb3IgJ2M6XFxwYXRoXFxkaXInXG4gICAqL1xuICBkaXI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvbiAoaWYgYW55KSBzdWNoIGFzICdpbmRleC5odG1sJ1xuICAgKi9cbiAgYmFzZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgZXh0ZW5zaW9uIChpZiBhbnkpIHN1Y2ggYXMgJy5odG1sJ1xuICAgKi9cbiAgZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIChpZiBhbnkpIHN1Y2ggYXMgJ2luZGV4J1xuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCJ9
+// denoCacheMetadata=5175465915552760208,17579665747998969026 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d77d190843438d9f873bc4d830989e945a260d8789624ebbc6bfc13df1be4367.js b/vendor/gen/https/jsr.io/d77d190843438d9f873bc4d830989e945a260d8789624ebbc6bfc13df1be4367.js
new file mode 100644
index 0000000..7272135
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d77d190843438d9f873bc4d830989e945a260d8789624ebbc6bfc13df1be4367.js
@@ -0,0 +1,29 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { fromFileUrl as posixFromFileUrl } from "./posix/from_file_url.ts";
+import { fromFileUrl as windowsFromFileUrl } from "./windows/from_file_url.ts";
+/**
+ * Converts a file URL to a path string.
+ *
+ * @example Usage
+ * ```ts
+ * import { fromFileUrl } from "@std/path/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
+ * assertEquals(fromFileUrl("file:///C:/Users/foo"), "C:\\Users\\foo");
+ * assertEquals(fromFileUrl("file://localhost/home/foo"), "\\home\\foo");
+ * } else {
+ * assertEquals(fromFileUrl("file:///home/foo"), "/home/foo");
+ * }
+ * ```
+ *
+ * @param url The file URL to convert to a path.
+ * @returns The path string.
+ */ export function fromFileUrl(url) {
+ return isWindows ? windowsFromFileUrl(url) : posixFromFileUrl(url);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9mcm9tX2ZpbGVfdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgZnJvbUZpbGVVcmwgYXMgcG9zaXhGcm9tRmlsZVVybCB9IGZyb20gXCIuL3Bvc2l4L2Zyb21fZmlsZV91cmwudHNcIjtcbmltcG9ydCB7IGZyb21GaWxlVXJsIGFzIHdpbmRvd3NGcm9tRmlsZVVybCB9IGZyb20gXCIuL3dpbmRvd3MvZnJvbV9maWxlX3VybC50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsZSBVUkwgdG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC9mcm9tLWZpbGUtdXJsXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKSwgXCJcXFxcaG9tZVxcXFxmb29cIik7XG4gKiAgIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vQzovVXNlcnMvZm9vXCIpLCBcIkM6XFxcXFVzZXJzXFxcXGZvb1wiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovL2xvY2FsaG9zdC9ob21lL2Zvb1wiKSwgXCJcXFxcaG9tZVxcXFxmb29cIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMoZnJvbUZpbGVVcmwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpLCBcIi9ob21lL2Zvb1wiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB1cmwgVGhlIGZpbGUgVVJMIHRvIGNvbnZlcnQgdG8gYSBwYXRoLlxuICogQHJldHVybnMgVGhlIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBzdHJpbmcgfCBVUkwpOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0Zyb21GaWxlVXJsKHVybCkgOiBwb3NpeEZyb21GaWxlVXJsKHVybCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsZUFBZSxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFDM0UsU0FBUyxlQUFlLGtCQUFrQixRQUFRLDZCQUE2QjtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNELE9BQU8sU0FBUyxZQUFZLEdBQWlCO0VBQzNDLE9BQU8sWUFBWSxtQkFBbUIsT0FBTyxpQkFBaUI7QUFDaEUifQ==
+// denoCacheMetadata=18324079392581752174,17254104756215203181 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d789b6dce9dc3e5e94bd66aaf8fe68410725f1da2d406a26067ad8603e73ab08.js b/vendor/gen/https/jsr.io/d789b6dce9dc3e5e94bd66aaf8fe68410725f1da2d406a26067ad8603e73ab08.js
new file mode 100644
index 0000000..385dce7
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d789b6dce9dc3e5e94bd66aaf8fe68410725f1da2d406a26067ad8603e73ab08.js
@@ -0,0 +1,44 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { assertArgs, lastPathSegment, stripSuffix } from "../_common/basename.ts";
+import { CHAR_COLON } from "../_common/constants.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return the last portion of a `path`.
+ * Trailing directory separators are ignored, and optional suffix is removed.
+ *
+ * @example Usage
+ * ```ts
+ * import { basename } from "@std/path/windows/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(basename("C:\\user\\Documents\\"), "Documents");
+ * assertEquals(basename("C:\\user\\Documents\\image.png"), "image.png");
+ * assertEquals(basename("C:\\user\\Documents\\image.png", ".png"), "image");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `basename` from `@std/path/windows/unstable-basename`.
+ *
+ * @param path The path to extract the name from.
+ * @param suffix The suffix to remove from extracted name.
+ * @returns The extracted name.
+ */ export function basename(path, suffix = "") {
+ assertArgs(path, suffix);
+ // Check for a drive letter prefix so as not to mistake the following
+ // path separator as an extra separator at the end of the path that can be
+ // disregarded
+ let start = 0;
+ if (path.length >= 2) {
+ const drive = path.charCodeAt(0);
+ if (isWindowsDeviceRoot(drive)) {
+ if (path.charCodeAt(1) === CHAR_COLON) start = 2;
+ }
+ }
+ const lastSegment = lastPathSegment(path, isPathSeparator, start);
+ const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator);
+ return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2Jhc2VuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7XG4gIGFzc2VydEFyZ3MsXG4gIGxhc3RQYXRoU2VnbWVudCxcbiAgc3RyaXBTdWZmaXgsXG59IGZyb20gXCIuLi9fY29tbW9uL2Jhc2VuYW1lLnRzXCI7XG5pbXBvcnQgeyBDSEFSX0NPTE9OIH0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyB9IGZyb20gXCIuLi9fY29tbW9uL3N0cmlwX3RyYWlsaW5nX3NlcGFyYXRvcnMudHNcIjtcbmltcG9ydCB7IGlzUGF0aFNlcGFyYXRvciwgaXNXaW5kb3dzRGV2aWNlUm9vdCB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuXG4gKiBUcmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgaWdub3JlZCwgYW5kIG9wdGlvbmFsIHN1ZmZpeCBpcyByZW1vdmVkLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvYmFzZW5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhiYXNlbmFtZShcIkM6XFxcXHVzZXJcXFxcRG9jdW1lbnRzXFxcXFwiKSwgXCJEb2N1bWVudHNcIik7XG4gKiBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCJDOlxcXFx1c2VyXFxcXERvY3VtZW50c1xcXFxpbWFnZS5wbmdcIiksIFwiaW1hZ2UucG5nXCIpO1xuICogYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiQzpcXFxcdXNlclxcXFxEb2N1bWVudHNcXFxcaW1hZ2UucG5nXCIsIFwiLnBuZ1wiKSwgXCJpbWFnZVwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGJhc2VuYW1lYCBmcm9tIGBAc3RkL3BhdGgvd2luZG93cy91bnN0YWJsZS1iYXNlbmFtZWAuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gZXh0cmFjdCB0aGUgbmFtZSBmcm9tLlxuICogQHBhcmFtIHN1ZmZpeCBUaGUgc3VmZml4IHRvIHJlbW92ZSBmcm9tIGV4dHJhY3RlZCBuYW1lLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBzdWZmaXggPSBcIlwiKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJncyhwYXRoLCBzdWZmaXgpO1xuXG4gIC8vIENoZWNrIGZvciBhIGRyaXZlIGxldHRlciBwcmVmaXggc28gYXMgbm90IHRvIG1pc3Rha2UgdGhlIGZvbGxvd2luZ1xuICAvLyBwYXRoIHNlcGFyYXRvciBhcyBhbiBleHRyYSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCB0aGF0IGNhbiBiZVxuICAvLyBkaXNyZWdhcmRlZFxuICBsZXQgc3RhcnQgPSAwO1xuICBpZiAocGF0aC5sZW5ndGggPj0gMikge1xuICAgIGNvbnN0IGRyaXZlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGRyaXZlKSkge1xuICAgICAgaWYgKHBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTikgc3RhcnQgPSAyO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxhc3RTZWdtZW50ID0gbGFzdFBhdGhTZWdtZW50KHBhdGgsIGlzUGF0aFNlcGFyYXRvciwgc3RhcnQpO1xuICBjb25zdCBzdHJpcHBlZFNlZ21lbnQgPSBzdHJpcFRyYWlsaW5nU2VwYXJhdG9ycyhsYXN0U2VnbWVudCwgaXNQYXRoU2VwYXJhdG9yKTtcbiAgcmV0dXJuIHN1ZmZpeCA/IHN0cmlwU3VmZml4KHN0cmlwcGVkU2VnbWVudCwgc3VmZml4KSA6IHN0cmlwcGVkU2VnbWVudDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQ0UsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLFFBQ04seUJBQXlCO0FBQ2hDLFNBQVMsVUFBVSxRQUFRLDBCQUEwQjtBQUNyRCxTQUFTLHVCQUF1QixRQUFRLDBDQUEwQztBQUNsRixTQUFTLGVBQWUsRUFBRSxtQkFBbUIsUUFBUSxhQUFhO0FBRWxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxTQUFTLElBQVksRUFBRSxTQUFTLEVBQUU7RUFDaEQsV0FBVyxNQUFNO0VBRWpCLHFFQUFxRTtFQUNyRSwwRUFBMEU7RUFDMUUsY0FBYztFQUNkLElBQUksUUFBUTtFQUNaLElBQUksS0FBSyxNQUFNLElBQUksR0FBRztJQUNwQixNQUFNLFFBQVEsS0FBSyxVQUFVLENBQUM7SUFDOUIsSUFBSSxvQkFBb0IsUUFBUTtNQUM5QixJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sWUFBWSxRQUFRO0lBQ2pEO0VBQ0Y7RUFFQSxNQUFNLGNBQWMsZ0JBQWdCLE1BQU0saUJBQWlCO0VBQzNELE1BQU0sa0JBQWtCLHdCQUF3QixhQUFhO0VBQzdELE9BQU8sU0FBUyxZQUFZLGlCQUFpQixVQUFVO0FBQ3pEIn0=
+// denoCacheMetadata=12931844423976950166,3487146104282885864 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d79a58233f7495a8b07c0419ec5e64b6353ca3979abed89b309abc2f76e4e2fc.js b/vendor/gen/https/jsr.io/d79a58233f7495a8b07c0419ec5e64b6353ca3979abed89b309abc2f76e4e2fc.js
new file mode 100644
index 0000000..d5307a1
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d79a58233f7495a8b07c0419ec5e64b6353ca3979abed89b309abc2f76e4e2fc.js
@@ -0,0 +1,96 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { filterInPlace } from "./_utils.ts";
+export function deepMerge(record, other, options) {
+ return deepMergeInternal(record, other, new Set(), options);
+}
+function deepMergeInternal(record, other, seen, options) {
+ const result = {};
+ const keys = new Set([
+ ...getKeys(record),
+ ...getKeys(other)
+ ]);
+ // Iterate through each key of other object and use correct merging strategy
+ for (const key of keys){
+ // Skip to prevent Object.prototype.__proto__ accessor property calls on non-Deno platforms
+ if (key === "__proto__") {
+ continue;
+ }
+ const a = record[key];
+ if (!Object.hasOwn(other, key)) {
+ result[key] = a;
+ continue;
+ }
+ const b = other[key];
+ if (isNonNullObject(a) && isNonNullObject(b) && !seen.has(a) && !seen.has(b)) {
+ seen.add(a);
+ seen.add(b);
+ result[key] = mergeObjects(a, b, seen, options);
+ continue;
+ }
+ // Override value
+ result[key] = b;
+ }
+ return result;
+}
+function mergeObjects(left, right, seen, options = {
+ arrays: "merge",
+ sets: "merge",
+ maps: "merge"
+}) {
+ // Recursively merge mergeable objects
+ if (isMergeable(left) && isMergeable(right)) {
+ return deepMergeInternal(left, right, seen, options);
+ }
+ if (isIterable(left) && isIterable(right)) {
+ // Handle arrays
+ if (Array.isArray(left) && Array.isArray(right)) {
+ if (options.arrays === "merge") {
+ return left.concat(right);
+ }
+ return right;
+ }
+ // Handle maps
+ if (left instanceof Map && right instanceof Map) {
+ if (options.maps === "merge") {
+ return new Map([
+ ...left,
+ ...right
+ ]);
+ }
+ return right;
+ }
+ // Handle sets
+ if (left instanceof Set && right instanceof Set) {
+ if (options.sets === "merge") {
+ return new Set([
+ ...left,
+ ...right
+ ]);
+ }
+ return right;
+ }
+ }
+ return right;
+}
+/**
+ * Test whether a value is mergeable or not
+ * Builtins that look like objects, null and user defined classes
+ * are not considered mergeable (it means that reference will be copied)
+ */ function isMergeable(value) {
+ return Object.getPrototypeOf(value) === Object.prototype;
+}
+function isIterable(value) {
+ return typeof value[Symbol.iterator] === "function";
+}
+function isNonNullObject(value) {
+ return value !== null && typeof value === "object";
+}
+function getKeys(record) {
+ const result = Object.getOwnPropertySymbols(record);
+ filterInPlace(result, (key)=>Object.prototype.propertyIsEnumerable.call(record, key));
+ result.push(...Object.keys(record));
+ return result;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY29sbGVjdGlvbnMvMS4xLjEvZGVlcF9tZXJnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBmaWx0ZXJJblBsYWNlIH0gZnJvbSBcIi4vX3V0aWxzLnRzXCI7XG5cbi8qKlxuICogTWVyZ2VzIHRoZSB0d28gZ2l2ZW4gcmVjb3JkcywgcmVjdXJzaXZlbHkgbWVyZ2luZyBhbnkgbmVzdGVkIHJlY29yZHMgd2l0aCB0aGVcbiAqIHNlY29uZCBjb2xsZWN0aW9uIG92ZXJyaWRpbmcgdGhlIGZpcnN0IGluIGNhc2Ugb2YgY29uZmxpY3QuXG4gKlxuICogRm9yIGFycmF5cywgbWFwcyBhbmQgc2V0cywgYSBtZXJnaW5nIHN0cmF0ZWd5IGNhbiBiZSBzcGVjaWZpZWQgdG8gZWl0aGVyXG4gKiBgcmVwbGFjZWAgdmFsdWVzLCBvciBgbWVyZ2VgIHRoZW0gaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgVHlwZSBvZiB0aGUgZmlyc3QgcmVjb3JkXG4gKlxuICogQHBhcmFtIHJlY29yZCBGaXJzdCByZWNvcmQgdG8gbWVyZ2UuXG4gKiBAcGFyYW0gb3RoZXIgU2Vjb25kIHJlY29yZCB0byBtZXJnZS5cbiAqIEBwYXJhbSBvcHRpb25zIE1lcmdpbmcgb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyByZWNvcmQgd2l0aCB0aGUgbWVyZ2VkIHZhbHVlcy5cbiAqXG4gKiBAZXhhbXBsZSBNZXJnZSBvYmplY3RzXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIkBzdGQvY29sbGVjdGlvbnMvZGVlcC1tZXJnZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYSA9IHsgZm9vOiB0cnVlIH07XG4gKiBjb25zdCBiID0geyBmb286IHsgYmFyOiB0cnVlIH0gfTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBkZWVwTWVyZ2UoYSwgYik7XG4gKlxuICogY29uc3QgZXhwZWN0ZWQgPSB7IGZvbzogeyBiYXI6IHRydWUgfSB9O1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIE1lcmdlIGFycmF5c1xuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJAc3RkL2NvbGxlY3Rpb25zL2RlZXAtbWVyZ2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGEgPSB7IGZvbzogWzEsIDJdIH07XG4gKiBjb25zdCBiID0geyBmb286IFszLCA0XSB9O1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGRlZXBNZXJnZShhLCBiKTtcbiAqXG4gKiBjb25zdCBleHBlY3RlZCA9IHsgZm9vOiBbMSwgMiwgMywgNF0gfTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3RlZCk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBNZXJnZSBtYXBzXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIkBzdGQvY29sbGVjdGlvbnMvZGVlcC1tZXJnZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYSA9IHsgZm9vOiBuZXcgTWFwKFtbXCJhXCIsIDFdXSkgfTtcbiAqIGNvbnN0IGIgPSB7IGZvbzogbmV3IE1hcChbW1wiYlwiLCAyXV0pIH07XG4gKlxuICogY29uc3QgcmVzdWx0ID0gZGVlcE1lcmdlKGEsIGIpO1xuICpcbiAqIGNvbnN0IGV4cGVjdGVkID0geyBmb286IG5ldyBNYXAoW1tcImFcIiwgMV0sIFtcImJcIiwgMl1dKSB9O1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIE1lcmdlIHNldHNcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiQHN0ZC9jb2xsZWN0aW9ucy9kZWVwLW1lcmdlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBhID0geyBmb286IG5ldyBTZXQoWzFdKSB9O1xuICogY29uc3QgYiA9IHsgZm9vOiBuZXcgU2V0KFsyXSkgfTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBkZWVwTWVyZ2UoYSwgYik7XG4gKlxuICogY29uc3QgZXhwZWN0ZWQgPSB7IGZvbzogbmV3IFNldChbMSwgMl0pIH07XG4gKlxuICogYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgTWVyZ2Ugd2l0aCBjdXN0b20gb3B0aW9uc1xuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJAc3RkL2NvbGxlY3Rpb25zL2RlZXAtbWVyZ2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGEgPSB7IGZvbzogWzEsIDJdIH07XG4gKiBjb25zdCBiID0geyBmb286IFszLCA0XSB9O1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGRlZXBNZXJnZShhLCBiLCB7IGFycmF5czogXCJyZXBsYWNlXCIgfSk7XG4gKlxuICogY29uc3QgZXhwZWN0ZWQgPSB7IGZvbzogWzMsIDRdIH07XG4gKlxuICogYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2U8XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+LFxuPihcbiAgcmVjb3JkOiBQYXJ0aWFsPFJlYWRvbmx5PFQ+PixcbiAgb3RoZXI6IFBhcnRpYWw8UmVhZG9ubHk8VD4+LFxuICBvcHRpb25zPzogUmVhZG9ubHk8RGVlcE1lcmdlT3B0aW9ucz4sXG4pOiBUO1xuLyoqXG4gKiBNZXJnZXMgdGhlIHR3byBnaXZlbiByZWNvcmRzLCByZWN1cnNpdmVseSBtZXJnaW5nIGFueSBuZXN0ZWQgcmVjb3JkcyB3aXRoIHRoZVxuICogc2Vjb25kIGNvbGxlY3Rpb24gb3ZlcnJpZGluZyB0aGUgZmlyc3QgaW4gY2FzZSBvZiBjb25mbGljdC5cbiAqXG4gKiBGb3IgYXJyYXlzLCBtYXBzIGFuZCBzZXRzLCBhIG1lcmdpbmcgc3RyYXRlZ3kgY2FuIGJlIHNwZWNpZmllZCB0byBlaXRoZXJcbiAqIGByZXBsYWNlYCB2YWx1ZXMsIG9yIGBtZXJnZWAgdGhlbSBpbnN0ZWFkLlxuICpcbiAqIEB0eXBlUGFyYW0gVCBUeXBlIG9mIHRoZSBmaXJzdCByZWNvcmRcbiAqIEB0eXBlUGFyYW0gVSBUeXBlIG9mIHRoZSBzZWNvbmQgcmVjb3JkXG4gKiBAdHlwZVBhcmFtIE9wdGlvbnMgTWVyZ2luZyBvcHRpb25zXG4gKlxuICogQHBhcmFtIHJlY29yZCBGaXJzdCByZWNvcmQgdG8gbWVyZ2UuXG4gKiBAcGFyYW0gb3RoZXIgU2Vjb25kIHJlY29yZCB0byBtZXJnZS5cbiAqIEBwYXJhbSBvcHRpb25zIE1lcmdpbmcgb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyByZWNvcmQgd2l0aCB0aGUgbWVyZ2VkIHZhbHVlcy5cbiAqXG4gKiBAZXhhbXBsZSBNZXJnZSBvYmplY3RzXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIkBzdGQvY29sbGVjdGlvbnMvZGVlcC1tZXJnZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYSA9IHsgZm9vOiB0cnVlIH07XG4gKiBjb25zdCBiID0geyBmb286IHsgYmFyOiB0cnVlIH0gfTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBkZWVwTWVyZ2UoYSwgYik7XG4gKlxuICogY29uc3QgZXhwZWN0ZWQgPSB7IGZvbzogeyBiYXI6IHRydWUgfSB9O1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIE1lcmdlIGFycmF5c1xuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJAc3RkL2NvbGxlY3Rpb25zL2RlZXAtbWVyZ2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGEgPSB7IGZvbzogWzEsIDJdIH07XG4gKiBjb25zdCBiID0geyBmb286IFszLCA0XSB9O1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGRlZXBNZXJnZShhLCBiKTtcbiAqXG4gKiBjb25zdCBleHBlY3RlZCA9IHsgZm9vOiBbMSwgMiwgMywgNF0gfTtcbiAqXG4gKiBhc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3RlZCk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBNZXJnZSBtYXBzXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIkBzdGQvY29sbGVjdGlvbnMvZGVlcC1tZXJnZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3QgYSA9IHsgZm9vOiBuZXcgTWFwKFtbXCJhXCIsIDFdXSkgfTtcbiAqIGNvbnN0IGIgPSB7IGZvbzogbmV3IE1hcChbW1wiYlwiLCAyXV0pIH07XG4gKlxuICogY29uc3QgcmVzdWx0ID0gZGVlcE1lcmdlKGEsIGIpO1xuICpcbiAqIGNvbnN0IGV4cGVjdGVkID0geyBmb286IG5ldyBNYXAoW1tcImFcIiwgMV0sIFtcImJcIiwgMl1dKSB9O1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIE1lcmdlIHNldHNcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiQHN0ZC9jb2xsZWN0aW9ucy9kZWVwLW1lcmdlXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBhID0geyBmb286IG5ldyBTZXQoWzFdKSB9O1xuICogY29uc3QgYiA9IHsgZm9vOiBuZXcgU2V0KFsyXSkgfTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBkZWVwTWVyZ2UoYSwgYik7XG4gKlxuICogY29uc3QgZXhwZWN0ZWQgPSB7IGZvbzogbmV3IFNldChbMSwgMl0pIH07XG4gKlxuICogYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgTWVyZ2Ugd2l0aCBjdXN0b20gb3B0aW9uc1xuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJAc3RkL2NvbGxlY3Rpb25zL2RlZXAtbWVyZ2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IGEgPSB7IGZvbzogWzEsIDJdIH07XG4gKiBjb25zdCBiID0geyBmb286IFszLCA0XSB9O1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGRlZXBNZXJnZShhLCBiLCB7IGFycmF5czogXCJyZXBsYWNlXCIgfSk7XG4gKlxuICogY29uc3QgZXhwZWN0ZWQgPSB7IGZvbzogWzMsIDRdIH07XG4gKlxuICogYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2U8XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+LFxuICBVIGV4dGVuZHMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPixcbiAgT3B0aW9ucyBleHRlbmRzIERlZXBNZXJnZU9wdGlvbnMsXG4+KFxuICByZWNvcmQ6IFJlYWRvbmx5PFQ+LFxuICBvdGhlcjogUmVhZG9ubHk8VT4sXG4gIG9wdGlvbnM/OiBSZWFkb25seTxPcHRpb25zPixcbik6IERlZXBNZXJnZTxULCBVLCBPcHRpb25zPjtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2U8XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+LFxuICBVIGV4dGVuZHMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPixcbiAgT3B0aW9ucyBleHRlbmRzIERlZXBNZXJnZU9wdGlvbnMgPSB7XG4gICAgYXJyYXlzOiBcIm1lcmdlXCI7XG4gICAgc2V0czogXCJtZXJnZVwiO1xuICAgIG1hcHM6IFwibWVyZ2VcIjtcbiAgfSxcbj4oXG4gIHJlY29yZDogUmVhZG9ubHk8VD4sXG4gIG90aGVyOiBSZWFkb25seTxVPixcbiAgb3B0aW9ucz86IFJlYWRvbmx5PE9wdGlvbnM+LFxuKTogRGVlcE1lcmdlPFQsIFUsIE9wdGlvbnM+IHtcbiAgcmV0dXJuIGRlZXBNZXJnZUludGVybmFsKHJlY29yZCwgb3RoZXIsIG5ldyBTZXQoKSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGRlZXBNZXJnZUludGVybmFsPFxuICBUIGV4dGVuZHMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPixcbiAgVSBleHRlbmRzIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4sXG4gIE9wdGlvbnMgZXh0ZW5kcyBEZWVwTWVyZ2VPcHRpb25zID0ge1xuICAgIGFycmF5czogXCJtZXJnZVwiO1xuICAgIHNldHM6IFwibWVyZ2VcIjtcbiAgICBtYXBzOiBcIm1lcmdlXCI7XG4gIH0sXG4+KFxuICByZWNvcmQ6IFJlYWRvbmx5PFQ+LFxuICBvdGhlcjogUmVhZG9ubHk8VT4sXG4gIHNlZW46IFNldDxOb25OdWxsYWJsZTx1bmtub3duPj4sXG4gIG9wdGlvbnM/OiBSZWFkb25seTxPcHRpb25zPixcbikge1xuICAvLyBFeHRyYWN0IG9wdGlvbnNcbiAgLy8gQ2xvbmUgbGVmdCBvcGVyYW5kIHRvIGF2b2lkIHBlcmZvcm1pbmcgbXV0YXRpb25zIGluLXBsYWNlXG4gIHR5cGUgUmVzdWx0ID0gRGVlcE1lcmdlPFQsIFUsIE9wdGlvbnM+O1xuICBjb25zdCByZXN1bHQ6IFBhcnRpYWw8UmVzdWx0PiA9IHt9O1xuXG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0KFtcbiAgICAuLi5nZXRLZXlzKHJlY29yZCksXG4gICAgLi4uZ2V0S2V5cyhvdGhlciksXG4gIF0pIGFzIFNldDxrZXlvZiBSZXN1bHQ+O1xuXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGtleSBvZiBvdGhlciBvYmplY3QgYW5kIHVzZSBjb3JyZWN0IG1lcmdpbmcgc3RyYXRlZ3lcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIC8vIFNraXAgdG8gcHJldmVudCBPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyBhY2Nlc3NvciBwcm9wZXJ0eSBjYWxscyBvbiBub24tRGVubyBwbGF0Zm9ybXNcbiAgICBpZiAoa2V5ID09PSBcIl9fcHJvdG9fX1wiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0eXBlIFJlc3VsdE1lbWJlciA9IFJlc3VsdFt0eXBlb2Yga2V5XTtcblxuICAgIGNvbnN0IGEgPSByZWNvcmRba2V5XSBhcyBSZXN1bHRNZW1iZXI7XG5cbiAgICBpZiAoIU9iamVjdC5oYXNPd24ob3RoZXIsIGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gYTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYiA9IG90aGVyW2tleV0gYXMgUmVzdWx0TWVtYmVyO1xuXG4gICAgaWYgKFxuICAgICAgaXNOb25OdWxsT2JqZWN0KGEpICYmIGlzTm9uTnVsbE9iamVjdChiKSAmJiAhc2Vlbi5oYXMoYSkgJiYgIXNlZW4uaGFzKGIpXG4gICAgKSB7XG4gICAgICBzZWVuLmFkZChhKTtcbiAgICAgIHNlZW4uYWRkKGIpO1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZU9iamVjdHMoYSwgYiwgc2Vlbiwgb3B0aW9ucykgYXMgUmVzdWx0TWVtYmVyO1xuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSB2YWx1ZVxuICAgIHJlc3VsdFtrZXldID0gYjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgUmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtZXJnZU9iamVjdHMoXG4gIGxlZnQ6IFJlYWRvbmx5PE5vbk51bGxhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4sXG4gIHJpZ2h0OiBSZWFkb25seTxOb25OdWxsYWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+LFxuICBzZWVuOiBTZXQ8Tm9uTnVsbGFibGU8dW5rbm93bj4+LFxuICBvcHRpb25zOiBSZWFkb25seTxEZWVwTWVyZ2VPcHRpb25zPiA9IHtcbiAgICBhcnJheXM6IFwibWVyZ2VcIixcbiAgICBzZXRzOiBcIm1lcmdlXCIsXG4gICAgbWFwczogXCJtZXJnZVwiLFxuICB9LFxuKTogUmVhZG9ubHk8Tm9uTnVsbGFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBJdGVyYWJsZTx1bmtub3duPj4+IHtcbiAgLy8gUmVjdXJzaXZlbHkgbWVyZ2UgbWVyZ2VhYmxlIG9iamVjdHNcbiAgaWYgKGlzTWVyZ2VhYmxlKGxlZnQpICYmIGlzTWVyZ2VhYmxlKHJpZ2h0KSkge1xuICAgIHJldHVybiBkZWVwTWVyZ2VJbnRlcm5hbChsZWZ0LCByaWdodCwgc2Vlbiwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaXNJdGVyYWJsZShsZWZ0KSAmJiBpc0l0ZXJhYmxlKHJpZ2h0KSkge1xuICAgIC8vIEhhbmRsZSBhcnJheXNcbiAgICBpZiAoKEFycmF5LmlzQXJyYXkobGVmdCkpICYmIChBcnJheS5pc0FycmF5KHJpZ2h0KSkpIHtcbiAgICAgIGlmIChvcHRpb25zLmFycmF5cyA9PT0gXCJtZXJnZVwiKSB7XG4gICAgICAgIHJldHVybiBsZWZ0LmNvbmNhdChyaWdodCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByaWdodDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbWFwc1xuICAgIGlmICgobGVmdCBpbnN0YW5jZW9mIE1hcCkgJiYgKHJpZ2h0IGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgaWYgKG9wdGlvbnMubWFwcyA9PT0gXCJtZXJnZVwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKFtcbiAgICAgICAgICAuLi5sZWZ0LFxuICAgICAgICAgIC4uLnJpZ2h0LFxuICAgICAgICBdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJpZ2h0O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzZXRzXG4gICAgaWYgKChsZWZ0IGluc3RhbmNlb2YgU2V0KSAmJiAocmlnaHQgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICBpZiAob3B0aW9ucy5zZXRzID09PSBcIm1lcmdlXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgICAgIC4uLmxlZnQsXG4gICAgICAgICAgLi4ucmlnaHQsXG4gICAgICAgIF0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJpZ2h0O1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG1lcmdlYWJsZSBvciBub3RcbiAqIEJ1aWx0aW5zIHRoYXQgbG9vayBsaWtlIG9iamVjdHMsIG51bGwgYW5kIHVzZXIgZGVmaW5lZCBjbGFzc2VzXG4gKiBhcmUgbm90IGNvbnNpZGVyZWQgbWVyZ2VhYmxlIChpdCBtZWFucyB0aGF0IHJlZmVyZW5jZSB3aWxsIGJlIGNvcGllZClcbiAqL1xuZnVuY3Rpb24gaXNNZXJnZWFibGUoXG4gIHZhbHVlOiBOb25OdWxsYWJsZTx1bmtub3duPixcbik6IHZhbHVlIGlzIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4ge1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuZnVuY3Rpb24gaXNJdGVyYWJsZShcbiAgdmFsdWU6IE5vbk51bGxhYmxlPHVua25vd24+LFxuKTogdmFsdWUgaXMgSXRlcmFibGU8dW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSBhcyBJdGVyYWJsZTx1bmtub3duPilbU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdmFsdWUgaXMgTm9uTnVsbGFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5czxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHJlY29yZDogVCk6IEFycmF5PGtleW9mIFQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyZWNvcmQpIGFzIEFycmF5PGtleW9mIFQ+O1xuICBmaWx0ZXJJblBsYWNlKFxuICAgIHJlc3VsdCxcbiAgICAoa2V5KSA9PiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocmVjb3JkLCBrZXkpLFxuICApO1xuICByZXN1bHQucHVzaCguLi4oT2JqZWN0LmtleXMocmVjb3JkKSBhcyBBcnJheTxrZXlvZiBUPikpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBNZXJnaW5nIHN0cmF0ZWd5ICovXG5leHBvcnQgdHlwZSBNZXJnaW5nU3RyYXRlZ3kgPSBcInJlcGxhY2VcIiB8IFwibWVyZ2VcIjtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgZGVlcE1lcmdlfS4gKi9cbmV4cG9ydCB0eXBlIERlZXBNZXJnZU9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBNZXJnaW5nIHN0cmF0ZWd5IGZvciBhcnJheXNcbiAgICpcbiAgICogQGRlZmF1bHQge1wibWVyZ2VcIn1cbiAgICovXG4gIGFycmF5cz86IE1lcmdpbmdTdHJhdGVneTtcbiAgLyoqXG4gICAqIE1lcmdpbmcgc3RyYXRlZ3kgZm9yIG1hcHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtcIm1lcmdlXCJ9XG4gICAqL1xuICBtYXBzPzogTWVyZ2luZ1N0cmF0ZWd5O1xuICAvKipcbiAgICogTWVyZ2luZyBzdHJhdGVneSBmb3Igc2V0cy5cbiAgICpcbiAgICogQGRlZmF1bHQge1wibWVyZ2VcIn1cbiAgICovXG4gIHNldHM/OiBNZXJnaW5nU3RyYXRlZ3k7XG59O1xuXG4vKipcbiAqIEhvdyBkb2VzIHJlY3Vyc2l2ZSB0eXBpbmcgd29ya3MgP1xuICpcbiAqIERlZXAgbWVyZ2luZyBwcm9jZXNzIGlzIGhhbmRsZWQgdGhyb3VnaCBgRGVlcE1lcmdlPFQsIFUsIE9wdGlvbnM+YCB0eXBlLlxuICogSWYgYm90aCBUIGFuZCBVIGFyZSBSZWNvcmRzLCB3ZSByZWN1cnNpdmVseSBtZXJnZSB0aGVtLFxuICogZWxzZSB3ZSB0cmVhdCB0aGVtIGFzIHByaW1pdGl2ZXMuXG4gKlxuICogTWVyZ2luZyBwcm9jZXNzIGlzIGhhbmRsZWQgdGhyb3VnaCBgTWVyZ2U8VCwgVT5gIHR5cGUsIGluIHdoaWNoXG4gKiB3ZSByZW1vdmUgYWxsIG1hcHMsIHNldHMsIGFycmF5cyBhbmQgcmVjb3JkcyBzbyB3ZSBjYW4gaGFuZGxlIHRoZW1cbiAqIHNlcGFyYXRlbHkgZGVwZW5kaW5nIG9uIG1lcmdpbmcgc3RyYXRlZ3k6XG4gKlxuICogICAgTWVyZ2U8XG4gKiAgICAgIHtmb286IHN0cmluZ30sXG4gKiAgICAgIHtiYXI6IHN0cmluZywgYmF6OiBTZXQ8dW5rbm93bj59LFxuICogICAgPiAvLyBcImZvb1wiIGFuZCBcImJhclwiIHdpbGwgYmUgaGFuZGxlZCB3aXRoIGBNZXJnZVJpZ2h0T21pdENvbXBsZXhlc2BcbiAqICAgICAgLy8gXCJiYXpcIiB3aWxsIGJlIGhhbmRsZWQgd2l0aCBgTWVyZ2VBbGwqYCB0eXBlXG4gKlxuICogYE1lcmdlUmlnaHRPbWl0Q29tcGxleGVzPFQsIFU+YCB3aWxsIGRvIHRoZSBhYm92ZTogYWxsIFQnc1xuICogZXhjbHVzaXZlIGtleXMgd2lsbCBiZSBrZXB0LCB0aG91Z2ggY29tbW9uIG9uZXMgd2l0aCBVIHdpbGwgaGF2ZSB0aGVpclxuICogdHlwaW5nIG92ZXJyaWRkZW4gaW5zdGVhZDpcbiAqXG4gKiAgICBNZXJnZVJpZ2h0T21pdENvbXBsZXhlczxcbiAqICAgICAge2Zvbzogc3RyaW5nLCBiYXo6IG51bWJlcn0sXG4gKiAgICAgIHtmb286IGJvb2xlYW4sIGJhcjogc3RyaW5nfVxuICogICAgPiAvLyB7YmF6OiBudW1iZXIsIGZvbzogYm9vbGVhbiwgYmFyOiBzdHJpbmd9XG4gKiAgICAgIC8vIFwiYmF6XCIgd2FzIGtlcHQgZnJvbSBUXG4gKiAgICAgIC8vIFwiZm9vXCIgd2FzIG92ZXJyaWRkZW4gYnkgVSdzIHR5cGluZ1xuICogICAgICAvLyBcImJhclwiIHdhcyBhZGRlZCBmcm9tIFVcbiAqXG4gKiBGb3IgTWFwcywgQXJyYXlzLCBTZXRzIGFuZCBSZWNvcmRzLCB3ZSB1c2UgYE1lcmdlQWxsKjxULCBVPmAgdXRpbGl0eVxuICogdHlwZXMuIFRoZXkgd2lsbCBleHRyYWN0IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlIGZyb20gYm90aCBUIGFuZCBVXG4gKiAocHJvdmlkaW5nIHRoYXQgYm90aCBoYXZlIHNhbWUgZGF0YSBkYXRhIHN0cnVjdHVyZSwgZXhjZXB0IGZvciB0eXBpbmcpLlxuICpcbiAqIEZyb20gdGhlc2UsIGAqVmFsdWVUeXBlPFQ+YCB3aWxsIGV4dHJhY3QgdmFsdWVzIChhbmQga2V5cykgdHlwZXMgdG8gYmVcbiAqIGFibGUgdG8gY3JlYXRlIGEgbmV3IGRhdGEgc3RydWN0dXJlIHdpdGggYW4gdW5pb24gdHlwaW5nIGZyb20gYm90aFxuICogZGF0YSBzdHJ1Y3R1cmUgb2YgVCBhbmQgVTpcbiAqXG4gKiAgICBNZXJnZUFsbFNldHM8XG4gKiAgICAgIHtmb286IFNldDxudW1iZXI+fSxcbiAqICAgICAge2ZvbzogU2V0PHN0cmluZz59XG4gKiAgICA+IC8vIGBTZXRWYWx1ZVR5cGVgIHdpbGwgZXh0cmFjdCBcIm51bWJlclwiIGZvciBUXG4gKiAgICAgIC8vIGBTZXRWYWx1ZVR5cGVgIHdpbGwgZXh0cmFjdCBcInN0cmluZ1wiIGZvciBVXG4gKiAgICAgIC8vIGBNZXJnZUFsbFNldHNgIHdpbGwgaW5mZXIgdHlwZSBhcyBTZXQ8bnVtYmVyfHN0cmluZz5cbiAqICAgICAgLy8gUHJvY2VzcyBpcyBzaW1pbGFyIGZvciBNYXBzLCBBcnJheXMsIGFuZCBTZXRzXG4gKlxuICogYERlZXBNZXJnZTxULCBVLCBPcHRpb25zPmAgaXMgdGFraW5nIGEgdGhpcmQgYXJndW1lbnQgdG8gYmUgaGFuZGxlIHRvXG4gKiBpbmZlciBmaW5hbCB0eXBpbmcgZGVwZW5kaW5nIG9uIG1lcmdpbmcgc3RyYXRlZ3k6XG4gKlxuICogICAgJiAoT3B0aW9ucyBleHRlbmRzIHsgc2V0czogXCJyZXBsYWNlXCIgfSA/IFBhcnRpYWxCeVR5cGU8VSwgU2V0PHVua25vd24+PlxuICogICAgICA6IE1lcmdlQWxsU2V0czxULCBVPilcbiAqXG4gKiBJbiB0aGUgYWJvdmUgbGluZSwgaWYgXCJPcHRpb25zXCIgaGF2ZSBpdHMgbWVyZ2luZyBzdHJhdGVneSBmb3IgU2V0cyBzZXQgdG9cbiAqIFwicmVwbGFjZVwiLCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgbWVyZ2luZyBvZiBTZXRzIHR5cGUsIGl0IHdpbGwgdGFrZSB0aGVcbiAqIHR5cGluZyBmcm9tIHJpZ2h0IG9wZXJhbmQgKFUpIGluc3RlYWQsIGVmZmVjdGl2ZWx5IHJlcGxhY2luZyB0aGUgdHlwaW5nLlxuICpcbiAqIEFuIGFkZGl0aW9uYWwgbm90ZSwgd2UgdXNlIGBFeHBhbmRSZWN1cnNpdmVseTxUPmAgdXRpbGl0eSB0eXBlIHRvIGV4cGFuZFxuICogdGhlIHJlc3VsdGluZyB0eXBpbmcgYW5kIGhpZGUgYWxsIHRoZSB0eXBpbmcgbG9naWMgb2YgZGVlcCBtZXJnaW5nIHNvIGl0IGlzXG4gKiBtb3JlIHVzZXIgZnJpZW5kbHkuXG4gKi9cblxuLyoqIEZvcmNlIGludGVsbGlzZW5zZSB0byBleHBhbmQgdGhlIHR5cGluZyB0byBoaWRlIG1lcmdpbmcgdHlwaW5ncyAqL1xuZXhwb3J0IHR5cGUgRXhwYW5kUmVjdXJzaXZlbHk8VD4gPSBUIGV4dGVuZHMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPlxuICA/IFQgZXh0ZW5kcyBpbmZlciBPID8geyBbSyBpbiBrZXlvZiBPXTogRXhwYW5kUmVjdXJzaXZlbHk8T1tLXT4gfSA6IG5ldmVyXG4gIDogVDtcblxuLyoqIEZpbHRlciBvZiBrZXlzIG1hdGNoaW5nIGEgZ2l2ZW4gdHlwZSAqL1xuZXhwb3J0IHR5cGUgUGFydGlhbEJ5VHlwZTxULCBVPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgVSA/IEsgOiBuZXZlcl06IFRbS107XG59O1xuXG4vKiogR2V0IHNldCB2YWx1ZXMgdHlwZSAqL1xuZXhwb3J0IHR5cGUgU2V0VmFsdWVUeXBlPFQ+ID0gVCBleHRlbmRzIFNldDxpbmZlciBWPiA/IFYgOiBuZXZlcjtcblxuLyoqIE1lcmdlIGFsbCBzZXRzIHR5cGVzIGRlZmluaXRpb25zIGZyb20ga2V5cyBwcmVzZW50IGluIGJvdGggb2JqZWN0cyAqL1xuZXhwb3J0IHR5cGUgTWVyZ2VBbGxTZXRzPFxuICBULFxuICBVLFxuICBYID0gUGFydGlhbEJ5VHlwZTxULCBTZXQ8dW5rbm93bj4+LFxuICBZID0gUGFydGlhbEJ5VHlwZTxVLCBTZXQ8dW5rbm93bj4+LFxuICBaID0ge1xuICAgIFtLIGluIGtleW9mIFggJiBrZXlvZiBZXTogU2V0PFNldFZhbHVlVHlwZTxYW0tdPiB8IFNldFZhbHVlVHlwZTxZW0tdPj47XG4gIH0sXG4+ID0gWjtcblxuLyoqIEdldCBhcnJheSB2YWx1ZXMgdHlwZSAqL1xuZXhwb3J0IHR5cGUgQXJyYXlWYWx1ZVR5cGU8VD4gPSBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVj4gPyBWIDogbmV2ZXI7XG5cbi8qKiBNZXJnZSBhbGwgc2V0cyB0eXBlcyBkZWZpbml0aW9ucyBmcm9tIGtleXMgcHJlc2VudCBpbiBib3RoIG9iamVjdHMgKi9cbmV4cG9ydCB0eXBlIE1lcmdlQWxsQXJyYXlzPFxuICBULFxuICBVLFxuICBYID0gUGFydGlhbEJ5VHlwZTxULCBBcnJheTx1bmtub3duPj4sXG4gIFkgPSBQYXJ0aWFsQnlUeXBlPFUsIEFycmF5PHVua25vd24+PixcbiAgWiA9IHtcbiAgICBbSyBpbiBrZXlvZiBYICYga2V5b2YgWV06IEFycmF5PFxuICAgICAgQXJyYXlWYWx1ZVR5cGU8WFtLXT4gfCBBcnJheVZhbHVlVHlwZTxZW0tdPlxuICAgID47XG4gIH0sXG4+ID0gWjtcblxuLyoqIEdldCBtYXAgdmFsdWVzIHR5cGVzICovXG5leHBvcnQgdHlwZSBNYXBLZXlUeXBlPFQ+ID0gVCBleHRlbmRzIE1hcDxpbmZlciBLLCB1bmtub3duPiA/IEsgOiBuZXZlcjtcblxuLyoqIEdldCBtYXAgdmFsdWVzIHR5cGVzICovXG5leHBvcnQgdHlwZSBNYXBWYWx1ZVR5cGU8VD4gPSBUIGV4dGVuZHMgTWFwPHVua25vd24sIGluZmVyIFY+ID8gViA6IG5ldmVyO1xuXG4vKiogTWVyZ2UgYWxsIHNldHMgdHlwZXMgZGVmaW5pdGlvbnMgZnJvbSBrZXlzIHByZXNlbnQgaW4gYm90aCBvYmplY3RzICovXG5leHBvcnQgdHlwZSBNZXJnZUFsbE1hcHM8XG4gIFQsXG4gIFUsXG4gIFggPSBQYXJ0aWFsQnlUeXBlPFQsIE1hcDx1bmtub3duLCB1bmtub3duPj4sXG4gIFkgPSBQYXJ0aWFsQnlUeXBlPFUsIE1hcDx1bmtub3duLCB1bmtub3duPj4sXG4gIFogPSB7XG4gICAgW0sgaW4ga2V5b2YgWCAmIGtleW9mIFldOiBNYXA8XG4gICAgICBNYXBLZXlUeXBlPFhbS10+IHwgTWFwS2V5VHlwZTxZW0tdPixcbiAgICAgIE1hcFZhbHVlVHlwZTxYW0tdPiB8IE1hcFZhbHVlVHlwZTxZW0tdPlxuICAgID47XG4gIH0sXG4+ID0gWjtcblxuLyoqIE1lcmdlIGFsbCByZWNvcmRzIHR5cGVzIGRlZmluaXRpb25zIGZyb20ga2V5cyBwcmVzZW50IGluIGJvdGggb2JqZWN0cyAqL1xuZXhwb3J0IHR5cGUgTWVyZ2VBbGxSZWNvcmRzPFxuICBULFxuICBVLFxuICBPcHRpb25zLFxuICBYID0gUGFydGlhbEJ5VHlwZTxULCBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+PixcbiAgWSA9IFBhcnRpYWxCeVR5cGU8VSwgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPj4sXG4gIFogPSB7XG4gICAgW0sgaW4ga2V5b2YgWCAmIGtleW9mIFldOiBEZWVwTWVyZ2U8WFtLXSwgWVtLXSwgT3B0aW9ucz47XG4gIH0sXG4+ID0gWjtcblxuLyoqIEV4Y2x1ZGUgbWFwLCBzZXRzIGFuZCBhcnJheSBmcm9tIHR5cGUgKi9cbmV4cG9ydCB0eXBlIE9taXRDb21wbGV4ZXM8VD4gPSBPbWl0PFxuICBULFxuICBrZXlvZiBQYXJ0aWFsQnlUeXBlPFxuICAgIFQsXG4gICAgfCBNYXA8dW5rbm93biwgdW5rbm93bj5cbiAgICB8IFNldDx1bmtub3duPlxuICAgIHwgQXJyYXk8dW5rbm93bj5cbiAgICB8IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj5cbiAgPlxuPjtcblxuLyoqIE9iamVjdCB3aXRoIGtleXMgaW4gZWl0aGVyIFQgb3IgVSBidXQgbm90IGluIGJvdGggKi9cbmV4cG9ydCB0eXBlIE9iamVjdFhvcktleXM8XG4gIFQsXG4gIFUsXG4gIFggPSBPbWl0PFQsIGtleW9mIFU+ICYgT21pdDxVLCBrZXlvZiBUPixcbiAgWSA9IHsgW0sgaW4ga2V5b2YgWF06IFhbS10gfSxcbj4gPSBZO1xuXG4vKiogTWVyZ2UgdHdvIG9iamVjdHMsIHdpdGggbGVmdCBwcmVjZWRlbmNlICovXG5leHBvcnQgdHlwZSBNZXJnZVJpZ2h0T21pdENvbXBsZXhlczxcbiAgVCxcbiAgVSxcbiAgWCA9IE9iamVjdFhvcktleXM8VCwgVT4gJiBPbWl0Q29tcGxleGVzPHsgW0sgaW4ga2V5b2YgVV06IFVbS10gfT4sXG4+ID0gWDtcblxuLyoqIE1lcmdlIHR3byBvYmplY3RzICovXG5leHBvcnQgdHlwZSBNZXJnZTxcbiAgVCxcbiAgVSxcbiAgT3B0aW9ucyxcbiAgWCA9XG4gICAgJiBNZXJnZVJpZ2h0T21pdENvbXBsZXhlczxULCBVPlxuICAgICYgTWVyZ2VBbGxSZWNvcmRzPFQsIFUsIE9wdGlvbnM+XG4gICAgJiAoT3B0aW9ucyBleHRlbmRzIHsgc2V0czogXCJyZXBsYWNlXCIgfSA/IFBhcnRpYWxCeVR5cGU8VSwgU2V0PHVua25vd24+PlxuICAgICAgOiBNZXJnZUFsbFNldHM8VCwgVT4pXG4gICAgJiAoT3B0aW9ucyBleHRlbmRzIHsgYXJyYXlzOiBcInJlcGxhY2VcIiB9ID8gUGFydGlhbEJ5VHlwZTxVLCBBcnJheTx1bmtub3duPj5cbiAgICAgIDogTWVyZ2VBbGxBcnJheXM8VCwgVT4pXG4gICAgJiAoT3B0aW9ucyBleHRlbmRzIHsgbWFwczogXCJyZXBsYWNlXCIgfVxuICAgICAgPyBQYXJ0aWFsQnlUeXBlPFUsIE1hcDx1bmtub3duLCB1bmtub3duPj5cbiAgICAgIDogTWVyZ2VBbGxNYXBzPFQsIFU+KSxcbj4gPSBFeHBhbmRSZWN1cnNpdmVseTxYPjtcblxuLyoqIE1lcmdlIGRlZXBseSB0d28gb2JqZWN0cyAqL1xuZXhwb3J0IHR5cGUgRGVlcE1lcmdlPFxuICBULFxuICBVLFxuICBPcHRpb25zID0gUmVjb3JkPHN0cmluZywgTWVyZ2luZ1N0cmF0ZWd5Pixcbj4gPVxuICAvLyBIYW5kbGUgb2JqZWN0c1xuICBbVCwgVV0gZXh0ZW5kcyBbUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPiwgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPl1cbiAgICA/IE1lcmdlPFQsIFUsIE9wdGlvbnM+XG4gICAgLy8g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
+// denoCacheMetadata=1449628480511107264,5044048087061807371 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d826eac8b20d62e1cc01c34af2b1fb798b488876ac93e0c0f1abeb74c01ccbaf.js b/vendor/gen/https/jsr.io/d826eac8b20d62e1cc01c34af2b1fb798b488876ac93e0c0f1abeb74c01ccbaf.js
new file mode 100644
index 0000000..d30436f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d826eac8b20d62e1cc01c34af2b1fb798b488876ac93e0c0f1abeb74c01ccbaf.js
@@ -0,0 +1,17 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/**
+ * Functions for HTML tasks such as escaping or unescaping HTML entities.
+ *
+ * ```ts
+ * import { unescape } from "@std/html/entities";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unescape("&lt;&gt;&#39;&amp;AA"), "<>'&AA");
+ * assertEquals(unescape("&thorn;&eth;"), "&thorn;&eth;");
+ * ```
+ *
+ * @module
+ */ export * from "./entities.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHRtbC8xLjAuMy9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBGdW5jdGlvbnMgZm9yIEhUTUwgdGFza3Mgc3VjaCBhcyBlc2NhcGluZyBvciB1bmVzY2FwaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHVuZXNjYXBlIH0gZnJvbSBcIkBzdGQvaHRtbC9lbnRpdGllc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKFwiJmx0OyZndDsmIzM5OyZhbXA7QUFcIiksIFwiPD4nJkFBXCIpO1xuICogYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKFwiJnRob3JuOyZldGg7XCIpLCBcIiZ0aG9ybjsmZXRoO1wiKTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9lbnRpdGllcy50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7OztDQVlDLEdBRUQsY0FBYyxnQkFBZ0IifQ==
+// denoCacheMetadata=16469796219065267884,5433153822716800836 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d915d765b92a466f7464571e00e4eae01a1b8626275715170befd60e8667063f.js b/vendor/gen/https/jsr.io/d915d765b92a466f7464571e00e4eae01a1b8626275715170befd60e8667063f.js
new file mode 100644
index 0000000..8ece9ce
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d915d765b92a466f7464571e00e4eae01a1b8626275715170befd60e8667063f.js
@@ -0,0 +1,55 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/normalize.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Normalize the `path`, resolving `'..'` and `'.'` segments.
+ * Note that resolving these segments does not necessarily mean that all will be eliminated.
+ * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalize } from "@std/path/posix/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = normalize("/foo/bar//baz/asdf/quux/..");
+ * assertEquals(path, "/foo/bar/baz/asdf");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * Note: This function will remove the double slashes from a URL's scheme.
+ * Hence, do not pass a full URL to this function. Instead, pass the pathname of
+ * the URL.
+ *
+ * ```ts
+ * import { normalize } from "@std/path/posix/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const url = new URL("https://deno.land");
+ * url.pathname = normalize("//std//assert//.//mod.ts");
+ * assertEquals(url.href, "https://deno.land/std/assert/mod.ts");
+ *
+ * url.pathname = normalize("std/assert/../async/retry.ts");
+ * assertEquals(url.href, "https://deno.land/std/async/retry.ts");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `normalize` from `@std/path/posix/unstable-normalize`.
+ *
+ * @param path The path to normalize.
+ * @returns The normalized path.
+ */ export function normalize(path) {
+ assertArg(path);
+ const isAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ const trailingSeparator = isPosixPathSeparator(path.charCodeAt(path.length - 1));
+ // Normalize the path
+ path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator);
+ if (path.length === 0 && !isAbsolute) path = ".";
+ if (path.length > 0 && trailingSeparator) path += "/";
+ if (isAbsolute) return `/${path}`;
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9ub3JtYWxpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgYXNzZXJ0QXJnIH0gZnJvbSBcIi4uL19jb21tb24vbm9ybWFsaXplLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tIFwiLi4vX2NvbW1vbi9ub3JtYWxpemVfc3RyaW5nLnRzXCI7XG5pbXBvcnQgeyBpc1Bvc2l4UGF0aFNlcGFyYXRvciB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBgcGF0aGAsIHJlc29sdmluZyBgJy4uJ2AgYW5kIGAnLidgIHNlZ21lbnRzLlxuICogTm90ZSB0aGF0IHJlc29sdmluZyB0aGVzZSBzZWdtZW50cyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgYWxsIHdpbGwgYmUgZWxpbWluYXRlZC5cbiAqIEEgYCcuLidgIGF0IHRoZSB0b3AtbGV2ZWwgd2lsbCBiZSBwcmVzZXJ2ZWQsIGFuZCBhbiBlbXB0eSBwYXRoIGlzIGNhbm9uaWNhbGx5IGAnLidgLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9ub3JtYWxpemVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSBub3JtYWxpemUoXCIvZm9vL2Jhci8vYmF6L2FzZGYvcXV1eC8uLlwiKTtcbiAqIGFzc2VydEVxdWFscyhwYXRoLCBcIi9mb28vYmFyL2Jhei9hc2RmXCIpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgV29ya2luZyB3aXRoIFVSTHNcbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlIHRoZSBkb3VibGUgc2xhc2hlcyBmcm9tIGEgVVJMJ3Mgc2NoZW1lLlxuICogSGVuY2UsIGRvIG5vdCBwYXNzIGEgZnVsbCBVUkwgdG8gdGhpcyBmdW5jdGlvbi4gSW5zdGVhZCwgcGFzcyB0aGUgcGF0aG5hbWUgb2ZcbiAqIHRoZSBVUkwuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvbm9ybWFsaXplXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCB1cmwgPSBuZXcgVVJMKFwiaHR0cHM6Ly9kZW5vLmxhbmRcIik7XG4gKiB1cmwucGF0aG5hbWUgPSBub3JtYWxpemUoXCIvL3N0ZC8vYXNzZXJ0Ly8uLy9tb2QudHNcIik7XG4gKiBhc3NlcnRFcXVhbHModXJsLmhyZWYsIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL2Fzc2VydC9tb2QudHNcIik7XG4gKlxuICogdXJsLnBhdGhuYW1lID0gbm9ybWFsaXplKFwic3RkL2Fzc2VydC8uLi9hc3luYy9yZXRyeS50c1wiKTtcbiAqIGFzc2VydEVxdWFscyh1cmwuaHJlZiwgXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvYXN5bmMvcmV0cnkudHNcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBub3JtYWxpemVgIGZyb20gYEBzdGQvcGF0aC9wb3NpeC91bnN0YWJsZS1ub3JtYWxpemVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJnKHBhdGgpO1xuXG4gIGNvbnN0IGlzQWJzb2x1dGUgPSBpc1Bvc2l4UGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMCkpO1xuICBjb25zdCB0cmFpbGluZ1NlcGFyYXRvciA9IGlzUG9zaXhQYXRoU2VwYXJhdG9yKFxuICAgIHBhdGguY2hhckNvZGVBdChwYXRoLmxlbmd0aCAtIDEpLFxuICApO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplU3RyaW5nKHBhdGgsICFpc0Fic29sdXRlLCBcIi9cIiwgaXNQb3NpeFBhdGhTZXBhcmF0b3IpO1xuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgcGF0aCA9IFwiLlwiO1xuICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9IFwiL1wiO1xuXG4gIGlmIChpc0Fic29sdXRlKSByZXR1cm4gYC8ke3BhdGh9YDtcbiAgcmV0dXJuIHBhdGg7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSwwQkFBMEI7QUFDcEQsU0FBUyxlQUFlLFFBQVEsaUNBQWlDO0FBQ2pFLFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFDQyxHQUNELE9BQU8sU0FBUyxVQUFVLElBQVk7RUFDcEMsVUFBVTtFQUVWLE1BQU0sYUFBYSxxQkFBcUIsS0FBSyxVQUFVLENBQUM7RUFDeEQsTUFBTSxvQkFBb0IscUJBQ3hCLEtBQUssVUFBVSxDQUFDLEtBQUssTUFBTSxHQUFHO0VBR2hDLHFCQUFxQjtFQUNyQixPQUFPLGdCQUFnQixNQUFNLENBQUMsWUFBWSxLQUFLO0VBRS9DLElBQUksS0FBSyxNQUFNLEtBQUssS0FBSyxDQUFDLFlBQVksT0FBTztFQUM3QyxJQUFJLEtBQUssTUFBTSxHQUFHLEtBQUssbUJBQW1CLFFBQVE7RUFFbEQsSUFBSSxZQUFZLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTTtFQUNqQyxPQUFPO0FBQ1QifQ==
+// denoCacheMetadata=839743149299590351,14537137207803432441 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d95b6b47a3752a1955eee0ea328ed5d221fac6faf441d37c634703d8ce779998.js b/vendor/gen/https/jsr.io/d95b6b47a3752a1955eee0ea328ed5d221fac6faf441d37c634703d8ce779998.js
new file mode 100644
index 0000000..21e692a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d95b6b47a3752a1955eee0ea328ed5d221fac6faf441d37c634703d8ce779998.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { extname as posixExtname } from "./posix/extname.ts";
+import { extname as windowsExtname } from "./windows/extname.ts";
+/**
+ * Return the extension of the path with leading period (".").
+ *
+ * @example Usage
+ * ```ts
+ * import { extname } from "@std/path/extname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(extname("C:\\home\\user\\Documents\\image.png"), ".png");
+ * } else {
+ * assertEquals(extname("/home/user/Documents/image.png"), ".png");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `extname` from `@std/path/unstable-extname`.
+ *
+ * @param path Path with extension.
+ * @returns The file extension. E.g. returns `.ts` for `file.ts`.
+ */ export function extname(path) {
+ return isWindows ? windowsExtname(path) : posixExtname(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9leHRuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgZXh0bmFtZSBhcyBwb3NpeEV4dG5hbWUgfSBmcm9tIFwiLi9wb3NpeC9leHRuYW1lLnRzXCI7XG5pbXBvcnQgeyBleHRuYW1lIGFzIHdpbmRvd3NFeHRuYW1lIH0gZnJvbSBcIi4vd2luZG93cy9leHRuYW1lLnRzXCI7XG4vKipcbiAqIFJldHVybiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBwYXRoIHdpdGggbGVhZGluZyBwZXJpb2QgKFwiLlwiKS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGV4dG5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL2V4dG5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoZXh0bmFtZShcIkM6XFxcXGhvbWVcXFxcdXNlclxcXFxEb2N1bWVudHNcXFxcaW1hZ2UucG5nXCIpLCBcIi5wbmdcIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMoZXh0bmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL2ltYWdlLnBuZ1wiKSwgXCIucG5nXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgZXh0bmFtZWAgZnJvbSBgQHN0ZC9wYXRoL3Vuc3RhYmxlLWV4dG5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggd2l0aCBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBleHRlbnNpb24uIEUuZy4gcmV0dXJucyBgLnRzYCBmb3IgYGZpbGUudHNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0V4dG5hbWUocGF0aCkgOiBwb3NpeEV4dG5hbWUocGF0aCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsV0FBVyxZQUFZLFFBQVEscUJBQXFCO0FBQzdELFNBQVMsV0FBVyxjQUFjLFFBQVEsdUJBQXVCO0FBQ2pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxRQUFRLElBQVk7RUFDbEMsT0FBTyxZQUFZLGVBQWUsUUFBUSxhQUFhO0FBQ3pEIn0=
+// denoCacheMetadata=2707232839414526861,12701073956733924605 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/d9a020f9d7834a4e0ea6eda653acc8ffa08e7fe1c83d3c24e266c5ad5207a15e.js b/vendor/gen/https/jsr.io/d9a020f9d7834a4e0ea6eda653acc8ffa08e7fe1c83d3c24e266c5ad5207a15e.js
new file mode 100644
index 0000000..f486480
--- /dev/null
+++ b/vendor/gen/https/jsr.io/d9a020f9d7834a4e0ea6eda653acc8ffa08e7fe1c83d3c24e266c5ad5207a15e.js
@@ -0,0 +1,86 @@
+import { toFileUrl } from "jsr:@std/path@^1.0.6";
+import { findWorkspace, isNodeModulesResolution, urlToEsbuildResolution } from "./shared.ts";
+/**
+ * The Deno resolver plugin performs relative->absolute specifier resolution
+ * and import map resolution.
+ *
+ * If using the {@link denoLoaderPlugin}, this plugin must be used before the
+ * loader plugin.
+ */ export function denoResolverPlugin(options = {}) {
+ return {
+ name: "deno-resolver",
+ setup (build) {
+ let resolver = null;
+ const externalRegexps = (build.initialOptions.external ?? []).map((external)=>{
+ const regexp = new RegExp("^" + external.replace(/[-/\\^$+?.()|[\]{}]/g, "\\$&").replace(/\*/g, ".*") + "$");
+ return regexp;
+ });
+ build.onStart(async function onStart() {
+ const cwd = build.initialOptions.absWorkingDir ?? Deno.cwd();
+ const workspace = findWorkspace(cwd, build.initialOptions.entryPoints, options.configPath);
+ try {
+ const importMapURL = options.importMapURL;
+ let importMapValue;
+ if (importMapURL !== undefined) {
+ // If we have an import map URL, fetch it and parse it.
+ const resp = await fetch(importMapURL);
+ importMapValue = await resp.json();
+ }
+ resolver?.free();
+ resolver = null;
+ resolver = workspace.resolver(importMapURL, importMapValue);
+ } finally{
+ workspace.free();
+ }
+ });
+ build.onResolve({
+ filter: /.*/
+ }, async function onResolve(args) {
+ // Pass through any node_modules internal resolution.
+ if (isNodeModulesResolution(args)) {
+ return undefined;
+ }
+ // The first pass resolver performs synchronous resolution. This
+ // includes relative to absolute specifier resolution and import map
+ // resolution.
+ // We have to first determine the referrer URL to use when resolving
+ // the specifier. This is either the importer URL, or the resolveDir
+ // URL if the importer is not specified (ie if the specifier is at the
+ // root).
+ let referrer;
+ if (args.importer !== "") {
+ if (args.namespace === "") {
+ throw new Error("[assert] namespace is empty");
+ }
+ referrer = new URL(`${args.namespace}:${args.importer}`);
+ } else if (args.resolveDir !== "") {
+ referrer = new URL(`${toFileUrl(args.resolveDir).href}/`);
+ } else {
+ return undefined;
+ }
+ for (const externalRegexp of externalRegexps){
+ if (externalRegexp.test(args.path)) {
+ return {
+ path: args.path,
+ external: true
+ };
+ }
+ }
+ // We can then resolve the specifier relative to the referrer URL, using
+ // the workspace resolver.
+ const resolved = new URL(resolver.resolve(args.path, referrer.href));
+ // Now pass the resolved specifier back into the resolver, for a second
+ // pass. Now plugins can perform any resolution they want on the fully
+ // resolved specifier.
+ const { path, namespace } = urlToEsbuildResolution(resolved);
+ const res = await build.resolve(path, {
+ namespace,
+ kind: args.kind
+ });
+ return res;
+ });
+ }
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL3NyYy9wbHVnaW5fZGVub19yZXNvbHZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGVzYnVpbGQgZnJvbSBcIi4vZXNidWlsZF90eXBlcy50c1wiO1xuaW1wb3J0IHsgdG9GaWxlVXJsIH0gZnJvbSBcImpzcjpAc3RkL3BhdGhAXjEuMC42XCI7XG5pbXBvcnQge1xuICBmaW5kV29ya3NwYWNlLFxuICBpc05vZGVNb2R1bGVzUmVzb2x1dGlvbixcbiAgdXJsVG9Fc2J1aWxkUmVzb2x1dGlvbixcbn0gZnJvbSBcIi4vc2hhcmVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdhc21Xb3Jrc3BhY2VSZXNvbHZlciB9IGZyb20gXCIuL3dhc20vbG9hZGVyLmdlbmVyYXRlZC5qc1wiO1xuXG4vKiogT3B0aW9ucyBmb3IgdGhlIHtAbGluayBkZW5vUmVzb2x2ZXJQbHVnaW59LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW5vUmVzb2x2ZXJQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHBhdGggdG8gYSBkZW5vLmpzb24gY29uZmlnIGZpbGUgdG8gdXNlLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICogdGhlIGAtLWNvbmZpZ2AgZmxhZyB0byB0aGUgRGVubyBleGVjdXRhYmxlLiBUaGlzIHBhdGggbXVzdCBiZSBhYnNvbHV0ZS5cbiAgICpcbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHBsdWdpbiB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgbmVhcmVzdCBkZW5vLmpzb24gYW5kXG4gICAqIHVzZSB0aGF0LiBJZiB0aGUgZGVuby5qc29uIGlzIHBhcnQgb2YgYSB3b3Jrc3BhY2UsIHRoZSBwbHVnaW4gd2lsbFxuICAgKiBhdXRvbWF0aWNhbGx5IGZpbmQgdGhlIHdvcmtzcGFjZSByb290LlxuICAgKi9cbiAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBVUkwgdG8gYW4gaW1wb3J0IG1hcCBmaWxlIHRvIHVzZSB3aGVuIHJlc29sdmluZyBpbXBvcnRcbiAgICogc3BlY2lmaWVycy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBgLS1pbXBvcnQtbWFwYCBmbGFnIHRvIHRoZSBEZW5vXG4gICAqIGV4ZWN1dGFibGUuIFRoaXMgVVJMIG1heSBiZSByZW1vdGUgb3IgYSBsb2NhbCBmaWxlIFVSTC5cbiAgICpcbiAgICogSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm8uanNvbiBjb25maWcgZmlsZSBpcyBjb25zdWx0ZWQgdG9cbiAgICogZGV0ZXJtaW5lIHdoYXQgaW1wb3J0IG1hcCB0byB1c2UsIGlmIGFueS5cbiAgICovXG4gIGltcG9ydE1hcFVSTD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgRGVubyByZXNvbHZlciBwbHVnaW4gcGVyZm9ybXMgcmVsYXRpdmUtPmFic29sdXRlIHNwZWNpZmllciByZXNvbHV0aW9uXG4gKiBhbmQgaW1wb3J0IG1hcCByZXNvbHV0aW9uLlxuICpcbiAqIElmIHVzaW5nIHRoZSB7QGxpbmsgZGVub0xvYWRlclBsdWdpbn0sIHRoaXMgcGx1Z2luIG11c3QgYmUgdXNlZCBiZWZvcmUgdGhlXG4gKiBsb2FkZXIgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVub1Jlc29sdmVyUGx1Z2luKFxuICBvcHRpb25zOiBEZW5vUmVzb2x2ZXJQbHVnaW5PcHRpb25zID0ge30sXG4pOiBlc2J1aWxkLlBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJkZW5vLXJlc29sdmVyXCIsXG4gICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgIGxldCByZXNvbHZlcjogV2FzbVdvcmtzcGFjZVJlc29sdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGV4dGVybmFsUmVnZXhwczogUmVnRXhwW10gPSAoYnVpbGQuaW5pdGlhbE9wdGlvbnMuZXh0ZXJuYWwgPz8gW10pXG4gICAgICAgIC5tYXAoKGV4dGVybmFsKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIFwiXlwiICsgZXh0ZXJuYWwucmVwbGFjZSgvWy0vXFxcXF4kKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKS5yZXBsYWNlKFxuICAgICAgICAgICAgICAvXFwqL2csXG4gICAgICAgICAgICAgIFwiLipcIixcbiAgICAgICAgICAgICkgKyBcIiRcIixcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiByZWdleHA7XG4gICAgICAgIH0pO1xuXG4gICAgICBidWlsZC5vblN0YXJ0KGFzeW5jIGZ1bmN0aW9uIG9uU3RhcnQoKSB7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgPz8gRGVuby5jd2QoKTtcblxuICAgICAgICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlKFxuICAgICAgICAgIGN3ZCxcbiAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5lbnRyeVBvaW50cyxcbiAgICAgICAgICBvcHRpb25zLmNvbmZpZ1BhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0TWFwVVJMOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zLmltcG9ydE1hcFVSTDtcbiAgICAgICAgICBsZXQgaW1wb3J0TWFwVmFsdWU6IHVua25vd24gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGltcG9ydE1hcFVSTCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGltcG9ydCBtYXAgVVJMLCBmZXRjaCBpdCBhbmQgcGFyc2UgaXQuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goaW1wb3J0TWFwVVJMKTtcbiAgICAgICAgICAgIGltcG9ydE1hcFZhbHVlID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZXI/LmZyZWUoKTtcbiAgICAgICAgICByZXNvbHZlciA9IG51bGw7XG4gICAgICAgICAgcmVzb2x2ZXIgPSB3b3Jrc3BhY2UucmVzb2x2ZXIoaW1wb3J0TWFwVVJMLCBpbXBvcnRNYXBWYWx1ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgd29ya3NwYWNlLmZyZWUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLyB9LCBhc3luYyBmdW5jdGlvbiBvblJlc29sdmUoYXJncykge1xuICAgICAgICAvLyBQYXNzIHRocm91Z2ggYW55IG5vZGVfbW9kdWxlcyBpbnRlcm5hbCByZXNvbHV0aW9uLlxuICAgICAgICBpZiAoaXNOb2RlTW9kdWxlc1Jlc29sdXRpb24oYXJncykpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhc3MgcmVzb2x2ZXIgcGVyZm9ybXMgc3luY2hyb25vdXMgcmVzb2x1dGlvbi4gVGhpc1xuICAgICAgICAvLyBpbmNsdWRlcyByZWxhdGl2ZSB0byBhYnNvbHV0ZSBzcGVjaWZpZXIgcmVzb2x1dGlvbiBhbmQgaW1wb3J0IG1hcFxuICAgICAgICAvLyByZXNvbHV0aW9uLlxuXG4gICAgICAgIC8vIFdlIGhhdmUgdG8gZmlyc3QgZGV0ZXJtaW5lIHRoZSByZWZlcnJlciBVUkwgdG8gdXNlIHdoZW4gcmVzb2x2aW5nXG4gICAgICAgIC8vIHRoZSBzcGVjaWZpZXIuIFRoaXMgaXMgZWl0aGVyIHRoZSBpbXBvcnRlciBVUkwsIG9yIHRoZSByZXNvbHZlRGlyXG4gICAgICAgIC8vIFVSTCBpZiB0aGUgaW1wb3J0ZXIgaXMgbm90IHNwZWNpZmllZCAoaWUgaWYgdGhlIHNwZWNpZmllciBpcyBhdCB0aGVcbiAgICAgICAgLy8gcm9vdCkuXG4gICAgICAgIGxldCByZWZlcnJlcjogVVJMO1xuICAgICAgICBpZiAoYXJncy5pbXBvcnRlciAhPT0gXCJcIikge1xuICAgICAgICAgIGlmIChhcmdzLm5hbWVzcGFjZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW2Fzc2VydF0gbmFtZXNwYWNlIGlzIGVtcHR5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWZlcnJlciA9IG5ldyBVUkwoYCR7YXJncy5uYW1lc3BhY2V9OiR7YXJncy5pbXBvcnRlcn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcmdzLnJlc29sdmVEaXIgIT09IFwiXCIpIHtcbiAgICAgICAgICByZWZlcnJlciA9IG5ldyBVUkwoYCR7dG9GaWxlVXJsKGFyZ3MucmVzb2x2ZURpcikuaHJlZn0vYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZXh0ZXJuYWxSZWdleHAgb2YgZXh0ZXJuYWxSZWdleHBzKSB7XG4gICAgICAgICAgaWYgKGV4dGVybmFsUmVnZXhwLnRlc3QoYXJncy5wYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGF0aDogYXJncy5wYXRoLFxuICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgY2FuIHRoZW4gcmVzb2x2ZSB0aGUgc3BlY2lmaWVyIHJlbGF0aXZlIHRvIHRoZSByZWZlcnJlciBVUkwsIHVzaW5nXG4gICAgICAgIC8vIHRoZSB3b3Jrc3BhY2UgcmVzb2x2ZXIuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IFVSTChcbiAgICAgICAgICByZXNvbHZlciEucmVzb2x2ZShhcmdzLnBhdGgsIHJlZmVycmVyLmhyZWYpLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE5vdyBwYXNzIHRoZSByZXNvbHZlZCBzcGVjaWZpZXIgYmFjayBpbnRvIHRoZSByZXNvbHZlciwgZm9yIGEgc2Vjb25kXG4gICAgICAgIC8vIHBhc3MuIE5vdyBwbHVnaW5zIGNhbiBwZXJmb3JtIGFueSByZXNvbHV0aW9uIHRoZXkgd2FudCBvbiB0aGUgZnVsbHlcbiAgICAgICAgLy8gcmVzb2x2ZWQgc3BlY2lmaWVyLlxuICAgICAgICBjb25zdCB7IHBhdGgsIG5hbWVzcGFjZSB9ID0gdXJsVG9Fc2J1aWxkUmVzb2x1dGlvbihyZXNvbHZlZCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1aWxkLnJlc29sdmUocGF0aCwge1xuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBraW5kOiBhcmdzLmtpbmQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxTQUFTLFNBQVMsUUFBUSx1QkFBdUI7QUFDakQsU0FDRSxhQUFhLEVBQ2IsdUJBQXVCLEVBQ3ZCLHNCQUFzQixRQUNqQixjQUFjO0FBeUJyQjs7Ozs7O0NBTUMsR0FDRCxPQUFPLFNBQVMsbUJBQ2QsVUFBcUMsQ0FBQyxDQUFDO0VBRXZDLE9BQU87SUFDTCxNQUFNO0lBQ04sT0FBTSxLQUFLO01BQ1QsSUFBSSxXQUF5QztNQUU3QyxNQUFNLGtCQUE0QixDQUFDLE1BQU0sY0FBYyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQ25FLEdBQUcsQ0FBQyxDQUFDO1FBQ0osTUFBTSxTQUFTLElBQUksT0FDakIsTUFBTSxTQUFTLE9BQU8sQ0FBQyx3QkFBd0IsUUFBUSxPQUFPLENBQzVELE9BQ0EsUUFDRTtRQUVOLE9BQU87TUFDVDtNQUVGLE1BQU0sT0FBTyxDQUFDLGVBQWU7UUFDM0IsTUFBTSxNQUFNLE1BQU0sY0FBYyxDQUFDLGFBQWEsSUFBSSxLQUFLLEdBQUc7UUFFMUQsTUFBTSxZQUFZLGNBQ2hCLEtBQ0EsTUFBTSxjQUFjLENBQUMsV0FBVyxFQUNoQyxRQUFRLFVBQVU7UUFFcEIsSUFBSTtVQUNGLE1BQU0sZUFBbUMsUUFBUSxZQUFZO1VBQzdELElBQUk7VUFDSixJQUFJLGlCQUFpQixXQUFXO1lBQzlCLHVEQUF1RDtZQUN2RCxNQUFNLE9BQU8sTUFBTSxNQUFNO1lBQ3pCLGlCQUFpQixNQUFNLEtBQUssSUFBSTtVQUNsQztVQUVBLFVBQVU7VUFDVixXQUFXO1VBQ1gsV0FBVyxVQUFVLFFBQVEsQ0FBQyxjQUFjO1FBQzlDLFNBQVU7VUFDUixVQUFVLElBQUk7UUFDaEI7TUFDRjtNQUVBLE1BQU0sU0FBUyxDQUFDO1FBQUUsUUFBUTtNQUFLLEdBQUcsZUFBZSxVQUFVLElBQUk7UUFDN0QscURBQXFEO1FBQ3JELElBQUksd0JBQXdCLE9BQU87VUFDakMsT0FBTztRQUNUO1FBRUEsZ0VBQWdFO1FBQ2hFLG9FQUFvRTtRQUNwRSxjQUFjO1FBRWQsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsU0FBUztRQUNULElBQUk7UUFDSixJQUFJLEtBQUssUUFBUSxLQUFLLElBQUk7VUFDeEIsSUFBSSxLQUFLLFNBQVMsS0FBSyxJQUFJO1lBQ3pCLE1BQU0sSUFBSSxNQUFNO1VBQ2xCO1VBQ0EsV0FBVyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUU7UUFDekQsT0FBTyxJQUFJLEtBQUssVUFBVSxLQUFLLElBQUk7VUFDakMsV0FBVyxJQUFJLElBQUksR0FBRyxVQUFVLEtBQUssVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUQsT0FBTztVQUNMLE9BQU87UUFDVDtRQUVBLEtBQUssTUFBTSxrQkFBa0IsZ0JBQWlCO1VBQzVDLElBQUksZUFBZSxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUc7WUFDbEMsT0FBTztjQUNMLE1BQU0sS0FBSyxJQUFJO2NBQ2YsVUFBVTtZQUNaO1VBQ0Y7UUFDRjtRQUVBLHdFQUF3RTtRQUN4RSwwQkFBMEI7UUFDMUIsTUFBTSxXQUFXLElBQUksSUFDbkIsU0FBVSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsU0FBUyxJQUFJO1FBRzVDLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsc0JBQXNCO1FBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsdUJBQXVCO1FBQ25ELE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxDQUFDLE1BQU07VUFDcEM7VUFDQSxNQUFNLEtBQUssSUFBSTtRQUNqQjtRQUNBLE9BQU87TUFDVDtJQUNGO0VBQ0Y7QUFDRiJ9
+// denoCacheMetadata=17622085895891387705,10455244205326249210 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/dc8d9f13513537a6923ece69c506c812192aefcddbda4947eaf1754852b8666e.js b/vendor/gen/https/jsr.io/dc8d9f13513537a6923ece69c506c812192aefcddbda4947eaf1754852b8666e.js
new file mode 100644
index 0000000..f73284d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/dc8d9f13513537a6923ece69c506c812192aefcddbda4947eaf1754852b8666e.js
@@ -0,0 +1,34 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { DumperState } from "./_dumper_state.ts";
+import { SCHEMA_MAP } from "./_schema.ts";
+/**
+ * Converts a JavaScript object or value to a YAML document string.
+ *
+ * @example Usage
+ * ```ts
+ * import { stringify } from "@std/yaml/stringify";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const data = { id: 1, name: "Alice" };
+ * const yaml = stringify(data);
+ *
+ * assertEquals(yaml, "id: 1\nname: Alice\n");
+ * ```
+ *
+ * @throws {TypeError} If `data` contains invalid types.
+ * @param data The data to serialize.
+ * @param options The options for serialization.
+ * @returns A YAML string.
+ */ export function stringify(data, options = {}) {
+ const state = new DumperState({
+ ...options,
+ schema: SCHEMA_MAP.get(options.schema)
+ });
+ return state.stringify(data);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9zdHJpbmdpZnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgRHVtcGVyU3RhdGUgfSBmcm9tIFwiLi9fZHVtcGVyX3N0YXRlLnRzXCI7XG5pbXBvcnQgeyBTQ0hFTUFfTUFQLCB0eXBlIFNjaGVtYVR5cGUgfSBmcm9tIFwiLi9fc2NoZW1hLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFN0eWxlVmFyaWFudCB9IGZyb20gXCIuL190eXBlLnRzXCI7XG5cbmV4cG9ydCB0eXBlIHsgU2NoZW1hVHlwZSwgU3R5bGVWYXJpYW50IH07XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIHN0cmluZ2lmeX0uICovXG5leHBvcnQgdHlwZSBTdHJpbmdpZnlPcHRpb25zID0ge1xuICAvKipcbiAgICogSW5kZW50YXRpb24gd2lkdGggdG8gdXNlIChpbiBzcGFjZXMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7Mn1cbiAgICovXG4gIGluZGVudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgYWRkcyBhbiBpbmRlbnRhdGlvbiBsZXZlbCB0byBhcnJheSBlbGVtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQge3RydWV9XG4gICAqL1xuICBhcnJheUluZGVudD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEbyBub3QgdGhyb3cgb24gaW52YWxpZCB0eXBlcyAobGlrZSBmdW5jdGlvbiBpbiB0aGUgc2FmZSBzY2hlbWEpIGFuZCBza2lwXG4gICAqIHBhaXJzIGFuZCBzaW5nbGUgdmFsdWVzIHdpdGggc3VjaCB0eXBlcy5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgc2tpcEludmFsaWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmaWVzIGxldmVsIG9mIG5lc3RpbmcsIHdoZW4gdG8gc3dpdGNoIGZyb20gYmxvY2sgdG8gZmxvdyBzdHlsZSBmb3JcbiAgICogY29sbGVjdGlvbnMuIGAtMWAgbWVhbnMgYmxvY2sgc3R5bGUgZXZlcnl3aGVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgey0xfVxuICAgKi9cbiAgZmxvd0xldmVsPzogbnVtYmVyO1xuICAvKiogRWFjaCB0YWcgbWF5IGhhdmUgb3duIHNldCBvZiBzdHlsZXMuXHQtIFwidGFnXCIgPT4gXCJzdHlsZVwiIG1hcC4gKi9cbiAgc3R5bGVzPzogUmVjb3JkPHN0cmluZywgU3R5bGVWYXJpYW50PjtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNjaGVtYSB0byB1c2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtcImRlZmF1bHRcIn1cbiAgICovXG4gIHNjaGVtYT86IFNjaGVtYVR5cGU7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBzb3J0IGtleXMgd2hlbiBkdW1waW5nIFlBTUwgaW4gYXNjZW5kaW5nLCBBU0NJSSBjaGFyYWN0ZXIgb3JkZXIuXG4gICAqIElmIGEgZnVuY3Rpb24sIHVzZSB0aGUgZnVuY3Rpb24gdG8gc29ydCB0aGUga2V5cy5cbiAgICogSWYgYSBmdW5jdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlXG4gICAqIGlmIGZpcnN0IGFyZ3VtZW50IGlzIGxlc3MgdGhhbiBzZWNvbmQgYXJndW1lbnQsIHplcm8gaWYgdGhleSdyZSBlcXVhbFxuICAgKiBhbmQgYSBwb3NpdGl2ZSB2YWx1ZSBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIHNvcnRLZXlzPzogYm9vbGVhbiB8ICgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IG51bWJlcik7XG4gIC8qKlxuICAgKiBTZXQgbWF4IGxpbmUgd2lkdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IHs4MH1cbiAgICovXG4gIGxpbmVXaWR0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIElmIGZhbHNlLCBkb24ndCBjb252ZXJ0IGR1cGxpY2F0ZSBvYmplY3RzIGludG8gcmVmZXJlbmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQge3RydWV9XG4gICAqL1xuICB1c2VBbmNob3JzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGZhbHNlIGRvbid0IHRyeSB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIgeWFtbCB2ZXJzaW9ucy5cbiAgICogQ3VycmVudGx5OiBkb24ndCBxdW90ZSBcInllc1wiLCBcIm5vXCIgYW5kIHNvIG9uLFxuICAgKiBhcyByZXF1aXJlZCBmb3IgWUFNTCAxLjEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgY29tcGF0TW9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlIGZsb3cgc2VxdWVuY2VzIHdpbGwgYmUgY29uZGVuc2VkLCBvbWl0dGluZyB0aGVcbiAgICogc3BhY2UgYmV0d2VlbiBga2V5OiB2YWx1ZWAgb3IgYGEsIGJgLiBFZy4gYCdbYSxiXSdgIG9yIGB7YTp7YjpjfX1gLlxuICAgKiBDYW4gYmUgdXNlZnVsIHdoZW4gdXNpbmcgeWFtbCBmb3IgcHJldHR5IFVSTCBxdWVyeSBwYXJhbXNcbiAgICogYXMgc3BhY2VzIGFyZSAlLWVuY29kZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIGNvbmRlbnNlRmxvdz86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBvYmplY3Qgb3IgdmFsdWUgdG8gYSBZQU1MIGRvY3VtZW50IHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gXCJAc3RkL3lhbWwvc3RyaW5naWZ5XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBkYXRhID0geyBpZDogMSwgbmFtZTogXCJBbGljZVwiIH07XG4gKiBjb25zdCB5YW1sID0gc3RyaW5naWZ5KGRhdGEpO1xuICpcbiAqIGFzc2VydEVxdWFscyh5YW1sLCBcImlkOiAxXFxubmFtZTogQWxpY2VcXG5cIik7XG4gKiBgYGBcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBkYXRhYCBjb250YWlucyBpbnZhbGlkIHR5cGVzLlxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcmV0dXJucyBBIFlBTUwgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KFxuICBkYXRhOiB1bmtub3duLFxuICBvcHRpb25zOiBTdHJpbmdpZnlPcHRpb25zID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0ZSA9IG5ldyBEdW1wZXJTdGF0ZSh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBzY2hlbWE6IFNDSEVNQV9NQVAuZ2V0KG9wdGlvbnMuc2NoZW1hISkhLFxuICB9KTtcbiAgcmV0dXJuIHN0YXRlLnN0cmluZ2lmeShkYXRhKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsV0FBVyxRQUFRLHFCQUFxQjtBQUNqRCxTQUFTLFVBQVUsUUFBeUIsZUFBZTtBQWtGM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUNELE9BQU8sU0FBUyxVQUNkLElBQWEsRUFDYixVQUE0QixDQUFDLENBQUM7RUFFOUIsTUFBTSxRQUFRLElBQUksWUFBWTtJQUM1QixHQUFHLE9BQU87SUFDVixRQUFRLFdBQVcsR0FBRyxDQUFDLFFBQVEsTUFBTTtFQUN2QztFQUNBLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDekIifQ==
+// denoCacheMetadata=11444281082282167122,1626304546232760790 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ddc13a2e19371c728b8ce06c328e06608ae89b4d59bdc83bcc7fb83795b6a7b3.js b/vendor/gen/https/jsr.io/ddc13a2e19371c728b8ce06c328e06608ae89b4d59bdc83bcc7fb83795b6a7b3.js
new file mode 100644
index 0000000..dd540c7
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ddc13a2e19371c728b8ce06c328e06608ae89b4d59bdc83bcc7fb83795b6a7b3.js
@@ -0,0 +1,29 @@
+// Ported and adapted from js-yaml-js-types v1.0.0:
+// https://github.com/nodeca/js-yaml-js-types/tree/ac537e7bbdd3c2cbbd9882ca3919c520c2dc022b
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+const REGEXP = /^\/(?<regexp>[\s\S]+)\/(?<modifiers>[gismuy]*)$/;
+export const regexp = {
+ tag: "tag:yaml.org,2002:js/regexp",
+ kind: "scalar",
+ resolve (data) {
+ if (data === null || !data.length) return false;
+ if (data.charAt(0) === "/") {
+ // Ensure regex is properly terminated
+ const groups = data.match(REGEXP)?.groups;
+ if (!groups) return false;
+ // Check no duplicate modifiers
+ const modifiers = groups.modifiers ?? "";
+ if (new Set(modifiers).size < modifiers.length) return false;
+ }
+ return true;
+ },
+ construct (data) {
+ const { regexp = data, modifiers = "" } = data.match(REGEXP)?.groups ?? {};
+ return new RegExp(regexp, modifiers);
+ },
+ predicate: (object)=>object instanceof RegExp,
+ represent: (object)=>object.toString()
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9yZWdleHAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGFuZCBhZGFwdGVkIGZyb20ganMteWFtbC1qcy10eXBlcyB2MS4wLjA6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwtanMtdHlwZXMvdHJlZS9hYzUzN2U3YmJkZDNjMmNiYmQ5ODgyY2EzOTE5YzUyMGMyZGMwMjJiXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmNvbnN0IFJFR0VYUCA9IC9eXFwvKD88cmVnZXhwPltcXHNcXFNdKylcXC8oPzxtb2RpZmllcnM+W2dpc211eV0qKSQvO1xuXG5leHBvcnQgY29uc3QgcmVnZXhwOiBUeXBlPFwic2NhbGFyXCIsIFJlZ0V4cD4gPSB7XG4gIHRhZzogXCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHBcIixcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZShkYXRhOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEgPT09IG51bGwgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoZGF0YS5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG4gICAgICAvLyBFbnN1cmUgcmVnZXggaXMgcHJvcGVybHkgdGVybWluYXRlZFxuICAgICAgY29uc3QgZ3JvdXBzID0gZGF0YS5tYXRjaChSRUdFWFApPy5ncm91cHM7XG4gICAgICBpZiAoIWdyb3VwcykgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gQ2hlY2sgbm8gZHVwbGljYXRlIG1vZGlmaWVyc1xuICAgICAgY29uc3QgbW9kaWZpZXJzID0gZ3JvdXBzLm1vZGlmaWVycyA/PyBcIlwiO1xuICAgICAgaWYgKG5ldyBTZXQobW9kaWZpZXJzKS5zaXplIDwgbW9kaWZpZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBjb25zdHJ1Y3QoZGF0YTogc3RyaW5nKTogUmVnRXhwIHtcbiAgICBjb25zdCB7IHJlZ2V4cCA9IGRhdGEsIG1vZGlmaWVycyA9IFwiXCIgfSA9IGRhdGEubWF0Y2goUkVHRVhQKT8uZ3JvdXBzID8/IHt9O1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4cCwgbW9kaWZpZXJzKTtcbiAgfSxcbiAgcHJlZGljYXRlOiAob2JqZWN0OiB1bmtub3duKTogb2JqZWN0IGlzIFJlZ0V4cCA9PiBvYmplY3QgaW5zdGFuY2VvZiBSZWdFeHAsXG4gIHJlcHJlc2VudDogKG9iamVjdDogUmVnRXhwKTogc3RyaW5nID0+IG9iamVjdC50b1N0cmluZygpLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtREFBbUQ7QUFDbkQsMkZBQTJGO0FBQzNGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsTUFBTSxTQUFTO0FBRWYsT0FBTyxNQUFNLFNBQWlDO0VBQzVDLEtBQUs7RUFDTCxNQUFNO0VBQ04sU0FBUSxJQUFtQjtJQUN6QixJQUFJLFNBQVMsUUFBUSxDQUFDLEtBQUssTUFBTSxFQUFFLE9BQU87SUFFMUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEtBQUs7TUFDMUIsc0NBQXNDO01BQ3RDLE1BQU0sU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTO01BQ25DLElBQUksQ0FBQyxRQUFRLE9BQU87TUFDcEIsK0JBQStCO01BQy9CLE1BQU0sWUFBWSxPQUFPLFNBQVMsSUFBSTtNQUN0QyxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksR0FBRyxVQUFVLE1BQU0sRUFBRSxPQUFPO0lBQ3pEO0lBRUEsT0FBTztFQUNUO0VBQ0EsV0FBVSxJQUFZO0lBQ3BCLE1BQU0sRUFBRSxTQUFTLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxHQUFHLEtBQUssS0FBSyxDQUFDLFNBQVMsVUFBVSxDQUFDO0lBQ3pFLE9BQU8sSUFBSSxPQUFPLFFBQVE7RUFDNUI7RUFDQSxXQUFXLENBQUMsU0FBc0Msa0JBQWtCO0VBQ3BFLFdBQVcsQ0FBQyxTQUEyQixPQUFPLFFBQVE7QUFDeEQsRUFBRSJ9
+// denoCacheMetadata=589118959081939963,17277926661039424991 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/dece048b74f5163eff86ab8d1a24466930b258604919dd7c5df7375baa85f2a1.js b/vendor/gen/https/jsr.io/dece048b74f5163eff86ab8d1a24466930b258604919dd7c5df7375baa85f2a1.js
new file mode 100644
index 0000000..76dd290
--- /dev/null
+++ b/vendor/gen/https/jsr.io/dece048b74f5163eff86ab8d1a24466930b258604919dd7c5df7375baa85f2a1.js
@@ -0,0 +1,105 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+const input = Deno.stdin;
+const output = Deno.stdout;
+const encoder = new TextEncoder();
+const decoder = new TextDecoder();
+const LF = "\n".charCodeAt(0); // ^J - Enter on Linux
+const CR = "\r".charCodeAt(0); // ^M - Enter on macOS and Windows (CRLF)
+const BS = "\b".charCodeAt(0); // ^H - Backspace on Linux and Windows
+const DEL = 0x7f; // ^? - Backspace on macOS
+const CLR = encoder.encode("\r\u001b[K"); // Clear the current line
+const MOVE_LINE_UP = encoder.encode("\r\u001b[1F"); // Move to previous line
+// The `cbreak` option is not supported on Windows
+const setRawOptions = Deno.build.os === "windows" ? undefined : {
+ cbreak: true
+};
+/**
+ * Shows the given message and waits for the user's input. Returns the user's input as string.
+ * This is similar to `prompt()` but it print user's input as `*` to prevent password from being shown.
+ * Use an empty `mask` if you don't want to show any character.
+ *
+ * @param message The prompt message to show to the user.
+ * @param options The options for the prompt.
+ * @returns The string that was entered or `null` if stdin is not a TTY.
+ *
+ * @example Usage
+ * ```ts ignore
+ * import { promptSecret } from "@std/cli/prompt-secret";
+ *
+ * const password = promptSecret("Please provide the password:");
+ * if (password !== "some-password") {
+ * throw new Error("Access denied");
+ * }
+ * ```
+ */ export function promptSecret(message = "Secret", options) {
+ const { mask = "*", clear } = options ?? {};
+ if (!input.isTerminal()) {
+ return null;
+ }
+ const { columns } = Deno.consoleSize();
+ let previousLength = 0;
+ // Make the output consistent with the built-in prompt()
+ message += " ";
+ const callback = !mask ? undefined : (n)=>{
+ let line = `${message}${mask.repeat(n)}`;
+ const currentLength = line.length;
+ const charsPastLineLength = line.length % columns;
+ if (line.length > columns) {
+ line = line.slice(-1 * (charsPastLineLength === 0 ? columns : charsPastLineLength));
+ }
+ // If the user has deleted a character
+ if (currentLength < previousLength) {
+ // Then clear the current line.
+ output.writeSync(CLR);
+ if (charsPastLineLength === 0) {
+ // And if there's no characters on the current line, return to previous line.
+ output.writeSync(MOVE_LINE_UP);
+ }
+ } else {
+ // Always jump the cursor back to the beginning of the line unless it's the first character.
+ if (charsPastLineLength !== 1) {
+ output.writeSync(CLR);
+ }
+ }
+ output.writeSync(encoder.encode(line));
+ previousLength = currentLength;
+ };
+ output.writeSync(encoder.encode(message));
+ Deno.stdin.setRaw(true, setRawOptions);
+ try {
+ return readLineFromStdinSync(callback);
+ } finally{
+ if (clear) {
+ output.writeSync(CLR);
+ } else {
+ output.writeSync(encoder.encode("\n"));
+ }
+ Deno.stdin.setRaw(false);
+ }
+}
+// Slightly modified from Deno's runtime/js/41_prompt.js
+// This implementation immediately break on CR or LF and accept callback.
+// The original version waits LF when CR is received.
+// https://github.com/denoland/deno/blob/e4593873a9c791238685dfbb45e64b4485884174/runtime/js/41_prompt.js#L52-L77
+function readLineFromStdinSync(callback) {
+ const c = new Uint8Array(1);
+ const buf = [];
+ while(true){
+ const n = input.readSync(c);
+ if (n === null || n === 0) {
+ break;
+ }
+ if (c[0] === CR || c[0] === LF) {
+ break;
+ }
+ if (c[0] === BS || c[0] === DEL) {
+ buf.pop();
+ } else {
+ buf.push(c[0]);
+ }
+ if (callback) callback(buf.length);
+ }
+ return decoder.decode(new Uint8Array(buf));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvY2xpLzEuMC4xNy9wcm9tcHRfc2VjcmV0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5cbmNvbnN0IGlucHV0ID0gRGVuby5zdGRpbjtcbmNvbnN0IG91dHB1dCA9IERlbm8uc3Rkb3V0O1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuY29uc3QgTEYgPSBcIlxcblwiLmNoYXJDb2RlQXQoMCk7IC8vIF5KIC0gRW50ZXIgb24gTGludXhcbmNvbnN0IENSID0gXCJcXHJcIi5jaGFyQ29kZUF0KDApOyAvLyBeTSAtIEVudGVyIG9uIG1hY09TIGFuZCBXaW5kb3dzIChDUkxGKVxuY29uc3QgQlMgPSBcIlxcYlwiLmNoYXJDb2RlQXQoMCk7IC8vIF5IIC0gQmFja3NwYWNlIG9uIExpbnV4IGFuZCBXaW5kb3dzXG5jb25zdCBERUwgPSAweDdmOyAvLyBePyAtIEJhY2tzcGFjZSBvbiBtYWNPU1xuY29uc3QgQ0xSID0gZW5jb2Rlci5lbmNvZGUoXCJcXHJcXHUwMDFiW0tcIik7IC8vIENsZWFyIHRoZSBjdXJyZW50IGxpbmVcbmNvbnN0IE1PVkVfTElORV9VUCA9IGVuY29kZXIuZW5jb2RlKFwiXFxyXFx1MDAxYlsxRlwiKTsgLy8gTW92ZSB0byBwcmV2aW91cyBsaW5lXG5cbi8vIFRoZSBgY2JyZWFrYCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzXG5jb25zdCBzZXRSYXdPcHRpb25zID0gRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCJcbiAgPyB1bmRlZmluZWRcbiAgOiB7IGNicmVhazogdHJ1ZSB9O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBwcm9tcHRTZWNyZXR9LiAqL1xuZXhwb3J0IHR5cGUgUHJvbXB0U2VjcmV0T3B0aW9ucyA9IHtcbiAgLyoqIEEgY2hhcmFjdGVyIHRvIHByaW50IGluc3RlYWQgb2YgdGhlIHVzZXIncyBpbnB1dC4gKi9cbiAgbWFzaz86IHN0cmluZztcbiAgLyoqIENsZWFyIHRoZSBjdXJyZW50IGxpbmUgYWZ0ZXIgdGhlIHVzZXIncyBpbnB1dC4gKi9cbiAgY2xlYXI/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBTaG93cyB0aGUgZ2l2ZW4gbWVzc2FnZSBhbmQgd2FpdHMgZm9yIHRoZSB1c2VyJ3MgaW5wdXQuIFJldHVybnMgdGhlIHVzZXIncyBpbnB1dCBhcyBzdHJpbmcuXG4gKiBUaGlzIGlzIHNpbWlsYXIgdG8gYHByb21wdCgpYCBidXQgaXQgcHJpbnQgdXNlcidzIGlucHV0IGFzIGAqYCB0byBwcmV2ZW50IHBhc3N3b3JkIGZyb20gYmVpbmcgc2hvd24uXG4gKiBVc2UgYW4gZW1wdHkgYG1hc2tgIGlmIHlvdSBkb24ndCB3YW50IHRvIHNob3cgYW55IGNoYXJhY3Rlci5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgcHJvbXB0IG1lc3NhZ2UgdG8gc2hvdyB0byB0aGUgdXNlci5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgcHJvbXB0LlxuICogQHJldHVybnMgVGhlIHN0cmluZyB0aGF0IHdhcyBlbnRlcmVkIG9yIGBudWxsYCBpZiBzdGRpbiBpcyBub3QgYSBUVFkuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzIGlnbm9yZVxuICogaW1wb3J0IHsgcHJvbXB0U2VjcmV0IH0gZnJvbSBcIkBzdGQvY2xpL3Byb21wdC1zZWNyZXRcIjtcbiAqXG4gKiBjb25zdCBwYXNzd29yZCA9IHByb21wdFNlY3JldChcIlBsZWFzZSBwcm92aWRlIHRoZSBwYXNzd29yZDpcIik7XG4gKiBpZiAocGFzc3dvcmQgIT09IFwic29tZS1wYXNzd29yZFwiKSB7XG4gKiAgIHRocm93IG5ldyBFcnJvcihcIkFjY2VzcyBkZW5pZWRcIik7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21wdFNlY3JldChcbiAgbWVzc2FnZSA9IFwiU2VjcmV0XCIsXG4gIG9wdGlvbnM/OiBQcm9tcHRTZWNyZXRPcHRpb25zLFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHsgbWFzayA9IFwiKlwiLCBjbGVhciB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICBpZiAoIWlucHV0LmlzVGVybWluYWwoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBjb2x1bW5zIH0gPSBEZW5vLmNvbnNvbGVTaXplKCk7XG4gIGxldCBwcmV2aW91c0xlbmd0aCA9IDA7XG4gIC8vIE1ha2UgdGhlIG91dHB1dCBjb25zaXN0ZW50IHdpdGggdGhlIGJ1aWx0LWluIHByb21wdCgpXG4gIG1lc3NhZ2UgKz0gXCIgXCI7XG4gIGNvbnN0IGNhbGxiYWNrID0gIW1hc2sgPyB1bmRlZmluZWQgOiAobjogbnVtYmVyKSA9PiB7XG4gICAgbGV0IGxpbmUgPSBgJHttZXNzYWdlfSR7bWFzay5yZXBlYXQobil9YDtcbiAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gbGluZS5sZW5ndGg7XG4gICAgY29uc3QgY2hhcnNQYXN0TGluZUxlbmd0aCA9IGxpbmUubGVuZ3RoICUgY29sdW1ucztcblxuICAgIGlmIChsaW5lLmxlbmd0aCA+IGNvbHVtbnMpIHtcbiAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKFxuICAgICAgICAtMSAqIChjaGFyc1Bhc3RMaW5lTGVuZ3RoID09PSAwID8gY29sdW1ucyA6IGNoYXJzUGFzdExpbmVMZW5ndGgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdXNlciBoYXMgZGVsZXRlZCBhIGNoYXJhY3RlclxuICAgIGlmIChjdXJyZW50TGVuZ3RoIDwgcHJldmlvdXNMZW5ndGgpIHtcbiAgICAgIC8vIFRoZW4gY2xlYXIgdGhlIGN1cnJlbnQgbGluZS5cbiAgICAgIG91dHB1dC53cml0ZVN5bmMoQ0xSKTtcbiAgICAgIGlmIChjaGFyc1Bhc3RMaW5lTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIEFuZCBpZiB0aGVyZSdzIG5vIGNoYXJhY3RlcnMgb24gdGhlIGN1cnJlbnQgbGluZSwgcmV0dXJuIHRvIHByZXZpb3VzIGxpbmUuXG4gICAgICAgIG91dHB1dC53cml0ZVN5bmMoTU9WRV9MSU5FX1VQKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWx3YXlzIGp1bXAgdGhlIGN1cnNvciBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgdW5sZXNzIGl0J3MgdGhlIGZpcnN0IGNoYXJhY3Rlci5cbiAgICAgIGlmIChjaGFyc1Bhc3RMaW5lTGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIG91dHB1dC53cml0ZVN5bmMoQ0xSKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRwdXQud3JpdGVTeW5jKGVuY29kZXIuZW5jb2RlKGxpbmUpKTtcblxuICAgIHByZXZpb3VzTGVuZ3RoID0gY3VycmVudExlbmd0aDtcbiAgfTtcblxuICBvdXRwdXQud3JpdGVTeW5jKGVuY29kZXIuZW5jb2RlKG1lc3NhZ2UpKTtcblxuICBEZW5vLnN0ZGluLnNldFJhdyh0cnVlLCBzZXRSYXdPcHRpb25zKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVhZExpbmVGcm9tU3RkaW5TeW5jKGNhbGxiYWNrKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoY2xlYXIpIHtcbiAgICAgIG91dHB1dC53cml0ZVN5bmMoQ0xSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LndyaXRlU3luYyhlbmNvZGVyLmVuY29kZShcIlxcblwiKSk7XG4gICAgfVxuICAgIERlbm8uc3RkaW4uc2V0UmF3KGZhbHNlKTtcbiAgfVxufVxuXG4vLyBTbGlnaHRseSBtb2RpZmllZCBmcm9tIERlbm8ncyBydW50aW1lL2pzLzQxX3Byb21wdC5qc1xuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpbW1lZGlhdGVseSBicmVhayBvbiBDUiBvciBMRiBhbmQgYWNjZXB0IGNhbGxiYWNrLlxuLy8gVGhlIG9yaWdpbmFsIHZlcnNpb24gd2FpdHMgTEYgd2hlbiBDUiBpcyByZWNlaXZlZC5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2Jsb2IvZTQ1OTM4NzNhOWM3OTEyMzg2ODVkZmJiNDVlNjRiNDQ4NTg4NDE3NC9ydW50aW1lL2pzLzQxX3Byb21wdC5qcyNMNTItTDc3XG5mdW5jdGlvbiByZWFkTGluZUZyb21TdGRpblN5bmMoY2FsbGJhY2s/OiAobjogbnVtYmVyKSA9PiB2b2lkKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KDEpO1xuICBjb25zdCBidWYgPSBbXTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IG4gPSBpbnB1dC5yZWFkU3luYyhjKTtcbiAgICBpZiAobiA9PT0gbnVsbCB8fCBuID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGNbMF0gPT09IENSIHx8IGNbMF0gPT09IExGKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGNbMF0gPT09IEJTIHx8IGNbMF0gPT09IERFTCkge1xuICAgICAgYnVmLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWYucHVzaChjWzBdISk7XG4gICAgfVxuICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soYnVmLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KGJ1ZikpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUVyRCxNQUFNLFFBQVEsS0FBSyxLQUFLO0FBQ3hCLE1BQU0sU0FBUyxLQUFLLE1BQU07QUFDMUIsTUFBTSxVQUFVLElBQUk7QUFDcEIsTUFBTSxVQUFVLElBQUk7QUFDcEIsTUFBTSxLQUFLLEtBQUssVUFBVSxDQUFDLElBQUksc0JBQXNCO0FBQ3JELE1BQU0sS0FBSyxLQUFLLFVBQVUsQ0FBQyxJQUFJLHlDQUF5QztB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
+// denoCacheMetadata=5992280026112844233,9312155248044626449 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/df1dc1df6123e8cb6e627eb6154bf1b50a90c94393ac6f4e9294177c4e289922.js b/vendor/gen/https/jsr.io/df1dc1df6123e8cb6e627eb6154bf1b50a90c94393ac6f4e9294177c4e289922.js
new file mode 100644
index 0000000..2dbcb67
--- /dev/null
+++ b/vendor/gen/https/jsr.io/df1dc1df6123e8cb6e627eb6154bf1b50a90c94393ac6f4e9294177c4e289922.js
@@ -0,0 +1,44 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported mostly from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+/**
+ * Utilities for working with POSIX-formatted paths.
+ *
+ * This module also provides some functions that help when working with URLs.
+ * See the documentation for examples.
+ *
+ * Codes in the examples uses POSIX path but it automatically use Windows path
+ * on Windows. Use methods under `posix` or `win32` object instead to handle non
+ * platform specific path like:
+ *
+ * ```ts
+ * import { fromFileUrl } from "@std/path/posix/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "/home/foo");
+ * ```
+ *
+ * @module
+ */ export * from "./basename.ts";
+export * from "./constants.ts";
+export * from "./dirname.ts";
+export * from "./extname.ts";
+export * from "./format.ts";
+export * from "./from_file_url.ts";
+export * from "./is_absolute.ts";
+export * from "./join.ts";
+export * from "./normalize.ts";
+export * from "./parse.ts";
+export * from "./relative.ts";
+export * from "./resolve.ts";
+export * from "./to_file_url.ts";
+export * from "./to_namespaced_path.ts";
+export * from "./common.ts";
+export * from "../types.ts";
+export * from "./glob_to_regexp.ts";
+export * from "./is_glob.ts";
+export * from "./join_globs.ts";
+export * from "./normalize_glob.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBtb3N0bHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogVXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggUE9TSVgtZm9ybWF0dGVkIHBhdGhzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgc29tZSBmdW5jdGlvbnMgdGhhdCBoZWxwIHdoZW4gd29ya2luZyB3aXRoIFVSTHMuXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGV4YW1wbGVzLlxuICpcbiAqIENvZGVzIGluIHRoZSBleGFtcGxlcyB1c2VzIFBPU0lYIHBhdGggYnV0IGl0IGF1dG9tYXRpY2FsbHkgdXNlIFdpbmRvd3MgcGF0aFxuICogb24gV2luZG93cy4gVXNlIG1ldGhvZHMgdW5kZXIgYHBvc2l4YCBvciBgd2luMzJgIG9iamVjdCBpbnN0ZWFkIHRvIGhhbmRsZSBub25cbiAqIHBsYXRmb3JtIHNwZWNpZmljIHBhdGggbGlrZTpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUZpbGVVcmwgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Zyb20tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vaG9tZS9mb29cIiksIFwiL2hvbWUvZm9vXCIpO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9iYXNlbmFtZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaXJuYW1lLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHRuYW1lLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JtYXQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zyb21fZmlsZV91cmwudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzX2Fic29sdXRlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9qb2luLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ub3JtYWxpemUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZWxhdGl2ZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzb2x2ZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdG9fZmlsZV91cmwudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RvX25hbWVzcGFjZWRfcGF0aC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tbW9uLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dsb2JfdG9fcmVnZXhwLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc19nbG9iLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9qb2luX2dsb2JzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ub3JtYWxpemVfZ2xvYi50c1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsb0VBQW9FO0FBQ3BFLHFDQUFxQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBQ0QsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxlQUFlO0FBQzdCLGNBQWMsZUFBZTtBQUM3QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxZQUFZO0FBQzFCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsYUFBYTtBQUMzQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWU7QUFDN0IsY0FBYyxtQkFBbUI7QUFDakMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsY0FBYztBQUM1QixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLGVBQWU7QUFDN0IsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxzQkFBc0IifQ==
+// denoCacheMetadata=11813043102218358025,7141832191107523264 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e0252c2df52f0833903b247c8ad2fce6c8994514d1bebdd7030dd15b4cb1287c.js b/vendor/gen/https/jsr.io/e0252c2df52f0833903b247c8ad2fce6c8994514d1bebdd7030dd15b4cb1287c.js
new file mode 100644
index 0000000..6535f69
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e0252c2df52f0833903b247c8ad2fce6c8994514d1bebdd7030dd15b4cb1287c.js
@@ -0,0 +1,62 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/dirname.ts";
+import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Return the directory path of a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { dirname } from "@std/path/posix/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(dirname("/home/user/Documents/"), "/home/user");
+ * assertEquals(dirname("/home/user/Documents/image.png"), "/home/user/Documents");
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts"), "https://deno.land/std/path");
+ * ```
+ *
+ * @example Working with URLs
+ *
+ * ```ts
+ * import { dirname } from "@std/path/posix/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts"), "https://deno.land/std/path");
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts?a=b"), "https://deno.land/std/path");
+ * assertEquals(dirname("https://deno.land/std/path/mod.ts#header"), "https://deno.land/std/path");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `dirname` from `@std/path/posix/unstable-dirname`.
+ *
+ * @param path The path to get the directory from.
+ * @returns The directory path.
+ */ export function dirname(path) {
+ assertArg(path);
+ let end = -1;
+ let matchedNonSeparator = false;
+ for(let i = path.length - 1; i >= 1; --i){
+ if (isPosixPathSeparator(path.charCodeAt(i))) {
+ if (matchedNonSeparator) {
+ end = i;
+ break;
+ }
+ } else {
+ matchedNonSeparator = true;
+ }
+ }
+ // No matches. Fallback based on provided path:
+ //
+ // - leading slashes paths
+ // "/foo" => "/"
+ // "///foo" => "/"
+ // - no slash path
+ // "foo" => "."
+ if (end === -1) {
+ return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : ".";
+ }
+ return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9wb3NpeC9kaXJuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGFzc2VydEFyZyB9IGZyb20gXCIuLi9fY29tbW9uL2Rpcm5hbWUudHNcIjtcbmltcG9ydCB7IHN0cmlwVHJhaWxpbmdTZXBhcmF0b3JzIH0gZnJvbSBcIi4uL19jb21tb24vc3RyaXBfdHJhaWxpbmdfc2VwYXJhdG9ycy50c1wiO1xuaW1wb3J0IHsgaXNQb3NpeFBhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgZGlyZWN0b3J5IHBhdGggb2YgYSBgcGF0aGAuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9wb3NpeC9kaXJuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZGlybmFtZShcIi9ob21lL3VzZXIvRG9jdW1lbnRzL1wiKSwgXCIvaG9tZS91c2VyXCIpO1xuICogYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9pbWFnZS5wbmdcIiksIFwiL2hvbWUvdXNlci9Eb2N1bWVudHNcIik7XG4gKiBhc3NlcnRFcXVhbHMoZGlybmFtZShcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoL21vZC50c1wiKSwgXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aFwiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdvcmtpbmcgd2l0aCBVUkxzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L2Rpcm5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhkaXJuYW1lKFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkL3BhdGgvbW9kLnRzXCIpLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoXCIpO1xuICogYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHM/YT1iXCIpLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoXCIpO1xuICogYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCJodHRwczovL2Rlbm8ubGFuZC9zdGQvcGF0aC9tb2QudHMjaGVhZGVyXCIpLCBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9wYXRoXCIpO1xuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgZGlybmFtZWAgZnJvbSBgQHN0ZC9wYXRoL3Bvc2l4L3Vuc3RhYmxlLWRpcm5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgZGlyZWN0b3J5IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGlyZWN0b3J5IHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydEFyZyhwYXRoKTtcblxuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkTm9uU2VwYXJhdG9yID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyAtLWkpIHtcbiAgICBpZiAoaXNQb3NpeFBhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgaWYgKG1hdGNoZWROb25TZXBhcmF0b3IpIHtcbiAgICAgICAgZW5kID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoZWROb25TZXBhcmF0b3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vIG1hdGNoZXMuIEZhbGxiYWNrIGJhc2VkIG9uIHByb3ZpZGVkIHBhdGg6XG4gIC8vXG4gIC8vIC0gbGVhZGluZyBzbGFzaGVzIHBhdGhzXG4gIC8vICAgICBcIi9mb29cIiA9PiBcIi9cIlxuICAvLyAgICAgXCIvLy9mb29cIiA9PiBcIi9cIlxuICAvLyAtIG5vIHNsYXNoIHBhdGhcbiAgLy8gICAgIFwiZm9vXCIgPT4gXCIuXCJcbiAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICByZXR1cm4gaXNQb3NpeFBhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDApKSA/IFwiL1wiIDogXCIuXCI7XG4gIH1cblxuICByZXR1cm4gc3RyaXBUcmFpbGluZ1NlcGFyYXRvcnMoXG4gICAgcGF0aC5zbGljZSgwLCBlbmQpLFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxTQUFTLFFBQVEsd0JBQXdCO0FBQ2xELFNBQVMsdUJBQXVCLFFBQVEsMENBQTBDO0FBQ2xGLFNBQVMsb0JBQW9CLFFBQVEsYUFBYTtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QkMsR0FDRCxPQUFPLFNBQVMsUUFBUSxJQUFZO0VBQ2xDLFVBQVU7RUFFVixJQUFJLE1BQU0sQ0FBQztFQUNYLElBQUksc0JBQXNCO0VBRTFCLElBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRztJQUN6QyxJQUFJLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxLQUFLO01BQzVDLElBQUkscUJBQXFCO1FBQ3ZCLE1BQU07UUFDTjtNQUNGO0lBQ0YsT0FBTztNQUNMLHNCQUFzQjtJQUN4QjtFQUNGO0VBRUEsK0NBQStDO0VBQy9DLEVBQUU7RUFDRiwwQkFBMEI7RUFDMUIsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLElBQUksUUFBUSxDQUFDLEdBQUc7SUFDZCxPQUFPLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxNQUFNLE1BQU07RUFDMUQ7RUFFQSxPQUFPLHdCQUNMLEtBQUssS0FBSyxDQUFDLEdBQUcsTUFDZDtBQUVKIn0=
+// denoCacheMetadata=10439583689480123028,11985401308306844000 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e19b3fafe881837081484810056013761fba67a9a3332254076e53ca3661e2ea.js b/vendor/gen/https/jsr.io/e19b3fafe881837081484810056013761fba67a9a3332254076e53ca3661e2ea.js
new file mode 100644
index 0000000..4559219
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e19b3fafe881837081484810056013761fba67a9a3332254076e53ca3661e2ea.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { normalizeGlob as posixNormalizeGlob } from "./posix/normalize_glob.ts";
+import { normalizeGlob as windowsNormalizeGlob } from "./windows/normalize_glob.ts";
+/**
+ * Normalizes a glob string.
+ *
+ * Behaves like
+ * {@linkcode https://jsr.io/@std/path/doc/~/normalize | normalize()}, but
+ * doesn't collapse "**\/.." when `globstar` is true.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalizeGlob } from "@std/path/normalize-glob";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(normalizeGlob("foo\\bar\\..\\baz"), "foo\\baz");
+ * assertEquals(normalizeGlob("foo\\**\\..\\bar\\..\\baz", { globstar: true }), "foo\\**\\..\\baz");
+ * } else {
+ * assertEquals(normalizeGlob("foo/bar/../baz"), "foo/baz");
+ * assertEquals(normalizeGlob("foo/**\/../bar/../baz", { globstar: true }), "foo/**\/../baz");
+ * }
+ * ```
+ *
+ * @param glob Glob string to normalize.
+ * @param options Glob options.
+ * @returns The normalized glob string.
+ */ export function normalizeGlob(glob, options = {}) {
+ return isWindows ? windowsNormalizeGlob(glob, options) : posixNormalizeGlob(glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9ub3JtYWxpemVfZ2xvYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH0gZnJvbSBcIi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplR2xvYiBhcyBwb3NpeE5vcm1hbGl6ZUdsb2IgfSBmcm9tIFwiLi9wb3NpeC9ub3JtYWxpemVfZ2xvYi50c1wiO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplR2xvYiBhcyB3aW5kb3dzTm9ybWFsaXplR2xvYixcbn0gZnJvbSBcIi4vd2luZG93cy9ub3JtYWxpemVfZ2xvYi50c1wiO1xuXG5leHBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH07XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGdsb2Igc3RyaW5nLlxuICpcbiAqIEJlaGF2ZXMgbGlrZVxuICoge0BsaW5rY29kZSBodHRwczovL2pzci5pby9Ac3RkL3BhdGgvZG9jL34vbm9ybWFsaXplIHwgbm9ybWFsaXplKCl9LCBidXRcbiAqIGRvZXNuJ3QgY29sbGFwc2UgXCIqKlxcLy4uXCIgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBub3JtYWxpemVHbG9iIH0gZnJvbSBcIkBzdGQvcGF0aC9ub3JtYWxpemUtZ2xvYlwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemVHbG9iKFwiZm9vXFxcXGJhclxcXFwuLlxcXFxiYXpcIiksIFwiZm9vXFxcXGJhelwiKTtcbiAqICAgYXNzZXJ0RXF1YWxzKG5vcm1hbGl6ZUdsb2IoXCJmb29cXFxcKipcXFxcLi5cXFxcYmFyXFxcXC4uXFxcXGJhelwiLCB7IGdsb2JzdGFyOiB0cnVlIH0pLCBcImZvb1xcXFwqKlxcXFwuLlxcXFxiYXpcIik7XG4gKiB9IGVsc2Uge1xuICogICBhc3NlcnRFcXVhbHMobm9ybWFsaXplR2xvYihcImZvby9iYXIvLi4vYmF6XCIpLCBcImZvby9iYXpcIik7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemVHbG9iKFwiZm9vLyoqXFwvLi4vYmFyLy4uL2JhelwiLCB7IGdsb2JzdGFyOiB0cnVlIH0pLCBcImZvby8qKlxcLy4uL2JhelwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBnbG9iIEdsb2Igc3RyaW5nIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIEdsb2Igb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGdsb2Igc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplR2xvYihcbiAgZ2xvYjogc3RyaW5nLFxuICBvcHRpb25zOiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c05vcm1hbGl6ZUdsb2IoZ2xvYiwgb3B0aW9ucylcbiAgICA6IHBvc2l4Tm9ybWFsaXplR2xvYihnbG9iLCBvcHRpb25zKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBR3JDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxpQkFBaUIsa0JBQWtCLFFBQVEsNEJBQTRCO0FBQ2hGLFNBQ0UsaUJBQWlCLG9CQUFvQixRQUNoQyw4QkFBOEI7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXdCQyxHQUNELE9BQU8sU0FBUyxjQUNkLElBQVksRUFDWixVQUF1QixDQUFDLENBQUM7RUFFekIsT0FBTyxZQUNILHFCQUFxQixNQUFNLFdBQzNCLG1CQUFtQixNQUFNO0FBQy9CIn0=
+// denoCacheMetadata=9148218092158488818,18133106659937006865 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e2d8f9557914ded459628fbb10e89444786db537d31ed2835aabde59c3672c00.js b/vendor/gen/https/jsr.io/e2d8f9557914ded459628fbb10e89444786db537d31ed2835aabde59c3672c00.js
new file mode 100644
index 0000000..35ceb80
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e2d8f9557914ded459628fbb10e89444786db537d31ed2835aabde59c3672c00.js
@@ -0,0 +1,28 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { format as posixFormat } from "./posix/format.ts";
+import { format as windowsFormat } from "./windows/format.ts";
+/**
+ * Generate a path from a {@linkcode ParsedPath} object. It does the
+ * opposite of {@linkcode https://jsr.io/@std/path/doc/~/parse | parse()}.
+ *
+ * @example Usage
+ * ```ts
+ * import { format } from "@std/path/format";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(format({ dir: "C:\\path\\to", base: "script.ts" }), "C:\\path\\to\\script.ts");
+ * } else {
+ * assertEquals(format({ dir: "/path/to/dir", base: "script.ts" }), "/path/to/dir/script.ts");
+ * }
+ * ```
+ *
+ * @param pathObject Object with path components.
+ * @returns The formatted path.
+ */ export function format(pathObject) {
+ return isWindows ? windowsFormat(pathObject) : posixFormat(pathObject);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyBmb3JtYXQgYXMgcG9zaXhGb3JtYXQgfSBmcm9tIFwiLi9wb3NpeC9mb3JtYXQudHNcIjtcbmltcG9ydCB7IGZvcm1hdCBhcyB3aW5kb3dzRm9ybWF0IH0gZnJvbSBcIi4vd2luZG93cy9mb3JtYXQudHNcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkUGF0aCB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBwYXRoIGZyb20gYSB7QGxpbmtjb2RlIFBhcnNlZFBhdGh9IG9iamVjdC4gSXQgZG9lcyB0aGVcbiAqIG9wcG9zaXRlIG9mIHtAbGlua2NvZGUgaHR0cHM6Ly9qc3IuaW8vQHN0ZC9wYXRoL2RvYy9+L3BhcnNlIHwgcGFyc2UoKX0uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiQHN0ZC9wYXRoL2Zvcm1hdFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhmb3JtYXQoeyBkaXI6IFwiQzpcXFxccGF0aFxcXFx0b1wiLCBiYXNlOiBcInNjcmlwdC50c1wiIH0pLCBcIkM6XFxcXHBhdGhcXFxcdG9cXFxcc2NyaXB0LnRzXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGZvcm1hdCh7IGRpcjogXCIvcGF0aC90by9kaXJcIiwgYmFzZTogXCJzY3JpcHQudHNcIiB9KSwgXCIvcGF0aC90by9kaXIvc2NyaXB0LnRzXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGhPYmplY3QgT2JqZWN0IHdpdGggcGF0aCBjb21wb25lbnRzLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Q6IFBhcnRpYWw8UGFyc2VkUGF0aD4pOiBzdHJpbmcge1xuICByZXR1cm4gaXNXaW5kb3dzID8gd2luZG93c0Zvcm1hdChwYXRoT2JqZWN0KSA6IHBvc2l4Rm9ybWF0KHBhdGhPYmplY3QpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FBUyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTLFVBQVUsV0FBVyxRQUFRLG9CQUFvQjtBQUMxRCxTQUFTLFVBQVUsYUFBYSxRQUFRLHNCQUFzQjtBQUc5RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sVUFBK0I7RUFDcEQsT0FBTyxZQUFZLGNBQWMsY0FBYyxZQUFZO0FBQzdEIn0=
+// denoCacheMetadata=3063384447962844659,4791598660734348917 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e37ee0ef03712b5cd7f4b603b710e772efe0a22f0531ae7488706cfa7f41a468.js b/vendor/gen/https/jsr.io/e37ee0ef03712b5cd7f4b603b710e772efe0a22f0531ae7488706cfa7f41a468.js
new file mode 100644
index 0000000..252cf8d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e37ee0ef03712b5cd7f4b603b710e772efe0a22f0531ae7488706cfa7f41a468.js
@@ -0,0 +1,79 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// https://github.com/golang/go/blob/master/LICENSE
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Port of the Go
+ * {@link https://github.com/golang/go/blob/go1.12.5/src/encoding/hex/hex.go | encoding/hex}
+ * library.
+ *
+ * ```ts
+ * import {
+ * decodeHex,
+ * encodeHex,
+ * } from "@std/encoding/hex";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(encodeHex("abc"), "616263");
+ *
+ * assertEquals(
+ * decodeHex("616263"),
+ * new TextEncoder().encode("abc"),
+ * );
+ * ```
+ *
+ * @module
+ */ import { calcSizeHex, decode, encode } from "./_common16.ts";
+import { detach } from "./_common_detach.ts";
+const alphabet = new TextEncoder().encode("0123456789abcdef");
+const rAlphabet = new Uint8Array(128).fill(16); // alphabet.length
+alphabet.forEach((byte, i)=>rAlphabet[byte] = i);
+new TextEncoder().encode("ABCDEF").forEach((byte, i)=>rAlphabet[byte] = i + 10);
+/**
+ * Converts data into a hex-encoded string.
+ *
+ * @param src The data to encode.
+ *
+ * @returns The hex-encoded string.
+ *
+ * @example Usage
+ * ```ts
+ * import { encodeHex } from "@std/encoding/hex";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(encodeHex("abc"), "616263");
+ * ```
+ */ export function encodeHex(src) {
+ if (typeof src === "string") {
+ src = new TextEncoder().encode(src);
+ } else if (src instanceof ArrayBuffer) src = new Uint8Array(src).slice();
+ else src = src.slice();
+ const [output, i] = detach(src, calcSizeHex(src.length));
+ encode(output, i, 0, alphabet);
+ return new TextDecoder().decode(output);
+}
+/**
+ * Decodes the given hex-encoded string. If the input is malformed, an error is
+ * thrown.
+ *
+ * @param src The hex-encoded string to decode.
+ *
+ * @returns The decoded data.
+ *
+ * @example Usage
+ * ```ts
+ * import { decodeHex } from "@std/encoding/hex";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(
+ * decodeHex("616263"),
+ * new TextEncoder().encode("abc"),
+ * );
+ * ```
+ */ export function decodeHex(src) {
+ const output = new TextEncoder().encode(src);
+ // deno-lint-ignore no-explicit-any
+ return new Uint8Array(output.buffer.transfer(decode(output, 0, 0, rAlphabet)));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZW5jb2RpbmcvMS4wLjEwL2hleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAwOSBUaGUgR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb2xhbmcvZ28vYmxvYi9tYXN0ZXIvTElDRU5TRVxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLyoqXG4gKiBQb3J0IG9mIHRoZSBHb1xuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9nb2xhbmcvZ28vYmxvYi9nbzEuMTIuNS9zcmMvZW5jb2RpbmcvaGV4L2hleC5nbyB8IGVuY29kaW5nL2hleH1cbiAqIGxpYnJhcnkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7XG4gKiAgIGRlY29kZUhleCxcbiAqICAgZW5jb2RlSGV4LFxuICogfSBmcm9tIFwiQHN0ZC9lbmNvZGluZy9oZXhcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhlbmNvZGVIZXgoXCJhYmNcIiksIFwiNjE2MjYzXCIpO1xuICpcbiAqIGFzc2VydEVxdWFscyhcbiAqICAgZGVjb2RlSGV4KFwiNjE2MjYzXCIpLFxuICogICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJhYmNcIiksXG4gKiApO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNhbGNTaXplSGV4LCBkZWNvZGUsIGVuY29kZSB9IGZyb20gXCIuL19jb21tb24xNi50c1wiO1xuaW1wb3J0IHsgZGV0YWNoIH0gZnJvbSBcIi4vX2NvbW1vbl9kZXRhY2gudHNcIjtcbmltcG9ydCB0eXBlIHsgVWludDhBcnJheV8gfSBmcm9tIFwiLi9fdHlwZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVWludDhBcnJheV8gfTtcblxuY29uc3QgYWxwaGFiZXQgPSBuZXcgVGV4dEVuY29kZXIoKVxuICAuZW5jb2RlKFwiMDEyMzQ1Njc4OWFiY2RlZlwiKTtcbmNvbnN0IHJBbHBoYWJldCA9IG5ldyBVaW50OEFycmF5KDEyOCkuZmlsbCgxNik7IC8vIGFscGhhYmV0Lmxlbmd0aFxuYWxwaGFiZXQuZm9yRWFjaCgoYnl0ZSwgaSkgPT4gckFscGhhYmV0W2J5dGVdID0gaSk7XG5uZXcgVGV4dEVuY29kZXIoKVxuICAuZW5jb2RlKFwiQUJDREVGXCIpXG4gIC5mb3JFYWNoKChieXRlLCBpKSA9PiByQWxwaGFiZXRbYnl0ZV0gPSBpICsgMTApO1xuXG4vKipcbiAqIENvbnZlcnRzIGRhdGEgaW50byBhIGhleC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3JjIFRoZSBkYXRhIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgaGV4LWVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZW5jb2RlSGV4IH0gZnJvbSBcIkBzdGQvZW5jb2RpbmcvaGV4XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZW5jb2RlSGV4KFwiYWJjXCIpLCBcIjYxNjI2M1wiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSGV4KHNyYzogc3RyaW5nIHwgVWludDhBcnJheSB8IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBzcmMgPT09IFwic3RyaW5nXCIpIHtcbiAgICBzcmMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3JjKSBhcyBVaW50OEFycmF5XztcbiAgfSBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgc3JjID0gbmV3IFVpbnQ4QXJyYXkoc3JjKS5zbGljZSgpO1xuICBlbHNlIHNyYyA9IHNyYy5zbGljZSgpO1xuICBjb25zdCBbb3V0cHV0LCBpXSA9IGRldGFjaChcbiAgICBzcmMgYXMgVWludDhBcnJheV8sXG4gICAgY2FsY1NpemVIZXgoKHNyYyBhcyBVaW50OEFycmF5XykubGVuZ3RoKSxcbiAgKTtcbiAgZW5jb2RlKG91dHB1dCwgaSwgMCwgYWxwaGFiZXQpO1xuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG91dHB1dCk7XG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgZ2l2ZW4gaGV4LWVuY29kZWQgc3RyaW5nLiBJZiB0aGUgaW5wdXQgaXMgbWFsZm9ybWVkLCBhbiBlcnJvciBpc1xuICogdGhyb3duLlxuICpcbiAqIEBwYXJhbSBzcmMgVGhlIGhleC1lbmNvZGVkIHN0cmluZyB0byBkZWNvZGUuXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29kZWQgZGF0YS5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlY29kZUhleCB9IGZyb20gXCJAc3RkL2VuY29kaW5nL2hleFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKFxuICogICBkZWNvZGVIZXgoXCI2MTYyNjNcIiksXG4gKiAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcImFiY1wiKSxcbiAqICk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUhleChzcmM6IHN0cmluZyk6IFVpbnQ4QXJyYXlfIHtcbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHNyYykgYXMgVWludDhBcnJheV87XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIHJldHVybiBuZXcgVWludDhBcnJheSgob3V0cHV0LmJ1ZmZlciBhcyBhbnkpXG4gICAgLnRyYW5zZmVyKGRlY29kZShvdXRwdXQsIDAsIDAsIHJBbHBoYWJldCkpKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQsbURBQW1EO0FBQ25ELHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCQyxHQUVELFNBQVMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsaUJBQWlCO0FBQzdELFNBQVMsTUFBTSxRQUFRLHNCQUFzQjtBQUk3QyxNQUFNLFdBQVcsSUFBSSxjQUNsQixNQUFNLENBQUM7QUFDVixNQUFNLFlBQVksSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLEtBQUssa0JBQWtCO0FBQ2xFLFNBQVMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFNLFNBQVMsQ0FBQyxLQUFLLEdBQUc7QUFDaEQsSUFBSSxjQUNELE1BQU0sQ0FBQyxVQUNQLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUk7QUFFOUM7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDRCxPQUFPLFNBQVMsVUFBVSxHQUFzQztFQUM5RCxJQUFJLE9BQU8sUUFBUSxVQUFVO0lBQzNCLE1BQU0sSUFBSSxjQUFjLE1BQU0sQ0FBQztFQUNqQyxPQUFPLElBQUksZUFBZSxhQUFhLE1BQU0sSUFBSSxXQUFXLEtBQUssS0FBSztPQUNqRSxNQUFNLElBQUksS0FBSztFQUNwQixNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsT0FDbEIsS0FDQSxZQUFZLEFBQUMsSUFBb0IsTUFBTTtFQUV6QyxPQUFPLFFBQVEsR0FBRyxHQUFHO0VBQ3JCLE9BQU8sSUFBSSxjQUFjLE1BQU0sQ0FBQztBQUNsQztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FDRCxPQUFPLFNBQVMsVUFBVSxHQUFXO0VBQ25DLE1BQU0sU0FBUyxJQUFJLGNBQWMsTUFBTSxDQUFDO0VBQ3hDLG1DQUFtQztFQUNuQyxPQUFPLElBQUksV0FBVyxBQUFDLE9BQU8sTUFBTSxDQUNqQyxRQUFRLENBQUMsT0FBTyxRQUFRLEdBQUcsR0FBRztBQUNuQyJ9
+// denoCacheMetadata=2955182457507027549,11717821340321145179 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e4e8a54551c5cfbad39fd5119b233c7dfc947e3c95708bfc07a73213a2030dea.js b/vendor/gen/https/jsr.io/e4e8a54551c5cfbad39fd5119b233c7dfc947e3c95708bfc07a73213a2030dea.js
new file mode 100644
index 0000000..67d001a
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e4e8a54551c5cfbad39fd5119b233c7dfc947e3c95708bfc07a73213a2030dea.js
@@ -0,0 +1,277 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+// Bare keys may only contain ASCII letters,
+// ASCII digits, underscores, and dashes (A-Za-z0-9_-).
+function joinKeys(keys) {
+ // Dotted keys are a sequence of bare or quoted keys joined with a dot.
+ // This allows for grouping similar properties together:
+ return keys.map((str)=>{
+ return str.length === 0 || str.match(/[^A-Za-z0-9_-]/) ? JSON.stringify(str) : str;
+ }).join(".");
+}
+class Dumper {
+ maxPad = 0;
+ srcObject;
+ output = [];
+ #arrayTypeCache = new Map();
+ constructor(srcObjc){
+ this.srcObject = srcObjc;
+ }
+ dump(fmtOptions = {}) {
+ // deno-lint-ignore no-explicit-any
+ this.output = this.#printObject(this.srcObject);
+ this.output = this.#format(fmtOptions);
+ return this.output;
+ }
+ #printObject(obj, keys = []) {
+ const out = [];
+ const props = Object.keys(obj);
+ const inlineProps = [];
+ const multilineProps = [];
+ for (const prop of props){
+ if (this.#isSimplySerializable(obj[prop])) {
+ inlineProps.push(prop);
+ } else {
+ multilineProps.push(prop);
+ }
+ }
+ const sortedProps = inlineProps.concat(multilineProps);
+ for (const prop of sortedProps){
+ const value = obj[prop];
+ if (value instanceof Date) {
+ out.push(this.#dateDeclaration([
+ prop
+ ], value));
+ } else if (typeof value === "string" || value instanceof RegExp) {
+ out.push(this.#strDeclaration([
+ prop
+ ], value.toString()));
+ } else if (typeof value === "number") {
+ out.push(this.#numberDeclaration([
+ prop
+ ], value));
+ } else if (typeof value === "boolean") {
+ out.push(this.#boolDeclaration([
+ prop
+ ], value));
+ } else if (value instanceof Array) {
+ const arrayType = this.#getTypeOfArray(value);
+ if (arrayType === "ONLY_PRIMITIVE") {
+ out.push(this.#arrayDeclaration([
+ prop
+ ], value));
+ } else if (arrayType === "ONLY_OBJECT_EXCLUDING_ARRAY") {
+ // array of objects
+ for(let i = 0; i < value.length; i++){
+ out.push("");
+ out.push(this.#headerGroup([
+ ...keys,
+ prop
+ ]));
+ out.push(...this.#printObject(value[i], [
+ ...keys,
+ prop
+ ]));
+ }
+ } else {
+ // this is a complex array, use the inline format.
+ const str = value.map((x)=>this.#printAsInlineValue(x)).join(",");
+ out.push(`${this.#declaration([
+ prop
+ ])}[${str}]`);
+ }
+ } else if (typeof value === "object") {
+ out.push("");
+ out.push(this.#header([
+ ...keys,
+ prop
+ ]));
+ if (value) {
+ const toParse = value;
+ out.push(...this.#printObject(toParse, [
+ ...keys,
+ prop
+ ]));
+ }
+ // out.push(...this._parse(value, `${path}${prop}.`));
+ }
+ }
+ out.push("");
+ return out;
+ }
+ #isPrimitive(value) {
+ return value instanceof Date || value instanceof RegExp || [
+ "string",
+ "number",
+ "boolean"
+ ].includes(typeof value);
+ }
+ #getTypeOfArray(arr) {
+ if (this.#arrayTypeCache.has(arr)) {
+ return this.#arrayTypeCache.get(arr);
+ }
+ const type = this.#doGetTypeOfArray(arr);
+ this.#arrayTypeCache.set(arr, type);
+ return type;
+ }
+ #doGetTypeOfArray(arr) {
+ if (!arr.length) {
+ // any type should be fine
+ return "ONLY_PRIMITIVE";
+ }
+ const onlyPrimitive = this.#isPrimitive(arr[0]);
+ if (arr[0] instanceof Array) {
+ return "MIXED";
+ }
+ for(let i = 1; i < arr.length; i++){
+ if (onlyPrimitive !== this.#isPrimitive(arr[i]) || arr[i] instanceof Array) {
+ return "MIXED";
+ }
+ }
+ return onlyPrimitive ? "ONLY_PRIMITIVE" : "ONLY_OBJECT_EXCLUDING_ARRAY";
+ }
+ #printAsInlineValue(value) {
+ if (value instanceof Date) {
+ return `"${this.#printDate(value)}"`;
+ } else if (typeof value === "string" || value instanceof RegExp) {
+ return JSON.stringify(value.toString());
+ } else if (typeof value === "number") {
+ return value;
+ } else if (typeof value === "boolean") {
+ return value.toString();
+ } else if (value instanceof Array) {
+ const str = value.map((x)=>this.#printAsInlineValue(x)).join(",");
+ return `[${str}]`;
+ } else if (typeof value === "object") {
+ if (!value) {
+ throw new Error("Should never reach");
+ }
+ const str = Object.keys(value).map((key)=>{
+ return `${joinKeys([
+ key
+ ])} = ${// deno-lint-ignore no-explicit-any
+ this.#printAsInlineValue(value[key])}`;
+ }).join(",");
+ return `{${str}}`;
+ }
+ throw new Error("Should never reach");
+ }
+ #isSimplySerializable(value) {
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value instanceof RegExp || value instanceof Date || value instanceof Array && this.#getTypeOfArray(value) !== "ONLY_OBJECT_EXCLUDING_ARRAY";
+ }
+ #header(keys) {
+ return `[${joinKeys(keys)}]`;
+ }
+ #headerGroup(keys) {
+ return `[[${joinKeys(keys)}]]`;
+ }
+ #declaration(keys) {
+ const title = joinKeys(keys);
+ if (title.length > this.maxPad) {
+ this.maxPad = title.length;
+ }
+ return `${title} = `;
+ }
+ #arrayDeclaration(keys, value) {
+ return `${this.#declaration(keys)}${JSON.stringify(value)}`;
+ }
+ #strDeclaration(keys, value) {
+ return `${this.#declaration(keys)}${JSON.stringify(value)}`;
+ }
+ #numberDeclaration(keys, value) {
+ if (Number.isNaN(value)) {
+ return `${this.#declaration(keys)}nan`;
+ }
+ switch(value){
+ case Infinity:
+ return `${this.#declaration(keys)}inf`;
+ case -Infinity:
+ return `${this.#declaration(keys)}-inf`;
+ default:
+ return `${this.#declaration(keys)}${value}`;
+ }
+ }
+ #boolDeclaration(keys, value) {
+ return `${this.#declaration(keys)}${value}`;
+ }
+ #printDate(value) {
+ function dtPad(v, lPad = 2) {
+ return v.padStart(lPad, "0");
+ }
+ const m = dtPad((value.getUTCMonth() + 1).toString());
+ const d = dtPad(value.getUTCDate().toString());
+ const h = dtPad(value.getUTCHours().toString());
+ const min = dtPad(value.getUTCMinutes().toString());
+ const s = dtPad(value.getUTCSeconds().toString());
+ const ms = dtPad(value.getUTCMilliseconds().toString(), 3);
+ // formatted date
+ const fData = `${value.getUTCFullYear()}-${m}-${d}T${h}:${min}:${s}.${ms}`;
+ return fData;
+ }
+ #dateDeclaration(keys, value) {
+ return `${this.#declaration(keys)}${this.#printDate(value)}`;
+ }
+ #format(options = {}) {
+ const { keyAlignment = false } = options;
+ const rDeclaration = /^(\".*\"|[^=]*)\s=/;
+ const out = [];
+ for(let i = 0; i < this.output.length; i++){
+ const l = this.output[i];
+ // we keep empty entry for array of objects
+ if (l[0] === "[" && l[1] !== "[") {
+ // non-empty object with only subobjects as properties
+ if (this.output[i + 1] === "" && this.output[i + 2]?.slice(0, l.length) === l.slice(0, -1) + ".") {
+ i += 1;
+ continue;
+ }
+ out.push(l);
+ } else {
+ if (keyAlignment) {
+ const m = rDeclaration.exec(l);
+ if (m && m[1]) {
+ out.push(l.replace(m[1], m[1].padEnd(this.maxPad)));
+ } else {
+ out.push(l);
+ }
+ } else {
+ out.push(l);
+ }
+ }
+ }
+ // Cleaning multiple spaces
+ const cleanedOutput = [];
+ for(let i = 0; i < out.length; i++){
+ const l = out[i];
+ if (!(l === "" && out[i + 1] === "")) {
+ cleanedOutput.push(l);
+ }
+ }
+ return cleanedOutput;
+ }
+}
+/**
+ * Converts an object to a {@link https://toml.io | TOML} string.
+ *
+ * @example Usage
+ * ```ts
+ * import { stringify } from "@std/toml/stringify";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const obj = {
+ * title: "TOML Example",
+ * owner: {
+ * name: "Bob",
+ * bio: "Bob is a cool guy",
+ * }
+ * };
+ * const tomlString = stringify(obj);
+ * assertEquals(tomlString, `title = "TOML Example"\n\n[owner]\nname = "Bob"\nbio = "Bob is a cool guy"\n`);
+ * ```
+ * @param obj Source object
+ * @param options Options for stringifying.
+ * @returns TOML string
+ */ export function stringify(obj, options) {
+ return new Dumper(obj).dump(options).join("\n");
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvdG9tbC8xLjAuNi9zdHJpbmdpZnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLy8gQmFyZSBrZXlzIG1heSBvbmx5IGNvbnRhaW4gQVNDSUkgbGV0dGVycyxcbi8vIEFTQ0lJIGRpZ2l0cywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMgKEEtWmEtejAtOV8tKS5cbmZ1bmN0aW9uIGpvaW5LZXlzKGtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgLy8gRG90dGVkIGtleXMgYXJlIGEgc2VxdWVuY2Ugb2YgYmFyZSBvciBxdW90ZWQga2V5cyBqb2luZWQgd2l0aCBhIGRvdC5cbiAgLy8gVGhpcyBhbGxvd3MgZm9yIGdyb3VwaW5nIHNpbWlsYXIgcHJvcGVydGllcyB0b2dldGhlcjpcbiAgcmV0dXJuIGtleXNcbiAgICAubWFwKChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gc3RyLmxlbmd0aCA9PT0gMCB8fCBzdHIubWF0Y2goL1teQS1aYS16MC05Xy1dLylcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeShzdHIpXG4gICAgICAgIDogc3RyO1xuICAgIH0pXG4gICAgLmpvaW4oXCIuXCIpO1xufVxuXG50eXBlIEFycmF5VHlwZSA9XG4gIHwgXCJPTkxZX1BSSU1JVElWRVwiXG4gIHwgXCJPTkxZX09CSkVDVF9FWENMVURJTkdfQVJSQVlcIlxuICB8IFwiTUlYRURcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIHN0cmluZ2lmeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5naWZ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWZpbmUgaWYgdGhlIGtleXMgc2hvdWxkIGJlIGFsaWduZWQgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBrZXlBbGlnbm1lbnQ/OiBib29sZWFuO1xufVxuXG5jbGFzcyBEdW1wZXIge1xuICBtYXhQYWQgPSAwO1xuICBzcmNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBvdXRwdXQ6IHN0cmluZ1tdID0gW107XG4gICNhcnJheVR5cGVDYWNoZSA9IG5ldyBNYXA8dW5rbm93bltdLCBBcnJheVR5cGU+KCk7XG4gIGNvbnN0cnVjdG9yKHNyY09iamM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgdGhpcy5zcmNPYmplY3QgPSBzcmNPYmpjO1xuICB9XG4gIGR1bXAoZm10T3B0aW9uczogU3RyaW5naWZ5T3B0aW9ucyA9IHt9KTogc3RyaW5nW10ge1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy5vdXRwdXQgPSB0aGlzLiNwcmludE9iamVjdCh0aGlzLnNyY09iamVjdCBhcyBhbnkpO1xuICAgIHRoaXMub3V0cHV0ID0gdGhpcy4jZm9ybWF0KGZtdE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLm91dHB1dDtcbiAgfVxuICAjcHJpbnRPYmplY3Qob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5czogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgaW5saW5lUHJvcHMgPSBbXTtcbiAgICBjb25zdCBtdWx0aWxpbmVQcm9wcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgaWYgKHRoaXMuI2lzU2ltcGx5U2VyaWFsaXphYmxlKG9ialtwcm9wXSkpIHtcbiAgICAgICAgaW5saW5lUHJvcHMucHVzaChwcm9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpbGluZVByb3BzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNvcnRlZFByb3BzID0gaW5saW5lUHJvcHMuY29uY2F0KG11bHRpbGluZVByb3BzKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2Ygc29ydGVkUHJvcHMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW3Byb3BdO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLiNkYXRlRGVjbGFyYXRpb24oW3Byb3BdLCB2YWx1ZSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy4jc3RyRGVjbGFyYXRpb24oW3Byb3BdLCB2YWx1ZS50b1N0cmluZygpKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBvdXQucHVzaCh0aGlzLiNudW1iZXJEZWNsYXJhdGlvbihbcHJvcF0sIHZhbHVlKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy4jYm9vbERlY2xhcmF0aW9uKFtwcm9wXSwgdmFsdWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBhcnJheVR5cGUgPSB0aGlzLiNnZXRUeXBlT2ZBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmIChhcnJheVR5cGUgPT09IFwiT05MWV9QUklNSVRJVkVcIikge1xuICAgICAgICAgIG91dC5wdXNoKHRoaXMuI2FycmF5RGVjbGFyYXRpb24oW3Byb3BdLCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5VHlwZSA9PT0gXCJPTkxZX09CSkVDVF9FWENMVURJTkdfQVJSQVlcIikge1xuICAgICAgICAgIC8vIGFycmF5IG9mIG9iamVjdHNcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvdXQucHVzaChcIlwiKTtcbiAgICAgICAgICAgIG91dC5wdXNoKHRoaXMuI2hlYWRlckdyb3VwKFsuLi5rZXlzLCBwcm9wXSkpO1xuICAgICAgICAgICAgb3V0LnB1c2goLi4udGhpcy4jcHJpbnRPYmplY3QodmFsdWVbaV0sIFsuLi5rZXlzLCBwcm9wXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgY29tcGxleCBhcnJheSwgdXNlIHRoZSBpbmxpbmUgZm9ybWF0LlxuICAgICAgICAgIGNvbnN0IHN0ciA9IHZhbHVlLm1hcCgoeCkgPT4gdGhpcy4jcHJpbnRBc0lubGluZVZhbHVlKHgpKS5qb2luKFwiLFwiKTtcbiAgICAgICAgICBvdXQucHVzaChgJHt0aGlzLiNkZWNsYXJhdGlvbihbcHJvcF0pfVske3N0cn1dYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIG91dC5wdXNoKFwiXCIpO1xuICAgICAgICBvdXQucHVzaCh0aGlzLiNoZWFkZXIoWy4uLmtleXMsIHByb3BdKSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHRvUGFyc2UgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICBvdXQucHVzaCguLi50aGlzLiNwcmludE9iamVjdCh0b1BhcnNlLCBbLi4ua2V5cywgcHJvcF0pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXQucHVzaCguLi50aGlzLl9wYXJzZSh2YWx1ZSwgYCR7cGF0aH0ke3Byb3B9LmApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0LnB1c2goXCJcIik7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICAjaXNQcmltaXRpdmUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgICAgW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpO1xuICB9XG4gICNnZXRUeXBlT2ZBcnJheShhcnI6IHVua25vd25bXSk6IEFycmF5VHlwZSB7XG4gICAgaWYgKHRoaXMuI2FycmF5VHlwZUNhY2hlLmhhcyhhcnIpKSB7XG4gICAgICByZXR1cm4gdGhpcy4jYXJyYXlUeXBlQ2FjaGUuZ2V0KGFycikhO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdGhpcy4jZG9HZXRUeXBlT2ZBcnJheShhcnIpO1xuICAgIHRoaXMuI2FycmF5VHlwZUNhY2hlLnNldChhcnIsIHR5cGUpO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG4gICNkb0dldFR5cGVPZkFycmF5KGFycjogdW5rbm93bltdKTogQXJyYXlUeXBlIHtcbiAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgIC8vIGFueSB0eXBlIHNob3VsZCBiZSBmaW5lXG4gICAgICByZXR1cm4gXCJPTkxZX1BSSU1JVElWRVwiO1xuICAgIH1cblxuICAgIGNvbnN0IG9ubHlQcmltaXRpdmUgPSB0aGlzLiNpc1ByaW1pdGl2ZShhcnJbMF0pO1xuICAgIGlmIChhcnJbMF0gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgcmV0dXJuIFwiTUlYRURcIjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgb25seVByaW1pdGl2ZSAhPT0gdGhpcy4jaXNQcmltaXRpdmUoYXJyW2ldKSB8fCBhcnJbaV0gaW5zdGFuY2VvZiBBcnJheVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBcIk1JWEVEXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvbmx5UHJpbWl0aXZlID8gXCJPTkxZX1BSSU1JVElWRVwiIDogXCJPTkxZX09CSkVDVF9FWENMVURJTkdfQVJSQVlcIjtcbiAgfVxuICAjcHJpbnRBc0lubGluZVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gYFwiJHt0aGlzLiNwcmludERhdGUodmFsdWUpfVwiYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBBcnJheVxuICAgICkge1xuICAgICAgY29uc3Qgc3RyID0gdmFsdWUubWFwKCh4KSA9PiB0aGlzLiNwcmludEFzSW5saW5lVmFsdWUoeCkpLmpvaW4oXCIsXCIpO1xuICAgICAgcmV0dXJuIGBbJHtzdHJ9XWA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5ldmVyIHJlYWNoXCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RyID0gT2JqZWN0LmtleXModmFsdWUpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBgJHtqb2luS2V5cyhba2V5XSl9ID0gJHtcbiAgICAgICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgICAgICAgIHRoaXMuI3ByaW50QXNJbmxpbmVWYWx1ZSgodmFsdWUgYXMgYW55KVtrZXldKX1gO1xuICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICByZXR1cm4gYHske3N0cn19YDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaG91bGQgbmV2ZXIgcmVhY2hcIik7XG4gIH1cbiAgI2lzU2ltcGx5U2VyaWFsaXphYmxlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8XG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJlxuICAgICAgICB0aGlzLiNnZXRUeXBlT2ZBcnJheSh2YWx1ZSkgIT09IFwiT05MWV9PQkpFQ1RfRVhDTFVESU5HX0FSUkFZXCIpXG4gICAgKTtcbiAgfVxuICAjaGVhZGVyKGtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske2pvaW5LZXlzKGtleXMpfV1gO1xuICB9XG4gICNoZWFkZXJHcm91cChrZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbWyR7am9pbktleXMoa2V5cyl9XV1gO1xuICB9XG4gICNkZWNsYXJhdGlvbihrZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGl0bGUgPSBqb2luS2V5cyhrZXlzKTtcbiAgICBpZiAodGl0bGUubGVuZ3RoID4gdGhpcy5tYXhQYWQpIHtcbiAgICAgIHRoaXMubWF4UGFkID0gdGl0bGUubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGl0bGV9ID0gYDtcbiAgfVxuICAjYXJyYXlEZWNsYXJhdGlvbihrZXlzOiBzdHJpbmdbXSwgdmFsdWU6IHVua25vd25bXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuI2RlY2xhcmF0aW9uKGtleXMpfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gIH1cbiAgI3N0ckRlY2xhcmF0aW9uKGtleXM6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy4jZGVjbGFyYXRpb24oa2V5cyl9JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YDtcbiAgfVxuICAjbnVtYmVyRGVjbGFyYXRpb24oa2V5czogc3RyaW5nW10sIHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy4jZGVjbGFyYXRpb24oa2V5cyl9bmFuYDtcbiAgICB9XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBJbmZpbml0eTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuI2RlY2xhcmF0aW9uKGtleXMpfWluZmA7XG4gICAgICBjYXNlIC1JbmZpbml0eTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuI2RlY2xhcmF0aW9uKGtleXMpfS1pbmZgO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuI2RlY2xhcmF0aW9uKGtleXMpfSR7dmFsdWV9YDtcbiAgICB9XG4gIH1cbiAgI2Jvb2xEZWNsYXJhdGlvbihrZXlzOiBzdHJpbmdbXSwgdmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLiNkZWNsYXJhdGlvbihrZXlzKX0ke3ZhbHVlfWA7XG4gIH1cbiAgI3ByaW50RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgZnVuY3Rpb24gZHRQYWQodjogc3RyaW5nLCBsUGFkID0gMik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdi5wYWRTdGFydChsUGFkLCBcIjBcIik7XG4gICAgfVxuICAgIGNvbnN0IG0gPSBkdFBhZCgodmFsdWUuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IGQgPSBkdFBhZCh2YWx1ZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgaCA9IGR0UGFkKHZhbHVlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgbWluID0gZHRQYWQodmFsdWUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHMgPSBkdFBhZCh2YWx1ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgbXMgPSBkdFBhZCh2YWx1ZS5nZXRVVENNaWxsaXNlY29uZHMoKS50b1N0cmluZygpLCAzKTtcbiAgICAvLyBmb3JtYXR0ZWQgZGF0ZVxuICAgIGNvbnN0IGZEYXRhID0gYCR7dmFsdWUuZ2V0VVRDRnVsbFllYXIoKX0tJHttfS0ke2R9VCR7aH06JHttaW59OiR7c30uJHttc31gO1xuICAgIHJldHVybiBmRGF0YTtcbiAgfVxuICAjZGF0ZURlY2xhcmF0aW9uKGtleXM6IHN0cmluZ1tdLCB2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuI2RlY2xhcmF0aW9uKGtleXMpfSR7dGhpcy4jcHJpbnREYXRlKHZhbHVlKX1gO1xuICB9XG4gICNmb3JtYXQob3B0aW9uczogU3RyaW5naWZ5T3B0aW9ucyA9IHt9KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHsga2V5QWxpZ25tZW50ID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgckRlY2xhcmF0aW9uID0gL14oXFxcIi4qXFxcInxbXj1dKilcXHM9LztcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3V0cHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsID0gdGhpcy5vdXRwdXRbaV0gYXMgc3RyaW5nO1xuICAgICAgLy8gd2Uga2VlcCBlbXB0eSBlbnRyeSBmb3IgYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgaWYgKGxbMF0gPT09IFwiW1wiICYmIGxbMV0gIT09IFwiW1wiKSB7XG4gICAgICAgIC8vIG5vbi1lbXB0eSBvYmplY3Qgd2l0aCBvbmx5IHN1Ym9iamVjdHMgYXMgcHJvcGVydGllc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5vdXRwdXRbaSArIDFdID09PSBcIlwiICYmXG4gICAgICAgICAgdGhpcy5vdXRwdXRbaSArIDJdPy5zbGljZSgwLCBsLmxlbmd0aCkgPT09IGwuc2xpY2UoMCwgLTEpICsgXCIuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaSArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG91dC5wdXNoKGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleUFsaWdubWVudCkge1xuICAgICAgICAgIGNvbnN0IG0gPSByRGVjbGFyYXRpb24uZXhlYyhsKTtcbiAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICBvdXQucHVzaChsLnJlcGxhY2UobVsxXSwgbVsxXS5wYWRFbmQodGhpcy5tYXhQYWQpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dC5wdXNoKGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQucHVzaChsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBDbGVhbmluZyBtdWx0aXBsZSBzcGFjZXNcbiAgICBjb25zdCBjbGVhbmVkT3V0cHV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGwgPSBvdXRbaV0gYXMgc3RyaW5nO1xuICAgICAgaWYgKCEobCA9PT0gXCJcIiAmJiBvdXRbaSArIDFdID09PSBcIlwiKSkge1xuICAgICAgICBjbGVhbmVkT3V0cHV0LnB1c2gobCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGVhbmVkT3V0cHV0O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHRvIGEge0BsaW5rIGh0dHBzOi8vdG9tbC5pbyB8IFRPTUx9IHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gXCJAc3RkL3RvbWwvc3RyaW5naWZ5XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIHRpdGxlOiBcIlRPTUwgRXhhbXBsZVwiLFxuICogICBvd25lcjoge1xuICogICAgIG5hbWU6IFwiQm9iXCIsXG4gKiAgICAgYmlvOiBcIkJvYiBpcyBhIGNvb2wgZ3V5XCIsXG4gKiAgfVxuICogfTtcbiAqIGNvbnN0IHRvbWxTdHJpbmcgPSBzdHJpbmdpZnkob2JqKTtcbiAqIGFzc2VydEVxdWFscyh0b21sU3RyaW5nLCBgdGl0bGUgPSBcIlRPTUwgRXhhbXBsZVwiXFxuXFxuW293bmVyXVxcbm5hbWUgPSBcIkJvYlwiXFxuYmlvID0gXCJCb2IgaXMgYSBjb29sIGd1eVwiXFxuYCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBvYmogU291cmNlIG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3Igc3RyaW5naWZ5aW5nLlxuICogQHJldHVybnMgVE9NTCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9ucz86IFN0cmluZ2lmeU9wdGlvbnMsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IER1bXBlcihvYmopLmR1bXAob3B0aW9ucykuam9pbihcIlxcblwiKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxx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
+// denoCacheMetadata=17451699876489807433,15963142249904147300 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e537a12b3fbee13ae9d4799f09e089d20f4b0ee3af305cf01e3e1aeea7b33378.js b/vendor/gen/https/jsr.io/e537a12b3fbee13ae9d4799f09e089d20f4b0ee3af305cf01e3e1aeea7b33378.js
new file mode 100644
index 0000000..3b017d9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e537a12b3fbee13ae9d4799f09e089d20f4b0ee3af305cf01e3e1aeea7b33378.js
@@ -0,0 +1,121 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { assertArg } from "../_common/normalize.ts";
+import { CHAR_COLON } from "../_common/constants.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Normalize the `path`, resolving `'..'` and `'.'` segments.
+ * Note that resolving these segments does not necessarily mean that all will be eliminated.
+ * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalize } from "@std/path/windows/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const normalized = normalize("C:\\foo\\..\\bar");
+ * assertEquals(normalized, "C:\\bar");
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `normalize` from `@std/path/windows/unstable-normalize`.
+ *
+ * @param path The path to normalize
+ * @returns The normalized path
+ */ export function normalize(path) {
+ assertArg(path);
+ const len = path.length;
+ let rootEnd = 0;
+ let device;
+ let isAbsolute = false;
+ const code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ // If we started with a separator, we know we at least have an absolute
+ // path of some kind (UNC or otherwise)
+ isAbsolute = true;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ const firstPart = path.slice(last, j);
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ // Return the normalized version of the UNC root since there
+ // is nothing left to process
+ return `\\\\${firstPart}\\${path.slice(last)}\\`;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
+ rootEnd = j;
+ }
+ }
+ }
+ } else {
+ rootEnd = 1;
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ device = path.slice(0, 2);
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ // Treat separator following drive name as an absolute path
+ // indicator
+ isAbsolute = true;
+ rootEnd = 3;
+ }
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid unnecessary
+ // work
+ return "\\";
+ }
+ let tail;
+ if (rootEnd < len) {
+ tail = normalizeString(path.slice(rootEnd), !isAbsolute, "\\", isPathSeparator);
+ } else {
+ tail = "";
+ }
+ if (tail.length === 0 && !isAbsolute) tail = ".";
+ if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {
+ tail += "\\";
+ }
+ if (device === undefined) {
+ if (isAbsolute) {
+ if (tail.length > 0) return `\\${tail}`;
+ else return "\\";
+ }
+ return tail;
+ } else if (isAbsolute) {
+ if (tail.length > 0) return `${device}\\${tail}`;
+ else return `${device}\\`;
+ }
+ return device + tail;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL25vcm1hbGl6ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBhc3NlcnRBcmcgfSBmcm9tIFwiLi4vX2NvbW1vbi9ub3JtYWxpemUudHNcIjtcbmltcG9ydCB7IENIQVJfQ09MT04gfSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gXCIuLi9fY29tbW9uL25vcm1hbGl6ZV9zdHJpbmcudHNcIjtcbmltcG9ydCB7IGlzUGF0aFNlcGFyYXRvciwgaXNXaW5kb3dzRGV2aWNlUm9vdCB9IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBgcGF0aGAsIHJlc29sdmluZyBgJy4uJ2AgYW5kIGAnLidgIHNlZ21lbnRzLlxuICogTm90ZSB0aGF0IHJlc29sdmluZyB0aGVzZSBzZWdtZW50cyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgYWxsIHdpbGwgYmUgZWxpbWluYXRlZC5cbiAqIEEgYCcuLidgIGF0IHRoZSB0b3AtbGV2ZWwgd2lsbCBiZSBwcmVzZXJ2ZWQsIGFuZCBhbiBlbXB0eSBwYXRoIGlzIGNhbm9uaWNhbGx5IGAnLidgLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL25vcm1hbGl6ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZShcIkM6XFxcXGZvb1xcXFwuLlxcXFxiYXJcIik7XG4gKiBhc3NlcnRFcXVhbHMobm9ybWFsaXplZCwgXCJDOlxcXFxiYXJcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBub3JtYWxpemVgIGZyb20gYEBzdGQvcGF0aC93aW5kb3dzL3Vuc3RhYmxlLW5vcm1hbGl6ZWAuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0QXJnKHBhdGgpO1xuXG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBkZXZpY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAvLyBUcnkgdG8gbWF0Y2ggYSByb290XG4gIGlmIChsZW4gPiAxKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gUG9zc2libGUgVU5DIHJvb3RcblxuICAgICAgLy8gSWYgd2Ugc3RhcnRlZCB3aXRoIGEgc2VwYXJhdG9yLCB3ZSBrbm93IHdlIGF0IGxlYXN0IGhhdmUgYW4gYWJzb2x1dGVcbiAgICAgIC8vIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG5cbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoLnNsaWNlKGxhc3QsIGopO1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgVU5DIHJvb3Qgc2luY2UgdGhlcmVcbiAgICAgICAgICAgICAgLy8gaXMgbm90aGluZyBsZWZ0IHRvIHByb2Nlc3NcblxuICAgICAgICAgICAgICByZXR1cm4gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0KX1cXFxcYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QsIGopfWA7XG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVuZCA9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGRldmljZSA9IHBhdGguc2xpY2UoMCwgMik7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgLy8gVHJlYXQgc2VwYXJhdG9yIGZvbGxvd2luZyBkcml2ZSBuYW1lIGFzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICByb290RW5kID0gMztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuICAgIC8vIHdvcmtcbiAgICByZXR1cm4gXCJcXFxcXCI7XG4gIH1cblxuICBsZXQgdGFpbDogc3RyaW5nO1xuICBpZiAocm9vdEVuZCA8IGxlbikge1xuICAgIHRhaWwgPSBub3JtYWxpemVTdHJpbmcoXG4gICAgICBwYXRoLnNsaWNlKHJvb3RFbmQpLFxuICAgICAgIWlzQWJzb2x1dGUsXG4gICAgICBcIlxcXFxcIixcbiAgICAgIGlzUGF0aFNlcGFyYXRvcixcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRhaWwgPSBcIlwiO1xuICB9XG4gIGlmICh0YWlsLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgdGFpbCA9IFwiLlwiO1xuICBpZiAodGFpbC5sZW5ndGggPiAwICYmIGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQobGVuIC0gMSkpKSB7XG4gICAgdGFpbCArPSBcIlxcXFxcIjtcbiAgfVxuICBpZiAoZGV2aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgICAgaWYgKHRhaWwubGVuZ3RoID4gMCkgcmV0dXJuIGBcXFxcJHt0YWlsfWA7XG4gICAgICBlbHNlIHJldHVybiBcIlxcXFxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRhaWw7XG4gIH0gZWxzZSBpZiAoaXNBYnNvbHV0ZSkge1xuICAgIGlmICh0YWlsLmxlbmd0aCA+IDApIHJldHVybiBgJHtkZXZpY2V9XFxcXCR7dGFpbH1gO1xuICAgIGVsc2UgcmV0dXJuIGAke2RldmljZX1cXFxcYDtcbiAgfVxuICByZXR1cm4gZGV2aWNlICsgdGFpbDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLDBCQUEwQjtBQUNwRCxTQUFTLFVBQVUsUUFBUSwwQkFBMEI7QUFDckQsU0FBUyxlQUFlLFFBQVEsaUNBQWlDO0FB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
+// denoCacheMetadata=9911231308521647765,13168422209284486371 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e53dcec6288a00c9653737a60aaf3127c5a407027d8b83ee6962d04167d48039.js b/vendor/gen/https/jsr.io/e53dcec6288a00c9653737a60aaf3127c5a407027d8b83ee6962d04167d48039.js
new file mode 100644
index 0000000..3f91c01
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e53dcec6288a00c9653737a60aaf3127c5a407027d8b83ee6962d04167d48039.js
@@ -0,0 +1,116 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+/** Object structure for a list of HTML entities. */ const rawToEntityEntries = [
+ [
+ "&",
+ "&amp;"
+ ],
+ [
+ "<",
+ "&lt;"
+ ],
+ [
+ ">",
+ "&gt;"
+ ],
+ [
+ '"',
+ "&quot;"
+ ],
+ [
+ "'",
+ "&#39;"
+ ]
+];
+const defaultEntityList = Object.fromEntries([
+ ...rawToEntityEntries.map(([raw, entity])=>[
+ entity,
+ raw
+ ]),
+ [
+ "&apos;",
+ "'"
+ ],
+ [
+ "&nbsp;",
+ "\xa0"
+ ]
+]);
+const rawToEntity = new Map(rawToEntityEntries);
+const rawRe = new RegExp(`[${[
+ ...rawToEntity.keys()
+].join("")}]`, "g");
+/**
+ * Escapes text for safe interpolation into HTML text content and quoted attributes.
+ *
+ * @example Usage
+ * ```ts
+ * import { escape } from "@std/html/entities";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(escape("<>'&AA"), "&lt;&gt;&#39;&amp;AA");
+ *
+ * // Characters that don't need to be escaped will be left alone,
+ * // even if named HTML entities exist for them.
+ * assertEquals(escape("þð"), "þð");
+ * ```
+ *
+ * @param str The string to escape.
+ * @returns The escaped string.
+ */ export function escape(str) {
+ return str.replaceAll(rawRe, (m)=>rawToEntity.get(m));
+}
+const defaultUnescapeOptions = {
+ entityList: defaultEntityList
+};
+const MAX_CODE_POINT = 0x10ffff;
+const RX_DEC_ENTITY = /&#([0-9]+);/g;
+const RX_HEX_ENTITY = /&#x(\p{AHex}+);/gu;
+const entityListRegexCache = new WeakMap();
+/**
+ * Unescapes HTML entities in text.
+ *
+ * Default options only handle `&<>'"` and numeric entities.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { unescape } from "@std/html/entities";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unescape("&lt;&gt;&#39;&amp;AA"), "<>'&AA");
+ * assertEquals(unescape("&thorn;&eth;"), "&thorn;&eth;");
+ * ```
+ *
+ * @example Using a custom entity list
+ *
+ * This uses the full named entity list from the HTML spec (~47K un-minified)
+ *
+ * ```ts
+ * import { unescape } from "@std/html/entities";
+ * import entityList from "@std/html/named-entity-list.json" with { type: "json" };
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(unescape("&lt;&gt;&#39;&amp;AA", { entityList }), "<>'&AA");
+ * ```
+ *
+ * @param str The string to unescape.
+ * @param options Options for unescaping.
+ * @returns The unescaped string.
+ */ export function unescape(str, options = {}) {
+ const { entityList } = {
+ ...defaultUnescapeOptions,
+ ...options
+ };
+ let entityRe = entityListRegexCache.get(entityList);
+ if (!entityRe) {
+ entityRe = new RegExp(`(${Object.keys(entityList).sort((a, b)=>b.length - a.length).join("|")})`, "g");
+ entityListRegexCache.set(entityList, entityRe);
+ }
+ return str.replaceAll(entityRe, (m)=>entityList[m]).replaceAll(RX_DEC_ENTITY, (_, dec)=>codePointStrToChar(dec, 10)).replaceAll(RX_HEX_ENTITY, (_, hex)=>codePointStrToChar(hex, 16));
+}
+function codePointStrToChar(codePointStr, radix) {
+ const codePoint = parseInt(codePointStr, radix);
+ return codePoint > MAX_CODE_POINT ? "�" : String.fromCodePoint(codePoint);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvaHRtbC8xLjAuMy9lbnRpdGllcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKiogT2JqZWN0IHN0cnVjdHVyZSBmb3IgYSBsaXN0IG9mIEhUTUwgZW50aXRpZXMuICovXG5leHBvcnQgdHlwZSBFbnRpdHlMaXN0ID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuY29uc3QgcmF3VG9FbnRpdHlFbnRyaWVzID0gW1xuICBbXCImXCIsIFwiJmFtcDtcIl0sXG4gIFtcIjxcIiwgXCImbHQ7XCJdLFxuICBbXCI+XCIsIFwiJmd0O1wiXSxcbiAgWydcIicsIFwiJnF1b3Q7XCJdLFxuICBbXCInXCIsIFwiJiMzOTtcIl0sXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBkZWZhdWx0RW50aXR5TGlzdDogRW50aXR5TGlzdCA9IE9iamVjdC5mcm9tRW50cmllcyhbXG4gIC4uLnJhd1RvRW50aXR5RW50cmllcy5tYXAoKFtyYXcsIGVudGl0eV0pID0+IFtlbnRpdHksIHJhd10pLFxuICBbXCImYXBvcztcIiwgXCInXCJdLFxuICBbXCImbmJzcDtcIiwgXCJcXHhhMFwiXSxcbl0pO1xuXG5jb25zdCByYXdUb0VudGl0eSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KHJhd1RvRW50aXR5RW50cmllcyk7XG5cbmNvbnN0IHJhd1JlID0gbmV3IFJlZ0V4cChgWyR7Wy4uLnJhd1RvRW50aXR5LmtleXMoKV0uam9pbihcIlwiKX1dYCwgXCJnXCIpO1xuXG4vKipcbiAqIEVzY2FwZXMgdGV4dCBmb3Igc2FmZSBpbnRlcnBvbGF0aW9uIGludG8gSFRNTCB0ZXh0IGNvbnRlbnQgYW5kIHF1b3RlZCBhdHRyaWJ1dGVzLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSBcIkBzdGQvaHRtbC9lbnRpdGllc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGVzY2FwZShcIjw+JyZBQVwiKSwgXCImbHQ7Jmd0OyYjMzk7JmFtcDtBQVwiKTtcbiAqXG4gKiAvLyBDaGFyYWN0ZXJzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBlc2NhcGVkIHdpbGwgYmUgbGVmdCBhbG9uZSxcbiAqIC8vIGV2ZW4gaWYgbmFtZWQgSFRNTCBlbnRpdGllcyBleGlzdCBmb3IgdGhlbS5cbiAqIGFzc2VydEVxdWFscyhlc2NhcGUoXCLDvsOwXCIpLCBcIsO+w7BcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKHJhd1JlLCAobSkgPT4gcmF3VG9FbnRpdHkuZ2V0KG0pISk7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIHVuZXNjYXBlfS4gKi9cbmV4cG9ydCB0eXBlIFVuZXNjYXBlT3B0aW9ucyA9IHsgZW50aXR5TGlzdDogRW50aXR5TGlzdCB9O1xuXG5jb25zdCBkZWZhdWx0VW5lc2NhcGVPcHRpb25zOiBVbmVzY2FwZU9wdGlvbnMgPSB7XG4gIGVudGl0eUxpc3Q6IGRlZmF1bHRFbnRpdHlMaXN0LFxufTtcblxuY29uc3QgTUFYX0NPREVfUE9JTlQgPSAweDEwZmZmZjtcblxuY29uc3QgUlhfREVDX0VOVElUWSA9IC8mIyhbMC05XSspOy9nO1xuY29uc3QgUlhfSEVYX0VOVElUWSA9IC8mI3goXFxwe0FIZXh9Kyk7L2d1O1xuXG5jb25zdCBlbnRpdHlMaXN0UmVnZXhDYWNoZSA9IG5ldyBXZWFrTWFwPEVudGl0eUxpc3QsIFJlZ0V4cD4oKTtcblxuLyoqXG4gKiBVbmVzY2FwZXMgSFRNTCBlbnRpdGllcyBpbiB0ZXh0LlxuICpcbiAqIERlZmF1bHQgb3B0aW9ucyBvbmx5IGhhbmRsZSBgJjw+J1wiYCBhbmQgbnVtZXJpYyBlbnRpdGllcy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHVuZXNjYXBlIH0gZnJvbSBcIkBzdGQvaHRtbC9lbnRpdGllc1wiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKFwiJmx0OyZndDsmIzM5OyZhbXA7QUFcIiksIFwiPD4nJkFBXCIpO1xuICogYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKFwiJnRob3JuOyZldGg7XCIpLCBcIiZ0aG9ybjsmZXRoO1wiKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFVzaW5nIGEgY3VzdG9tIGVudGl0eSBsaXN0XG4gKlxuICogVGhpcyB1c2VzIHRoZSBmdWxsIG5hbWVkIGVudGl0eSBsaXN0IGZyb20gdGhlIEhUTUwgc3BlYyAofjQ3SyB1bi1taW5pZmllZClcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdW5lc2NhcGUgfSBmcm9tIFwiQHN0ZC9odG1sL2VudGl0aWVzXCI7XG4gKiBpbXBvcnQgZW50aXR5TGlzdCBmcm9tIFwiQHN0ZC9odG1sL25hbWVkLWVudGl0eS1saXN0Lmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyh1bmVzY2FwZShcIiZsdDsmZ3Q7JiMzOTsmYW1wO0FBXCIsIHsgZW50aXR5TGlzdCB9KSwgXCI8PicmQUFcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gdW5lc2NhcGUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB1bmVzY2FwaW5nLlxuICogQHJldHVybnMgVGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZShcbiAgc3RyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBhcnRpYWw8VW5lc2NhcGVPcHRpb25zPiA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgeyBlbnRpdHlMaXN0IH0gPSB7IC4uLmRlZmF1bHRVbmVzY2FwZU9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBsZXQgZW50aXR5UmUgPSBlbnRpdHlMaXN0UmVnZXhDYWNoZS5nZXQoZW50aXR5TGlzdCk7XG5cbiAgaWYgKCFlbnRpdHlSZSkge1xuICAgIGVudGl0eVJlID0gbmV3IFJlZ0V4cChcbiAgICAgIGAoJHtcbiAgICAgICAgT2JqZWN0LmtleXMoZW50aXR5TGlzdClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgICAuam9pbihcInxcIilcbiAgICAgIH0pYCxcbiAgICAgIFwiZ1wiLFxuICAgICk7XG5cbiAgICBlbnRpdHlMaXN0UmVnZXhDYWNoZS5zZXQoZW50aXR5TGlzdCwgZW50aXR5UmUpO1xuICB9XG5cbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlQWxsKGVudGl0eVJlLCAobSkgPT4gZW50aXR5TGlzdFttXSEpXG4gICAgLnJlcGxhY2VBbGwoUlhfREVDX0VOVElUWSwgKF8sIGRlYykgPT4gY29kZVBvaW50U3RyVG9DaGFyKGRlYywgMTApKVxuICAgIC5yZXBsYWNlQWxsKFJYX0hFWF9FTlRJVFksIChfLCBoZXgpID0+IGNvZGVQb2ludFN0clRvQ2hhcihoZXgsIDE2KSk7XG59XG5cbmZ1bmN0aW9uIGNvZGVQb2ludFN0clRvQ2hhcihjb2RlUG9pbnRTdHI6IHN0cmluZywgcmFkaXg6IG51bWJlcikge1xuICBjb25zdCBjb2RlUG9pbnQgPSBwYXJzZUludChjb2RlUG9pbnRTdHIsIHJhZGl4KTtcblxuICByZXR1cm4gY29kZVBvaW50ID4gTUFYX0NPREVfUE9JTlQgPyBcIu+/vVwiIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLGtEQUFrRCxHQUdsRCxNQUFNLHFCQUFxQjtFQUN6QjtJQUFDO0lBQUs7R0FBUTtFQUNkO0lBQUM7SUFBSztHQUFPO0VBQ2I7SUFBQztJQUFLO0dBQU87RUFDYjtJQUFDO0lBQUs7R0FBUztFQUNmO0lBQUM7SUFBSztHQUFRO0NBQ2Y7QUFFRCxNQUFNLG9CQUFnQyxPQUFPLFdBQVcsQ0FBQztLQUNwRCxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sR0FBSztNQUFDO01BQVE7S0FBSTtFQUMxRDtJQUFDO0lBQVU7R0FBSTtFQUNmO0lBQUM7SUFBVTtHQUFPO0NBQ25CO0FBRUQsTUFBTSxjQUFjLElBQUksSUFBb0I7QUFFNUMsTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRTtLQUFJLFlBQVksSUFBSTtDQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFFbEU7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBaUJDLEdBQ0QsT0FBTyxTQUFTLE9BQU8sR0FBVztFQUNoQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFNLFlBQVksR0FBRyxDQUFDO0FBQ3REO0FBS0EsTUFBTSx5QkFBMEM7RUFDOUMsWUFBWTtBQUNkO0FBRUEsTUFBTSxpQkFBaUI7QUFFdkIsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxnQkFBZ0I7QUFFdEIsTUFBTSx1QkFBdUIsSUFBSTtBQUVqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QkMsR0FDRCxPQUFPLFNBQVMsU0FDZCxHQUFXLEVBQ1gsVUFBb0MsQ0FBQyxDQUFDO0VBRXRDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRztJQUFFLEdBQUcsc0JBQXNCO0lBQUUsR0FBRyxPQUFPO0VBQUM7RUFFL0QsSUFBSSxXQUFXLHFCQUFxQixHQUFHLENBQUM7RUFFeEMsSUFBSSxDQUFDLFVBQVU7SUFDYixXQUFXLElBQUksT0FDYixDQUFDLENBQUMsRUFDQSxPQUFPLElBQUksQ0FBQyxZQUNULElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFDbEMsSUFBSSxDQUFDLEtBQ1QsQ0FBQyxDQUFDLEVBQ0g7SUFHRixxQkFBcUIsR0FBRyxDQUFDLFlBQVk7RUFDdkM7RUFFQSxPQUFPLElBQ0osVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQ3pDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFRLG1CQUFtQixLQUFLLEtBQzlELFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFRLG1CQUFtQixLQUFLO0FBQ25FO0FBRUEsU0FBUyxtQkFBbUIsWUFBb0IsRUFBRSxLQUFhO0VBQzdELE1BQU0sWUFBWSxTQUFTLGNBQWM7RUFFekMsT0FBTyxZQUFZLGlCQUFpQixNQUFNLE9BQU8sYUFBYSxDQUFDO0FBQ2pFIn0=
+// denoCacheMetadata=12027925551671428615,7426900039839167085 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e5530d8e1389ecf7e18adedbc01bac3786c80c74741482719df51a7596f705a1.js b/vendor/gen/https/jsr.io/e5530d8e1389ecf7e18adedbc01bac3786c80c74741482719df51a7596f705a1.js
new file mode 100644
index 0000000..7181f97
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e5530d8e1389ecf7e18adedbc01bac3786c80c74741482719df51a7596f705a1.js
@@ -0,0 +1,165 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts";
+/**
+ * Return a `ParsedPath` object of the `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { parse } from "@std/path/windows/parse";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const parsed = parse("C:\\foo\\bar\\baz.ext");
+ * assertEquals(parsed, {
+ * root: "C:\\",
+ * dir: "C:\\foo\\bar",
+ * base: "baz.ext",
+ * ext: ".ext",
+ * name: "baz",
+ * });
+ * ```
+ *
+ * @param path The path to parse.
+ * @returns The `ParsedPath` object.
+ */ export function parse(path) {
+ assertPath(path);
+ const ret = {
+ root: "",
+ dir: "",
+ base: "",
+ ext: "",
+ name: ""
+ };
+ const len = path.length;
+ if (len === 0) return ret;
+ let rootEnd = 0;
+ let code = path.charCodeAt(0);
+ // Try to match a root
+ if (len > 1) {
+ if (isPathSeparator(code)) {
+ // Possible UNC root
+ rootEnd = 1;
+ if (isPathSeparator(path.charCodeAt(1))) {
+ // Matched double path separator at beginning
+ let j = 2;
+ let last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more path separators
+ for(; j < len; ++j){
+ if (!isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j < len && j !== last) {
+ // Matched!
+ last = j;
+ // Match 1 or more non-path separators
+ for(; j < len; ++j){
+ if (isPathSeparator(path.charCodeAt(j))) break;
+ }
+ if (j === len) {
+ // We matched a UNC root only
+ rootEnd = j;
+ } else if (j !== last) {
+ // We matched a UNC root with leftovers
+ rootEnd = j + 1;
+ }
+ }
+ }
+ }
+ } else if (isWindowsDeviceRoot(code)) {
+ // Possible device root
+ if (path.charCodeAt(1) === CHAR_COLON) {
+ rootEnd = 2;
+ if (len > 2) {
+ if (isPathSeparator(path.charCodeAt(2))) {
+ if (len === 3) {
+ // `path` contains just a drive root, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ ret.base = "\\";
+ return ret;
+ }
+ rootEnd = 3;
+ }
+ } else {
+ // `path` contains just a relative drive root, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ return ret;
+ }
+ }
+ }
+ } else if (isPathSeparator(code)) {
+ // `path` contains just a path separator, exit early to avoid
+ // unnecessary work
+ ret.root = ret.dir = path;
+ ret.base = "\\";
+ return ret;
+ }
+ if (rootEnd > 0) ret.root = path.slice(0, rootEnd);
+ let startDot = -1;
+ let startPart = rootEnd;
+ let end = -1;
+ let matchedSlash = true;
+ let i = path.length - 1;
+ // Track the state of characters (if any) we see before our first dot and
+ // after any path separator we find
+ let preDotState = 0;
+ // Get non-dir info
+ for(; i >= rootEnd; --i){
+ code = path.charCodeAt(i);
+ if (isPathSeparator(code)) {
+ // If we reached a path separator that was not part of a set of path
+ // separators at the end of the string, stop now
+ if (!matchedSlash) {
+ startPart = i + 1;
+ break;
+ }
+ continue;
+ }
+ if (end === -1) {
+ // We saw the first non-path separator, mark this as the end of our
+ // extension
+ matchedSlash = false;
+ end = i + 1;
+ }
+ if (code === CHAR_DOT) {
+ // If this is our first dot, mark it as the start of our extension
+ if (startDot === -1) startDot = i;
+ else if (preDotState !== 1) preDotState = 1;
+ } else if (startDot !== -1) {
+ // We saw a non-dot and non-path separator before our dot, so we should
+ // have a good chance at having a non-empty extension
+ preDotState = -1;
+ }
+ }
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
+ if (end !== -1) {
+ ret.base = ret.name = path.slice(startPart, end);
+ }
+ } else {
+ ret.name = path.slice(startPart, startDot);
+ ret.base = path.slice(startPart, end);
+ ret.ext = path.slice(startDot, end);
+ }
+ // Fallback to '\' in case there is no basename
+ ret.base = ret.base || "\\";
+ // If the directory is the root, use the entire root as the `dir` including
+ // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the
+ // trailing slash (`C:\abc\def` -> `C:\abc`).
+ if (startPart > 0 && startPart !== rootEnd) {
+ ret.dir = path.slice(0, startPart - 1);
+ } else ret.dir = ret.root;
+ return ret;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL3BhcnNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IENIQVJfQ09MT04sIENIQVJfRE9UIH0gZnJvbSBcIi4uL19jb21tb24vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnNlZFBhdGggfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQYXRoU2VwYXJhdG9yLCBpc1dpbmRvd3NEZXZpY2VSb290IH0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBQYXJzZWRQYXRoIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIGEgYFBhcnNlZFBhdGhgIG9iamVjdCBvZiB0aGUgYHBhdGhgLlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvcGFyc2VcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhcnNlZCA9IHBhcnNlKFwiQzpcXFxcZm9vXFxcXGJhclxcXFxiYXouZXh0XCIpO1xuICogYXNzZXJ0RXF1YWxzKHBhcnNlZCwge1xuICogICByb290OiBcIkM6XFxcXFwiLFxuICogICBkaXI6IFwiQzpcXFxcZm9vXFxcXGJhclwiLFxuICogICBiYXNlOiBcImJhei5leHRcIixcbiAqICAgZXh0OiBcIi5leHRcIixcbiAqICAgbmFtZTogXCJiYXpcIixcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gcGFyc2UuXG4gKiBAcmV0dXJucyBUaGUgYFBhcnNlZFBhdGhgIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHJldDogUGFyc2VkUGF0aCA9IHsgcm9vdDogXCJcIiwgZGlyOiBcIlwiLCBiYXNlOiBcIlwiLCBleHQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcblxuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIHJldDtcblxuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gMTtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID09PSBsZW4pIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcblxuICAgICAgICAgICAgICByb290RW5kID0gajtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICByb290RW5kID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMykge1xuICAgICAgICAgICAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIGRyaXZlIHJvb3QsIGV4aXQgZWFybHkgdG8gYXZvaWRcbiAgICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgICAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgICAgICByZXQuYmFzZSA9IFwiXFxcXFwiO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgcmVsYXRpdmUgZHJpdmUgcm9vdCwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgIHJldC5iYXNlID0gXCJcXFxcXCI7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGlmIChyb290RW5kID4gMCkgcmV0LnJvb3QgPSBwYXRoLnNsaWNlKDAsIHJvb3RFbmQpO1xuXG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gcm9vdEVuZDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7XG5cbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuXG4gIC8vIEdldCBub24tZGlyIGluZm9cbiAgZm9yICg7IGkgPj0gcm9vdEVuZDsgLS1pKSB7XG4gICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7XG4gICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICByZXQuZXh0ID0gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvICdcXCcgaW4gY2FzZSB0aGVyZSBpcyBubyBiYXNlbmFtZVxuICByZXQuYmFzZSA9IHJldC5iYXNlIHx8IFwiXFxcXFwiO1xuXG4gIC8vIElmIHRoZSBkaXJlY3RvcnkgaXMgdGhlIHJvb3QsIHVzZSB0aGUgZW50aXJlIHJvb3QgYXMgdGhlIGBkaXJgIGluY2x1ZGluZ1xuICAvLyB0aGUgdHJhaWxpbmcgc2xhc2ggaWYgYW55IChgQzpcXGFiY2AgLT4gYEM6XFxgKS4gT3RoZXJ3aXNlLCBzdHJpcCBvdXQgdGhlXG4gIC8vIHRyYWlsaW5nIHNsYXNoIChgQzpcXGFiY1xcZGVmYCAtPiBgQzpcXGFiY2ApLlxuICBpZiAoc3RhcnRQYXJ0ID4gMCAmJiBzdGFydFBhcnQgIT09IHJvb3RFbmQpIHtcbiAgICByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtcbiAgfSBlbHNlIHJldC5kaXIgPSByZXQucm9vdDtcblxuICByZXR1cm4gcmV0O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxVQUFVLEVBQUUsUUFBUSxRQUFRLDBCQUEwQjtBQUUvRCxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxlQUFlLEVBQUUsbUJBQW1CLFFBQVEsYUFBYTtBQUlsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FDRCxPQUFPLFNBQVMsTUFBTSxJQUFZO0VBQ2hDLFdBQVc7RUFFWCxNQUFNLE1BQWtCO0lBQUUsTUFBTTtJQUFJLEtBQUs7SUFBSSxNQUFNO0lBQUksS0FBSztJQUFJLE1BQU07RUFBRztFQUV6RSxNQUFNLE1BQU0sS0FBSyxNQUFNO0VBQ3ZCLElBQUksUUFBUSxHQUFHLE9BQU87RUFFdEIsSUFBSSxVQUFVO0VBQ2QsSUFBSSxPQUFPLEtBQUssVUFBVSxDQUFDO0VBRTNCLHNCQUFzQjtFQUN0QixJQUFJLE1BQU0sR0FBRztJQUNYLElBQUksZ0JBQWdCLE9BQU87TUFDekIsb0JBQW9CO01BRXBCLFVBQVU7TUFDVixJQUFJLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZDLDZDQUE2QztRQUM3QyxJQUFJLElBQUk7UUFDUixJQUFJLE9BQU87UUFDWCxzQ0FBc0M7UUFDdEMsTUFBTyxJQUFJLEtBQUssRUFBRSxFQUFHO1VBQ25CLElBQUksZ0JBQWdCLEtBQUssVUFBVSxDQUFDLEtBQUs7UUFD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
+// denoCacheMetadata=8078943296190565738,7200396583797842913 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e5d326d0e3fc3aabea837af914bc13c1d6ee269e558a56cdb45afb52ab3e139a.js b/vendor/gen/https/jsr.io/e5d326d0e3fc3aabea837af914bc13c1d6ee269e558a56cdb45afb52ab3e139a.js
new file mode 100644
index 0000000..b4f8773
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e5d326d0e3fc3aabea837af914bc13c1d6ee269e558a56cdb45afb52ab3e139a.js
@@ -0,0 +1,35 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { basename as posixBasename } from "./posix/basename.ts";
+import { basename as windowsBasename } from "./windows/basename.ts";
+/**
+ * Return the last portion of a path.
+ *
+ * The trailing directory separators are ignored, and optional suffix is
+ * removed.
+ *
+ * @example Usage
+ * ```ts
+ * import { basename } from "@std/path/basename";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(basename("C:\\user\\Documents\\image.png"), "image.png");
+ * } else {
+ * assertEquals(basename("/home/user/Documents/image.png"), "image.png");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `basename` from `@std/path/unstable-basename`.
+ *
+ * @param path Path to extract the name from.
+ * @param suffix Suffix to remove from extracted name.
+ *
+ * @returns The basename of the path.
+ */ export function basename(path, suffix = "") {
+ return isWindows ? windowsBasename(path, suffix) : posixBasename(path, suffix);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9iYXNlbmFtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi9fb3MudHNcIjtcbmltcG9ydCB7IGJhc2VuYW1lIGFzIHBvc2l4QmFzZW5hbWUgfSBmcm9tIFwiLi9wb3NpeC9iYXNlbmFtZS50c1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUgYXMgd2luZG93c0Jhc2VuYW1lIH0gZnJvbSBcIi4vd2luZG93cy9iYXNlbmFtZS50c1wiO1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBwb3J0aW9uIG9mIGEgcGF0aC5cbiAqXG4gKiBUaGUgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXJlIGlnbm9yZWQsIGFuZCBvcHRpb25hbCBzdWZmaXggaXNcbiAqIHJlbW92ZWQuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJAc3RkL3BhdGgvYmFzZW5hbWVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoYmFzZW5hbWUoXCJDOlxcXFx1c2VyXFxcXERvY3VtZW50c1xcXFxpbWFnZS5wbmdcIiksIFwiaW1hZ2UucG5nXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGJhc2VuYW1lKFwiL2hvbWUvdXNlci9Eb2N1bWVudHMvaW1hZ2UucG5nXCIpLCBcImltYWdlLnBuZ1wiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIE5vdGU6IElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGZpbGUgVVJMcyxcbiAqIHVzZSB0aGUgbmV3IHZlcnNpb24gb2YgYGJhc2VuYW1lYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtYmFzZW5hbWVgLlxuICpcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gZXh0cmFjdCB0aGUgbmFtZSBmcm9tLlxuICogQHBhcmFtIHN1ZmZpeCBTdWZmaXggdG8gcmVtb3ZlIGZyb20gZXh0cmFjdGVkIG5hbWUuXG4gKlxuICogQHJldHVybnMgVGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBzdWZmaXggPSBcIlwiKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c0Jhc2VuYW1lKHBhdGgsIHN1ZmZpeClcbiAgICA6IHBvc2l4QmFzZW5hbWUocGF0aCwgc3VmZml4KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxZQUFZLGFBQWEsUUFBUSxzQkFBc0I7QUFDaEUsU0FBUyxZQUFZLGVBQWUsUUFBUSx3QkFBd0I7QUFFcEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QkMsR0FDRCxPQUFPLFNBQVMsU0FBUyxJQUFZLEVBQUUsU0FBUyxFQUFFO0VBQ2hELE9BQU8sWUFDSCxnQkFBZ0IsTUFBTSxVQUN0QixjQUFjLE1BQU07QUFDMUIifQ==
+// denoCacheMetadata=14169661831040093700,12893483443537974914 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e5d3d4e4308057b025750f79dd17e2d4a272067a0d1086a81f574fbbb347a835.js b/vendor/gen/https/jsr.io/e5d3d4e4308057b025750f79dd17e2d4a272067a0d1086a81f574fbbb347a835.js
new file mode 100644
index 0000000..72e53a9
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e5d3d4e4308057b025750f79dd17e2d4a272067a0d1086a81f574fbbb347a835.js
@@ -0,0 +1,58 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported mostly from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+/**
+ * Utilities for working with OS-specific file paths.
+ *
+ * Functions from this module will automatically switch to support the path style
+ * of the current OS, either `windows` for Microsoft Windows, or `posix` for
+ * every other operating system, eg. Linux, MacOS, BSD etc.
+ *
+ * To use functions for a specific path style regardless of the current OS
+ * import the modules from the platform sub directory instead.
+ *
+ * Example, for POSIX:
+ *
+ * ```ts
+ * import { fromFileUrl } from "@std/path/posix/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "/home/foo");
+ * ```
+ *
+ * Or, for Windows:
+ *
+ * ```ts
+ * import { fromFileUrl } from "@std/path/windows/from-file-url";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
+ * ```
+ *
+ * Functions for working with URLs can be found in
+ * {@link ./doc/posix/~ | @std/path/posix}.
+ *
+ * @module
+ */ export * from "./basename.ts";
+export * from "./constants.ts";
+export * from "./dirname.ts";
+export * from "./extname.ts";
+export * from "./format.ts";
+export * from "./from_file_url.ts";
+export * from "./is_absolute.ts";
+export * from "./join.ts";
+export * from "./normalize.ts";
+export * from "./parse.ts";
+export * from "./relative.ts";
+export * from "./resolve.ts";
+export * from "./to_file_url.ts";
+export * from "./to_namespaced_path.ts";
+export * from "./common.ts";
+export * from "./types.ts";
+export * from "./glob_to_regexp.ts";
+export * from "./is_glob.ts";
+export * from "./join_globs.ts";
+export * from "./normalize_glob.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9tb2QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBtb3N0bHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogVXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggT1Mtc3BlY2lmaWMgZmlsZSBwYXRocy5cbiAqXG4gKiBGdW5jdGlvbnMgZnJvbSB0aGlzIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIHN1cHBvcnQgdGhlIHBhdGggc3R5bGVcbiAqIG9mIHRoZSBjdXJyZW50IE9TLCBlaXRoZXIgYHdpbmRvd3NgIGZvciBNaWNyb3NvZnQgV2luZG93cywgb3IgYHBvc2l4YCBmb3JcbiAqIGV2ZXJ5IG90aGVyIG9wZXJhdGluZyBzeXN0ZW0sIGVnLiBMaW51eCwgTWFjT1MsIEJTRCBldGMuXG4gKlxuICogVG8gdXNlIGZ1bmN0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYXRoIHN0eWxlIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgT1NcbiAqIGltcG9ydCB0aGUgbW9kdWxlcyBmcm9tIHRoZSBwbGF0Zm9ybSBzdWIgZGlyZWN0b3J5IGluc3RlYWQuXG4gKlxuICogRXhhbXBsZSwgZm9yIFBPU0lYOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCJAc3RkL3BhdGgvcG9zaXgvZnJvbS1maWxlLXVybFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKSwgXCIvaG9tZS9mb29cIik7XG4gKiBgYGBcbiAqXG4gKiBPciwgZm9yIFdpbmRvd3M6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2Zyb20tZmlsZS11cmxcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGFzc2VydEVxdWFscyhmcm9tRmlsZVVybChcImZpbGU6Ly8vaG9tZS9mb29cIiksIFwiXFxcXGhvbWVcXFxcZm9vXCIpO1xuICogYGBgXG4gKlxuICogRnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggVVJMcyBjYW4gYmUgZm91bmQgaW5cbiAqIHtAbGluayAuL2RvYy9wb3NpeC9+IHwgQHN0ZC9wYXRoL3Bvc2l4fS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL2Jhc2VuYW1lLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rpcm5hbWUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4dG5hbWUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnJvbV9maWxlX3VybC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNfYWJzb2x1dGUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2pvaW4udHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25vcm1hbGl6ZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlbGF0aXZlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvbHZlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90b19maWxlX3VybC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdG9fbmFtZXNwYWNlZF9wYXRoLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21tb24udHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nbG9iX3RvX3JlZ2V4cC50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNfZ2xvYi50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vam9pbl9nbG9icy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbm9ybWFsaXplX2dsb2IudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUsaURBQWlEO0FBQ2pELG9FQUFvRTtBQUNwRSxxQ0FBcUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0NDLEdBQ0QsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxlQUFlO0FBQzdCLGNBQWMsZUFBZTtBQUM3QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxZQUFZO0FBQzFCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsYUFBYTtBQUMzQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWU7QUFDN0IsY0FBYyxtQkFBbUI7QUFDakMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsYUFBYTtBQUMzQixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLGVBQWU7QUFDN0IsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxzQkFBc0IifQ==
+// denoCacheMetadata=7353926715705670701,17175681778028839612 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e653f5d5a31bad09961e65fa9dea0ac82103c43f2ecf35967dcc67a4c354491d.js b/vendor/gen/https/jsr.io/e653f5d5a31bad09961e65fa9dea0ac82103c43f2ecf35967dcc67a4c354491d.js
new file mode 100644
index 0000000..ba113b6
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e653f5d5a31bad09961e65fa9dea0ac82103c43f2ecf35967dcc67a4c354491d.js
@@ -0,0 +1,12 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+export function extractFrontMatter(input, extractRegExp) {
+ const groups = extractRegExp.exec(input)?.groups;
+ if (!groups) throw new TypeError("Unexpected end of input");
+ const { frontMatter = "", body = "" } = groups;
+ return {
+ frontMatter,
+ body
+ };
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnJvbnQtbWF0dGVyLzEuMC45L19zaGFyZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGcm9udE1hdHRlcihcbiAgaW5wdXQ6IHN0cmluZyxcbiAgZXh0cmFjdFJlZ0V4cDogUmVnRXhwLFxuKTogeyBmcm9udE1hdHRlcjogc3RyaW5nOyBib2R5OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGdyb3VwcyA9IGV4dHJhY3RSZWdFeHAuZXhlYyhpbnB1dCk/Lmdyb3VwcztcbiAgaWYgKCFncm91cHMpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiKTtcbiAgY29uc3QgeyBmcm9udE1hdHRlciA9IFwiXCIsIGJvZHkgPSBcIlwiIH0gPSBncm91cHM7XG4gIHJldHVybiB7IGZyb250TWF0dGVyLCBib2R5IH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBRXJELE9BQU8sU0FBUyxtQkFDZCxLQUFhLEVBQ2IsYUFBcUI7RUFFckIsTUFBTSxTQUFTLGNBQWMsSUFBSSxDQUFDLFFBQVE7RUFDMUMsSUFBSSxDQUFDLFFBQVEsTUFBTSxJQUFJLFVBQVU7RUFDakMsTUFBTSxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUc7RUFDeEMsT0FBTztJQUFFO0lBQWE7RUFBSztBQUM3QiJ9
+// denoCacheMetadata=8858933314568297815,14589197361695567858 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/e78d1e56f9ecfb52c371cb5d4386f81f01665c44834480369825f802c56e9ee1.js b/vendor/gen/https/jsr.io/e78d1e56f9ecfb52c371cb5d4386f81f01665c44834480369825f802c56e9ee1.js
new file mode 100644
index 0000000..ad0d78e
--- /dev/null
+++ b/vendor/gen/https/jsr.io/e78d1e56f9ecfb52c371cb5d4386f81f01665c44834480369825f802c56e9ee1.js
@@ -0,0 +1,53 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { normalizeString } from "../_common/normalize_string.ts";
+import { assertPath } from "../_common/assert_path.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+/**
+ * Resolves path segments into a `path`.
+ *
+ * @example Usage
+ * ```ts
+ * import { resolve } from "@std/path/posix/resolve";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const path = resolve("/foo", "bar", "baz/asdf", "quux", "..");
+ * assertEquals(path, "/foo/bar/baz/asdf");
+ * ```
+ *
+ * @param pathSegments The path segments to resolve.
+ * @returns The resolved path.
+ */ export function resolve(...pathSegments) {
+ let resolvedPath = "";
+ let resolvedAbsolute = false;
+ for(let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--){
+ let path;
+ if (i >= 0) path = pathSegments[i];
+ else {
+ // deno-lint-ignore no-explicit-any
+ const { Deno } = globalThis;
+ if (typeof Deno?.cwd !== "function") {
+ throw new TypeError("Resolved a relative path without a current working directory (CWD)");
+ }
+ path = Deno.cwd();
+ }
+ assertPath(path);
+ // Skip empty entries
+ if (path.length === 0) {
+ continue;
+ }
+ resolvedPath = `${path}/${resolvedPath}`;
+ resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ }
+ // At this point the path should be resolved to a full absolute path, but
+ // handle relative paths to be safe (might happen when Deno.cwd() fails)
+ // Normalize the path
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
+ if (resolvedAbsolute) {
+ if (resolvedPath.length > 0) return `/${resolvedPath}`;
+ else return "/";
+ } else if (resolvedPath.length > 0) return resolvedPath;
+ else return ".";
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9yZXNvbHZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gXCIuLi9fY29tbW9uL25vcm1hbGl6ZV9zdHJpbmcudHNcIjtcbmltcG9ydCB7IGFzc2VydFBhdGggfSBmcm9tIFwiLi4vX2NvbW1vbi9hc3NlcnRfcGF0aC50c1wiO1xuaW1wb3J0IHsgaXNQb3NpeFBhdGhTZXBhcmF0b3IgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggc2VnbWVudHMgaW50byBhIGBwYXRoYC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiQHN0ZC9wYXRoL3Bvc2l4L3Jlc29sdmVcIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGNvbnN0IHBhdGggPSByZXNvbHZlKFwiL2Zvb1wiLCBcImJhclwiLCBcImJhei9hc2RmXCIsIFwicXV1eFwiLCBcIi4uXCIpO1xuICogYXNzZXJ0RXF1YWxzKHBhdGgsIFwiL2Zvby9iYXIvYmF6L2FzZGZcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZFBhdGggPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgbGV0IHBhdGg6IHN0cmluZztcblxuICAgIGlmIChpID49IDApIHBhdGggPSBwYXRoU2VnbWVudHNbaV0hO1xuICAgIGVsc2Uge1xuICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gICAgICBpZiAodHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGVudHJpZXNcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzUG9zaXhQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgwKSk7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBEZW5vLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcoXG4gICAgcmVzb2x2ZWRQYXRoLFxuICAgICFyZXNvbHZlZEFic29sdXRlLFxuICAgIFwiL1wiLFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIGlmIChyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSByZXR1cm4gYC8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIGVsc2UgcmV0dXJuIFwiL1wiO1xuICB9IGVsc2UgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZWRQYXRoO1xuICBlbHNlIHJldHVybiBcIi5cIjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDLFNBQVMsZUFBZSxRQUFRLGlDQUFpQztBQUNqRSxTQUFTLFVBQVUsUUFBUSw0QkFBNEI7QUFDdkQsU0FBUyxvQkFBb0IsUUFBUSxhQUFhO0FBRWxEOzs7Ozs7Ozs7Ozs7OztDQWNDLEdBQ0QsT0FBTyxTQUFTLFFBQVEsR0FBRyxZQUFzQjtFQUMvQyxJQUFJLGVBQWU7RUFDbkIsSUFBSSxtQkFBbUI7RUFFdkIsSUFBSyxJQUFJLElBQUksYUFBYSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixJQUFLO0lBQ3ZFLElBQUk7SUFFSixJQUFJLEtBQUssR0FBRyxPQUFPLFlBQVksQ0FBQyxFQUFFO1NBQzdCO01BQ0gsbUNBQW1DO01BQ25DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRztNQUNqQixJQUFJLE9BQU8sTUFBTSxRQUFRLFlBQVk7UUFDbkMsTUFBTSxJQUFJLFVBQ1I7TUFFSjtNQUNBLE9BQU8sS0FBSyxHQUFHO0lBQ2pCO0lBRUEsV0FBVztJQUVYLHFCQUFxQjtJQUNyQixJQUFJLEtBQUssTUFBTSxLQUFLLEdBQUc7TUFDckI7SUFDRjtJQUVBLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRSxjQUFjO0lBQ3hDLG1CQUFtQixxQkFBcUIsS0FBSyxVQUFVLENBQUM7RUFDMUQ7RUFFQSx5RUFBeUU7RUFDekUsd0VBQXdFO0VBRXhFLHFCQUFxQjtFQUNyQixlQUFlLGdCQUNiLGNBQ0EsQ0FBQyxrQkFDRCxLQUNBO0VBR0YsSUFBSSxrQkFBa0I7SUFDcEIsSUFBSSxhQUFhLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsY0FBYztTQUNqRCxPQUFPO0VBQ2QsT0FBTyxJQUFJLGFBQWEsTUFBTSxHQUFHLEdBQUcsT0FBTztPQUN0QyxPQUFPO0FBQ2QifQ==
+// denoCacheMetadata=12065130349345655075,16192651438224717247 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/eacfc9300d4ef48ffa8b03a1a3ed74761dbb5a1f726c2ed6384306dced42cf3b.js b/vendor/gen/https/jsr.io/eacfc9300d4ef48ffa8b03a1a3ed74761dbb5a1f726c2ed6384306dced42cf3b.js
new file mode 100644
index 0000000..f172d99
--- /dev/null
+++ b/vendor/gen/https/jsr.io/eacfc9300d4ef48ffa8b03a1a3ed74761dbb5a1f726c2ed6384306dced42cf3b.js
@@ -0,0 +1,11356 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+export default {
+ "application/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "application/3gpdash-qoe-report+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/3gpp-ims+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/3gpphal+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/3gpphalforms+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/a2l": {
+ "source": "iana"
+ },
+ "application/ace+cbor": {
+ "source": "iana"
+ },
+ "application/ace+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ace-groupcomm+cbor": {
+ "source": "iana"
+ },
+ "application/activemessage": {
+ "source": "iana"
+ },
+ "application/activity+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/aif+cbor": {
+ "source": "iana"
+ },
+ "application/aif+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-cdni+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-cdnifilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-costmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-costmapfilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-directory+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointcost+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointcostparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointprop+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointpropparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-error+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-networkmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-networkmapfilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-propmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-propmapparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-tips+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-tipsparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-updatestreamcontrol+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-updatestreamparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/aml": {
+ "source": "iana"
+ },
+ "application/andrew-inset": {
+ "source": "iana",
+ "extensions": [
+ "ez"
+ ]
+ },
+ "application/appinstaller": {
+ "compressible": false,
+ "extensions": [
+ "appinstaller"
+ ]
+ },
+ "application/applefile": {
+ "source": "iana"
+ },
+ "application/applixware": {
+ "source": "apache",
+ "extensions": [
+ "aw"
+ ]
+ },
+ "application/appx": {
+ "compressible": false,
+ "extensions": [
+ "appx"
+ ]
+ },
+ "application/appxbundle": {
+ "compressible": false,
+ "extensions": [
+ "appxbundle"
+ ]
+ },
+ "application/at+jwt": {
+ "source": "iana"
+ },
+ "application/atf": {
+ "source": "iana"
+ },
+ "application/atfx": {
+ "source": "iana"
+ },
+ "application/atom+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "atom"
+ ]
+ },
+ "application/atomcat+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "atomcat"
+ ]
+ },
+ "application/atomdeleted+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "atomdeleted"
+ ]
+ },
+ "application/atomicmail": {
+ "source": "iana"
+ },
+ "application/atomsvc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "atomsvc"
+ ]
+ },
+ "application/atsc-dwd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "dwd"
+ ]
+ },
+ "application/atsc-dynamic-event-message": {
+ "source": "iana"
+ },
+ "application/atsc-held+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "held"
+ ]
+ },
+ "application/atsc-rdt+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/atsc-rsat+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rsat"
+ ]
+ },
+ "application/atxml": {
+ "source": "iana"
+ },
+ "application/auth-policy+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/automationml-aml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "aml"
+ ]
+ },
+ "application/automationml-amlx+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "amlx"
+ ]
+ },
+ "application/bacnet-xdd+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/batch-smtp": {
+ "source": "iana"
+ },
+ "application/bdoc": {
+ "compressible": false,
+ "extensions": [
+ "bdoc"
+ ]
+ },
+ "application/beep+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/bufr": {
+ "source": "iana"
+ },
+ "application/c2pa": {
+ "source": "iana"
+ },
+ "application/calendar+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/calendar+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xcs"
+ ]
+ },
+ "application/call-completion": {
+ "source": "iana"
+ },
+ "application/cals-1840": {
+ "source": "iana"
+ },
+ "application/captive+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cbor": {
+ "source": "iana"
+ },
+ "application/cbor-seq": {
+ "source": "iana"
+ },
+ "application/cccex": {
+ "source": "iana"
+ },
+ "application/ccmp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ccxml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ccxml"
+ ]
+ },
+ "application/cda+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/cdfx+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "cdfx"
+ ]
+ },
+ "application/cdmi-capability": {
+ "source": "iana",
+ "extensions": [
+ "cdmia"
+ ]
+ },
+ "application/cdmi-container": {
+ "source": "iana",
+ "extensions": [
+ "cdmic"
+ ]
+ },
+ "application/cdmi-domain": {
+ "source": "iana",
+ "extensions": [
+ "cdmid"
+ ]
+ },
+ "application/cdmi-object": {
+ "source": "iana",
+ "extensions": [
+ "cdmio"
+ ]
+ },
+ "application/cdmi-queue": {
+ "source": "iana",
+ "extensions": [
+ "cdmiq"
+ ]
+ },
+ "application/cdni": {
+ "source": "iana"
+ },
+ "application/cea": {
+ "source": "iana"
+ },
+ "application/cea-2018+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cellml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cfw": {
+ "source": "iana"
+ },
+ "application/cid-edhoc+cbor-seq": {
+ "source": "iana"
+ },
+ "application/city+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/clr": {
+ "source": "iana"
+ },
+ "application/clue+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/clue_info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cms": {
+ "source": "iana"
+ },
+ "application/cnrp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/coap-group+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/coap-payload": {
+ "source": "iana"
+ },
+ "application/commonground": {
+ "source": "iana"
+ },
+ "application/concise-problem-details+cbor": {
+ "source": "iana"
+ },
+ "application/conference-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cose": {
+ "source": "iana"
+ },
+ "application/cose-key": {
+ "source": "iana"
+ },
+ "application/cose-key-set": {
+ "source": "iana"
+ },
+ "application/cose-x509": {
+ "source": "iana"
+ },
+ "application/cpl+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "cpl"
+ ]
+ },
+ "application/csrattrs": {
+ "source": "iana"
+ },
+ "application/csta+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cstadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/csvm+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cu-seeme": {
+ "source": "apache",
+ "extensions": [
+ "cu"
+ ]
+ },
+ "application/cwl": {
+ "source": "iana",
+ "extensions": [
+ "cwl"
+ ]
+ },
+ "application/cwl+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cwl+yaml": {
+ "source": "iana"
+ },
+ "application/cwt": {
+ "source": "iana"
+ },
+ "application/cybercash": {
+ "source": "iana"
+ },
+ "application/dart": {
+ "compressible": true
+ },
+ "application/dash+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mpd"
+ ]
+ },
+ "application/dash-patch+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mpp"
+ ]
+ },
+ "application/dashdelta": {
+ "source": "iana"
+ },
+ "application/davmount+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "davmount"
+ ]
+ },
+ "application/dca-rft": {
+ "source": "iana"
+ },
+ "application/dcd": {
+ "source": "iana"
+ },
+ "application/dec-dx": {
+ "source": "iana"
+ },
+ "application/dialog-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dicom": {
+ "source": "iana"
+ },
+ "application/dicom+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dicom+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dii": {
+ "source": "iana"
+ },
+ "application/dit": {
+ "source": "iana"
+ },
+ "application/dns": {
+ "source": "iana"
+ },
+ "application/dns+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dns-message": {
+ "source": "iana"
+ },
+ "application/docbook+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "dbk"
+ ]
+ },
+ "application/dots+cbor": {
+ "source": "iana"
+ },
+ "application/dpop+jwt": {
+ "source": "iana"
+ },
+ "application/dskpp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dssc+der": {
+ "source": "iana",
+ "extensions": [
+ "dssc"
+ ]
+ },
+ "application/dssc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xdssc"
+ ]
+ },
+ "application/dvcs": {
+ "source": "iana"
+ },
+ "application/ecmascript": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "ecma"
+ ]
+ },
+ "application/edhoc+cbor-seq": {
+ "source": "iana"
+ },
+ "application/edi-consent": {
+ "source": "iana"
+ },
+ "application/edi-x12": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/edifact": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/efi": {
+ "source": "iana"
+ },
+ "application/elm+json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/elm+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.cap+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/emergencycalldata.comment+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.control+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.deviceinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.ecall.msd": {
+ "source": "iana"
+ },
+ "application/emergencycalldata.legacyesn+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.providerinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.serviceinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.subscriberinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.veds+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emma+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "emma"
+ ]
+ },
+ "application/emotionml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "emotionml"
+ ]
+ },
+ "application/encaprtp": {
+ "source": "iana"
+ },
+ "application/epp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/epub+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "epub"
+ ]
+ },
+ "application/eshop": {
+ "source": "iana"
+ },
+ "application/exi": {
+ "source": "iana",
+ "extensions": [
+ "exi"
+ ]
+ },
+ "application/expect-ct-report+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/express": {
+ "source": "iana",
+ "extensions": [
+ "exp"
+ ]
+ },
+ "application/fastinfoset": {
+ "source": "iana"
+ },
+ "application/fastsoap": {
+ "source": "iana"
+ },
+ "application/fdf": {
+ "source": "iana",
+ "extensions": [
+ "fdf"
+ ]
+ },
+ "application/fdt+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "fdt"
+ ]
+ },
+ "application/fhir+json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/fhir+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/fido.trusted-apps+json": {
+ "compressible": true
+ },
+ "application/fits": {
+ "source": "iana"
+ },
+ "application/flexfec": {
+ "source": "iana"
+ },
+ "application/font-sfnt": {
+ "source": "iana"
+ },
+ "application/font-tdpfr": {
+ "source": "iana",
+ "extensions": [
+ "pfr"
+ ]
+ },
+ "application/font-woff": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/framework-attributes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/geo+json": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "geojson"
+ ]
+ },
+ "application/geo+json-seq": {
+ "source": "iana"
+ },
+ "application/geopackage+sqlite3": {
+ "source": "iana"
+ },
+ "application/geoxacml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/geoxacml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/gltf-buffer": {
+ "source": "iana"
+ },
+ "application/gml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "gml"
+ ]
+ },
+ "application/gnap-binding-jws": {
+ "source": "iana"
+ },
+ "application/gnap-binding-jwsd": {
+ "source": "iana"
+ },
+ "application/gnap-binding-rotation-jws": {
+ "source": "iana"
+ },
+ "application/gnap-binding-rotation-jwsd": {
+ "source": "iana"
+ },
+ "application/gpx+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "gpx"
+ ]
+ },
+ "application/grib": {
+ "source": "iana"
+ },
+ "application/gxf": {
+ "source": "apache",
+ "extensions": [
+ "gxf"
+ ]
+ },
+ "application/gzip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "gz"
+ ]
+ },
+ "application/h224": {
+ "source": "iana"
+ },
+ "application/held+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/hjson": {
+ "extensions": [
+ "hjson"
+ ]
+ },
+ "application/hl7v2+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/http": {
+ "source": "iana"
+ },
+ "application/hyperstudio": {
+ "source": "iana",
+ "extensions": [
+ "stk"
+ ]
+ },
+ "application/ibe-key-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ibe-pkg-reply+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ibe-pp-data": {
+ "source": "iana"
+ },
+ "application/iges": {
+ "source": "iana"
+ },
+ "application/im-iscomposing+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/index": {
+ "source": "iana"
+ },
+ "application/index.cmd": {
+ "source": "iana"
+ },
+ "application/index.obj": {
+ "source": "iana"
+ },
+ "application/index.response": {
+ "source": "iana"
+ },
+ "application/index.vnd": {
+ "source": "iana"
+ },
+ "application/inkml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ink",
+ "inkml"
+ ]
+ },
+ "application/iotp": {
+ "source": "iana"
+ },
+ "application/ipfix": {
+ "source": "iana",
+ "extensions": [
+ "ipfix"
+ ]
+ },
+ "application/ipp": {
+ "source": "iana"
+ },
+ "application/isup": {
+ "source": "iana"
+ },
+ "application/its+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "its"
+ ]
+ },
+ "application/java-archive": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "jar",
+ "war",
+ "ear"
+ ]
+ },
+ "application/java-serialized-object": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "ser"
+ ]
+ },
+ "application/java-vm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "class"
+ ]
+ },
+ "application/javascript": {
+ "source": "apache",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "js"
+ ]
+ },
+ "application/jf2feed+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jose": {
+ "source": "iana"
+ },
+ "application/jose+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jrd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jscalendar+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jscontact+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "json",
+ "map"
+ ]
+ },
+ "application/json-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/json-seq": {
+ "source": "iana"
+ },
+ "application/json5": {
+ "extensions": [
+ "json5"
+ ]
+ },
+ "application/jsonml+json": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "jsonml"
+ ]
+ },
+ "application/jsonpath": {
+ "source": "iana"
+ },
+ "application/jwk+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jwk-set+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jwt": {
+ "source": "iana"
+ },
+ "application/kpml-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/kpml-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ld+json": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "jsonld"
+ ]
+ },
+ "application/lgr+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "lgr"
+ ]
+ },
+ "application/link-format": {
+ "source": "iana"
+ },
+ "application/linkset": {
+ "source": "iana"
+ },
+ "application/linkset+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/load-control+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/logout+jwt": {
+ "source": "iana"
+ },
+ "application/lost+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "lostxml"
+ ]
+ },
+ "application/lostsync+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/lpf+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/lxf": {
+ "source": "iana"
+ },
+ "application/mac-binhex40": {
+ "source": "iana",
+ "extensions": [
+ "hqx"
+ ]
+ },
+ "application/mac-compactpro": {
+ "source": "apache",
+ "extensions": [
+ "cpt"
+ ]
+ },
+ "application/macwriteii": {
+ "source": "iana"
+ },
+ "application/mads+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mads"
+ ]
+ },
+ "application/manifest+json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "webmanifest"
+ ]
+ },
+ "application/marc": {
+ "source": "iana",
+ "extensions": [
+ "mrc"
+ ]
+ },
+ "application/marcxml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mrcx"
+ ]
+ },
+ "application/mathematica": {
+ "source": "iana",
+ "extensions": [
+ "ma",
+ "nb",
+ "mb"
+ ]
+ },
+ "application/mathml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mathml"
+ ]
+ },
+ "application/mathml-content+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mathml-presentation+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-associated-procedure-description+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-deregister+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-envelope+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-msk+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-msk-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-protection-description+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-reception-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-register+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-register-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-schedule+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-user-service-description+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbox": {
+ "source": "iana",
+ "extensions": [
+ "mbox"
+ ]
+ },
+ "application/media-policy-dataset+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mpf"
+ ]
+ },
+ "application/media_control+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mediaservercontrol+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mscml"
+ ]
+ },
+ "application/merge-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/metalink+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "metalink"
+ ]
+ },
+ "application/metalink4+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "meta4"
+ ]
+ },
+ "application/mets+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mets"
+ ]
+ },
+ "application/mf4": {
+ "source": "iana"
+ },
+ "application/mikey": {
+ "source": "iana"
+ },
+ "application/mipc": {
+ "source": "iana"
+ },
+ "application/missing-blocks+cbor-seq": {
+ "source": "iana"
+ },
+ "application/mmt-aei+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "maei"
+ ]
+ },
+ "application/mmt-usd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "musd"
+ ]
+ },
+ "application/mods+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mods"
+ ]
+ },
+ "application/moss-keys": {
+ "source": "iana"
+ },
+ "application/moss-signature": {
+ "source": "iana"
+ },
+ "application/mosskey-data": {
+ "source": "iana"
+ },
+ "application/mosskey-request": {
+ "source": "iana"
+ },
+ "application/mp21": {
+ "source": "iana",
+ "extensions": [
+ "m21",
+ "mp21"
+ ]
+ },
+ "application/mp4": {
+ "source": "iana",
+ "extensions": [
+ "mp4",
+ "mpg4",
+ "mp4s",
+ "m4p"
+ ]
+ },
+ "application/mpeg4-generic": {
+ "source": "iana"
+ },
+ "application/mpeg4-iod": {
+ "source": "iana"
+ },
+ "application/mpeg4-iod-xmt": {
+ "source": "iana"
+ },
+ "application/mrb-consumer+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mrb-publish+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/msc-ivr+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/msc-mixer+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/msix": {
+ "compressible": false,
+ "extensions": [
+ "msix"
+ ]
+ },
+ "application/msixbundle": {
+ "compressible": false,
+ "extensions": [
+ "msixbundle"
+ ]
+ },
+ "application/msword": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "doc",
+ "dot"
+ ]
+ },
+ "application/mud+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/multipart-core": {
+ "source": "iana"
+ },
+ "application/mxf": {
+ "source": "iana",
+ "extensions": [
+ "mxf"
+ ]
+ },
+ "application/n-quads": {
+ "source": "iana",
+ "extensions": [
+ "nq"
+ ]
+ },
+ "application/n-triples": {
+ "source": "iana",
+ "extensions": [
+ "nt"
+ ]
+ },
+ "application/nasdata": {
+ "source": "iana"
+ },
+ "application/news-checkgroups": {
+ "source": "iana",
+ "charset": "US-ASCII"
+ },
+ "application/news-groupinfo": {
+ "source": "iana",
+ "charset": "US-ASCII"
+ },
+ "application/news-transmission": {
+ "source": "iana"
+ },
+ "application/nlsml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/node": {
+ "source": "iana",
+ "extensions": [
+ "cjs"
+ ]
+ },
+ "application/nss": {
+ "source": "iana"
+ },
+ "application/oauth-authz-req+jwt": {
+ "source": "iana"
+ },
+ "application/oblivious-dns-message": {
+ "source": "iana"
+ },
+ "application/ocsp-request": {
+ "source": "iana"
+ },
+ "application/ocsp-response": {
+ "source": "iana"
+ },
+ "application/octet-stream": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "bin",
+ "dms",
+ "lrf",
+ "mar",
+ "so",
+ "dist",
+ "distz",
+ "pkg",
+ "bpk",
+ "dump",
+ "elc",
+ "deploy",
+ "exe",
+ "dll",
+ "deb",
+ "dmg",
+ "iso",
+ "img",
+ "msi",
+ "msp",
+ "msm",
+ "buffer"
+ ]
+ },
+ "application/oda": {
+ "source": "iana",
+ "extensions": [
+ "oda"
+ ]
+ },
+ "application/odm+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/odx": {
+ "source": "iana"
+ },
+ "application/oebps-package+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "opf"
+ ]
+ },
+ "application/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "ogx"
+ ]
+ },
+ "application/ohttp-keys": {
+ "source": "iana"
+ },
+ "application/omdoc+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "omdoc"
+ ]
+ },
+ "application/onenote": {
+ "source": "apache",
+ "extensions": [
+ "onetoc",
+ "onetoc2",
+ "onetmp",
+ "onepkg"
+ ]
+ },
+ "application/opc-nodeset+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/oscore": {
+ "source": "iana"
+ },
+ "application/oxps": {
+ "source": "iana",
+ "extensions": [
+ "oxps"
+ ]
+ },
+ "application/p21": {
+ "source": "iana"
+ },
+ "application/p21+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/p2p-overlay+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "relo"
+ ]
+ },
+ "application/parityfec": {
+ "source": "iana"
+ },
+ "application/passport": {
+ "source": "iana"
+ },
+ "application/patch-ops-error+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xer"
+ ]
+ },
+ "application/pdf": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "pdf"
+ ]
+ },
+ "application/pdx": {
+ "source": "iana"
+ },
+ "application/pem-certificate-chain": {
+ "source": "iana"
+ },
+ "application/pgp-encrypted": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "pgp"
+ ]
+ },
+ "application/pgp-keys": {
+ "source": "iana",
+ "extensions": [
+ "asc"
+ ]
+ },
+ "application/pgp-signature": {
+ "source": "iana",
+ "extensions": [
+ "sig",
+ "asc"
+ ]
+ },
+ "application/pics-rules": {
+ "source": "apache",
+ "extensions": [
+ "prf"
+ ]
+ },
+ "application/pidf+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/pidf-diff+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/pkcs10": {
+ "source": "iana",
+ "extensions": [
+ "p10"
+ ]
+ },
+ "application/pkcs12": {
+ "source": "iana"
+ },
+ "application/pkcs7-mime": {
+ "source": "iana",
+ "extensions": [
+ "p7m",
+ "p7c"
+ ]
+ },
+ "application/pkcs7-signature": {
+ "source": "iana",
+ "extensions": [
+ "p7s"
+ ]
+ },
+ "application/pkcs8": {
+ "source": "iana",
+ "extensions": [
+ "p8"
+ ]
+ },
+ "application/pkcs8-encrypted": {
+ "source": "iana"
+ },
+ "application/pkix-attr-cert": {
+ "source": "iana",
+ "extensions": [
+ "ac"
+ ]
+ },
+ "application/pkix-cert": {
+ "source": "iana",
+ "extensions": [
+ "cer"
+ ]
+ },
+ "application/pkix-crl": {
+ "source": "iana",
+ "extensions": [
+ "crl"
+ ]
+ },
+ "application/pkix-pkipath": {
+ "source": "iana",
+ "extensions": [
+ "pkipath"
+ ]
+ },
+ "application/pkixcmp": {
+ "source": "iana",
+ "extensions": [
+ "pki"
+ ]
+ },
+ "application/pls+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "pls"
+ ]
+ },
+ "application/poc-settings+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/postscript": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ai",
+ "eps",
+ "ps"
+ ]
+ },
+ "application/ppsp-tracker+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/private-token-issuer-directory": {
+ "source": "iana"
+ },
+ "application/private-token-request": {
+ "source": "iana"
+ },
+ "application/private-token-response": {
+ "source": "iana"
+ },
+ "application/problem+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/problem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/provenance+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "provx"
+ ]
+ },
+ "application/prs.alvestrand.titrax-sheet": {
+ "source": "iana"
+ },
+ "application/prs.cww": {
+ "source": "iana",
+ "extensions": [
+ "cww"
+ ]
+ },
+ "application/prs.cyn": {
+ "source": "iana",
+ "charset": "7-BIT"
+ },
+ "application/prs.hpub+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/prs.implied-document+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/prs.implied-executable": {
+ "source": "iana"
+ },
+ "application/prs.implied-object+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/prs.implied-object+json-seq": {
+ "source": "iana"
+ },
+ "application/prs.implied-object+yaml": {
+ "source": "iana"
+ },
+ "application/prs.implied-structure": {
+ "source": "iana"
+ },
+ "application/prs.nprend": {
+ "source": "iana"
+ },
+ "application/prs.plucker": {
+ "source": "iana"
+ },
+ "application/prs.rdf-xml-crypt": {
+ "source": "iana"
+ },
+ "application/prs.vcfbzip2": {
+ "source": "iana"
+ },
+ "application/prs.xsf+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xsf"
+ ]
+ },
+ "application/pskc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "pskcxml"
+ ]
+ },
+ "application/pvd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/qsig": {
+ "source": "iana"
+ },
+ "application/raml+yaml": {
+ "compressible": true,
+ "extensions": [
+ "raml"
+ ]
+ },
+ "application/raptorfec": {
+ "source": "iana"
+ },
+ "application/rdap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/rdf+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rdf",
+ "owl"
+ ]
+ },
+ "application/reginfo+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rif"
+ ]
+ },
+ "application/relax-ng-compact-syntax": {
+ "source": "iana",
+ "extensions": [
+ "rnc"
+ ]
+ },
+ "application/remote-printing": {
+ "source": "apache"
+ },
+ "application/reputon+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/resource-lists+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rl"
+ ]
+ },
+ "application/resource-lists-diff+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rld"
+ ]
+ },
+ "application/rfc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/riscos": {
+ "source": "iana"
+ },
+ "application/rlmi+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/rls-services+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rs"
+ ]
+ },
+ "application/route-apd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rapd"
+ ]
+ },
+ "application/route-s-tsid+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "sls"
+ ]
+ },
+ "application/route-usd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rusd"
+ ]
+ },
+ "application/rpki-checklist": {
+ "source": "iana"
+ },
+ "application/rpki-ghostbusters": {
+ "source": "iana",
+ "extensions": [
+ "gbr"
+ ]
+ },
+ "application/rpki-manifest": {
+ "source": "iana",
+ "extensions": [
+ "mft"
+ ]
+ },
+ "application/rpki-publication": {
+ "source": "iana"
+ },
+ "application/rpki-roa": {
+ "source": "iana",
+ "extensions": [
+ "roa"
+ ]
+ },
+ "application/rpki-signed-tal": {
+ "source": "iana"
+ },
+ "application/rpki-updown": {
+ "source": "iana"
+ },
+ "application/rsd+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "rsd"
+ ]
+ },
+ "application/rss+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "rss"
+ ]
+ },
+ "application/rtf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rtf"
+ ]
+ },
+ "application/rtploopback": {
+ "source": "iana"
+ },
+ "application/rtx": {
+ "source": "iana"
+ },
+ "application/samlassertion+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/samlmetadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sarif+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sarif-external-properties+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sbe": {
+ "source": "iana"
+ },
+ "application/sbml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "sbml"
+ ]
+ },
+ "application/scaip+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/scim+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/scvp-cv-request": {
+ "source": "iana",
+ "extensions": [
+ "scq"
+ ]
+ },
+ "application/scvp-cv-response": {
+ "source": "iana",
+ "extensions": [
+ "scs"
+ ]
+ },
+ "application/scvp-vp-request": {
+ "source": "iana",
+ "extensions": [
+ "spq"
+ ]
+ },
+ "application/scvp-vp-response": {
+ "source": "iana",
+ "extensions": [
+ "spp"
+ ]
+ },
+ "application/sdp": {
+ "source": "iana",
+ "extensions": [
+ "sdp"
+ ]
+ },
+ "application/secevent+jwt": {
+ "source": "iana"
+ },
+ "application/senml+cbor": {
+ "source": "iana"
+ },
+ "application/senml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/senml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "senmlx"
+ ]
+ },
+ "application/senml-etch+cbor": {
+ "source": "iana"
+ },
+ "application/senml-etch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/senml-exi": {
+ "source": "iana"
+ },
+ "application/sensml+cbor": {
+ "source": "iana"
+ },
+ "application/sensml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sensml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "sensmlx"
+ ]
+ },
+ "application/sensml-exi": {
+ "source": "iana"
+ },
+ "application/sep+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sep-exi": {
+ "source": "iana"
+ },
+ "application/session-info": {
+ "source": "iana"
+ },
+ "application/set-payment": {
+ "source": "iana"
+ },
+ "application/set-payment-initiation": {
+ "source": "iana",
+ "extensions": [
+ "setpay"
+ ]
+ },
+ "application/set-registration": {
+ "source": "iana"
+ },
+ "application/set-registration-initiation": {
+ "source": "iana",
+ "extensions": [
+ "setreg"
+ ]
+ },
+ "application/sgml": {
+ "source": "iana"
+ },
+ "application/sgml-open-catalog": {
+ "source": "iana"
+ },
+ "application/shf+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "shf"
+ ]
+ },
+ "application/sieve": {
+ "source": "iana",
+ "extensions": [
+ "siv",
+ "sieve"
+ ]
+ },
+ "application/simple-filter+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/simple-message-summary": {
+ "source": "iana"
+ },
+ "application/simplesymbolcontainer": {
+ "source": "iana"
+ },
+ "application/sipc": {
+ "source": "iana"
+ },
+ "application/slate": {
+ "source": "iana"
+ },
+ "application/smil": {
+ "source": "apache"
+ },
+ "application/smil+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "smi",
+ "smil"
+ ]
+ },
+ "application/smpte336m": {
+ "source": "iana"
+ },
+ "application/soap+fastinfoset": {
+ "source": "iana"
+ },
+ "application/soap+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sparql-query": {
+ "source": "iana",
+ "extensions": [
+ "rq"
+ ]
+ },
+ "application/sparql-results+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "srx"
+ ]
+ },
+ "application/spdx+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/spirits-event+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sql": {
+ "source": "iana",
+ "extensions": [
+ "sql"
+ ]
+ },
+ "application/srgs": {
+ "source": "iana",
+ "extensions": [
+ "gram"
+ ]
+ },
+ "application/srgs+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "grxml"
+ ]
+ },
+ "application/sru+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "sru"
+ ]
+ },
+ "application/ssdl+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "ssdl"
+ ]
+ },
+ "application/ssml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ssml"
+ ]
+ },
+ "application/st2110-41": {
+ "source": "iana"
+ },
+ "application/stix+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/stratum": {
+ "source": "iana"
+ },
+ "application/swid+cbor": {
+ "source": "iana"
+ },
+ "application/swid+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "swidtag"
+ ]
+ },
+ "application/tamp-apex-update": {
+ "source": "iana"
+ },
+ "application/tamp-apex-update-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-community-update": {
+ "source": "iana"
+ },
+ "application/tamp-community-update-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-error": {
+ "source": "iana"
+ },
+ "application/tamp-sequence-adjust": {
+ "source": "iana"
+ },
+ "application/tamp-sequence-adjust-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-status-query": {
+ "source": "iana"
+ },
+ "application/tamp-status-response": {
+ "source": "iana"
+ },
+ "application/tamp-update": {
+ "source": "iana"
+ },
+ "application/tamp-update-confirm": {
+ "source": "iana"
+ },
+ "application/tar": {
+ "compressible": true
+ },
+ "application/taxii+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/td+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/tei+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "tei",
+ "teicorpus"
+ ]
+ },
+ "application/tetra_isi": {
+ "source": "iana"
+ },
+ "application/thraud+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "tfi"
+ ]
+ },
+ "application/timestamp-query": {
+ "source": "iana"
+ },
+ "application/timestamp-reply": {
+ "source": "iana"
+ },
+ "application/timestamped-data": {
+ "source": "iana",
+ "extensions": [
+ "tsd"
+ ]
+ },
+ "application/tlsrpt+gzip": {
+ "source": "iana"
+ },
+ "application/tlsrpt+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/tm+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/tnauthlist": {
+ "source": "iana"
+ },
+ "application/token-introspection+jwt": {
+ "source": "iana"
+ },
+ "application/toml": {
+ "compressible": true,
+ "extensions": [
+ "toml"
+ ]
+ },
+ "application/trickle-ice-sdpfrag": {
+ "source": "iana"
+ },
+ "application/trig": {
+ "source": "iana",
+ "extensions": [
+ "trig"
+ ]
+ },
+ "application/ttml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ttml"
+ ]
+ },
+ "application/tve-trigger": {
+ "source": "iana"
+ },
+ "application/tzif": {
+ "source": "iana"
+ },
+ "application/tzif-leap": {
+ "source": "iana"
+ },
+ "application/ubjson": {
+ "compressible": false,
+ "extensions": [
+ "ubj"
+ ]
+ },
+ "application/ulpfec": {
+ "source": "iana"
+ },
+ "application/urc-grpsheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/urc-ressheet+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rsheet"
+ ]
+ },
+ "application/urc-targetdesc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "td"
+ ]
+ },
+ "application/urc-uisocketdesc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vc": {
+ "source": "iana"
+ },
+ "application/vcard+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vcard+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vemmi": {
+ "source": "iana"
+ },
+ "application/vividence.scriptfile": {
+ "source": "apache"
+ },
+ "application/vnd.1000minds.decision-model+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "1km"
+ ]
+ },
+ "application/vnd.1ob": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp-prose+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-prose-pc3a+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-prose-pc3ach+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-prose-pc3ch+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-prose-pc8+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-v2x-local-service-information": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.5gnas": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.5gsa2x": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.5gsa2x-local-service-information": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.access-transfer-events+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.bsf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.crs+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.current-location-discovery+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.gmop+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.gtpc": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.interworking-data": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.lpp": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mc-signalling-ear": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mcdata-affiliation-command+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-payload": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mcdata-regroup+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-service-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-signalling": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mcdata-ue-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-user-profile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-affiliation-command+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-floor-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-location-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-regroup+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-service-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-signed+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-ue-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-ue-init-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-user-profile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-location-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-regroup+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-service-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-transmission-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-ue-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-user-profile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mid-call+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.ngap": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.pfcp": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.pic-bw-large": {
+ "source": "iana",
+ "extensions": [
+ "plb"
+ ]
+ },
+ "application/vnd.3gpp.pic-bw-small": {
+ "source": "iana",
+ "extensions": [
+ "psb"
+ ]
+ },
+ "application/vnd.3gpp.pic-bw-var": {
+ "source": "iana",
+ "extensions": [
+ "pvb"
+ ]
+ },
+ "application/vnd.3gpp.pinapp-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.s1ap": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.seal-group-doc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-location-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-mbms-usage-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-network-qos-management-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-ue-config-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-unicast-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.seal-user-profile-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.sms": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.sms+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.srvcc-ext+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.srvcc-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.state-and-event-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.ussd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.v2x": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.vae-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp2.bcmcsinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp2.sms": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp2.tcap": {
+ "source": "iana",
+ "extensions": [
+ "tcap"
+ ]
+ },
+ "application/vnd.3lightssoftware.imagescal": {
+ "source": "iana"
+ },
+ "application/vnd.3m.post-it-notes": {
+ "source": "iana",
+ "extensions": [
+ "pwn"
+ ]
+ },
+ "application/vnd.accpac.simply.aso": {
+ "source": "iana",
+ "extensions": [
+ "aso"
+ ]
+ },
+ "application/vnd.accpac.simply.imp": {
+ "source": "iana",
+ "extensions": [
+ "imp"
+ ]
+ },
+ "application/vnd.acm.addressxfer+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.acm.chatbot+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.acucobol": {
+ "source": "iana",
+ "extensions": [
+ "acu"
+ ]
+ },
+ "application/vnd.acucorp": {
+ "source": "iana",
+ "extensions": [
+ "atc",
+ "acutc"
+ ]
+ },
+ "application/vnd.adobe.air-application-installer-package+zip": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "air"
+ ]
+ },
+ "application/vnd.adobe.flash.movie": {
+ "source": "iana"
+ },
+ "application/vnd.adobe.formscentral.fcdt": {
+ "source": "iana",
+ "extensions": [
+ "fcdt"
+ ]
+ },
+ "application/vnd.adobe.fxp": {
+ "source": "iana",
+ "extensions": [
+ "fxp",
+ "fxpl"
+ ]
+ },
+ "application/vnd.adobe.partial-upload": {
+ "source": "iana"
+ },
+ "application/vnd.adobe.xdp+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xdp"
+ ]
+ },
+ "application/vnd.adobe.xfdf": {
+ "source": "apache",
+ "extensions": [
+ "xfdf"
+ ]
+ },
+ "application/vnd.aether.imp": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.afplinedata": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.afplinedata-pagedef": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.cmoca-cmresource": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.foca-charset": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.foca-codedfont": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.foca-codepage": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-cmtable": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-formdef": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-mediummap": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-objectcontainer": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-overlay": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-pagesegment": {
+ "source": "iana"
+ },
+ "application/vnd.age": {
+ "source": "iana",
+ "extensions": [
+ "age"
+ ]
+ },
+ "application/vnd.ah-barcode": {
+ "source": "apache"
+ },
+ "application/vnd.ahead.space": {
+ "source": "iana",
+ "extensions": [
+ "ahead"
+ ]
+ },
+ "application/vnd.airzip.filesecure.azf": {
+ "source": "iana",
+ "extensions": [
+ "azf"
+ ]
+ },
+ "application/vnd.airzip.filesecure.azs": {
+ "source": "iana",
+ "extensions": [
+ "azs"
+ ]
+ },
+ "application/vnd.amadeus+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.amazon.ebook": {
+ "source": "apache",
+ "extensions": [
+ "azw"
+ ]
+ },
+ "application/vnd.amazon.mobi8-ebook": {
+ "source": "iana"
+ },
+ "application/vnd.americandynamics.acc": {
+ "source": "iana",
+ "extensions": [
+ "acc"
+ ]
+ },
+ "application/vnd.amiga.ami": {
+ "source": "iana",
+ "extensions": [
+ "ami"
+ ]
+ },
+ "application/vnd.amundsen.maze+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.android.ota": {
+ "source": "iana"
+ },
+ "application/vnd.android.package-archive": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "apk"
+ ]
+ },
+ "application/vnd.anki": {
+ "source": "iana"
+ },
+ "application/vnd.anser-web-certificate-issue-initiation": {
+ "source": "iana",
+ "extensions": [
+ "cii"
+ ]
+ },
+ "application/vnd.anser-web-funds-transfer-initiation": {
+ "source": "apache",
+ "extensions": [
+ "fti"
+ ]
+ },
+ "application/vnd.antix.game-component": {
+ "source": "iana",
+ "extensions": [
+ "atx"
+ ]
+ },
+ "application/vnd.apache.arrow.file": {
+ "source": "iana"
+ },
+ "application/vnd.apache.arrow.stream": {
+ "source": "iana"
+ },
+ "application/vnd.apache.parquet": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.binary": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.compact": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.json": {
+ "source": "iana"
+ },
+ "application/vnd.apexlang": {
+ "source": "iana"
+ },
+ "application/vnd.api+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.aplextor.warrp+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.apothekende.reservation+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.apple.installer+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mpkg"
+ ]
+ },
+ "application/vnd.apple.keynote": {
+ "source": "iana",
+ "extensions": [
+ "key"
+ ]
+ },
+ "application/vnd.apple.mpegurl": {
+ "source": "iana",
+ "extensions": [
+ "m3u8"
+ ]
+ },
+ "application/vnd.apple.numbers": {
+ "source": "iana",
+ "extensions": [
+ "numbers"
+ ]
+ },
+ "application/vnd.apple.pages": {
+ "source": "iana",
+ "extensions": [
+ "pages"
+ ]
+ },
+ "application/vnd.apple.pkpass": {
+ "compressible": false,
+ "extensions": [
+ "pkpass"
+ ]
+ },
+ "application/vnd.arastra.swi": {
+ "source": "apache"
+ },
+ "application/vnd.aristanetworks.swi": {
+ "source": "iana",
+ "extensions": [
+ "swi"
+ ]
+ },
+ "application/vnd.artisan+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.artsquare": {
+ "source": "iana"
+ },
+ "application/vnd.astraea-software.iota": {
+ "source": "iana",
+ "extensions": [
+ "iota"
+ ]
+ },
+ "application/vnd.audiograph": {
+ "source": "iana",
+ "extensions": [
+ "aep"
+ ]
+ },
+ "application/vnd.autopackage": {
+ "source": "iana"
+ },
+ "application/vnd.avalon+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.avistar+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.balsamiq.bmml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "bmml"
+ ]
+ },
+ "application/vnd.balsamiq.bmpr": {
+ "source": "iana"
+ },
+ "application/vnd.banana-accounting": {
+ "source": "iana"
+ },
+ "application/vnd.bbf.usp.error": {
+ "source": "iana"
+ },
+ "application/vnd.bbf.usp.msg": {
+ "source": "iana"
+ },
+ "application/vnd.bbf.usp.msg+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.bekitzur-stech+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.belightsoft.lhzd+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.belightsoft.lhzl+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.bint.med-content": {
+ "source": "iana"
+ },
+ "application/vnd.biopax.rdf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.blink-idb-value-wrapper": {
+ "source": "iana"
+ },
+ "application/vnd.blueice.multipass": {
+ "source": "iana",
+ "extensions": [
+ "mpm"
+ ]
+ },
+ "application/vnd.bluetooth.ep.oob": {
+ "source": "iana"
+ },
+ "application/vnd.bluetooth.le.oob": {
+ "source": "iana"
+ },
+ "application/vnd.bmi": {
+ "source": "iana",
+ "extensions": [
+ "bmi"
+ ]
+ },
+ "application/vnd.bpf": {
+ "source": "iana"
+ },
+ "application/vnd.bpf3": {
+ "source": "iana"
+ },
+ "application/vnd.businessobjects": {
+ "source": "iana",
+ "extensions": [
+ "rep"
+ ]
+ },
+ "application/vnd.byu.uapi+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.bzip3": {
+ "source": "iana"
+ },
+ "application/vnd.c3voc.schedule+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cab-jscript": {
+ "source": "iana"
+ },
+ "application/vnd.canon-cpdl": {
+ "source": "iana"
+ },
+ "application/vnd.canon-lips": {
+ "source": "iana"
+ },
+ "application/vnd.capasystems-pg+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cendio.thinlinc.clientconf": {
+ "source": "iana"
+ },
+ "application/vnd.century-systems.tcp_stream": {
+ "source": "iana"
+ },
+ "application/vnd.chemdraw+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "cdxml"
+ ]
+ },
+ "application/vnd.chess-pgn": {
+ "source": "iana"
+ },
+ "application/vnd.chipnuts.karaoke-mmd": {
+ "source": "iana",
+ "extensions": [
+ "mmd"
+ ]
+ },
+ "application/vnd.ciedi": {
+ "source": "iana"
+ },
+ "application/vnd.cinderella": {
+ "source": "iana",
+ "extensions": [
+ "cdy"
+ ]
+ },
+ "application/vnd.cirpack.isdn-ext": {
+ "source": "iana"
+ },
+ "application/vnd.citationstyles.style+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "csl"
+ ]
+ },
+ "application/vnd.claymore": {
+ "source": "iana",
+ "extensions": [
+ "cla"
+ ]
+ },
+ "application/vnd.cloanto.rp9": {
+ "source": "iana",
+ "extensions": [
+ "rp9"
+ ]
+ },
+ "application/vnd.clonk.c4group": {
+ "source": "iana",
+ "extensions": [
+ "c4g",
+ "c4d",
+ "c4f",
+ "c4p",
+ "c4u"
+ ]
+ },
+ "application/vnd.cluetrust.cartomobile-config": {
+ "source": "iana",
+ "extensions": [
+ "c11amc"
+ ]
+ },
+ "application/vnd.cluetrust.cartomobile-config-pkg": {
+ "source": "iana",
+ "extensions": [
+ "c11amz"
+ ]
+ },
+ "application/vnd.cncf.helm.chart.content.v1.tar+gzip": {
+ "source": "iana"
+ },
+ "application/vnd.cncf.helm.chart.provenance.v1.prov": {
+ "source": "iana"
+ },
+ "application/vnd.cncf.helm.config.v1+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.coffeescript": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.document": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.document-template": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.presentation": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.presentation-template": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.spreadsheet": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.spreadsheet-template": {
+ "source": "iana"
+ },
+ "application/vnd.collection+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.collection.doc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.collection.next+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.comicbook+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.comicbook-rar": {
+ "source": "iana"
+ },
+ "application/vnd.commerce-battelle": {
+ "source": "iana"
+ },
+ "application/vnd.commonspace": {
+ "source": "iana",
+ "extensions": [
+ "csp"
+ ]
+ },
+ "application/vnd.contact.cmsg": {
+ "source": "iana",
+ "extensions": [
+ "cdbcmsg"
+ ]
+ },
+ "application/vnd.coreos.ignition+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cosmocaller": {
+ "source": "iana",
+ "extensions": [
+ "cmc"
+ ]
+ },
+ "application/vnd.crick.clicker": {
+ "source": "iana",
+ "extensions": [
+ "clkx"
+ ]
+ },
+ "application/vnd.crick.clicker.keyboard": {
+ "source": "iana",
+ "extensions": [
+ "clkk"
+ ]
+ },
+ "application/vnd.crick.clicker.palette": {
+ "source": "iana",
+ "extensions": [
+ "clkp"
+ ]
+ },
+ "application/vnd.crick.clicker.template": {
+ "source": "iana",
+ "extensions": [
+ "clkt"
+ ]
+ },
+ "application/vnd.crick.clicker.wordbank": {
+ "source": "iana",
+ "extensions": [
+ "clkw"
+ ]
+ },
+ "application/vnd.criticaltools.wbs+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "wbs"
+ ]
+ },
+ "application/vnd.cryptii.pipe+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.crypto-shade-file": {
+ "source": "iana"
+ },
+ "application/vnd.cryptomator.encrypted": {
+ "source": "iana"
+ },
+ "application/vnd.cryptomator.vault": {
+ "source": "iana"
+ },
+ "application/vnd.ctc-posml": {
+ "source": "iana",
+ "extensions": [
+ "pml"
+ ]
+ },
+ "application/vnd.ctct.ws+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cups-pdf": {
+ "source": "iana"
+ },
+ "application/vnd.cups-postscript": {
+ "source": "iana"
+ },
+ "application/vnd.cups-ppd": {
+ "source": "iana",
+ "extensions": [
+ "ppd"
+ ]
+ },
+ "application/vnd.cups-raster": {
+ "source": "iana"
+ },
+ "application/vnd.cups-raw": {
+ "source": "iana"
+ },
+ "application/vnd.curl": {
+ "source": "iana"
+ },
+ "application/vnd.curl.car": {
+ "source": "apache",
+ "extensions": [
+ "car"
+ ]
+ },
+ "application/vnd.curl.pcurl": {
+ "source": "apache",
+ "extensions": [
+ "pcurl"
+ ]
+ },
+ "application/vnd.cyan.dean.root+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cybank": {
+ "source": "iana"
+ },
+ "application/vnd.cyclonedx+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cyclonedx+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.d2l.coursepackage1p0+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.d3m-dataset": {
+ "source": "iana"
+ },
+ "application/vnd.d3m-problem": {
+ "source": "iana"
+ },
+ "application/vnd.dart": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "dart"
+ ]
+ },
+ "application/vnd.data-vision.rdz": {
+ "source": "iana",
+ "extensions": [
+ "rdz"
+ ]
+ },
+ "application/vnd.datalog": {
+ "source": "iana"
+ },
+ "application/vnd.datapackage+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dataresource+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dbf": {
+ "source": "iana",
+ "extensions": [
+ "dbf"
+ ]
+ },
+ "application/vnd.debian.binary-package": {
+ "source": "iana"
+ },
+ "application/vnd.dece.data": {
+ "source": "iana",
+ "extensions": [
+ "uvf",
+ "uvvf",
+ "uvd",
+ "uvvd"
+ ]
+ },
+ "application/vnd.dece.ttml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "uvt",
+ "uvvt"
+ ]
+ },
+ "application/vnd.dece.unspecified": {
+ "source": "iana",
+ "extensions": [
+ "uvx",
+ "uvvx"
+ ]
+ },
+ "application/vnd.dece.zip": {
+ "source": "iana",
+ "extensions": [
+ "uvz",
+ "uvvz"
+ ]
+ },
+ "application/vnd.denovo.fcselayout-link": {
+ "source": "iana",
+ "extensions": [
+ "fe_launch"
+ ]
+ },
+ "application/vnd.desmume.movie": {
+ "source": "iana"
+ },
+ "application/vnd.dir-bi.plate-dl-nosuffix": {
+ "source": "iana"
+ },
+ "application/vnd.dm.delegation+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dna": {
+ "source": "iana",
+ "extensions": [
+ "dna"
+ ]
+ },
+ "application/vnd.document+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dolby.mlp": {
+ "source": "apache",
+ "extensions": [
+ "mlp"
+ ]
+ },
+ "application/vnd.dolby.mobile.1": {
+ "source": "iana"
+ },
+ "application/vnd.dolby.mobile.2": {
+ "source": "iana"
+ },
+ "application/vnd.doremir.scorecloud-binary-document": {
+ "source": "iana"
+ },
+ "application/vnd.dpgraph": {
+ "source": "iana",
+ "extensions": [
+ "dpg"
+ ]
+ },
+ "application/vnd.dreamfactory": {
+ "source": "iana",
+ "extensions": [
+ "dfac"
+ ]
+ },
+ "application/vnd.drive+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ds-keypoint": {
+ "source": "apache",
+ "extensions": [
+ "kpxx"
+ ]
+ },
+ "application/vnd.dtg.local": {
+ "source": "iana"
+ },
+ "application/vnd.dtg.local.flash": {
+ "source": "iana"
+ },
+ "application/vnd.dtg.local.html": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ait": {
+ "source": "iana",
+ "extensions": [
+ "ait"
+ ]
+ },
+ "application/vnd.dvb.dvbisl+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.dvbj": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.esgcontainer": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcdftnotifaccess": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgaccess": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgaccess2": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgpdd": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcroaming": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.iptv.alfec-base": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.iptv.alfec-enhancement": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-aggregate-root+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-container+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-generic+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-ia-msglist+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-ia-registration-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-ia-registration-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-init+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.pfr": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.service": {
+ "source": "iana",
+ "extensions": [
+ "svc"
+ ]
+ },
+ "application/vnd.dxr": {
+ "source": "iana"
+ },
+ "application/vnd.dynageo": {
+ "source": "iana",
+ "extensions": [
+ "geo"
+ ]
+ },
+ "application/vnd.dzr": {
+ "source": "iana"
+ },
+ "application/vnd.easykaraoke.cdgdownload": {
+ "source": "iana"
+ },
+ "application/vnd.ecdis-update": {
+ "source": "iana"
+ },
+ "application/vnd.ecip.rlp": {
+ "source": "iana"
+ },
+ "application/vnd.eclipse.ditto+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ecowin.chart": {
+ "source": "iana",
+ "extensions": [
+ "mag"
+ ]
+ },
+ "application/vnd.ecowin.filerequest": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.fileupdate": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.series": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.seriesrequest": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.seriesupdate": {
+ "source": "iana"
+ },
+ "application/vnd.efi.img": {
+ "source": "iana"
+ },
+ "application/vnd.efi.iso": {
+ "source": "iana"
+ },
+ "application/vnd.eln+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.emclient.accessrequest+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.enliven": {
+ "source": "iana",
+ "extensions": [
+ "nml"
+ ]
+ },
+ "application/vnd.enphase.envoy": {
+ "source": "iana"
+ },
+ "application/vnd.eprints.data+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.epson.esf": {
+ "source": "iana",
+ "extensions": [
+ "esf"
+ ]
+ },
+ "application/vnd.epson.msf": {
+ "source": "iana",
+ "extensions": [
+ "msf"
+ ]
+ },
+ "application/vnd.epson.quickanime": {
+ "source": "iana",
+ "extensions": [
+ "qam"
+ ]
+ },
+ "application/vnd.epson.salt": {
+ "source": "iana",
+ "extensions": [
+ "slt"
+ ]
+ },
+ "application/vnd.epson.ssf": {
+ "source": "iana",
+ "extensions": [
+ "ssf"
+ ]
+ },
+ "application/vnd.ericsson.quickcall": {
+ "source": "iana"
+ },
+ "application/vnd.erofs": {
+ "source": "iana"
+ },
+ "application/vnd.espass-espass+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.eszigno3+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "es3",
+ "et3"
+ ]
+ },
+ "application/vnd.etsi.aoc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.asic-e+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.etsi.asic-s+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.etsi.cug+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvcommand+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvdiscovery+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsad-bc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsad-cod+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsad-npvr+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvservice+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsync+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvueprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.mcid+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.mheg5": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.overload-control-policy-dataset+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.pstn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.sci+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.simservs+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.timestamp-token": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.tsl+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.tsl.der": {
+ "source": "iana"
+ },
+ "application/vnd.eu.kasparian.car+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.eudora.data": {
+ "source": "iana"
+ },
+ "application/vnd.evolv.ecig.profile": {
+ "source": "iana"
+ },
+ "application/vnd.evolv.ecig.settings": {
+ "source": "iana"
+ },
+ "application/vnd.evolv.ecig.theme": {
+ "source": "iana"
+ },
+ "application/vnd.exstream-empower+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.exstream-package": {
+ "source": "iana"
+ },
+ "application/vnd.ezpix-album": {
+ "source": "iana",
+ "extensions": [
+ "ez2"
+ ]
+ },
+ "application/vnd.ezpix-package": {
+ "source": "iana",
+ "extensions": [
+ "ez3"
+ ]
+ },
+ "application/vnd.f-secure.mobile": {
+ "source": "iana"
+ },
+ "application/vnd.familysearch.gedcom+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.fastcopy-disk-image": {
+ "source": "iana"
+ },
+ "application/vnd.fdf": {
+ "source": "apache",
+ "extensions": [
+ "fdf"
+ ]
+ },
+ "application/vnd.fdsn.mseed": {
+ "source": "iana",
+ "extensions": [
+ "mseed"
+ ]
+ },
+ "application/vnd.fdsn.seed": {
+ "source": "iana",
+ "extensions": [
+ "seed",
+ "dataless"
+ ]
+ },
+ "application/vnd.ffsns": {
+ "source": "iana"
+ },
+ "application/vnd.ficlab.flb+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.filmit.zfc": {
+ "source": "iana"
+ },
+ "application/vnd.fints": {
+ "source": "iana"
+ },
+ "application/vnd.firemonkeys.cloudcell": {
+ "source": "iana"
+ },
+ "application/vnd.flographit": {
+ "source": "iana",
+ "extensions": [
+ "gph"
+ ]
+ },
+ "application/vnd.fluxtime.clip": {
+ "source": "iana",
+ "extensions": [
+ "ftc"
+ ]
+ },
+ "application/vnd.font-fontforge-sfd": {
+ "source": "iana"
+ },
+ "application/vnd.framemaker": {
+ "source": "iana",
+ "extensions": [
+ "fm",
+ "frame",
+ "maker",
+ "book"
+ ]
+ },
+ "application/vnd.freelog.comic": {
+ "source": "iana"
+ },
+ "application/vnd.frogans.fnc": {
+ "source": "apache",
+ "extensions": [
+ "fnc"
+ ]
+ },
+ "application/vnd.frogans.ltf": {
+ "source": "apache",
+ "extensions": [
+ "ltf"
+ ]
+ },
+ "application/vnd.fsc.weblaunch": {
+ "source": "iana",
+ "extensions": [
+ "fsc"
+ ]
+ },
+ "application/vnd.fujifilm.fb.docuworks": {
+ "source": "iana"
+ },
+ "application/vnd.fujifilm.fb.docuworks.binder": {
+ "source": "iana"
+ },
+ "application/vnd.fujifilm.fb.docuworks.container": {
+ "source": "iana"
+ },
+ "application/vnd.fujifilm.fb.jfi+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.fujitsu.oasys": {
+ "source": "iana",
+ "extensions": [
+ "oas"
+ ]
+ },
+ "application/vnd.fujitsu.oasys2": {
+ "source": "iana",
+ "extensions": [
+ "oa2"
+ ]
+ },
+ "application/vnd.fujitsu.oasys3": {
+ "source": "iana",
+ "extensions": [
+ "oa3"
+ ]
+ },
+ "application/vnd.fujitsu.oasysgp": {
+ "source": "iana",
+ "extensions": [
+ "fg5"
+ ]
+ },
+ "application/vnd.fujitsu.oasysprs": {
+ "source": "iana",
+ "extensions": [
+ "bh2"
+ ]
+ },
+ "application/vnd.fujixerox.art-ex": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.art4": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.ddd": {
+ "source": "iana",
+ "extensions": [
+ "ddd"
+ ]
+ },
+ "application/vnd.fujixerox.docuworks": {
+ "source": "iana",
+ "extensions": [
+ "xdw"
+ ]
+ },
+ "application/vnd.fujixerox.docuworks.binder": {
+ "source": "iana",
+ "extensions": [
+ "xbd"
+ ]
+ },
+ "application/vnd.fujixerox.docuworks.container": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.hbpl": {
+ "source": "iana"
+ },
+ "application/vnd.fut-misnet": {
+ "source": "iana"
+ },
+ "application/vnd.futoin+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.futoin+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.fuzzysheet": {
+ "source": "iana",
+ "extensions": [
+ "fzs"
+ ]
+ },
+ "application/vnd.ga4gh.passport+jwt": {
+ "source": "iana"
+ },
+ "application/vnd.genomatix.tuxedo": {
+ "source": "iana",
+ "extensions": [
+ "txd"
+ ]
+ },
+ "application/vnd.genozip": {
+ "source": "iana"
+ },
+ "application/vnd.gentics.grd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.gentoo.catmetadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.gentoo.ebuild": {
+ "source": "iana"
+ },
+ "application/vnd.gentoo.eclass": {
+ "source": "iana"
+ },
+ "application/vnd.gentoo.gpkg": {
+ "source": "iana"
+ },
+ "application/vnd.gentoo.manifest": {
+ "source": "iana"
+ },
+ "application/vnd.gentoo.pkgmetadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.gentoo.xpak": {
+ "source": "iana"
+ },
+ "application/vnd.geo+json": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.geocube+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.geogebra.file": {
+ "source": "iana",
+ "extensions": [
+ "ggb"
+ ]
+ },
+ "application/vnd.geogebra.slides": {
+ "source": "iana",
+ "extensions": [
+ "ggs"
+ ]
+ },
+ "application/vnd.geogebra.tool": {
+ "source": "iana",
+ "extensions": [
+ "ggt"
+ ]
+ },
+ "application/vnd.geometry-explorer": {
+ "source": "iana",
+ "extensions": [
+ "gex",
+ "gre"
+ ]
+ },
+ "application/vnd.geonext": {
+ "source": "iana",
+ "extensions": [
+ "gxt"
+ ]
+ },
+ "application/vnd.geoplan": {
+ "source": "iana",
+ "extensions": [
+ "g2w"
+ ]
+ },
+ "application/vnd.geospace": {
+ "source": "iana",
+ "extensions": [
+ "g3w"
+ ]
+ },
+ "application/vnd.gerber": {
+ "source": "iana"
+ },
+ "application/vnd.globalplatform.card-content-mgt": {
+ "source": "iana"
+ },
+ "application/vnd.globalplatform.card-content-mgt-response": {
+ "source": "iana"
+ },
+ "application/vnd.gmx": {
+ "source": "iana",
+ "extensions": [
+ "gmx"
+ ]
+ },
+ "application/vnd.gnu.taler.exchange+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.gnu.taler.merchant+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.google-apps.document": {
+ "compressible": false,
+ "extensions": [
+ "gdoc"
+ ]
+ },
+ "application/vnd.google-apps.presentation": {
+ "compressible": false,
+ "extensions": [
+ "gslides"
+ ]
+ },
+ "application/vnd.google-apps.spreadsheet": {
+ "compressible": false,
+ "extensions": [
+ "gsheet"
+ ]
+ },
+ "application/vnd.google-earth.kml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "kml"
+ ]
+ },
+ "application/vnd.google-earth.kmz": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "kmz"
+ ]
+ },
+ "application/vnd.gov.sk.e-form+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.gov.sk.e-form+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.gov.sk.xmldatacontainer+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xdcf"
+ ]
+ },
+ "application/vnd.gpxsee.map+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.grafeq": {
+ "source": "iana",
+ "extensions": [
+ "gqf",
+ "gqs"
+ ]
+ },
+ "application/vnd.gridmp": {
+ "source": "iana"
+ },
+ "application/vnd.groove-account": {
+ "source": "iana",
+ "extensions": [
+ "gac"
+ ]
+ },
+ "application/vnd.groove-help": {
+ "source": "iana",
+ "extensions": [
+ "ghf"
+ ]
+ },
+ "application/vnd.groove-identity-message": {
+ "source": "iana",
+ "extensions": [
+ "gim"
+ ]
+ },
+ "application/vnd.groove-injector": {
+ "source": "iana",
+ "extensions": [
+ "grv"
+ ]
+ },
+ "application/vnd.groove-tool-message": {
+ "source": "iana",
+ "extensions": [
+ "gtm"
+ ]
+ },
+ "application/vnd.groove-tool-template": {
+ "source": "iana",
+ "extensions": [
+ "tpl"
+ ]
+ },
+ "application/vnd.groove-vcard": {
+ "source": "iana",
+ "extensions": [
+ "vcg"
+ ]
+ },
+ "application/vnd.hal+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hal+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "hal"
+ ]
+ },
+ "application/vnd.handheld-entertainment+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "zmm"
+ ]
+ },
+ "application/vnd.hbci": {
+ "source": "iana",
+ "extensions": [
+ "hbci"
+ ]
+ },
+ "application/vnd.hc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hcl-bireports": {
+ "source": "iana"
+ },
+ "application/vnd.hdt": {
+ "source": "iana"
+ },
+ "application/vnd.heroku+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hhe.lesson-player": {
+ "source": "iana",
+ "extensions": [
+ "les"
+ ]
+ },
+ "application/vnd.hp-hpgl": {
+ "source": "iana",
+ "extensions": [
+ "hpgl"
+ ]
+ },
+ "application/vnd.hp-hpid": {
+ "source": "iana",
+ "extensions": [
+ "hpid"
+ ]
+ },
+ "application/vnd.hp-hps": {
+ "source": "iana",
+ "extensions": [
+ "hps"
+ ]
+ },
+ "application/vnd.hp-jlyt": {
+ "source": "iana",
+ "extensions": [
+ "jlt"
+ ]
+ },
+ "application/vnd.hp-pcl": {
+ "source": "iana",
+ "extensions": [
+ "pcl"
+ ]
+ },
+ "application/vnd.hp-pclxl": {
+ "source": "iana",
+ "extensions": [
+ "pclxl"
+ ]
+ },
+ "application/vnd.hsl": {
+ "source": "iana"
+ },
+ "application/vnd.httphone": {
+ "source": "iana"
+ },
+ "application/vnd.hydrostatix.sof-data": {
+ "source": "iana",
+ "extensions": [
+ "sfd-hdstx"
+ ]
+ },
+ "application/vnd.hyper+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hyper-item+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hyperdrive+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hzn-3d-crossword": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.afplinedata": {
+ "source": "apache"
+ },
+ "application/vnd.ibm.electronic-media": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.minipay": {
+ "source": "iana",
+ "extensions": [
+ "mpy"
+ ]
+ },
+ "application/vnd.ibm.modcap": {
+ "source": "apache",
+ "extensions": [
+ "afp",
+ "listafp",
+ "list3820"
+ ]
+ },
+ "application/vnd.ibm.rights-management": {
+ "source": "iana",
+ "extensions": [
+ "irm"
+ ]
+ },
+ "application/vnd.ibm.secure-container": {
+ "source": "iana",
+ "extensions": [
+ "sc"
+ ]
+ },
+ "application/vnd.iccprofile": {
+ "source": "iana",
+ "extensions": [
+ "icc",
+ "icm"
+ ]
+ },
+ "application/vnd.ieee.1905": {
+ "source": "iana"
+ },
+ "application/vnd.igloader": {
+ "source": "iana",
+ "extensions": [
+ "igl"
+ ]
+ },
+ "application/vnd.imagemeter.folder+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.imagemeter.image+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.immervision-ivp": {
+ "source": "iana",
+ "extensions": [
+ "ivp"
+ ]
+ },
+ "application/vnd.immervision-ivu": {
+ "source": "iana",
+ "extensions": [
+ "ivu"
+ ]
+ },
+ "application/vnd.ims.imsccv1p1": {
+ "source": "iana"
+ },
+ "application/vnd.ims.imsccv1p2": {
+ "source": "iana"
+ },
+ "application/vnd.ims.imsccv1p3": {
+ "source": "iana"
+ },
+ "application/vnd.ims.lis.v2.result+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolproxy+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolproxy.id+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolsettings+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolsettings.simple+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.informedcontrol.rms+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.informix-visionary": {
+ "source": "apache"
+ },
+ "application/vnd.infotech.project": {
+ "source": "iana"
+ },
+ "application/vnd.infotech.project+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.innopath.wamp.notification": {
+ "source": "iana"
+ },
+ "application/vnd.insors.igm": {
+ "source": "iana",
+ "extensions": [
+ "igm"
+ ]
+ },
+ "application/vnd.intercon.formnet": {
+ "source": "iana",
+ "extensions": [
+ "xpw",
+ "xpx"
+ ]
+ },
+ "application/vnd.intergeo": {
+ "source": "iana",
+ "extensions": [
+ "i2g"
+ ]
+ },
+ "application/vnd.intertrust.digibox": {
+ "source": "iana"
+ },
+ "application/vnd.intertrust.nncp": {
+ "source": "iana"
+ },
+ "application/vnd.intu.qbo": {
+ "source": "iana",
+ "extensions": [
+ "qbo"
+ ]
+ },
+ "application/vnd.intu.qfx": {
+ "source": "iana",
+ "extensions": [
+ "qfx"
+ ]
+ },
+ "application/vnd.ipfs.ipns-record": {
+ "source": "iana"
+ },
+ "application/vnd.ipld.car": {
+ "source": "iana"
+ },
+ "application/vnd.ipld.dag-cbor": {
+ "source": "iana"
+ },
+ "application/vnd.ipld.dag-json": {
+ "source": "iana"
+ },
+ "application/vnd.ipld.raw": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.catalogitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.conceptitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.knowledgeitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.newsitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.newsmessage+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.packageitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.planningitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ipunplugged.rcprofile": {
+ "source": "iana",
+ "extensions": [
+ "rcprofile"
+ ]
+ },
+ "application/vnd.irepository.package+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "irp"
+ ]
+ },
+ "application/vnd.is-xpr": {
+ "source": "iana",
+ "extensions": [
+ "xpr"
+ ]
+ },
+ "application/vnd.isac.fcs": {
+ "source": "iana",
+ "extensions": [
+ "fcs"
+ ]
+ },
+ "application/vnd.iso11783-10+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.jam": {
+ "source": "iana",
+ "extensions": [
+ "jam"
+ ]
+ },
+ "application/vnd.japannet-directory-service": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-jpnstore-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-payment-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-registration": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-registration-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-setstore-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-verification": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-verification-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.jcp.javame.midlet-rms": {
+ "source": "iana",
+ "extensions": [
+ "rms"
+ ]
+ },
+ "application/vnd.jisp": {
+ "source": "iana",
+ "extensions": [
+ "jisp"
+ ]
+ },
+ "application/vnd.joost.joda-archive": {
+ "source": "iana",
+ "extensions": [
+ "joda"
+ ]
+ },
+ "application/vnd.jsk.isdn-ngn": {
+ "source": "iana"
+ },
+ "application/vnd.kahootz": {
+ "source": "iana",
+ "extensions": [
+ "ktz",
+ "ktr"
+ ]
+ },
+ "application/vnd.kde.karbon": {
+ "source": "iana",
+ "extensions": [
+ "karbon"
+ ]
+ },
+ "application/vnd.kde.kchart": {
+ "source": "iana",
+ "extensions": [
+ "chrt"
+ ]
+ },
+ "application/vnd.kde.kformula": {
+ "source": "iana",
+ "extensions": [
+ "kfo"
+ ]
+ },
+ "application/vnd.kde.kivio": {
+ "source": "iana",
+ "extensions": [
+ "flw"
+ ]
+ },
+ "application/vnd.kde.kontour": {
+ "source": "iana",
+ "extensions": [
+ "kon"
+ ]
+ },
+ "application/vnd.kde.kpresenter": {
+ "source": "iana",
+ "extensions": [
+ "kpr",
+ "kpt"
+ ]
+ },
+ "application/vnd.kde.kspread": {
+ "source": "iana",
+ "extensions": [
+ "ksp"
+ ]
+ },
+ "application/vnd.kde.kword": {
+ "source": "iana",
+ "extensions": [
+ "kwd",
+ "kwt"
+ ]
+ },
+ "application/vnd.kenameaapp": {
+ "source": "iana",
+ "extensions": [
+ "htke"
+ ]
+ },
+ "application/vnd.kidspiration": {
+ "source": "iana",
+ "extensions": [
+ "kia"
+ ]
+ },
+ "application/vnd.kinar": {
+ "source": "iana",
+ "extensions": [
+ "kne",
+ "knp"
+ ]
+ },
+ "application/vnd.koan": {
+ "source": "iana",
+ "extensions": [
+ "skp",
+ "skd",
+ "skt",
+ "skm"
+ ]
+ },
+ "application/vnd.kodak-descriptor": {
+ "source": "iana",
+ "extensions": [
+ "sse"
+ ]
+ },
+ "application/vnd.las": {
+ "source": "iana"
+ },
+ "application/vnd.las.las+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.las.las+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "lasxml"
+ ]
+ },
+ "application/vnd.laszip": {
+ "source": "iana"
+ },
+ "application/vnd.ldev.productlicensing": {
+ "source": "iana"
+ },
+ "application/vnd.leap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.liberty-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.llamagraphics.life-balance.desktop": {
+ "source": "iana",
+ "extensions": [
+ "lbd"
+ ]
+ },
+ "application/vnd.llamagraphics.life-balance.exchange+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "lbe"
+ ]
+ },
+ "application/vnd.logipipe.circuit+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.loom": {
+ "source": "iana"
+ },
+ "application/vnd.lotus-1-2-3": {
+ "source": "iana",
+ "extensions": [
+ "123"
+ ]
+ },
+ "application/vnd.lotus-approach": {
+ "source": "iana",
+ "extensions": [
+ "apr"
+ ]
+ },
+ "application/vnd.lotus-freelance": {
+ "source": "iana",
+ "extensions": [
+ "pre"
+ ]
+ },
+ "application/vnd.lotus-notes": {
+ "source": "iana",
+ "extensions": [
+ "nsf"
+ ]
+ },
+ "application/vnd.lotus-organizer": {
+ "source": "iana",
+ "extensions": [
+ "org"
+ ]
+ },
+ "application/vnd.lotus-screencam": {
+ "source": "iana",
+ "extensions": [
+ "scm"
+ ]
+ },
+ "application/vnd.lotus-wordpro": {
+ "source": "iana",
+ "extensions": [
+ "lwp"
+ ]
+ },
+ "application/vnd.macports.portpkg": {
+ "source": "iana",
+ "extensions": [
+ "portpkg"
+ ]
+ },
+ "application/vnd.mapbox-vector-tile": {
+ "source": "iana",
+ "extensions": [
+ "mvt"
+ ]
+ },
+ "application/vnd.marlin.drm.actiontoken+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.marlin.drm.conftoken+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.marlin.drm.license+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.marlin.drm.mdcf": {
+ "source": "iana"
+ },
+ "application/vnd.mason+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.maxar.archive.3tz+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.maxmind.maxmind-db": {
+ "source": "iana"
+ },
+ "application/vnd.mcd": {
+ "source": "iana",
+ "extensions": [
+ "mcd"
+ ]
+ },
+ "application/vnd.mdl": {
+ "source": "iana"
+ },
+ "application/vnd.mdl-mbsdf": {
+ "source": "iana"
+ },
+ "application/vnd.medcalcdata": {
+ "source": "iana",
+ "extensions": [
+ "mc1"
+ ]
+ },
+ "application/vnd.mediastation.cdkey": {
+ "source": "iana",
+ "extensions": [
+ "cdkey"
+ ]
+ },
+ "application/vnd.medicalholodeck.recordxr": {
+ "source": "iana"
+ },
+ "application/vnd.meridian-slingshot": {
+ "source": "iana"
+ },
+ "application/vnd.mermaid": {
+ "source": "iana"
+ },
+ "application/vnd.mfer": {
+ "source": "iana",
+ "extensions": [
+ "mwf"
+ ]
+ },
+ "application/vnd.mfmp": {
+ "source": "iana",
+ "extensions": [
+ "mfm"
+ ]
+ },
+ "application/vnd.micro+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.micrografx.flo": {
+ "source": "iana",
+ "extensions": [
+ "flo"
+ ]
+ },
+ "application/vnd.micrografx.igx": {
+ "source": "iana",
+ "extensions": [
+ "igx"
+ ]
+ },
+ "application/vnd.microsoft.portable-executable": {
+ "source": "iana"
+ },
+ "application/vnd.microsoft.windows.thumbnail-cache": {
+ "source": "iana"
+ },
+ "application/vnd.miele+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.mif": {
+ "source": "iana",
+ "extensions": [
+ "mif"
+ ]
+ },
+ "application/vnd.minisoft-hp3000-save": {
+ "source": "iana"
+ },
+ "application/vnd.mitsubishi.misty-guard.trustweb": {
+ "source": "iana"
+ },
+ "application/vnd.mobius.daf": {
+ "source": "iana",
+ "extensions": [
+ "daf"
+ ]
+ },
+ "application/vnd.mobius.dis": {
+ "source": "iana",
+ "extensions": [
+ "dis"
+ ]
+ },
+ "application/vnd.mobius.mbk": {
+ "source": "iana",
+ "extensions": [
+ "mbk"
+ ]
+ },
+ "application/vnd.mobius.mqy": {
+ "source": "iana",
+ "extensions": [
+ "mqy"
+ ]
+ },
+ "application/vnd.mobius.msl": {
+ "source": "iana",
+ "extensions": [
+ "msl"
+ ]
+ },
+ "application/vnd.mobius.plc": {
+ "source": "iana",
+ "extensions": [
+ "plc"
+ ]
+ },
+ "application/vnd.mobius.txf": {
+ "source": "iana",
+ "extensions": [
+ "txf"
+ ]
+ },
+ "application/vnd.modl": {
+ "source": "iana"
+ },
+ "application/vnd.mophun.application": {
+ "source": "iana",
+ "extensions": [
+ "mpn"
+ ]
+ },
+ "application/vnd.mophun.certificate": {
+ "source": "iana",
+ "extensions": [
+ "mpc"
+ ]
+ },
+ "application/vnd.motorola.flexsuite": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.adsi": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.fis": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.gotap": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.kmr": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.ttc": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.wem": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.iprm": {
+ "source": "iana"
+ },
+ "application/vnd.mozilla.xul+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xul"
+ ]
+ },
+ "application/vnd.ms-3mfdocument": {
+ "source": "iana"
+ },
+ "application/vnd.ms-artgalry": {
+ "source": "iana",
+ "extensions": [
+ "cil"
+ ]
+ },
+ "application/vnd.ms-asf": {
+ "source": "iana"
+ },
+ "application/vnd.ms-cab-compressed": {
+ "source": "iana",
+ "extensions": [
+ "cab"
+ ]
+ },
+ "application/vnd.ms-color.iccprofile": {
+ "source": "apache"
+ },
+ "application/vnd.ms-excel": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "xls",
+ "xlm",
+ "xla",
+ "xlc",
+ "xlt",
+ "xlw"
+ ]
+ },
+ "application/vnd.ms-excel.addin.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "xlam"
+ ]
+ },
+ "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "xlsb"
+ ]
+ },
+ "application/vnd.ms-excel.sheet.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "xlsm"
+ ]
+ },
+ "application/vnd.ms-excel.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "xltm"
+ ]
+ },
+ "application/vnd.ms-fontobject": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "eot"
+ ]
+ },
+ "application/vnd.ms-htmlhelp": {
+ "source": "iana",
+ "extensions": [
+ "chm"
+ ]
+ },
+ "application/vnd.ms-ims": {
+ "source": "iana",
+ "extensions": [
+ "ims"
+ ]
+ },
+ "application/vnd.ms-lrm": {
+ "source": "iana",
+ "extensions": [
+ "lrm"
+ ]
+ },
+ "application/vnd.ms-office.activex+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-officetheme": {
+ "source": "iana",
+ "extensions": [
+ "thmx"
+ ]
+ },
+ "application/vnd.ms-opentype": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.ms-outlook": {
+ "compressible": false,
+ "extensions": [
+ "msg"
+ ]
+ },
+ "application/vnd.ms-package.obfuscated-opentype": {
+ "source": "apache"
+ },
+ "application/vnd.ms-pki.seccat": {
+ "source": "apache",
+ "extensions": [
+ "cat"
+ ]
+ },
+ "application/vnd.ms-pki.stl": {
+ "source": "apache",
+ "extensions": [
+ "stl"
+ ]
+ },
+ "application/vnd.ms-playready.initiator+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-powerpoint": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "ppt",
+ "pps",
+ "pot"
+ ]
+ },
+ "application/vnd.ms-powerpoint.addin.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "ppam"
+ ]
+ },
+ "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "pptm"
+ ]
+ },
+ "application/vnd.ms-powerpoint.slide.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "sldm"
+ ]
+ },
+ "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "ppsm"
+ ]
+ },
+ "application/vnd.ms-powerpoint.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "potm"
+ ]
+ },
+ "application/vnd.ms-printdevicecapabilities+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-printing.printticket+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.ms-printschematicket+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-project": {
+ "source": "iana",
+ "extensions": [
+ "mpp",
+ "mpt"
+ ]
+ },
+ "application/vnd.ms-tnef": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.devicepairing": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.nwprinting.oob": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.printerpairing": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.wsd.oob": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.lic-chlg-req": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.lic-resp": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.meter-chlg-req": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.meter-resp": {
+ "source": "iana"
+ },
+ "application/vnd.ms-word.document.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "docm"
+ ]
+ },
+ "application/vnd.ms-word.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": [
+ "dotm"
+ ]
+ },
+ "application/vnd.ms-works": {
+ "source": "iana",
+ "extensions": [
+ "wps",
+ "wks",
+ "wcm",
+ "wdb"
+ ]
+ },
+ "application/vnd.ms-wpl": {
+ "source": "iana",
+ "extensions": [
+ "wpl"
+ ]
+ },
+ "application/vnd.ms-xpsdocument": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "xps"
+ ]
+ },
+ "application/vnd.msa-disk-image": {
+ "source": "iana"
+ },
+ "application/vnd.mseq": {
+ "source": "iana",
+ "extensions": [
+ "mseq"
+ ]
+ },
+ "application/vnd.msgpack": {
+ "source": "iana"
+ },
+ "application/vnd.msign": {
+ "source": "iana"
+ },
+ "application/vnd.multiad.creator": {
+ "source": "iana"
+ },
+ "application/vnd.multiad.creator.cif": {
+ "source": "iana"
+ },
+ "application/vnd.music-niff": {
+ "source": "iana"
+ },
+ "application/vnd.musician": {
+ "source": "iana",
+ "extensions": [
+ "mus"
+ ]
+ },
+ "application/vnd.muvee.style": {
+ "source": "iana",
+ "extensions": [
+ "msty"
+ ]
+ },
+ "application/vnd.mynfc": {
+ "source": "iana",
+ "extensions": [
+ "taglet"
+ ]
+ },
+ "application/vnd.nacamar.ybrid+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nato.bindingdataobject+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.nato.bindingdataobject+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nato.bindingdataobject+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "bdo"
+ ]
+ },
+ "application/vnd.nato.openxmlformats-package.iepd+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.ncd.control": {
+ "source": "iana"
+ },
+ "application/vnd.ncd.reference": {
+ "source": "iana"
+ },
+ "application/vnd.nearst.inv+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nebumind.line": {
+ "source": "iana"
+ },
+ "application/vnd.nervana": {
+ "source": "iana"
+ },
+ "application/vnd.netfpx": {
+ "source": "iana"
+ },
+ "application/vnd.neurolanguage.nlu": {
+ "source": "iana",
+ "extensions": [
+ "nlu"
+ ]
+ },
+ "application/vnd.nimn": {
+ "source": "iana"
+ },
+ "application/vnd.nintendo.nitro.rom": {
+ "source": "iana"
+ },
+ "application/vnd.nintendo.snes.rom": {
+ "source": "iana"
+ },
+ "application/vnd.nitf": {
+ "source": "iana",
+ "extensions": [
+ "ntf",
+ "nitf"
+ ]
+ },
+ "application/vnd.noblenet-directory": {
+ "source": "iana",
+ "extensions": [
+ "nnd"
+ ]
+ },
+ "application/vnd.noblenet-sealer": {
+ "source": "iana",
+ "extensions": [
+ "nns"
+ ]
+ },
+ "application/vnd.noblenet-web": {
+ "source": "iana",
+ "extensions": [
+ "nnw"
+ ]
+ },
+ "application/vnd.nokia.catalogs": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.conml+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.conml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.iptv.config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.isds-radio-presets": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmark+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmark+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.landmarkcollection+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.n-gage.ac+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ac"
+ ]
+ },
+ "application/vnd.nokia.n-gage.data": {
+ "source": "iana",
+ "extensions": [
+ "ngdat"
+ ]
+ },
+ "application/vnd.nokia.n-gage.symbian.install": {
+ "source": "apache",
+ "extensions": [
+ "n-gage"
+ ]
+ },
+ "application/vnd.nokia.ncd": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.pcd+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.pcd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.radio-preset": {
+ "source": "iana",
+ "extensions": [
+ "rpst"
+ ]
+ },
+ "application/vnd.nokia.radio-presets": {
+ "source": "iana",
+ "extensions": [
+ "rpss"
+ ]
+ },
+ "application/vnd.novadigm.edm": {
+ "source": "iana",
+ "extensions": [
+ "edm"
+ ]
+ },
+ "application/vnd.novadigm.edx": {
+ "source": "iana",
+ "extensions": [
+ "edx"
+ ]
+ },
+ "application/vnd.novadigm.ext": {
+ "source": "iana",
+ "extensions": [
+ "ext"
+ ]
+ },
+ "application/vnd.ntt-local.content-share": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.file-transfer": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.ogw_remote-access": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.sip-ta_remote": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.sip-ta_tcp_stream": {
+ "source": "iana"
+ },
+ "application/vnd.oai.workflows": {
+ "source": "iana"
+ },
+ "application/vnd.oai.workflows+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oai.workflows+yaml": {
+ "source": "iana"
+ },
+ "application/vnd.oasis.opendocument.base": {
+ "source": "iana"
+ },
+ "application/vnd.oasis.opendocument.chart": {
+ "source": "iana",
+ "extensions": [
+ "odc"
+ ]
+ },
+ "application/vnd.oasis.opendocument.chart-template": {
+ "source": "iana",
+ "extensions": [
+ "otc"
+ ]
+ },
+ "application/vnd.oasis.opendocument.database": {
+ "source": "apache",
+ "extensions": [
+ "odb"
+ ]
+ },
+ "application/vnd.oasis.opendocument.formula": {
+ "source": "iana",
+ "extensions": [
+ "odf"
+ ]
+ },
+ "application/vnd.oasis.opendocument.formula-template": {
+ "source": "iana",
+ "extensions": [
+ "odft"
+ ]
+ },
+ "application/vnd.oasis.opendocument.graphics": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "odg"
+ ]
+ },
+ "application/vnd.oasis.opendocument.graphics-template": {
+ "source": "iana",
+ "extensions": [
+ "otg"
+ ]
+ },
+ "application/vnd.oasis.opendocument.image": {
+ "source": "iana",
+ "extensions": [
+ "odi"
+ ]
+ },
+ "application/vnd.oasis.opendocument.image-template": {
+ "source": "iana",
+ "extensions": [
+ "oti"
+ ]
+ },
+ "application/vnd.oasis.opendocument.presentation": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "odp"
+ ]
+ },
+ "application/vnd.oasis.opendocument.presentation-template": {
+ "source": "iana",
+ "extensions": [
+ "otp"
+ ]
+ },
+ "application/vnd.oasis.opendocument.spreadsheet": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "ods"
+ ]
+ },
+ "application/vnd.oasis.opendocument.spreadsheet-template": {
+ "source": "iana",
+ "extensions": [
+ "ots"
+ ]
+ },
+ "application/vnd.oasis.opendocument.text": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "odt"
+ ]
+ },
+ "application/vnd.oasis.opendocument.text-master": {
+ "source": "iana",
+ "extensions": [
+ "odm"
+ ]
+ },
+ "application/vnd.oasis.opendocument.text-master-template": {
+ "source": "iana"
+ },
+ "application/vnd.oasis.opendocument.text-template": {
+ "source": "iana",
+ "extensions": [
+ "ott"
+ ]
+ },
+ "application/vnd.oasis.opendocument.text-web": {
+ "source": "iana",
+ "extensions": [
+ "oth"
+ ]
+ },
+ "application/vnd.obn": {
+ "source": "iana"
+ },
+ "application/vnd.ocf+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.oci.image.manifest.v1+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oftn.l10n+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.contentaccessdownload+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.contentaccessstreaming+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.cspg-hexbinary": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.dae.svg+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.dae.xhtml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.mippvcontrolmessage+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.pae.gem": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.spdiscovery+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.spdlist+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.ueprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.userprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.olpc-sugar": {
+ "source": "iana",
+ "extensions": [
+ "xo"
+ ]
+ },
+ "application/vnd.oma-scws-config": {
+ "source": "iana"
+ },
+ "application/vnd.oma-scws-http-request": {
+ "source": "iana"
+ },
+ "application/vnd.oma-scws-http-response": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.drm-trigger+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.imd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.ltkm": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.notification+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.provisioningtrigger": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgboot": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgdd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.sgdu": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.simple-symbol-container": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.smartcard-trigger+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.sprov+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.stkm": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-address-book+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-feature-handler+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-pcc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-subs-invite+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-user-prefs+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.dcd": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dcdc": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dd2+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "dd2"
+ ]
+ },
+ "application/vnd.oma.drm.risd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.group-usage-list+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.lwm2m+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.oma.lwm2m+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.lwm2m+tlv": {
+ "source": "iana"
+ },
+ "application/vnd.oma.pal+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.detailed-progress-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.final-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.groups+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.invocation-descriptor+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.optimized-progress-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.push": {
+ "source": "iana"
+ },
+ "application/vnd.oma.scidm.messages+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.xcap-directory+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.omads-email+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.omads-file+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.omads-folder+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.omaloc-supl-init": {
+ "source": "iana"
+ },
+ "application/vnd.onepager": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertamp": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertamx": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertat": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertatp": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertatx": {
+ "source": "iana"
+ },
+ "application/vnd.onvif.metadata": {
+ "source": "iana"
+ },
+ "application/vnd.openblox.game+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "obgx"
+ ]
+ },
+ "application/vnd.openblox.game-binary": {
+ "source": "iana"
+ },
+ "application/vnd.openeye.oeb": {
+ "source": "iana"
+ },
+ "application/vnd.openofficeorg.extension": {
+ "source": "apache",
+ "extensions": [
+ "oxt"
+ ]
+ },
+ "application/vnd.openstreetmap.data+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "osm"
+ ]
+ },
+ "application/vnd.opentimestamps.ots": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawing+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "pptx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slide": {
+ "source": "iana",
+ "extensions": [
+ "sldx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
+ "source": "iana",
+ "extensions": [
+ "ppsx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.template": {
+ "source": "iana",
+ "extensions": [
+ "potx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "xlsx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
+ "source": "iana",
+ "extensions": [
+ "xltx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.theme+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.vmldrawing": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "docx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
+ "source": "iana",
+ "extensions": [
+ "dotx"
+ ]
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-package.core-properties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-package.relationships+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oracle.resource+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.orange.indata": {
+ "source": "iana"
+ },
+ "application/vnd.osa.netdeploy": {
+ "source": "iana"
+ },
+ "application/vnd.osgeo.mapguide.package": {
+ "source": "iana",
+ "extensions": [
+ "mgp"
+ ]
+ },
+ "application/vnd.osgi.bundle": {
+ "source": "iana"
+ },
+ "application/vnd.osgi.dp": {
+ "source": "iana",
+ "extensions": [
+ "dp"
+ ]
+ },
+ "application/vnd.osgi.subsystem": {
+ "source": "iana",
+ "extensions": [
+ "esa"
+ ]
+ },
+ "application/vnd.otps.ct-kip+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oxli.countgraph": {
+ "source": "iana"
+ },
+ "application/vnd.pagerduty+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.palm": {
+ "source": "iana",
+ "extensions": [
+ "pdb",
+ "pqa",
+ "oprc"
+ ]
+ },
+ "application/vnd.panoply": {
+ "source": "iana"
+ },
+ "application/vnd.paos.xml": {
+ "source": "iana"
+ },
+ "application/vnd.patentdive": {
+ "source": "iana"
+ },
+ "application/vnd.patientecommsdoc": {
+ "source": "iana"
+ },
+ "application/vnd.pawaafile": {
+ "source": "iana",
+ "extensions": [
+ "paw"
+ ]
+ },
+ "application/vnd.pcos": {
+ "source": "iana"
+ },
+ "application/vnd.pg.format": {
+ "source": "iana",
+ "extensions": [
+ "str"
+ ]
+ },
+ "application/vnd.pg.osasli": {
+ "source": "iana",
+ "extensions": [
+ "ei6"
+ ]
+ },
+ "application/vnd.piaccess.application-licence": {
+ "source": "iana"
+ },
+ "application/vnd.picsel": {
+ "source": "iana",
+ "extensions": [
+ "efif"
+ ]
+ },
+ "application/vnd.pmi.widget": {
+ "source": "iana",
+ "extensions": [
+ "wg"
+ ]
+ },
+ "application/vnd.poc.group-advertisement+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.pocketlearn": {
+ "source": "iana",
+ "extensions": [
+ "plf"
+ ]
+ },
+ "application/vnd.powerbuilder6": {
+ "source": "iana",
+ "extensions": [
+ "pbd"
+ ]
+ },
+ "application/vnd.powerbuilder6-s": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder7": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder7-s": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder75": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder75-s": {
+ "source": "iana"
+ },
+ "application/vnd.preminet": {
+ "source": "iana"
+ },
+ "application/vnd.previewsystems.box": {
+ "source": "iana",
+ "extensions": [
+ "box"
+ ]
+ },
+ "application/vnd.proteus.magazine": {
+ "source": "iana",
+ "extensions": [
+ "mgz"
+ ]
+ },
+ "application/vnd.psfs": {
+ "source": "iana"
+ },
+ "application/vnd.pt.mundusmundi": {
+ "source": "iana"
+ },
+ "application/vnd.publishare-delta-tree": {
+ "source": "iana",
+ "extensions": [
+ "qps"
+ ]
+ },
+ "application/vnd.pvi.ptid1": {
+ "source": "iana",
+ "extensions": [
+ "ptid"
+ ]
+ },
+ "application/vnd.pwg-multiplexed": {
+ "source": "iana"
+ },
+ "application/vnd.pwg-xhtml-print+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xhtm"
+ ]
+ },
+ "application/vnd.qualcomm.brew-app-res": {
+ "source": "iana"
+ },
+ "application/vnd.quarantainenet": {
+ "source": "iana"
+ },
+ "application/vnd.quark.quarkxpress": {
+ "source": "iana",
+ "extensions": [
+ "qxd",
+ "qxt",
+ "qwd",
+ "qwt",
+ "qxl",
+ "qxb"
+ ]
+ },
+ "application/vnd.quobject-quoxdocument": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.moml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-conf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-conn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-dialog+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-stream+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-conf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-base+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-fax-detect+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-group+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-speech+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-transform+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.rainstor.data": {
+ "source": "iana"
+ },
+ "application/vnd.rapid": {
+ "source": "iana"
+ },
+ "application/vnd.rar": {
+ "source": "iana",
+ "extensions": [
+ "rar"
+ ]
+ },
+ "application/vnd.realvnc.bed": {
+ "source": "iana",
+ "extensions": [
+ "bed"
+ ]
+ },
+ "application/vnd.recordare.musicxml": {
+ "source": "iana",
+ "extensions": [
+ "mxl"
+ ]
+ },
+ "application/vnd.recordare.musicxml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "musicxml"
+ ]
+ },
+ "application/vnd.relpipe": {
+ "source": "iana"
+ },
+ "application/vnd.renlearn.rlprint": {
+ "source": "iana"
+ },
+ "application/vnd.resilient.logic": {
+ "source": "iana"
+ },
+ "application/vnd.restful+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.rig.cryptonote": {
+ "source": "iana",
+ "extensions": [
+ "cryptonote"
+ ]
+ },
+ "application/vnd.rim.cod": {
+ "source": "apache",
+ "extensions": [
+ "cod"
+ ]
+ },
+ "application/vnd.rn-realmedia": {
+ "source": "apache",
+ "extensions": [
+ "rm"
+ ]
+ },
+ "application/vnd.rn-realmedia-vbr": {
+ "source": "apache",
+ "extensions": [
+ "rmvb"
+ ]
+ },
+ "application/vnd.route66.link66+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "link66"
+ ]
+ },
+ "application/vnd.rs-274x": {
+ "source": "iana"
+ },
+ "application/vnd.ruckus.download": {
+ "source": "iana"
+ },
+ "application/vnd.s3sms": {
+ "source": "iana"
+ },
+ "application/vnd.sailingtracker.track": {
+ "source": "iana",
+ "extensions": [
+ "st"
+ ]
+ },
+ "application/vnd.sar": {
+ "source": "iana"
+ },
+ "application/vnd.sbm.cid": {
+ "source": "iana"
+ },
+ "application/vnd.sbm.mid2": {
+ "source": "iana"
+ },
+ "application/vnd.scribus": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.3df": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.csf": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.doc": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.eml": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.mht": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.net": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.ppt": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.tiff": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.xls": {
+ "source": "iana"
+ },
+ "application/vnd.sealedmedia.softseal.html": {
+ "source": "iana"
+ },
+ "application/vnd.sealedmedia.softseal.pdf": {
+ "source": "iana"
+ },
+ "application/vnd.seemail": {
+ "source": "iana",
+ "extensions": [
+ "see"
+ ]
+ },
+ "application/vnd.seis+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.sema": {
+ "source": "iana",
+ "extensions": [
+ "sema"
+ ]
+ },
+ "application/vnd.semd": {
+ "source": "iana",
+ "extensions": [
+ "semd"
+ ]
+ },
+ "application/vnd.semf": {
+ "source": "iana",
+ "extensions": [
+ "semf"
+ ]
+ },
+ "application/vnd.shade-save-file": {
+ "source": "iana"
+ },
+ "application/vnd.shana.informed.formdata": {
+ "source": "iana",
+ "extensions": [
+ "ifm"
+ ]
+ },
+ "application/vnd.shana.informed.formtemplate": {
+ "source": "iana",
+ "extensions": [
+ "itp"
+ ]
+ },
+ "application/vnd.shana.informed.interchange": {
+ "source": "iana",
+ "extensions": [
+ "iif"
+ ]
+ },
+ "application/vnd.shana.informed.package": {
+ "source": "iana",
+ "extensions": [
+ "ipk"
+ ]
+ },
+ "application/vnd.shootproof+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.shopkick+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.shp": {
+ "source": "iana"
+ },
+ "application/vnd.shx": {
+ "source": "iana"
+ },
+ "application/vnd.sigrok.session": {
+ "source": "iana"
+ },
+ "application/vnd.simtech-mindmapper": {
+ "source": "iana",
+ "extensions": [
+ "twd",
+ "twds"
+ ]
+ },
+ "application/vnd.siren+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.smaf": {
+ "source": "iana",
+ "extensions": [
+ "mmf"
+ ]
+ },
+ "application/vnd.smart.notebook": {
+ "source": "iana"
+ },
+ "application/vnd.smart.teacher": {
+ "source": "iana",
+ "extensions": [
+ "teacher"
+ ]
+ },
+ "application/vnd.smintio.portals.archive": {
+ "source": "iana"
+ },
+ "application/vnd.snesdev-page-table": {
+ "source": "iana"
+ },
+ "application/vnd.software602.filler.form+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "fo"
+ ]
+ },
+ "application/vnd.software602.filler.form-xml-zip": {
+ "source": "iana"
+ },
+ "application/vnd.solent.sdkm+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "sdkm",
+ "sdkd"
+ ]
+ },
+ "application/vnd.spotfire.dxp": {
+ "source": "iana",
+ "extensions": [
+ "dxp"
+ ]
+ },
+ "application/vnd.spotfire.sfs": {
+ "source": "iana",
+ "extensions": [
+ "sfs"
+ ]
+ },
+ "application/vnd.sqlite3": {
+ "source": "iana"
+ },
+ "application/vnd.sss-cod": {
+ "source": "iana"
+ },
+ "application/vnd.sss-dtf": {
+ "source": "iana"
+ },
+ "application/vnd.sss-ntf": {
+ "source": "iana"
+ },
+ "application/vnd.stardivision.calc": {
+ "source": "apache",
+ "extensions": [
+ "sdc"
+ ]
+ },
+ "application/vnd.stardivision.draw": {
+ "source": "apache",
+ "extensions": [
+ "sda"
+ ]
+ },
+ "application/vnd.stardivision.impress": {
+ "source": "apache",
+ "extensions": [
+ "sdd"
+ ]
+ },
+ "application/vnd.stardivision.math": {
+ "source": "apache",
+ "extensions": [
+ "smf"
+ ]
+ },
+ "application/vnd.stardivision.writer": {
+ "source": "apache",
+ "extensions": [
+ "sdw",
+ "vor"
+ ]
+ },
+ "application/vnd.stardivision.writer-global": {
+ "source": "apache",
+ "extensions": [
+ "sgl"
+ ]
+ },
+ "application/vnd.stepmania.package": {
+ "source": "iana",
+ "extensions": [
+ "smzip"
+ ]
+ },
+ "application/vnd.stepmania.stepchart": {
+ "source": "iana",
+ "extensions": [
+ "sm"
+ ]
+ },
+ "application/vnd.street-stream": {
+ "source": "iana"
+ },
+ "application/vnd.sun.wadl+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "wadl"
+ ]
+ },
+ "application/vnd.sun.xml.calc": {
+ "source": "apache",
+ "extensions": [
+ "sxc"
+ ]
+ },
+ "application/vnd.sun.xml.calc.template": {
+ "source": "apache",
+ "extensions": [
+ "stc"
+ ]
+ },
+ "application/vnd.sun.xml.draw": {
+ "source": "apache",
+ "extensions": [
+ "sxd"
+ ]
+ },
+ "application/vnd.sun.xml.draw.template": {
+ "source": "apache",
+ "extensions": [
+ "std"
+ ]
+ },
+ "application/vnd.sun.xml.impress": {
+ "source": "apache",
+ "extensions": [
+ "sxi"
+ ]
+ },
+ "application/vnd.sun.xml.impress.template": {
+ "source": "apache",
+ "extensions": [
+ "sti"
+ ]
+ },
+ "application/vnd.sun.xml.math": {
+ "source": "apache",
+ "extensions": [
+ "sxm"
+ ]
+ },
+ "application/vnd.sun.xml.writer": {
+ "source": "apache",
+ "extensions": [
+ "sxw"
+ ]
+ },
+ "application/vnd.sun.xml.writer.global": {
+ "source": "apache",
+ "extensions": [
+ "sxg"
+ ]
+ },
+ "application/vnd.sun.xml.writer.template": {
+ "source": "apache",
+ "extensions": [
+ "stw"
+ ]
+ },
+ "application/vnd.sus-calendar": {
+ "source": "iana",
+ "extensions": [
+ "sus",
+ "susp"
+ ]
+ },
+ "application/vnd.svd": {
+ "source": "iana",
+ "extensions": [
+ "svd"
+ ]
+ },
+ "application/vnd.swiftview-ics": {
+ "source": "iana"
+ },
+ "application/vnd.sybyl.mol2": {
+ "source": "iana"
+ },
+ "application/vnd.sycle+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.syft+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.symbian.install": {
+ "source": "apache",
+ "extensions": [
+ "sis",
+ "sisx"
+ ]
+ },
+ "application/vnd.syncml+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "xsm"
+ ]
+ },
+ "application/vnd.syncml.dm+wbxml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": [
+ "bdm"
+ ]
+ },
+ "application/vnd.syncml.dm+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "xdm"
+ ]
+ },
+ "application/vnd.syncml.dm.notification": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmddf+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmddf+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "ddf"
+ ]
+ },
+ "application/vnd.syncml.dmtnds+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmtnds+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.syncml.ds.notification": {
+ "source": "iana"
+ },
+ "application/vnd.tableschema+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.tao.intent-module-archive": {
+ "source": "iana",
+ "extensions": [
+ "tao"
+ ]
+ },
+ "application/vnd.tcpdump.pcap": {
+ "source": "iana",
+ "extensions": [
+ "pcap",
+ "cap",
+ "dmp"
+ ]
+ },
+ "application/vnd.think-cell.ppttc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.tmd.mediaflex.api+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.tml": {
+ "source": "iana"
+ },
+ "application/vnd.tmobile-livetv": {
+ "source": "iana",
+ "extensions": [
+ "tmo"
+ ]
+ },
+ "application/vnd.tri.onesource": {
+ "source": "iana"
+ },
+ "application/vnd.trid.tpt": {
+ "source": "iana",
+ "extensions": [
+ "tpt"
+ ]
+ },
+ "application/vnd.triscape.mxs": {
+ "source": "iana",
+ "extensions": [
+ "mxs"
+ ]
+ },
+ "application/vnd.trueapp": {
+ "source": "iana",
+ "extensions": [
+ "tra"
+ ]
+ },
+ "application/vnd.truedoc": {
+ "source": "iana"
+ },
+ "application/vnd.ubisoft.webplayer": {
+ "source": "iana"
+ },
+ "application/vnd.ufdl": {
+ "source": "iana",
+ "extensions": [
+ "ufd",
+ "ufdl"
+ ]
+ },
+ "application/vnd.uiq.theme": {
+ "source": "iana",
+ "extensions": [
+ "utz"
+ ]
+ },
+ "application/vnd.umajin": {
+ "source": "iana",
+ "extensions": [
+ "umj"
+ ]
+ },
+ "application/vnd.unity": {
+ "source": "iana",
+ "extensions": [
+ "unityweb"
+ ]
+ },
+ "application/vnd.uoml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "uoml",
+ "uo"
+ ]
+ },
+ "application/vnd.uplanet.alert": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.alert-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.bearer-choice": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.bearer-choice-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.cacheop": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.cacheop-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.channel": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.channel-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.list": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.list-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.listcmd": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.listcmd-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.signal": {
+ "source": "iana"
+ },
+ "application/vnd.uri-map": {
+ "source": "iana"
+ },
+ "application/vnd.valve.source.material": {
+ "source": "iana"
+ },
+ "application/vnd.vcx": {
+ "source": "iana",
+ "extensions": [
+ "vcx"
+ ]
+ },
+ "application/vnd.vd-study": {
+ "source": "iana"
+ },
+ "application/vnd.vectorworks": {
+ "source": "iana"
+ },
+ "application/vnd.vel+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.verimatrix.vcas": {
+ "source": "iana"
+ },
+ "application/vnd.veritone.aion+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.veryant.thin": {
+ "source": "iana"
+ },
+ "application/vnd.ves.encrypted": {
+ "source": "iana"
+ },
+ "application/vnd.vidsoft.vidconference": {
+ "source": "iana"
+ },
+ "application/vnd.visio": {
+ "source": "iana",
+ "extensions": [
+ "vsd",
+ "vst",
+ "vss",
+ "vsw"
+ ]
+ },
+ "application/vnd.visionary": {
+ "source": "iana",
+ "extensions": [
+ "vis"
+ ]
+ },
+ "application/vnd.vividence.scriptfile": {
+ "source": "iana"
+ },
+ "application/vnd.vsf": {
+ "source": "iana",
+ "extensions": [
+ "vsf"
+ ]
+ },
+ "application/vnd.wap.sic": {
+ "source": "iana"
+ },
+ "application/vnd.wap.slc": {
+ "source": "iana"
+ },
+ "application/vnd.wap.wbxml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": [
+ "wbxml"
+ ]
+ },
+ "application/vnd.wap.wmlc": {
+ "source": "iana",
+ "extensions": [
+ "wmlc"
+ ]
+ },
+ "application/vnd.wap.wmlscriptc": {
+ "source": "iana",
+ "extensions": [
+ "wmlsc"
+ ]
+ },
+ "application/vnd.wasmflow.wafl": {
+ "source": "iana"
+ },
+ "application/vnd.webturbo": {
+ "source": "iana",
+ "extensions": [
+ "wtb"
+ ]
+ },
+ "application/vnd.wfa.dpp": {
+ "source": "iana"
+ },
+ "application/vnd.wfa.p2p": {
+ "source": "iana"
+ },
+ "application/vnd.wfa.wsc": {
+ "source": "iana"
+ },
+ "application/vnd.windows.devicepairing": {
+ "source": "iana"
+ },
+ "application/vnd.wmc": {
+ "source": "iana"
+ },
+ "application/vnd.wmf.bootstrap": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.mathematica": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.mathematica.package": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.player": {
+ "source": "iana",
+ "extensions": [
+ "nbp"
+ ]
+ },
+ "application/vnd.wordlift": {
+ "source": "iana"
+ },
+ "application/vnd.wordperfect": {
+ "source": "iana",
+ "extensions": [
+ "wpd"
+ ]
+ },
+ "application/vnd.wqd": {
+ "source": "iana",
+ "extensions": [
+ "wqd"
+ ]
+ },
+ "application/vnd.wrq-hp3000-labelled": {
+ "source": "iana"
+ },
+ "application/vnd.wt.stf": {
+ "source": "iana",
+ "extensions": [
+ "stf"
+ ]
+ },
+ "application/vnd.wv.csp+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.wv.csp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.wv.ssp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xacml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xara": {
+ "source": "iana",
+ "extensions": [
+ "xar"
+ ]
+ },
+ "application/vnd.xecrets-encrypted": {
+ "source": "iana"
+ },
+ "application/vnd.xfdl": {
+ "source": "iana",
+ "extensions": [
+ "xfdl"
+ ]
+ },
+ "application/vnd.xfdl.webform": {
+ "source": "iana"
+ },
+ "application/vnd.xmi+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xmpie.cpkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.dpkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.plan": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.ppkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.xlim": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.hv-dic": {
+ "source": "iana",
+ "extensions": [
+ "hvd"
+ ]
+ },
+ "application/vnd.yamaha.hv-script": {
+ "source": "iana",
+ "extensions": [
+ "hvs"
+ ]
+ },
+ "application/vnd.yamaha.hv-voice": {
+ "source": "iana",
+ "extensions": [
+ "hvp"
+ ]
+ },
+ "application/vnd.yamaha.openscoreformat": {
+ "source": "iana",
+ "extensions": [
+ "osf"
+ ]
+ },
+ "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "osfpvg"
+ ]
+ },
+ "application/vnd.yamaha.remote-setup": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.smaf-audio": {
+ "source": "iana",
+ "extensions": [
+ "saf"
+ ]
+ },
+ "application/vnd.yamaha.smaf-phrase": {
+ "source": "iana",
+ "extensions": [
+ "spf"
+ ]
+ },
+ "application/vnd.yamaha.through-ngn": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.tunnel-udpencap": {
+ "source": "iana"
+ },
+ "application/vnd.yaoweme": {
+ "source": "iana"
+ },
+ "application/vnd.yellowriver-custom-menu": {
+ "source": "iana",
+ "extensions": [
+ "cmp"
+ ]
+ },
+ "application/vnd.zul": {
+ "source": "iana",
+ "extensions": [
+ "zir",
+ "zirz"
+ ]
+ },
+ "application/vnd.zzazz.deck+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "zaz"
+ ]
+ },
+ "application/voicexml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "vxml"
+ ]
+ },
+ "application/voucher-cms+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vp": {
+ "source": "iana"
+ },
+ "application/vq-rtcpxr": {
+ "source": "iana"
+ },
+ "application/wasm": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "wasm"
+ ]
+ },
+ "application/watcherinfo+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "wif"
+ ]
+ },
+ "application/webpush-options+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/whoispp-query": {
+ "source": "iana"
+ },
+ "application/whoispp-response": {
+ "source": "iana"
+ },
+ "application/widget": {
+ "source": "iana",
+ "extensions": [
+ "wgt"
+ ]
+ },
+ "application/winhlp": {
+ "source": "apache",
+ "extensions": [
+ "hlp"
+ ]
+ },
+ "application/wita": {
+ "source": "iana"
+ },
+ "application/wordperfect5.1": {
+ "source": "iana"
+ },
+ "application/wsdl+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "wsdl"
+ ]
+ },
+ "application/wspolicy+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "wspolicy"
+ ]
+ },
+ "application/x-7z-compressed": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "7z"
+ ]
+ },
+ "application/x-abiword": {
+ "source": "apache",
+ "extensions": [
+ "abw"
+ ]
+ },
+ "application/x-ace-compressed": {
+ "source": "apache",
+ "extensions": [
+ "ace"
+ ]
+ },
+ "application/x-amf": {
+ "source": "apache"
+ },
+ "application/x-apple-diskimage": {
+ "source": "apache",
+ "extensions": [
+ "dmg"
+ ]
+ },
+ "application/x-arj": {
+ "compressible": false,
+ "extensions": [
+ "arj"
+ ]
+ },
+ "application/x-authorware-bin": {
+ "source": "apache",
+ "extensions": [
+ "aab",
+ "x32",
+ "u32",
+ "vox"
+ ]
+ },
+ "application/x-authorware-map": {
+ "source": "apache",
+ "extensions": [
+ "aam"
+ ]
+ },
+ "application/x-authorware-seg": {
+ "source": "apache",
+ "extensions": [
+ "aas"
+ ]
+ },
+ "application/x-bcpio": {
+ "source": "apache",
+ "extensions": [
+ "bcpio"
+ ]
+ },
+ "application/x-bdoc": {
+ "compressible": false,
+ "extensions": [
+ "bdoc"
+ ]
+ },
+ "application/x-bittorrent": {
+ "source": "apache",
+ "extensions": [
+ "torrent"
+ ]
+ },
+ "application/x-blorb": {
+ "source": "apache",
+ "extensions": [
+ "blb",
+ "blorb"
+ ]
+ },
+ "application/x-bzip": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "bz"
+ ]
+ },
+ "application/x-bzip2": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "bz2",
+ "boz"
+ ]
+ },
+ "application/x-cbr": {
+ "source": "apache",
+ "extensions": [
+ "cbr",
+ "cba",
+ "cbt",
+ "cbz",
+ "cb7"
+ ]
+ },
+ "application/x-cdlink": {
+ "source": "apache",
+ "extensions": [
+ "vcd"
+ ]
+ },
+ "application/x-cfs-compressed": {
+ "source": "apache",
+ "extensions": [
+ "cfs"
+ ]
+ },
+ "application/x-chat": {
+ "source": "apache",
+ "extensions": [
+ "chat"
+ ]
+ },
+ "application/x-chess-pgn": {
+ "source": "apache",
+ "extensions": [
+ "pgn"
+ ]
+ },
+ "application/x-chrome-extension": {
+ "extensions": [
+ "crx"
+ ]
+ },
+ "application/x-cocoa": {
+ "source": "nginx",
+ "extensions": [
+ "cco"
+ ]
+ },
+ "application/x-compress": {
+ "source": "apache"
+ },
+ "application/x-conference": {
+ "source": "apache",
+ "extensions": [
+ "nsc"
+ ]
+ },
+ "application/x-cpio": {
+ "source": "apache",
+ "extensions": [
+ "cpio"
+ ]
+ },
+ "application/x-csh": {
+ "source": "apache",
+ "extensions": [
+ "csh"
+ ]
+ },
+ "application/x-deb": {
+ "compressible": false
+ },
+ "application/x-debian-package": {
+ "source": "apache",
+ "extensions": [
+ "deb",
+ "udeb"
+ ]
+ },
+ "application/x-dgc-compressed": {
+ "source": "apache",
+ "extensions": [
+ "dgc"
+ ]
+ },
+ "application/x-director": {
+ "source": "apache",
+ "extensions": [
+ "dir",
+ "dcr",
+ "dxr",
+ "cst",
+ "cct",
+ "cxt",
+ "w3d",
+ "fgd",
+ "swa"
+ ]
+ },
+ "application/x-doom": {
+ "source": "apache",
+ "extensions": [
+ "wad"
+ ]
+ },
+ "application/x-dtbncx+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "ncx"
+ ]
+ },
+ "application/x-dtbook+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "dtb"
+ ]
+ },
+ "application/x-dtbresource+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "res"
+ ]
+ },
+ "application/x-dvi": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "dvi"
+ ]
+ },
+ "application/x-envoy": {
+ "source": "apache",
+ "extensions": [
+ "evy"
+ ]
+ },
+ "application/x-eva": {
+ "source": "apache",
+ "extensions": [
+ "eva"
+ ]
+ },
+ "application/x-font-bdf": {
+ "source": "apache",
+ "extensions": [
+ "bdf"
+ ]
+ },
+ "application/x-font-dos": {
+ "source": "apache"
+ },
+ "application/x-font-framemaker": {
+ "source": "apache"
+ },
+ "application/x-font-ghostscript": {
+ "source": "apache",
+ "extensions": [
+ "gsf"
+ ]
+ },
+ "application/x-font-libgrx": {
+ "source": "apache"
+ },
+ "application/x-font-linux-psf": {
+ "source": "apache",
+ "extensions": [
+ "psf"
+ ]
+ },
+ "application/x-font-pcf": {
+ "source": "apache",
+ "extensions": [
+ "pcf"
+ ]
+ },
+ "application/x-font-snf": {
+ "source": "apache",
+ "extensions": [
+ "snf"
+ ]
+ },
+ "application/x-font-speedo": {
+ "source": "apache"
+ },
+ "application/x-font-sunos-news": {
+ "source": "apache"
+ },
+ "application/x-font-type1": {
+ "source": "apache",
+ "extensions": [
+ "pfa",
+ "pfb",
+ "pfm",
+ "afm"
+ ]
+ },
+ "application/x-font-vfont": {
+ "source": "apache"
+ },
+ "application/x-freearc": {
+ "source": "apache",
+ "extensions": [
+ "arc"
+ ]
+ },
+ "application/x-futuresplash": {
+ "source": "apache",
+ "extensions": [
+ "spl"
+ ]
+ },
+ "application/x-gca-compressed": {
+ "source": "apache",
+ "extensions": [
+ "gca"
+ ]
+ },
+ "application/x-glulx": {
+ "source": "apache",
+ "extensions": [
+ "ulx"
+ ]
+ },
+ "application/x-gnumeric": {
+ "source": "apache",
+ "extensions": [
+ "gnumeric"
+ ]
+ },
+ "application/x-gramps-xml": {
+ "source": "apache",
+ "extensions": [
+ "gramps"
+ ]
+ },
+ "application/x-gtar": {
+ "source": "apache",
+ "extensions": [
+ "gtar"
+ ]
+ },
+ "application/x-gzip": {
+ "source": "apache"
+ },
+ "application/x-hdf": {
+ "source": "apache",
+ "extensions": [
+ "hdf"
+ ]
+ },
+ "application/x-httpd-php": {
+ "compressible": true,
+ "extensions": [
+ "php"
+ ]
+ },
+ "application/x-install-instructions": {
+ "source": "apache",
+ "extensions": [
+ "install"
+ ]
+ },
+ "application/x-iso9660-image": {
+ "source": "apache",
+ "extensions": [
+ "iso"
+ ]
+ },
+ "application/x-iwork-keynote-sffkey": {
+ "extensions": [
+ "key"
+ ]
+ },
+ "application/x-iwork-numbers-sffnumbers": {
+ "extensions": [
+ "numbers"
+ ]
+ },
+ "application/x-iwork-pages-sffpages": {
+ "extensions": [
+ "pages"
+ ]
+ },
+ "application/x-java-archive-diff": {
+ "source": "nginx",
+ "extensions": [
+ "jardiff"
+ ]
+ },
+ "application/x-java-jnlp-file": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "jnlp"
+ ]
+ },
+ "application/x-javascript": {
+ "compressible": true
+ },
+ "application/x-keepass2": {
+ "extensions": [
+ "kdbx"
+ ]
+ },
+ "application/x-latex": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "latex"
+ ]
+ },
+ "application/x-lua-bytecode": {
+ "extensions": [
+ "luac"
+ ]
+ },
+ "application/x-lzh-compressed": {
+ "source": "apache",
+ "extensions": [
+ "lzh",
+ "lha"
+ ]
+ },
+ "application/x-makeself": {
+ "source": "nginx",
+ "extensions": [
+ "run"
+ ]
+ },
+ "application/x-mie": {
+ "source": "apache",
+ "extensions": [
+ "mie"
+ ]
+ },
+ "application/x-mobipocket-ebook": {
+ "source": "apache",
+ "extensions": [
+ "prc",
+ "mobi"
+ ]
+ },
+ "application/x-mpegurl": {
+ "compressible": false
+ },
+ "application/x-ms-application": {
+ "source": "apache",
+ "extensions": [
+ "application"
+ ]
+ },
+ "application/x-ms-shortcut": {
+ "source": "apache",
+ "extensions": [
+ "lnk"
+ ]
+ },
+ "application/x-ms-wmd": {
+ "source": "apache",
+ "extensions": [
+ "wmd"
+ ]
+ },
+ "application/x-ms-wmz": {
+ "source": "apache",
+ "extensions": [
+ "wmz"
+ ]
+ },
+ "application/x-ms-xbap": {
+ "source": "apache",
+ "extensions": [
+ "xbap"
+ ]
+ },
+ "application/x-msaccess": {
+ "source": "apache",
+ "extensions": [
+ "mdb"
+ ]
+ },
+ "application/x-msbinder": {
+ "source": "apache",
+ "extensions": [
+ "obd"
+ ]
+ },
+ "application/x-mscardfile": {
+ "source": "apache",
+ "extensions": [
+ "crd"
+ ]
+ },
+ "application/x-msclip": {
+ "source": "apache",
+ "extensions": [
+ "clp"
+ ]
+ },
+ "application/x-msdos-program": {
+ "extensions": [
+ "exe"
+ ]
+ },
+ "application/x-msdownload": {
+ "source": "apache",
+ "extensions": [
+ "exe",
+ "dll",
+ "com",
+ "bat",
+ "msi"
+ ]
+ },
+ "application/x-msmediaview": {
+ "source": "apache",
+ "extensions": [
+ "mvb",
+ "m13",
+ "m14"
+ ]
+ },
+ "application/x-msmetafile": {
+ "source": "apache",
+ "extensions": [
+ "wmf",
+ "wmz",
+ "emf",
+ "emz"
+ ]
+ },
+ "application/x-msmoney": {
+ "source": "apache",
+ "extensions": [
+ "mny"
+ ]
+ },
+ "application/x-mspublisher": {
+ "source": "apache",
+ "extensions": [
+ "pub"
+ ]
+ },
+ "application/x-msschedule": {
+ "source": "apache",
+ "extensions": [
+ "scd"
+ ]
+ },
+ "application/x-msterminal": {
+ "source": "apache",
+ "extensions": [
+ "trm"
+ ]
+ },
+ "application/x-mswrite": {
+ "source": "apache",
+ "extensions": [
+ "wri"
+ ]
+ },
+ "application/x-netcdf": {
+ "source": "apache",
+ "extensions": [
+ "nc",
+ "cdf"
+ ]
+ },
+ "application/x-ns-proxy-autoconfig": {
+ "compressible": true,
+ "extensions": [
+ "pac"
+ ]
+ },
+ "application/x-nzb": {
+ "source": "apache",
+ "extensions": [
+ "nzb"
+ ]
+ },
+ "application/x-perl": {
+ "source": "nginx",
+ "extensions": [
+ "pl",
+ "pm"
+ ]
+ },
+ "application/x-pilot": {
+ "source": "nginx",
+ "extensions": [
+ "prc",
+ "pdb"
+ ]
+ },
+ "application/x-pkcs12": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "p12",
+ "pfx"
+ ]
+ },
+ "application/x-pkcs7-certificates": {
+ "source": "apache",
+ "extensions": [
+ "p7b",
+ "spc"
+ ]
+ },
+ "application/x-pkcs7-certreqresp": {
+ "source": "apache",
+ "extensions": [
+ "p7r"
+ ]
+ },
+ "application/x-pki-message": {
+ "source": "iana"
+ },
+ "application/x-rar-compressed": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "rar"
+ ]
+ },
+ "application/x-redhat-package-manager": {
+ "source": "nginx",
+ "extensions": [
+ "rpm"
+ ]
+ },
+ "application/x-research-info-systems": {
+ "source": "apache",
+ "extensions": [
+ "ris"
+ ]
+ },
+ "application/x-sea": {
+ "source": "nginx",
+ "extensions": [
+ "sea"
+ ]
+ },
+ "application/x-sh": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "sh"
+ ]
+ },
+ "application/x-shar": {
+ "source": "apache",
+ "extensions": [
+ "shar"
+ ]
+ },
+ "application/x-shockwave-flash": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "swf"
+ ]
+ },
+ "application/x-silverlight-app": {
+ "source": "apache",
+ "extensions": [
+ "xap"
+ ]
+ },
+ "application/x-sql": {
+ "source": "apache",
+ "extensions": [
+ "sql"
+ ]
+ },
+ "application/x-stuffit": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "sit"
+ ]
+ },
+ "application/x-stuffitx": {
+ "source": "apache",
+ "extensions": [
+ "sitx"
+ ]
+ },
+ "application/x-subrip": {
+ "source": "apache",
+ "extensions": [
+ "srt"
+ ]
+ },
+ "application/x-sv4cpio": {
+ "source": "apache",
+ "extensions": [
+ "sv4cpio"
+ ]
+ },
+ "application/x-sv4crc": {
+ "source": "apache",
+ "extensions": [
+ "sv4crc"
+ ]
+ },
+ "application/x-t3vm-image": {
+ "source": "apache",
+ "extensions": [
+ "t3"
+ ]
+ },
+ "application/x-tads": {
+ "source": "apache",
+ "extensions": [
+ "gam"
+ ]
+ },
+ "application/x-tar": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "tar"
+ ]
+ },
+ "application/x-tcl": {
+ "source": "apache",
+ "extensions": [
+ "tcl",
+ "tk"
+ ]
+ },
+ "application/x-tex": {
+ "source": "apache",
+ "extensions": [
+ "tex"
+ ]
+ },
+ "application/x-tex-tfm": {
+ "source": "apache",
+ "extensions": [
+ "tfm"
+ ]
+ },
+ "application/x-texinfo": {
+ "source": "apache",
+ "extensions": [
+ "texinfo",
+ "texi"
+ ]
+ },
+ "application/x-tgif": {
+ "source": "apache",
+ "extensions": [
+ "obj"
+ ]
+ },
+ "application/x-ustar": {
+ "source": "apache",
+ "extensions": [
+ "ustar"
+ ]
+ },
+ "application/x-virtualbox-hdd": {
+ "compressible": true,
+ "extensions": [
+ "hdd"
+ ]
+ },
+ "application/x-virtualbox-ova": {
+ "compressible": true,
+ "extensions": [
+ "ova"
+ ]
+ },
+ "application/x-virtualbox-ovf": {
+ "compressible": true,
+ "extensions": [
+ "ovf"
+ ]
+ },
+ "application/x-virtualbox-vbox": {
+ "compressible": true,
+ "extensions": [
+ "vbox"
+ ]
+ },
+ "application/x-virtualbox-vbox-extpack": {
+ "compressible": false,
+ "extensions": [
+ "vbox-extpack"
+ ]
+ },
+ "application/x-virtualbox-vdi": {
+ "compressible": true,
+ "extensions": [
+ "vdi"
+ ]
+ },
+ "application/x-virtualbox-vhd": {
+ "compressible": true,
+ "extensions": [
+ "vhd"
+ ]
+ },
+ "application/x-virtualbox-vmdk": {
+ "compressible": true,
+ "extensions": [
+ "vmdk"
+ ]
+ },
+ "application/x-wais-source": {
+ "source": "apache",
+ "extensions": [
+ "src"
+ ]
+ },
+ "application/x-web-app-manifest+json": {
+ "compressible": true,
+ "extensions": [
+ "webapp"
+ ]
+ },
+ "application/x-www-form-urlencoded": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/x-x509-ca-cert": {
+ "source": "iana",
+ "extensions": [
+ "der",
+ "crt",
+ "pem"
+ ]
+ },
+ "application/x-x509-ca-ra-cert": {
+ "source": "iana"
+ },
+ "application/x-x509-next-ca-cert": {
+ "source": "iana"
+ },
+ "application/x-xfig": {
+ "source": "apache",
+ "extensions": [
+ "fig"
+ ]
+ },
+ "application/x-xliff+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "xlf"
+ ]
+ },
+ "application/x-xpinstall": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "xpi"
+ ]
+ },
+ "application/x-xz": {
+ "source": "apache",
+ "extensions": [
+ "xz"
+ ]
+ },
+ "application/x-zmachine": {
+ "source": "apache",
+ "extensions": [
+ "z1",
+ "z2",
+ "z3",
+ "z4",
+ "z5",
+ "z6",
+ "z7",
+ "z8"
+ ]
+ },
+ "application/x400-bp": {
+ "source": "iana"
+ },
+ "application/xacml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xaml+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "xaml"
+ ]
+ },
+ "application/xcap-att+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xav"
+ ]
+ },
+ "application/xcap-caps+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xca"
+ ]
+ },
+ "application/xcap-diff+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xdf"
+ ]
+ },
+ "application/xcap-el+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xel"
+ ]
+ },
+ "application/xcap-error+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xcap-ns+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xns"
+ ]
+ },
+ "application/xcon-conference-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xcon-conference-info-diff+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xenc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xenc"
+ ]
+ },
+ "application/xfdf": {
+ "source": "iana",
+ "extensions": [
+ "xfdf"
+ ]
+ },
+ "application/xhtml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xhtml",
+ "xht"
+ ]
+ },
+ "application/xhtml-voice+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/xliff+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xlf"
+ ]
+ },
+ "application/xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xml",
+ "xsl",
+ "xsd",
+ "rng"
+ ]
+ },
+ "application/xml-dtd": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "dtd"
+ ]
+ },
+ "application/xml-external-parsed-entity": {
+ "source": "iana"
+ },
+ "application/xml-patch+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xmpp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xop+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xop"
+ ]
+ },
+ "application/xproc+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "xpl"
+ ]
+ },
+ "application/xslt+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xsl",
+ "xslt"
+ ]
+ },
+ "application/xspf+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "xspf"
+ ]
+ },
+ "application/xv+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "mxml",
+ "xhvml",
+ "xvml",
+ "xvm"
+ ]
+ },
+ "application/yaml": {
+ "source": "iana"
+ },
+ "application/yang": {
+ "source": "iana",
+ "extensions": [
+ "yang"
+ ]
+ },
+ "application/yang-data+cbor": {
+ "source": "iana"
+ },
+ "application/yang-data+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-data+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-patch+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-sid+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yin+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "yin"
+ ]
+ },
+ "application/zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "zip"
+ ]
+ },
+ "application/zlib": {
+ "source": "iana"
+ },
+ "application/zstd": {
+ "source": "iana"
+ },
+ "audio/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "audio/32kadpcm": {
+ "source": "iana"
+ },
+ "audio/3gpp": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "3gpp"
+ ]
+ },
+ "audio/3gpp2": {
+ "source": "iana"
+ },
+ "audio/aac": {
+ "source": "iana",
+ "extensions": [
+ "adts",
+ "aac"
+ ]
+ },
+ "audio/ac3": {
+ "source": "iana"
+ },
+ "audio/adpcm": {
+ "source": "apache",
+ "extensions": [
+ "adp"
+ ]
+ },
+ "audio/amr": {
+ "source": "iana",
+ "extensions": [
+ "amr"
+ ]
+ },
+ "audio/amr-wb": {
+ "source": "iana"
+ },
+ "audio/amr-wb+": {
+ "source": "iana"
+ },
+ "audio/aptx": {
+ "source": "iana"
+ },
+ "audio/asc": {
+ "source": "iana"
+ },
+ "audio/atrac-advanced-lossless": {
+ "source": "iana"
+ },
+ "audio/atrac-x": {
+ "source": "iana"
+ },
+ "audio/atrac3": {
+ "source": "iana"
+ },
+ "audio/basic": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "au",
+ "snd"
+ ]
+ },
+ "audio/bv16": {
+ "source": "iana"
+ },
+ "audio/bv32": {
+ "source": "iana"
+ },
+ "audio/clearmode": {
+ "source": "iana"
+ },
+ "audio/cn": {
+ "source": "iana"
+ },
+ "audio/dat12": {
+ "source": "iana"
+ },
+ "audio/dls": {
+ "source": "iana"
+ },
+ "audio/dsr-es201108": {
+ "source": "iana"
+ },
+ "audio/dsr-es202050": {
+ "source": "iana"
+ },
+ "audio/dsr-es202211": {
+ "source": "iana"
+ },
+ "audio/dsr-es202212": {
+ "source": "iana"
+ },
+ "audio/dv": {
+ "source": "iana"
+ },
+ "audio/dvi4": {
+ "source": "iana"
+ },
+ "audio/eac3": {
+ "source": "iana"
+ },
+ "audio/encaprtp": {
+ "source": "iana"
+ },
+ "audio/evrc": {
+ "source": "iana"
+ },
+ "audio/evrc-qcp": {
+ "source": "iana"
+ },
+ "audio/evrc0": {
+ "source": "iana"
+ },
+ "audio/evrc1": {
+ "source": "iana"
+ },
+ "audio/evrcb": {
+ "source": "iana"
+ },
+ "audio/evrcb0": {
+ "source": "iana"
+ },
+ "audio/evrcb1": {
+ "source": "iana"
+ },
+ "audio/evrcnw": {
+ "source": "iana"
+ },
+ "audio/evrcnw0": {
+ "source": "iana"
+ },
+ "audio/evrcnw1": {
+ "source": "iana"
+ },
+ "audio/evrcwb": {
+ "source": "iana"
+ },
+ "audio/evrcwb0": {
+ "source": "iana"
+ },
+ "audio/evrcwb1": {
+ "source": "iana"
+ },
+ "audio/evs": {
+ "source": "iana"
+ },
+ "audio/flac": {
+ "source": "iana"
+ },
+ "audio/flexfec": {
+ "source": "iana"
+ },
+ "audio/fwdred": {
+ "source": "iana"
+ },
+ "audio/g711-0": {
+ "source": "iana"
+ },
+ "audio/g719": {
+ "source": "iana"
+ },
+ "audio/g722": {
+ "source": "iana"
+ },
+ "audio/g7221": {
+ "source": "iana"
+ },
+ "audio/g723": {
+ "source": "iana"
+ },
+ "audio/g726-16": {
+ "source": "iana"
+ },
+ "audio/g726-24": {
+ "source": "iana"
+ },
+ "audio/g726-32": {
+ "source": "iana"
+ },
+ "audio/g726-40": {
+ "source": "iana"
+ },
+ "audio/g728": {
+ "source": "iana"
+ },
+ "audio/g729": {
+ "source": "iana"
+ },
+ "audio/g7291": {
+ "source": "iana"
+ },
+ "audio/g729d": {
+ "source": "iana"
+ },
+ "audio/g729e": {
+ "source": "iana"
+ },
+ "audio/gsm": {
+ "source": "iana"
+ },
+ "audio/gsm-efr": {
+ "source": "iana"
+ },
+ "audio/gsm-hr-08": {
+ "source": "iana"
+ },
+ "audio/ilbc": {
+ "source": "iana"
+ },
+ "audio/ip-mr_v2.5": {
+ "source": "iana"
+ },
+ "audio/isac": {
+ "source": "apache"
+ },
+ "audio/l16": {
+ "source": "iana"
+ },
+ "audio/l20": {
+ "source": "iana"
+ },
+ "audio/l24": {
+ "source": "iana",
+ "compressible": false
+ },
+ "audio/l8": {
+ "source": "iana"
+ },
+ "audio/lpc": {
+ "source": "iana"
+ },
+ "audio/matroska": {
+ "source": "iana"
+ },
+ "audio/melp": {
+ "source": "iana"
+ },
+ "audio/melp1200": {
+ "source": "iana"
+ },
+ "audio/melp2400": {
+ "source": "iana"
+ },
+ "audio/melp600": {
+ "source": "iana"
+ },
+ "audio/mhas": {
+ "source": "iana"
+ },
+ "audio/midi": {
+ "source": "apache",
+ "extensions": [
+ "mid",
+ "midi",
+ "kar",
+ "rmi"
+ ]
+ },
+ "audio/midi-clip": {
+ "source": "iana"
+ },
+ "audio/mobile-xmf": {
+ "source": "iana",
+ "extensions": [
+ "mxmf"
+ ]
+ },
+ "audio/mp3": {
+ "compressible": false,
+ "extensions": [
+ "mp3"
+ ]
+ },
+ "audio/mp4": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "m4a",
+ "mp4a"
+ ]
+ },
+ "audio/mp4a-latm": {
+ "source": "iana"
+ },
+ "audio/mpa": {
+ "source": "iana"
+ },
+ "audio/mpa-robust": {
+ "source": "iana"
+ },
+ "audio/mpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "mpga",
+ "mp2",
+ "mp2a",
+ "mp3",
+ "m2a",
+ "m3a"
+ ]
+ },
+ "audio/mpeg4-generic": {
+ "source": "iana"
+ },
+ "audio/musepack": {
+ "source": "apache"
+ },
+ "audio/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "oga",
+ "ogg",
+ "spx",
+ "opus"
+ ]
+ },
+ "audio/opus": {
+ "source": "iana"
+ },
+ "audio/parityfec": {
+ "source": "iana"
+ },
+ "audio/pcma": {
+ "source": "iana"
+ },
+ "audio/pcma-wb": {
+ "source": "iana"
+ },
+ "audio/pcmu": {
+ "source": "iana"
+ },
+ "audio/pcmu-wb": {
+ "source": "iana"
+ },
+ "audio/prs.sid": {
+ "source": "iana"
+ },
+ "audio/qcelp": {
+ "source": "iana"
+ },
+ "audio/raptorfec": {
+ "source": "iana"
+ },
+ "audio/red": {
+ "source": "iana"
+ },
+ "audio/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "audio/rtp-midi": {
+ "source": "iana"
+ },
+ "audio/rtploopback": {
+ "source": "iana"
+ },
+ "audio/rtx": {
+ "source": "iana"
+ },
+ "audio/s3m": {
+ "source": "apache",
+ "extensions": [
+ "s3m"
+ ]
+ },
+ "audio/scip": {
+ "source": "iana"
+ },
+ "audio/silk": {
+ "source": "apache",
+ "extensions": [
+ "sil"
+ ]
+ },
+ "audio/smv": {
+ "source": "iana"
+ },
+ "audio/smv-qcp": {
+ "source": "iana"
+ },
+ "audio/smv0": {
+ "source": "iana"
+ },
+ "audio/sofa": {
+ "source": "iana"
+ },
+ "audio/sp-midi": {
+ "source": "iana"
+ },
+ "audio/speex": {
+ "source": "iana"
+ },
+ "audio/t140c": {
+ "source": "iana"
+ },
+ "audio/t38": {
+ "source": "iana"
+ },
+ "audio/telephone-event": {
+ "source": "iana"
+ },
+ "audio/tetra_acelp": {
+ "source": "iana"
+ },
+ "audio/tetra_acelp_bb": {
+ "source": "iana"
+ },
+ "audio/tone": {
+ "source": "iana"
+ },
+ "audio/tsvcis": {
+ "source": "iana"
+ },
+ "audio/uemclip": {
+ "source": "iana"
+ },
+ "audio/ulpfec": {
+ "source": "iana"
+ },
+ "audio/usac": {
+ "source": "iana"
+ },
+ "audio/vdvi": {
+ "source": "iana"
+ },
+ "audio/vmr-wb": {
+ "source": "iana"
+ },
+ "audio/vnd.3gpp.iufp": {
+ "source": "iana"
+ },
+ "audio/vnd.4sb": {
+ "source": "iana"
+ },
+ "audio/vnd.audiokoz": {
+ "source": "iana"
+ },
+ "audio/vnd.celp": {
+ "source": "iana"
+ },
+ "audio/vnd.cisco.nse": {
+ "source": "iana"
+ },
+ "audio/vnd.cmles.radio-events": {
+ "source": "iana"
+ },
+ "audio/vnd.cns.anp1": {
+ "source": "iana"
+ },
+ "audio/vnd.cns.inf1": {
+ "source": "iana"
+ },
+ "audio/vnd.dece.audio": {
+ "source": "iana",
+ "extensions": [
+ "uva",
+ "uvva"
+ ]
+ },
+ "audio/vnd.digital-winds": {
+ "source": "iana",
+ "extensions": [
+ "eol"
+ ]
+ },
+ "audio/vnd.dlna.adts": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.heaac.1": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.heaac.2": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.mlp": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.mps": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2x": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2z": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pulse.1": {
+ "source": "iana"
+ },
+ "audio/vnd.dra": {
+ "source": "iana",
+ "extensions": [
+ "dra"
+ ]
+ },
+ "audio/vnd.dts": {
+ "source": "iana",
+ "extensions": [
+ "dts"
+ ]
+ },
+ "audio/vnd.dts.hd": {
+ "source": "iana",
+ "extensions": [
+ "dtshd"
+ ]
+ },
+ "audio/vnd.dts.uhd": {
+ "source": "iana"
+ },
+ "audio/vnd.dvb.file": {
+ "source": "iana"
+ },
+ "audio/vnd.everad.plj": {
+ "source": "iana"
+ },
+ "audio/vnd.hns.audio": {
+ "source": "iana"
+ },
+ "audio/vnd.lucent.voice": {
+ "source": "iana",
+ "extensions": [
+ "lvp"
+ ]
+ },
+ "audio/vnd.ms-playready.media.pya": {
+ "source": "iana",
+ "extensions": [
+ "pya"
+ ]
+ },
+ "audio/vnd.nokia.mobile-xmf": {
+ "source": "iana"
+ },
+ "audio/vnd.nortel.vbk": {
+ "source": "iana"
+ },
+ "audio/vnd.nuera.ecelp4800": {
+ "source": "iana",
+ "extensions": [
+ "ecelp4800"
+ ]
+ },
+ "audio/vnd.nuera.ecelp7470": {
+ "source": "iana",
+ "extensions": [
+ "ecelp7470"
+ ]
+ },
+ "audio/vnd.nuera.ecelp9600": {
+ "source": "iana",
+ "extensions": [
+ "ecelp9600"
+ ]
+ },
+ "audio/vnd.octel.sbc": {
+ "source": "iana"
+ },
+ "audio/vnd.presonus.multitrack": {
+ "source": "iana"
+ },
+ "audio/vnd.qcelp": {
+ "source": "apache"
+ },
+ "audio/vnd.rhetorex.32kadpcm": {
+ "source": "iana"
+ },
+ "audio/vnd.rip": {
+ "source": "iana",
+ "extensions": [
+ "rip"
+ ]
+ },
+ "audio/vnd.rn-realaudio": {
+ "compressible": false
+ },
+ "audio/vnd.sealedmedia.softseal.mpeg": {
+ "source": "iana"
+ },
+ "audio/vnd.vmx.cvsd": {
+ "source": "iana"
+ },
+ "audio/vnd.wave": {
+ "compressible": false
+ },
+ "audio/vorbis": {
+ "source": "iana",
+ "compressible": false
+ },
+ "audio/vorbis-config": {
+ "source": "iana"
+ },
+ "audio/wav": {
+ "compressible": false,
+ "extensions": [
+ "wav"
+ ]
+ },
+ "audio/wave": {
+ "compressible": false,
+ "extensions": [
+ "wav"
+ ]
+ },
+ "audio/webm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "weba"
+ ]
+ },
+ "audio/x-aac": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "aac"
+ ]
+ },
+ "audio/x-aiff": {
+ "source": "apache",
+ "extensions": [
+ "aif",
+ "aiff",
+ "aifc"
+ ]
+ },
+ "audio/x-caf": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "caf"
+ ]
+ },
+ "audio/x-flac": {
+ "source": "apache",
+ "extensions": [
+ "flac"
+ ]
+ },
+ "audio/x-m4a": {
+ "source": "nginx",
+ "extensions": [
+ "m4a"
+ ]
+ },
+ "audio/x-matroska": {
+ "source": "apache",
+ "extensions": [
+ "mka"
+ ]
+ },
+ "audio/x-mpegurl": {
+ "source": "apache",
+ "extensions": [
+ "m3u"
+ ]
+ },
+ "audio/x-ms-wax": {
+ "source": "apache",
+ "extensions": [
+ "wax"
+ ]
+ },
+ "audio/x-ms-wma": {
+ "source": "apache",
+ "extensions": [
+ "wma"
+ ]
+ },
+ "audio/x-pn-realaudio": {
+ "source": "apache",
+ "extensions": [
+ "ram",
+ "ra"
+ ]
+ },
+ "audio/x-pn-realaudio-plugin": {
+ "source": "apache",
+ "extensions": [
+ "rmp"
+ ]
+ },
+ "audio/x-realaudio": {
+ "source": "nginx",
+ "extensions": [
+ "ra"
+ ]
+ },
+ "audio/x-tta": {
+ "source": "apache"
+ },
+ "audio/x-wav": {
+ "source": "apache",
+ "extensions": [
+ "wav"
+ ]
+ },
+ "audio/xm": {
+ "source": "apache",
+ "extensions": [
+ "xm"
+ ]
+ },
+ "chemical/x-cdx": {
+ "source": "apache",
+ "extensions": [
+ "cdx"
+ ]
+ },
+ "chemical/x-cif": {
+ "source": "apache",
+ "extensions": [
+ "cif"
+ ]
+ },
+ "chemical/x-cmdf": {
+ "source": "apache",
+ "extensions": [
+ "cmdf"
+ ]
+ },
+ "chemical/x-cml": {
+ "source": "apache",
+ "extensions": [
+ "cml"
+ ]
+ },
+ "chemical/x-csml": {
+ "source": "apache",
+ "extensions": [
+ "csml"
+ ]
+ },
+ "chemical/x-pdb": {
+ "source": "apache"
+ },
+ "chemical/x-xyz": {
+ "source": "apache",
+ "extensions": [
+ "xyz"
+ ]
+ },
+ "font/collection": {
+ "source": "iana",
+ "extensions": [
+ "ttc"
+ ]
+ },
+ "font/otf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "otf"
+ ]
+ },
+ "font/sfnt": {
+ "source": "iana"
+ },
+ "font/ttf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ttf"
+ ]
+ },
+ "font/woff": {
+ "source": "iana",
+ "extensions": [
+ "woff"
+ ]
+ },
+ "font/woff2": {
+ "source": "iana",
+ "extensions": [
+ "woff2"
+ ]
+ },
+ "image/aces": {
+ "source": "iana",
+ "extensions": [
+ "exr"
+ ]
+ },
+ "image/apng": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "apng"
+ ]
+ },
+ "image/avci": {
+ "source": "iana",
+ "extensions": [
+ "avci"
+ ]
+ },
+ "image/avcs": {
+ "source": "iana",
+ "extensions": [
+ "avcs"
+ ]
+ },
+ "image/avif": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "avif"
+ ]
+ },
+ "image/bmp": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "bmp",
+ "dib"
+ ]
+ },
+ "image/cgm": {
+ "source": "iana",
+ "extensions": [
+ "cgm"
+ ]
+ },
+ "image/dicom-rle": {
+ "source": "iana",
+ "extensions": [
+ "drle"
+ ]
+ },
+ "image/dpx": {
+ "source": "iana",
+ "extensions": [
+ "dpx"
+ ]
+ },
+ "image/emf": {
+ "source": "iana",
+ "extensions": [
+ "emf"
+ ]
+ },
+ "image/fits": {
+ "source": "iana",
+ "extensions": [
+ "fits"
+ ]
+ },
+ "image/g3fax": {
+ "source": "iana",
+ "extensions": [
+ "g3"
+ ]
+ },
+ "image/gif": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "gif"
+ ]
+ },
+ "image/heic": {
+ "source": "iana",
+ "extensions": [
+ "heic"
+ ]
+ },
+ "image/heic-sequence": {
+ "source": "iana",
+ "extensions": [
+ "heics"
+ ]
+ },
+ "image/heif": {
+ "source": "iana",
+ "extensions": [
+ "heif"
+ ]
+ },
+ "image/heif-sequence": {
+ "source": "iana",
+ "extensions": [
+ "heifs"
+ ]
+ },
+ "image/hej2k": {
+ "source": "iana",
+ "extensions": [
+ "hej2"
+ ]
+ },
+ "image/hsj2": {
+ "source": "iana",
+ "extensions": [
+ "hsj2"
+ ]
+ },
+ "image/ief": {
+ "source": "iana",
+ "extensions": [
+ "ief"
+ ]
+ },
+ "image/j2c": {
+ "source": "iana"
+ },
+ "image/jls": {
+ "source": "iana",
+ "extensions": [
+ "jls"
+ ]
+ },
+ "image/jp2": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "jp2",
+ "jpg2"
+ ]
+ },
+ "image/jpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "jpeg",
+ "jpg",
+ "jpe"
+ ]
+ },
+ "image/jph": {
+ "source": "iana",
+ "extensions": [
+ "jph"
+ ]
+ },
+ "image/jphc": {
+ "source": "iana",
+ "extensions": [
+ "jhc"
+ ]
+ },
+ "image/jpm": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "jpm",
+ "jpgm"
+ ]
+ },
+ "image/jpx": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "jpx",
+ "jpf"
+ ]
+ },
+ "image/jxl": {
+ "source": "iana",
+ "extensions": [
+ "jxl"
+ ]
+ },
+ "image/jxr": {
+ "source": "iana",
+ "extensions": [
+ "jxr"
+ ]
+ },
+ "image/jxra": {
+ "source": "iana",
+ "extensions": [
+ "jxra"
+ ]
+ },
+ "image/jxrs": {
+ "source": "iana",
+ "extensions": [
+ "jxrs"
+ ]
+ },
+ "image/jxs": {
+ "source": "iana",
+ "extensions": [
+ "jxs"
+ ]
+ },
+ "image/jxsc": {
+ "source": "iana",
+ "extensions": [
+ "jxsc"
+ ]
+ },
+ "image/jxsi": {
+ "source": "iana",
+ "extensions": [
+ "jxsi"
+ ]
+ },
+ "image/jxss": {
+ "source": "iana",
+ "extensions": [
+ "jxss"
+ ]
+ },
+ "image/ktx": {
+ "source": "iana",
+ "extensions": [
+ "ktx"
+ ]
+ },
+ "image/ktx2": {
+ "source": "iana",
+ "extensions": [
+ "ktx2"
+ ]
+ },
+ "image/naplps": {
+ "source": "iana"
+ },
+ "image/pjpeg": {
+ "compressible": false
+ },
+ "image/png": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "png"
+ ]
+ },
+ "image/prs.btif": {
+ "source": "iana",
+ "extensions": [
+ "btif",
+ "btf"
+ ]
+ },
+ "image/prs.pti": {
+ "source": "iana",
+ "extensions": [
+ "pti"
+ ]
+ },
+ "image/pwg-raster": {
+ "source": "iana"
+ },
+ "image/sgi": {
+ "source": "apache",
+ "extensions": [
+ "sgi"
+ ]
+ },
+ "image/svg+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "svg",
+ "svgz"
+ ]
+ },
+ "image/t38": {
+ "source": "iana",
+ "extensions": [
+ "t38"
+ ]
+ },
+ "image/tiff": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "tif",
+ "tiff"
+ ]
+ },
+ "image/tiff-fx": {
+ "source": "iana",
+ "extensions": [
+ "tfx"
+ ]
+ },
+ "image/vnd.adobe.photoshop": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "psd"
+ ]
+ },
+ "image/vnd.airzip.accelerator.azv": {
+ "source": "iana",
+ "extensions": [
+ "azv"
+ ]
+ },
+ "image/vnd.cns.inf2": {
+ "source": "iana"
+ },
+ "image/vnd.dece.graphic": {
+ "source": "iana",
+ "extensions": [
+ "uvi",
+ "uvvi",
+ "uvg",
+ "uvvg"
+ ]
+ },
+ "image/vnd.djvu": {
+ "source": "iana",
+ "extensions": [
+ "djvu",
+ "djv"
+ ]
+ },
+ "image/vnd.dvb.subtitle": {
+ "source": "iana",
+ "extensions": [
+ "sub"
+ ]
+ },
+ "image/vnd.dwg": {
+ "source": "iana",
+ "extensions": [
+ "dwg"
+ ]
+ },
+ "image/vnd.dxf": {
+ "source": "iana",
+ "extensions": [
+ "dxf"
+ ]
+ },
+ "image/vnd.fastbidsheet": {
+ "source": "iana",
+ "extensions": [
+ "fbs"
+ ]
+ },
+ "image/vnd.fpx": {
+ "source": "iana",
+ "extensions": [
+ "fpx"
+ ]
+ },
+ "image/vnd.fst": {
+ "source": "iana",
+ "extensions": [
+ "fst"
+ ]
+ },
+ "image/vnd.fujixerox.edmics-mmr": {
+ "source": "iana",
+ "extensions": [
+ "mmr"
+ ]
+ },
+ "image/vnd.fujixerox.edmics-rlc": {
+ "source": "iana",
+ "extensions": [
+ "rlc"
+ ]
+ },
+ "image/vnd.globalgraphics.pgb": {
+ "source": "iana"
+ },
+ "image/vnd.microsoft.icon": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "ico"
+ ]
+ },
+ "image/vnd.mix": {
+ "source": "iana"
+ },
+ "image/vnd.mozilla.apng": {
+ "source": "iana"
+ },
+ "image/vnd.ms-dds": {
+ "compressible": true,
+ "extensions": [
+ "dds"
+ ]
+ },
+ "image/vnd.ms-modi": {
+ "source": "iana",
+ "extensions": [
+ "mdi"
+ ]
+ },
+ "image/vnd.ms-photo": {
+ "source": "apache",
+ "extensions": [
+ "wdp"
+ ]
+ },
+ "image/vnd.net-fpx": {
+ "source": "iana",
+ "extensions": [
+ "npx"
+ ]
+ },
+ "image/vnd.pco.b16": {
+ "source": "iana",
+ "extensions": [
+ "b16"
+ ]
+ },
+ "image/vnd.radiance": {
+ "source": "iana"
+ },
+ "image/vnd.sealed.png": {
+ "source": "iana"
+ },
+ "image/vnd.sealedmedia.softseal.gif": {
+ "source": "iana"
+ },
+ "image/vnd.sealedmedia.softseal.jpg": {
+ "source": "iana"
+ },
+ "image/vnd.svf": {
+ "source": "iana"
+ },
+ "image/vnd.tencent.tap": {
+ "source": "iana",
+ "extensions": [
+ "tap"
+ ]
+ },
+ "image/vnd.valve.source.texture": {
+ "source": "iana",
+ "extensions": [
+ "vtf"
+ ]
+ },
+ "image/vnd.wap.wbmp": {
+ "source": "iana",
+ "extensions": [
+ "wbmp"
+ ]
+ },
+ "image/vnd.xiff": {
+ "source": "iana",
+ "extensions": [
+ "xif"
+ ]
+ },
+ "image/vnd.zbrush.pcx": {
+ "source": "iana",
+ "extensions": [
+ "pcx"
+ ]
+ },
+ "image/webp": {
+ "source": "iana",
+ "extensions": [
+ "webp"
+ ]
+ },
+ "image/wmf": {
+ "source": "iana",
+ "extensions": [
+ "wmf"
+ ]
+ },
+ "image/x-3ds": {
+ "source": "apache",
+ "extensions": [
+ "3ds"
+ ]
+ },
+ "image/x-cmu-raster": {
+ "source": "apache",
+ "extensions": [
+ "ras"
+ ]
+ },
+ "image/x-cmx": {
+ "source": "apache",
+ "extensions": [
+ "cmx"
+ ]
+ },
+ "image/x-freehand": {
+ "source": "apache",
+ "extensions": [
+ "fh",
+ "fhc",
+ "fh4",
+ "fh5",
+ "fh7"
+ ]
+ },
+ "image/x-icon": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": [
+ "ico"
+ ]
+ },
+ "image/x-jng": {
+ "source": "nginx",
+ "extensions": [
+ "jng"
+ ]
+ },
+ "image/x-mrsid-image": {
+ "source": "apache",
+ "extensions": [
+ "sid"
+ ]
+ },
+ "image/x-ms-bmp": {
+ "source": "nginx",
+ "compressible": true,
+ "extensions": [
+ "bmp"
+ ]
+ },
+ "image/x-pcx": {
+ "source": "apache",
+ "extensions": [
+ "pcx"
+ ]
+ },
+ "image/x-pict": {
+ "source": "apache",
+ "extensions": [
+ "pic",
+ "pct"
+ ]
+ },
+ "image/x-portable-anymap": {
+ "source": "apache",
+ "extensions": [
+ "pnm"
+ ]
+ },
+ "image/x-portable-bitmap": {
+ "source": "apache",
+ "extensions": [
+ "pbm"
+ ]
+ },
+ "image/x-portable-graymap": {
+ "source": "apache",
+ "extensions": [
+ "pgm"
+ ]
+ },
+ "image/x-portable-pixmap": {
+ "source": "apache",
+ "extensions": [
+ "ppm"
+ ]
+ },
+ "image/x-rgb": {
+ "source": "apache",
+ "extensions": [
+ "rgb"
+ ]
+ },
+ "image/x-tga": {
+ "source": "apache",
+ "extensions": [
+ "tga"
+ ]
+ },
+ "image/x-xbitmap": {
+ "source": "apache",
+ "extensions": [
+ "xbm"
+ ]
+ },
+ "image/x-xcf": {
+ "compressible": false
+ },
+ "image/x-xpixmap": {
+ "source": "apache",
+ "extensions": [
+ "xpm"
+ ]
+ },
+ "image/x-xwindowdump": {
+ "source": "apache",
+ "extensions": [
+ "xwd"
+ ]
+ },
+ "message/bhttp": {
+ "source": "iana"
+ },
+ "message/cpim": {
+ "source": "iana"
+ },
+ "message/delivery-status": {
+ "source": "iana"
+ },
+ "message/disposition-notification": {
+ "source": "iana",
+ "extensions": [
+ "disposition-notification"
+ ]
+ },
+ "message/external-body": {
+ "source": "iana"
+ },
+ "message/feedback-report": {
+ "source": "iana"
+ },
+ "message/global": {
+ "source": "iana",
+ "extensions": [
+ "u8msg"
+ ]
+ },
+ "message/global-delivery-status": {
+ "source": "iana",
+ "extensions": [
+ "u8dsn"
+ ]
+ },
+ "message/global-disposition-notification": {
+ "source": "iana",
+ "extensions": [
+ "u8mdn"
+ ]
+ },
+ "message/global-headers": {
+ "source": "iana",
+ "extensions": [
+ "u8hdr"
+ ]
+ },
+ "message/http": {
+ "source": "iana",
+ "compressible": false
+ },
+ "message/imdn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "message/mls": {
+ "source": "iana"
+ },
+ "message/news": {
+ "source": "apache"
+ },
+ "message/ohttp-req": {
+ "source": "iana"
+ },
+ "message/ohttp-res": {
+ "source": "iana"
+ },
+ "message/partial": {
+ "source": "iana",
+ "compressible": false
+ },
+ "message/rfc822": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "eml",
+ "mime"
+ ]
+ },
+ "message/s-http": {
+ "source": "apache"
+ },
+ "message/sip": {
+ "source": "iana"
+ },
+ "message/sipfrag": {
+ "source": "iana"
+ },
+ "message/tracking-status": {
+ "source": "iana"
+ },
+ "message/vnd.si.simp": {
+ "source": "apache"
+ },
+ "message/vnd.wfa.wsc": {
+ "source": "iana",
+ "extensions": [
+ "wsc"
+ ]
+ },
+ "model/3mf": {
+ "source": "iana",
+ "extensions": [
+ "3mf"
+ ]
+ },
+ "model/e57": {
+ "source": "iana"
+ },
+ "model/gltf+json": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "gltf"
+ ]
+ },
+ "model/gltf-binary": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "glb"
+ ]
+ },
+ "model/iges": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "igs",
+ "iges"
+ ]
+ },
+ "model/jt": {
+ "source": "iana",
+ "extensions": [
+ "jt"
+ ]
+ },
+ "model/mesh": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "msh",
+ "mesh",
+ "silo"
+ ]
+ },
+ "model/mtl": {
+ "source": "iana",
+ "extensions": [
+ "mtl"
+ ]
+ },
+ "model/obj": {
+ "source": "iana",
+ "extensions": [
+ "obj"
+ ]
+ },
+ "model/prc": {
+ "source": "iana",
+ "extensions": [
+ "prc"
+ ]
+ },
+ "model/step": {
+ "source": "iana"
+ },
+ "model/step+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "stpx"
+ ]
+ },
+ "model/step+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "stpz"
+ ]
+ },
+ "model/step-xml+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "stpxz"
+ ]
+ },
+ "model/stl": {
+ "source": "iana",
+ "extensions": [
+ "stl"
+ ]
+ },
+ "model/u3d": {
+ "source": "iana",
+ "extensions": [
+ "u3d"
+ ]
+ },
+ "model/vnd.bary": {
+ "source": "iana",
+ "extensions": [
+ "bary"
+ ]
+ },
+ "model/vnd.cld": {
+ "source": "iana",
+ "extensions": [
+ "cld"
+ ]
+ },
+ "model/vnd.collada+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "dae"
+ ]
+ },
+ "model/vnd.dwf": {
+ "source": "iana",
+ "extensions": [
+ "dwf"
+ ]
+ },
+ "model/vnd.flatland.3dml": {
+ "source": "iana"
+ },
+ "model/vnd.gdl": {
+ "source": "iana",
+ "extensions": [
+ "gdl"
+ ]
+ },
+ "model/vnd.gs-gdl": {
+ "source": "apache"
+ },
+ "model/vnd.gs.gdl": {
+ "source": "iana"
+ },
+ "model/vnd.gtw": {
+ "source": "iana",
+ "extensions": [
+ "gtw"
+ ]
+ },
+ "model/vnd.moml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "model/vnd.mts": {
+ "source": "iana",
+ "extensions": [
+ "mts"
+ ]
+ },
+ "model/vnd.opengex": {
+ "source": "iana",
+ "extensions": [
+ "ogex"
+ ]
+ },
+ "model/vnd.parasolid.transmit.binary": {
+ "source": "iana",
+ "extensions": [
+ "x_b"
+ ]
+ },
+ "model/vnd.parasolid.transmit.text": {
+ "source": "iana",
+ "extensions": [
+ "x_t"
+ ]
+ },
+ "model/vnd.pytha.pyox": {
+ "source": "iana",
+ "extensions": [
+ "pyo",
+ "pyox"
+ ]
+ },
+ "model/vnd.rosette.annotated-data-model": {
+ "source": "iana"
+ },
+ "model/vnd.sap.vds": {
+ "source": "iana",
+ "extensions": [
+ "vds"
+ ]
+ },
+ "model/vnd.usda": {
+ "source": "iana",
+ "extensions": [
+ "usda"
+ ]
+ },
+ "model/vnd.usdz+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "usdz"
+ ]
+ },
+ "model/vnd.valve.source.compiled-map": {
+ "source": "iana",
+ "extensions": [
+ "bsp"
+ ]
+ },
+ "model/vnd.vtu": {
+ "source": "iana",
+ "extensions": [
+ "vtu"
+ ]
+ },
+ "model/vrml": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "wrl",
+ "vrml"
+ ]
+ },
+ "model/x3d+binary": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "x3db",
+ "x3dbz"
+ ]
+ },
+ "model/x3d+fastinfoset": {
+ "source": "iana",
+ "extensions": [
+ "x3db"
+ ]
+ },
+ "model/x3d+vrml": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "x3dv",
+ "x3dvz"
+ ]
+ },
+ "model/x3d+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "x3d",
+ "x3dz"
+ ]
+ },
+ "model/x3d-vrml": {
+ "source": "iana",
+ "extensions": [
+ "x3dv"
+ ]
+ },
+ "multipart/alternative": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/appledouble": {
+ "source": "iana"
+ },
+ "multipart/byteranges": {
+ "source": "iana"
+ },
+ "multipart/digest": {
+ "source": "iana"
+ },
+ "multipart/encrypted": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/form-data": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/header-set": {
+ "source": "iana"
+ },
+ "multipart/mixed": {
+ "source": "iana"
+ },
+ "multipart/multilingual": {
+ "source": "iana"
+ },
+ "multipart/parallel": {
+ "source": "iana"
+ },
+ "multipart/related": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/report": {
+ "source": "iana"
+ },
+ "multipart/signed": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/vnd.bint.med-plus": {
+ "source": "iana"
+ },
+ "multipart/voice-message": {
+ "source": "iana"
+ },
+ "multipart/x-mixed-replace": {
+ "source": "iana"
+ },
+ "text/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "text/cache-manifest": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "appcache",
+ "manifest"
+ ]
+ },
+ "text/calendar": {
+ "source": "iana",
+ "extensions": [
+ "ics",
+ "ifb"
+ ]
+ },
+ "text/calender": {
+ "compressible": true
+ },
+ "text/cmd": {
+ "compressible": true
+ },
+ "text/coffeescript": {
+ "extensions": [
+ "coffee",
+ "litcoffee"
+ ]
+ },
+ "text/cql": {
+ "source": "iana"
+ },
+ "text/cql-expression": {
+ "source": "iana"
+ },
+ "text/cql-identifier": {
+ "source": "iana"
+ },
+ "text/css": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "css"
+ ]
+ },
+ "text/csv": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "csv"
+ ]
+ },
+ "text/csv-schema": {
+ "source": "iana"
+ },
+ "text/directory": {
+ "source": "iana"
+ },
+ "text/dns": {
+ "source": "iana"
+ },
+ "text/ecmascript": {
+ "source": "apache"
+ },
+ "text/encaprtp": {
+ "source": "iana"
+ },
+ "text/enriched": {
+ "source": "iana"
+ },
+ "text/fhirpath": {
+ "source": "iana"
+ },
+ "text/flexfec": {
+ "source": "iana"
+ },
+ "text/fwdred": {
+ "source": "iana"
+ },
+ "text/gff3": {
+ "source": "iana"
+ },
+ "text/grammar-ref-list": {
+ "source": "iana"
+ },
+ "text/hl7v2": {
+ "source": "iana"
+ },
+ "text/html": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "html",
+ "htm",
+ "shtml"
+ ]
+ },
+ "text/jade": {
+ "extensions": [
+ "jade"
+ ]
+ },
+ "text/javascript": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "js",
+ "mjs"
+ ]
+ },
+ "text/jcr-cnd": {
+ "source": "iana"
+ },
+ "text/jsx": {
+ "compressible": true,
+ "extensions": [
+ "jsx"
+ ]
+ },
+ "text/less": {
+ "compressible": true,
+ "extensions": [
+ "less"
+ ]
+ },
+ "text/markdown": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "md",
+ "markdown"
+ ]
+ },
+ "text/mathml": {
+ "source": "nginx",
+ "extensions": [
+ "mml"
+ ]
+ },
+ "text/mdx": {
+ "compressible": true,
+ "extensions": [
+ "mdx"
+ ]
+ },
+ "text/mizar": {
+ "source": "iana"
+ },
+ "text/n3": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "n3"
+ ]
+ },
+ "text/parameters": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/parityfec": {
+ "source": "iana"
+ },
+ "text/plain": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "txt",
+ "text",
+ "conf",
+ "def",
+ "list",
+ "log",
+ "in",
+ "ini"
+ ]
+ },
+ "text/provenance-notation": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/prs.fallenstein.rst": {
+ "source": "iana"
+ },
+ "text/prs.lines.tag": {
+ "source": "iana",
+ "extensions": [
+ "dsc"
+ ]
+ },
+ "text/prs.prop.logic": {
+ "source": "iana"
+ },
+ "text/prs.texi": {
+ "source": "iana"
+ },
+ "text/raptorfec": {
+ "source": "iana"
+ },
+ "text/red": {
+ "source": "iana"
+ },
+ "text/rfc822-headers": {
+ "source": "iana"
+ },
+ "text/richtext": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rtx"
+ ]
+ },
+ "text/rtf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "rtf"
+ ]
+ },
+ "text/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "text/rtploopback": {
+ "source": "iana"
+ },
+ "text/rtx": {
+ "source": "iana"
+ },
+ "text/sgml": {
+ "source": "iana",
+ "extensions": [
+ "sgml",
+ "sgm"
+ ]
+ },
+ "text/shaclc": {
+ "source": "iana"
+ },
+ "text/shex": {
+ "source": "iana",
+ "extensions": [
+ "shex"
+ ]
+ },
+ "text/slim": {
+ "extensions": [
+ "slim",
+ "slm"
+ ]
+ },
+ "text/spdx": {
+ "source": "iana",
+ "extensions": [
+ "spdx"
+ ]
+ },
+ "text/strings": {
+ "source": "iana"
+ },
+ "text/stylus": {
+ "extensions": [
+ "stylus",
+ "styl"
+ ]
+ },
+ "text/t140": {
+ "source": "iana"
+ },
+ "text/tab-separated-values": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "tsv"
+ ]
+ },
+ "text/troff": {
+ "source": "iana",
+ "extensions": [
+ "t",
+ "tr",
+ "roff",
+ "man",
+ "me",
+ "ms"
+ ]
+ },
+ "text/turtle": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": [
+ "ttl"
+ ]
+ },
+ "text/ulpfec": {
+ "source": "iana"
+ },
+ "text/uri-list": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "uri",
+ "uris",
+ "urls"
+ ]
+ },
+ "text/vcard": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "vcard"
+ ]
+ },
+ "text/vnd.a": {
+ "source": "iana"
+ },
+ "text/vnd.abc": {
+ "source": "iana"
+ },
+ "text/vnd.ascii-art": {
+ "source": "iana"
+ },
+ "text/vnd.curl": {
+ "source": "iana",
+ "extensions": [
+ "curl"
+ ]
+ },
+ "text/vnd.curl.dcurl": {
+ "source": "apache",
+ "extensions": [
+ "dcurl"
+ ]
+ },
+ "text/vnd.curl.mcurl": {
+ "source": "apache",
+ "extensions": [
+ "mcurl"
+ ]
+ },
+ "text/vnd.curl.scurl": {
+ "source": "apache",
+ "extensions": [
+ "scurl"
+ ]
+ },
+ "text/vnd.debian.copyright": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/vnd.dmclientscript": {
+ "source": "iana"
+ },
+ "text/vnd.dvb.subtitle": {
+ "source": "iana",
+ "extensions": [
+ "sub"
+ ]
+ },
+ "text/vnd.esmertec.theme-descriptor": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/vnd.exchangeable": {
+ "source": "iana"
+ },
+ "text/vnd.familysearch.gedcom": {
+ "source": "iana",
+ "extensions": [
+ "ged"
+ ]
+ },
+ "text/vnd.ficlab.flt": {
+ "source": "iana"
+ },
+ "text/vnd.fly": {
+ "source": "iana",
+ "extensions": [
+ "fly"
+ ]
+ },
+ "text/vnd.fmi.flexstor": {
+ "source": "iana",
+ "extensions": [
+ "flx"
+ ]
+ },
+ "text/vnd.gml": {
+ "source": "iana"
+ },
+ "text/vnd.graphviz": {
+ "source": "iana",
+ "extensions": [
+ "gv"
+ ]
+ },
+ "text/vnd.hans": {
+ "source": "iana"
+ },
+ "text/vnd.hgl": {
+ "source": "iana"
+ },
+ "text/vnd.in3d.3dml": {
+ "source": "iana",
+ "extensions": [
+ "3dml"
+ ]
+ },
+ "text/vnd.in3d.spot": {
+ "source": "iana",
+ "extensions": [
+ "spot"
+ ]
+ },
+ "text/vnd.iptc.newsml": {
+ "source": "iana"
+ },
+ "text/vnd.iptc.nitf": {
+ "source": "iana"
+ },
+ "text/vnd.latex-z": {
+ "source": "iana"
+ },
+ "text/vnd.motorola.reflex": {
+ "source": "iana"
+ },
+ "text/vnd.ms-mediapackage": {
+ "source": "iana"
+ },
+ "text/vnd.net2phone.commcenter.command": {
+ "source": "iana"
+ },
+ "text/vnd.radisys.msml-basic-layout": {
+ "source": "iana"
+ },
+ "text/vnd.senx.warpscript": {
+ "source": "iana"
+ },
+ "text/vnd.si.uricatalogue": {
+ "source": "apache"
+ },
+ "text/vnd.sosi": {
+ "source": "iana"
+ },
+ "text/vnd.sun.j2me.app-descriptor": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": [
+ "jad"
+ ]
+ },
+ "text/vnd.trolltech.linguist": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/vnd.vcf": {
+ "source": "iana"
+ },
+ "text/vnd.wap.si": {
+ "source": "iana"
+ },
+ "text/vnd.wap.sl": {
+ "source": "iana"
+ },
+ "text/vnd.wap.wml": {
+ "source": "iana",
+ "extensions": [
+ "wml"
+ ]
+ },
+ "text/vnd.wap.wmlscript": {
+ "source": "iana",
+ "extensions": [
+ "wmls"
+ ]
+ },
+ "text/vnd.zoo.kcl": {
+ "source": "iana"
+ },
+ "text/vtt": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": [
+ "vtt"
+ ]
+ },
+ "text/wgsl": {
+ "source": "iana",
+ "extensions": [
+ "wgsl"
+ ]
+ },
+ "text/x-asm": {
+ "source": "apache",
+ "extensions": [
+ "s",
+ "asm"
+ ]
+ },
+ "text/x-c": {
+ "source": "apache",
+ "extensions": [
+ "c",
+ "cc",
+ "cxx",
+ "cpp",
+ "h",
+ "hh",
+ "dic"
+ ]
+ },
+ "text/x-component": {
+ "source": "nginx",
+ "extensions": [
+ "htc"
+ ]
+ },
+ "text/x-fortran": {
+ "source": "apache",
+ "extensions": [
+ "f",
+ "for",
+ "f77",
+ "f90"
+ ]
+ },
+ "text/x-gwt-rpc": {
+ "compressible": true
+ },
+ "text/x-handlebars-template": {
+ "extensions": [
+ "hbs"
+ ]
+ },
+ "text/x-java-source": {
+ "source": "apache",
+ "extensions": [
+ "java"
+ ]
+ },
+ "text/x-jquery-tmpl": {
+ "compressible": true
+ },
+ "text/x-lua": {
+ "extensions": [
+ "lua"
+ ]
+ },
+ "text/x-markdown": {
+ "compressible": true,
+ "extensions": [
+ "mkd"
+ ]
+ },
+ "text/x-nfo": {
+ "source": "apache",
+ "extensions": [
+ "nfo"
+ ]
+ },
+ "text/x-opml": {
+ "source": "apache",
+ "extensions": [
+ "opml"
+ ]
+ },
+ "text/x-org": {
+ "compressible": true,
+ "extensions": [
+ "org"
+ ]
+ },
+ "text/x-pascal": {
+ "source": "apache",
+ "extensions": [
+ "p",
+ "pas"
+ ]
+ },
+ "text/x-processing": {
+ "compressible": true,
+ "extensions": [
+ "pde"
+ ]
+ },
+ "text/x-sass": {
+ "extensions": [
+ "sass"
+ ]
+ },
+ "text/x-scss": {
+ "extensions": [
+ "scss"
+ ]
+ },
+ "text/x-setext": {
+ "source": "apache",
+ "extensions": [
+ "etx"
+ ]
+ },
+ "text/x-sfv": {
+ "source": "apache",
+ "extensions": [
+ "sfv"
+ ]
+ },
+ "text/x-suse-ymp": {
+ "compressible": true,
+ "extensions": [
+ "ymp"
+ ]
+ },
+ "text/x-uuencode": {
+ "source": "apache",
+ "extensions": [
+ "uu"
+ ]
+ },
+ "text/x-vcalendar": {
+ "source": "apache",
+ "extensions": [
+ "vcs"
+ ]
+ },
+ "text/x-vcard": {
+ "source": "apache",
+ "extensions": [
+ "vcf"
+ ]
+ },
+ "text/xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": [
+ "xml"
+ ]
+ },
+ "text/xml-external-parsed-entity": {
+ "source": "iana"
+ },
+ "text/yaml": {
+ "compressible": true,
+ "extensions": [
+ "yaml",
+ "yml"
+ ]
+ },
+ "video/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "video/3gpp": {
+ "source": "iana",
+ "extensions": [
+ "3gp",
+ "3gpp"
+ ]
+ },
+ "video/3gpp-tt": {
+ "source": "iana"
+ },
+ "video/3gpp2": {
+ "source": "iana",
+ "extensions": [
+ "3g2"
+ ]
+ },
+ "video/av1": {
+ "source": "iana"
+ },
+ "video/bmpeg": {
+ "source": "iana"
+ },
+ "video/bt656": {
+ "source": "iana"
+ },
+ "video/celb": {
+ "source": "iana"
+ },
+ "video/dv": {
+ "source": "iana"
+ },
+ "video/encaprtp": {
+ "source": "iana"
+ },
+ "video/evc": {
+ "source": "iana"
+ },
+ "video/ffv1": {
+ "source": "iana"
+ },
+ "video/flexfec": {
+ "source": "iana"
+ },
+ "video/h261": {
+ "source": "iana",
+ "extensions": [
+ "h261"
+ ]
+ },
+ "video/h263": {
+ "source": "iana",
+ "extensions": [
+ "h263"
+ ]
+ },
+ "video/h263-1998": {
+ "source": "iana"
+ },
+ "video/h263-2000": {
+ "source": "iana"
+ },
+ "video/h264": {
+ "source": "iana",
+ "extensions": [
+ "h264"
+ ]
+ },
+ "video/h264-rcdo": {
+ "source": "iana"
+ },
+ "video/h264-svc": {
+ "source": "iana"
+ },
+ "video/h265": {
+ "source": "iana"
+ },
+ "video/h266": {
+ "source": "iana"
+ },
+ "video/iso.segment": {
+ "source": "iana",
+ "extensions": [
+ "m4s"
+ ]
+ },
+ "video/jpeg": {
+ "source": "iana",
+ "extensions": [
+ "jpgv"
+ ]
+ },
+ "video/jpeg2000": {
+ "source": "iana"
+ },
+ "video/jpm": {
+ "source": "apache",
+ "extensions": [
+ "jpm",
+ "jpgm"
+ ]
+ },
+ "video/jxsv": {
+ "source": "iana"
+ },
+ "video/matroska": {
+ "source": "iana"
+ },
+ "video/matroska-3d": {
+ "source": "iana"
+ },
+ "video/mj2": {
+ "source": "iana",
+ "extensions": [
+ "mj2",
+ "mjp2"
+ ]
+ },
+ "video/mp1s": {
+ "source": "iana"
+ },
+ "video/mp2p": {
+ "source": "iana"
+ },
+ "video/mp2t": {
+ "source": "iana",
+ "extensions": [
+ "ts",
+ "m2t",
+ "m2ts",
+ "mts"
+ ]
+ },
+ "video/mp4": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "mp4",
+ "mp4v",
+ "mpg4"
+ ]
+ },
+ "video/mp4v-es": {
+ "source": "iana"
+ },
+ "video/mpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "mpeg",
+ "mpg",
+ "mpe",
+ "m1v",
+ "m2v"
+ ]
+ },
+ "video/mpeg4-generic": {
+ "source": "iana"
+ },
+ "video/mpv": {
+ "source": "iana"
+ },
+ "video/nv": {
+ "source": "iana"
+ },
+ "video/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "ogv"
+ ]
+ },
+ "video/parityfec": {
+ "source": "iana"
+ },
+ "video/pointer": {
+ "source": "iana"
+ },
+ "video/quicktime": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": [
+ "qt",
+ "mov"
+ ]
+ },
+ "video/raptorfec": {
+ "source": "iana"
+ },
+ "video/raw": {
+ "source": "iana"
+ },
+ "video/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "video/rtploopback": {
+ "source": "iana"
+ },
+ "video/rtx": {
+ "source": "iana"
+ },
+ "video/scip": {
+ "source": "iana"
+ },
+ "video/smpte291": {
+ "source": "iana"
+ },
+ "video/smpte292m": {
+ "source": "iana"
+ },
+ "video/ulpfec": {
+ "source": "iana"
+ },
+ "video/vc1": {
+ "source": "iana"
+ },
+ "video/vc2": {
+ "source": "iana"
+ },
+ "video/vnd.cctv": {
+ "source": "iana"
+ },
+ "video/vnd.dece.hd": {
+ "source": "iana",
+ "extensions": [
+ "uvh",
+ "uvvh"
+ ]
+ },
+ "video/vnd.dece.mobile": {
+ "source": "iana",
+ "extensions": [
+ "uvm",
+ "uvvm"
+ ]
+ },
+ "video/vnd.dece.mp4": {
+ "source": "iana"
+ },
+ "video/vnd.dece.pd": {
+ "source": "iana",
+ "extensions": [
+ "uvp",
+ "uvvp"
+ ]
+ },
+ "video/vnd.dece.sd": {
+ "source": "iana",
+ "extensions": [
+ "uvs",
+ "uvvs"
+ ]
+ },
+ "video/vnd.dece.video": {
+ "source": "iana",
+ "extensions": [
+ "uvv",
+ "uvvv"
+ ]
+ },
+ "video/vnd.directv.mpeg": {
+ "source": "iana"
+ },
+ "video/vnd.directv.mpeg-tts": {
+ "source": "iana"
+ },
+ "video/vnd.dlna.mpeg-tts": {
+ "source": "iana"
+ },
+ "video/vnd.dvb.file": {
+ "source": "iana",
+ "extensions": [
+ "dvb"
+ ]
+ },
+ "video/vnd.fvt": {
+ "source": "iana",
+ "extensions": [
+ "fvt"
+ ]
+ },
+ "video/vnd.hns.video": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.1dparityfec-1010": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.1dparityfec-2005": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.2dparityfec-1010": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.2dparityfec-2005": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.ttsavc": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.ttsmpeg2": {
+ "source": "iana"
+ },
+ "video/vnd.motorola.video": {
+ "source": "iana"
+ },
+ "video/vnd.motorola.videop": {
+ "source": "iana"
+ },
+ "video/vnd.mpegurl": {
+ "source": "iana",
+ "extensions": [
+ "mxu",
+ "m4u"
+ ]
+ },
+ "video/vnd.ms-playready.media.pyv": {
+ "source": "iana",
+ "extensions": [
+ "pyv"
+ ]
+ },
+ "video/vnd.nokia.interleaved-multimedia": {
+ "source": "iana"
+ },
+ "video/vnd.nokia.mp4vr": {
+ "source": "iana"
+ },
+ "video/vnd.nokia.videovoip": {
+ "source": "iana"
+ },
+ "video/vnd.objectvideo": {
+ "source": "iana"
+ },
+ "video/vnd.radgamettools.bink": {
+ "source": "iana"
+ },
+ "video/vnd.radgamettools.smacker": {
+ "source": "apache"
+ },
+ "video/vnd.sealed.mpeg1": {
+ "source": "iana"
+ },
+ "video/vnd.sealed.mpeg4": {
+ "source": "iana"
+ },
+ "video/vnd.sealed.swf": {
+ "source": "iana"
+ },
+ "video/vnd.sealedmedia.softseal.mov": {
+ "source": "iana"
+ },
+ "video/vnd.uvvu.mp4": {
+ "source": "iana",
+ "extensions": [
+ "uvu",
+ "uvvu"
+ ]
+ },
+ "video/vnd.vivo": {
+ "source": "iana",
+ "extensions": [
+ "viv"
+ ]
+ },
+ "video/vnd.youtube.yt": {
+ "source": "iana"
+ },
+ "video/vp8": {
+ "source": "iana"
+ },
+ "video/vp9": {
+ "source": "iana"
+ },
+ "video/webm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "webm"
+ ]
+ },
+ "video/x-f4v": {
+ "source": "apache",
+ "extensions": [
+ "f4v"
+ ]
+ },
+ "video/x-fli": {
+ "source": "apache",
+ "extensions": [
+ "fli"
+ ]
+ },
+ "video/x-flv": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "flv"
+ ]
+ },
+ "video/x-m4v": {
+ "source": "apache",
+ "extensions": [
+ "m4v"
+ ]
+ },
+ "video/x-matroska": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "mkv",
+ "mk3d",
+ "mks"
+ ]
+ },
+ "video/x-mng": {
+ "source": "apache",
+ "extensions": [
+ "mng"
+ ]
+ },
+ "video/x-ms-asf": {
+ "source": "apache",
+ "extensions": [
+ "asf",
+ "asx"
+ ]
+ },
+ "video/x-ms-vob": {
+ "source": "apache",
+ "extensions": [
+ "vob"
+ ]
+ },
+ "video/x-ms-wm": {
+ "source": "apache",
+ "extensions": [
+ "wm"
+ ]
+ },
+ "video/x-ms-wmv": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": [
+ "wmv"
+ ]
+ },
+ "video/x-ms-wmx": {
+ "source": "apache",
+ "extensions": [
+ "wmx"
+ ]
+ },
+ "video/x-ms-wvx": {
+ "source": "apache",
+ "extensions": [
+ "wvx"
+ ]
+ },
+ "video/x-msvideo": {
+ "source": "apache",
+ "extensions": [
+ "avi"
+ ]
+ },
+ "video/x-sgi-movie": {
+ "source": "apache",
+ "extensions": [
+ "movie"
+ ]
+ },
+ "video/x-smv": {
+ "source": "apache",
+ "extensions": [
+ "smv"
+ ]
+ },
+ "x-conference/x-cooltalk": {
+ "source": "apache",
+ "extensions": [
+ "ice"
+ ]
+ },
+ "x-shader/x-fragment": {
+ "compressible": true
+ },
+ "x-shader/x-vertex": {
+ "compressible": true
+ }
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvbWVkaWEtdHlwZXMvMS4xLjAvdmVuZG9yL2RiLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCJhcHBsaWNhdGlvbi8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uLzNncGRhc2gtcW9lLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi8zZ3BwLWltcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcGhhbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uLzNncHBoYWxmb3Jtcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2EybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWNlK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FjZS1ncm91cGNvbW0rY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWN0aXZlbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWN0aXZpdHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9haWYrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWlmK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jZG5pK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jZG5pZmlsdGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jb3N0bWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jb3N0bWFwZmlsdGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1kaXJlY3RvcnkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50Y29zdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRjb3N0cGFyYW1zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludHByb3AranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50cHJvcHBhcmFtcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZXJyb3IranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLW5ldHdvcmttYXAranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLW5ldHdvcmttYXBmaWx0ZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLXByb3BtYXAranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLXByb3BtYXBwYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLXRpcHMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLXRpcHNwYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLXVwZGF0ZXN0cmVhbWNvbnRyb2wranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLXVwZGF0ZXN0cmVhbXBhcmFtcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYW5kcmV3LWluc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXpcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXBwaW5zdGFsbGVyXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBwaW5zdGFsbGVyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FwcGxlZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXBwbGl4d2FyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXdcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXBweFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwcHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXBweGJ1bmRsZVwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwcHhidW5kbGVcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXQrand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0ZnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b20reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdG9tXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21jYXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdG9tY2F0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21kZWxldGVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRvbWRlbGV0ZWRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbWljbWFpbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0b21zdmNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRzYy1kd2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRzYy1keW5hbWljLWV2ZW50LW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0c2MtaGVsZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlbGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRzYy1yZHQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdHNjLXJzYXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyc2F0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0eG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdXRoLXBvbGljeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXV0b21hdGlvbm1sLWFtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFtbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdXRvbWF0aW9ubWwtYW1seCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhbWx4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2JhY25ldC14ZGQremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iYXRjaC1zbXRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iZG9jXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmRvY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iZWVwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2J1ZnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2MycGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbGVuZGFyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsZW5kYXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4Y3NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsbC1jb21wbGV0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYWxzLTE4NDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhcHRpdmUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYm9yLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2NjZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjbXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjeG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2N4bWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkZngreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGZ4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktY2FwYWJpbGl0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkbWlhXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaWNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1kb21haW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLW9iamVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkbWlvXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktcXVldWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pcVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG5pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NlYS0yMDE4K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWxsbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nmd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2lkLWVkaG9jK2Nib3Itc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jaXR5K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2xyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbHVlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbHVlX2luZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Ntc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY25ycCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29hcC1ncm91cCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NvYXAtcGF5bG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29tbW9uZ3JvdW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb25jaXNlLXByb2JsZW0tZGV0YWlscytjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb25mZXJlbmNlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2Uta2V5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb3NlLWtleS1zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2UteDUwOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3BsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3BsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NzcmF0dHJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3RhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3RhZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3N2bStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N1LXNlZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjdVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jd2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjd2xcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3dsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3dsK3lhbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3liZXJjYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXJ0XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhc2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGFzaC1wYXRjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXNoZGVsdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhdm1vdW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGF2bW91bnRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGNhLXJmdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kZWMtZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpYWxvZy1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaWNvbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb20ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaWNvbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGlpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Ruc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG5zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG5zLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RvY2Jvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRia1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kb3RzK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rwb3Arand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kc2twcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZHNzYytkZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkc3NjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZHNzY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kdmNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjbWFcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWRob2MrY2Jvci1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VkaS1jb25zZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGkteDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGlmYWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZmlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VsbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWxtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5jYXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY29tbWVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuZGV2aWNlaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuZWNhbGwubXNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5sZWdhY3llc24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5wcm92aWRlcmluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLnNlcnZpY2VpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zdWJzY3JpYmVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEudmVkcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1tYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVtbWFcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1vdGlvbm1sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lcHAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXB1YlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lc2hvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhpXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4cGVjdC1jdC1yZXBvcnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9leHByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Zhc3RpbmZvc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0c29hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZmRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmRmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZkdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZkdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9maGlyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9maGlyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZpZG8udHJ1c3RlZC1hcHBzK2pzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZml0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZmxleGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZm9udC1zZm50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mb250LXRkcGZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGZyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZvbnQtd29mZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZnJhbWV3b3JrLWF0dHJpYnV0ZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlbytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9qc29uXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlbytqc29uLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ2VvcGFja2FnZStzcWxpdGUzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nZW94YWNtbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlb3hhY21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbHRmLWJ1ZmZlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ21sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2duYXAtYmluZGluZy1qd3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2duYXAtYmluZGluZy1qd3NkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbmFwLWJpbmRpbmctcm90YXRpb24tandzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbmFwLWJpbmRpbmctcm90YXRpb24tandzZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3B4K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3JpYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3hmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJneGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd6XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2gyMjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2hlbGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2hqc29uXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGpzb25cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaGw3djIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaHR0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaHlwZXJzdHVkaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGtcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWJlLWtleS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pYmUtcGtnLXJlcGx5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pYmUtcHAtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW0taXNjb21wb3NpbmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4LmNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgub2JqXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmRleC5yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgudm5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmttbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlua1wiLCBcImlua21sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lvdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lwZml4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXBmaXhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaXBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pc3VwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpdHNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamF2YS1hcmNoaXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFyXCIsIFwid2FyXCIsIFwiZWFyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlclwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qYXZhLXZtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGFzc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamYyZmVlZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pvc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pvc2UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qcmQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc2NhbGVuZGFyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNjb250YWN0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29uXCIsIFwibWFwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29uLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbjVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29uNVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29ubWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29ubWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbnBhdGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2p3aytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2p3ay1zZXQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qd3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2twbWwtcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24va3BtbC1yZXNwb25zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbGQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNvbmxkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xncit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxnclwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9saW5rLWZvcm1hdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbGlua3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbGlua3NldCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xvYWQtY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbG9nb3V0K2p3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbG9zdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxvc3R4bWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbG9zdHN5bmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xwZit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL2x4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFjLWJpbmhleDQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHF4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcHRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFjd3JpdGVpaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFkcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hZHNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFuaWZlc3QranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJtYW5pZmVzdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXJjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXJjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hcmN4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcmN4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFcIiwgXCJuYlwiLCBcIm1iXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hdGhtbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXRobWwtY29udGVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWF0aG1sLXByZXNlbnRhdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1hc3NvY2lhdGVkLXByb2NlZHVyZS1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1kZXJlZ2lzdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLWVudmVsb3BlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1tc2stcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtcHJvdGVjdGlvbi1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1yZWNlcHRpb24tcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXJlZ2lzdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXJlZ2lzdGVyLXJlc3BvbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXNjaGVkdWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXVzZXItc2VydmljZS1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ib3hcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWEtcG9saWN5LWRhdGFzZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWFfY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXNjbWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVyZ2UtcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZXRhbGluayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWV0YWxpbmtcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWV0YWxpbms0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWV0YTRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWV0cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ldHNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWY0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9taWtleVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlzc2luZy1ibG9ja3MrY2Jvci1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21tdC1hZWkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYWVpXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21tdC11c2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtb2RzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3Mta2V5c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zcy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3NrZXktZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zc2tleS1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcDIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTIxXCIsIFwibXAyMVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcDRcIiwgXCJtcGc0XCIsIFwibXA0c1wiLCBcIm00cFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcGVnNC1nZW5lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcGVnNC1pb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21wZWc0LWlvZC14bXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21yYi1jb25zdW1lcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXJiLXB1Ymxpc2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zYy1pdnIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXNjLW1peGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zaXhcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2l4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zaXhidW5kbGVcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2l4YnVuZGxlXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY1wiLCBcImRvdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tdWQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tdWx0aXBhcnQtY29yZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL24tcXVhZHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJucVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXRyaXBsZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJudFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uYXNkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uZXdzLWNoZWNrZ3JvdXBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVUy1BU0NJSVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtZ3JvdXBpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVUy1BU0NJSVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtdHJhbnNtaXNzaW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ubHNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbm9kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNqc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL29hdXRoLWF1dGh6LXJlcStqd3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL29ibGl2aW91cy1kbnMtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2NzcC1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3NwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXG4gICAgICBcImJpblwiLFxuICAgICAgXCJkbXNcIixcbiAgICAgIFwibHJmXCIsXG4gICAgICBcIm1hclwiLFxuICAgICAgXCJzb1wiLFxuICAgICAgXCJkaXN0XCIsXG4gICAgICBcImRpc3R6XCIsXG4gICAgICBcInBrZ1wiLFxuICAgICAgXCJicGtcIixcbiAgICAgIFwiZHVtcFwiLFxuICAgICAgXCJlbGNcIixcbiAgICAgIFwiZGVwbG95XCIsXG4gICAgICBcImV4ZVwiLFxuICAgICAgXCJkbGxcIixcbiAgICAgIFwiZGViXCIsXG4gICAgICBcImRtZ1wiLFxuICAgICAgXCJpc29cIixcbiAgICAgIFwiaW1nXCIsXG4gICAgICBcIm1zaVwiLFxuICAgICAgXCJtc3BcIixcbiAgICAgIFwibXNtXCIsXG4gICAgICBcImJ1ZmZlclwiLFxuICAgIF0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2RhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RhXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL29kbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZWJwcy1wYWNrYWdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3BmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL29nZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9neFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vaHR0cC1rZXlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vbWRvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib21kb2NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb25lbm90ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib25ldG9jXCIsIFwib25ldG9jMlwiLCBcIm9uZXRtcFwiLCBcIm9uZXBrZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vcGMtbm9kZXNldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb3Njb3JlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9veHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3hwc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wMjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3AyMSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3AycC1vdmVybGF5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmVsb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bhc3Nwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wYXRjaC1vcHMtZXJyb3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGVtLWNlcnRpZmljYXRlLWNoYWluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGdwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BncC1rZXlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWdcIiwgXCJhc2NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BpZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGlkZi1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3M3LW1pbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwN21cIiwgXCJwN2NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3M4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczgtZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWF0dHItY2VydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtY2VydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNlclwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNybFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LXBraXBhdGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa2lwYXRoXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXhjbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa2lcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGxzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BvYy1zZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaVwiLCBcImVwc1wiLCBcInBzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bwc3AtdHJhY2tlcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ByaXZhdGUtdG9rZW4taXNzdWVyLWRpcmVjdG9yeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJpdmF0ZS10b2tlbi1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcml2YXRlLXRva2VuLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcm9ibGVtK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvYmxlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvdmVuYW5jZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByb3Z4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5hbHZlc3RyYW5kLnRpdHJheC1zaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmN3d1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImN3d1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMuY3luXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCI3LUJJVFwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5ocHViK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmltcGxpZWQtZG9jdW1lbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5pbXBsaWVkLWV4ZWN1dGFibGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5pbXBsaWVkLW9iamVjdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5pbXBsaWVkLW9iamVjdCtqc29uLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmltcGxpZWQtb2JqZWN0K3lhbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5pbXBsaWVkLXN0cnVjdHVyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLm5wcmVuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnBsdWNrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5yZGYteG1sLWNyeXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMudmNmYnppcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy54c2YreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHNrYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBza2N4bWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHZkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcXNpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmFtbCt5YW1sXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYW1sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JhcHRvcmZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRhcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJkZlwiLCBcIm93bFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZWdpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm5jXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JlbW90ZS1wcmludGluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZXB1dG9uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZXNvdXJjZS1saXN0cy1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmxkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JmYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmlzY29zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ybG1pK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ybHMtc2VydmljZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yb3V0ZS1hcGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXBkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JvdXRlLXMtdHNpZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNsc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yb3V0ZS11c2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydXNkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktY2hlY2tsaXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLWdob3N0YnVzdGVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdiclwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLW1hbmlmZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWZ0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktcHVibGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktcm9hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm9hXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktc2lnbmVkLXRhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS11cGRvd25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3J0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnRmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3J0cGxvb3BiYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NhbWxhc3NlcnRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NhbWxtZXRhZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FyaWYranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYXJpZi1leHRlcm5hbC1wcm9wZXJ0aWVzK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2JlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2JtbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY2FpcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjcVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLWN2LXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2NzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwcVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NkcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZWNldmVudCtqd3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZW5tbHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwtZXRjaCtjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5tbC1ldGNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2Vuc21sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2Vuc21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2Vuc21seFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NlcC1leGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlc3Npb24taW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2V0LXBheW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NldC1wYXltZW50LWluaXRpYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZXRwYXlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2V0cmVnXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NnbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NnbWwtb3Blbi1jYXRhbG9nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2lldmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaXZcIiwgXCJzaWV2ZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGUtZmlsdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGUtbWVzc2FnZS1zdW1tYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGVzeW1ib2xjb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpcGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NtaWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbWlcIiwgXCJzbWlsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NtcHRlMzM2bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc29hcCtmYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc29hcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3BhcnFsLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnFcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcnhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3BkeCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NwaXJpdHMtZXZlbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NxbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNxbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3JhbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcmdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3J4bWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3J1K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3J1XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NzZGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3NtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzbWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3QyMTEwLTQxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zdGl4K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3RyYXR1bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3dpZCtjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zd2lkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3dpZHRhZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWFwZXgtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWFwZXgtdXBkYXRlLWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtY29tbXVuaXR5LXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1jb21tdW5pdHktdXBkYXRlLWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtZXJyb3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtc2VxdWVuY2UtYWRqdXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXNlcXVlbmNlLWFkanVzdC1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXN0YXR1cy1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zdGF0dXMtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXVwZGF0ZS1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YXJcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGF4aWkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RlaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRlaVwiLCBcInRlaWNvcnB1c1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZXRyYV9pc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RocmF1ZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRmaVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90aW1lc3RhbXAtcXVlcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RpbWVzdGFtcC1yZXBseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGltZXN0YW1wZWQtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRzZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90bHNycHQrZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGxzcnB0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdG0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90bmF1dGhsaXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90b2tlbi1pbnRyb3NwZWN0aW9uK2p3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdG9tbFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widG9tbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90cmlja2xlLWljZS1zZHBmcmFnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90cmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHJpZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90dG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRtbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90dmUtdHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHppZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHppZi1sZWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91Ympzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1YmpcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtZ3Jwc2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy1yZXNzaGVldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzaGVldFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtdGFyZ2V0ZGVzYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy11aXNvY2tldGRlc2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92Y2FyZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZjYXJkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92ZW1taVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdml2aWRlbmNlLnNjcmlwdGZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjEwMDBtaW5kcy5kZWNpc2lvbi1tb2RlbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjFrbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuMW9iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAtcHJvc2UtcGMzYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAtcHJvc2UtcGMzYWNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZS1wYzNjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAtcHJvc2UtcGM4K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC12MngtbG9jYWwtc2VydmljZS1pbmZvcm1hdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuNWduYXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLjVnc2EyeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuNWdzYTJ4LWxvY2FsLXNlcnZpY2UtaW5mb3JtYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmFjY2Vzcy10cmFuc2Zlci1ldmVudHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmJzZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuY3JzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5jdXJyZW50LWxvY2F0aW9uLWRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuZ21vcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuZ3RwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuaW50ZXJ3b3JraW5nLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmxwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWMtc2lnbmFsbGluZy1lYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNkYXRhLW1zZ3N0b3JlLWN0cmwtcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNkYXRhLXBheWxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1yZWdyb3VwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtc2VydmljZS1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1zaWduYWxsaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtdWUtY29uZmlnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtdXNlci1wcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1mbG9vci1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1sb2NhdGlvbi1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1tYm1zLXVzYWdlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LXJlZ3JvdXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LXNlcnZpY2UtY29uZmlnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1zaWduZWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LXVlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtdWUtaW5pdC1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LXVzZXItcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tbG9jYXRpb24taW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1tYm1zLXVzYWdlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tcmVncm91cCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1zZXJ2aWNlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby10cmFuc21pc3Npb24tcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby11ZS1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tdXNlci1wcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5taWQtY2FsbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubmdhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGZjcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LWxhcmdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBpYy1idy1zbWFsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBzYlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctdmFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHZiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBpbmFwcC1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zMWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zZWFsLWdyb3VwLWRvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc2VhbC1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zZWFsLWxvY2F0aW9uLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNlYWwtbWJtcy11c2FnZS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zZWFsLW5ldHdvcmstcW9zLW1hbmFnZW1lbnQtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc2VhbC11ZS1jb25maWctaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc2VhbC11bmljYXN0LWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNlYWwtdXNlci1wcm9maWxlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc21zK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zcnZjYy1leHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNydmNjLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnN0YXRlLWFuZC1ldmVudC1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC51c3NkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC52MnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnZhZS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcDIuYmNtY3NpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcDIuc21zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcDIudGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRjYXBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNsaWdodHNzb2Z0d2FyZS5pbWFnZXNjYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zbS5wb3N0LWl0LW5vdGVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHduXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpbXBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFjbS5hZGRyZXNzeGZlcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY20uY2hhdGJvdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjdVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWN1Y29ycFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0Y1wiLCBcImFjdXRjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5haXItYXBwbGljYXRpb24taW5zdGFsbGVyLXBhY2thZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZsYXNoLm1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZm9ybXNjZW50cmFsLmZjZHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmY2R0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5meHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmeHBcIiwgXCJmeHBsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5wYXJ0aWFsLXVwbG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhkcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUueGZkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWV0aGVyLmltcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuYWZwbGluZWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmFmcGxpbmVkYXRhLXBhZ2VkZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmNtb2NhLWNtcmVzb3VyY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmZvY2EtY2hhcnNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuZm9jYS1jb2RlZGZvbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmZvY2EtY29kZXBhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1jbXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1mb3JtZGVmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1tZWRpdW1tYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLW9iamVjdGNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMubW9kY2Etb3ZlcmxheVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMubW9kY2EtcGFnZXNlZ21lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZ2VcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFoLWJhcmNvZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFoZWFkLnNwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWhlYWRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF6ZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXpzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWFkZXVzK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtYXpvbi5lYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXp3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24ubW9iaTgtZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWVyaWNhbmR5bmFtaWNzLmFjY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW1pZ2EuYW1pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYW1pXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbXVuZHNlbi5tYXplK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5vdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBrXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmtpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW5zZXItd2ViLWNlcnRpZmljYXRlLWlzc3VlLWluaXRpYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaWlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1mdW5kcy10cmFuc2Zlci1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmdGlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFudGl4LmdhbWUtY29tcG9uZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXR4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUuYXJyb3cuZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUucGFycXVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS50aHJpZnQuYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnRocmlmdC5jb21wYWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnRocmlmdC5qc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBleGxhbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBsZXh0b3Iud2FycnAranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBvdGhla2VuZGUucmVzZXJ2YXRpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUuaW5zdGFsbGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBrZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUua2V5bm90ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtleVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm0zdThcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLm51bWJlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJudW1iZXJzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wYWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBhZ2VzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wa3Bhc3NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa3Bhc3NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFyYXN0cmEuc3dpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcmlzdGFuZXR3b3Jrcy5zd2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzd2lcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFydGlzYW4ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJ0c3F1YXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXN0cmFlYS1zb2Z0d2FyZS5pb3RhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW90YVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXVkaW9ncmFwaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFlcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXV0b3BhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hdmFsb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXZpc3Rhcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibW1sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYWxzYW1pcS5ibXByXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmFuYW5hLWFjY291bnRpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLmVycm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmJmLnVzcC5tc2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLm1zZytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iZWtpdHp1ci1zdGVjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iZWxpZ2h0c29mdC5saHpkK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJlbGlnaHRzb2Z0LmxoemwremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmludC5tZWQtY29udGVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJpb3BheC5yZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibGluay1pZGItdmFsdWUtd3JhcHBlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJsdWVpY2UubXVsdGlwYXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGguZXAub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmx1ZXRvb3RoLmxlLm9vYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJtaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtaVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnBmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnBmM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJ1c2luZXNzb2JqZWN0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJlcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnl1LnVhcGkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnppcDNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jM3ZvYy5zY2hlZHVsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNhYi1qc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2Fub24tY3BkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNhbm9uLWxpcHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jYXBhc3lzdGVtcy1wZytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jZW5kaW8udGhpbmxpbmMuY2xpZW50Y29uZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNlbnR1cnktc3lzdGVtcy50Y3Bfc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hlbWRyYXcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZHhtbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hlc3MtcGduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hpcG51dHMua2FyYW9rZS1tbWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbWRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNpZWRpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkeVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2lycGFjay5pc2RuLWV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNpdGF0aW9uc3R5bGVzLnN0eWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbGF5bW9yZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2xvYW50by5ycDlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJycDlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjNGdcIiwgXCJjNGRcIiwgXCJjNGZcIiwgXCJjNHBcIiwgXCJjNHVcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsdWV0cnVzdC5jYXJ0b21vYmlsZS1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjMTFhbWNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsdWV0cnVzdC5jYXJ0b21vYmlsZS1jb25maWctcGtnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYzExYW16XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbmNmLmhlbG0uY2hhcnQuY29udGVudC52MS50YXIrZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNuY2YuaGVsbS5jaGFydC5wcm92ZW5hbmNlLnYxLnByb3ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbmNmLmhlbG0uY29uZmlnLnYxK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvZmZlZXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLmRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGFiaW8ueG9kb2N1bWVudHMuZG9jdW1lbnQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5wcmVzZW50YXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5zcHJlYWRzaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLnNwcmVhZHNoZWV0LXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsZWN0aW9uLmRvYytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsZWN0aW9uLm5leHQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbWljYm9vay1yYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb21tZXJjZS1iYXR0ZWxsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbW1vbnNwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb250YWN0LmNtc2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGJjbXNnXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb3Jlb3MuaWduaXRpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29zbW9jYWxsZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGt4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLmtleWJvYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xra1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5wYWxldHRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa3RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIud29yZGJhbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGt3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcml0aWNhbHRvb2xzLndicyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndic1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3J5cHRpaS5waXBlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNyeXB0by1zaGFkZS1maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3J5cHRvbWF0b3IuZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3J5cHRvbWF0b3IudmF1bHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdGMtcG9zbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN0Y3Qud3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcG9zdHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcHBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXJhc3RlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cmwuY2FyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjYXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cmwucGN1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjdXJsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWFuLmRlYW4ucm9vdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN5YmFua1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN5Y2xvbmVkeCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWNsb25lZHgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kMmwuY291cnNlcGFja2FnZTFwMCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kM20tZGF0YXNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmQzbS1wcm9ibGVtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGFydFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGF0YS12aXNpb24ucmR6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmR6XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXRhbG9nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGF0YXBhY2thZ2UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGF0YXJlc291cmNlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRiZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRiZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGViaWFuLmJpbmFyeS1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGVjZS5kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZmXCIsIFwidXZ2ZlwiLCBcInV2ZFwiLCBcInV2dmRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UudHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dFwiLCBcInV2dnRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UudW5zcGVjaWZpZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnhcIiwgXCJ1dnZ4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLnppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2elwiLCBcInV2dnpcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlbm92by5mY3NlbGF5b3V0LWxpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZV9sYXVuY2hcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlc211bWUubW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kaXItYmkucGxhdGUtZGwtbm9zdWZmaXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kbS5kZWxlZ2F0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG5hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG5hXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2N1bWVudCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1scFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubW9iaWxlLjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tb2JpbGUuMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvcmVtaXIuc2NvcmVjbG91ZC1iaW5hcnktZG9jdW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcGdyYXBoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHBnXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcmVhbWZhY3RvcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZmFjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcml2ZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcy1rZXlwb2ludFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3B4eFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsLmZsYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsLmh0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuYWl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWl0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZHZiaXNsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmR2YmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZXNnY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNkZnRub3RpZmFjY2Vzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZXNnYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dhY2Nlc3MyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dwZGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXBkY3JvYW1pbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXB0di5hbGZlYy1iYXNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwdHYuYWxmZWMtZW5oYW5jZW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtYWdncmVnYXRlLXJvb3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtY29udGFpbmVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWdlbmVyaWMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtbXNnbGlzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaW5pdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5wZnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2Y1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHhyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHluYWdlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdlb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHpyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWFzeWthcmFva2UuY2RnZG93bmxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY2Rpcy11cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY2lwLnJscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjbGlwc2UuZGl0dG8ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLmNoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFnXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5zZXJpZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5zZXJpZXN1cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lZmkuaW1nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmlzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVsbit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lbWNsaWVudC5hY2Nlc3NyZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW5saXZlblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5tbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW5waGFzZS5lbnZveVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwcmludHMuZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLmVzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXBzb24ubXNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXNmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5xdWlja2FuaW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWFtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zYWx0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2x0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzc2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVyaWNzc29uLnF1aWNrY2FsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVyb2ZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXNwYXNzLWVzcGFzcyt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lc3ppZ25vMyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzM1wiLCBcImV0M1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5hb2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFzaWMtZSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFzaWMtcyt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmN1Zyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmNvbW1hbmQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZkaXNjb3ZlcnkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZwcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWJjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWNvZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnNhZC1ucHZyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2VydmljZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnN5bmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZ1ZXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1jaWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1oZWc1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5vdmVybG9hZC1jb250cm9sLXBvbGljeS1kYXRhc2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5wc3RuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5zY2kreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnNpbXNlcnZzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS50aW1lc3RhbXAtdG9rZW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnRzbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kudHNsLmRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV1Lmthc3Bhcmlhbi5jYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXVkb3JhLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnByb2ZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnNldHRpbmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXZvbHYuZWNpZy50aGVtZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV4c3RyZWFtLWVtcG93ZXIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXhzdHJlYW0tcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXoyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lenBpeC1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXozXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mLXNlY3VyZS5tb2JpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mYW1pbHlzZWFyY2guZ2VkY29tK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZhc3Rjb3B5LWRpc2staW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZkZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmRzbi5tc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZWVkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZHNuLnNlZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZWVkXCIsIFwiZGF0YWxlc3NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZmc25zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmljbGFiLmZsYit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5maWxtaXQuemZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmludHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5maXJlbW9ua2V5cy5jbG91ZGNlbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mbG9ncmFwaGl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3BoXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mb250LWZvbnRmb3JnZS1zZmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZm1cIiwgXCJmcmFtZVwiLCBcIm1ha2VyXCIsIFwiYm9va1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJlZWxvZy5jb21pY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZyb2dhbnMuZm5jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbmNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZyb2dhbnMubHRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZzYy53ZWJsYXVuY2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmc2NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmRvY3V3b3Jrc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmRvY3V3b3Jrcy5iaW5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppZmlsbS5mYi5kb2N1d29ya3MuY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaWZpbG0uZmIuamZpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYTJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2EzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzZ3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZzVcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNwcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiaDJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5hcnQtZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guYXJ0NFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kZGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZHdcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuYmluZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzLmNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5oYnBsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnV0LW1pc25ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1dG9pbitjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnV0b2luK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1enp5c2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmenNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdhNGdoLnBhc3Nwb3J0K2p3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlbm9tYXRpeC50dXhlZG9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0eGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlbm96aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW50aWNzLmdyZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW50b28uY2F0bWV0YWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW50b28uZWJ1aWxkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VudG9vLmVjbGFzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlbnRvby5ncGtnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VudG9vLm1hbmlmZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VudG9vLnBrZ21ldGFkYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VudG9vLnhwYWtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW8ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9jdWJlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2diXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS5zbGlkZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZ3NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb2dlYnJhLnRvb2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZ3RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2V4XCIsIFwiZ3JlXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9uZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3h0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzJ3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9zcGFjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImczd1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VyYmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdsb2JhbHBsYXRmb3JtLmNhcmQtY29udGVudC1tZ3QtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nbXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnbXhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdudS50YWxlci5leGNoYW5nZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nbnUudGFsZXIubWVyY2hhbnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZG9jdW1lbnRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZG9jXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2xpZGVzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zcHJlYWRzaGVldFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdzaGVldFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImttbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImttelwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLmUtZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLmUtZm9ybSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2sueG1sZGF0YWNvbnRhaW5lcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkY2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdweHNlZS5tYXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncmFmZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncWZcIiwgXCJncXNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyaWRtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1hY2NvdW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2FjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaGVscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdoZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWlkZW50aXR5LW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaW1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1pbmplY3RvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdydlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXRvb2wtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0bVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXRvb2wtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS12Y2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZjZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGFsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhhbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGFuZGhlbGQtZW50ZXJ0YWlubWVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInptbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGJjaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhiY2lcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhjK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhjbC1iaXJlcG9ydHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oZHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oZXJva3UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGhlLmxlc3Nvbi1wbGF5ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsZXNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWhwZ2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJocGdsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ocC1ocGlkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHBpZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHBzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ocC1qbHl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamx0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ocC1wY2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY2xcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNseGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhzbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh0dHBob25lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHlkcm9zdGF0aXguc29mLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZmQtaGRzdHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyLWl0ZW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHlwZXJkcml2ZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oem4tM2QtY3Jvc3N3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLmFmcGxpbmVkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0uZWxlY3Ryb25pYy1tZWRpYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlibS5taW5pcGF5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXB5XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubW9kY2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZnBcIiwgXCJsaXN0YWZwXCIsIFwibGlzdDM4MjBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlibS5yaWdodHMtbWFuYWdlbWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlybVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLnNlY3VyZS1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljY1wiLCBcImljbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWVlZS4xOTA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWdsb2FkZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZ2xcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltYWdlbWV0ZXIuZm9sZGVyK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltYWdlbWV0ZXIuaW1hZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXZwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpdnVcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMuaW1zY2N2MXAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmltc2NjdjFwM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5saXMudjIucmVzdWx0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbGNvbnN1bWVycHJvZmlsZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eS5pZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xzZXR0aW5ncytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xzZXR0aW5ncy5zaW1wbGUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtZWRjb250cm9sLnJtcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluZm9ybWl4LXZpc2lvbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3RlY2gucHJvamVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluZm90ZWNoLnByb2plY3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbm5vcGF0aC53YW1wLm5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluc29ycy5pZ21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZ21cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludGVyY29uLmZvcm1uZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cHdcIiwgXCJ4cHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludGVyZ2VvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaTJnXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcnRydXN0LmRpZ2lib3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcnRydXN0Lm5uY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFib1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFib1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50dS5xZnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJxZnhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwZnMuaXBucy1yZWNvcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcGxkLmNhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwbGQuZGFnLWNib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcGxkLmRhZy1qc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXBsZC5yYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHRjLmcyLmNhdGFsb2dpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5jb25jZXB0aXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIua25vd2xlZGdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIubmV3c2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHRjLmcyLm5ld3NtZXNzYWdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wYWNrYWdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIucGxhbm5pbmdpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB1bnBsdWdnZWQucmNwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmNwcm9maWxlXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcmVwb3NpdG9yeS5wYWNrYWdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXJwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcy14cHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cHJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlzYWMuZmNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmNzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pc28xMTc4My0xMCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYW1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LWRpcmVjdG9yeS1zZXJ2aWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtanBuc3RvcmUtd2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtcGF5bWVudC13YWtldXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1yZWdpc3RyYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1yZWdpc3RyYXRpb24td2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtc2V0c3RvcmUtd2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtdmVyaWZpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtdmVyaWZpY2F0aW9uLXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpjcC5qYXZhbWUubWlkbGV0LXJtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamlzcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImppc3BcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpvb3N0LmpvZGEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpvZGFcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpzay5pc2RuLW5nblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmthaG9vdHpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrdHpcIiwgXCJrdHJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rYXJib25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrYXJib25cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rY2hhcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaHJ0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2Zvcm11bGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZm9cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5raXZpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZsd1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtvbnRvdXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrb25cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rcHJlc2VudGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3ByXCIsIFwia3B0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua3NwcmVhZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtzcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3dkXCIsIFwia3d0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZW5hbWVhYXBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHRrZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2lkc3BpcmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2lhXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5raW5hclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtuZVwiLCBcImtucFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua29hblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNrcFwiLCBcInNrZFwiLCBcInNrdFwiLCBcInNrbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua29kYWstZGVzY3JpcHRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzLmxhcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGFzeG1sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sYXN6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sZGV2LnByb2R1Y3RsaWNlbnNpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sZWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxpYmVydHktcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmRlc2t0b3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsYmRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGJlXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb2dpcGlwZS5jaXJjdWl0K3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjEyM1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtYXBwcm9hY2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcHJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLWZyZWVsYW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuc2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLW9yZ2FuaXplclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9yZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtc2NyZWVuY2FtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2NtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHdwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYWNwb3J0cy5wb3J0cGtnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG9ydHBrZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFwYm94LXZlY3Rvci10aWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXZ0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmFjdGlvbnRva2VuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFybGluLmRybS5jb25mdG9rZW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmxpY2Vuc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLm1kY2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXNvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXhhci5hcmNoaXZlLjN0eit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXhtaW5kLm1heG1pbmQtZGJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tY2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtY2RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1kbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1kbC1tYnNkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1lZGNhbGNkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWMxXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRpYXN0YXRpb24uY2RrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGtleVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWVkaWNhbGhvbG9kZWNrLnJlY29yZHhyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWVyaWRpYW4tc2xpbmdzaG90XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWVybWFpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1mZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtd2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1mbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZm1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguZmxvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxvXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb2dyYWZ4LmlneFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlneFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LnBvcnRhYmxlLWV4ZWN1dGFibGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQud2luZG93cy50aHVtYm5haWwtY2FjaGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWVsZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtaWZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pbmlzb2Z0LWhwMzAwMC1zYXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWl0c3ViaXNoaS5taXN0eS1ndWFyZC50cnVzdHdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kYWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkYWZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkaXNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tYmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYmtcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tcXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcXlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2xcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5wbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbGNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy50eGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0eGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uYXBwbGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcG5cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5jZXJ0aWZpY2F0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmFkc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUuZmlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmdvdGFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmttclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZS50dGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUud2VtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuaXBybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHVsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy0zbWZkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWFydGdhbHJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2lsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1hc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhYlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtY29sb3IuaWNjcHJvZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNcIiwgXCJ4bG1cIiwgXCJ4bGFcIiwgXCJ4bGNcIiwgXCJ4bHRcIiwgXCJ4bHdcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsYW1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHRtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlb3RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWh0bWxoZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2htXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1pbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpbXNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWxybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxybVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZXgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRobXhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLW9wZW50eXBlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLW91dGxvb2tcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2dcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBhY2thZ2Uub2JmdXNjYXRlZC1vcGVudHlwZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnNlY2NhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2F0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc3RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBsYXlyZWFkeS5pbml0aWF0b3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0XCIsIFwicHBzXCIsIFwicG90XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LmFkZGluLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwYW1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQucHJlc2VudGF0aW9uLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwdG1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGUubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xkbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5zbGlkZXNob3cubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBzbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwb3RtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcmludGRldmljZWNhcGFiaWxpdGllcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50aW5nLnByaW50dGlja2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcmludHNjaGVtYXRpY2tldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByb2plY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcHBcIiwgXCJtcHRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXRuZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLmRldmljZXBhaXJpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLm53cHJpbnRpbmcub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5wcmludGVycGFpcmluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdpbmRvd3Mud3NkLm9vYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLmxpYy1jaGxnLXJlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLmxpYy1yZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubWV0ZXItY2hsZy1yZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5tZXRlci1yZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC5kb2N1bWVudC5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb2NtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvdG1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3BzXCIsIFwid2tzXCIsIFwid2NtXCIsIFwid2RiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13cGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXhwc2RvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHBzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tc2EtZGlzay1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2VxXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tc2dwYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNpZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tdWx0aWFkLmNyZWF0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tdWx0aWFkLmNyZWF0b3IuY2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWMtbmlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11c2ljaWFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXVzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tdXZlZS5zdHlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zdHlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm15bmZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFnbGV0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uYWNhbWFyLnlicmlkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5hdG8uYmluZGluZ2RhdGFvYmplY3QrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5hdG8uYmluZGluZ2RhdGFvYmplY3QranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmF0by5iaW5kaW5nZGF0YW9iamVjdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmF0by5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmllcGQremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmNkLmNvbnRyb2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uY2QucmVmZXJlbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmVhcnN0Lmluditqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uZWJ1bWluZC5saW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmVydmFuYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5ldGZweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5ldXJvbGFuZ3VhZ2Uubmx1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmx1XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaW1uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmludGVuZG8ubml0cm8ucm9tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmludGVuZG8uc25lcy5yb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaXRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnRmXCIsIFwibml0ZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtZGlyZWN0b3J5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibm5kXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1zZWFsZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubnNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5ud1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuY2F0YWxvZ3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5jb25tbCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuaXB0di5jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5pc2RzLXJhZGlvLXByZXNldHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5sYW5kbWFyayt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubGFuZG1hcmtjb2xsZWN0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmFjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm4tZ2FnZS5kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmdkYXRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm4tZ2FnZS5zeW1iaWFuLmluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm4tZ2FnZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubmNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucGNkK3dieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucGNkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnBzdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwc3NcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVkbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWR4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5leHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleHRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5jb250ZW50LXNoYXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLmZpbGUtdHJhbnNmZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwub2d3X3JlbW90ZS1hY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuc2lwLXRhX3JlbW90ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5zaXAtdGFfdGNwX3N0cmVhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9haS53b3JrZmxvd3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYWkud29ya2Zsb3dzK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9haS53b3JrZmxvd3MreWFtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5iYXNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5kYXRhYmFzZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZm9ybXVsYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGZ0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGdcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljcy10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90Z1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RpXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0LXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtbWFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXItdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90dFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RoXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYm5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vY2YrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9jaS5pbWFnZS5tYW5pZmVzdC52MStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vZnRuLmwxMG4ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jb250ZW50YWNjZXNzZG93bmxvYWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNvbnRlbnRhY2Nlc3NzdHJlYW1pbmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNzcGctaGV4YmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5kYWUuc3ZnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5kYWUueGh0bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLm1pcHB2Y29udHJvbG1lc3NhZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnBhZS5nZW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnNwZGlzY292ZXJ5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5zcGRsaXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi51ZXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnVzZXJwcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2xwYy1zdWdhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhvXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1odHRwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1odHRwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LmFzc29jaWF0ZWQtcHJvY2VkdXJlLXBhcmFtZXRlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5kcm0tdHJpZ2dlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LmltZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5sdGttXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0Lm5vdGlmaWNhdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5wcm92aXNpb25pbmd0cmlnZ2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnYm9vdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zZ2RkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnZHVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2ltcGxlLXN5bWJvbC1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc21hcnRjYXJkLXRyaWdnZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zcHJvdit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zdGttXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1hZGRyZXNzLWJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLWZlYXR1cmUtaGFuZGxlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItcGNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1zdWJzLWludml0ZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItdXNlci1wcmVmcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kY2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGNkY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kZDIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZDJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kcm0ucmlzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5ncm91cC11c2FnZS1saXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEubHdtMm0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK3RsdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wYWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmRldGFpbGVkLXByb2dyZXNzLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuZmluYWwtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5ncm91cHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmludm9jYXRpb24tZGVzY3JpcHRvcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2Mub3B0aW1pemVkLXByb2dyZXNzLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wdXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnNjaWRtLm1lc3NhZ2VzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnhjYXAtZGlyZWN0b3J5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hZHMtZW1haWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWZvbGRlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hbG9jLXN1cGwtaW5pdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YW14XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbnZpZi5tZXRhZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5ibG94LmdhbWUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmd4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVuYmxveC5nYW1lLWJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5leWUub2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3Blbm9mZmljZW9yZy5leHRlbnNpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm94dFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnN0cmVldG1hcC5kYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVudGltZXN0YW1wcy5vdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbXhtbHByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1jb2xvcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbWxheW91dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtc3R5bGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuY29tbWVudGF1dGhvcnMreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLmNvbW1lbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuaGFuZG91dG1hc3Rlcit4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwubm90ZXNtYXN0ZXIreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLm5vdGVzc2xpZGUreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwdHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbi5tYWluK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzcHJvcHMreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xkeFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZWxheW91dCt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVtYXN0ZXIreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwc3hcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvdy5tYWluK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXVwZGF0ZWluZm8reG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRhYmxlc3R5bGVzK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50YWdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwb3R4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZS5tYWluK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC52aWV3cHJvcHMreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY2NoYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbGxpbmsreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RjYWNoZWRlZmluaXRpb24reG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RjYWNoZXJlY29yZHMreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3R0YWJsZSt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeXRhYmxlK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uaGVhZGVycyt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbmxvZyt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRzdHJpbmdzK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxzeFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0bWV0YWRhdGEreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVzaW5nbGVjZWxscyt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsdHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VybmFtZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlZGVwZW5kZW5jaWVzK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVvdmVycmlkZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbGRyYXdpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmNvbW1lbnRzK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG9jeFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5nbG9zc2FyeSt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5tYWluK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmVuZG5vdGVzK3htbFwiOlxuICAgIHtcbiAgICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvbnR0YWJsZSt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5mb290ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvb3Rub3Rlcyt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5udW1iZXJpbmcreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuc2V0dGluZ3MreG1sXCI6XG4gICAge1xuICAgICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuc3R5bGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvdHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUubWFpbit4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC53ZWJzZXR0aW5ncyt4bWxcIjpcbiAgICB7XG4gICAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmRpZ2l0YWwtc2lnbmF0dXJlLXhtbHNpZ25hdHVyZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYWNsZS5yZXNvdXJjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcmFuZ2UuaW5kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3NhLm5ldGRlcGxveVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZ3BcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuYnVuZGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3NnaS5kcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3Rwcy5jdC1raXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5veGxpLmNvdW50Z3JhcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYWdlcmR1dHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFsbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBkYlwiLCBcInBxYVwiLCBcIm9wcmNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhbm9wbHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYW9zLnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhdGVudGRpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYXRpZW50ZWNvbW1zZG9jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGF3YWFmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGF3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wY29zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGcuZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wZy5vc2FzbGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlaTZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBpYWNjZXNzLmFwcGxpY2F0aW9uLWxpY2VuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5waWNzZWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlZmlmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wbWkud2lkZ2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2dcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvYy5ncm91cC1hZHZlcnRpc2VtZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG9ja2V0bGVhcm5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYmRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjYtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3LXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3NVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjc1LXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wcmVtaW5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJveFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHJvdGV1cy5tYWdhemluZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1nelwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHNmc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB0Lm11bmR1c211bmRpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHVibGlzaGFyZS1kZWx0YS10cmVlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicXBzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wdmkucHRpZDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdGlkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wd2ctbXVsdGlwbGV4ZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wd2cteGh0bWwtcHJpbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aHRtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFsY29tbS5icmV3LWFwcC1yZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFyYW50YWluZW5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnF1YXJrLnF1YXJreHByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicXhkXCIsIFwicXh0XCIsIFwicXdkXCIsIFwicXd0XCIsIFwicXhsXCIsIFwicXhiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdW9iamVjdC1xdW94ZG9jdW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1vbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtY29uZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1jb25uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LWRpYWxvZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1zdHJlYW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtY29uZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWJhc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWZheC1kZXRlY3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWZheC1zZW5kcmVjdit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctZ3JvdXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLXNwZWVjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctdHJhbnNmb3JtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFpbnN0b3IuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhcGlkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmFyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWFsdm5jLmJlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJlZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVjb3JkYXJlLm11c2ljeG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNpY3htbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVscGlwZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJlbmxlYXJuLnJscHJpbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZXNpbGllbnQubG9naWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZXN0ZnVsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJpZy5jcnlwdG9ub3RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3J5cHRvbm90ZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmltLmNvZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY29kXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEtdmJyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybXZiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxpbms2NlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnMtMjc0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJ1Y2t1cy5kb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnMzc21zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2FpbGluZ3RyYWNrZXIudHJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2FyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2JtLmNpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNibS5taWQyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2NyaWJ1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC4zZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuY3NmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLmRvY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5lbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQubWh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLm5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5wcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQudGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC54bHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5odG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwucGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VlbWFpbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2Vpcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlbWRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZW1mXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFkZS1zYXZlLWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5mb3JtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlmbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuZm9ybXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXRwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5pbnRlcmNoYW5nZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlpZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlwa1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hvb3Rwcm9vZitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaG9wa2ljaytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaWdyb2suc2Vzc2lvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNpbXRlY2gtbWluZG1hcHBlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR3ZFwiLCBcInR3ZHNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNpcmVuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNtYWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbWZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNtYXJ0Lm5vdGVib29rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hcnQudGVhY2hlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRlYWNoZXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNtaW50aW8ucG9ydGFscy5hcmNoaXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc25lc2Rldi1wYWdlLXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc29mdHdhcmU2MDIuZmlsbGVyLmZvcm0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc29mdHdhcmU2MDIuZmlsbGVyLmZvcm0teG1sLXppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RrbVwiLCBcInNka2RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLmR4cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR4cFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3BvdGZpcmUuc2ZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2ZzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zcWxpdGUzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3NzLWNvZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1kdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zc3MtbnRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmNhbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmRyYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLm1hdGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2R3XCIsIFwidm9yXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyLWdsb2JhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2dsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtemlwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic21cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0cmVldC1zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ud2FkbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhZGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuY2FsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3hjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGMudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0Y1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhdy50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmltcHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4aVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwubWF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3htXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3h3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4Z1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXIudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0d1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VzLWNhbGVuZGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3VzXCIsIFwic3VzcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3ZkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ZkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zd2lmdHZpZXctaWNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3lieWwubW9sMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5Y2xlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3lmdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpc1wiLCBcInNpc3hcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHNtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZG1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbS5ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG1kZGYrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG1kZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtdG5kcyt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kcy5ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50YWJsZXNjaGVtYStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50YW8uaW50ZW50LW1vZHVsZS1hcmNoaXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFvXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50Y3BkdW1wLnBjYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY2FwXCIsIFwiY2FwXCIsIFwiZG1wXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50aGluay1jZWxsLnBwdHRjK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRtZC5tZWRpYWZsZXguYXBpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudG1vYmlsZS1saXZldHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0bW9cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRyaS5vbmVzb3VyY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmlkLnRwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRwdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJpc2NhcGUubXhzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cnVlYXBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHJhXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cnVlZG9jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudWJpc29mdC53ZWJwbGF5ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51ZmRsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widWZkXCIsIFwidWZkbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudWlxLnRoZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXR6XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51bWFqaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1bWpcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVuaXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widW5pdHl3ZWJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVvbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1b21sXCIsIFwidW9cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuYWxlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmFsZXJ0LXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5iZWFyZXItY2hvaWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5iZWFyZXItY2hvaWNlLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jaGFubmVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jaGFubmVsLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0LXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5zaWduYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cmktbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmFsdmUuc291cmNlLm1hdGVyaWFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmN4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmN4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZC1zdHVkeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlY3RvcndvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmVsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcmltYXRyaXgudmNhc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcml0b25lLmFpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmVyeWFudC50aGluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmVzLmVuY3J5cHRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpZHNvZnQudmlkY29uZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpc2lvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnNkXCIsIFwidnN0XCIsIFwidnNzXCIsIFwidnN3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2aXNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudnNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnNmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAuc2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndhcC53YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2J4bWxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndhcC53bWxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21sY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndtbHNjcmlwdGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FzbWZsb3cud2FmbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndlYnR1cmJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3RiXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEuZHBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2ZhLnAycFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndmYS53c2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53aW5kb3dzLmRldmljZXBhaXJpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53bWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53bWYuYm9vdHN0cmFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndvbGZyYW0ubWF0aGVtYXRpY2EucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndvbGZyYW0ucGxheWVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmJwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b3JkbGlmdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndvcmRwZXJmZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3BkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53cWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cWRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndycS1ocDMwMDAtbGFiZWxsZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53dC5zdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LnNzcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhhY21sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhhcmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4YXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhlY3JldHMtZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueGZkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhmZGxcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhmZGwud2ViZm9ybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLmNwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54bXBpZS5kcGtnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucGxhblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLnBwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54bXBpZS54bGltXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LWRpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2ZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2c1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LXZvaWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHZwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9zZnB2Z1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnJlbW90ZS1zZXR1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLWF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2FmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1waHJhc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS50aHJvdWdoLW5nblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS50dW5uZWwtdWRwZW5jYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW93ZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWVsbG93cml2ZXItY3VzdG9tLW1lbnVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbXBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnp1bFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInppclwiLCBcInppcnpcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnp6YXp6LmRlY2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6YXpcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm9pY2V4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2eG1sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZvdWNoZXItY21zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZxLXJ0Y3B4clwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2FzbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2FzbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93YXRjaGVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndpZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93ZWJwdXNoLW9wdGlvbnMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aG9pc3BwLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aG9pc3BwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aWRnZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Z3RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2luaGxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJobHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2l0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd29yZHBlcmZlY3Q1LjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dzZGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3c2RsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dzcG9saWN5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3Nwb2xpY3lcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCI3elwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFiaXdvcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFid1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFjZS1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhY2VcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRtZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFyalwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFyalwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYWJcIiwgXCJ4MzJcIiwgXCJ1MzJcIiwgXCJ2b3hcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1zZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFhc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiY3Bpb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJkb2NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiZG9jXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widG9ycmVudFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJsb3JiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibGJcIiwgXCJibG9yYlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJ6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJ6XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYnppcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJ6MlwiLCBcImJvelwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNiclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2JyXCIsIFwiY2JhXCIsIFwiY2J0XCIsIFwiY2J6XCIsIFwiY2I3XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2RsaW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jZnMtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2ZzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2hhdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNoZXNzLXBnblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGduXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hyb21lLWV4dGVuc2lvblwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNyeFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvY29hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNjb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvbXByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY29uZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnNjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY3Bpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3Bpb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NoXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZGViXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZWJcIiwgXCJ1ZGViXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZGdjLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRnY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRpcmVjdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXG4gICAgICBcImRpclwiLFxuICAgICAgXCJkY3JcIixcbiAgICAgIFwiZHhyXCIsXG4gICAgICBcImNzdFwiLFxuICAgICAgXCJjY3RcIixcbiAgICAgIFwiY3h0XCIsXG4gICAgICBcInczZFwiLFxuICAgICAgXCJmZ2RcIixcbiAgICAgIFwic3dhXCIsXG4gICAgXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRvb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWR0Ym5jeCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmN4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHRib29rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdGJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kdGJyZXNvdXJjZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmVzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHZpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdmlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1lbnZveVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXZ5XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZXZhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJldmFcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWJkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmRmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1kb3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWZyYW1lbWFrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWdob3N0c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWxpYmdyeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwc2ZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXBjZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zbmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNuZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtc3BlZWRvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zdW5vcy1uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC10eXBlMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGZhXCIsIFwicGZiXCIsIFwicGZtXCIsIFwiYWZtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC12Zm9udFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZyZWVhcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFyY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZ1dHVyZXNwbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BsXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ2NhLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdjYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdsdWx4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1bHhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1nbnVtZXJpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ251bWVyaWNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ncmFtcHMteG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncmFtcHNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ndGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndGFyXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWhkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGRmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwaHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pbnN0YWxsLWluc3RydWN0aW9uc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW5zdGFsbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWlzbzk2NjAtaW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlzb1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWl3b3JrLWtleW5vdGUtc2Zma2V5XCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2V5XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaXdvcmstbnVtYmVycy1zZmZudW1iZXJzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnVtYmVyc1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWl3b3JrLXBhZ2VzLXNmZnBhZ2VzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGFnZXNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWFyY2hpdmUtZGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXJkaWZmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpubHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gta2VlcGFzczJcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZGJ4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbGF0ZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxhdGV4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbHVhLWJ5dGVjb2RlXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHVhY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWx6aC1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsemhcIiwgXCJsaGFcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tYWtlc2VsZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydW5cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1taWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1pZVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByY1wiLCBcIm1vYmlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcGVndXJsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLWFwcGxpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcHBsaWNhdGlvblwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXNob3J0Y3V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsbmtcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy13bWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXdtelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid216XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMteGJhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJhcFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZGJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2JpbmRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2JkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNjYXJkZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3JkXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNjbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2Rvcy1wcm9ncmFtXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhlXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhlXCIsIFwiZGxsXCIsIFwiY29tXCIsIFwiYmF0XCIsIFwibXNpXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNtZWRpYXZpZXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm12YlwiLCBcIm0xM1wiLCBcIm0xNFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zbWV0YWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtZlwiLCBcIndtelwiLCBcImVtZlwiLCBcImVtelwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zbW9uZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ueVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zcHVibGlzaGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdWJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3NjaGVkdWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY2RcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3Rlcm1pbmFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cm1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3dyaXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cmlcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1uZXRjZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5jXCIsIFwiY2RmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGFjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbnpiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuemJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wZXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsXCIsIFwicG1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1waWxvdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmNcIiwgXCJwZGJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMlwiLCBcInBmeFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdiXCIsIFwic3BjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGtjczctY2VydHJlcXJlc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA3clwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBraS1tZXNzYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1yZWRoYXQtcGFja2FnZS1tYW5hZ2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJlc2VhcmNoLWluZm8tc3lzdGVtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlzXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2VhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2hhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2hhclwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3dmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtYXBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4YXBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zcWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNxbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN0dWZmaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN0dWZmaXR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaXR4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3VicmlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcnRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdjRjcGlvXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3Y0Y3JjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdjRjcmNcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10M3ZtLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0M1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRhZHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdhbVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0YXJcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10Y2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRjbFwiLCBcInRrXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0ZXhcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXgtdGZtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Zm1cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0ZXhpbmZvXCIsIFwidGV4aVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRnaWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9ialwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXVzdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1c3RhclwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtaGRkXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LW92YVwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3ZhXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm92ZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmJveFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmJveFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmJveC1leHRwYWNrXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmJveC1leHRwYWNrXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGlcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZkaVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmhkXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2aGRcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZtZGtcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZtZGtcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3JjXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtd2ViLWFwcC1tYW5pZmVzdCtqc29uXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJhcHBcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGVyXCIsIFwiY3J0XCIsIFwicGVtXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1yYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXg1MDktbmV4dC1jYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhmaWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZpZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhsaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14cGluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwaVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXh6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4elwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXptYWNoaW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6MVwiLCBcInoyXCIsIFwiejNcIiwgXCJ6NFwiLCBcIno1XCIsIFwiejZcIiwgXCJ6N1wiLCBcIno4XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3g0MDAtYnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hhY21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94YW1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4YW1sXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtYXR0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGF2XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtY2Fwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhjYVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZGZcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1lbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhlbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWVycm9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLW5zK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG5zXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjb24tY29uZmVyZW5jZS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y29uLWNvbmZlcmVuY2UtaW5mby1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94ZW5jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGVuY1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94ZmRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkZlwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhodG1sXCIsIFwieGh0XCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hodG1sLXZvaWNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hsaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCIsIFwieHNsXCIsIFwieHNkXCIsIFwicm5nXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbC1kdGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0ZFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94bWwtZXh0ZXJuYWwtcGFyc2VkLWVudGl0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94bXBwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94b3AreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4b3BcIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwbFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94c2x0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHNsXCIsIFwieHNsdFwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94c3BmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c3BmXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3h2K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhtbFwiLCBcInhodm1sXCIsIFwieHZtbFwiLCBcInh2bVwiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieWFuZ1wiXSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLWRhdGErY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZy1kYXRhK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZy1kYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZy1wYXRjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZy1zaWQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95aW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5aW5cIl0sXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiemlwXCJdLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3psaWJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImFwcGxpY2F0aW9uL3pzdGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vMzJrYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvLzNncHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzZ3BwXCJdLFxuICB9LFxuICBcImF1ZGlvLzNncHAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9hYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZHRzXCIsIFwiYWFjXCJdLFxuICB9LFxuICBcImF1ZGlvL2FjM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFkcFwiXSxcbiAgfSxcbiAgXCJhdWRpby9hbXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhbXJcIl0sXG4gIH0sXG4gIFwiYXVkaW8vYW1yLXdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9hbXItd2IrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9hcHR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9hc2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2F0cmFjLWFkdmFuY2VkLWxvc3NsZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy14XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9hdHJhYzNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2Jhc2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXVcIiwgXCJzbmRcIl0sXG4gIH0sXG4gIFwiYXVkaW8vYnYxNlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vYnYzMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vY2xlYXJtb2RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9jblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZGF0MTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2Rsc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZHNyLWVzMjAxMTA4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDIwNTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2Rzci1lczIwMjIxMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZHNyLWVzMjAyMjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9kdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZHZpNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZWFjM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2cmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2cmMtcWNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ldnJjMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2cmNiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ldnJjYjBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2cmNiMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZXZyY253XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ldnJjbncwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ldnJjbncxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ldnJjd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2cmN3YjBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2cmN3YjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2V2c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZmxhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZmxleGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZndkcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzExLTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2c3MTlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2c3MjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2c3MjIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzIzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTI0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTMyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nNzI5MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vZzcyOWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2c3MjllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9nc21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2dzbS1lZnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2dzbS1oci0wOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vaWxiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vaXAtbXJfdjIuNVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vaXNhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhdWRpby9sMTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL2wyMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vbDI0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhdWRpby9sOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vbHBjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9tYXRyb3NrYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vbWVscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vbWVscDEyMDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL21lbHAyNDAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9tZWxwNjAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9taGFzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9taWRpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtaWRcIiwgXCJtaWRpXCIsIFwia2FyXCIsIFwicm1pXCJdLFxuICB9LFxuICBcImF1ZGlvL21pZGktY2xpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vbW9iaWxlLXhtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm14bWZcIl0sXG4gIH0sXG4gIFwiYXVkaW8vbXAzXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXAzXCJdLFxuICB9LFxuICBcImF1ZGlvL21wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm00YVwiLCBcIm1wNGFcIl0sXG4gIH0sXG4gIFwiYXVkaW8vbXA0YS1sYXRtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9tcGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL21wYS1yb2J1c3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL21wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGdhXCIsIFwibXAyXCIsIFwibXAyYVwiLCBcIm1wM1wiLCBcIm0yYVwiLCBcIm0zYVwiXSxcbiAgfSxcbiAgXCJhdWRpby9tcGVnNC1nZW5lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9tdXNlcGFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhdWRpby9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZ2FcIiwgXCJvZ2dcIiwgXCJzcHhcIiwgXCJvcHVzXCJdLFxuICB9LFxuICBcImF1ZGlvL29wdXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcGNtYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcGNtYS13YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcGNtdVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcGNtdS13YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcHJzLnNpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcWNlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3JhcHRvcmZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ydHAtZW5jLWFlc2NtMTI4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby9ydHAtbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3J0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vczNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzM21cIl0sXG4gIH0sXG4gIFwiYXVkaW8vc2NpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vc2lsa1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2lsXCJdLFxuICB9LFxuICBcImF1ZGlvL3NtdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vc212LXFjcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vc212MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vc29mYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vc3AtbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vc3BlZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3QxNDBjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby90MzhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3RlbGVwaG9uZS1ldmVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdGV0cmFfYWNlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3RldHJhX2FjZWxwX2JiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby90b25lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby90c3ZjaXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3VlbWNsaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3VscGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdXNhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdmR2aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm1yLXdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuM2dwcC5pdWZwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuNHNiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuYXVkaW9rb3pcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5jZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuY2lzY28ubnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuY21sZXMucmFkaW8tZXZlbnRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuY25zLmFucDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbnMuaW5mMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRlY2UuYXVkaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dmFcIiwgXCJ1dnZhXCJdLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5kaWdpdGFsLXdpbmRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW9sXCJdLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5kbG5hLmFkdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5kb2xieS5oZWFhYy4xXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5Lm1scFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5Lm1wc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5kb2xieS5wbDJ6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucHVsc2UuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRyYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRyYVwiXSxcbiAgfSxcbiAgXCJhdWRpby92bmQuZHRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHRzXCJdLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHMuaGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdHNoZFwiXSxcbiAgfSxcbiAgXCJhdWRpby92bmQuZHRzLnVoZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmR2Yi5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQuZXZlcmFkLnBsalwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmhucy5hdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmx1Y2VudC52b2ljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx2cFwiXSxcbiAgfSxcbiAgXCJhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB5YVwiXSxcbiAgfSxcbiAgXCJhdWRpby92bmQubm9raWEubW9iaWxlLXhtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm5vcnRlbC52YmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDQ4MDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlY2VscDQ4MDBcIl0sXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwNzQ3MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjZWxwNzQ3MFwiXSxcbiAgfSxcbiAgXCJhdWRpby92bmQubnVlcmEuZWNlbHA5NjAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWNlbHA5NjAwXCJdLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5vY3RlbC5zYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5wcmVzb251cy5tdWx0aXRyYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQucWNlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnJoZXRvcmV4LjMya2FkcGNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQucmlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlwXCJdLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5ybi1yZWFsYXVkaW9cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImF1ZGlvL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5tcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJhdWRpby92bmQudm14LmN2c2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3ZuZC53YXZlXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgfSxcbiAgXCJhdWRpby92b3JiaXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImF1ZGlvL3ZvcmJpcy1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImF1ZGlvL3dhdlwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXSxcbiAgfSxcbiAgXCJhdWRpby93YXZlXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F2XCJdLFxuICB9LFxuICBcImF1ZGlvL3dlYm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFcIl0sXG4gIH0sXG4gIFwiYXVkaW8veC1hYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFhY1wiXSxcbiAgfSxcbiAgXCJhdWRpby94LWFpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFpZlwiLCBcImFpZmZcIiwgXCJhaWZjXCJdLFxuICB9LFxuICBcImF1ZGlvL3gtY2FmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjYWZcIl0sXG4gIH0sXG4gIFwiYXVkaW8veC1mbGFjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbGFjXCJdLFxuICB9LFxuICBcImF1ZGlvL3gtbTRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm00YVwiXSxcbiAgfSxcbiAgXCJhdWRpby94LW1hdHJvc2thXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJta2FcIl0sXG4gIH0sXG4gIFwiYXVkaW8veC1tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtM3VcIl0sXG4gIH0sXG4gIFwiYXVkaW8veC1tcy13YXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndheFwiXSxcbiAgfSxcbiAgXCJhdWRpby94LW1zLXdtYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21hXCJdLFxuICB9LFxuICBcImF1ZGlvL3gtcG4tcmVhbGF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYW1cIiwgXCJyYVwiXSxcbiAgfSxcbiAgXCJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtcFwiXSxcbiAgfSxcbiAgXCJhdWRpby94LXJlYWxhdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYVwiXSxcbiAgfSxcbiAgXCJhdWRpby94LXR0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJhdWRpby94LXdhdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F2XCJdLFxuICB9LFxuICBcImF1ZGlvL3htXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bVwiXSxcbiAgfSxcbiAgXCJjaGVtaWNhbC94LWNkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2R4XCJdLFxuICB9LFxuICBcImNoZW1pY2FsL3gtY2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaWZcIl0sXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWRmXCJdLFxuICB9LFxuICBcImNoZW1pY2FsL3gtY21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWxcIl0sXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jc21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc21sXCJdLFxuICB9LFxuICBcImNoZW1pY2FsL3gtcGRiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcImNoZW1pY2FsL3gteHl6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4eXpcIl0sXG4gIH0sXG4gIFwiZm9udC9jb2xsZWN0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRjXCJdLFxuICB9LFxuICBcImZvbnQvb3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGZcIl0sXG4gIH0sXG4gIFwiZm9udC9zZm50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJmb250L3R0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRmXCJdLFxuICB9LFxuICBcImZvbnQvd29mZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndvZmZcIl0sXG4gIH0sXG4gIFwiZm9udC93b2ZmMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndvZmYyXCJdLFxuICB9LFxuICBcImltYWdlL2FjZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleHJcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvYXBuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwbmdcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvYXZjaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2Y2lcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvYXZjc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2Y3NcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvYXZpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2aWZcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvYm1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibXBcIiwgXCJkaWJcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvY2dtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2dtXCJdLFxuICB9LFxuICBcImltYWdlL2RpY29tLXJsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRybGVcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvZHB4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHB4XCJdLFxuICB9LFxuICBcImltYWdlL2VtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVtZlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9maXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZml0c1wiXSxcbiAgfSxcbiAgXCJpbWFnZS9nM2ZheFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImczXCJdLFxuICB9LFxuICBcImltYWdlL2dpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdpZlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9oZWljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGVpY1wiXSxcbiAgfSxcbiAgXCJpbWFnZS9oZWljLXNlcXVlbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGVpY3NcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvaGVpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlaWZcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvaGVpZi1zZXF1ZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlaWZzXCJdLFxuICB9LFxuICBcImltYWdlL2hlajJrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGVqMlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9oc2oyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHNqMlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9pZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZWZcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvajJjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJpbWFnZS9qbHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbHNcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvanAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianAyXCIsIFwianBnMlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9qcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBlZ1wiLCBcImpwZ1wiLCBcImpwZVwiXSxcbiAgfSxcbiAgXCJpbWFnZS9qcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcGhcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvanBoY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpoY1wiXSxcbiAgfSxcbiAgXCJpbWFnZS9qcG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcG1cIiwgXCJqcGdtXCJdLFxuICB9LFxuICBcImltYWdlL2pweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpweFwiLCBcImpwZlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9qeGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeGxcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvanhyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhyXCJdLFxuICB9LFxuICBcImltYWdlL2p4cmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHJhXCJdLFxuICB9LFxuICBcImltYWdlL2p4cnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHJzXCJdLFxuICB9LFxuICBcImltYWdlL2p4c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImp4c1wiXSxcbiAgfSxcbiAgXCJpbWFnZS9qeHNjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzY1wiXSxcbiAgfSxcbiAgXCJpbWFnZS9qeHNpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzaVwiXSxcbiAgfSxcbiAgXCJpbWFnZS9qeHNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzc1wiXSxcbiAgfSxcbiAgXCJpbWFnZS9rdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrdHhcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uva3R4MlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImt0eDJcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvbmFwbHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJpbWFnZS9wanBlZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwiaW1hZ2UvcG5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG5nXCJdLFxuICB9LFxuICBcImltYWdlL3Bycy5idGlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYnRpZlwiLCBcImJ0ZlwiXSxcbiAgfSxcbiAgXCJpbWFnZS9wcnMucHRpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHRpXCJdLFxuICB9LFxuICBcImltYWdlL3B3Zy1yYXN0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImltYWdlL3NnaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2dpXCJdLFxuICB9LFxuICBcImltYWdlL3N2Zyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2Z1wiLCBcInN2Z3pcIl0sXG4gIH0sXG4gIFwiaW1hZ2UvdDM4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widDM4XCJdLFxuICB9LFxuICBcImltYWdlL3RpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0aWZcIiwgXCJ0aWZmXCJdLFxuICB9LFxuICBcImltYWdlL3RpZmYtZnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0ZnhcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNkXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5haXJ6aXAuYWNjZWxlcmF0b3IuYXp2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXp2XCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5jbnMuaW5mMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2aVwiLCBcInV2dmlcIiwgXCJ1dmdcIiwgXCJ1dnZnXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5kanZ1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGp2dVwiLCBcImRqdlwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQuZHZiLnN1YnRpdGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ViXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5kd2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2dcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmR4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR4ZlwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQuZmFzdGJpZHNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmJzXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5mcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmcHhcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZzdFwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1tbXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbXJcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtcmxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmxjXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5nbG9iYWxncmFwaGljcy5wZ2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNvXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC5taXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImltYWdlL3ZuZC5tb3ppbGxhLmFwbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImltYWdlL3ZuZC5tcy1kZHNcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkc1wiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtbW9kaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1kaVwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtcGhvdG9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndkcFwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQubmV0LWZweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5weFwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQucGNvLmIxNlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImIxNlwiXSxcbiAgfSxcbiAgXCJpbWFnZS92bmQucmFkaWFuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcImltYWdlL3ZuZC5zZWFsZWQucG5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuZ2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuanBnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJpbWFnZS92bmQuc3ZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJpbWFnZS92bmQudGVuY2VudC50YXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0YXBcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnZhbHZlLnNvdXJjZS50ZXh0dXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnRmXCJdLFxuICB9LFxuICBcImltYWdlL3ZuZC53YXAud2JtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndibXBcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnhpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aWZcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnpicnVzaC5wY3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3hcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvd2VicFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYnBcIl0sXG4gIH0sXG4gIFwiaW1hZ2Uvd21mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21mXCJdLFxuICB9LFxuICBcImltYWdlL3gtM2RzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzZHNcIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC1jbXUtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXNcIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC1jbXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNteFwiXSxcbiAgfSxcbiAgXCJpbWFnZS94LWZyZWVoYW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmaFwiLCBcImZoY1wiLCBcImZoNFwiLCBcImZoNVwiLCBcImZoN1wiXSxcbiAgfSxcbiAgXCJpbWFnZS94LWljb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNvXCJdLFxuICB9LFxuICBcImltYWdlL3gtam5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpuZ1wiXSxcbiAgfSxcbiAgXCJpbWFnZS94LW1yc2lkLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWRcIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC1tcy1ibXBcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibXBcIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC1wY3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjeFwiXSxcbiAgfSxcbiAgXCJpbWFnZS94LXBpY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBpY1wiLCBcInBjdFwiXSxcbiAgfSxcbiAgXCJpbWFnZS94LXBvcnRhYmxlLWFueW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG5tXCJdLFxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtYml0bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYm1cIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZ21cIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1waXhtYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwbVwiXSxcbiAgfSxcbiAgXCJpbWFnZS94LXJnYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmdiXCJdLFxuICB9LFxuICBcImltYWdlL3gtdGdhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Z2FcIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC14Yml0bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4Ym1cIl0sXG4gIH0sXG4gIFwiaW1hZ2UveC14Y2ZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcImltYWdlL3gteHBpeG1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHBtXCJdLFxuICB9LFxuICBcImltYWdlL3gteHdpbmRvd2R1bXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh3ZFwiXSxcbiAgfSxcbiAgXCJtZXNzYWdlL2JodHRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtZXNzYWdlL2NwaW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm1lc3NhZ2UvZGVsaXZlcnktc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtZXNzYWdlL2Rpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcbiAgICAgIFwiZGlzcG9zaXRpb24tbm90aWZpY2F0aW9uXCIsXG4gICAgXSxcbiAgfSxcbiAgXCJtZXNzYWdlL2V4dGVybmFsLWJvZHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm1lc3NhZ2UvZmVlZGJhY2stcmVwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInU4bXNnXCJdLFxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWRlbGl2ZXJ5LXN0YXR1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInU4ZHNuXCJdLFxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInU4bWRuXCJdLFxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1OGhkclwiXSxcbiAgfSxcbiAgXCJtZXNzYWdlL2h0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICB9LFxuICBcIm1lc3NhZ2UvaW1kbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwibWVzc2FnZS9tbHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm1lc3NhZ2UvbmV3c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJtZXNzYWdlL29odHRwLXJlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibWVzc2FnZS9vaHR0cC1yZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm1lc3NhZ2UvcGFydGlhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwibWVzc2FnZS9yZmM4MjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVtbFwiLCBcIm1pbWVcIl0sXG4gIH0sXG4gIFwibWVzc2FnZS9zLWh0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm1lc3NhZ2Uvc2lwZnJhZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibWVzc2FnZS90cmFja2luZy1zdGF0dXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm1lc3NhZ2Uvdm5kLnNpLnNpbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwibWVzc2FnZS92bmQud2ZhLndzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzY1wiXSxcbiAgfSxcbiAgXCJtb2RlbC8zbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzbWZcIl0sXG4gIH0sXG4gIFwibW9kZWwvZTU3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtb2RlbC9nbHRmK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdsdGZcIl0sXG4gIH0sXG4gIFwibW9kZWwvZ2x0Zi1iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdsYlwiXSxcbiAgfSxcbiAgXCJtb2RlbC9pZ2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWdzXCIsIFwiaWdlc1wiXSxcbiAgfSxcbiAgXCJtb2RlbC9qdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImp0XCJdLFxuICB9LFxuICBcIm1vZGVsL21lc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2hcIiwgXCJtZXNoXCIsIFwic2lsb1wiXSxcbiAgfSxcbiAgXCJtb2RlbC9tdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdGxcIl0sXG4gIH0sXG4gIFwibW9kZWwvb2JqXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2JqXCJdLFxuICB9LFxuICBcIm1vZGVsL3ByY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByY1wiXSxcbiAgfSxcbiAgXCJtb2RlbC9zdGVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtb2RlbC9zdGVwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RweFwiXSxcbiAgfSxcbiAgXCJtb2RlbC9zdGVwK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0cHpcIl0sXG4gIH0sXG4gIFwibW9kZWwvc3RlcC14bWwremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RweHpcIl0sXG4gIH0sXG4gIFwibW9kZWwvc3RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RsXCJdLFxuICB9LFxuICBcIm1vZGVsL3UzZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInUzZFwiXSxcbiAgfSxcbiAgXCJtb2RlbC92bmQuYmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJhcnlcIl0sXG4gIH0sXG4gIFwibW9kZWwvdm5kLmNsZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsZFwiXSxcbiAgfSxcbiAgXCJtb2RlbC92bmQuY29sbGFkYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRhZVwiXSxcbiAgfSxcbiAgXCJtb2RlbC92bmQuZHdmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHdmXCJdLFxuICB9LFxuICBcIm1vZGVsL3ZuZC5mbGF0bGFuZC4zZG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtb2RlbC92bmQuZ2RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RsXCJdLFxuICB9LFxuICBcIm1vZGVsL3ZuZC5ncy1nZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gIH0sXG4gIFwibW9kZWwvdm5kLmdzLmdkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibW9kZWwvdm5kLmd0d1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0d1wiXSxcbiAgfSxcbiAgXCJtb2RlbC92bmQubW9tbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gIH0sXG4gIFwibW9kZWwvdm5kLm10c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm10c1wiXSxcbiAgfSxcbiAgXCJtb2RlbC92bmQub3BlbmdleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9nZXhcIl0sXG4gIH0sXG4gIFwibW9kZWwvdm5kLnBhcmFzb2xpZC50cmFuc21pdC5iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4X2JcIl0sXG4gIH0sXG4gIFwibW9kZWwvdm5kLnBhcmFzb2xpZC50cmFuc21pdC50ZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieF90XCJdLFxuICB9LFxuICBcIm1vZGVsL3ZuZC5weXRoYS5weW94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHlvXCIsIFwicHlveFwiXSxcbiAgfSxcbiAgXCJtb2RlbC92bmQucm9zZXR0ZS5hbm5vdGF0ZWQtZGF0YS1tb2RlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibW9kZWwvdm5kLnNhcC52ZHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2ZHNcIl0sXG4gIH0sXG4gIFwibW9kZWwvdm5kLnVzZGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1c2RhXCJdLFxuICB9LFxuICBcIm1vZGVsL3ZuZC51c2R6K3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVzZHpcIl0sXG4gIH0sXG4gIFwibW9kZWwvdm5kLnZhbHZlLnNvdXJjZS5jb21waWxlZC1tYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJic3BcIl0sXG4gIH0sXG4gIFwibW9kZWwvdm5kLnZ0dVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZ0dVwiXSxcbiAgfSxcbiAgXCJtb2RlbC92cm1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3JsXCIsIFwidnJtbFwiXSxcbiAgfSxcbiAgXCJtb2RlbC94M2QrYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2RiXCIsIFwieDNkYnpcIl0sXG4gIH0sXG4gIFwibW9kZWwveDNkK2Zhc3RpbmZvc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieDNkYlwiXSxcbiAgfSxcbiAgXCJtb2RlbC94M2QrdnJtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieDNkdlwiLCBcIngzZHZ6XCJdLFxuICB9LFxuICBcIm1vZGVsL3gzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZFwiLCBcIngzZHpcIl0sXG4gIH0sXG4gIFwibW9kZWwveDNkLXZybWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2R2XCJdLFxuICB9LFxuICBcIm11bHRpcGFydC9hbHRlcm5hdGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2FwcGxlZG91YmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtdWx0aXBhcnQvYnl0ZXJhbmdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2RpZ2VzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2VuY3J5cHRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2hlYWRlci1zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcIm11bHRpcGFydC9taXhlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L211bHRpbGluZ3VhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3BhcmFsbGVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVsYXRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3JlcG9ydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3NpZ25lZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3ZuZC5iaW50Lm1lZC1wbHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJtdWx0aXBhcnQvdm9pY2UtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvY2FjaGUtbWFuaWZlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwcGNhY2hlXCIsIFwibWFuaWZlc3RcIl0sXG4gIH0sXG4gIFwidGV4dC9jYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljc1wiLCBcImlmYlwiXSxcbiAgfSxcbiAgXCJ0ZXh0L2NhbGVuZGVyXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcInRleHQvY21kXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcInRleHQvY29mZmVlc2NyaXB0XCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY29mZmVlXCIsIFwibGl0Y29mZmVlXCJdLFxuICB9LFxuICBcInRleHQvY3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L2NxbC1leHByZXNzaW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L2NxbC1pZGVudGlmaWVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L2Nzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc3NcIl0sXG4gIH0sXG4gIFwidGV4dC9jc3ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzdlwiXSxcbiAgfSxcbiAgXCJ0ZXh0L2Nzdi1zY2hlbWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvZGlyZWN0b3J5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L2Ruc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9lY21hc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICB9LFxuICBcInRleHQvZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvZW5yaWNoZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvZmhpcnBhdGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvZmxleGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9md2RyZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvZ2ZmM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9ncmFtbWFyLXJlZi1saXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L2hsN3YyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L2h0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0bWxcIiwgXCJodG1cIiwgXCJzaHRtbFwiXSxcbiAgfSxcbiAgXCJ0ZXh0L2phZGVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYWRlXCJdLFxuICB9LFxuICBcInRleHQvamF2YXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc1wiLCBcIm1qc1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L2pjci1jbmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvanN4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc3hcIl0sXG4gIH0sXG4gIFwidGV4dC9sZXNzXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsZXNzXCJdLFxuICB9LFxuICBcInRleHQvbWFya2Rvd25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1kXCIsIFwibWFya2Rvd25cIl0sXG4gIH0sXG4gIFwidGV4dC9tYXRobWxcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibW1sXCJdLFxuICB9LFxuICBcInRleHQvbWR4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZHhcIl0sXG4gIH0sXG4gIFwidGV4dC9taXphclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9uM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuM1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3BhcmFtZXRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gIH0sXG4gIFwidGV4dC9wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvcGxhaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR4dFwiLCBcInRleHRcIiwgXCJjb25mXCIsIFwiZGVmXCIsIFwibGlzdFwiLCBcImxvZ1wiLCBcImluXCIsIFwiaW5pXCJdLFxuICB9LFxuICBcInRleHQvcHJvdmVuYW5jZS1ub3RhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgfSxcbiAgXCJ0ZXh0L3Bycy5mYWxsZW5zdGVpbi5yc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvcHJzLmxpbmVzLnRhZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRzY1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3Bycy5wcm9wLmxvZ2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3Bycy50ZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3JhcHRvcmZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9yZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvcmZjODIyLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvcmljaHRleHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJ0eFwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3J0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnRmXCJdLFxuICB9LFxuICBcInRleHQvcnRwLWVuYy1hZXNjbTEyOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9ydHBsb29wYmFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvc2dtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnbWxcIiwgXCJzZ21cIl0sXG4gIH0sXG4gIFwidGV4dC9zaGFjbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvc2hleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoZXhcIl0sXG4gIH0sXG4gIFwidGV4dC9zbGltXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xpbVwiLCBcInNsbVwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3NwZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGR4XCJdLFxuICB9LFxuICBcInRleHQvc3RyaW5nc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC9zdHlsdXNcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHlsdXNcIiwgXCJzdHlsXCJdLFxuICB9LFxuICBcInRleHQvdDE0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHN2XCJdLFxuICB9LFxuICBcInRleHQvdHJvZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0XCIsIFwidHJcIiwgXCJyb2ZmXCIsIFwibWFuXCIsIFwibWVcIiwgXCJtc1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3R1cnRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRsXCJdLFxuICB9LFxuICBcInRleHQvdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3VyaS1saXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1cmlcIiwgXCJ1cmlzXCIsIFwidXJsc1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3ZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2FyZFwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLmFzY2lpLWFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImN1cmxcIl0sXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5kY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGN1cmxcIl0sXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5tY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWN1cmxcIl0sXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5zY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2N1cmxcIl0sXG4gIH0sXG4gIFwidGV4dC92bmQuZGViaWFuLmNvcHlyaWdodFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5kbWNsaWVudHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC92bmQuZHZiLnN1YnRpdGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ViXCJdLFxuICB9LFxuICBcInRleHQvdm5kLmVzbWVydGVjLnRoZW1lLWRlc2NyaXB0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gIH0sXG4gIFwidGV4dC92bmQuZXhjaGFuZ2VhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5mYW1pbHlzZWFyY2guZ2VkY29tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2VkXCJdLFxuICB9LFxuICBcInRleHQvdm5kLmZpY2xhYi5mbHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLmZseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseVwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5mbWkuZmxleHN0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbHhcIl0sXG4gIH0sXG4gIFwidGV4dC92bmQuZ21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5ncmFwaHZpelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd2XCJdLFxuICB9LFxuICBcInRleHQvdm5kLmhhbnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLmhnbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC92bmQuaW4zZC4zZG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2RtbFwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pbjNkLnNwb3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcG90XCJdLFxuICB9LFxuICBcInRleHQvdm5kLmlwdGMubmV3c21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pcHRjLm5pdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLmxhdGV4LXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLm1vdG9yb2xhLnJlZmxleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC92bmQubXMtbWVkaWFwYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5uZXQycGhvbmUuY29tbWNlbnRlci5jb21tYW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5yYWRpc3lzLm1zbWwtYmFzaWMtbGF5b3V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5zZW54LndhcnBzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLnNpLnVyaWNhdGFsb2d1ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5zb3NpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5zdW4uajJtZS5hcHAtZGVzY3JpcHRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFkXCJdLFxuICB9LFxuICBcInRleHQvdm5kLnRyb2xsdGVjaC5saW5ndWlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC52Y2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdm5kLndhcC5zaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC92bmQud2FwLnNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC53YXAud21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21sXCJdLFxuICB9LFxuICBcInRleHQvdm5kLndhcC53bWxzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzXCJdLFxuICB9LFxuICBcInRleHQvdm5kLnpvby5rY2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInRleHQvdnR0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZ0dFwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3dnc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Z3NsXCJdLFxuICB9LFxuICBcInRleHQveC1hc21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNcIiwgXCJhc21cIl0sXG4gIH0sXG4gIFwidGV4dC94LWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNcIiwgXCJjY1wiLCBcImN4eFwiLCBcImNwcFwiLCBcImhcIiwgXCJoaFwiLCBcImRpY1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3gtY29tcG9uZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0Y1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3gtZm9ydHJhblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZlwiLCBcImZvclwiLCBcImY3N1wiLCBcImY5MFwiXSxcbiAgfSxcbiAgXCJ0ZXh0L3gtZ3d0LXJwY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhic1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3gtamF2YS1zb3VyY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphdmFcIl0sXG4gIH0sXG4gIFwidGV4dC94LWpxdWVyeS10bXBsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICB9LFxuICBcInRleHQveC1sdWFcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdWFcIl0sXG4gIH0sXG4gIFwidGV4dC94LW1hcmtkb3duXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJta2RcIl0sXG4gIH0sXG4gIFwidGV4dC94LW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmZvXCJdLFxuICB9LFxuICBcInRleHQveC1vcG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvcG1sXCJdLFxuICB9LFxuICBcInRleHQveC1vcmdcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9yZ1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3gtcGFzY2FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwXCIsIFwicGFzXCJdLFxuICB9LFxuICBcInRleHQveC1wcm9jZXNzaW5nXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZGVcIl0sXG4gIH0sXG4gIFwidGV4dC94LXNhc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzYXNzXCJdLFxuICB9LFxuICBcInRleHQveC1zY3NzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2Nzc1wiXSxcbiAgfSxcbiAgXCJ0ZXh0L3gtc2V0ZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJldHhcIl0sXG4gIH0sXG4gIFwidGV4dC94LXNmdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2Z2XCJdLFxuICB9LFxuICBcInRleHQveC1zdXNlLXltcFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieW1wXCJdLFxuICB9LFxuICBcInRleHQveC11dWVuY29kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXVcIl0sXG4gIH0sXG4gIFwidGV4dC94LXZjYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNzXCJdLFxuICB9LFxuICBcInRleHQveC12Y2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNmXCJdLFxuICB9LFxuICBcInRleHQveG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bWxcIl0sXG4gIH0sXG4gIFwidGV4dC94bWwtZXh0ZXJuYWwtcGFyc2VkLWVudGl0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidGV4dC95YW1sXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5YW1sXCIsIFwieW1sXCJdLFxuICB9LFxuICBcInZpZGVvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vM2dwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNncFwiLCBcIjNncHBcIl0sXG4gIH0sXG4gIFwidmlkZW8vM2dwcC10dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vM2dwcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzZzJcIl0sXG4gIH0sXG4gIFwidmlkZW8vYXYxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9ibXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vYnQ2NTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL2NlbGJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL2R2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9lbmNhcHJ0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vZXZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9mZnYxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9mbGV4ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9oMjYxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2MVwiXSxcbiAgfSxcbiAgXCJ2aWRlby9oMjYzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2M1wiXSxcbiAgfSxcbiAgXCJ2aWRlby9oMjYzLTE5OThcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL2gyNjMtMjAwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vaDI2NFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImgyNjRcIl0sXG4gIH0sXG4gIFwidmlkZW8vaDI2NC1yY2RvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9oMjY0LXN2Y1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vaDI2NVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vaDI2NlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vaXNvLnNlZ21lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtNHNcIl0sXG4gIH0sXG4gIFwidmlkZW8vanBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwZ3ZcIl0sXG4gIH0sXG4gIFwidmlkZW8vanBlZzIwMDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL2pwbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBtXCIsIFwianBnbVwiXSxcbiAgfSxcbiAgXCJ2aWRlby9qeHN2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9tYXRyb3NrYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vbWF0cm9za2EtM2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL21qMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1qMlwiLCBcIm1qcDJcIl0sXG4gIH0sXG4gIFwidmlkZW8vbXAxc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vbXAycFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vbXAydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRzXCIsIFwibTJ0XCIsIFwibTJ0c1wiLCBcIm10c1wiXSxcbiAgfSxcbiAgXCJ2aWRlby9tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcDRcIiwgXCJtcDR2XCIsIFwibXBnNFwiXSxcbiAgfSxcbiAgXCJ2aWRlby9tcDR2LWVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9tcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBlZ1wiLCBcIm1wZ1wiLCBcIm1wZVwiLCBcIm0xdlwiLCBcIm0ydlwiXSxcbiAgfSxcbiAgXCJ2aWRlby9tcGVnNC1nZW5lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9tcHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL252XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZ3ZcIl0sXG4gIH0sXG4gIFwidmlkZW8vcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9wb2ludGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby9xdWlja3RpbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJxdFwiLCBcIm1vdlwiXSxcbiAgfSxcbiAgXCJ2aWRlby9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3Jhd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vcnRwLWVuYy1hZXNjbTEyOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3J0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vc2NpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vc21wdGUyOTFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3NtcHRlMjkybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92YzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZjMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLmNjdHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLmhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZoXCIsIFwidXZ2aFwiXSxcbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS5tb2JpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dm1cIiwgXCJ1dnZtXCJdLFxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLm1wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UucGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnBcIiwgXCJ1dnZwXCJdLFxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLnNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZzXCIsIFwidXZ2c1wiXSxcbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS52aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dlwiLCBcInV2dnZcIl0sXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRpcmVjdHYubXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRpcmVjdHYubXBlZy10dHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5kbG5hLm1wZWctdHRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuZHZiLmZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdmJcIl0sXG4gIH0sXG4gIFwidmlkZW8vdm5kLmZ2dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZ2dFwiXSxcbiAgfSxcbiAgXCJ2aWRlby92bmQuaG5zLnZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjFkcGFyaXR5ZmVjLTEwMTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0uMWRwYXJpdHlmZWMtMjAwNVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4yZHBhcml0eWZlYy0xMDEwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTIwMDVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzYXZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLnR0c21wZWcyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQubW90b3JvbGEudmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5tb3Rvcm9sYS52aWRlb3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXh1XCIsIFwibTR1XCJdLFxuICB9LFxuICBcInZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHl2XCJdLFxuICB9LFxuICBcInZpZGVvL3ZuZC5ub2tpYS5pbnRlcmxlYXZlZC1tdWx0aW1lZGlhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQubm9raWEubXA0dnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5ub2tpYS52aWRlb3ZvaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3ZuZC5vYmplY3R2aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLnJhZGdhbWV0dG9vbHMuYmlua1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLnJhZGdhbWV0dG9vbHMuc21hY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLm1wZWcxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLm1wZWc0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLnN3ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLm1vdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdm5kLnV2dnUubXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ1XCIsIFwidXZ2dVwiXSxcbiAgfSxcbiAgXCJ2aWRlby92bmQudml2b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZpdlwiXSxcbiAgfSxcbiAgXCJ2aWRlby92bmQueW91dHViZS55dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gIH0sXG4gIFwidmlkZW8vdnA4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgfSxcbiAgXCJ2aWRlby92cDlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICB9LFxuICBcInZpZGVvL3dlYm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYm1cIl0sXG4gIH0sXG4gIFwidmlkZW8veC1mNHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImY0dlwiXSxcbiAgfSxcbiAgXCJ2aWRlby94LWZsaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxpXCJdLFxuICB9LFxuICBcInZpZGVvL3gtZmx2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbHZcIl0sXG4gIH0sXG4gIFwidmlkZW8veC1tNHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm00dlwiXSxcbiAgfSxcbiAgXCJ2aWRlby94LW1hdHJvc2thXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJta3ZcIiwgXCJtazNkXCIsIFwibWtzXCJdLFxuICB9LFxuICBcInZpZGVvL3gtbW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbmdcIl0sXG4gIH0sXG4gIFwidmlkZW8veC1tcy1hc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzZlwiLCBcImFzeFwiXSxcbiAgfSxcbiAgXCJ2aWRlby94LW1zLXZvYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widm9iXCJdLFxuICB9LFxuICBcInZpZGVvL3gtbXMtd21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtXCJdLFxuICB9LFxuICBcInZpZGVvL3gtbXMtd212XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bXZcIl0sXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndteFwiXSxcbiAgfSxcbiAgXCJ2aWRlby94LW1zLXd2eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3Z4XCJdLFxuICB9LFxuICBcInZpZGVvL3gtbXN2aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXZpXCJdLFxuICB9LFxuICBcInZpZGVvL3gtc2dpLW1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtb3ZpZVwiXSxcbiAgfSxcbiAgXCJ2aWRlby94LXNtdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic212XCJdLFxuICB9LFxuICBcIngtY29uZmVyZW5jZS94LWNvb2x0YWxrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpY2VcIl0sXG4gIH0sXG4gIFwieC1zaGFkZXIveC1mcmFnbWVudFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbiAgXCJ4LXNoYWRlci94LXZlcnRleFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgfSxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxlQUFlO0VBQ2Isd0NBQXdDO0lBQ3RDLFVBQVU7RUFDWjtFQUNBLHNDQUFzQztJQUNwQyxVQUFVO0lBQ1YsV0FBVztJQUNYLGdCQUFnQjtFQUNsQjtFQUNBLDRCQUE0QjtJQUMxQixVQUFVO0lBQ1YsZ0JBQWdCO0VBQ2xCO0VBQ0EsNEJBQTRCO0lBQzFCLFVBQVU7SUFDVixnQkFBZ0I7RUFDbEI7RUFDQSxpQ0FBaUM7SUFDL0IsVUFBVTtJQUNWLGdCQUFnQjtFQUNsQjtFQUNBLG1CQUFtQjtJQUNqQixVQUFVO0VBQ1o7RUFDQSx3QkFBd0I7SUFDdEIsVUFBVTtFQUNaO0VBQ0Esd0JBQXdCO0lBQ3RCLFVBQVU7SUFDVixnQkFB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
+// denoCacheMetadata=9632404770679671142,4954239492292988578 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ed23d1e1eba157f2190d0d22d30ee2e89c4ea2a35d78e2587f1e763f894285a7.js b/vendor/gen/https/jsr.io/ed23d1e1eba157f2190d0d22d30ee2e89c4ea2a35d78e2587f1e763f894285a7.js
new file mode 100644
index 0000000..8330763
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ed23d1e1eba157f2190d0d22d30ee2e89c4ea2a35d78e2587f1e763f894285a7.js
@@ -0,0 +1,16 @@
+import { denoResolverPlugin } from "./src/plugin_deno_resolver.ts";
+export { denoResolverPlugin };
+import { DEFAULT_LOADER, denoLoaderPlugin } from "./src/plugin_deno_loader.ts";
+export { DEFAULT_LOADER, denoLoaderPlugin };
+export { esbuildResolutionToURL, urlToEsbuildResolution } from "./src/shared.ts";
+/**
+ * A convenience function to enable both the Deno resolver plugin, and Deno
+ * loader plugin.
+ */ export function denoPlugins(opts = {}) {
+ return [
+ denoResolverPlugin(opts),
+ denoLoaderPlugin(opts)
+ ];
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BsdWNhL2VzYnVpbGQtZGVuby1sb2FkZXIvMC4xMS4xL21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGVzYnVpbGQgZnJvbSBcIi4vc3JjL2VzYnVpbGRfdHlwZXMudHNcIjtcblxuaW1wb3J0IHtcbiAgZGVub1Jlc29sdmVyUGx1Z2luLFxuICB0eXBlIERlbm9SZXNvbHZlclBsdWdpbk9wdGlvbnMsXG59IGZyb20gXCIuL3NyYy9wbHVnaW5fZGVub19yZXNvbHZlci50c1wiO1xuZXhwb3J0IHsgZGVub1Jlc29sdmVyUGx1Z2luLCB0eXBlIERlbm9SZXNvbHZlclBsdWdpbk9wdGlvbnMgfTtcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9MT0FERVIsXG4gIGRlbm9Mb2FkZXJQbHVnaW4sXG4gIHR5cGUgRGVub0xvYWRlclBsdWdpbk9wdGlvbnMsXG59IGZyb20gXCIuL3NyYy9wbHVnaW5fZGVub19sb2FkZXIudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfTE9BREVSLCBkZW5vTG9hZGVyUGx1Z2luLCB0eXBlIERlbm9Mb2FkZXJQbHVnaW5PcHRpb25zIH07XG5cbmV4cG9ydCB7XG4gIHR5cGUgRXNidWlsZFJlc29sdXRpb24sXG4gIGVzYnVpbGRSZXNvbHV0aW9uVG9VUkwsXG4gIHVybFRvRXNidWlsZFJlc29sdXRpb24sXG59IGZyb20gXCIuL3NyYy9zaGFyZWQudHNcIjtcblxuLyoqIE9wdGlvbnMgZm9yIHRoZSB7QGxpbmsgZGVub1BsdWdpbnN9IGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW5vUGx1Z2luc09wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmeSB3aGljaCBsb2FkZXIgdG8gdXNlLiBCeSBkZWZhdWx0IHRoaXMgd2lsbCB1c2UgdGhlIGBuYXRpdmVgIGxvYWRlcixcbiAgICogdW5sZXNzIHRoZSBgLS1hbGxvdy1ydW5gIHBlcm1pc3Npb24gaGFzIG5vdCBiZWVuIGdpdmVuLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIGRlbm9Mb2FkZXJQbHVnaW59IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBkaWZmZXJlbnQgbG9hZGVycy5cbiAgICovXG4gIGxvYWRlcj86IFwibmF0aXZlXCIgfCBcInBvcnRhYmxlXCI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHBhdGggdG8gYSBkZW5vLmpzb24gY29uZmlnIGZpbGUgdG8gdXNlLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICogdGhlIGAtLWNvbmZpZ2AgZmxhZyB0byB0aGUgRGVubyBleGVjdXRhYmxlLiBUaGlzIHBhdGggbXVzdCBiZSBhYnNvbHV0ZS5cbiAgICpcbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHBsdWdpbiB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgbmVhcmVzdCBkZW5vLmpzb24gYW5kXG4gICAqIHVzZSB0aGF0LiBJZiB0aGUgZGVuby5qc29uIGlzIHBhcnQgb2YgYSB3b3Jrc3BhY2UsIHRoZSBwbHVnaW4gd2lsbFxuICAgKiBhdXRvbWF0aWNhbGx5IGZpbmQgdGhlIHdvcmtzcGFjZSByb290LlxuICAgKi9cbiAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBVUkwgdG8gYW4gaW1wb3J0IG1hcCBmaWxlIHRvIHVzZSB3aGVuIHJlc29sdmluZyBpbXBvcnRcbiAgICogc3BlY2lmaWVycy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBgLS1pbXBvcnQtbWFwYCBmbGFnIHRvIHRoZSBEZW5vXG4gICAqIGV4ZWN1dGFibGUuIFRoaXMgVVJMIG1heSBiZSByZW1vdGUgb3IgYSBsb2NhbCBmaWxlIFVSTC5cbiAgICpcbiAgICogSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm8uanNvbiBjb25maWcgZmlsZSBpcyBjb25zdWx0ZWQgdG9cbiAgICogZGV0ZXJtaW5lIHdoYXQgaW1wb3J0IG1hcCB0byB1c2UsIGlmIGFueS5cbiAgICovXG4gIGltcG9ydE1hcFVSTD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHBhdGggdG8gYSBkZW5vLmxvY2sgZmlsZSB0byB1c2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGVcbiAgICogYC0tbG9ja2AgZmxhZyB0byB0aGUgRGVubyBleGVjdXRhYmxlLiBUaGlzIHBhdGggbXVzdCBiZSBhYnNvbHV0ZS5cbiAgICpcbiAgICogSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm8uanNvbiBjb25maWcgZmlsZSBpcyBjb25zdWx0ZWQgdG9cbiAgICogZGV0ZXJtaW5lIHdoYXQgbG9jayBmaWxlIHRvIHVzZSwgaWYgYW55LlxuICAgKlxuICAgKiBBIGxvY2tmaWxlIG11c3QgYmUgcHJlc2VudCB0byByZXNvbHZlIGBqc3I6YCBzcGVjaWZpZXJzIHdpdGggdGhlIGBwb3J0YWJsZWBcbiAgICogbG9hZGVyLiBXaGVuIHVzaW5nIHRoZSBgbmF0aXZlYCBsb2FkZXIsIGEgbG9ja2ZpbGUgaXMgbm90IHJlcXVpcmVkLCBidXQgdG9cbiAgICogZW5zdXJlIGRlcGVuZGVuY2llcyBhcmUgZGUtZHVwbGljYXRlZCBjb3JyZWN0bHksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhXG4gICAqIGxvY2tmaWxlLlxuICAgKi9cbiAgbG9ja1BhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IGhvdyB0aGUgbG9hZGVyIHNob3VsZCBoYW5kbGUgTlBNIHBhY2thZ2VzLiBCeSBkZWZhdWx0IGFuZCBpZiB0aGlzXG4gICAqIG9wdGlvbiBpcyBzZXQgdG8gYG5vbmVgLCB0aGUgbG9hZGVyIHdpbGwgdXNlIHRoZSBnbG9iYWwgY2FjaGUgdG8gcmVzb2x2ZVxuICAgKiBOUE0gcGFja2FnZXMuIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBgbWFudWFsYCwgdGhlIGxvYWRlciB3aWxsIHVzZSBhXG4gICAqIG1hbnVhbGx5IG1hbmFnZWQgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5LiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYGF1dG9gLFxuICAgKiB0aGUgbG9hZGVyIHdpbGwgdXNlIGEgbG9jYWwgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVuby5qc29uIGNvbmZpZyBmaWxlIGlzIGNvbnN1bHRlZCB0b1xuICAgKiBkZXRlcm1pbmUgd2hpY2ggbW9kZSB0byB1c2UuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiB1c2luZyB0aGUgYHBvcnRhYmxlYCBsb2FkZXIsIGFzIHRoZSBwb3J0YWJsZVxuICAgKiBsb2FkZXIgYWx3YXlzIHVzZXMgYSBtYW51YWwgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5IChlcXVpdmFsZW50IG9mXG4gICAqIGBub2RlTW9kdWxlc0RpcjogXCJtYW51YWxcImApLlxuICAgKi9cbiAgbm9kZU1vZHVsZXNEaXI/OiBcImF1dG9cIiB8IFwibWFudWFsXCIgfCBcIm5vbmVcIjtcbn1cblxuLyoqXG4gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGVuYWJsZSBib3RoIHRoZSBEZW5vIHJlc29sdmVyIHBsdWdpbiwgYW5kIERlbm9cbiAqIGxvYWRlciBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW5vUGx1Z2lucyhvcHRzOiBEZW5vUGx1Z2luc09wdGlvbnMgPSB7fSk6IGVzYnVpbGQuUGx1Z2luW10ge1xuICByZXR1cm4gW1xuICAgIGRlbm9SZXNvbHZlclBsdWdpbihvcHRzKSxcbiAgICBkZW5vTG9hZGVyUGx1Z2luKG9wdHMpLFxuICBdO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQ0Usa0JBQWtCLFFBRWIsZ0NBQWdDO0FBQ3ZDLFNBQVMsa0JBQWtCLEdBQW1DO0FBRTlELFNBQ0UsY0FBYyxFQUNkLGdCQUFnQixRQUVYLDhCQUE4QjtBQUNyQyxTQUFTLGNBQWMsRUFBRSxnQkFBZ0IsR0FBaUM7QUFFMUUsU0FFRSxzQkFBc0IsRUFDdEIsc0JBQXNCLFFBQ2pCLGtCQUFrQjtBQTREekI7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLFlBQVksT0FBMkIsQ0FBQyxDQUFDO0VBQ3ZELE9BQU87SUFDTCxtQkFBbUI7SUFDbkIsaUJBQWlCO0dBQ2xCO0FBQ0gifQ==
+// denoCacheMetadata=8239385849397319146,7117649278847295267 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ed6cbf64a1608cf2107868a43906eb1a831cded43d18a797400a571a05c0f531.js b/vendor/gen/https/jsr.io/ed6cbf64a1608cf2107868a43906eb1a831cded43d18a797400a571a05c0f531.js
new file mode 100644
index 0000000..03dc0ac
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ed6cbf64a1608cf2107868a43906eb1a831cded43d18a797400a571a05c0f531.js
@@ -0,0 +1,86 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { _globToRegExp } from "../_common/glob_to_reg_exp.ts";
+const constants = {
+ sep: "(?:\\\\|/)+",
+ sepMaybe: "(?:\\\\|/)*",
+ seps: [
+ "\\",
+ "/"
+ ],
+ globstar: "(?:[^\\\\/]*(?:\\\\|/|$)+)*",
+ wildcard: "[^\\\\/]*",
+ escapePrefix: "`"
+};
+/** Convert a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment.
+ *
+ * @example Usage
+ * ```ts
+ * import { globToRegExp } from "@std/path/windows/glob-to-regexp";
+ * import { assertEquals } from "@std/assert";
+ *
+ * assertEquals(globToRegExp("*.js"), /^[^\\/]*\.js(?:\\|\/)*$/);
+ * ```
+ *
+ * @param glob Glob string to convert.
+ * @param options Conversion options.
+ * @returns The regular expression equivalent to the glob.
+ */ export function globToRegExp(glob, options = {}) {
+ return _globToRegExp(constants, glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC93aW5kb3dzL2dsb2JfdG9fcmVnZXhwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7XG4gIF9nbG9iVG9SZWdFeHAsXG4gIHR5cGUgR2xvYkNvbnN0YW50cyxcbiAgdHlwZSBHbG9iT3B0aW9ucyxcbn0gZnJvbSBcIi4uL19jb21tb24vZ2xvYl90b19yZWdfZXhwLnRzXCI7XG5cbmNvbnN0IGNvbnN0YW50czogR2xvYkNvbnN0YW50cyA9IHtcbiAgc2VwOiBcIig/OlxcXFxcXFxcfC8pK1wiLFxuICBzZXBNYXliZTogXCIoPzpcXFxcXFxcXHwvKSpcIixcbiAgc2VwczogW1wiXFxcXFwiLCBcIi9cIl0sXG4gIGdsb2JzdGFyOiBcIig/OlteXFxcXFxcXFwvXSooPzpcXFxcXFxcXHwvfCQpKykqXCIsXG4gIHdpbGRjYXJkOiBcIlteXFxcXFxcXFwvXSpcIixcbiAgZXNjYXBlUHJlZml4OiBcImBcIixcbn07XG5cbi8qKiBDb252ZXJ0IGEgZ2xvYiBzdHJpbmcgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogVHJpZXMgdG8gbWF0Y2ggYmFzaCBnbG9iIGV4cGFuc2lvbiBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEJhc2ljIGdsb2Igc3ludGF4OlxuICogLSBgKmAgLSBNYXRjaGVzIGV2ZXJ5dGhpbmcgd2l0aG91dCBsZWF2aW5nIHRoZSBwYXRoIHNlZ21lbnQuXG4gKiAtIGA/YCAtIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiAtIGB7Zm9vLGJhcn1gIC0gTWF0Y2hlcyBgZm9vYCBvciBgYmFyYC5cbiAqIC0gYFthYmNkXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW2EtZF1gIC0gTWF0Y2hlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFshYWJjZF1gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBiZXNpZGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW1s6PGNsYXNzPjpdXWAgLSBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIGA8Y2xhc3M+YC5cbiAqICAgICAtIGBbWzphbG51bTpdXWAgLSBNYXRjaGVzIGFueSBkaWdpdCBvciBsZXR0ZXIuXG4gKiAgICAgLSBgW1s6ZGlnaXQ6XWFiY11gIC0gTWF0Y2hlcyBhbnkgZGlnaXQsIGBhYCwgYGJgIG9yIGBjYC5cbiAqICAgICAtIFNlZSBodHRwczovL2ZhY2VsZXNzdXNlci5naXRodWIuaW8vd2NtYXRjaC9nbG9iLyNwb3NpeC1jaGFyYWN0ZXItY2xhc3Nlc1xuICogICAgICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG4gKiAtIGBcXGAgLSBFc2NhcGVzIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgYW4gYG9zYCBvdGhlciB0aGFuIGBcIndpbmRvd3NcImAuXG4gKiAtIFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICogLSBgL2AgLSBQYXRoIHNlcGFyYXRvci5cbiAqIC0gYFxcYCAtIEFkZGl0aW9uYWwgcGF0aCBzZXBhcmF0b3Igb25seSBmb3IgYG9zYCBzZXQgdG8gYFwid2luZG93c1wiYC5cbiAqXG4gKiBFeHRlbmRlZCBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGV4dGVuZGVkOiB0cnVlIH1gLlxuICogLSBgPyhmb298YmFyKWAgLSBNYXRjaGVzIDAgb3IgMSBpbnN0YW5jZSBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYEAoZm9vfGJhcilgIC0gTWF0Y2hlcyAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLiBUaGV5IGJlaGF2ZSB0aGUgc2FtZS5cbiAqIC0gYCooZm9vfGJhcilgIC0gTWF0Y2hlcyBfbl8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgKyhmb298YmFyKWAgLSBNYXRjaGVzIF9uID4gMF8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgIShmb298YmFyKWAgLSBNYXRjaGVzIGFueXRoaW5nIG90aGVyIHRoYW4gYHtmb28sYmFyfWAuXG4gKiAtIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvYmFzaC1leHRlbmRlZC1nbG9iYmluZy5cbiAqXG4gKiBHbG9ic3RhciBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGdsb2JzdGFyOiB0cnVlIH1gLlxuICogLSBgKipgIC0gTWF0Y2hlcyBhbnkgbnVtYmVyIG9mIGFueSBwYXRoIHNlZ21lbnRzLlxuICogICAgIC0gTXVzdCBjb21wcmlzZSBpdHMgZW50aXJlIHBhdGggc2VnbWVudCBpbiB0aGUgcHJvdmlkZWQgZ2xvYi5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gKlxuICogTm90ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIFRoZSBnZW5lcmF0ZWQgYFJlZ0V4cGAgaXMgYW5jaG9yZWQgYXQgYm90aCBzdGFydCBhbmQgZW5kLlxuICogLSBSZXBlYXRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHRvbGVyYXRlZC4gVHJhaWxpbmcgc2VwYXJhdG9ycyBpbiB0aGVcbiAqICAgcHJvdmlkZWQgZ2xvYiBoYXZlIG5vIG1lYW5pbmcgYW5kIGFyZSBkaXNjYXJkZWQuXG4gKiAtIEFic29sdXRlIGdsb2JzIHdpbGwgb25seSBtYXRjaCBhYnNvbHV0ZSBwYXRocywgZXRjLlxuICogLSBFbXB0eSBnbG9icyB3aWxsIG1hdGNoIG5vdGhpbmcuXG4gKiAtIEFueSBzcGVjaWFsIGdsb2Igc3ludGF4IG11c3QgYmUgY29udGFpbmVkIHRvIG9uZSBwYXRoIHNlZ21lbnQuIEZvciBleGFtcGxlLFxuICogICBgPyhmb298YmFyL2JheilgIGlzIGludmFsaWQuIFRoZSBzZXBhcmF0b3Igd2lsbCB0YWtlIHByZWNlZGVuY2UgYW5kIHRoZVxuICogICBmaXJzdCBzZWdtZW50IGVuZHMgd2l0aCBhbiB1bmNsb3NlZCBncm91cC5cbiAqIC0gSWYgYSBwYXRoIHNlZ21lbnQgZW5kcyB3aXRoIHVuY2xvc2VkIGdyb3VwcyBvciBhIGRhbmdsaW5nIGVzY2FwZSBwcmVmaXgsIGFcbiAqICAgcGFyc2UgZXJyb3IgaGFzIG9jY3VycmVkLiBFdmVyeSBjaGFyYWN0ZXIgZm9yIHRoYXQgc2VnbWVudCBpcyB0YWtlblxuICogICBsaXRlcmFsbHkgaW4gdGhpcyBldmVudC5cbiAqXG4gKiBMaW1pdGF0aW9uczpcbiAqIC0gQSBuZWdhdGl2ZSBncm91cCBsaWtlIGAhKGZvb3xiYXIpYCB3aWxsIHdyb25nbHkgYmUgY29udmVydGVkIHRvIGEgbmVnYXRpdmVcbiAqICAgbG9vay1haGVhZCBmb2xsb3dlZCBieSBhIHdpbGRjYXJkLiBUaGlzIG1lYW5zIHRoYXQgYCEoZm9vKS5qc2Agd2lsbCB3cm9uZ2x5XG4gKiAgIGZhaWwgdG8gbWF0Y2ggYGZvb2Jhci5qc2AsIGV2ZW4gdGhvdWdoIGBmb29iYXJgIGlzIG5vdCBgZm9vYC4gRWZmZWN0aXZlbHksXG4gKiAgIGAhKGZvb3xiYXIpYCBpcyB0cmVhdGVkIGxpa2UgYCEoQChmb298YmFyKSopYC4gVGhpcyB3aWxsIHdvcmsgY29ycmVjdGx5IGlmXG4gKiAgIHRoZSBncm91cCBvY2N1cnMgbm90IG5lc3RlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZ2xvYlRvUmVnRXhwIH0gZnJvbSBcIkBzdGQvcGF0aC93aW5kb3dzL2dsb2ItdG8tcmVnZXhwXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHMoZ2xvYlRvUmVnRXhwKFwiKi5qc1wiKSwgL15bXlxcXFwvXSpcXC5qcyg/OlxcXFx8XFwvKSokLyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZ2xvYiBHbG9iIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHBhcmFtIG9wdGlvbnMgQ29udmVyc2lvbiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlcXVpdmFsZW50IHRvIHRoZSBnbG9iLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2xvYlRvUmVnRXhwKFxuICBnbG9iOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdsb2JPcHRpb25zID0ge30sXG4pOiBSZWdFeHAge1xuICByZXR1cm4gX2dsb2JUb1JlZ0V4cChjb25zdGFudHMsIGdsb2IsIG9wdGlvbnMpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsU0FDRSxhQUFhLFFBR1IsZ0NBQWdDO0FBRXZDLE1BQU0sWUFBMkI7RUFDL0IsS0FBSztFQUNMLFVBQVU7RUFDVixNQUFNO0lBQUM7SUFBTTtHQUFJO0VBQ2pCLFVBQVU7RUFDVixVQUFVO0VBQ1YsY0FBYztBQUNoQjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUVDLEdBQ0QsT0FBTyxTQUFTLGFBQ2QsSUFBWSxFQUNaLFVBQXVCLENBQUMsQ0FBQztFQUV6QixPQUFPLGNBQWMsV0FBVyxNQUFNO0FBQ3hDIn0=
+// denoCacheMetadata=1025757602365488590,10007642603385308650 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ee949e354ee9f474ec486fc007d8be5fa472e19e53ac9adbb6b914de5d609260.js b/vendor/gen/https/jsr.io/ee949e354ee9f474ec486fc007d8be5fa472e19e53ac9adbb6b914de5d609260.js
new file mode 100644
index 0000000..2f1e40f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ee949e354ee9f474ec486fc007d8be5fa472e19e53ac9adbb6b914de5d609260.js
@@ -0,0 +1,22 @@
+// Ported and adapted from js-yaml-js-types v1.0.0:
+// https://github.com/nodeca/js-yaml-js-types/tree/ac537e7bbdd3c2cbbd9882ca3919c520c2dc022b
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const undefinedType = {
+ tag: "tag:yaml.org,2002:js/undefined",
+ kind: "scalar",
+ resolve () {
+ return true;
+ },
+ construct () {
+ return undefined;
+ },
+ predicate (object) {
+ return typeof object === "undefined";
+ },
+ represent () {
+ return "";
+ }
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS91bmRlZmluZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGFuZCBhZGFwdGVkIGZyb20ganMteWFtbC1qcy10eXBlcyB2MS4wLjA6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwtanMtdHlwZXMvdHJlZS9hYzUzN2U3YmJkZDNjMmNiYmQ5ODgyY2EzOTE5YzUyMGMyZGMwMjJiXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1bmRlZmluZWRUeXBlOiBUeXBlPFwic2NhbGFyXCIsIHVuZGVmaW5lZD4gPSB7XG4gIHRhZzogXCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWRcIixcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgY29uc3RydWN0KCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sXG4gIHByZWRpY2F0ZShvYmplY3QpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gXCJ1bmRlZmluZWRcIjtcbiAgfSxcbiAgcmVwcmVzZW50KCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9LFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtREFBbUQ7QUFDbkQsMkZBQTJGO0FBQzNGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsT0FBTyxNQUFNLGdCQUEyQztFQUN0RCxLQUFLO0VBQ0wsTUFBTTtFQUNOO0lBQ0UsT0FBTztFQUNUO0VBQ0E7SUFDRSxPQUFPO0VBQ1Q7RUFDQSxXQUFVLE1BQU07SUFDZCxPQUFPLE9BQU8sV0FBVztFQUMzQjtFQUNBO0lBQ0UsT0FBTztFQUNUO0FBQ0YsRUFBRSJ9
+// denoCacheMetadata=2136136951947009041,7134439842122707969 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/eede9b66af1c66357dabce516fa2c2884c263f459544ed190e0330d74d005242.js b/vendor/gen/https/jsr.io/eede9b66af1c66357dabce516fa2c2884c263f459544ed190e0330d74d005242.js
new file mode 100644
index 0000000..1547378
--- /dev/null
+++ b/vendor/gen/https/jsr.io/eede9b66af1c66357dabce516fa2c2884c263f459544ed190e0330d74d005242.js
@@ -0,0 +1,68 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * Returns the index of the first occurrence of the needle array in the source
+ * array, or -1 if it is not present.
+ *
+ * A start index can be specified as the third argument that begins the search
+ * at that given index. The start index defaults to the start of the array.
+ *
+ * The complexity of this function is `O(source.length * needle.length)`.
+ *
+ * @param source Source array to check.
+ * @param needle Needle array to check for.
+ * @param start Start index in the source array to begin the search. Defaults to
+ * 0.
+ * @returns Index of the first occurrence of the needle array in the source
+ * array, or -1 if it is not present.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { indexOfNeedle } from "@std/bytes/index-of-needle";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const needle = new Uint8Array([1, 2]);
+ * const notNeedle = new Uint8Array([5, 0]);
+ *
+ * assertEquals(indexOfNeedle(source, needle), 1);
+ * assertEquals(indexOfNeedle(source, notNeedle), -1);
+ * ```
+ *
+ * @example Start index
+ * ```ts
+ * import { indexOfNeedle } from "@std/bytes/index-of-needle";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]);
+ * const needle = new Uint8Array([1, 2]);
+ *
+ * assertEquals(indexOfNeedle(source, needle, 2), 3);
+ * assertEquals(indexOfNeedle(source, needle, 6), -1);
+ * ```
+ * Defining a start index will begin the search at the specified index in the
+ * source array.
+ */ export function indexOfNeedle(source, needle, start = 0) {
+ if (start < 0) {
+ start = Math.max(0, source.length + start);
+ }
+ if (needle.length > source.length - start) {
+ return -1;
+ }
+ const s = needle[0];
+ for(let i = start; i < source.length; i++){
+ if (source[i] !== s) continue;
+ let matched = 1;
+ let j = i + 1;
+ while(matched < needle.length && source[j] === needle[j - i]){
+ matched++;
+ j++;
+ }
+ if (matched === needle.length) {
+ return i;
+ }
+ }
+ return -1;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvaW5kZXhfb2ZfbmVlZGxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIG5lZWRsZSBhcnJheSBpbiB0aGUgc291cmNlXG4gKiBhcnJheSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKlxuICogQSBzdGFydCBpbmRleCBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudCB0aGF0IGJlZ2lucyB0aGUgc2VhcmNoXG4gKiBhdCB0aGF0IGdpdmVuIGluZGV4LiBUaGUgc3RhcnQgaW5kZXggZGVmYXVsdHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBhcnJheS5cbiAqXG4gKiBUaGUgY29tcGxleGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGBPKHNvdXJjZS5sZW5ndGggKiBuZWVkbGUubGVuZ3RoKWAuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBTb3VyY2UgYXJyYXkgdG8gY2hlY2suXG4gKiBAcGFyYW0gbmVlZGxlIE5lZWRsZSBhcnJheSB0byBjaGVjayBmb3IuXG4gKiBAcGFyYW0gc3RhcnQgU3RhcnQgaW5kZXggaW4gdGhlIHNvdXJjZSBhcnJheSB0byBiZWdpbiB0aGUgc2VhcmNoLiBEZWZhdWx0cyB0b1xuICogMC5cbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBuZWVkbGUgYXJyYXkgaW4gdGhlIHNvdXJjZVxuICogYXJyYXksIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW5kZXhPZk5lZWRsZSB9IGZyb20gXCJAc3RkL2J5dGVzL2luZGV4LW9mLW5lZWRsZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IG5lZWRsZSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7XG4gKiBjb25zdCBub3ROZWVkbGUgPSBuZXcgVWludDhBcnJheShbNSwgMF0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhpbmRleE9mTmVlZGxlKHNvdXJjZSwgbmVlZGxlKSwgMSk7XG4gKiBhc3NlcnRFcXVhbHMoaW5kZXhPZk5lZWRsZShzb3VyY2UsIG5vdE5lZWRsZSksIC0xKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFN0YXJ0IGluZGV4XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW5kZXhPZk5lZWRsZSB9IGZyb20gXCJAc3RkL2J5dGVzL2luZGV4LW9mLW5lZWRsZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IG5lZWRsZSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7XG4gKlxuICogYXNzZXJ0RXF1YWxzKGluZGV4T2ZOZWVkbGUoc291cmNlLCBuZWVkbGUsIDIpLCAzKTtcbiAqIGFzc2VydEVxdWFscyhpbmRleE9mTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCA2KSwgLTEpO1xuICogYGBgXG4gKiBEZWZpbmluZyBhIHN0YXJ0IGluZGV4IHdpbGwgYmVnaW4gdGhlIHNlYXJjaCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGluIHRoZVxuICogc291cmNlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZk5lZWRsZShcbiAgc291cmNlOiBVaW50OEFycmF5LFxuICBuZWVkbGU6IFVpbnQ4QXJyYXksXG4gIHN0YXJ0ID0gMCxcbik6IG51bWJlciB7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IE1hdGgubWF4KDAsIHNvdXJjZS5sZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgaWYgKG5lZWRsZS5sZW5ndGggPiBzb3VyY2UubGVuZ3RoIC0gc3RhcnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgY29uc3QgcyA9IG5lZWRsZVswXTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNvdXJjZVtpXSAhPT0gcykgY29udGludWU7XG4gICAgbGV0IG1hdGNoZWQgPSAxO1xuICAgIGxldCBqID0gaSArIDE7XG4gICAgd2hpbGUgKG1hdGNoZWQgPCBuZWVkbGUubGVuZ3RoICYmIHNvdXJjZVtqXSA9PT0gbmVlZGxlW2ogLSBpXSkge1xuICAgICAgbWF0Y2hlZCsrO1xuICAgICAgaisrO1xuICAgIH1cbiAgICBpZiAobWF0Y2hlZCA9PT0gbmVlZGxlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQscUNBQXFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwQ0MsR0FDRCxPQUFPLFNBQVMsY0FDZCxNQUFrQixFQUNsQixNQUFrQixFQUNsQixRQUFRLENBQUM7RUFFVCxJQUFJLFFBQVEsR0FBRztJQUNiLFFBQVEsS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLE1BQU0sR0FBRztFQUN0QztFQUNBLElBQUksT0FBTyxNQUFNLEdBQUcsT0FBTyxNQUFNLEdBQUcsT0FBTztJQUN6QyxPQUFPLENBQUM7RUFDVjtFQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRTtFQUNuQixJQUFLLElBQUksSUFBSSxPQUFPLElBQUksT0FBTyxNQUFNLEVBQUUsSUFBSztJQUMxQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRztJQUNyQixJQUFJLFVBQVU7SUFDZCxJQUFJLElBQUksSUFBSTtJQUNaLE1BQU8sVUFBVSxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBRTtNQUM3RDtNQUNBO0lBQ0Y7SUFDQSxJQUFJLFlBQVksT0FBTyxNQUFNLEVBQUU7TUFDN0IsT0FBTztJQUNUO0VBQ0Y7RUFDQSxPQUFPLENBQUM7QUFDViJ9
+// denoCacheMetadata=11419389296461588520,2057717567109669023 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/ef0f76b7de957a45053ec55e476a11efce100bda99c5f6bd71d17dee17b5976c.js b/vendor/gen/https/jsr.io/ef0f76b7de957a45053ec55e476a11efce100bda99c5f6bd71d17dee17b5976c.js
new file mode 100644
index 0000000..09ec155
--- /dev/null
+++ b/vendor/gen/https/jsr.io/ef0f76b7de957a45053ec55e476a11efce100bda99c5f6bd71d17dee17b5976c.js
@@ -0,0 +1,13 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+/**
+ * The character used to separate entries in the PATH environment variable.
+ */ export const DELIMITER = ";";
+/**
+ * The character used to separate components of a file path.
+ */ export const SEPARATOR = "\\";
+/**
+ * A regular expression that matches one or more path separators.
+ */ export const SEPARATOR_PATTERN = /[\\/]+/;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5leHBvcnQgY29uc3QgREVMSU1JVEVSID0gXCI7XCIgYXMgY29uc3Q7XG4vKipcbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBjb21wb25lbnRzIG9mIGEgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgU0VQQVJBVE9SID0gXCJcXFxcXCIgYXMgY29uc3Q7XG4vKipcbiAqIEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBvbmUgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBTRVBBUkFUT1JfUEFUVEVSTiA9IC9bXFxcXC9dKy87XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQzs7Q0FFQyxHQUNELE9BQU8sTUFBTSxZQUFZLElBQWE7QUFDdEM7O0NBRUMsR0FDRCxPQUFPLE1BQU0sWUFBWSxLQUFjO0FBQ3ZDOztDQUVDLEdBQ0QsT0FBTyxNQUFNLG9CQUFvQixTQUFTIn0=
+// denoCacheMetadata=6466445951151111109,14005870783218354898 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f1347d8476f3b29ba5b1ce20ac64aa1f87536b0511c7a42c5f5b9357be6339df.js b/vendor/gen/https/jsr.io/f1347d8476f3b29ba5b1ce20ac64aa1f87536b0511c7a42c5f5b9357be6339df.js
new file mode 100644
index 0000000..df8cb85
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f1347d8476f3b29ba5b1ce20ac64aa1f87536b0511c7a42c5f5b9357be6339df.js
@@ -0,0 +1,44 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { copy } from "./copy.ts";
+/**
+ * Returns a new byte slice composed of `count` repetitions of the `source`
+ * array.
+ *
+ * @param source Source array to repeat.
+ * @param count Number of times to repeat the source array.
+ * @returns A new byte slice composed of `count` repetitions of the `source`
+ * array.
+ *
+ * @example Basic usage
+ * ```ts
+ * import { repeat } from "@std/bytes/repeat";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2]);
+ *
+ * assertEquals(repeat(source, 3), new Uint8Array([0, 1, 2, 0, 1, 2, 0, 1, 2]));
+ * ```
+ *
+ * @example Zero count
+ * ```ts
+ * import { repeat } from "@std/bytes/repeat";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const source = new Uint8Array([0, 1, 2]);
+ *
+ * assertEquals(repeat(source, 0), new Uint8Array());
+ * ```
+ */ export function repeat(source, count) {
+ if (count < 0 || !Number.isInteger(count)) {
+ throw new RangeError("Count must be a non-negative integer");
+ }
+ const repeated = new Uint8Array(source.length * count);
+ let offset = 0;
+ while(offset < repeated.length){
+ offset += copy(source, repeated, offset);
+ }
+ return repeated;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvYnl0ZXMvMS4wLjYvcmVwZWF0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5pbXBvcnQgeyBjb3B5IH0gZnJvbSBcIi4vY29weS50c1wiO1xuaW1wb3J0IHR5cGUgeyBVaW50OEFycmF5XyB9IGZyb20gXCIuL190eXBlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVaW50OEFycmF5XyB9O1xuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgYnl0ZSBzbGljZSBjb21wb3NlZCBvZiBgY291bnRgIHJlcGV0aXRpb25zIG9mIHRoZSBgc291cmNlYFxuICogYXJyYXkuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBTb3VyY2UgYXJyYXkgdG8gcmVwZWF0LlxuICogQHBhcmFtIGNvdW50IE51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHNvdXJjZSBhcnJheS5cbiAqIEByZXR1cm5zIEEgbmV3IGJ5dGUgc2xpY2UgY29tcG9zZWQgb2YgYGNvdW50YCByZXBldGl0aW9ucyBvZiB0aGUgYHNvdXJjZWBcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSBcIkBzdGQvYnl0ZXMvcmVwZWF0XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMl0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXBlYXQoc291cmNlLCAzKSwgbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDEsIDIsIDAsIDEsIDJdKSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBaZXJvIGNvdW50XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSBcIkBzdGQvYnl0ZXMvcmVwZWF0XCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMl0pO1xuICpcbiAqIGFzc2VydEVxdWFscyhyZXBlYXQoc291cmNlLCAwKSwgbmV3IFVpbnQ4QXJyYXkoKSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdChzb3VyY2U6IFVpbnQ4QXJyYXksIGNvdW50OiBudW1iZXIpOiBVaW50OEFycmF5XyB7XG4gIGlmIChjb3VudCA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIoY291bnQpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDb3VudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJcIik7XG4gIH1cblxuICBjb25zdCByZXBlYXRlZCA9IG5ldyBVaW50OEFycmF5KHNvdXJjZS5sZW5ndGggKiBjb3VudCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIHdoaWxlIChvZmZzZXQgPCByZXBlYXRlZC5sZW5ndGgpIHtcbiAgICBvZmZzZXQgKz0gY29weShzb3VyY2UsIHJlcGVhdGVkLCBvZmZzZXQpO1xuICB9XG5cbiAgcmV0dXJuIHJlcGVhdGVkO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFDckMsU0FBUyxJQUFJLFFBQVEsWUFBWTtBQUlqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRCQyxHQUNELE9BQU8sU0FBUyxPQUFPLE1BQWtCLEVBQUUsS0FBYTtFQUN0RCxJQUFJLFFBQVEsS0FBSyxDQUFDLE9BQU8sU0FBUyxDQUFDLFFBQVE7SUFDekMsTUFBTSxJQUFJLFdBQVc7RUFDdkI7RUFFQSxNQUFNLFdBQVcsSUFBSSxXQUFXLE9BQU8sTUFBTSxHQUFHO0VBQ2hELElBQUksU0FBUztFQUViLE1BQU8sU0FBUyxTQUFTLE1BQU0sQ0FBRTtJQUMvQixVQUFVLEtBQUssUUFBUSxVQUFVO0VBQ25DO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=4711290799187864980,9974156399072678049 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f13e348e07ffac5aa796aa5d228d6f1cdf2ad20e69e426f824905dc5f2d8fea8.js b/vendor/gen/https/jsr.io/f13e348e07ffac5aa796aa5d228d6f1cdf2ad20e69e426f824905dc5f2d8fea8.js
new file mode 100644
index 0000000..59d5948
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f13e348e07ffac5aa796aa5d228d6f1cdf2ad20e69e426f824905dc5f2d8fea8.js
@@ -0,0 +1,34 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { normalize as posixNormalize } from "./posix/normalize.ts";
+import { normalize as windowsNormalize } from "./windows/normalize.ts";
+/**
+ * Normalize the path, resolving `'..'` and `'.'` segments.
+ *
+ * Note: Resolving these segments does not necessarily mean that all will be
+ * eliminated. A `'..'` at the top-level will be preserved, and an empty path is
+ * canonically `'.'`.
+ *
+ * @example Usage
+ * ```ts
+ * import { normalize } from "@std/path/normalize";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(normalize("C:\\foo\\bar\\..\\baz\\quux"), "C:\\foo\\baz\\quux");
+ * } else {
+ * assertEquals(normalize("/foo/bar/../baz/quux"), "/foo/baz/quux");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `normalize` from `@std/path/unstable-normalize`.
+ *
+ * @param path Path to be normalized
+ * @returns The normalized path.
+ */ export function normalize(path) {
+ return isWindows ? windowsNormalize(path) : posixNormalize(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9ub3JtYWxpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4vX29zLnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemUgYXMgcG9zaXhOb3JtYWxpemUgfSBmcm9tIFwiLi9wb3NpeC9ub3JtYWxpemUudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZSBhcyB3aW5kb3dzTm9ybWFsaXplIH0gZnJvbSBcIi4vd2luZG93cy9ub3JtYWxpemUudHNcIjtcbi8qKlxuICogTm9ybWFsaXplIHRoZSBwYXRoLCByZXNvbHZpbmcgYCcuLidgIGFuZCBgJy4nYCBzZWdtZW50cy5cbiAqXG4gKiBOb3RlOiBSZXNvbHZpbmcgdGhlc2Ugc2VnbWVudHMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGFsbCB3aWxsIGJlXG4gKiBlbGltaW5hdGVkLiBBIGAnLi4nYCBhdCB0aGUgdG9wLWxldmVsIHdpbGwgYmUgcHJlc2VydmVkLCBhbmQgYW4gZW1wdHkgcGF0aCBpc1xuICogY2Fub25pY2FsbHkgYCcuJ2AuXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tIFwiQHN0ZC9wYXRoL25vcm1hbGl6ZVwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemUoXCJDOlxcXFxmb29cXFxcYmFyXFxcXC4uXFxcXGJhelxcXFxxdXV4XCIpLCBcIkM6XFxcXGZvb1xcXFxiYXpcXFxccXV1eFwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhub3JtYWxpemUoXCIvZm9vL2Jhci8uLi9iYXovcXV1eFwiKSwgXCIvZm9vL2Jhei9xdXV4XCIpO1xuICogfVxuICogYGBgXG4gKlxuICogTm90ZTogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggZmlsZSBVUkxzLFxuICogdXNlIHRoZSBuZXcgdmVyc2lvbiBvZiBgbm9ybWFsaXplYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtbm9ybWFsaXplYC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBQYXRoIHRvIGJlIG5vcm1hbGl6ZWRcbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHdpbmRvd3NOb3JtYWxpemUocGF0aCkgOiBwb3NpeE5vcm1hbGl6ZShwYXRoKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUscUNBQXFDO0FBRXJDLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBUyxhQUFhLGNBQWMsUUFBUSx1QkFBdUI7QUFDbkUsU0FBUyxhQUFhLGdCQUFnQixRQUFRLHlCQUF5QjtBQUN2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBd0JDLEdBQ0QsT0FBTyxTQUFTLFVBQVUsSUFBWTtFQUNwQyxPQUFPLFlBQVksaUJBQWlCLFFBQVEsZUFBZTtBQUM3RCJ9
+// denoCacheMetadata=1856296657495635583,1641198475615613112 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f1a1af589e1c10c5e82a69a78b93a401e01c212c339e5f4c0118088a2270220a.js b/vendor/gen/https/jsr.io/f1a1af589e1c10c5e82a69a78b93a401e01c212c339e5f4c0118088a2270220a.js
new file mode 100644
index 0000000..620cf7b
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f1a1af589e1c10c5e82a69a78b93a401e01c212c339e5f4c0118088a2270220a.js
@@ -0,0 +1,18 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// Copyright the Browserify authors. MIT License.
+import { resolve } from "jsr:@std/path@^1.0.9/resolve";
+import { toPathString } from "./_to_path_string.ts";
+/**
+ * Checks if two paths are the same.
+ *
+ * @param src Source file path as a string or URL.
+ * @param dest Destination file path as a string or URL.
+ *
+ * @returns `true` if the paths are the same, `false` otherwise.
+ */ export function isSamePath(src, dest) {
+ src = toPathString(src);
+ dest = toPathString(dest);
+ return resolve(src) === resolve(dest);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L19pc19zYW1lX3BhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9yZXNvbHZlXCI7XG5pbXBvcnQgeyB0b1BhdGhTdHJpbmcgfSBmcm9tIFwiLi9fdG9fcGF0aF9zdHJpbmcudHNcIjtcblxuLyoqXG4gKiBDaGVja3MgaWYgdHdvIHBhdGhzIGFyZSB0aGUgc2FtZS5cbiAqXG4gKiBAcGFyYW0gc3JjIFNvdXJjZSBmaWxlIHBhdGggYXMgYSBzdHJpbmcgb3IgVVJMLlxuICogQHBhcmFtIGRlc3QgRGVzdGluYXRpb24gZmlsZSBwYXRoIGFzIGEgc3RyaW5nIG9yIFVSTC5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGhzIGFyZSB0aGUgc2FtZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVQYXRoKFxuICBzcmM6IHN0cmluZyB8IFVSTCxcbiAgZGVzdDogc3RyaW5nIHwgVVJMLFxuKTogYm9vbGVhbiB7XG4gIHNyYyA9IHRvUGF0aFN0cmluZyhzcmMpO1xuICBkZXN0ID0gdG9QYXRoU3RyaW5nKGRlc3QpO1xuXG4gIHJldHVybiByZXNvbHZlKHNyYykgPT09IHJlc29sdmUoZGVzdCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELGlEQUFpRDtBQUVqRCxTQUFTLE9BQU8sUUFBUSwrQkFBK0I7QUFDdkQsU0FBUyxZQUFZLFFBQVEsdUJBQXVCO0FBRXBEOzs7Ozs7O0NBT0MsR0FDRCxPQUFPLFNBQVMsV0FDZCxHQUFpQixFQUNqQixJQUFrQjtFQUVsQixNQUFNLGFBQWE7RUFDbkIsT0FBTyxhQUFhO0VBRXBCLE9BQU8sUUFBUSxTQUFTLFFBQVE7QUFDbEMifQ==
+// denoCacheMetadata=1466755666389371577,6510571361609774197 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f1be9026d372f22a068353b1f58861b2ae95c2d993dc6aca507b98cc0ba957dc.js b/vendor/gen/https/jsr.io/f1be9026d372f22a068353b1f58861b2ae95c2d993dc6aca507b98cc0ba957dc.js
new file mode 100644
index 0000000..eb5243c
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f1be9026d372f22a068353b1f58861b2ae95c2d993dc6aca507b98cc0ba957dc.js
@@ -0,0 +1,82 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { globToRegExp as posixGlobToRegExp } from "./posix/glob_to_regexp.ts";
+import { globToRegExp as windowsGlobToRegExp } from "./windows/glob_to_regexp.ts";
+/**
+ * Converts a glob string to a regular expression.
+ *
+ * Tries to match bash glob expansion as closely as possible.
+ *
+ * Basic glob syntax:
+ * - `*` - Matches everything without leaving the path segment.
+ * - `?` - Matches any single character.
+ * - `{foo,bar}` - Matches `foo` or `bar`.
+ * - `[abcd]` - Matches `a`, `b`, `c` or `d`.
+ * - `[a-d]` - Matches `a`, `b`, `c` or `d`.
+ * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`.
+ * - `[[:<class>:]]` - Matches any character belonging to `<class>`.
+ * - `[[:alnum:]]` - Matches any digit or letter.
+ * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`.
+ * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes
+ * for a complete list of supported character classes.
+ * - `\` - Escapes the next character for an `os` other than `"windows"`.
+ * - \` - Escapes the next character for `os` set to `"windows"`.
+ * - `/` - Path separator.
+ * - `\` - Additional path separator only for `os` set to `"windows"`.
+ *
+ * Extended syntax:
+ * - Requires `{ extended: true }`.
+ * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`.
+ * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same.
+ * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`.
+ * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`.
+ * - `!(foo|bar)` - Matches anything other than `{foo,bar}`.
+ * - See https://www.linuxjournal.com/content/bash-extended-globbing.
+ *
+ * Globstar syntax:
+ * - Requires `{ globstar: true }`.
+ * - `**` - Matches any number of any path segments.
+ * - Must comprise its entire path segment in the provided glob.
+ * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
+ *
+ * Note the following properties:
+ * - The generated `RegExp` is anchored at both start and end.
+ * - Repeating and trailing separators are tolerated. Trailing separators in the
+ * provided glob have no meaning and are discarded.
+ * - Absolute globs will only match absolute paths, etc.
+ * - Empty globs will match nothing.
+ * - Any special glob syntax must be contained to one path segment. For example,
+ * `?(foo|bar/baz)` is invalid. The separator will take precedence and the
+ * first segment ends with an unclosed group.
+ * - If a path segment ends with unclosed groups or a dangling escape prefix, a
+ * parse error has occurred. Every character for that segment is taken
+ * literally in this event.
+ *
+ * Limitations:
+ * - A negative group like `!(foo|bar)` will wrongly be converted to a negative
+ * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly
+ * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively,
+ * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if
+ * the group occurs not nested at the end of the segment.
+ *
+ * @example Usage
+ * ```ts
+ * import { globToRegExp } from "@std/path/glob-to-regexp";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(globToRegExp("*.js"), /^[^\\/]*\.js(?:\\|\/)*$/);
+ * } else {
+ * assertEquals(globToRegExp("*.js"), /^[^/]*\.js\/*$/);
+ * }
+ * ```
+ *
+ * @param glob Glob string to convert.
+ * @param options Conversion options.
+ * @returns The regular expression equivalent to the glob.
+ */ export function globToRegExp(glob, options = {}) {
+ return isWindows ? windowsGlobToRegExp(glob, options) : posixGlobToRegExp(glob, options);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9nbG9iX3RvX3JlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI0IHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEdsb2JPcHRpb25zIH0gZnJvbSBcIi4vX2NvbW1vbi9nbG9iX3RvX3JlZ19leHAudHNcIjtcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuXG5pbXBvcnQgeyBnbG9iVG9SZWdFeHAgYXMgcG9zaXhHbG9iVG9SZWdFeHAgfSBmcm9tIFwiLi9wb3NpeC9nbG9iX3RvX3JlZ2V4cC50c1wiO1xuaW1wb3J0IHtcbiAgZ2xvYlRvUmVnRXhwIGFzIHdpbmRvd3NHbG9iVG9SZWdFeHAsXG59IGZyb20gXCIuL3dpbmRvd3MvZ2xvYl90b19yZWdleHAudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBHbG9iT3B0aW9ucyB9O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZ2xvYiBzdHJpbmcgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogVHJpZXMgdG8gbWF0Y2ggYmFzaCBnbG9iIGV4cGFuc2lvbiBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEJhc2ljIGdsb2Igc3ludGF4OlxuICogLSBgKmAgLSBNYXRjaGVzIGV2ZXJ5dGhpbmcgd2l0aG91dCBsZWF2aW5nIHRoZSBwYXRoIHNlZ21lbnQuXG4gKiAtIGA/YCAtIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiAtIGB7Zm9vLGJhcn1gIC0gTWF0Y2hlcyBgZm9vYCBvciBgYmFyYC5cbiAqIC0gYFthYmNkXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW2EtZF1gIC0gTWF0Y2hlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFshYWJjZF1gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBiZXNpZGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW1s6PGNsYXNzPjpdXWAgLSBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIGA8Y2xhc3M+YC5cbiAqICAgICAtIGBbWzphbG51bTpdXWAgLSBNYXRjaGVzIGFueSBkaWdpdCBvciBsZXR0ZXIuXG4gKiAgICAgLSBgW1s6ZGlnaXQ6XWFiY11gIC0gTWF0Y2hlcyBhbnkgZGlnaXQsIGBhYCwgYGJgIG9yIGBjYC5cbiAqICAgICAtIFNlZSBodHRwczovL2ZhY2VsZXNzdXNlci5naXRodWIuaW8vd2NtYXRjaC9nbG9iLyNwb3NpeC1jaGFyYWN0ZXItY2xhc3Nlc1xuICogICAgICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG4gKiAtIGBcXGAgLSBFc2NhcGVzIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgYW4gYG9zYCBvdGhlciB0aGFuIGBcIndpbmRvd3NcImAuXG4gKiAtIFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICogLSBgL2AgLSBQYXRoIHNlcGFyYXRvci5cbiAqIC0gYFxcYCAtIEFkZGl0aW9uYWwgcGF0aCBzZXBhcmF0b3Igb25seSBmb3IgYG9zYCBzZXQgdG8gYFwid2luZG93c1wiYC5cbiAqXG4gKiBFeHRlbmRlZCBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGV4dGVuZGVkOiB0cnVlIH1gLlxuICogLSBgPyhmb298YmFyKWAgLSBNYXRjaGVzIDAgb3IgMSBpbnN0YW5jZSBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYEAoZm9vfGJhcilgIC0gTWF0Y2hlcyAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLiBUaGV5IGJlaGF2ZSB0aGUgc2FtZS5cbiAqIC0gYCooZm9vfGJhcilgIC0gTWF0Y2hlcyBfbl8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgKyhmb298YmFyKWAgLSBNYXRjaGVzIF9uID4gMF8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgIShmb298YmFyKWAgLSBNYXRjaGVzIGFueXRoaW5nIG90aGVyIHRoYW4gYHtmb28sYmFyfWAuXG4gKiAtIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvYmFzaC1leHRlbmRlZC1nbG9iYmluZy5cbiAqXG4gKiBHbG9ic3RhciBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGdsb2JzdGFyOiB0cnVlIH1gLlxuICogLSBgKipgIC0gTWF0Y2hlcyBhbnkgbnVtYmVyIG9mIGFueSBwYXRoIHNlZ21lbnRzLlxuICogICAgIC0gTXVzdCBjb21wcmlzZSBpdHMgZW50aXJlIHBhdGggc2VnbWVudCBpbiB0aGUgcHJvdmlkZWQgZ2xvYi5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gKlxuICogTm90ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIFRoZSBnZW5lcmF0ZWQgYFJlZ0V4cGAgaXMgYW5jaG9yZWQgYXQgYm90aCBzdGFydCBhbmQgZW5kLlxuICogLSBSZXBlYXRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHRvbGVyYXRlZC4gVHJhaWxpbmcgc2VwYXJhdG9ycyBpbiB0aGVcbiAqICAgcHJvdmlkZWQgZ2xvYiBoYXZlIG5vIG1lYW5pbmcgYW5kIGFyZSBkaXNjYXJkZWQuXG4gKiAtIEFic29sdXRlIGdsb2JzIHdpbGwgb25seSBtYXRjaCBhYnNvbHV0ZSBwYXRocywgZXRjLlxuICogLSBFbXB0eSBnbG9icyB3aWxsIG1hdGNoIG5vdGhpbmcuXG4gKiAtIEFueSBzcGVjaWFsIGdsb2Igc3ludGF4IG11c3QgYmUgY29udGFpbmVkIHRvIG9uZSBwYXRoIHNlZ21lbnQuIEZvciBleGFtcGxlLFxuICogICBgPyhmb298YmFyL2JheilgIGlzIGludmFsaWQuIFRoZSBzZXBhcmF0b3Igd2lsbCB0YWtlIHByZWNlZGVuY2UgYW5kIHRoZVxuICogICBmaXJzdCBzZWdtZW50IGVuZHMgd2l0aCBhbiB1bmNsb3NlZCBncm91cC5cbiAqIC0gSWYgYSBwYXRoIHNlZ21lbnQgZW5kcyB3aXRoIHVuY2xvc2VkIGdyb3VwcyBvciBhIGRhbmdsaW5nIGVzY2FwZSBwcmVmaXgsIGFcbiAqICAgcGFyc2UgZXJyb3IgaGFzIG9jY3VycmVkLiBFdmVyeSBjaGFyYWN0ZXIgZm9yIHRoYXQgc2VnbWVudCBpcyB0YWtlblxuICogICBsaXRlcmFsbHkgaW4gdGhpcyBldmVudC5cbiAqXG4gKiBMaW1pdGF0aW9uczpcbiAqIC0gQSBuZWdhdGl2ZSBncm91cCBsaWtlIGAhKGZvb3xiYXIpYCB3aWxsIHdyb25nbHkgYmUgY29udmVydGVkIHRvIGEgbmVnYXRpdmVcbiAqICAgbG9vay1haGVhZCBmb2xsb3dlZCBieSBhIHdpbGRjYXJkLiBUaGlzIG1lYW5zIHRoYXQgYCEoZm9vKS5qc2Agd2lsbCB3cm9uZ2x5XG4gKiAgIGZhaWwgdG8gbWF0Y2ggYGZvb2Jhci5qc2AsIGV2ZW4gdGhvdWdoIGBmb29iYXJgIGlzIG5vdCBgZm9vYC4gRWZmZWN0aXZlbHksXG4gKiAgIGAhKGZvb3xiYXIpYCBpcyB0cmVhdGVkIGxpa2UgYCEoQChmb298YmFyKSopYC4gVGhpcyB3aWxsIHdvcmsgY29ycmVjdGx5IGlmXG4gKiAgIHRoZSBncm91cCBvY2N1cnMgbm90IG5lc3RlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LlxuICpcbiAqIEBleGFtcGxlIFVzYWdlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZ2xvYlRvUmVnRXhwIH0gZnJvbSBcIkBzdGQvcGF0aC9nbG9iLXRvLXJlZ2V4cFwiO1xuICogaW1wb3J0IHsgYXNzZXJ0RXF1YWxzIH0gZnJvbSBcIkBzdGQvYXNzZXJ0XCI7XG4gKlxuICogaWYgKERlbm8uYnVpbGQub3MgPT09IFwid2luZG93c1wiKSB7XG4gKiAgIGFzc2VydEVxdWFscyhnbG9iVG9SZWdFeHAoXCIqLmpzXCIpLCAvXlteXFxcXC9dKlxcLmpzKD86XFxcXHxcXC8pKiQvKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhnbG9iVG9SZWdFeHAoXCIqLmpzXCIpLCAvXlteL10qXFwuanNcXC8qJC8pO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIGdsb2IgR2xvYiBzdHJpbmcgdG8gY29udmVydC5cbiAqIEBwYXJhbSBvcHRpb25zIENvbnZlcnNpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZXF1aXZhbGVudCB0byB0aGUgZ2xvYi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdsb2JUb1JlZ0V4cChcbiAgZ2xvYjogc3RyaW5nLFxuICBvcHRpb25zOiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogUmVnRXhwIHtcbiAgcmV0dXJuIGlzV2luZG93c1xuICAgID8gd2luZG93c0dsb2JUb1JlZ0V4cChnbG9iLCBvcHRpb25zKVxuICAgIDogcG9zaXhHbG9iVG9SZWdFeHAoZ2xvYiwgb3B0aW9ucyk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUdyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBRXJDLFNBQVMsZ0JBQWdCLGlCQUFpQixRQUFRLDRCQUE0QjtBQUM5RSxTQUNFLGdCQUFnQixtQkFBbUIsUUFDOUIsOEJBQThCO0FBSXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3RUMsR0FDRCxPQUFPLFNBQVMsYUFDZCxJQUFZLEVBQ1osVUFBdUIsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sWUFDSCxvQkFBb0IsTUFBTSxXQUMxQixrQkFBa0IsTUFBTTtBQUM5QiJ9
+// denoCacheMetadata=18404419939083149060,13768064041340183100 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f37370f7dbc9eb7bb9416d7100e6704fff77a5123c5505b6925c1b6eb688031a.js b/vendor/gen/https/jsr.io/f37370f7dbc9eb7bb9416d7100e6704fff77a5123c5505b6925c1b6eb688031a.js
new file mode 100644
index 0000000..070a4da
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f37370f7dbc9eb7bb9416d7100e6704fff77a5123c5505b6925c1b6eb688031a.js
@@ -0,0 +1,427 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+import { globToRegExp } from "jsr:@std/path@^1.0.9/glob-to-regexp";
+import { joinGlobs } from "jsr:@std/path@^1.0.9/join-globs";
+import { isGlob } from "jsr:@std/path@^1.0.9/is-glob";
+import { isAbsolute } from "jsr:@std/path@^1.0.9/is-absolute";
+import { resolve } from "jsr:@std/path@^1.0.9/resolve";
+import { SEPARATOR_PATTERN } from "jsr:@std/path@^1.0.9/constants";
+import { walk, walkSync } from "./walk.ts";
+import { toPathString } from "./_to_path_string.ts";
+import { createWalkEntry, createWalkEntrySync } from "./_create_walk_entry.ts";
+// deno-lint-ignore no-explicit-any
+const isWindows = globalThis.Deno?.build.os === "windows";
+function split(path) {
+ const s = SEPARATOR_PATTERN.source;
+ const segments = path.replace(new RegExp(`^${s}|${s}$`, "g"), "").split(SEPARATOR_PATTERN);
+ const isAbsolute_ = isAbsolute(path);
+ const split = {
+ segments,
+ isAbsolute: isAbsolute_,
+ hasTrailingSep: path.match(new RegExp(`${s}$`)) !== null
+ };
+ if (isWindows && isAbsolute_) {
+ split.winRoot = segments.shift();
+ }
+ return split;
+}
+function throwUnlessNotFound(error) {
+ if (!(error instanceof Deno.errors.NotFound)) {
+ throw error;
+ }
+}
+function comparePath(a, b) {
+ if (a.path < b.path) return -1;
+ if (a.path > b.path) return 1;
+ return 0;
+}
+/**
+ * Returns an async iterator that yields each file path matching the given glob
+ * pattern.
+ *
+ * The file paths are absolute paths. If `root` is not provided, the current
+ * working directory is used. The `root` directory is not included in the
+ * yielded file paths.
+ *
+ * Requires `--allow-read` permission.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param glob The glob pattern to expand.
+ * @param options Additional options for the expansion.
+ *
+ * @returns An async iterator that yields each walk entry matching the glob
+ * pattern.
+ *
+ * @example Basic usage
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * // script.ts
+ * import { expandGlob } from "@std/fs/expand-glob";
+ *
+ * await Array.fromAsync(expandGlob("*.ts"));
+ * // [
+ * // {
+ * // path: "/Users/user/folder/script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // {
+ * // path: "/Users/user/folder/foo.ts",
+ * // name: "foo.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Define root directory
+ *
+ * Setting the `root` option to `/folder` will expand the glob pattern from the
+ * `/folder` directory.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── subdir
+ * │ └── bar.ts
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * // script.ts
+ * import { expandGlob } from "@std/fs/expand-glob";
+ *
+ * await Array.fromAsync(expandGlob("*.ts", { root: "./subdir" }));
+ * // [
+ * // {
+ * // path: "/Users/user/folder/subdir/bar.ts",
+ * // name: "bar.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude files
+ *
+ * Setting the `exclude` option to `["foo.ts"]` will exclude the `foo.ts` file
+ * from the expansion.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * // script.ts
+ * import { expandGlob } from "@std/fs/expand-glob";
+ *
+ * await Array.fromAsync(expandGlob("*.ts", { exclude: ["foo.ts"] }));
+ * // [
+ * // {
+ * // path: "/Users/user/folder/script.ts",
+ * // name: "true.ts",
+ * // isFile: false,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Exclude directories
+ *
+ * Setting the `includeDirs` option to `false` will exclude directories from the
+ * expansion.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── subdir
+ * │ └── bar.ts
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * // script.ts
+ * import { expandGlob } from "@std/fs/expand-glob";
+ *
+ * await Array.fromAsync(expandGlob("*", { includeDirs: false }));
+ * // [
+ * // {
+ * // path: "/Users/user/folder/script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // {
+ * // path: "/Users/user/folder/foo.ts",
+ * // name: "foo.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // ]
+ * ```
+ *
+ * @example Follow symbolic links
+ *
+ * Setting the `followSymlinks` option to `true` will follow symbolic links.
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── link.ts -> script.ts (symbolic link)
+ * ```
+ *
+ * ```ts ignore
+ * // script.ts
+ * import { expandGlob } from "@std/fs/expand-glob";
+ *
+ * await Array.fromAsync(expandGlob("*.ts", { followSymlinks: true }));
+ * // [
+ * // {
+ * // path: "/Users/user/folder/script.ts",
+ * // name: "script.ts",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: false,
+ * // },
+ * // {
+ * // path: "/Users/user/folder/symlink",
+ * // name: "symlink",
+ * // isFile: true,
+ * // isDirectory: false,
+ * // isSymlink: true,
+ * // },
+ * // ]
+ * ```
+ */ export async function* expandGlob(glob, options) {
+ let { root, exclude = [], includeDirs = true, extended = true, globstar = true, caseInsensitive = false, followSymlinks = false, canonicalize = true } = options ?? {};
+ const { segments, isAbsolute: isGlobAbsolute, hasTrailingSep, winRoot } = split(toPathString(glob));
+ root ??= isGlobAbsolute ? winRoot ?? "/" : Deno.cwd();
+ const globOptions = {
+ extended,
+ globstar,
+ caseInsensitive
+ };
+ const absRoot = isGlobAbsolute ? root : resolve(root); // root is always string here
+ const resolveFromRoot = (path)=>resolve(absRoot, path);
+ const excludePatterns = exclude.map(resolveFromRoot).map((s)=>globToRegExp(s, globOptions));
+ const shouldInclude = (path)=>!excludePatterns.some((p)=>!!path.match(p));
+ let fixedRoot = isGlobAbsolute ? winRoot ?? "/" : absRoot;
+ while(segments.length > 0 && !isGlob(segments[0])){
+ const seg = segments.shift();
+ fixedRoot = joinGlobs([
+ fixedRoot,
+ seg
+ ], globOptions);
+ }
+ let fixedRootInfo;
+ try {
+ fixedRootInfo = await createWalkEntry(fixedRoot);
+ } catch (error) {
+ return throwUnlessNotFound(error);
+ }
+ async function* advanceMatch(walkInfo, globSegment) {
+ if (!walkInfo.isDirectory) {
+ return;
+ } else if (globSegment === "..") {
+ const parentPath = joinGlobs([
+ walkInfo.path,
+ ".."
+ ], globOptions);
+ if (shouldInclude(parentPath)) {
+ return yield await createWalkEntry(parentPath);
+ }
+ return;
+ } else if (globSegment === "**") {
+ return yield* walk(walkInfo.path, {
+ skip: excludePatterns,
+ maxDepth: globstar ? Infinity : 1,
+ followSymlinks,
+ canonicalize
+ });
+ }
+ const globPattern = globToRegExp(globSegment, globOptions);
+ for await (const walkEntry of walk(walkInfo.path, {
+ maxDepth: 1,
+ skip: excludePatterns,
+ followSymlinks
+ })){
+ if (walkEntry.path !== walkInfo.path && walkEntry.name.match(globPattern)) {
+ yield walkEntry;
+ }
+ }
+ }
+ let currentMatches = [
+ fixedRootInfo
+ ];
+ for (const segment of segments){
+ // Advancing the list of current matches may introduce duplicates, so we
+ // pass everything through this Map.
+ const nextMatchMap = new Map();
+ await Promise.all(currentMatches.map(async (currentMatch)=>{
+ for await (const nextMatch of advanceMatch(currentMatch, segment)){
+ nextMatchMap.set(nextMatch.path, nextMatch);
+ }
+ }));
+ currentMatches = [
+ ...nextMatchMap.values()
+ ].sort(comparePath);
+ }
+ if (hasTrailingSep) {
+ currentMatches = currentMatches.filter((entry)=>entry.isDirectory);
+ }
+ if (!includeDirs) {
+ currentMatches = currentMatches.filter((entry)=>!entry.isDirectory);
+ }
+ yield* currentMatches;
+}
+/**
+ * Returns an iterator that yields each file path matching the given glob
+ * pattern. The file paths are relative to the provided `root` directory.
+ * If `root` is not provided, the current working directory is used.
+ * The `root` directory is not included in the yielded file paths.
+ *
+ * Requires the `--allow-read` flag.
+ *
+ * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access}
+ * for more information on Deno's permissions system.
+ *
+ * @param glob The glob pattern to expand.
+ * @param options Additional options for the expansion.
+ *
+ * @returns An iterator that yields each walk entry matching the glob pattern.
+ *
+ * @example Usage
+ *
+ * File structure:
+ * ```
+ * folder
+ * ├── script.ts
+ * └── foo.ts
+ * ```
+ *
+ * ```ts ignore
+ * // script.ts
+ * import { expandGlobSync } from "@std/fs/expand-glob";
+ *
+ * const entries = [];
+ * for (const entry of expandGlobSync("*.ts")) {
+ * entries.push(entry);
+ * }
+ *
+ * entries[0]!.path; // "/Users/user/folder/script.ts"
+ * entries[0]!.name; // "script.ts"
+ * entries[0]!.isFile; // false
+ * entries[0]!.isDirectory; // true
+ * entries[0]!.isSymlink; // false
+ *
+ * entries[1]!.path; // "/Users/user/folder/foo.ts"
+ * entries[1]!.name; // "foo.ts"
+ * entries[1]!.isFile; // true
+ * entries[1]!.isDirectory; // false
+ * entries[1]!.isSymlink; // false
+ * ```
+ */ export function* expandGlobSync(glob, options) {
+ let { root, exclude = [], includeDirs = true, extended = true, globstar = true, caseInsensitive = false, followSymlinks = false, canonicalize = true } = options ?? {};
+ const { segments, isAbsolute: isGlobAbsolute, hasTrailingSep, winRoot } = split(toPathString(glob));
+ root ??= isGlobAbsolute ? winRoot ?? "/" : Deno.cwd();
+ const globOptions = {
+ extended,
+ globstar,
+ caseInsensitive
+ };
+ const absRoot = isGlobAbsolute ? root : resolve(root); // root is always string here
+ const resolveFromRoot = (path)=>resolve(absRoot, path);
+ const excludePatterns = exclude.map(resolveFromRoot).map((s)=>globToRegExp(s, globOptions));
+ const shouldInclude = (path)=>!excludePatterns.some((p)=>!!path.match(p));
+ let fixedRoot = isGlobAbsolute ? winRoot ?? "/" : absRoot;
+ while(segments.length > 0 && !isGlob(segments[0])){
+ const seg = segments.shift();
+ fixedRoot = joinGlobs([
+ fixedRoot,
+ seg
+ ], globOptions);
+ }
+ let fixedRootInfo;
+ try {
+ fixedRootInfo = createWalkEntrySync(fixedRoot);
+ } catch (error) {
+ return throwUnlessNotFound(error);
+ }
+ function* advanceMatch(walkInfo, globSegment) {
+ if (!walkInfo.isDirectory) {
+ return;
+ } else if (globSegment === "..") {
+ const parentPath = joinGlobs([
+ walkInfo.path,
+ ".."
+ ], globOptions);
+ if (shouldInclude(parentPath)) {
+ return yield createWalkEntrySync(parentPath);
+ }
+ return;
+ } else if (globSegment === "**") {
+ return yield* walkSync(walkInfo.path, {
+ skip: excludePatterns,
+ maxDepth: globstar ? Infinity : 1,
+ followSymlinks,
+ canonicalize
+ });
+ }
+ const globPattern = globToRegExp(globSegment, globOptions);
+ for (const walkEntry of walkSync(walkInfo.path, {
+ maxDepth: 1,
+ skip: excludePatterns,
+ followSymlinks
+ })){
+ if (walkEntry.path !== walkInfo.path && walkEntry.name.match(globPattern)) {
+ yield walkEntry;
+ }
+ }
+ }
+ let currentMatches = [
+ fixedRootInfo
+ ];
+ for (const segment of segments){
+ // Advancing the list of current matches may introduce duplicates, so we
+ // pass everything through this Map.
+ const nextMatchMap = new Map();
+ for (const currentMatch of currentMatches){
+ for (const nextMatch of advanceMatch(currentMatch, segment)){
+ nextMatchMap.set(nextMatch.path, nextMatch);
+ }
+ }
+ currentMatches = [
+ ...nextMatchMap.values()
+ ].sort(comparePath);
+ }
+ if (hasTrailingSep) {
+ currentMatches = currentMatches.filter((entry)=>entry.isDirectory);
+ }
+ if (!includeDirs) {
+ currentMatches = currentMatches.filter((entry)=>!entry.isDirectory);
+ }
+ yield* currentMatches;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L2V4cGFuZF9nbG9iLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyB0eXBlIEdsb2JPcHRpb25zLCBnbG9iVG9SZWdFeHAgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvZ2xvYi10by1yZWdleHBcIjtcbmltcG9ydCB7IGpvaW5HbG9icyB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9qb2luLWdsb2JzXCI7XG5pbXBvcnQgeyBpc0dsb2IgfSBmcm9tIFwianNyOkBzdGQvcGF0aEBeMS4wLjkvaXMtZ2xvYlwiO1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9pcy1hYnNvbHV0ZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9yZXNvbHZlXCI7XG5pbXBvcnQgeyBTRVBBUkFUT1JfUEFUVEVSTiB9IGZyb20gXCJqc3I6QHN0ZC9wYXRoQF4xLjAuOS9jb25zdGFudHNcIjtcbmltcG9ydCB7IHdhbGssIHdhbGtTeW5jIH0gZnJvbSBcIi4vd2Fsay50c1wiO1xuaW1wb3J0IHsgdG9QYXRoU3RyaW5nIH0gZnJvbSBcIi4vX3RvX3BhdGhfc3RyaW5nLnRzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVXYWxrRW50cnksXG4gIGNyZWF0ZVdhbGtFbnRyeVN5bmMsXG4gIHR5cGUgV2Fsa0VudHJ5LFxufSBmcm9tIFwiLi9fY3JlYXRlX3dhbGtfZW50cnkudHNcIjtcblxuZXhwb3J0IHR5cGUgeyBHbG9iT3B0aW9ucywgV2Fsa0VudHJ5IH07XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5jb25zdCBpc1dpbmRvd3MgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLkRlbm8/LmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIjtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgZXhwYW5kR2xvYn0gYW5kIHtAbGlua2NvZGUgZXhwYW5kR2xvYlN5bmN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRHbG9iT3B0aW9ucyBleHRlbmRzIE9taXQ8R2xvYk9wdGlvbnMsIFwib3NcIj4ge1xuICAvKipcbiAgICogRmlsZSBwYXRoIHdoZXJlIHRvIGV4cGFuZCBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7RGVuby5jd2QoKX1cbiAgICovXG4gIHJvb3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGdsb2IgcGF0dGVybnMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUgZXhwYW5zaW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7W119XG4gICAqL1xuICBleGNsdWRlPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgZGlyZWN0b3JpZXMgaW4gZW50cmllcy5cbiAgICpcbiAgICogQGRlZmF1bHQge3RydWV9XG4gICAqL1xuICBpbmNsdWRlRGlycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cbiAgICpcbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgZm9sbG93U3ltbGlua3M/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvbGxvd2VkIHN5bWxpbmsncyBwYXRoIHNob3VsZCBiZSBjYW5vbmljYWxpemVkLlxuICAgKiBUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IGlmIGBmb2xsb3dTeW1saW5rc2AgaXMgbm90IGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt0cnVlfVxuICAgKi9cbiAgY2Fub25pY2FsaXplPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFNwbGl0UGF0aCB7XG4gIHNlZ21lbnRzOiBzdHJpbmdbXTtcbiAgaXNBYnNvbHV0ZTogYm9vbGVhbjtcbiAgaGFzVHJhaWxpbmdTZXA6IGJvb2xlYW47XG4gIC8vIERlZmluZWQgZm9yIGFueSBhYnNvbHV0ZSBXaW5kb3dzIHBhdGguXG4gIHdpblJvb3Q/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHNwbGl0KHBhdGg6IHN0cmluZyk6IFNwbGl0UGF0aCB7XG4gIGNvbnN0IHMgPSBTRVBBUkFUT1JfUEFUVEVSTi5zb3VyY2U7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aFxuICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3N9fCR7c30kYCwgXCJnXCIpLCBcIlwiKVxuICAgIC5zcGxpdChTRVBBUkFUT1JfUEFUVEVSTik7XG4gIGNvbnN0IGlzQWJzb2x1dGVfID0gaXNBYnNvbHV0ZShwYXRoKTtcbiAgY29uc3Qgc3BsaXQ6IFNwbGl0UGF0aCA9IHtcbiAgICBzZWdtZW50cyxcbiAgICBpc0Fic29sdXRlOiBpc0Fic29sdXRlXyxcbiAgICBoYXNUcmFpbGluZ1NlcDogcGF0aC5tYXRjaChuZXcgUmVnRXhwKGAke3N9JGApKSAhPT0gbnVsbCxcbiAgfTtcbiAgaWYgKGlzV2luZG93cyAmJiBpc0Fic29sdXRlXykge1xuICAgIHNwbGl0LndpblJvb3QgPSBzZWdtZW50cy5zaGlmdCgpITtcbiAgfVxuICByZXR1cm4gc3BsaXQ7XG59XG5cbmZ1bmN0aW9uIHRocm93VW5sZXNzTm90Rm91bmQoZXJyb3I6IHVua25vd24pIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlUGF0aChhOiBXYWxrRW50cnksIGI6IFdhbGtFbnRyeSk6IG51bWJlciB7XG4gIGlmIChhLnBhdGggPCBiLnBhdGgpIHJldHVybiAtMTtcbiAgaWYgKGEucGF0aCA+IGIucGF0aCkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmF0b3IgdGhhdCB5aWVsZHMgZWFjaCBmaWxlIHBhdGggbWF0Y2hpbmcgdGhlIGdpdmVuIGdsb2JcbiAqIHBhdHRlcm4uXG4gKlxuICogVGhlIGZpbGUgcGF0aHMgYXJlIGFic29sdXRlIHBhdGhzLiBJZiBgcm9vdGAgaXMgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudFxuICogd29ya2luZyBkaXJlY3RvcnkgaXMgdXNlZC4gVGhlIGByb290YCBkaXJlY3RvcnkgaXMgbm90IGluY2x1ZGVkIGluIHRoZVxuICogeWllbGRlZCBmaWxlIHBhdGhzLlxuICpcbiAqIFJlcXVpcmVzIGAtLWFsbG93LXJlYWRgIHBlcm1pc3Npb24uXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL3J1bnRpbWUvbWFudWFsL2Jhc2ljcy9wZXJtaXNzaW9ucyNmaWxlLXN5c3RlbS1hY2Nlc3N9XG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEZW5vJ3MgcGVybWlzc2lvbnMgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBnbG9iIFRoZSBnbG9iIHBhdHRlcm4gdG8gZXhwYW5kLlxuICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgZXhwYW5zaW9uLlxuICpcbiAqIEByZXR1cm5zIEFuIGFzeW5jIGl0ZXJhdG9yIHRoYXQgeWllbGRzIGVhY2ggd2FsayBlbnRyeSBtYXRjaGluZyB0aGUgZ2xvYlxuICogcGF0dGVybi5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICpcbiAqIEZpbGUgc3RydWN0dXJlOlxuICogYGBgXG4gKiBmb2xkZXJcbiAqIOKUnOKUgOKUgCBzY3JpcHQudHNcbiAqIOKUlOKUgOKUgCBmb28udHNcbiAqIGBgYFxuICpcbiAqIGBgYHRzIGlnbm9yZVxuICogLy8gc2NyaXB0LnRzXG4gKiBpbXBvcnQgeyBleHBhbmRHbG9iIH0gZnJvbSBcIkBzdGQvZnMvZXhwYW5kLWdsb2JcIjtcbiAqXG4gKiBhd2FpdCBBcnJheS5mcm9tQXN5bmMoZXhwYW5kR2xvYihcIioudHNcIikpO1xuICogLy8gW1xuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCIvVXNlcnMvdXNlci9mb2xkZXIvc2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJzY3JpcHQudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2UsXG4gKiAvLyAgIH0sXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi9Vc2Vycy91c2VyL2ZvbGRlci9mb28udHNcIixcbiAqIC8vICAgICBuYW1lOiBcImZvby50c1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiBmYWxzZSxcbiAqIC8vICAgfSxcbiAqIC8vIF1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIERlZmluZSByb290IGRpcmVjdG9yeVxuICpcbiAqIFNldHRpbmcgdGhlIGByb290YCBvcHRpb24gdG8gYC9mb2xkZXJgIHdpbGwgZXhwYW5kIHRoZSBnbG9iIHBhdHRlcm4gZnJvbSB0aGVcbiAqIGAvZm9sZGVyYCBkaXJlY3RvcnkuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHN1YmRpclxuICog4pSCICAg4pSU4pSA4pSAIGJhci50c1xuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGZvby50c1xuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiAvLyBzY3JpcHQudHNcbiAqIGltcG9ydCB7IGV4cGFuZEdsb2IgfSBmcm9tIFwiQHN0ZC9mcy9leHBhbmQtZ2xvYlwiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyhleHBhbmRHbG9iKFwiKi50c1wiLCB7IHJvb3Q6IFwiLi9zdWJkaXJcIiB9KSk7XG4gKiAvLyBbXG4gKiAvLyAgIHtcbiAqIC8vICAgICBwYXRoOiBcIi9Vc2Vycy91c2VyL2ZvbGRlci9zdWJkaXIvYmFyLnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJiYXIudHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2UsXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBFeGNsdWRlIGZpbGVzXG4gKlxuICogU2V0dGluZyB0aGUgYGV4Y2x1ZGVgIG9wdGlvbiB0byBgW1wiZm9vLnRzXCJdYCB3aWxsIGV4Y2x1ZGUgdGhlIGBmb28udHNgIGZpbGVcbiAqIGZyb20gdGhlIGV4cGFuc2lvbi5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vLnRzXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIC8vIHNjcmlwdC50c1xuICogaW1wb3J0IHsgZXhwYW5kR2xvYiB9IGZyb20gXCJAc3RkL2ZzL2V4cGFuZC1nbG9iXCI7XG4gKlxuICogYXdhaXQgQXJyYXkuZnJvbUFzeW5jKGV4cGFuZEdsb2IoXCIqLnRzXCIsIHsgZXhjbHVkZTogW1wiZm9vLnRzXCJdIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiL1VzZXJzL3VzZXIvZm9sZGVyL3NjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwidHJ1ZS50c1wiLFxuICogLy8gICAgIGlzRmlsZTogZmFsc2UsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2UsXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBFeGNsdWRlIGRpcmVjdG9yaWVzXG4gKlxuICogU2V0dGluZyB0aGUgYGluY2x1ZGVEaXJzYCBvcHRpb24gdG8gYGZhbHNlYCB3aWxsIGV4Y2x1ZGUgZGlyZWN0b3JpZXMgZnJvbSB0aGVcbiAqIGV4cGFuc2lvbi5cbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc3ViZGlyXG4gKiDilIIgICDilJTilIDilIAgYmFyLnRzXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vLnRzXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIC8vIHNjcmlwdC50c1xuICogaW1wb3J0IHsgZXhwYW5kR2xvYiB9IGZyb20gXCJAc3RkL2ZzL2V4cGFuZC1nbG9iXCI7XG4gKlxuICogYXdhaXQgQXJyYXkuZnJvbUFzeW5jKGV4cGFuZEdsb2IoXCIqXCIsIHsgaW5jbHVkZURpcnM6IGZhbHNlIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiL1VzZXJzL3VzZXIvZm9sZGVyL3NjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlLFxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCIvVXNlcnMvdXNlci9mb2xkZXIvZm9vLnRzXCIsXG4gKiAvLyAgICAgbmFtZTogXCJmb28udHNcIixcbiAqIC8vICAgICBpc0ZpbGU6IHRydWUsXG4gKiAvLyAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICogLy8gICAgIGlzU3ltbGluazogZmFsc2UsXG4gKiAvLyAgIH0sXG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBGb2xsb3cgc3ltYm9saWMgbGlua3NcbiAqXG4gKiBTZXR0aW5nIHRoZSBgZm9sbG93U3ltbGlua3NgIG9wdGlvbiB0byBgdHJ1ZWAgd2lsbCBmb2xsb3cgc3ltYm9saWMgbGlua3MuXG4gKlxuICogRmlsZSBzdHJ1Y3R1cmU6XG4gKiBgYGBcbiAqIGZvbGRlclxuICog4pSc4pSA4pSAIHNjcmlwdC50c1xuICog4pSU4pSA4pSAIGxpbmsudHMgLT4gc2NyaXB0LnRzIChzeW1ib2xpYyBsaW5rKVxuICogYGBgXG4gKlxuICogYGBgdHMgaWdub3JlXG4gKiAvLyBzY3JpcHQudHNcbiAqIGltcG9ydCB7IGV4cGFuZEdsb2IgfSBmcm9tIFwiQHN0ZC9mcy9leHBhbmQtZ2xvYlwiO1xuICpcbiAqIGF3YWl0IEFycmF5LmZyb21Bc3luYyhleHBhbmRHbG9iKFwiKi50c1wiLCB7IGZvbGxvd1N5bWxpbmtzOiB0cnVlIH0pKTtcbiAqIC8vIFtcbiAqIC8vICAge1xuICogLy8gICAgIHBhdGg6IFwiL1VzZXJzL3VzZXIvZm9sZGVyL3NjcmlwdC50c1wiLFxuICogLy8gICAgIG5hbWU6IFwic2NyaXB0LnRzXCIsXG4gKiAvLyAgICAgaXNGaWxlOiB0cnVlLFxuICogLy8gICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAqIC8vICAgICBpc1N5bWxpbms6IGZhbHNlLFxuICogLy8gICB9LFxuICogLy8gICB7XG4gKiAvLyAgICAgcGF0aDogXCIvVXNlcnMvdXNlci9mb2xkZXIvc3ltbGlua1wiLFxuICogLy8gICAgIG5hbWU6IFwic3ltbGlua1wiLFxuICogLy8gICAgIGlzRmlsZTogdHJ1ZSxcbiAqIC8vICAgICBpc0RpcmVjdG9yeTogZmFsc2UsXG4gKiAvLyAgICAgaXNTeW1saW5rOiB0cnVlLFxuICogLy8gICB9LFxuICogLy8gXVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZXhwYW5kR2xvYihcbiAgZ2xvYjogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zPzogRXhwYW5kR2xvYk9wdGlvbnMsXG4pOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8V2Fsa0VudHJ5PiB7XG4gIGxldCB7XG4gICAgcm9vdCxcbiAgICBleGNsdWRlID0gW10sXG4gICAgaW5jbHVkZURpcnMgPSB0cnVlLFxuICAgIGV4dGVuZGVkID0gdHJ1ZSxcbiAgICBnbG9ic3RhciA9IHRydWUsXG4gICAgY2FzZUluc2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgZm9sbG93U3ltbGlua3MgPSBmYWxzZSxcbiAgICBjYW5vbmljYWxpemUgPSB0cnVlLFxuICB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICBjb25zdCB7XG4gICAgc2VnbWVudHMsXG4gICAgaXNBYnNvbHV0ZTogaXNHbG9iQWJzb2x1dGUsXG4gICAgaGFzVHJhaWxpbmdTZXAsXG4gICAgd2luUm9vdCxcbiAgfSA9IHNwbGl0KHRvUGF0aFN0cmluZyhnbG9iKSk7XG4gIHJvb3QgPz89IGlzR2xvYkFic29sdXRlID8gd2luUm9vdCA/PyBcIi9cIiA6IERlbm8uY3dkKCk7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnM6IEdsb2JPcHRpb25zID0geyBleHRlbmRlZCwgZ2xvYnN0YXIsIGNhc2VJbnNlbnNpdGl2ZSB9O1xuICBjb25zdCBhYnNSb290ID0gaXNHbG9iQWJzb2x1dGUgPyByb290IDogcmVzb2x2ZShyb290ISk7IC8vIHJvb3QgaXMgYWx3YXlzIHN0cmluZyBoZXJlXG4gIGNvbnN0IHJlc29sdmVGcm9tUm9vdCA9IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4gcmVzb2x2ZShhYnNSb290LCBwYXRoKTtcbiAgY29uc3QgZXhjbHVkZVBhdHRlcm5zID0gZXhjbHVkZVxuICAgIC5tYXAocmVzb2x2ZUZyb21Sb290KVxuICAgIC5tYXAoKHM6IHN0cmluZyk6IFJlZ0V4cCA9PiBnbG9iVG9SZWdFeHAocywgZ2xvYk9wdGlvbnMpKTtcbiAgY29uc3Qgc2hvdWxkSW5jbHVkZSA9IChwYXRoOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgIWV4Y2x1ZGVQYXR0ZXJucy5zb21lKChwOiBSZWdFeHApOiBib29sZWFuID0+ICEhcGF0aC5tYXRjaChwKSk7XG5cbiAgbGV0IGZpeGVkUm9vdCA9IGlzR2xvYkFic29sdXRlID8gd2luUm9vdCA/PyBcIi9cIiA6IGFic1Jvb3Q7XG4gIHdoaWxlIChzZWdtZW50cy5sZW5ndGggPiAwICYmICFpc0dsb2Ioc2VnbWVudHNbMF0hKSkge1xuICAgIGNvbnN0IHNlZyA9IHNlZ21lbnRzLnNoaWZ0KCkhO1xuICAgIGZpeGVkUm9vdCA9IGpvaW5HbG9icyhbZml4ZWRSb290LCBzZWddLCBnbG9iT3B0aW9ucyk7XG4gIH1cblxuICBsZXQgZml4ZWRSb290SW5mbzogV2Fsa0VudHJ5O1xuICB0cnkge1xuICAgIGZpeGVkUm9vdEluZm8gPSBhd2FpdCBjcmVhdGVXYWxrRW50cnkoZml4ZWRSb290KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdGhyb3dVbmxlc3NOb3RGb3VuZChlcnJvcik7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiogYWR2YW5jZU1hdGNoKFxuICAgIHdhbGtJbmZvOiBXYWxrRW50cnksXG4gICAgZ2xvYlNlZ21lbnQ6IHN0cmluZyxcbiAgKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFdhbGtFbnRyeT4ge1xuICAgIGlmICghd2Fsa0luZm8uaXNEaXJlY3RvcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGdsb2JTZWdtZW50ID09PSBcIi4uXCIpIHtcbiAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBqb2luR2xvYnMoW3dhbGtJbmZvLnBhdGgsIFwiLi5cIl0sIGdsb2JPcHRpb25zKTtcbiAgICAgIGlmIChzaG91bGRJbmNsdWRlKHBhcmVudFBhdGgpKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBhd2FpdCBjcmVhdGVXYWxrRW50cnkocGFyZW50UGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChnbG9iU2VnbWVudCA9PT0gXCIqKlwiKSB7XG4gICAgICByZXR1cm4geWllbGQqIHdhbGsod2Fsa0luZm8ucGF0aCwge1xuICAgICAgICBza2lwOiBleGNsdWRlUGF0dGVybnMsXG4gICAgICAgIG1heERlcHRoOiBnbG9ic3RhciA/IEluZmluaXR5IDogMSxcbiAgICAgICAgZm9sbG93U3ltbGlua3MsXG4gICAgICAgIGNhbm9uaWNhbGl6ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGdsb2JUb1JlZ0V4cChnbG9iU2VnbWVudCwgZ2xvYk9wdGlvbnMpO1xuICAgIGZvciBhd2FpdCAoXG4gICAgICBjb25zdCB3YWxrRW50cnkgb2Ygd2Fsayh3YWxrSW5mby5wYXRoLCB7XG4gICAgICAgIG1heERlcHRoOiAxLFxuICAgICAgICBza2lwOiBleGNsdWRlUGF0dGVybnMsXG4gICAgICAgIGZvbGxvd1N5bWxpbmtzLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgd2Fsa0VudHJ5LnBhdGggIT09IHdhbGtJbmZvLnBhdGggJiZcbiAgICAgICAgd2Fsa0VudHJ5Lm5hbWUubWF0Y2goZ2xvYlBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgeWllbGQgd2Fsa0VudHJ5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBjdXJyZW50TWF0Y2hlczogV2Fsa0VudHJ5W10gPSBbZml4ZWRSb290SW5mb107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgIC8vIEFkdmFuY2luZyB0aGUgbGlzdCBvZiBjdXJyZW50IG1hdGNoZXMgbWF5IGludHJvZHVjZSBkdXBsaWNhdGVzLCBzbyB3ZVxuICAgIC8vIHBhc3MgZXZlcnl0aGluZyB0aHJvdWdoIHRoaXMgTWFwLlxuICAgIGNvbnN0IG5leHRNYXRjaE1hcDogTWFwPHN0cmluZywgV2Fsa0VudHJ5PiA9IG5ldyBNYXAoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGN1cnJlbnRNYXRjaGVzLm1hcChhc3luYyAoY3VycmVudE1hdGNoKSA9PiB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgbmV4dE1hdGNoIG9mIGFkdmFuY2VNYXRjaChjdXJyZW50TWF0Y2gsIHNlZ21lbnQpKSB7XG4gICAgICAgICAgbmV4dE1hdGNoTWFwLnNldChuZXh0TWF0Y2gucGF0aCwgbmV4dE1hdGNoKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgICBjdXJyZW50TWF0Y2hlcyA9IFsuLi5uZXh0TWF0Y2hNYXAudmFsdWVzKCldLnNvcnQoY29tcGFyZVBhdGgpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2VwKSB7XG4gICAgY3VycmVudE1hdGNoZXMgPSBjdXJyZW50TWF0Y2hlcy5maWx0ZXIoXG4gICAgICAoZW50cnk6IFdhbGtFbnRyeSk6IGJvb2xlYW4gPT4gZW50cnkuaXNEaXJlY3RvcnksXG4gICAgKTtcbiAgfVxuICBpZiAoIWluY2x1ZGVEaXJzKSB7XG4gICAgY3VycmVudE1hdGNoZXMgPSBjdXJyZW50TWF0Y2hlcy5maWx0ZXIoXG4gICAgICAoZW50cnk6IFdhbGtFbnRyeSk6IGJvb2xlYW4gPT4gIWVudHJ5LmlzRGlyZWN0b3J5LFxuICAgICk7XG4gIH1cbiAgeWllbGQqIGN1cnJlbnRNYXRjaGVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCB5aWVsZHMgZWFjaCBmaWxlIHBhdGggbWF0Y2hpbmcgdGhlIGdpdmVuIGdsb2JcbiAqIHBhdHRlcm4uIFRoZSBmaWxlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgcHJvdmlkZWQgYHJvb3RgIGRpcmVjdG9yeS5cbiAqIElmIGByb290YCBpcyBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVzZWQuXG4gKiBUaGUgYHJvb3RgIGRpcmVjdG9yeSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHlpZWxkZWQgZmlsZSBwYXRocy5cbiAqXG4gKiBSZXF1aXJlcyB0aGUgYC0tYWxsb3ctcmVhZGAgZmxhZy5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vcnVudGltZS9tYW51YWwvYmFzaWNzL3Blcm1pc3Npb25zI2ZpbGUtc3lzdGVtLWFjY2Vzc31cbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERlbm8ncyBwZXJtaXNzaW9ucyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGdsb2IgVGhlIGdsb2IgcGF0dGVybiB0byBleHBhbmQuXG4gKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBleHBhbnNpb24uXG4gKlxuICogQHJldHVybnMgQW4gaXRlcmF0b3IgdGhhdCB5aWVsZHMgZWFjaCB3YWxrIGVudHJ5IG1hdGNoaW5nIHRoZSBnbG9iIHBhdHRlcm4uXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqXG4gKiBGaWxlIHN0cnVjdHVyZTpcbiAqIGBgYFxuICogZm9sZGVyXG4gKiDilJzilIDilIAgc2NyaXB0LnRzXG4gKiDilJTilIDilIAgZm9vLnRzXG4gKiBgYGBcbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIC8vIHNjcmlwdC50c1xuICogaW1wb3J0IHsgZXhwYW5kR2xvYlN5bmMgfSBmcm9tIFwiQHN0ZC9mcy9leHBhbmQtZ2xvYlwiO1xuICpcbiAqIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAqIGZvciAoY29uc3QgZW50cnkgb2YgZXhwYW5kR2xvYlN5bmMoXCIqLnRzXCIpKSB7XG4gKiAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gKiB9XG4gKlxuICogZW50cmllc1swXSEucGF0aDsgLy8gXCIvVXNlcnMvdXNlci9mb2xkZXIvc2NyaXB0LnRzXCJcbiAqIGVudHJpZXNbMF0hLm5hbWU7IC8vIFwic2NyaXB0LnRzXCJcbiAqIGVudHJpZXNbMF0hLmlzRmlsZTsgLy8gZmFsc2VcbiAqIGVudHJpZXNbMF0hLmlzRGlyZWN0b3J5OyAvLyB0cnVlXG4gKiBlbnRyaWVzWzBdIS5pc1N5bWxpbms7IC8vIGZhbHNlXG4gKlxuICogZW50cmllc1sxXSEucGF0aDsgLy8gXCIvVXNlcnMvdXNlci9mb2xkZXIvZm9vLnRzXCJcbiAqIGVudHJpZXNbMV0hLm5hbWU7IC8vIFwiZm9vLnRzXCJcbiAqIGVudHJpZXNbMV0hLmlzRmlsZTsgLy8gdHJ1ZVxuICogZW50cmllc1sxXSEuaXNEaXJlY3Rvcnk7IC8vIGZhbHNlXG4gKiBlbnRyaWVzWzFdIS5pc1N5bWxpbms7IC8vIGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBleHBhbmRHbG9iU3luYyhcbiAgZ2xvYjogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zPzogRXhwYW5kR2xvYk9wdGlvbnMsXG4pOiBJdGVyYWJsZUl0ZXJhdG9yPFdhbGtFbnRyeT4ge1xuICBsZXQge1xuICAgIHJvb3QsXG4gICAgZXhjbHVkZSA9IFtdLFxuICAgIGluY2x1ZGVEaXJzID0gdHJ1ZSxcbiAgICBleHRlbmRlZCA9IHRydWUsXG4gICAgZ2xvYnN0YXIgPSB0cnVlLFxuICAgIGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlLFxuICAgIGZvbGxvd1N5bWxpbmtzID0gZmFsc2UsXG4gICAgY2Fub25pY2FsaXplID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgY29uc3Qge1xuICAgIHNlZ21lbnRzLFxuICAgIGlzQWJzb2x1dGU6IGlzR2xvYkFic29sdXRlLFxuICAgIGhhc1RyYWlsaW5nU2VwLFxuICAgIHdpblJvb3QsXG4gIH0gPSBzcGxpdCh0b1BhdGhTdHJpbmcoZ2xvYikpO1xuICByb290ID8/PSBpc0dsb2JBYnNvbHV0ZSA/IHdpblJvb3QgPz8gXCIvXCIgOiBEZW5vLmN3ZCgpO1xuXG4gIGNvbnN0IGdsb2JPcHRpb25zOiBHbG9iT3B0aW9ucyA9IHsgZXh0ZW5kZWQsIGdsb2JzdGFyLCBjYXNlSW5zZW5zaXRpdmUgfTtcbiAgY29uc3QgYWJzUm9vdCA9IGlzR2xvYkFic29sdXRlID8gcm9vdCA6IHJlc29sdmUocm9vdCEpOyAvLyByb290IGlzIGFsd2F5cyBzdHJpbmcgaGVyZVxuICBjb25zdCByZXNvbHZlRnJvbVJvb3QgPSAocGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHJlc29sdmUoYWJzUm9vdCwgcGF0aCk7XG4gIGNvbnN0IGV4Y2x1ZGVQYXR0ZXJucyA9IGV4Y2x1ZGVcbiAgICAubWFwKHJlc29sdmVGcm9tUm9vdClcbiAgICAubWFwKChzOiBzdHJpbmcpOiBSZWdFeHAgPT4gZ2xvYlRvUmVnRXhwKHMsIGdsb2JPcHRpb25zKSk7XG4gIGNvbnN0IHNob3VsZEluY2x1ZGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAgICFleGNsdWRlUGF0dGVybnMuc29tZSgocDogUmVnRXhwKTogYm9vbGVhbiA9PiAhIXBhdGgubWF0Y2gocCkpO1xuXG4gIGxldCBmaXhlZFJvb3QgPSBpc0dsb2JBYnNvbHV0ZSA/IHdpblJvb3QgPz8gXCIvXCIgOiBhYnNSb290O1xuICB3aGlsZSAoc2VnbWVudHMubGVuZ3RoID4gMCAmJiAhaXNHbG9iKHNlZ21lbnRzWzBdISkpIHtcbiAgICBjb25zdCBzZWcgPSBzZWdtZW50cy5zaGlmdCgpITtcbiAgICBmaXhlZFJvb3QgPSBqb2luR2xvYnMoW2ZpeGVkUm9vdCwgc2VnXSwgZ2xvYk9wdGlvbnMpO1xuICB9XG5cbiAgbGV0IGZpeGVkUm9vdEluZm86IFdhbGtFbnRyeTtcbiAgdHJ5IHtcbiAgICBmaXhlZFJvb3RJbmZvID0gY3JlYXRlV2Fsa0VudHJ5U3luYyhmaXhlZFJvb3QpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0aHJvd1VubGVzc05vdEZvdW5kKGVycm9yKTtcbiAgfVxuXG4gIGZ1bmN0aW9uKiBhZHZhbmNlTWF0Y2goXG4gICAgd2Fsa0luZm86IFdhbGtFbnRyeSxcbiAgICBnbG9iU2VnbWVudDogc3RyaW5nLFxuICApOiBJdGVyYWJsZUl0ZXJhdG9yPFdhbGtFbnRyeT4ge1xuICAgIGlmICghd2Fsa0luZm8uaXNEaXJlY3RvcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGdsb2JTZWdtZW50ID09PSBcIi4uXCIpIHtcbiAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBqb2luR2xvYnMoW3dhbGtJbmZvLnBhdGgsIFwiLi5cIl0sIGdsb2JPcHRpb25zKTtcbiAgICAgIGlmIChzaG91bGRJbmNsdWRlKHBhcmVudFBhdGgpKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBjcmVhdGVXYWxrRW50cnlTeW5jKHBhcmVudFBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZ2xvYlNlZ21lbnQgPT09IFwiKipcIikge1xuICAgICAgcmV0dXJuIHlpZWxkKiB3YWxrU3luYyh3YWxrSW5mby5wYXRoLCB7XG4gICAgICAgIHNraXA6IGV4Y2x1ZGVQYXR0ZXJucyxcbiAgICAgICAgbWF4RGVwdGg6IGdsb2JzdGFyID8gSW5maW5pdHkgOiAxLFxuICAgICAgICBmb2xsb3dTeW1saW5rcyxcbiAgICAgICAgY2Fub25pY2FsaXplLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGdsb2JQYXR0ZXJuID0gZ2xvYlRvUmVnRXhwKGdsb2JTZWdtZW50LCBnbG9iT3B0aW9ucyk7XG4gICAgZm9yIChcbiAgICAgIGNvbnN0IHdhbGtFbnRyeSBvZiB3YWxrU3luYyh3YWxrSW5mby5wYXRoLCB7XG4gICAgICAgIG1heERlcHRoOiAxLFxuICAgICAgICBza2lwOiBleGNsdWRlUGF0dGVybnMsXG4gICAgICAgIGZvbGxvd1N5bWxpbmtzLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgd2Fsa0VudHJ5LnBhdGggIT09IHdhbGtJbmZvLnBhdGggJiZcbiAgICAgICAgd2Fsa0VudHJ5Lm5hbWUubWF0Y2goZ2xvYlBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgeWllbGQgd2Fsa0VudHJ5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBjdXJyZW50TWF0Y2hlczogV2Fsa0VudHJ5W10gPSBbZml4ZWRSb290SW5mb107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgIC8vIEFkdmFuY2luZyB0aGUgbGlzdCBvZiBjdXJyZW50IG1hdGNoZXMgbWF5IGludHJvZHVjZSBkdXBsaWNhdGVzLCBzbyB3ZVxuICAgIC8vIHBhc3MgZXZlcnl0aGluZyB0aHJvdWdoIHRoaXMgTWFwLlxuICAgIGNvbnN0IG5leHRNYXRjaE1hcDogTWFwPHN0cmluZywgV2Fsa0VudHJ5PiA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGN1cnJlbnRNYXRjaCBvZiBjdXJyZW50TWF0Y2hlcykge1xuICAgICAgZm9yIChjb25zdCBuZXh0TWF0Y2ggb2YgYWR2YW5jZU1hdGNoKGN1cnJlbnRNYXRjaCwgc2VnbWVudCkpIHtcbiAgICAgICAgbmV4dE1hdGNoTWFwLnNldChuZXh0TWF0Y2gucGF0aCwgbmV4dE1hdGNoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudE1hdGNoZXMgPSBbLi4ubmV4dE1hdGNoTWFwLnZhbHVlcygpXS5zb3J0KGNvbXBhcmVQYXRoKTtcbiAgfVxuXG4gIGlmIChoYXNUcmFpbGluZ1NlcCkge1xuICAgIGN1cnJlbnRNYXRjaGVzID0gY3VycmVudE1hdGNoZXMuZmlsdGVyKFxuICAgICAgKGVudHJ5OiBXYWxrRW50cnkpOiBib29sZWFuID0+IGVudHJ5LmlzRGlyZWN0b3J5LFxuICAgICk7XG4gIH1cbiAgaWYgKCFpbmNsdWRlRGlycykge1xuICAgIGN1cnJlbnRNYXRjaGVzID0gY3VycmVudE1hdGNoZXMuZmlsdGVyKFxuICAgICAgKGVudHJ5OiBXYWxrRW50cnkpOiBib29sZWFuID0+ICFlbnRyeS5pc0RpcmVjdG9yeSxcbiAgICApO1xuICB9XG4gIHlpZWxkKiBjdXJyZW50TWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsU0FBMkIsWUFBWSxRQUFRLHNDQUFzQztBQUNyRixTQUFTLFNBQVMsUUFBUSxrQ0FBa0M7QUFDNUQsU0FBUyxNQUFNLFFBQVEsK0JBQStCO0FBQ3RELFNBQVMsVUFBVSxRQUFRLG1DQUFtQztBQUM5RCxTQUFTLE9BQU8sUUFBUSwrQkFBK0I7QUFDdkQsU0FBUyxpQkFBaUIsUUFBUSxpQ0FBaUM7QUFDbkUsU0FBUyxJQUFJLEVBQUUsUUFBUSxRQUFRLFlBQVk7QUFDM0MsU0FBUyxZ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
+// denoCacheMetadata=14596952344420789008,3140974801803053508 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f4b08ff3716c647cd205aece3dc8dce6c78616d2042cf985b649b82f03f0a51f.js b/vendor/gen/https/jsr.io/f4b08ff3716c647cd205aece3dc8dce6c78616d2042cf985b649b82f03f0a51f.js
new file mode 100644
index 0000000..96c5f68
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f4b08ff3716c647cd205aece3dc8dce6c78616d2042cf985b649b82f03f0a51f.js
@@ -0,0 +1,21 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const nil = {
+ tag: "tag:yaml.org,2002:null",
+ kind: "scalar",
+ defaultStyle: "lowercase",
+ predicate: (object)=>object === null,
+ construct: ()=>null,
+ resolve: (data)=>{
+ return data === "~" || data === "null" || data === "Null" || data === "NULL";
+ },
+ represent: {
+ lowercase: ()=>"null",
+ uppercase: ()=>"NULL",
+ camelcase: ()=>"Null"
+ }
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9uaWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBuaWw6IFR5cGU8XCJzY2FsYXJcIiwgbnVsbD4gPSB7XG4gIHRhZzogXCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsXCIsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIixcbiAgcHJlZGljYXRlOiAob2JqZWN0OiB1bmtub3duKTogb2JqZWN0IGlzIG51bGwgPT4gb2JqZWN0ID09PSBudWxsLFxuICBjb25zdHJ1Y3Q6ICgpID0+IG51bGwsXG4gIHJlc29sdmU6IChkYXRhOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0YSA9PT0gXCJ+XCIgfHxcbiAgICAgIGRhdGEgPT09IFwibnVsbFwiIHx8XG4gICAgICBkYXRhID09PSBcIk51bGxcIiB8fFxuICAgICAgZGF0YSA9PT0gXCJOVUxMXCJcbiAgICApO1xuICB9LFxuICByZXByZXNlbnQ6IHtcbiAgICBsb3dlcmNhc2U6ICgpOiBzdHJpbmcgPT4gXCJudWxsXCIsXG4gICAgdXBwZXJjYXNlOiAoKTogc3RyaW5nID0+IFwiTlVMTFwiLFxuICAgIGNhbWVsY2FzZTogKCk6IHN0cmluZyA9PiBcIk51bGxcIixcbiAgfSxcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG9GQUFvRjtBQUNwRiwwRUFBMEU7QUFDMUUscURBQXFEO0FBSXJELE9BQU8sTUFBTSxNQUE0QjtFQUN2QyxLQUFLO0VBQ0wsTUFBTTtFQUNOLGNBQWM7RUFDZCxXQUFXLENBQUMsU0FBb0MsV0FBVztFQUMzRCxXQUFXLElBQU07RUFDakIsU0FBUyxDQUFDO0lBQ1IsT0FDRSxTQUFTLE9BQ1QsU0FBUyxVQUNULFNBQVMsVUFDVCxTQUFTO0VBRWI7RUFDQSxXQUFXO0lBQ1QsV0FBVyxJQUFjO0lBQ3pCLFdBQVcsSUFBYztJQUN6QixXQUFXLElBQWM7RUFDM0I7QUFDRixFQUFFIn0=
+// denoCacheMetadata=11689818641340337134,7524614590640770563 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f5f384eec98ab72dd1842d44353096dcf386e40ee22a4347f24ab5cf92457ce4.js b/vendor/gen/https/jsr.io/f5f384eec98ab72dd1842d44353096dcf386e40ee22a4347f24ab5cf92457ce4.js
new file mode 100644
index 0000000..fd5db7c
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f5f384eec98ab72dd1842d44353096dcf386e40ee22a4347f24ab5cf92457ce4.js
@@ -0,0 +1,16 @@
+// Ported from js-yaml v3.13.1:
+// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da
+// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.
+// Copyright 2018-2025 the Deno authors. MIT license.
+export const map = {
+ tag: "tag:yaml.org,2002:map",
+ resolve () {
+ return true;
+ },
+ construct (data) {
+ return data !== null ? data : {};
+ },
+ kind: "mapping"
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQveWFtbC8xLjAuNi9fdHlwZS9tYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyNSB0aGUgRGVubyBhdXRob3JzLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIi4uL190eXBlLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBtYXA6IFR5cGU8XCJtYXBwaW5nXCIsIHVua25vd24+ID0ge1xuICB0YWc6IFwidGFnOnlhbWwub3JnLDIwMDI6bWFwXCIsXG4gIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGNvbnN0cnVjdChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG4gIH0sXG4gIGtpbmQ6IFwibWFwcGluZ1wiLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0ZBQW9GO0FBQ3BGLDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFJckQsT0FBTyxNQUFNLE1BQWdDO0VBQzNDLEtBQUs7RUFDTDtJQUNFLE9BQU87RUFDVDtFQUNBLFdBQVUsSUFBSTtJQUNaLE9BQU8sU0FBUyxPQUFPLE9BQU8sQ0FBQztFQUNqQztFQUNBLE1BQU07QUFDUixFQUFFIn0=
+// denoCacheMetadata=12670044484821605217,1235508351547473956 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f67d23f6d79954611711428bb8e43b3250f26d23984bf226e4a11fcfe4de3746.js b/vendor/gen/https/jsr.io/f67d23f6d79954611711428bb8e43b3250f26d23984bf226e4a11fcfe4de3746.js
new file mode 100644
index 0000000..f13e0f4
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f67d23f6d79954611711428bb8e43b3250f26d23984bf226e4a11fcfe4de3746.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { join as posixJoin } from "./posix/join.ts";
+import { join as windowsJoin } from "./windows/join.ts";
+/**
+ * Joins a sequence of paths, then normalizes the resulting path.
+ *
+ * @example Usage
+ * ```ts
+ * import { join } from "@std/path/join";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(join("C:\\foo", "bar", "baz\\quux", "garply", ".."), "C:\\foo\\bar\\baz\\quux");
+ * } else {
+ * assertEquals(join("/foo", "bar", "baz/quux", "garply", ".."), "/foo/bar/baz/quux");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `join` from `@std/path/unstable-join`.
+ *
+ * @param paths Paths to be joined and normalized.
+ * @returns The joined and normalized path.
+ */ export function join(...paths) {
+ return isWindows ? windowsJoin(...paths) : posixJoin(...paths);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9qb2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjQgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgam9pbiBhcyBwb3NpeEpvaW4gfSBmcm9tIFwiLi9wb3NpeC9qb2luLnRzXCI7XG5pbXBvcnQgeyBqb2luIGFzIHdpbmRvd3NKb2luIH0gZnJvbSBcIi4vd2luZG93cy9qb2luLnRzXCI7XG5cbi8qKlxuICogSm9pbnMgYSBzZXF1ZW5jZSBvZiBwYXRocywgdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgcGF0aC5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpvaW4gfSBmcm9tIFwiQHN0ZC9wYXRoL2pvaW5cIjtcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCJAc3RkL2Fzc2VydFwiO1xuICpcbiAqIGlmIChEZW5vLmJ1aWxkLm9zID09PSBcIndpbmRvd3NcIikge1xuICogICBhc3NlcnRFcXVhbHMoam9pbihcIkM6XFxcXGZvb1wiLCBcImJhclwiLCBcImJhelxcXFxxdXV4XCIsIFwiZ2FycGx5XCIsIFwiLi5cIiksIFwiQzpcXFxcZm9vXFxcXGJhclxcXFxiYXpcXFxccXV1eFwiKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGFzc2VydEVxdWFscyhqb2luKFwiL2Zvb1wiLCBcImJhclwiLCBcImJhei9xdXV4XCIsIFwiZ2FycGx5XCIsIFwiLi5cIiksIFwiL2Zvby9iYXIvYmF6L3F1dXhcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBqb2luYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtam9pbmAuXG4gKlxuICogQHBhcmFtIHBhdGhzIFBhdGhzIHRvIGJlIGpvaW5lZCBhbmQgbm9ybWFsaXplZC5cbiAqIEByZXR1cm5zIFRoZSBqb2luZWQgYW5kIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHdpbmRvd3NKb2luKC4uLnBhdGhzKSA6IHBvc2l4Sm9pbiguLi5wYXRocyk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUVyQyxTQUFTLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVMsUUFBUSxTQUFTLFFBQVEsa0JBQWtCO0FBQ3BELFNBQVMsUUFBUSxXQUFXLFFBQVEsb0JBQW9CO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxLQUFLLEdBQUcsS0FBZTtFQUNyQyxPQUFPLFlBQVksZUFBZSxTQUFTLGFBQWE7QUFDMUQifQ==
+// denoCacheMetadata=9382851392383508921,16341037408135033779 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f719b3188b4c1efb386b3b2c3cbb1c730439b55ba26bd582ba3a33f7c4306ffc.js b/vendor/gen/https/jsr.io/f719b3188b4c1efb386b3b2c3cbb1c730439b55ba26bd582ba3a33f7c4306ffc.js
new file mode 100644
index 0000000..4a8fd4f
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f719b3188b4c1efb386b3b2c3cbb1c730439b55ba26bd582ba3a33f7c4306ffc.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+/**
+ * Helpers for working with the filesystem.
+ *
+ * ```ts ignore
+ * import { ensureFile, copy, ensureDir, move } from "@std/fs";
+ *
+ * await ensureFile("example.txt");
+ *
+ * await copy("example.txt", "example_copy.txt");
+ *
+ * await ensureDir("subdir");
+ *
+ * await move("example_copy.txt", "subdir/example_copy.txt");
+ * ```
+ *
+ * @module
+ */ export * from "./empty_dir.ts";
+export * from "./ensure_dir.ts";
+export * from "./ensure_file.ts";
+export * from "./ensure_link.ts";
+export * from "./ensure_symlink.ts";
+export * from "./exists.ts";
+export * from "./expand_glob.ts";
+export * from "./move.ts";
+export * from "./copy.ts";
+export * from "./walk.ts";
+export * from "./eol.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvZnMvMS4wLjE3L21vZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuXG4vKipcbiAqIEhlbHBlcnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgZmlsZXN5c3RlbS5cbiAqXG4gKiBgYGB0cyBpZ25vcmVcbiAqIGltcG9ydCB7IGVuc3VyZUZpbGUsIGNvcHksIGVuc3VyZURpciwgbW92ZSB9IGZyb20gXCJAc3RkL2ZzXCI7XG4gKlxuICogYXdhaXQgZW5zdXJlRmlsZShcImV4YW1wbGUudHh0XCIpO1xuICpcbiAqIGF3YWl0IGNvcHkoXCJleGFtcGxlLnR4dFwiLCBcImV4YW1wbGVfY29weS50eHRcIik7XG4gKlxuICogYXdhaXQgZW5zdXJlRGlyKFwic3ViZGlyXCIpO1xuICpcbiAqIGF3YWl0IG1vdmUoXCJleGFtcGxlX2NvcHkudHh0XCIsIFwic3ViZGlyL2V4YW1wbGVfY29weS50eHRcIik7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vZW1wdHlfZGlyLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnN1cmVfZGlyLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnN1cmVfZmlsZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW5zdXJlX2xpbmsudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vuc3VyZV9zeW1saW5rLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGlzdHMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cGFuZF9nbG9iLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb3ZlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi93YWxrLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lb2wudHNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FFRCxjQUFjLGlCQUFpQjtBQUMvQixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLGNBQWM7QUFDNUIsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxZQUFZO0FBQzFCLGNBQWMsWUFBWTtBQUMxQixjQUFjLFlBQVk7QUFDMUIsY0FBYyxXQUFXIn0=
+// denoCacheMetadata=11286893659564779407,15999585513113141101 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f7d33f42ecc346a9fedce195a6dab77c20d73c0564bf1301e9a9d42b1ba08886.js b/vendor/gen/https/jsr.io/f7d33f42ecc346a9fedce195a6dab77c20d73c0564bf1301e9a9d42b1ba08886.js
new file mode 100644
index 0000000..ecb91c2
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f7d33f42ecc346a9fedce195a6dab77c20d73c0564bf1301e9a9d42b1ba08886.js
@@ -0,0 +1,46 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { CHAR_BACKWARD_SLASH, CHAR_COLON, CHAR_DOT, CHAR_QUESTION_MARK } from "../_common/constants.ts";
+import { isWindowsDeviceRoot } from "./_util.ts";
+import { resolve } from "./resolve.ts";
+/**
+ * Resolves path to a namespace path
+ *
+ * @example Usage
+ * ```ts
+ * import { toNamespacedPath } from "@std/path/windows/to-namespaced-path";
+ * import { assertEquals } from "@std/assert";
+ *
+ * const namespaced = toNamespacedPath("C:\\foo\\bar");
+ * assertEquals(namespaced, "\\\\?\\C:\\foo\\bar");
+ * ```
+ *
+ * @param path The path to resolve to namespaced path
+ * @returns The resolved namespaced path
+ */ export function toNamespacedPath(path) {
+ // Note: this will *probably* throw somewhere.
+ if (typeof path !== "string") return path;
+ if (path.length === 0) return "";
+ const resolvedPath = resolve(path);
+ if (resolvedPath.length >= 3) {
+ if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {
+ // Possible UNC root
+ if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {
+ const code = resolvedPath.charCodeAt(2);
+ if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {
+ // Matched non-long UNC root, convert the path to a long UNC path
+ return `\\\\?\\UNC\\${resolvedPath.slice(2)}`;
+ }
+ }
+ } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) {
+ // Possible device root
+ if (resolvedPath.charCodeAt(1) === CHAR_COLON && resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {
+ // Matched device root, convert the path to a long UNC path
+ return `\\\\?\\${resolvedPath}`;
+ }
+ }
+ }
+ return path;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS93aW5kb3dzL3RvX25hbWVzcGFjZWRfcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDI1IHRoZSBEZW5vIGF1dGhvcnMuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQge1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILFxuICBDSEFSX0NPTE9OLFxuICBDSEFSX0RPVCxcbiAgQ0hBUl9RVUVTVElPTl9NQVJLLFxufSBmcm9tIFwiLi4vX2NvbW1vbi9jb25zdGFudHMudHNcIjtcbmltcG9ydCB7IGlzV2luZG93c0RldmljZVJvb3QgfSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3Jlc29sdmUudHNcIjtcblxuLyoqXG4gKiBSZXNvbHZlcyBwYXRoIHRvIGEgbmFtZXNwYWNlIHBhdGhcbiAqXG4gKiBAZXhhbXBsZSBVc2FnZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvTmFtZXNwYWNlZFBhdGggfSBmcm9tIFwiQHN0ZC9wYXRoL3dpbmRvd3MvdG8tbmFtZXNwYWNlZC1wYXRoXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBjb25zdCBuYW1lc3BhY2VkID0gdG9OYW1lc3BhY2VkUGF0aChcIkM6XFxcXGZvb1xcXFxiYXJcIik7XG4gKiBhc3NlcnRFcXVhbHMobmFtZXNwYWNlZCwgXCJcXFxcXFxcXD9cXFxcQzpcXFxcZm9vXFxcXGJhclwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHJlc29sdmUgdG8gbmFtZXNwYWNlZCBwYXRoXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgbmFtZXNwYWNlZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vdGU6IHRoaXMgd2lsbCAqcHJvYmFibHkqIHRocm93IHNvbWV3aGVyZS5cbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSByZXR1cm4gcGF0aDtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcblxuICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgpO1xuXG4gIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID49IDMpIHtcbiAgICBpZiAocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICBjb25zdCBjb2RlID0gcmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMik7XG4gICAgICAgIGlmIChjb2RlICE9PSBDSEFSX1FVRVNUSU9OX01BUksgJiYgY29kZSAhPT0gQ0hBUl9ET1QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIG5vbi1sb25nIFVOQyByb290LCBjb252ZXJ0IHRoZSBwYXRoIHRvIGEgbG9uZyBVTkMgcGF0aFxuICAgICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXFVOQ1xcXFwke3Jlc29sdmVkUGF0aC5zbGljZSgyKX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgaWYgKFxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTiAmJlxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSFxuICAgICAgKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZGV2aWNlIHJvb3QsIGNvbnZlcnQgdGhlIHBhdGggdG8gYSBsb25nIFVOQyBwYXRoXG4gICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXCR7cmVzb2x2ZWRQYXRofWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUNFLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsUUFBUSxFQUNSLGtCQUFrQixRQUNiLDBCQUEwQjtBQUNqQyxTQUFTLG1CQUFtQixRQUFRLGFBQWE7QUFDakQsU0FBUyxPQUFPLFFBQVEsZUFBZTtBQUV2Qzs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUNELE9BQU8sU0FBUyxpQkFBaUIsSUFBWTtFQUMzQyw4Q0FBOEM7RUFDOUMsSUFBSSxPQUFPLFNBQVMsVUFBVSxPQUFPO0VBQ3JDLElBQUksS0FBSyxNQUFNLEtBQUssR0FBRyxPQUFPO0VBRTlCLE1BQU0sZUFBZSxRQUFRO0VBRTdCLElBQUksYUFBYSxNQUFNLElBQUksR0FBRztJQUM1QixJQUFJLGFBQWEsVUFBVSxDQUFDLE9BQU8scUJBQXFCO01BQ3RELG9CQUFvQjtNQUVwQixJQUFJLGFBQWEsVUFBVSxDQUFDLE9BQU8scUJBQXFCO1FBQ3RELE1BQU0sT0FBTyxhQUFhLFVBQVUsQ0FBQztRQUNyQyxJQUFJLFNBQVMsc0JBQXNCLFNBQVMsVUFBVTtVQUNwRCxpRUFBaUU7VUFDakUsT0FBTyxDQUFDLFlBQVksRUFBRSxhQUFhLEtBQUssQ0FBQyxJQUFJO1FBQy9DO01BQ0Y7SUFDRixPQUFPLElBQUksb0JBQW9CLGFBQWEsVUFBVSxDQUFDLEtBQUs7TUFDMUQsdUJBQXVCO01BRXZCLElBQ0UsYUFBYSxVQUFVLENBQUMsT0FBTyxjQUMvQixhQUFhLFVBQVUsQ0FBQyxPQUFPLHFCQUMvQjtRQUNBLDJEQUEyRDtRQUMzRCxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWM7TUFDakM7SUFDRjtFQUNGO0VBRUEsT0FBTztBQUNUIn0=
+// denoCacheMetadata=1197940707593787577,6846599382337885666 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/f83f6f8c3f16e0135da6fe3e3305af6c26c79dd0bca7a6cc79948dbe2763aea0.js b/vendor/gen/https/jsr.io/f83f6f8c3f16e0135da6fe3e3305af6c26c79dd0bca7a6cc79948dbe2763aea0.js
new file mode 100644
index 0000000..dc5ac4d
--- /dev/null
+++ b/vendor/gen/https/jsr.io/f83f6f8c3f16e0135da6fe3e3305af6c26c79dd0bca7a6cc79948dbe2763aea0.js
@@ -0,0 +1,20 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+export function stripTrailingSeparators(segment, isSep) {
+ if (segment.length <= 1) {
+ return segment;
+ }
+ let end = segment.length;
+ for(let i = segment.length - 1; i > 0; i--){
+ if (isSep(segment.charCodeAt(i))) {
+ end = i;
+ } else {
+ break;
+ }
+ }
+ return segment.slice(0, end);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOC9fY29tbW9uL3N0cmlwX3RyYWlsaW5nX3NlcGFyYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyNCB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdTZXBhcmF0b3JzKFxuICBzZWdtZW50OiBzdHJpbmcsXG4gIGlzU2VwOiAoY2hhcjogbnVtYmVyKSA9PiBib29sZWFuLFxuKTogc3RyaW5nIHtcbiAgaWYgKHNlZ21lbnQubGVuZ3RoIDw9IDEpIHtcbiAgICByZXR1cm4gc2VnbWVudDtcbiAgfVxuXG4gIGxldCBlbmQgPSBzZWdtZW50Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gc2VnbWVudC5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgaWYgKGlzU2VwKHNlZ21lbnQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIGVuZCA9IGk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50LnNsaWNlKDAsIGVuZCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLGlEQUFpRDtBQUNqRCw2REFBNkQ7QUFDN0QscUNBQXFDO0FBRXJDLE9BQU8sU0FBUyx3QkFDZCxPQUFlLEVBQ2YsS0FBZ0M7RUFFaEMsSUFBSSxRQUFRLE1BQU0sSUFBSSxHQUFHO0lBQ3ZCLE9BQU87RUFDVDtFQUVBLElBQUksTUFBTSxRQUFRLE1BQU07RUFFeEIsSUFBSyxJQUFJLElBQUksUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSztJQUMzQyxJQUFJLE1BQU0sUUFBUSxVQUFVLENBQUMsS0FBSztNQUNoQyxNQUFNO0lBQ1IsT0FBTztNQUNMO0lBQ0Y7RUFDRjtFQUVBLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRztBQUMxQiJ9
+// denoCacheMetadata=15806268550293638226,7169950271105768740 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/fa4892503785bbda11cc1755619e0e2e9ea16cf5760fc303748ae0e5a902d54c.js b/vendor/gen/https/jsr.io/fa4892503785bbda11cc1755619e0e2e9ea16cf5760fc303748ae0e5a902d54c.js
new file mode 100644
index 0000000..4bb2489
--- /dev/null
+++ b/vendor/gen/https/jsr.io/fa4892503785bbda11cc1755619e0e2e9ea16cf5760fc303748ae0e5a902d54c.js
@@ -0,0 +1,5 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+export { isGlob } from "../is_glob.ts";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9wb3NpeC9pc19nbG9iLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmV4cG9ydCB7IGlzR2xvYiB9IGZyb20gXCIuLi9pc19nbG9iLnRzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELHFDQUFxQztBQUVyQyxTQUFTLE1BQU0sUUFBUSxnQkFBZ0IifQ==
+// denoCacheMetadata=7048746874407330389,1396376006214370866 \ No newline at end of file
diff --git a/vendor/gen/https/jsr.io/fa9593097cdd3e75d061bd2ebf9cab31f1dfad09188062a8db1e1f8413a415c4.js b/vendor/gen/https/jsr.io/fa9593097cdd3e75d061bd2ebf9cab31f1dfad09188062a8db1e1f8413a415c4.js
new file mode 100644
index 0000000..690eebd
--- /dev/null
+++ b/vendor/gen/https/jsr.io/fa9593097cdd3e75d061bd2ebf9cab31f1dfad09188062a8db1e1f8413a415c4.js
@@ -0,0 +1,30 @@
+// Copyright 2018-2025 the Deno authors. MIT license.
+// This module is browser compatible.
+import { isWindows } from "./_os.ts";
+import { dirname as posixDirname } from "./posix/dirname.ts";
+import { dirname as windowsDirname } from "./windows/dirname.ts";
+/**
+ * Return the directory path of a path.
+ *
+ * @example Usage
+ * ```ts
+ * import { dirname } from "@std/path/dirname";
+ * import { assertEquals } from "@std/assert";
+ *
+ * if (Deno.build.os === "windows") {
+ * assertEquals(dirname("C:\\home\\user\\Documents\\image.png"), "C:\\home\\user\\Documents");
+ * } else {
+ * assertEquals(dirname("/home/user/Documents/image.png"), "/home/user/Documents");
+ * }
+ * ```
+ *
+ * Note: If you are working with file URLs,
+ * use the new version of `dirname` from `@std/path/unstable-dirname`.
+ *
+ * @param path Path to extract the directory from.
+ * @returns The directory path.
+ */ export function dirname(path) {
+ return isWindows ? windowsDirname(path) : posixDirname(path);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vanNyLmlvL0BzdGQvcGF0aC8xLjAuOS9kaXJuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjUgdGhlIERlbm8gYXV0aG9ycy4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuL19vcy50c1wiO1xuaW1wb3J0IHsgZGlybmFtZSBhcyBwb3NpeERpcm5hbWUgfSBmcm9tIFwiLi9wb3NpeC9kaXJuYW1lLnRzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIGFzIHdpbmRvd3NEaXJuYW1lIH0gZnJvbSBcIi4vd2luZG93cy9kaXJuYW1lLnRzXCI7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaXJlY3RvcnkgcGF0aCBvZiBhIHBhdGguXG4gKlxuICogQGV4YW1wbGUgVXNhZ2VcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIkBzdGQvcGF0aC9kaXJuYW1lXCI7XG4gKiBpbXBvcnQgeyBhc3NlcnRFcXVhbHMgfSBmcm9tIFwiQHN0ZC9hc3NlcnRcIjtcbiAqXG4gKiBpZiAoRGVuby5idWlsZC5vcyA9PT0gXCJ3aW5kb3dzXCIpIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCJDOlxcXFxob21lXFxcXHVzZXJcXFxcRG9jdW1lbnRzXFxcXGltYWdlLnBuZ1wiKSwgXCJDOlxcXFxob21lXFxcXHVzZXJcXFxcRG9jdW1lbnRzXCIpO1xuICogfSBlbHNlIHtcbiAqICAgYXNzZXJ0RXF1YWxzKGRpcm5hbWUoXCIvaG9tZS91c2VyL0RvY3VtZW50cy9pbWFnZS5wbmdcIiksIFwiL2hvbWUvdXNlci9Eb2N1bWVudHNcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBmaWxlIFVSTHMsXG4gKiB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mIGBkaXJuYW1lYCBmcm9tIGBAc3RkL3BhdGgvdW5zdGFibGUtZGlybmFtZWAuXG4gKlxuICogQHBhcmFtIHBhdGggUGF0aCB0byBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBkaXJlY3RvcnkgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzV2luZG93cyA/IHdpbmRvd3NEaXJuYW1lKHBhdGgpIDogcG9zaXhEaXJuYW1lKHBhdGgpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxxQ0FBcUM7QUFFckMsU0FBUyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTLFdBQVcsWUFBWSxRQUFRLHFCQUFxQjtBQUM3RCxTQUFTLFdBQVcsY0FBYyxRQUFRLHVCQUF1QjtBQUVqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkMsR0FDRCxPQUFPLFNBQVMsUUFBUSxJQUFZO0VBQ2xDLE9BQU8sWUFBWSxlQUFlLFFBQVEsYUFBYTtBQUN6RCJ9
+// denoCacheMetadata=9547681826702007949,3182393844126318689 \ No newline at end of file