diff --git a/Pipfile b/Pipfile index 83e017c3..55751088 100644 --- a/Pipfile +++ b/Pipfile @@ -13,6 +13,7 @@ jsonlines = "*" lxml = "*" lxml-stubs = "*" python-dateutil = "*" +requests = "*" sentry-sdk = "*" smart-open = {version = "*", extras = ["s3"]} types-python-dateutil = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 9c676e04..d9b7a390 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0b3c74e7df8698e17816079d87a906378aff0fb10cd9eed23b4535097efb1f3b" + "sha256": "52f6b3530f93436d8b938707962da4c99fe90f34aaee5946d07b7c9770d04da1" }, "pipfile-spec": 6, "requires": { @@ -36,37 +36,37 @@ }, "boto3": { "hashes": [ - "sha256:d8b6c52c86f3bf04f71a5a53e7fb4d1527592afebffa5170cf3ef7d70966e610", - "sha256:e1e38fd178ffc66cfbe9cb6838b8c460000c3eb741e5f40f57eb730780ef0ed4" + "sha256:cb4bc94c0ba522242e291d16b4f631e139f525fbc9772229f3e84f5d834fd88e", + "sha256:e7b8fcc123da442449da8a2be65b3e60a3d8cfb2b26a52f7b3c6f9f8e84cbdf0" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.42.37" + "version": "==1.42.55" }, "boto3-stubs": { "hashes": [ - "sha256:07b9ac27196b233b802f8fadff2fa9c01d656927943c618dc862ff00fd592b24", - "sha256:1620519a55bbb26cebed95b6d8f26ba96b8ea91dadd05eafc3b8f17a587e2108" + "sha256:181f4d3a11466031cab5ef6f5d9e2ea217376f50904c9895ea470fa264802c94", + "sha256:b3e02a70d302f7fa08e4c53ce2c925aea13832f16b4b41a553ea6cde96006a13" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.42.37" + "version": "==1.42.55" }, "botocore": { "hashes": [ - "sha256:3ec58eb98b0857f67a2ae6aa3ded51597e7335f7640be654e0e86da4f173b5b2", - "sha256:f13bb8b560a10714d96fb7b0c7f17828dfa6e6606a1ead8c01c6ebb8765acbd8" + "sha256:af22a7d7881883bcb475a627d0750ec6f8ee3d7b2f673e9ff342ebaa498447ee", + "sha256:c092eb99d17b653af3ec9242061a7cde1c7b1940ed4abddfada68a9e1a3492d6" ], "markers": "python_version >= '3.9'", - "version": "==1.42.37" + "version": "==1.42.55" }, "botocore-stubs": { "hashes": [ - "sha256:5a9b2a4062f7cc19e0648508f67d3f1a1fd8d3e0d6f5a0d3244cc9656e54cc67", - "sha256:7357d1876ae198757dbe0a73f887449ffdda18eb075d7d3cc2e22d3580dcb17c" + "sha256:9423110fb0e391834bd2ed44ae5f879d8cb370a444703d966d30842ce2bcb5f0", + "sha256:dbeac2f744df6b814ce83ec3f3777b299a015cbea57a2efc41c33b8c38265825" ], "markers": "python_version >= '3.9'", - "version": "==1.42.37" + "version": "==1.42.41" }, "certifi": { "hashes": [ @@ -76,6 +76,125 @@ "markers": "python_version >= '3.7'", "version": "==2026.1.4" }, + "charset-normalizer": { + "hashes": [ + "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", + "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", + "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", + "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", + "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", + "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", + "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63", + "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", + "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", + "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", + "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", + "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", + "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", + "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af", + "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", + "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", + "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", + "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", + "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", + "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", + "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576", + "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", + "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", + "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", + "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", + "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", + "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", + "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", + "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", + "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", + "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", + "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", + "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a", + "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", + "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", + "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", + "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", + "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", + "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7", + "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", + "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", + "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", + "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", + "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", + "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", + "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2", + "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", + "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", + "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", + "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", + "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", + "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", + "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", + "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", + "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa", + "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", + "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", + "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", + "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", + "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", + "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", + "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", + "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", + "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", + "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", + "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", + "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", + "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", + "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", + "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", + "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3", + "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", + "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", + "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", + "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", + "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", + "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", + "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf", + "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", + "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", + "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac", + "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", + "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", + "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", + "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", + "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", + "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", + "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4", + "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84", + "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", + "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", + "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", + "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", + "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", + "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", + "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", + "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", + "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", + "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074", + "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3", + "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", + "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", + "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", + "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d", + "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", + "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", + "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", + "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", + "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", + "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", + "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", + "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", + "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.4" + }, "click": { "hashes": [ "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", @@ -140,6 +259,14 @@ "markers": "python_version >= '3.9' and python_version < '4'", "version": "==0.17.0" }, + "idna": { + "hashes": [ + "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", + "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902" + ], + "markers": "python_version >= '3.8'", + "version": "==3.11" + }, "jmespath": { "hashes": [ "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", @@ -314,81 +441,81 @@ }, "numpy": { "hashes": [ - "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c", - "sha256:09aa8a87e45b55a1c2c205d42e2808849ece5c484b2aab11fecabec3841cafba", - "sha256:0cce2a669e3c8ba02ee563c7835f92c153cf02edff1ae05e1823f1dde21b16a5", - "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8", - "sha256:0f118ce6b972080ba0758c6087c3617b5ba243d806268623dc34216d69099ba0", - "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d", - "sha256:18e14c4d09d55eef39a6ab5b08406e84bc6869c1e34eef45564804f90b7e0574", - "sha256:2023ef86243690c2791fd6353e5b4848eedaa88ca8a2d129f462049f6d484696", - "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5", - "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505", - "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0", - "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162", - "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844", - "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205", - "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4", - "sha256:3869ea1ee1a1edc16c29bbe3a2f2a4e515cc3a44d43903ad41e0cacdbaf733dc", - "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d", - "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93", - "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01", - "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c", - "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f", - "sha256:4f1b68ff47680c2925f8063402a693ede215f0257f02596b1318ecdfb1d79e33", - "sha256:4f9c360ecef085e5841c539a9a12b883dff005fbd7ce46722f5e9cef52634d82", - "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2", - "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42", - "sha256:538bf4ec353709c765ff75ae616c34d3c3dca1a68312727e8f2676ea644f8509", - "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a", - "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e", - "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556", - "sha256:5de60946f14ebe15e713a6f22850c2372fa72f4ff9a432ab44aa90edcadaa65a", - "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510", - "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295", - "sha256:6461de5113088b399d655d45c3897fa188766415d0f568f175ab071c8873bd73", - "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3", - "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9", - "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8", - "sha256:727c6c3275ddefa0dc078524a85e064c057b4f4e71ca5ca29a19163c607be745", - "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2", - "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02", - "sha256:7d5d7999df434a038d75a748275cd6c0094b0ecdb0837342b332a82defc4dc4d", - "sha256:8097529164c0f3e32bb89412a0905d9100bf434d9692d9fc275e18dcf53c9344", - "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f", - "sha256:8361ea4220d763e54cff2fbe7d8c93526b744f7cd9ddab47afeff7e14e8503be", - "sha256:899d2c18024984814ac7e83f8f49d8e8180e2fbe1b2e252f2e7f1d06bea92425", - "sha256:8ad35f20be147a204e28b6a0575fbf3540c5e5f802634d4258d55b1ff5facce1", - "sha256:8f085da926c0d491ffff3096f91078cc97ea67e7e6b65e490bc8dcda65663be2", - "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2", - "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb", - "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9", - "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15", - "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690", - "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0", - "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261", - "sha256:a92f227dbcdc9e4c3e193add1a189a9909947d4f8504c576f4a732fd0b54240a", - "sha256:ac08c63cb7779b85e9d5318e6c3518b424bc1f364ac4cb2c6136f12e5ff2dccc", - "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f", - "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5", - "sha256:ce9ce141a505053b3c7bce3216071f3bf5c182b8b28930f14cd24d43932cd2df", - "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9", - "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2", - "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8", - "sha256:d3f8f0df9f4b8be57b3bf74a1d087fec68f927a2fab68231fdb442bf2c12e426", - "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b", - "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87", - "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220", - "sha256:e7b6b5e28bbd47b7532698e5db2fe1db693d84b58c254e4389d99a27bb9b8f6b", - "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3", - "sha256:ea66d2b41ca4a1630aae5507ee0a71647d3124d1741980138aa8f28f44dac36e", - "sha256:edee228f76ee2dab4579fad6f51f6a305de09d444280109e0f75df247ff21501", - "sha256:f0a90aba7d521e6954670550e561a4cb925713bd944445dbe9e729b71f6cabee", - "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7", - "sha256:fb1461c99de4d040666ca0444057b06541e5642f800b71c56e6ea92d6a853a0c" + "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", + "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", + "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", + "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", + "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", + "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413", + "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", + "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", + "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", + "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", + "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", + "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390", + "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", + "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", + "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", + "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", + "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3", + "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1", + "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", + "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", + "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", + "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", + "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0", + "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", + "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", + "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", + "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7", + "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", + "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", + "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", + "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1", + "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", + "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", + "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", + "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082", + "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", + "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", + "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", + "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", + "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", + "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", + "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", + "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", + "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", + "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", + "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", + "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695", + "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", + "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", + "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0", + "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32", + "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", + "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", + "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73", + "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920", + "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", + "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821", + "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", + "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", + "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", + "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", + "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", + "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda", + "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb", + "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a", + "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825", + "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", + "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", + "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", + "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", + "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", + "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1" ], "markers": "python_version >= '3.11'", - "version": "==2.4.1" + "version": "==2.4.2" }, "packaging": { "hashes": [ @@ -461,59 +588,59 @@ }, "pyarrow": { "hashes": [ - "sha256:068701f6823449b1b6469120f399a1239766b117d211c5d2519d4ed5861f75de", - "sha256:075c29aeaa685fd1182992a9ed2499c66f084ee54eea47da3eb76e125e06064c", - "sha256:0800cc58a6d17d159df823f87ad66cefebf105b982493d4bad03ee7fab84b993", - "sha256:14de7d48052cf4b0ed174533eafa3cfe0711b8076ad70bede32cf59f744f0d7c", - "sha256:15a414f710dc927132dd67c361f78c194447479555af57317066ee5116b90e9e", - "sha256:1675c374570d8b91ea6d4edd4608fa55951acd44e0c31bd146e091b4005de24f", - "sha256:1801ba947015d10e23bca9dd6ef5d0e9064a81569a89b6e9a63b59224fd060df", - "sha256:180e3150e7edfcd182d3d9afba72f7cf19839a497cc76555a8dce998a8f67615", - "sha256:18ec84e839b493c3886b9b5e06861962ab4adfaeb79b81c76afbd8d84c7d5fda", - "sha256:1a9ff6fa4141c24a03a1a434c63c8fa97ce70f8f36bccabc18ebba905ddf0f17", - "sha256:20b187ed9550d233a872074159f765f52f9d92973191cd4b93f293a19efbe377", - "sha256:247374428fde4f668f138b04031a7e7077ba5fa0b5b1722fdf89a017bf0b7ee0", - "sha256:2ef0075c2488932e9d3c2eb3482f9459c4be629aa673b725d5e3cf18f777f8e4", - "sha256:36d1b5bc6ddcaff0083ceec7e2561ed61a51f49cce8be079ee8ed406acb6fdef", - "sha256:3a7c68c722da9bb5b0f8c10e3eae71d9825a4b429b40b32709df5d1fa55beb3d", - "sha256:3e0d2e6915eca7d786be6a77bf227fbc06d825a75b5b5fe9bcbef121dec32685", - "sha256:4222ff8f76919ecf6c716175a0e5fddb5599faeed4c56d9ea41a2c42be4998b2", - "sha256:427deac1f535830a744a4f04a6ac183a64fcac4341b3f618e693c41b7b98d2b0", - "sha256:4292b889cd224f403304ddda8b63a36e60f92911f89927ec8d98021845ea21be", - "sha256:4b317ea6e800b5704e5e5929acb6e2dc13e9276b708ea97a39eb8b345aa2658b", - "sha256:4d38c836930ce15cd31dce20114b21ba082da231c884bdc0a7b53e1477fe7f07", - "sha256:4d85cb6177198f3812db4788e394b757223f60d9a9f5ad6634b3e32be1525803", - "sha256:52265266201ec25b6839bf6bd4ea918ca6d50f31d13e1cf200b4261cd11dc25c", - "sha256:54810f6e6afc4ffee7c2e0051b61722fbea9a4961b46192dcfae8ea12fa09059", - "sha256:5574d541923efcbfdf1294a2746ae3b8c2498a2dc6cd477882f6f4e7b1ac08d3", - "sha256:5961a9f646c232697c24f54d3419e69b4261ba8a8b66b0ac54a1851faffcbab8", - "sha256:5b86bb649e4112fb0614294b7d0a175c7513738876b89655605ebb87c804f861", - "sha256:632b3e7c3d232f41d64e1a4a043fb82d44f8a349f339a1188c6a0dd9d2d47d8a", - "sha256:65666fc269669af1ef1c14478c52222a2aa5c907f28b68fb50a203c777e4f60c", - "sha256:76242c846db1411f1d6c2cc3823be6b86b40567ee24493344f8226ba34a81333", - "sha256:799965a5379589510d888be3094c2296efd186a17ca1cef5b77703d4d5121f53", - "sha256:7a7d067c9a88faca655c71bcc30ee2782038d59c802d57950826a07f60d83c4c", - "sha256:832141cc09fac6aab1cd3719951d23301396968de87080c57c9a7634e0ecd068", - "sha256:84839d060a54ae734eb60a756aeacb62885244aaa282f3c968f5972ecc7b1ecc", - "sha256:87f06159cbe38125852657716889296c83c37b4d09a5e58f3d10245fd1f69795", - "sha256:a149a647dbfe928ce8830a713612aa0b16e22c64feac9d1761529778e4d4eaa5", - "sha256:a244279f240c81f135631be91146d7fa0e9e840e1dfed2aba8483eba25cd98e6", - "sha256:ad96a597547af7827342ffb3c503c8316e5043bb09b47a84885ce39394c96e00", - "sha256:ae7f30f898dfe44ea69654a35c93e8da4cef6606dc4c72394068fd95f8e9f54a", - "sha256:b73519f8b52ae28127000986bf228fda781e81d3095cd2d3ece76eb5cf760e1b", - "sha256:b9edf990df77c2901e79608f08c13fbde60202334a4fcadb15c1f57bf7afee43", - "sha256:bd5556c24622df90551063ea41f559b714aa63ca953db884cfb958559087a14e", - "sha256:c4692e83e42438dba512a570c6eaa42be2f8b6c0f492aea27dec54bdc495103a", - "sha256:cbdc2bf5947aa4d462adcf8453cf04aee2f7932653cb67a27acd96e5e8528a67", - "sha256:ce9486e0535a843cf85d990e2ec5820a47918235183a5c7b8b97ed7e92c2d47d", - "sha256:de53b1bd3b88a2ee93c9af412c903e57e738c083be4f6392288294513cd8b2c1", - "sha256:dfd9e133e60eaa847fd80530a1b89a052f09f695d0b9c34c235ea6b2e0924cf7", - "sha256:e438dd3f33894e34fd02b26bd12a32d30d006f5852315f611aa4add6c7fab4bc", - "sha256:ebc017d765d71d80a3f8584ca0566b53e40464586585ac64176115baa0ada7d3", - "sha256:ef7cac8fe6fccd8b9e7617bfac785b0371a7fe26af59463074e4882747145d40" + "sha256:00be9576d970c31defb5c32eb72ef585bf600ef6d0a82d5eccaae96639cf9d07", + "sha256:07deae7783782ac7250989a7b2ecde9b3c343a643f82e8a4df03d93b633006f0", + "sha256:0ae6e17c828455b6265d590100c295193f93cc5675eb0af59e49dbd00d2de350", + "sha256:0b95a3994f015be13c63148fef8832e8a23938128c185ee951c98908a696e0eb", + "sha256:17cd28e906c18af486a499422740298c52d7c6795344ea5002a7720b4eadf16d", + "sha256:26d50dee49d741ac0e82185033488d28d35be4d763ae6f321f97d1140eb7a0e9", + "sha256:29f7f7419a0e30264ea261fdc0e5fe63ce5a6095003db2945d7cd78df391a7e1", + "sha256:33d648dc25b51fd8055c19e4261e813dfc4d2427f068bcecc8b53d01b81b0500", + "sha256:3a4c85ef66c134161987c17b147d6bffdca4566f9a4c1d81a0a01cdf08414ea5", + "sha256:3c30143b17161310f151f4a2bcfe41b5ff744238c1039338779424e38579d701", + "sha256:3f91c038b95f71ddfc865f11d5876c42f343b4495535bd262c7b321b0b94507c", + "sha256:3fab8f82571844eb3c460f90a75583801d14ca0cc32b1acc8c361650e006fd56", + "sha256:46718a220d64677c93bc243af1d44b55998255427588e400677d7192671845c7", + "sha256:4982d71350b1a6e5cfe1af742c53dfb759b11ce14141870d05d9e540d13bc5d1", + "sha256:527e8d899f14bd15b740cd5a54ad56b7f98044955373a17179d5956ddb93d9ce", + "sha256:564baf97c858ecc03ec01a41062e8f4698abc3e6e2acd79c01c2e97880a19730", + "sha256:5abde149bb3ce524782d838eb67ac095cd3fd6090eba051130589793f1a7f76d", + "sha256:5c16ed4f53247fa3ffb12a14d236de4213a4415d127fe9cebed33d51671113e2", + "sha256:5df1161da23636a70838099d4aaa65142777185cc0cdba4037a18cee7d8db9ca", + "sha256:5f4763b83c11c16e5f4c15601ba6dfa849e20723b46aa2617cb4bffe8768479f", + "sha256:6b8fda694640b00e8af3c824f99f789e836720aa8c9379fb435d4c4953a756b8", + "sha256:6f0147ee9e0386f519c952cc670eb4a8b05caa594eeffe01af0e25f699e4e9bb", + "sha256:7044b442f184d84e2351e5084600f0d7343d6117aabcbc1ac78eb1ae11eb4125", + "sha256:71c5be5cbf1e1cb6169d2a0980850bccb558ddc9b747b6206435313c47c37677", + "sha256:76e823d0e86b4fb5e1cf4a58d293036e678b5a4b03539be933d3b31f9406859f", + "sha256:7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7", + "sha256:813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05", + "sha256:86ff03fb9f1a320266e0de855dee4b17da6794c595d207f89bba40d16b5c78b9", + "sha256:8ff51b1addc469b9444b7c6f3548e19dc931b172ab234e995a60aea9f6e6025f", + "sha256:9b6f4f17b43bc39d56fec96e53fe89d94bac3eb134137964371b45352d40d0c2", + "sha256:9fc13fc6c403d1337acab46a2c4346ca6c9dec5780c3c697cf8abfd5e19b6b37", + "sha256:a09f3876e87f48bc2f13583ab551f0379e5dfb83210391e68ace404181a20690", + "sha256:a35581e856a2fafa12f3f54fce4331862b1cfb0bef5758347a858a4aa9d6bae8", + "sha256:a62e1899e3078bf65943078b3ad2a6ddcacf2373bc06379aac61b1e548a75814", + "sha256:b8c5873e33440b2bc2f4a79d2b47017a89c5a24116c055625e6f2ee50523f019", + "sha256:bf5842f960cddd2ef757d486041d57c96483efc295a8c4a0e20e704cbbf39c67", + "sha256:c2139549494445609f35a5cda4eb94e2c9e4d704ce60a095b342f82460c73a83", + "sha256:c250248f1fe266db627921c89b47b7c06fee0489ad95b04d50353537d74d6886", + "sha256:c33b5bf406284fd0bba436ed6f6c3ebe8e311722b441d89397c54f871c6863a2", + "sha256:cd395abf8f91c673dd3589cadc8cc1ee4e8674fa61b2e923c8dd215d9c7d1f41", + "sha256:cecfb12ef629cf6be0b1887f9f86463b0dd3dc3195ae6224e74006be4736035a", + "sha256:d0744403adabef53c985a7f8a082b502a368510c40d184df349a0a8754533258", + "sha256:db2190fa79c80a23fdd29fef4b8992893f024ae7c17d2f5f4db7171fa30c2c78", + "sha256:ddf743e82f69dcd6dbbcb63628895d7161e04e56794ef80550ac6f3315eeb1d5", + "sha256:df088e8f640c9fae3b1f495b3c64755c4e719091caf250f3a74d095ddf3c836d", + "sha256:e052a211c5ac9848ae15d5ec875ed0943c0221e2fcfe69eee80b604b4e703222", + "sha256:f00f993a8179e0e1c9713bcc0baf6d6c01326a406a9c23495ec1ba9c9ebf2919", + "sha256:f4b0dbfa124c0bb161f8b5ebb40f1a680b70279aa0c9901d44a2b5a20806039f", + "sha256:fa8e51cb04b9f8c9c5ace6bab63af9a1f88d35c0d6cbf53e8c17c098552285e1", + "sha256:fed7020203e9ef273360b9e45be52a2a47d3103caf156a30ace5247ffb51bdbd" ], "markers": "python_version >= '3.10'", - "version": "==23.0.0" + "version": "==23.0.1" }, "python-dateutil": { "hashes": [ @@ -531,6 +658,15 @@ ], "version": "==2025.2" }, + "requests": { + "hashes": [ + "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", + "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.32.5" + }, "s3transfer": { "hashes": [ "sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe", @@ -541,12 +677,12 @@ }, "sentry-sdk": { "hashes": [ - "sha256:b89d64577075fd8c13088bc3609a2ce77a154e5beb8cba7cc16560b0539df4f7", - "sha256:e21016d318a097c2b617bb980afd9fc737e1efc55f9b4f0cdc819982c9717d5f" + "sha256:46e1ed8d84355ae54406c924f6b290c3d61f4048625989a723fd622aab838899", + "sha256:6520ef2c4acd823f28efc55e43eb6ce2e6d9f954a95a3aa96b6fd14871e92b77" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==2.51.0" + "version": "==2.53.0" }, "six": { "hashes": [ @@ -561,11 +697,11 @@ "s3" ], "hashes": [ - "sha256:87e695c5148bbb988f15cec00971602765874163be85acb1c9fb8abc012e6599", - "sha256:f394b143851d8091011832ac8113ea4aba6b92e6c35f6e677ddaaccb169d7cb9" + "sha256:3e07cbbd9c8a908bcb8e25d48becf1a5cbb4886fa975e9f34c672ed171df2318", + "sha256:3f08e16827c4733699e6b2cc40328a3568f900cb12ad9a3ad233ba6c872d9fe7" ], - "markers": "python_version >= '3.9' and python_version < '4.0'", - "version": "==7.5.0" + "markers": "python_version >= '3.10' and python_version < '4.0'", + "version": "==7.5.1" }, "soupsieve": { "hashes": [ @@ -644,11 +780,11 @@ }, "types-awscrt": { "hashes": [ - "sha256:08b13494f93f45c1a92eb264755fce50ed0d1dc75059abb5e31670feb9a09724", - "sha256:7e4364ac635f72bd57f52b093883640b1448a6eded0ecbac6e900bf4b1e4777b" + "sha256:3d6a29c1cca894b191be408f4d985a8e3a14d919785652dd3fa4ee558143e4bf", + "sha256:dc79705acd24094656b8105b8d799d7e273c8eac37c69137df580cd84beb54f6" ], "markers": "python_version >= '3.8'", - "version": "==0.31.1" + "version": "==0.31.2" }, "types-python-dateutil": { "hashes": [ @@ -693,119 +829,94 @@ }, "wrapt": { "hashes": [ - "sha256:09c7476ab884b74dce081ad9bfd07fe5822d8600abade571cb1f66d5fc915af6", - "sha256:0e17283f533a0d24d6e5429a7d11f250a58d28b4ae5186f8f47853e3e70d2590", - "sha256:115cae4beed3542e37866469a8a1f2b9ec549b4463572b000611e9946b86e6f6", - "sha256:1218573502a8235bb8a7ecaed12736213b22dcde9feab115fa2989d42b5ded45", - "sha256:17fb85fa4abc26a5184d93b3efd2dcc14deb4b09edcdb3535a536ad34f0b4dba", - "sha256:1e9b121e9aeb15df416c2c960b8255a49d44b4038016ee17af03975992d03931", - "sha256:1f186e26ea0a55f809f232e92cc8556a0977e00183c3ebda039a807a42be1494", - "sha256:1fdbb34da15450f2b1d735a0e969c24bdb8d8924892380126e2a293d9902078c", - "sha256:23097ed8bc4c93b7bf36fa2113c6c733c976316ce0ee2c816f64ca06102034ef", - "sha256:2879af909312d0baf35f08edeea918ee3af7ab57c37fe47cb6a373c9f2749c7b", - "sha256:2afa23318136709c4b23d87d543b425c399887b4057936cd20386d5b1422b6fa", - "sha256:2da620b31a90cdefa9cd0c2b661882329e2e19d1d7b9b920189956b76c564d75", - "sha256:35cdbd478607036fee40273be8ed54a451f5f23121bd9d4be515158f9498f7ad", - "sha256:36982b26f190f4d737f04a492a68accbfc6fa042c3f42326fdfbb6c5b7a20a31", - "sha256:3793ac154afb0e5b45d1233cb94d354ef7a983708cc3bb12563853b1d8d53747", - "sha256:386fb54d9cd903ee0012c09291336469eb7b244f7183d40dc3e86a16a4bace62", - "sha256:3cd1a4bd9a7a619922a8557e1318232e7269b5fb69d4ba97b04d20450a6bf970", - "sha256:3d32794fe940b7000f0519904e247f902f0149edbe6316c710a8562fb6738841", - "sha256:3d366aa598d69416b5afedf1faa539fac40c1d80a42f6b236c88c73a3c8f2d41", - "sha256:3e271346f01e9c8b1130a6a3b0e11908049fe5be2d365a5f402778049147e7e9", - "sha256:3f373a4ab5dbc528a94334f9fe444395b23c2f5332adab9ff4ea82f5a9e33bc1", - "sha256:3fa272ca34332581e00bf7773e993d4f632594eb2d1b0b162a9038df0fd971dd", - "sha256:47434236c396d04875180171ee1f3815ca1eada05e24a1ee99546320d54d1d1b", - "sha256:47b0f8bafe90f7736151f61482c583c86b0693d80f075a58701dd1549b0010a9", - "sha256:4811e15d88ee62dbf5c77f2c3ff3932b1e3ac92323ba3912f51fc4016ce81ecf", - "sha256:49989061a9977a8cbd6d20f2efa813f24bf657c6990a42967019ce779a878dbf", - "sha256:4ae879acc449caa9ed43fc36ba08392b9412ee67941748d31d94e3cedb36628c", - "sha256:4b55cacc57e1dc2d0991dbe74c6419ffd415fb66474a02335cb10efd1aa3f84f", - "sha256:4d2ce1bf1a48c5277d7969259232b57645aae5686dba1eaeade39442277afbca", - "sha256:4da7384b0e5d4cae05c97cd6f94faaf78cc8b0f791fc63af43436d98c4ab37bb", - "sha256:4e54bbf554ee29fcceee24fa41c4d091398b911da6e7f5d7bffda963c9aed2e1", - "sha256:50844efc8cdf63b2d90cd3d62d4947a28311e6266ce5235a219d21b195b4ec2c", - "sha256:5a4939eae35db6b6cec8e7aa0e833dcca0acad8231672c26c2a9ab7a0f8ac9c8", - "sha256:5dc1b852337c6792aa111ca8becff5bacf576bf4a0255b0f05eb749da6a1643e", - "sha256:5e53b428f65ece6d9dad23cb87e64506392b720a0b45076c05354d27a13351a1", - "sha256:61c4956171c7434634401db448371277d07032a81cc21c599c22953374781395", - "sha256:641e94e789b5f6b4822bb8d8ebbdfc10f4e4eae7756d648b717d980f657a9eb9", - "sha256:64b103acdaa53b7caf409e8d45d39a8442fe6dcfec6ba3f3d141e0cc2b5b4dbd", - "sha256:68424221a2dc00d634b54f92441914929c5ffb1c30b3b837343978343a3512a3", - "sha256:6bd1a18f5a797fe740cb3d7a0e853a8ce6461cc62023b630caec80171a6b8097", - "sha256:6c72328f668cf4c503ffcf9434c2b71fdd624345ced7941bc6693e61bbe36bef", - "sha256:6d2d947d266d99a1477cd005b23cbd09465276e302515e122df56bb9511aca1b", - "sha256:7164a55f5e83a9a0b031d3ffab4d4e36bbec42e7025db560f225489fa929e509", - "sha256:7b219cb2182f230676308cdcacd428fa837987b89e4b7c5c9025088b8a6c9faf", - "sha256:7d539241e87b650cbc4c3ac9f32c8d1ac8a54e510f6dca3f6ab60dcfd48c9b10", - "sha256:7de3cc939be0e1174969f943f3b44e0d79b6f9a82198133a5b7fc6cc92882f16", - "sha256:8330b42d769965e96e01fa14034b28a2a7600fbf7e8f0cc90ebb36d492c993e4", - "sha256:837e31620e06b16030b1d126ed78e9383815cbac914693f54926d816d35d8edf", - "sha256:83ce30937f0ba0d28818807b303a412440c4b63e39d3d8fc036a94764b728c92", - "sha256:85df8d92158cb8f3965aecc27cf821461bb5f40b450b03facc5d9f0d4d6ddec6", - "sha256:8639b843c9efd84675f1e100ed9e99538ebea7297b62c4b45a7042edb84db03e", - "sha256:89a82053b193837bf93c0f8a57ded6e4b6d88033a499dadff5067e912c2a41e9", - "sha256:8bacfe6e001749a3b64db47bcf0341da757c95959f592823a93931a422395013", - "sha256:8ec3303e8a81932171f455f792f8df500fc1a09f20069e5c16bd7049ab4e8e38", - "sha256:90897ea1cf0679763b62e79657958cd54eae5659f6360fc7d2ccc6f906342183", - "sha256:908f8c6c71557f4deaa280f55d0728c3bca0960e8c3dd5ceeeafb3c19942719d", - "sha256:91bcc576260a274b169c3098e9a3519fb01f2989f6d3d386ef9cbf8653de1374", - "sha256:9219a1d946a9b32bb23ccae66bdb61e35c62773ce7ca6509ceea70f344656b7b", - "sha256:949520bccc1fa227274da7d03bf238be15389cd94e32e4297b92337df9b7a349", - "sha256:98d873ed6c8b4ee2418f7afce666751854d6d03e3c0ec2a399bb039cd2ae89db", - "sha256:9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f", - "sha256:9ca66b38dd642bf90c59b6738af8070747b610115a39af2498535f62b5cdc1c3", - "sha256:a453257f19c31b31ba593c30d997d6e5be39e3b5ad9148c2af5a7314061c63eb", - "sha256:a52f93d95c8d38fed0669da2ebdb0b0376e895d84596a976c15a9eb45e3eccb3", - "sha256:a9a83618c4f0757557c077ef71d708ddd9847ed66b7cc63416632af70d3e2308", - "sha256:ab594f346517010050126fcd822697b25a7031d815bb4fbc238ccbe568216489", - "sha256:ad3ee9d0f254851c71780966eb417ef8e72117155cff04821ab9b60549694a55", - "sha256:aea9c7224c302bc8bfc892b908537f56c430802560e827b75ecbde81b604598b", - "sha256:b4c2e3d777e38e913b8ce3a6257af72fb608f86a1df471cb1d4339755d0a807c", - "sha256:b667189cf8efe008f55bbda321890bef628a67ab4147ebf90d182f2dadc78790", - "sha256:b89ef9223d665ab255ae42cc282d27d69704d94be0deffc8b9d919179a609684", - "sha256:be9e84e91d6497ba62594158d3d31ec0486c60055c49179edc51ee43d095f79c", - "sha256:bf4cb76f36be5de950ce13e22e7fdf462b35b04665a12b64f3ac5c1bbbcf3728", - "sha256:bfb5539005259f8127ea9c885bdc231978c06b7a980e63a8a61c8c4c979719d0", - "sha256:c046781d422f0830de6329fa4b16796096f28a92c8aef3850674442cdcb87b7f", - "sha256:c1be685ac7700c966b8610ccc63c3187a72e33cab53526a27b2a285a662cd4f7", - "sha256:c1c91405fcf1d501fa5d55df21e58ea49e6b879ae829f1039faaf7e5e509b41e", - "sha256:c235095d6d090aa903f1db61f892fffb779c1eaeb2a50e566b52001f7a0f66ed", - "sha256:c4012a2bd37059d04f8209916aa771dfb564cccb86079072bdcd48a308b6a5c5", - "sha256:c5ef2f2b8a53b7caee2f797ef166a390fef73979b15778a4a153e4b5fedce8fa", - "sha256:c654eafb01afac55246053d67a4b9a984a3567c3808bb7df2f8de1c1caba2e1c", - "sha256:c8d60527d1ecfc131426b10d93ab5d53e08a09c5fa0175f6b21b3252080c70a9", - "sha256:c9e850f5b7fc67af856ff054c71690d54fa940c3ef74209ad9f935b4f66a0233", - "sha256:cbeb0971e13b4bd81d34169ed57a6dda017328d1a22b62fda45e1d21dd06148f", - "sha256:d1a8a09a004ef100e614beec82862d11fc17d601092c3599afd22b1f36e4137e", - "sha256:d67956c676be5a24102c7407a71f4126d30de2a569a1c7871c9f3cabc94225d7", - "sha256:d6cc985b9c8b235bd933990cdbf0f891f8e010b65a3911f7a55179cd7b0fc57b", - "sha256:d7b822c61ed04ee6ad64bc90d13368ad6eb094db54883b5dde2182f67a7f22c0", - "sha256:df0b6d3b95932809c5b3fecc18fda0f1e07452d05e2662a0b35548985f256e28", - "sha256:e042d653a4745be832d5aa190ff80ee4f02c34b21f4b785745eceacd0907b815", - "sha256:e2f84e9af2060e3904a32cea9bb6db23ce3f91cfd90c6b426757cf7cc01c45c7", - "sha256:e3612dc06b436968dfb9142c62e5dfa9eb5924f91120b3c8ff501ad878f90eb3", - "sha256:e505629359cb5f751e16e30cf3f91a1d3ddb4552480c205947da415d597f7ac2", - "sha256:e60690ba71a57424c8d9ff28f8d006b7ad7772c22a4af432188572cd7fa004a1", - "sha256:e76e3f91f864e89db8b8d2a8311d57df93f01ad6bb1e9b9976d1f2e83e18315c", - "sha256:eb7cffe572ad0a141a7886a1d2efa5bef0bf7fe021deeea76b3ab334d2c38218", - "sha256:ec65a78fbd9d6f083a15d7613b2800d5663dbb6bb96003899c834beaa68b242c", - "sha256:eda8e4ecd662d48c28bb86be9e837c13e45c58b8300e43ba3c9b4fa9900302f7", - "sha256:f26f8e2ca19564e2e1fdbb6a0e47f36e0efbab1acc31e15471fad88f828c75f6", - "sha256:f49027b0b9503bf6c8cdc297ca55006b80c2f5dd36cecc72c6835ab6e10e8a25", - "sha256:f73f9f7a0ebd0db139253d27e5fc8d2866ceaeef19c30ab5d69dcbe35e1a6981", - "sha256:fa4184e74197af3adad3c889a1af95b53bb0466bced92ea99a0c014e48323eec", - "sha256:fb1a5b72cbd751813adc02ef01ada0b0d05d3dcbc32976ce189a1279d80ad4a2", - "sha256:fb3a86e703868561c5cad155a15c36c716e1ab513b7065bd2ac8ed353c503333", - "sha256:fc007fdf480c77301ab1afdbb6ab22a5deee8885f3b1ed7afcb7e5e84a0e27be", - "sha256:fe21b118b9f58859b5ebaa4b130dee18669df4bd111daad082b7beb8799ad16b", - "sha256:fec0d993ecba3991645b4857837277469c8cc4c554a7e24d064d1ca291cfb81f" + "sha256:05c0db35ccffd7480143e62df1e829d101c7b86944ae3be7e4869a7efa621f53", + "sha256:0bb7207130ce6486727baa85373503bf3334cc28016f6928a0fa7e19d7ecdc06", + "sha256:0c2ec9f616755b2e1e0bf4d0961f59bb5c2e7a77407e7e2c38ef4f7d2fdde12c", + "sha256:0cb4f59238c6625fae2eeb72278da31c9cfba0ff4d9cbe37446b73caa0e9bcf7", + "sha256:0d89c49356e5e2a50fa86b40e0510082abcd0530f926cbd71cf25bee6b9d82d7", + "sha256:0ddf582a95641b9a8c8bd643e83f34ecbbfe1b68bc3850093605e469ab680ae3", + "sha256:0fdf3073f488ce4d929929b7799e3b8c52b220c9eb3f4a5a51e2dc0e8ff07881", + "sha256:106c5123232ab9b9f4903692e1fa0bdc231510098f04c13c3081f8ad71c3d612", + "sha256:1a40b83ff2535e6e56f190aff123821eea89a24c589f7af33413b9c19eb2c738", + "sha256:1b9e08e57cabc32972f7c956d10e85093c5da9019faa24faf411e7dd258e528c", + "sha256:203ba6b3f89e410e27dbd30ff7dccaf54dcf30fda0b22aa1b82d560c7f9fe9a1", + "sha256:2b27c070fd1132ab23957bcd4ee3ba707a91e653a9268dc1afbd39b77b2799f7", + "sha256:2d9b076411bed964e752c01b49fd224cc385f3a96f520c797d38412d70d08359", + "sha256:39c35e12e8215628984248bd9c8897ce0a474be2a773db207eb93414219d8469", + "sha256:3b0f4629eb954394a3d7c7a1c8cca25f0b07cefe6aa8545e862e9778152de5b7", + "sha256:3c59e103017a2c1ea0ddf589cbefd63f91081d7ce9d491d69ff2512bb1157e23", + "sha256:428cfc801925454395aa468ba7ddb3ed63dc0d881df7b81626cdd433b4e2b11b", + "sha256:45c5631c9b6c792b78be2d7352129f776dd72c605be2c3a4e9be346be8376d83", + "sha256:4814a3e58bc6971e46baa910ecee69699110a2bf06c201e24277c65115a20c20", + "sha256:4aa4baadb1f94b71151b8e44a0c044f6af37396c3b8bcd474b78b49e2130a23b", + "sha256:4ad839b55f0bf235f8e337ce060572d7a06592592f600f3a3029168e838469d3", + "sha256:4aeea04a9889370fcfb1ef828c4cc583f36a875061505cd6cd9ba24d8b43cc36", + "sha256:5797f65e4d58065a49088c3b32af5410751cd485e83ba89e5a45e2aa8905af98", + "sha256:5a2db44a71202c5ae4bb5f27c6d3afbc5b23053f2e7e78aa29704541b5dad789", + "sha256:5d6a2068bd2e1e19e5a317c8c0b288267eec4e7347c36bc68a6e378a39f19ee7", + "sha256:5fdcb09bf6db023d88f312bd0767594b414655d58090fc1c46b3414415f67fac", + "sha256:63decff76ca685b5c557082dfbea865f3f5f6d45766a89bff8dc61d336348833", + "sha256:66bc1b2446f01cbbd3c56b79a3a8435bcd4178ac4e06b091913f7751a7f528b8", + "sha256:67c90c1ae6489a6cb1a82058902caa8006706f7b4e8ff766f943e9d2c8e608d0", + "sha256:69c26f51b67076b40714cff81bdd5826c0b10c077fb6b0678393a6a2f952a5fc", + "sha256:6c366434a7fb914c7a5de508ed735ef9c133367114e1a7cb91dfb5cd806a1549", + "sha256:6f9426d9cfc2f8732922fc96198052e55c09bb9db3ddaa4323a18e055807410e", + "sha256:75128507413a9f1bcbe2db88fd18fbdbf80f264b82fa33a6996cdeaf01c52352", + "sha256:76e9af3ebd86f19973143d4d592cbf3e970cf3f66ddee30b16278c26ae34b8ab", + "sha256:789cea26e740d71cf1882e3a42bb29052bc4ada15770c90072cb47bf73fb3dbf", + "sha256:7c0300007836373d1c2df105b40777986accb738053a92fe09b615a7a4547e9f", + "sha256:7d2756061022aebbf57ba14af9c16e8044e055c22d38de7bf40d92b565ecd2b0", + "sha256:7d79954f51fcf84e5ec4878ab4aea32610d70145c5bbc84b3370eabfb1e096c2", + "sha256:7e927375e43fd5a985b27a8992327c22541b6dede1362fc79df337d26e23604f", + "sha256:7ea74fc0bec172f1ae5f3505b6655c541786a5cabe4bbc0d9723a56ac32eb9b9", + "sha256:7f794a1c148871b714cb566f5466ec8288e0148a1c417550983864b3981737cd", + "sha256:81fc5f22d5fcfdbabde96bb3f5379b9f4476d05c6d524d7259dc5dfb501d3281", + "sha256:860e9d3fd81816a9f4e40812f28be4439ab01f260603c749d14be3c0a1170d19", + "sha256:891ab4713419217b2aed7dd106c9200f64e6a82226775a0d2ebd6bef2ebd1747", + "sha256:8b0e36d845e8b6f50949b6b65fc6cd279f47a1944582ed4ec8258cd136d89a64", + "sha256:8d5350c3590af09c1703dd60ec78a7370c0186e11eaafb9dda025a30eee6492d", + "sha256:94ded4540cac9125eaa8ddf5f651a7ec0da6f5b9f248fe0347b597098f8ec14c", + "sha256:951b228ecf66def855d22e006ab9a1fc12535111ae7db2ec576c728f8ddb39e8", + "sha256:95ef3866631c6da9ce1fc0f1e17b90c4c0aa6d041fc70a11bc90733aee122e1a", + "sha256:9aa1765054245bb01a37f615503290d4e207e3fd59226e78341afb587e9c1236", + "sha256:9ccd657873b7f964711447d004563a2bc08d1476d7a1afcad310f3713e6f50f4", + "sha256:9e03b3d486eb39f5d3f562839f59094dcee30c4039359ea15768dc2214d9e07c", + "sha256:9e60a30aa0909435ec4ea2a3c53e8e1b50ac9f640c0e9fe3f21fd248a22f06c5", + "sha256:9fa7c7e1bee9278fc4f5dd8275bc8d25493281a8ec6c61959e37cc46acf02007", + "sha256:ab8e3793b239db021a18782a5823fcdea63b9fe75d0e340957f5828ef55fcc02", + "sha256:ac8cda531fe55be838a17c62c806824472bb962b3afa47ecbd59b27b78496f4e", + "sha256:b2be3fa5f4efaf16ee7c77d0556abca35f5a18ad4ac06f0ef3904c3399010ce9", + "sha256:b828235d26c1e35aca4107039802ae4b1411be0fe0367dd5b7e4d90e562fcbcd", + "sha256:b8af75fe20d381dd5bcc9db2e86a86d7fcfbf615383a7147b85da97c1182225b", + "sha256:ba49c14222d5e5c0ee394495a8655e991dc06cbca5398153aefa5ac08cd6ccd7", + "sha256:c8ef36a0df38d2dc9d907f6617f89e113c5892e0a35f58f45f75901af0ce7d81", + "sha256:cbfee35c711046b15147b0ae7db9b976f01c9520e6636d992cd9e69e5e2b03b1", + "sha256:ce9646e17fa7c3e2e7a87e696c7de66512c2b4f789a8db95c613588985a2e139", + "sha256:d3ffc6b0efe79e08fd947605fd598515aebefe45e50432dc3b5cd437df8b1ada", + "sha256:d88b46bb0dce9f74b6817bc1758ff2125e1ca9e1377d62ea35b6896142ab6825", + "sha256:da0af328373f97ed9bdfea24549ac1b944096a5a71b30e41c9b8b53ab3eec04a", + "sha256:da815b9263947ac98d088b6414ac83507809a1d385e4632d9489867228d6d81c", + "sha256:e1c99544b6a7d40ca22195563b6d8bc3986ee8bb82f272f31f0670fe9440c869", + "sha256:e75ad48c3cca739f580b5e14c052993eb644c7fa5b4c90aa51193280b30875ae", + "sha256:f4c7dd22cf7f36aafe772f3d88656559205c3af1b7900adfccb70edeb0d2abc4", + "sha256:f76bc12c583ab01e73ba0ea585465a41e48d968f6d1311b4daec4f8654e356e3", + "sha256:fc5c500966bf48913f795f1984704e6d452ba2414207b15e1f8c339a059d5b16", + "sha256:feff14b63a6d86c1eee33a57f77573649f2550935981625be7ff3cb7342efe05", + "sha256:ff562067485ebdeaef2fa3fe9b1876bc4e7b73762e0a01406ad81e2076edcebf" ], - "markers": "python_version >= '3.8'", - "version": "==2.0.1" + "markers": "python_version >= '3.9'", + "version": "==2.1.1" } }, "develop": { + "annotated-doc": { + "hashes": [ + "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", + "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4" + ], + "markers": "python_version >= '3.8'", + "version": "==0.0.4" + }, "annotated-types": { "hashes": [ "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", @@ -832,11 +943,11 @@ }, "authlib": { "hashes": [ - "sha256:45770e8e056d0f283451d9996fbb59b70d45722b45d854d58f32878d0a40c38e", - "sha256:7d9e9bc535c13974313a87f53e8430eb6ea3d1cf6ae4f6efcd793f2e949143fd" + "sha256:41ae180a17cf672bc784e4a518e5c82687f1fe1e98b0cafaeda80c8e4ab2d1cb", + "sha256:97286fd7a15e6cfefc32771c8ef9c54f0ed58028f1322de6a2a7c969c3817888" ], "markers": "python_version >= '3.9'", - "version": "==1.6.6" + "version": "==1.6.8" }, "black": { "hashes": [ @@ -881,19 +992,19 @@ }, "boto3": { "hashes": [ - "sha256:d8b6c52c86f3bf04f71a5a53e7fb4d1527592afebffa5170cf3ef7d70966e610", - "sha256:e1e38fd178ffc66cfbe9cb6838b8c460000c3eb741e5f40f57eb730780ef0ed4" + "sha256:cb4bc94c0ba522242e291d16b4f631e139f525fbc9772229f3e84f5d834fd88e", + "sha256:e7b8fcc123da442449da8a2be65b3e60a3d8cfb2b26a52f7b3c6f9f8e84cbdf0" ], "markers": "python_version >= '3.9'", - "version": "==1.42.37" + "version": "==1.42.55" }, "botocore": { "hashes": [ - "sha256:3ec58eb98b0857f67a2ae6aa3ded51597e7335f7640be654e0e86da4f173b5b2", - "sha256:f13bb8b560a10714d96fb7b0c7f17828dfa6e6606a1ead8c01c6ebb8765acbd8" + "sha256:af22a7d7881883bcb475a627d0750ec6f8ee3d7b2f673e9ff342ebaa498447ee", + "sha256:c092eb99d17b653af3ec9242061a7cde1c7b1940ed4abddfada68a9e1a3492d6" ], "markers": "python_version >= '3.9'", - "version": "==1.42.37" + "version": "==1.42.55" }, "cachecontrol": { "extras": [ @@ -1144,101 +1255,115 @@ "toml" ], "hashes": [ - "sha256:044c6951ec37146b72a50cc81ef02217d27d4c3640efd2640311393cbbf143d3", - "sha256:060ebf6f2c51aff5ba38e1f43a2095e087389b1c69d559fde6049a4b0001320e", - "sha256:060ee84f6a769d40c492711911a76811b4befb6fba50abb450371abb720f5bd6", - "sha256:10758e0586c134a0bafa28f2d37dd2cdb5e4a90de25c0fc0c77dabbad46eca28", - "sha256:13fe81ead04e34e105bf1b3c9f9cdf32ce31736ee5d90a8d2de02b9d3e1bcb82", - "sha256:14ae4146465f8e6e6253eba0cccd57423e598a4cb925958b240c805300918343", - "sha256:14f500232e521201cf031549fb1ebdfc0a40f401cf519157f76c397e586c3beb", - "sha256:1574983178b35b9af4db4a9f7328a18a14a0a0ce76ffaa1c1bacb4cc82089a7c", - "sha256:196bfeabdccc5a020a57d5a368c681e3a6ceb0447d153aeccc1ab4d70a5032ba", - "sha256:21dd57941804ae2ac7e921771a5e21bbf9aabec317a041d164853ad0a96ce31e", - "sha256:264657171406c114787b441484de620e03d8f7202f113d62fcd3d9688baa3e6f", - "sha256:27ba1ed6f66b0e2d61bfa78874dffd4f8c3a12f8e2b5410e515ab345ba7bc9c3", - "sha256:292250282cf9bcf206b543d7608bda17ca6fc151f4cbae949fc7e115112fbd41", - "sha256:2a47a4223d3361b91176aedd9d4e05844ca67d7188456227b6bf5e436630c9a1", - "sha256:2a5b567f0b635b592c917f96b9a9cb3dbd4c320d03f4bf94e9084e494f2e8894", - "sha256:2ee0e58cca0c17dd9c6c1cdde02bb705c7b3fbfa5f3b0b5afeda20d4ebff8ef4", - "sha256:36393bd2841fa0b59498f75466ee9bdec4f770d3254f031f23e8fd8e140ffdd2", - "sha256:387a825f43d680e7310e6f325b2167dd093bc8ffd933b83e9aa0983cf6e0a2ef", - "sha256:3973f353b2d70bd9796cc12f532a05945232ccae966456c8ed7034cb96bbfd6f", - "sha256:3bca209d001fd03ea2d978f8a4985093240a355c93078aee3f799852c23f561a", - "sha256:406821f37f864f968e29ac14c3fccae0fec9fdeba48327f0341decf4daf92d7c", - "sha256:40ce1ea1e25125556d8e76bd0b61500839a07944cc287ac21d5626f3e620cad5", - "sha256:49d49e9a5e9f4dc3d3dac95278a020afa6d6bdd41f63608a76fa05a719d5b66f", - "sha256:4a3158dc2dcce5200d91ec28cd315c999eebff355437d2765840555d765a6e5f", - "sha256:4f7b71757a3ab19f7ba286e04c181004c1d61be921795ee8ba6970fd0ec91da5", - "sha256:59562de3f797979e1ff07c587e2ac36ba60ca59d16c211eceaa579c266c5022f", - "sha256:5b20211c47a8abf4abc3319d8ce2464864fa9f30c5fcaf958a3eed92f4f1fef8", - "sha256:5bd447332ec4f45838c1ad42268ce21ca87c40deb86eabd59888859b66be22a5", - "sha256:6326e18e9a553e674d948536a04a80d850a5eeefe2aae2e6d7cf05d54046c01b", - "sha256:6873f0271b4a15a33e7590f338d823f6f66f91ed147a03938d7ce26efd04eee6", - "sha256:68c86173562ed4413345410c9480a8d64864ac5e54a5cda236748031e094229f", - "sha256:69269ab58783e090bfbf5b916ab3d188126e22d6070bbfc93098fdd474ef937c", - "sha256:69e526e14f3f854eda573d3cf40cffd29a1a91c684743d904c33dbdcd0e0f3e7", - "sha256:6ae99e4560963ad8e163e819e5d77d413d331fd00566c1e0856aa252303552c1", - "sha256:6b8092aa38d72f091db61ef83cb66076f18f02da3e1a75039a4f218629600e04", - "sha256:6e5bbb5018bf76a56aabdb64246b5288d5ae1b7d0dd4d0534fe86df2c2992d1c", - "sha256:76e06ccacd1fb6ada5d076ed98a8c6f66e2e6acd3df02819e2ee29fd637b76ad", - "sha256:78f45d21dc4d5d6bd29323f0320089ef7eae16e4bef712dff79d184fa7330af3", - "sha256:79f6506a678a59d4ded048dc72f1859ebede8ec2b9a2d509ebe161f01c2879d3", - "sha256:7be4d613638d678b2b3773b8f687537b284d7074695a43fe2fbbfc0e31ceaed1", - "sha256:7c79ad5c28a16a1277e1187cf83ea8dafdcc689a784228a7d390f19776db7c31", - "sha256:7de326f80e3451bd5cc7239ab46c73ddb658fe0b7649476bc7413572d36cd548", - "sha256:7f9405ab4f81d490811b1d91c7a20361135a2df4c170e7f0b747a794da5b7f23", - "sha256:838943bea48be0e2768b0cf7819544cdedc1bbb2f28427eabb6eb8c9eb2285d3", - "sha256:88a800258d83acb803c38175b4495d293656d5fac48659c953c18e5f539a274b", - "sha256:89567798404af067604246e01a49ef907d112edf2b75ef814b1364d5ce267031", - "sha256:8a0b33e9fd838220b007ce8f299114d406c1e8edb21336af4c97a26ecfd185aa", - "sha256:8be48da4d47cc68754ce643ea50b3234557cbefe47c2f120495e7bd0a2756f2b", - "sha256:9074896edd705a05769e3de0eac0a8388484b503b68863dd06d5e473f874fd47", - "sha256:93b57142f9621b0d12349c43fc7741fe578e4bc914c1e5a54142856cfc0bf421", - "sha256:93d1d25ec2b27e90bcfef7012992d1f5121b51161b8bffcda756a816cf13c2c3", - "sha256:9779310cb5a9778a60c899f075a8514c89fa6d10131445c2207fc893e0b14557", - "sha256:97e596de8fa9bada4d88fde64a3f4d37f1b6131e4faa32bad7808abc79887ddc", - "sha256:9b2f4714bb7d99ba3790ee095b3b4ac94767e1347fe424278a0b10acb3ff04fe", - "sha256:9c9bdea644e94fd66d75a6f7e9a97bb822371e1fe7eadae2cacd50fcbc28e4dc", - "sha256:9cc7573518b7e2186bd229b1a0fe24a807273798832c27032c4510f47ffdb896", - "sha256:9f93959ee0c604bccd8e0697be21de0887b1f73efcc3aa73a3ec0fd13feace92", - "sha256:a360a8baeb038928ceb996f5623a4cd508728f8f13e08d4e96ce161702f3dd99", - "sha256:a43d34ce714f4ca674c0d90beb760eb05aad906f2c47580ccee9da8fe8bfb417", - "sha256:a55516c68ef3e08e134e818d5e308ffa6b1337cc8b092b69b24287bf07d38e31", - "sha256:a7fc042ba3c7ce25b8a9f097eb0f32a5ce1ccdb639d9eec114e26def98e1f8a4", - "sha256:abaea04f1e7e34841d4a7b343904a3f59481f62f9df39e2cd399d69a187a9660", - "sha256:ae47d8dcd3ded0155afbb59c62bd8ab07ea0fd4902e1c40567439e6db9dcaf2f", - "sha256:b01899e82a04085b6561eb233fd688474f57455e8ad35cd82286463ba06332b7", - "sha256:b3becbea7f3ce9a2d4d430f223ec15888e4deb31395840a79e916368d6004cce", - "sha256:b780090d15fd58f07cf2011943e25a5f0c1c894384b13a216b6c86c8a8a7c508", - "sha256:b7fc50d2afd2e6b4f6f2f403b70103d280a8e0cb35320cbbe6debcda02a1030b", - "sha256:bff1b04cb9d4900ce5c56c4942f047dc7efe57e2608cb7c3c8936e9970ccdbee", - "sha256:c1ea8ca9db5e7469cd364552985e15911548ea5b69c48a17291f0cac70484b2e", - "sha256:c6cadac7b8ace1ba9144feb1ae3cb787a6065ba6d23ffc59a934b16406c26573", - "sha256:c6f141b468740197d6bd38f2b26ade124363228cc3f9858bd9924ab059e00059", - "sha256:ca9566769b69a5e216a4e176d54b9df88f29d750c5b78dbb899e379b4e14b30c", - "sha256:d0ba505e021557f7f8173ee8cd6b926373d8653e5ff7581ae2efce1b11ef4c27", - "sha256:d6d16b0f71120e365741bca2cb473ca6fe38930bc5431c5e850ba949f708f892", - "sha256:d7f63ce526a96acd0e16c4af8b50b64334239550402fb1607ce6a584a6d62ce9", - "sha256:e080afb413be106c95c4ee96b4fffdc9e2fa56a8bbf90b5c0918e5c4449412f5", - "sha256:e4121a90823a063d717a96e0a0529c727fb31ea889369a0ee3ec00ed99bf6859", - "sha256:e64fa5a1e41ce5df6b547cbc3d3699381c9e2c2c369c67837e716ed0f549d48e", - "sha256:e79a8c7d461820257d9aa43716c4efc55366d7b292e46b5b37165be1d377405d", - "sha256:ed2bce0e7bfa53f7b0b01c722da289ef6ad4c18ebd52b1f93704c21f116360c8", - "sha256:ed75de7d1217cf3b99365d110975f83af0528c849ef5180a12fd91b5064df9d6", - "sha256:ee68e5a4e3e5443623406b905db447dceddffee0dceb39f4e0cd9ec2a35004b5", - "sha256:eeea10169fac01549a7921d27a3e517194ae254b542102267bef7a93ed38c40e", - "sha256:f06799ae1bdfff7ccb8665d75f8291c69110ba9585253de254688aa8a1ccc6c5", - "sha256:f0d7fea9d8e5d778cd5a9e8fc38308ad688f02040e883cdc13311ef2748cb40f", - "sha256:f106b2af193f965d0d3234f3f83fc35278c7fb935dfbde56ae2da3dd2c03b84d", - "sha256:f4af3b01763909f477ea17c962e2cca8f39b350a4e46e3a30838b2c12e31b81b", - "sha256:f61d349f5b7cd95c34017f1927ee379bfbe9884300d74e07cf630ccf7a610c1b", - "sha256:f674f59712d67e841525b99e5e2b595250e39b529c3bda14764e4f625a3fa01f", - "sha256:f819c727a6e6eeb8711e4ce63d78c620f69630a2e9d53bc95ca5379f57b6ba94", - "sha256:f9ab1d5b86f8fbc97a5b3cd6280a3fd85fef3b028689d8a2c00918f0d82c728c", - "sha256:fae91dfecd816444c74531a9c3d6ded17a504767e97aa674d44f638107265b99" + "sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246", + "sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459", + "sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129", + "sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6", + "sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415", + "sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf", + "sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80", + "sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11", + "sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0", + "sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b", + "sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9", + "sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b", + "sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f", + "sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505", + "sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47", + "sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55", + "sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def", + "sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689", + "sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012", + "sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5", + "sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3", + "sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95", + "sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9", + "sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601", + "sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997", + "sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c", + "sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac", + "sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c", + "sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa", + "sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750", + "sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3", + "sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d", + "sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12", + "sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a", + "sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932", + "sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356", + "sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92", + "sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148", + "sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39", + "sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634", + "sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6", + "sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72", + "sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98", + "sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef", + "sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3", + "sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9", + "sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0", + "sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a", + "sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9", + "sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552", + "sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc", + "sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f", + "sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525", + "sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940", + "sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a", + "sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23", + "sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f", + "sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc", + "sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b", + "sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056", + "sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7", + "sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb", + "sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a", + "sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd", + "sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea", + "sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126", + "sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299", + "sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9", + "sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b", + "sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00", + "sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf", + "sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda", + "sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2", + "sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5", + "sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d", + "sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9", + "sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9", + "sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b", + "sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa", + "sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092", + "sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58", + "sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea", + "sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26", + "sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea", + "sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9", + "sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053", + "sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f", + "sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0", + "sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3", + "sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256", + "sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a", + "sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903", + "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", + "sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd", + "sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505", + "sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7", + "sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0", + "sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2", + "sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a", + "sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71", + "sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985", + "sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242", + "sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d", + "sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af", + "sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c", + "sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0" ], "markers": "python_version >= '3.10'", - "version": "==7.13.2" + "version": "==7.13.4" }, "coveralls": { "hashes": [ @@ -1251,58 +1376,58 @@ }, "cryptography": { "hashes": [ - "sha256:01df4f50f314fbe7009f54046e908d1754f19d0c6d3070df1e6268c5a4af09fa", - "sha256:0563655cb3c6d05fb2afe693340bc050c30f9f34e15763361cf08e94749401fc", - "sha256:078e5f06bd2fa5aea5a324f2a09f914b1484f1d0c2a4d6a8a28c74e72f65f2da", - "sha256:0a9ad24359fee86f131836a9ac3bffc9329e956624a2d379b613f8f8abaf5255", - "sha256:2067461c80271f422ee7bdbe79b9b4be54a5162e90345f86a23445a0cf3fd8a2", - "sha256:281526e865ed4166009e235afadf3a4c4cba6056f99336a99efba65336fd5485", - "sha256:2d08bc22efd73e8854b0b7caff402d735b354862f1145d7be3b9c0f740fef6a0", - "sha256:3c268a3490df22270955966ba236d6bc4a8f9b6e4ffddb78aac535f1a5ea471d", - "sha256:3d425eacbc9aceafd2cb429e42f4e5d5633c6f873f5e567077043ef1b9bbf616", - "sha256:44cc0675b27cadb71bdbb96099cca1fa051cd11d2ade09e5cd3a2edb929ed947", - "sha256:47bcd19517e6389132f76e2d5303ded6cf3f78903da2158a671be8de024f4cd0", - "sha256:485e2b65d25ec0d901bca7bcae0f53b00133bf3173916d8e421f6fddde103908", - "sha256:5aa3e463596b0087b3da0dbe2b2487e9fc261d25da85754e30e3b40637d61f81", - "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc", - "sha256:62217ba44bf81b30abaeda1488686a04a702a261e26f87db51ff61d9d3510abd", - "sha256:6225d3ebe26a55dbc8ead5ad1265c0403552a63336499564675b29eb3184c09b", - "sha256:6bb5157bf6a350e5b28aee23beb2d84ae6f5be390b2f8ee7ea179cda077e1019", - "sha256:728fedc529efc1439eb6107b677f7f7558adab4553ef8669f0d02d42d7b959a7", - "sha256:766330cce7416c92b5e90c3bb71b1b79521760cdcfc3a6a1a182d4c9fab23d2b", - "sha256:812815182f6a0c1d49a37893a303b44eaac827d7f0d582cecfc81b6427f22973", - "sha256:829c2b12bbc5428ab02d6b7f7e9bbfd53e33efd6672d21341f2177470171ad8b", - "sha256:82a62483daf20b8134f6e92898da70d04d0ef9a75829d732ea1018678185f4f5", - "sha256:8a15fb869670efa8f83cbffbc8753c1abf236883225aed74cd179b720ac9ec80", - "sha256:8bf75b0259e87fa70bddc0b8b4078b76e7fd512fd9afae6c1193bcf440a4dbef", - "sha256:91627ebf691d1ea3976a031b61fb7bac1ccd745afa03602275dda443e11c8de0", - "sha256:93d8291da8d71024379ab2cb0b5c57915300155ad42e07f76bea6ad838d7e59b", - "sha256:9b34d8ba84454641a6bf4d6762d15847ecbd85c1316c0a7984e6e4e9f748ec2e", - "sha256:9b4d17bc7bd7cdd98e3af40b441feaea4c68225e2eb2341026c84511ad246c0c", - "sha256:9c2da296c8d3415b93e6053f5a728649a87a48ce084a9aaf51d6e46c87c7f2d2", - "sha256:a05177ff6296644ef2876fce50518dffb5bcdf903c85250974fc8bc85d54c0af", - "sha256:a90e43e3ef65e6dcf969dfe3bb40cbf5aef0d523dff95bfa24256be172a845f4", - "sha256:a9556ba711f7c23f77b151d5798f3ac44a13455cc68db7697a1096e6d0563cab", - "sha256:b1de0ebf7587f28f9190b9cb526e901bf448c9e6a99655d2b07fff60e8212a82", - "sha256:be8c01a7d5a55f9a47d1888162b76c8f49d62b234d88f0ff91a9fbebe32ffbc3", - "sha256:bfd019f60f8abc2ed1b9be4ddc21cfef059c841d86d710bb69909a688cbb8f59", - "sha256:c236a44acfb610e70f6b3e1c3ca20ff24459659231ef2f8c48e879e2d32b73da", - "sha256:c411f16275b0dea722d76544a61d6421e2cc829ad76eec79280dbdc9ddf50061", - "sha256:c92010b58a51196a5f41c3795190203ac52edfd5dc3ff99149b4659eba9d2085", - "sha256:d5a45ddc256f492ce42a4e35879c5e5528c09cd9ad12420828c972951d8e016b", - "sha256:daa392191f626d50f1b136c9b4cf08af69ca8279d110ea24f5c2700054d2e263", - "sha256:dc1272e25ef673efe72f2096e92ae39dea1a1a450dd44918b15351f72c5a168e", - "sha256:dce1e4f068f03008da7fa51cc7abc6ddc5e5de3e3d1550334eaf8393982a5829", - "sha256:dd5aba870a2c40f87a3af043e0dee7d9eb02d4aff88a797b48f2b43eff8c3ab4", - "sha256:de0f5f4ec8711ebc555f54735d4c673fc34b65c44283895f1a08c2b49d2fd99c", - "sha256:df4a817fa7138dd0c96c8c8c20f04b8aaa1fac3bbf610913dcad8ea82e1bfd3f", - "sha256:e07ea39c5b048e085f15923511d8121e4a9dc45cee4e3b970ca4f0d338f23095", - "sha256:eeeb2e33d8dbcccc34d64651f00a98cb41b2dc69cef866771a5717e6734dfa32", - "sha256:fa0900b9ef9c49728887d1576fd8d9e7e3ea872fa9b25ef9b64888adc434e976", - "sha256:fdc3daab53b212472f1524d070735b2f0c214239df131903bae1d598016fa822" + "sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72", + "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", + "sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9", + "sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356", + "sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257", + "sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad", + "sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4", + "sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c", + "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", + "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", + "sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31", + "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", + "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", + "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", + "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", + "sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4", + "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", + "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", + "sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595", + "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", + "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", + "sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48", + "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", + "sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0", + "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", + "sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d", + "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", + "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", + "sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981", + "sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7", + "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", + "sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2", + "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", + "sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663", + "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", + "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", + "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", + "sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a", + "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", + "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", + "sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a", + "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", + "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", + "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", + "sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648", + "sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da", + "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", + "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", + "sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87" ], "markers": "python_version >= '3.8' and python_full_version not in '3.9.0, 3.9.1'", - "version": "==46.0.4" + "version": "==46.0.5" }, "cyclonedx-python-lib": { "hashes": [ @@ -1359,11 +1484,11 @@ }, "filelock": { "hashes": [ - "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1", - "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1" + "sha256:011a5644dc937c22699943ebbfc46e969cdde3e171470a6e40b9533e5a72affa", + "sha256:426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d" ], "markers": "python_version >= '3.10'", - "version": "==3.20.3" + "version": "==3.24.3" }, "h11": { "hashes": [ @@ -1415,12 +1540,12 @@ }, "ipython": { "hashes": [ - "sha256:48fbed1b2de5e2c7177eefa144aba7fcb82dac514f09b57e2ac9da34ddb54220", - "sha256:b457fe9165df2b84e8ec909a97abcf2ed88f565970efba16b1f7229c283d252b" + "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d", + "sha256:cd9e656be97618a0676d058134cd44e6dc7012c0e5cb36a9ce96a8c904adaf77" ], "index": "pypi", "markers": "python_version >= '3.11'", - "version": "==9.9.0" + "version": "==9.10.0" }, "ipython-pygments-lexers": { "hashes": [ @@ -1464,85 +1589,99 @@ }, "librt": { "hashes": [ - "sha256:00105e7d541a8f2ee5be52caacea98a005e0478cfe78c8080fbb7b5d2b340c63", - "sha256:0241a6ed65e6666236ea78203a73d800dbed896cf12ae25d026d75dc1fcd1dac", - "sha256:03679b9856932b8c8f674e87aa3c55ea11c9274301f76ae8dc4d281bda55cf62", - "sha256:047164e5f68b7a8ebdf9fae91a3c2161d3192418aadd61ddd3a86a56cbe3dc85", - "sha256:171ca3a0a06c643bd0a2f62a8944e1902c94aa8e5da4db1ea9a8daf872685365", - "sha256:1a4ede613941d9c3470b0368be851df6bb78ab218635512d0370b27a277a0862", - "sha256:20e3946863d872f7cabf7f77c6c9d370b8b3d74333d3a32471c50d3a86c0a232", - "sha256:2991b6c3775383752b3ca0204842743256f3ad3deeb1d0adc227d56b78a9a850", - "sha256:31724b93baa91512bd0a376e7cf0b59d8b631ee17923b1218a65456fa9bda2e7", - "sha256:3469e1af9f1380e093ae06bedcbdd11e407ac0b303a56bbe9afb1d6824d4982d", - "sha256:389bd25a0db916e1d6bcb014f11aa9676cedaa485e9ec3752dfe19f196fd377b", - "sha256:3968762fec1b2ad34ce57458b6de25dbb4142713e9ca6279a0d352fa4e9f452b", - "sha256:39a4c76fee41007070f872b648cc2f711f9abf9a13d0c7162478043377b52c8e", - "sha256:3d1322800771bee4a91f3b4bd4e49abc7d35e65166821086e5afd1e6c0d9be44", - "sha256:41d7bb1e07916aeb12ae4a44e3025db3691c4149ab788d0315781b4d29b86afb", - "sha256:43d4e71b50763fcdcf64725ac680d8cfa1706c928b844794a7aa0fa9ac8e5f09", - "sha256:445b7304145e24c60288a2f172b5ce2ca35c0f81605f5299f3fa567e189d2e32", - "sha256:44e0c2cbc9bebd074cf2cdbe472ca185e824be4e74b1c63a8e934cea674bebf2", - "sha256:451e7ffcef8f785831fdb791bd69211f47e95dc4c6ddff68e589058806f044c6", - "sha256:46ef1f4b9b6cc364b11eea0ecc0897314447a66029ee1e55859acb3dd8757c93", - "sha256:4864045f49dc9c974dadb942ac56a74cd0479a2aafa51ce272c490a82322ea3c", - "sha256:4adc73614f0d3c97874f02f2c7fd2a27854e7e24ad532ea6b965459c5b757eca", - "sha256:4c3995abbbb60b3c129490fa985dfe6cac11d88fc3c36eeb4fb1449efbbb04fc", - "sha256:4d2f1e492cae964b3463a03dc77a7fe8742f7855d7258c7643f0ee32b6651dd3", - "sha256:535929b6eff670c593c34ff435d5440c3096f20fa72d63444608a5aef64dd581", - "sha256:5363427bc6a8c3b1719f8f3845ea53553d301382928a86e8fab7984426949bce", - "sha256:54feb7b4f2f6706bb82325e836a01be805770443e2400f706e824e91f6441dde", - "sha256:57175aa93f804d2c08d2edb7213e09276bd49097611aefc37e3fa38d1fb99ad0", - "sha256:5bcaaf624fd24e6a0cb14beac37677f90793a96864c67c064a91458611446e83", - "sha256:60c299e555f87e4c01b2eca085dfccda1dde87f5a604bb45c2906b8305819a93", - "sha256:631599598e2c76ded400c0a8722dec09217c89ff64dc54b060f598ed68e7d2a8", - "sha256:63937bd0f4d1cb56653dc7ae900d6c52c41f0015e25aaf9902481ee79943b33a", - "sha256:66daa6ac5de4288a5bbfbe55b4caa7bf0cd26b3269c7a476ffe8ce45f837f87d", - "sha256:6938cc2de153bc927ed8d71c7d2f2ae01b4e96359126c602721340eb7ce1a92d", - "sha256:6d772edc6a5f7835635c7562f6688e031f0b97e31d538412a852c49c9a6c92d5", - "sha256:6db5faf064b5bab9675c32a873436b31e01d66ca6984c6f7f92621656033a708", - "sha256:73fd300f501a052f2ba52ede721232212f3b06503fa12665408ecfc9d8fd149c", - "sha256:79feb4d00b2a4e0e05c9c56df707934f41fcb5fe53fd9efb7549068d0495b758", - "sha256:7aa7d5457b6c542ecaed79cec4ad98534373c9757383973e638ccced0f11f46d", - "sha256:7b0803e9008c62a7ef79058233db7ff6f37a9933b8f2573c05b07ddafa226611", - "sha256:7e03bea66af33c95ce3addf87a9bf1fcad8d33e757bc479957ddbc0e4f7207ac", - "sha256:864c4b7083eeee250ed55135d2127b260d7eb4b5e953a9e5df09c852e327961b", - "sha256:8766ece9de08527deabcd7cb1b4f1a967a385d26e33e536d6d8913db6ef74f06", - "sha256:87808a8d1e0bd62a01cafc41f0fd6818b5a5d0ca0d8a55326a81643cdda8f873", - "sha256:907ad09cfab21e3c86e8f1f87858f7049d1097f77196959c033612f532b4e592", - "sha256:95b67aa7eff150f075fda09d11f6bfb26edffd300f6ab1666759547581e8f666", - "sha256:978e8b5f13e52cf23a9e80f3286d7546baa70bc4ef35b51d97a709d0b28e537c", - "sha256:9b6943885b2d49c48d0cff23b16be830ba46b0152d98f62de49e735c6e655a63", - "sha256:9c1ba843ae20db09b9d5c80475376168feb2640ce91cd9906414f23cc267a1ff", - "sha256:a14229ac62adcf1b90a15992f1ab9c69ae8b99ffb23cb64a90878a6e8a2f5b81", - "sha256:a36515b1328dc5b3ffce79fe204985ca8572525452eacabee2166f44bb387b2c", - "sha256:ac9c8a458245c7de80bc1b9765b177055efff5803f08e548dd4bb9ab9a8d789b", - "sha256:ad64a14b1e56e702e19b24aae108f18ad1bf7777f3af5fcd39f87d0c5a814449", - "sha256:b09c52ed43a461994716082ee7d87618096851319bf695d57ec123f2ab708951", - "sha256:b45306a1fc5f53c9330fbee134d8b3227fe5da2ab09813b892790400aa49352d", - "sha256:b5b007bb22ea4b255d3ee39dfd06d12534de2fcc3438567d9f48cdaf67ae1ae3", - "sha256:b7e7f140c5169798f90b80d6e607ed2ba5059784968a004107c88ad61fb3641d", - "sha256:b9122094e3f24aa759c38f46bd8863433820654927370250f460ae75488b66ea", - "sha256:bb7a7807523a31f03061288cc4ffc065d684c39db7644c676b47d89553c0d714", - "sha256:be927c3c94c74b05128089a955fba86501c3b544d1d300282cc1b4bd370cb418", - "sha256:bfde8a130bd0f239e45503ab39fab239ace094d63ee1d6b67c25a63d741c0f71", - "sha256:c6f8947d3dfd7f91066c5b4385812c18be26c9d5a99ca56667547f2c39149d94", - "sha256:c7e8f88f79308d86d8f39c491773cbb533d6cb7fa6476f35d711076ee04fceb6", - "sha256:ca916919793a77e4a98d4a1701e345d337ce53be4a16620f063191f7322ac80f", - "sha256:cf243da9e42d914036fd362ac3fa77d80a41cadcd11ad789b1b5eec4daaf67ca", - "sha256:d6f254d096d84156a46a84861183c183d30734e52383602443292644d895047c", - "sha256:dbd79caaf77a3f590cbe32dc2447f718772d6eea59656a7dcb9311161b10fa75", - "sha256:ddb52499d0b3ed4aa88746aaf6f36a08314677d5c346234c3987ddc506404eac", - "sha256:e90a8e237753c83b8e484d478d9a996dc5e39fd5bd4c6ce32563bc8123f132be", - "sha256:e9c0afebbe6ce177ae8edba0c7c4d626f2a0fc12c33bb993d163817c41a7a05c", - "sha256:f11b300027ce19a34f6d24ebb0a25fd0e24a9d53353225a5c1e6cadbf2916b2e", - "sha256:f1ade7f31675db00b514b98f9ab9a7698c7282dad4be7492589109471852d398", - "sha256:f8f4a901a3fa28969d6e4519deceab56c55a09d691ea7b12ca830e2fa3461e34", - "sha256:fdec6e2368ae4f796fc72fad7fd4bd1753715187e6d870932b0904609e7c878e", - "sha256:ff3e9c11aa260c31493d4b3197d1e28dd07768594a4f92bec4506849d736248f", - "sha256:ff71447cb778a4f772ddc4ce360e6ba9c95527ed84a52096bd1bbf9fee2ec7c0" + "sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", + "sha256:039b9f2c506bd0ab0f8725aa5ba339c6f0cd19d3b514b50d134789809c24285d", + "sha256:05bd41cdee35b0c59c259f870f6da532a2c5ca57db95b5f23689fcb5c9e42440", + "sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", + "sha256:08eec3a1fc435f0d09c87b6bf1ec798986a3544f446b864e4099633a56fcd9ed", + "sha256:0bf69d79a23f4f40b8673a947a234baeeb133b5078b483b7297c5916539cf5d5", + "sha256:0c3811485fccfda840861905b8c70bba5ec094e02825598bb9d4ca3936857a04", + "sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", + "sha256:0f2ae3725904f7377e11cc37722d5d401e8b3d5851fb9273d7f4fe04f6b3d37d", + "sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", + "sha256:153188fe98a72f206042be10a2c6026139852805215ed9539186312d50a8e972", + "sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", + "sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", + "sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", + "sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", + "sha256:22b46eabd76c1986ee7d231b0765ad387d7673bbd996aa0d0d054b38ac65d8f6", + "sha256:237796479f4d0637d6b9cbcb926ff424a97735e68ade6facf402df4ec93375ed", + "sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", + "sha256:2cc68eeeef5e906839c7bb0815748b5b0a974ec27125beefc0f942715785b551", + "sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", + "sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", + "sha256:3dff3d3ca8db20e783b1bc7de49c0a2ab0b8387f31236d6a026597d07fcd68ac", + "sha256:43353b943613c5d9c49a25aaffdba46f888ec354e71e3529a00cca3f04d66a7a", + "sha256:439352ba9373f11cb8e1933da194dcc6206daf779ff8df0ed69c5e39113e6a99", + "sha256:4998009e7cb9e896569f4be7004f09d0ed70d386fa99d42b6d363f6d200501ac", + "sha256:4be2a5c926b9770c9e08e717f05737a269b9d0ebc5d2f0060f0fe3fe9ce47acb", + "sha256:4beb04b8c66c6ae62f8c1e0b2f097c1ebad9295c929a8d5286c05eae7c2fc7dc", + "sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", + "sha256:5212a5bd7fae98dae95710032902edcd2ec4dc994e883294f75c857b83f9aba0", + "sha256:52c224e14614b750c0a6d97368e16804a98c684657c7518752c356834fff83bb", + "sha256:56e04c14b696300d47b3bc5f1d10a00e86ae978886d0cee14e5714fafb5df5d2", + "sha256:5bb54f1205a3a6ab41a6fd71dfcdcbd278670d3a90ca502a30d9da583105b6f7", + "sha256:5cdc0f588ff4b663ea96c26d2a230c525c6fc62b28314edaaaca8ed5af931ad0", + "sha256:5db05697c82b3a2ec53f6e72b2ed373132b0c2e05135f0696784e97d7f5d48e7", + "sha256:5e4af413908f77294605e28cfd98063f54b2c790561383971d2f52d113d9c363", + "sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", + "sha256:60a78b694c9aee2a0f1aaeaa7d101cf713e92e8423a941d2897f4fa37908dab9", + "sha256:64548cde61b692dc0dc379f4b5f59a2f582c2ebe7890d09c1ae3b9e66fa015b7", + "sha256:681dc2451d6d846794a828c16c22dc452d924e9f700a485b7ecb887a30aad1fd", + "sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", + "sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", + "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", + "sha256:747328be0c5b7075cde86a0e09d7a9196029800ba75a1689332348e998fb85c0", + "sha256:758509ea3f1eba2a57558e7e98f4659d0ea7670bff49673b0dde18a3c7e6c0eb", + "sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", + "sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", + "sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", + "sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", + "sha256:7e6bad1cd94f6764e1e21950542f818a09316645337fd5ab9a7acc45d99a8f35", + "sha256:81fd938344fecb9373ba1b155968c8a329491d2ce38e7ddb76f30ffb938f12dc", + "sha256:82210adabbc331dbb65d7868b105185464ef13f56f7f76688565ad79f648b0fe", + "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", + "sha256:8f1125e6bbf2f1657d9a2f3ccc4a2c9b0c8b176965bb565dd4d86be67eddb4b6", + "sha256:8f4bb453f408137d7581be309b2fbc6868a80e7ef60c88e689078ee3a296ae71", + "sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", + "sha256:93c2af9e01e0ef80d95ae3c720be101227edae5f2fe7e3dc63d8857fadfc5a1d", + "sha256:97c2b54ff6717a7a563b72627990bec60d8029df17df423f0ed37d56a17a176b", + "sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", + "sha256:9e2c6f77b9ad48ce5603b83b7da9ee3e36b3ab425353f695cba13200c5d96596", + "sha256:a28f2612ab566b17f3698b0da021ff9960610301607c9a5e8eaca62f5e1c350a", + "sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", + "sha256:a3b4350b13cc0e6f5bec8fa7caf29a8fb8cdc051a3bae45cfbfd7ce64f009965", + "sha256:aaab0e307e344cb28d800957ef3ec16605146ef0e59e059a60a176d19543d1b7", + "sha256:ac1e7817fd0ed3d14fd7c5df91daed84c48e4c2a11ee99c0547f9f62fdae13da", + "sha256:adfab487facf03f0d0857b8710cf82d0704a309d8ffc33b03d9302b4c64e91a9", + "sha256:b6d7ab1f01aa753188605b09a51faa44a3327400b00b8cce424c71910fc0a128", + "sha256:bacdb58d9939d95cc557b4dbaa86527c9db2ac1ed76a18bc8d26f6dc8647d851", + "sha256:be46a14693955b3bd96014ccbdb8339ee8c9346fbe11c1b78901b55125f14c73", + "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", + "sha256:c00e5c884f528c9932d278d5c9cbbea38a6b81eb62c02e06ae53751a83a4d52b", + "sha256:c25d9e338d5bed46c1632f851babf3d13c78f49a225462017cf5e11e845c5891", + "sha256:c336d61d2fe74a3195edc1646d53ff1cddd3a9600b09fa6ab75e5514ba4862a7", + "sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", + "sha256:cf450f498c30af55551ba4f66b9123b7185362ec8b625a773b3d39aa1a717583", + "sha256:d0ee06b5b5291f609ddb37b9750985b27bc567791bc87c76a569b3feed8481ac", + "sha256:d480de377f5b687b6b1bc0c0407426da556e2a757633cc7e4d2e1a057aa688f3", + "sha256:d56bc4011975f7460bea7b33e1ff425d2f1adf419935ff6707273c77f8a4ada6", + "sha256:dd3c41254ee98604b08bd5b3af5bf0a89740d4ee0711de95b65166bf44091921", + "sha256:e0d138c7ae532908cbb342162b2611dbd4d90c941cd25ab82084aaf71d2c0bd0", + "sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", + "sha256:e3f0a41487fd5fad7e760b9e8a90e251e27c2816fbc2cff36a22a0e6bcbbd9dd", + "sha256:e692aa2d1d604e6ca12d35e51fdc36f4cda6345e28e36374579f7ef3611b3012", + "sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", + "sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", + "sha256:eb5656019db7c4deacf0c1a55a898c5bb8f989be904597fcb5232a2f4828fa05", + "sha256:eca45e982fa074090057132e30585a7e8674e9e885d402eae85633e9f449ce6c", + "sha256:f0af2bd2bc204fa27f3d6711d0f360e6b8c684a035206257a81673ab924aa11e", + "sha256:f7cdf7f26c2286ffb02e46d7bac56c94655540b26347673bea15fa52a6af17e9", + "sha256:fd1a720332ea335ceb544cf0a03f81df92abd4bb887679fd1e460976b0e6214b", + "sha256:ff8baf1f8d3f4b6b7257fcb75a501f2a5499d0dda57645baa09d4d0d34b19444" ], "markers": "python_version >= '3.9'", - "version": "==0.7.8" + "version": "==0.8.1" }, "license-expression": { "hashes": [ @@ -1657,11 +1796,11 @@ }, "marshmallow": { "hashes": [ - "sha256:4d1d66189c8d279ca73a6b0599d74117e5f8a3830b5cd766b75c2bb08e3464e7", - "sha256:d82b1a83cfbb4667d050850fbed4e9d4435576cb95f5ff37894f375dce201768" + "sha256:084a9466111b7ec7183ca3a65aed758739af919fedc5ebdab60fb39d6b4dc121", + "sha256:ba40340683a2d1c15103647994ff2f6bc2c8c80da01904cbe5d96ee4baa78d9f" ], "markers": "python_version >= '3.10'", - "version": "==4.2.1" + "version": "==4.2.2" }, "matplotlib-inline": { "hashes": [ @@ -1681,12 +1820,12 @@ }, "moto": { "hashes": [ - "sha256:58c82c8e6b2ef659ef3a562fa415dce14da84bc7a797943245d9a338496ea0ea", - "sha256:6d12d781e26a550d80e4b7e01d5538178e3adec6efbdec870e06e84750f13ec0" + "sha256:311a30095b08b39dd2707f161f1440d361684fe0090b9fd0751dfd1c9b022445", + "sha256:713dde46e71e2714fa9a29eec513ec618d35e1d84c256331b5aab3f30692feeb" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==5.1.20" + "version": "==5.1.21" }, "msgpack": { "hashes": [ @@ -1811,11 +1950,11 @@ }, "nltk": { "hashes": [ - "sha256:0f409e9b069ca4177c1903c3e843eef90c7e92992fa4931ae607da6de49e1419", - "sha256:1e209d2b3009110635ed9709a67a1a3e33a10f799490fa71cf4bec218c11c88a" + "sha256:60b3db6e9995b3dd976b1f0fa7dec22069b2677e759c28eb69b62ddd44870522", + "sha256:cb5945d6424a98d694c2b9a0264519fab4363711065a46aa0ae7a2195b92e71f" ], - "markers": "python_version >= '3.9'", - "version": "==3.9.2" + "markers": "python_version >= '3.10'", + "version": "==3.9.3" }, "nodeenv": { "hashes": [ @@ -1843,11 +1982,11 @@ }, "parso": { "hashes": [ - "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", - "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887" + "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd", + "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff" ], "markers": "python_version >= '3.6'", - "version": "==0.8.5" + "version": "==0.8.6" }, "pathspec": { "hashes": [ @@ -1867,11 +2006,11 @@ }, "pip": { "hashes": [ - "sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343", - "sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd" + "sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b", + "sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8" ], "markers": "python_version >= '3.9'", - "version": "==25.3" + "version": "==26.0.1" }, "pip-api": { "hashes": [ @@ -1900,11 +2039,11 @@ }, "platformdirs": { "hashes": [ - "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", - "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31" + "sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd", + "sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291" ], "markers": "python_version >= '3.10'", - "version": "==4.5.1" + "version": "==4.9.2" }, "pluggy": { "hashes": [ @@ -2131,51 +2270,51 @@ }, "pytokens": { "hashes": [ - "sha256:01d1a61e36812e4e971cfe2c0e4c1f2d66d8311031dac8bf168af8a249fa04dd", - "sha256:0508d11b4de157ee12063901603be87fb0253e8f4cb9305eb168b1202ab92068", - "sha256:06ac081c1187389762b58823d90d6339e6880ce0df912f71fb9022d81d7fd429", - "sha256:0cd3fa1caf9e47a72ee134a29ca6b5bea84712724bba165d6628baa190c6ea5b", - "sha256:0cdca8159df407dbd669145af4171a0d967006e0be25f3b520896bc7068f02c4", - "sha256:0d7374c917197106d3c4761374718bc55ea2e9ac0fb94171588ef5840ee1f016", - "sha256:237ba7cfb677dbd3b01b09860810aceb448871150566b93cd24501d5734a04b1", - "sha256:25cacc20c2ad90acb56f3739d87905473c54ca1fa5967ffcd675463fe965865e", - "sha256:278129d54573efdc79e75c6082e73ebd19858e22a2e848359f93629323186ca6", - "sha256:3d36954aba4557fd5a418a03cf595ecbb1cdcce119f91a49b19ef09d691a22ae", - "sha256:4b5770abeb2a24347380a1164a558f0ebe06e98aedbd54c45f7929527a5fb26e", - "sha256:4d0f568d7e82b7e96be56d03b5081de40e43c904eb6492bf09aaca47cd55f35b", - "sha256:54691cf8f299e7efabcc25adb4ce715d3cef1491e1c930eaf555182f898ef66a", - "sha256:55efcc36f9a2e0e930cfba0ce7f83445306b02f8326745585ed5551864eba73a", - "sha256:5dbf56f3c748aed9310b310d5b8b14e2c96d3ad682ad5a943f381bdbbdddf753", - "sha256:628fab535ebc9079e4db35cd63cb401901c7ce8720a9834f9ad44b9eb4e0f1d4", - "sha256:658f870523ac1a5f4733d7db61ce9af61a0c23b2aeea3d03d1800c93f760e15f", - "sha256:6b0b03e6ea7c9f9d47c5c61164b69ad30f4f0d70a5d9fe7eac4d19f24f77af2d", - "sha256:73eff3bdd8ad08da679867992782568db0529b887bed4c85694f84cdf35eafc6", - "sha256:74500d72c561dad14c037a9e86a657afd63e277dd5a3bb7570932ab7a3b12551", - "sha256:865cc65c75c8f2e9e0d8330338f649b12bfd9442561900ebaf58c596a72107d2", - "sha256:8cd795191c4127fcb3d7b76d84006a07748c390226f47657869235092eedbc05", - "sha256:92eb3ef88f27c22dc9dbab966ace4d61f6826e02ba04dac8e2d65ea31df56c8e", - "sha256:9380fb6d96fa5ab83ed606ebad27b6171930cc14a8a8d215f6adb187ba428690", - "sha256:94ff5db97a0d3cd7248a5b07ba2167bd3edc1db92f76c6db00137bbaf068ddf8", - "sha256:9940f7c2e2f54fb1cb5fe17d0803c54da7a2bf62222704eb4217433664a186a7", - "sha256:9c6986576b7b07fe9791854caa5347923005a80b079d45b63b0be70d50cce5f1", - "sha256:a2c8952c537cb73a1a74369501a83b7f9d208c3cf92c41dd88a17814e68d48ce", - "sha256:af0c3166aea367a9e755a283171befb92dd3043858b94ae9b3b7efbe9def26a3", - "sha256:cd8da894e5a29ba6b6da8be06a4f7589d7220c099b5e363cb0643234b9b38c2a", - "sha256:d0dd6261cd9cc95fae1227b1b6ebee023a5fd4a4b6330b071c73a516f5f59b63", - "sha256:d69a2491190a74e4b6f87f3b9dfce7a6873de3f3bf330d20083d374380becac0", - "sha256:d97cc1f91b1a8e8ebccf31c367f28225699bea26592df27141deade771ed0afb", - "sha256:daae524ed14ca459932cbf51d74325bea643701ba8a8b0cc2d10f7cd4b3e2b63", - "sha256:dbb9338663b3538f31c4ca7afe4f38d9b9b3a16a8be18a273a5704a1bc7a2367", - "sha256:df58d44630eaf25f587540e94bdf1fc50b4e6d5f212c786de0fb024bfcb8753a", - "sha256:e131804513597f2dff2b18f9911d9b6276e21ef3699abeffc1c087c65a3d975e", - "sha256:e368e0749e4e9d86a6e08763310dc92bc69ad73d9b6db5243b30174c71a8a534", - "sha256:e47e2ef3ec6ee86909e520d79f965f9b23389fda47460303cf715d510a6fe544", - "sha256:e95cb158c44d642ed62f555bf8136bbe780dbd64d2fb0b9169e11ffb944664c3", - "sha256:ef2bcbddb73ac18599a86c8c549d5145130f2cd9d83dc2b5482fd8322b7806cd", - "sha256:f4b77858a680635ee9904306f54b0ee4781effb89e211ba0a773d76539537165" + "sha256:0fc71786e629cef478cbf29d7ea1923299181d0699dbe7c3c0f4a583811d9fc1", + "sha256:11edda0942da80ff58c4408407616a310adecae1ddd22eef8c692fe266fa5009", + "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", + "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", + "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", + "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", + "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", + "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", + "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", + "sha256:30f51edd9bb7f85c748979384165601d028b84f7bd13fe14d3e065304093916a", + "sha256:34bcc734bd2f2d5fe3b34e7b3c0116bfb2397f2d9666139988e7a3eb5f7400e3", + "sha256:3ad72b851e781478366288743198101e5eb34a414f1d5627cdd585ca3b25f1db", + "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", + "sha256:42f144f3aafa5d92bad964d471a581651e28b24434d184871bd02e3a0d956037", + "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", + "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", + "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", + "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", + "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", + "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", + "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", + "sha256:682fa37ff4d8e95f7df6fe6fe6a431e8ed8e788023c6bcc0f0880a12eab80ad1", + "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", + "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", + "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", + "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", + "sha256:941d4343bf27b605e9213b26bfa1c4bf197c9c599a9627eb7305b0defcfe40c1", + "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", + "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", + "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", + "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", + "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", + "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", + "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", + "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", + "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", + "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", + "sha256:da5baeaf7116dced9c6bb76dc31ba04a2dc3695f3d9f74741d7910122b456edc", + "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", + "sha256:dcafc12c30dbaf1e2af0490978352e0c4041a7cde31f4f81435c2a5e8b9cabb6", + "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", + "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324" ], "markers": "python_version >= '3.8'", - "version": "==0.4.0" + "version": "==0.4.1" }, "pyyaml": { "hashes": [ @@ -2258,140 +2397,123 @@ }, "regex": { "hashes": [ - "sha256:0057de9eaef45783ff69fa94ae9f0fd906d629d0bd4c3217048f46d1daa32e9b", - "sha256:008b185f235acd1e53787333e5690082e4f156c44c87d894f880056089e9bc7c", - "sha256:05d75a668e9ea16f832390d22131fe1e8acc8389a694c8febc3e340b0f810b93", - "sha256:069f56a7bf71d286a6ff932a9e6fb878f151c998ebb2519a9f6d1cee4bffdba3", - "sha256:0751a26ad39d4f2ade8fe16c59b2bf5cb19eb3d2cd543e709e583d559bd9efde", - "sha256:08df9722d9b87834a3d701f3fca570b2be115654dbfd30179f30ab2f39d606d3", - "sha256:0bda75ebcac38d884240914c6c43d8ab5fb82e74cde6da94b43b17c411aa4c2b", - "sha256:0bf065240704cb8951cc04972cf107063917022511273e0969bdb34fc173456c", - "sha256:0bf650f26087363434c4e560011f8e4e738f6f3e029b85d4904c50135b86cfa5", - "sha256:0dcd31594264029b57bf16f37fd7248a70b3b764ed9e0839a8f271b2d22c0785", - "sha256:0f0c7684c7f9ca241344ff95a1de964f257a5251968484270e91c25a755532c5", - "sha256:124dc36c85d34ef2d9164da41a53c1c8c122cfb1f6e1ec377a1f27ee81deb794", - "sha256:164759aa25575cbc0651bef59a0b18353e54300d79ace8084c818ad8ac72b7d5", - "sha256:166551807ec20d47ceaeec380081f843e88c8949780cd42c40f18d16168bed10", - "sha256:1704d204bd42b6bb80167df0e4554f35c255b579ba99616def38f69e14a5ccb9", - "sha256:18388a62989c72ac24de75f1449d0fb0b04dfccd0a1a7c1c43af5eb503d890f6", - "sha256:194312a14819d3e44628a44ed6fea6898fdbecb0550089d84c403475138d0a09", - "sha256:1ae6020fb311f68d753b7efa9d4b9a5d47a5d6466ea0d5e3b5a471a960ea6e4a", - "sha256:1cb740d044aff31898804e7bf1181cc72c03d11dfd19932b9911ffc19a79070a", - "sha256:1e1808471fbe44c1a63e5f577a1d5f02fe5d66031dcbdf12f093ffc1305a858e", - "sha256:1e8cd52557603f5c66a548f69421310886b28b7066853089e1a71ee710e1cdc1", - "sha256:21ca32c28c30d5d65fc9886ff576fc9b59bbca08933e844fa2363e530f4c8218", - "sha256:2748c1ec0663580b4510bd89941a31560b4b439a0b428b49472a3d9944d11cd8", - "sha256:27618391db7bdaf87ac6c92b31e8f0dfb83a9de0075855152b720140bda177a2", - "sha256:2a8d7b50c34578d0d3bf7ad58cde9652b7d683691876f83aedc002862a35dc5e", - "sha256:2b091aefc05c78d286657cd4db95f2e6313375ff65dcf085e42e4c04d9c8d410", - "sha256:2c2b80399a422348ce5de4fe40c418d6299a0fa2803dd61dc0b1a2f28e280fcf", - "sha256:2f2775843ca49360508d080eaa87f94fa248e2c946bbcd963bb3aae14f333413", - "sha256:3038a62fc7d6e5547b8915a3d927a0fbeef84cdbe0b1deb8c99bbd4a8961b52a", - "sha256:32655d17905e7ff8ba5c764c43cb124e34a9245e45b83c22e81041e1071aee10", - "sha256:343db82cb3712c31ddf720f097ef17c11dab2f67f7a3e7be976c4f82eba4e6df", - "sha256:3601ffb5375de85a16f407854d11cca8fe3f5febbe3ac78fb2866bb220c74d10", - "sha256:3d6ce5ae80066b319ae3bc62fd55a557c9491baa5efd0d355f0de08c4ba54e79", - "sha256:3d7d92495f47567a9b1669c51fc8d6d809821849063d168121ef801bbc213846", - "sha256:40c86d8046915bb9aeb15d3f3f15b6fd500b8ea4485b30e1bbc799dab3fe29f8", - "sha256:4161d87f85fa831e31469bfd82c186923070fc970b9de75339b68f0c75b51903", - "sha256:41aef6f953283291c4e4e6850607bd71502be67779586a61472beacb315c97ec", - "sha256:453078802f1b9e2b7303fb79222c054cb18e76f7bdc220f7530fdc85d319f99e", - "sha256:492534a0ab925d1db998defc3c302dae3616a2fc3fe2e08db1472348f096ddf2", - "sha256:4c5ef43b5c2d4114eb8ea424bb8c9cec01d5d17f242af88b2448f5ee81caadbc", - "sha256:4c8fcc5793dde01641a35905d6731ee1548f02b956815f8f1cab89e515a5bdf1", - "sha256:4def140aa6156bc64ee9912383d4038f3fdd18fee03a6f222abd4de6357ce42a", - "sha256:4e3dd93c8f9abe8aa4b6c652016da9a3afa190df5ad822907efe6b206c09896e", - "sha256:505831646c945e3e63552cc1b1b9b514f0e93232972a2d5bedbcc32f15bc82e3", - "sha256:5170907244b14303edc5978f522f16c974f32d3aa92109fabc2af52411c9433b", - "sha256:55b4ea996a8e4458dd7b584a2f89863b1655dd3d17b88b46cbb9becc495a0ec5", - "sha256:55e9d0118d97794367309635df398bdfd7c33b93e2fdfa0b239661cd74b4c14e", - "sha256:56a5595d0f892f214609c9f76b41b7428bed439d98dc961efafdd1354d42baae", - "sha256:57e7d17f59f9ebfa9667e6e5a1c0127b96b87cb9cede8335482451ed00788ba4", - "sha256:5ef19071f4ac9f0834793af85bd04a920b4407715624e40cb7a0631a11137cdf", - "sha256:5ff818702440a5878a81886f127b80127f5d50563753a28211482867f8318106", - "sha256:619843841e220adca114118533a574a9cd183ed8a28b85627d2844c500a2b0db", - "sha256:621f73a07595d83f28952d7bd1e91e9d1ed7625fb7af0064d3516674ec93a2a2", - "sha256:693b465171707bbe882a7a05de5e866f33c76aa449750bee94a8d90463533cc9", - "sha256:6bfc31a37fd1592f0c4fc4bfc674b5c42e52efe45b4b7a6a14f334cca4bcebe4", - "sha256:6d220a2517f5893f55daac983bfa9fe998a7dbcaee4f5d27a88500f8b7873788", - "sha256:6e42844ad64194fa08d5ccb75fe6a459b9b08e6d7296bd704460168d58a388f3", - "sha256:726ea4e727aba21643205edad8f2187ec682d3305d790f73b7a51c7587b64bdd", - "sha256:74f45d170a21df41508cb67165456538425185baaf686281fa210d7e729abc34", - "sha256:7dcc02368585334f5bc81fc73a2a6a0bbade60e7d83da21cead622faf408f32c", - "sha256:7e1e28be779884189cdd57735e997f282b64fd7ccf6e2eef3e16e57d7a34a815", - "sha256:7ef7d5d4bd49ec7364315167a4134a015f61e8266c6d446fc116a9ac4456e10d", - "sha256:8050ba2e3ea1d8731a549e83c18d2f0999fbc99a5f6bd06b4c91449f55291804", - "sha256:82345326b1d8d56afbe41d881fdf62f1926d7264b2fc1537f99ae5da9aad7913", - "sha256:8355ad842a7c7e9e5e55653eade3b7d1885ba86f124dd8ab1f722f9be6627434", - "sha256:86c1077a3cc60d453d4084d5b9649065f3bf1184e22992bd322e1f081d3117fb", - "sha256:87adf5bd6d72e3e17c9cb59ac4096b1faaf84b7eb3037a5ffa61c4b4370f0f13", - "sha256:8db052bbd981e1666f09e957f3790ed74080c2229007c1dd67afdbf0b469c48b", - "sha256:8dd16fba2758db7a3780a051f245539c4451ca20910f5a5e6ea1c08d06d4a76b", - "sha256:8e32f7896f83774f91499d239e24cebfadbc07639c1494bb7213983842348337", - "sha256:91c5036ebb62663a6b3999bdd2e559fd8456d17e2b485bf509784cd31a8b1705", - "sha256:9250d087bc92b7d4899ccd5539a1b2334e44eee85d848c4c1aef8e221d3f8c8f", - "sha256:9479cae874c81bf610d72b85bb681a94c95722c127b55445285fb0e2c82db8e1", - "sha256:968c14d4f03e10b2fd960f1d5168c1f0ac969381d3c1fcc973bc45fb06346599", - "sha256:97499ff7862e868b1977107873dd1a06e151467129159a6ffd07b66706ba3a9f", - "sha256:99ad739c3686085e614bf77a508e26954ff1b8f14da0e3765ff7abbf7799f952", - "sha256:9d787e3310c6a6425eb346be4ff2ccf6eece63017916fd77fe8328c57be83521", - "sha256:a1774cd1981cd212506a23a14dba7fdeaee259f5deba2df6229966d9911e767a", - "sha256:a30a68e89e5a218b8b23a52292924c1f4b245cb0c68d1cce9aec9bbda6e2c160", - "sha256:adc97a9077c2696501443d8ad3fa1b4fc6d131fc8fd7dfefd1a723f89071cf0a", - "sha256:b0d190e6f013ea938623a58706d1469a62103fb2a241ce2873a9906e0386582c", - "sha256:b10e42a6de0e32559a92f2f8dc908478cc0fa02838d7dbe764c44dca3fa13569", - "sha256:b2a13dd6a95e95a489ca242319d18fc02e07ceb28fa9ad146385194d95b3c829", - "sha256:b30bcbd1e1221783c721483953d9e4f3ab9c5d165aa709693d3f3946747b1aea", - "sha256:b325d4714c3c48277bfea1accd94e193ad6ed42b4bad79ad64f3b8f8a31260a5", - "sha256:b5a28980a926fa810dbbed059547b02783952e2efd9c636412345232ddb87ff6", - "sha256:b5f7d8d2867152cdb625e72a530d2ccb48a3d199159144cbdd63870882fb6f80", - "sha256:bfb0d6be01fbae8d6655c8ca21b3b72458606c4aec9bbc932db758d47aba6db1", - "sha256:bfd876041a956e6a90ad7cdb3f6a630c07d491280bfeed4544053cd434901681", - "sha256:c08c1f3e34338256732bd6938747daa3c0d5b251e04b6e43b5813e94d503076e", - "sha256:c243da3436354f4af6c3058a3f81a97d47ea52c9bd874b52fd30274853a1d5df", - "sha256:c32bef3e7aeee75746748643667668ef941d28b003bfc89994ecf09a10f7a1b5", - "sha256:c661fc820cfb33e166bf2450d3dadbda47c8d8981898adb9b6fe24e5e582ba60", - "sha256:c6c4dcdfff2c08509faa15d36ba7e5ef5fcfab25f1e8f85a0c8f45bc3a30725d", - "sha256:c6c565d9a6e1a8d783c1948937ffc377dd5771e83bd56de8317c450a954d2056", - "sha256:c8a154cf6537ebbc110e24dabe53095e714245c272da9c1be05734bdad4a61aa", - "sha256:c9c08c2fbc6120e70abff5d7f28ffb4d969e14294fb2143b4b5c7d20e46d1714", - "sha256:ca89c5e596fc05b015f27561b3793dc2fa0917ea0d7507eebb448efd35274a70", - "sha256:cc7cd0b2be0f0269283a45c0d8b2c35e149d1319dcb4a43c9c3689fa935c1ee6", - "sha256:cda1ed70d2b264952e88adaa52eea653a33a1b98ac907ae2f86508eb44f65cdc", - "sha256:cf8ff04c642716a7f2048713ddc6278c5fd41faa3b9cab12607c7abecd012c22", - "sha256:cfecdaa4b19f9ca534746eb3b55a5195d5c95b88cac32a205e981ec0a22b7d31", - "sha256:d426616dae0967ca225ab12c22274eb816558f2f99ccb4a1d52ca92e8baf180f", - "sha256:d5eaa4a4c5b1906bd0d2508d68927f15b81821f85092e06f1a34a4254b0e1af3", - "sha256:d639a750223132afbfb8f429c60d9d318aeba03281a5f1ab49f877456448dcf1", - "sha256:d920392a6b1f353f4aa54328c867fec3320fa50657e25f64abf17af054fc97ac", - "sha256:d991483606f3dbec93287b9f35596f41aa2e92b7c2ebbb935b63f409e243c9af", - "sha256:d9ea2604370efc9a174c1b5dcc81784fb040044232150f7f33756049edfc9026", - "sha256:dbaf3c3c37ef190439981648ccbf0c02ed99ae066087dd117fcb616d80b010a4", - "sha256:dca3582bca82596609959ac39e12b7dad98385b4fefccb1151b937383cec547d", - "sha256:e3174a5ed4171570dc8318afada56373aa9289eb6dc0d96cceb48e7358b0e220", - "sha256:e43a55f378df1e7a4fa3547c88d9a5a9b7113f653a66821bcea4718fe6c58763", - "sha256:e69d0deeb977ffe7ed3d2e4439360089f9c3f217ada608f0f88ebd67afb6385e", - "sha256:e85dc94595f4d766bd7d872a9de5ede1ca8d3063f3bdf1e2c725f5eb411159e3", - "sha256:e90b8db97f6f2c97eb045b51a6b2c5ed69cedd8392459e0642d4199b94fabd7e", - "sha256:e9bf3f0bbdb56633c07d7116ae60a576f846efdd86a8848f8d62b749e1209ca7", - "sha256:ea4e6b3566127fda5e007e90a8fd5a4169f0cf0619506ed426db647f19c8454a", - "sha256:ec94c04149b6a7b8120f9f44565722c7ae31b7a6d2275569d2eefa76b83da3be", - "sha256:eddf73f41225942c1f994914742afa53dc0d01a6e20fe14b878a1b1edc74151f", - "sha256:ee6854c9000a10938c79238de2379bea30c82e4925a371711af45387df35cab8", - "sha256:ef71d476caa6692eea743ae5ea23cde3260677f70122c4d258ca952e5c2d4e84", - "sha256:f052d1be37ef35a54e394de66136e30fa1191fab64f71fc06ac7bc98c9a84618", - "sha256:f1862739a1ffb50615c0fde6bae6569b5efbe08d98e59ce009f68a336f64da75", - "sha256:f192a831d9575271a22d804ff1a5355355723f94f31d9eef25f0d45a152fdc1a", - "sha256:f42e68301ff4afee63e365a5fc302b81bb8ba31af625a671d7acb19d10168a8c", - "sha256:f7792f27d3ee6e0244ea4697d92b825f9a329ab5230a78c1a68bd274e64b5077", - "sha256:f82110ab962a541737bd0ce87978d4c658f06e7591ba899192e2712a517badbb", - "sha256:f9ca1cbdc0fbfe5e6e6f8221ef2309988db5bcede52443aeaee9a4ad555e0dac", - "sha256:fd65af65e2aaf9474e468f9e571bd7b189e1df3a61caa59dcbabd0000e4ea839", - "sha256:fe2fda4110a3d0bc163c2e0664be44657431440722c5c5315c65155cab92f9e5", - "sha256:febd38857b09867d3ed3f4f1af7d241c5c50362e25ef43034995b77a50df494e" + "sha256:00ec994d7824bf01cd6c7d14c7a6a04d9aeaf7c42a2bc22d2359d715634d539b", + "sha256:015088b8558502f1f0bccd58754835aa154a7a5b0bd9d4c9b7b96ff4ae9ba876", + "sha256:02b9e1b8a7ebe2807cd7bbdf662510c8e43053a23262b9f46ad4fc2dfc9d204e", + "sha256:03d191a9bcf94d31af56d2575210cb0d0c6a054dbcad2ea9e00aa4c42903b919", + "sha256:03d706fbe7dfec503c8c3cb76f9352b3e3b53b623672aa49f18a251a6c71b8e6", + "sha256:0782bd983f19ac7594039c9277cd6f75c89598c1d72f417e4d30d874105eb0c7", + "sha256:0c10869d18abb759a3317c757746cc913d6324ce128b8bcec99350df10419f18", + "sha256:0d0e72703c60d68b18b27cde7cdb65ed2570ae29fb37231aa3076bfb6b1d1c13", + "sha256:0d9f81806abdca3234c3dd582b8a97492e93de3602c8772013cb4affa12d1668", + "sha256:11c138febb40546ff9e026dbbc41dc9fb8b29e61013fa5848ccfe045f5b23b83", + "sha256:127ea69273485348a126ebbf3d6052604d3c7da284f797bba781f364c0947d47", + "sha256:12e86a01594031abf892686fcb309b041bf3de3d13d99eb7e2b02a8f3c687df1", + "sha256:17648e1a88e72d88641b12635e70e6c71c5136ba14edba29bf8fc6834005a265", + "sha256:196553ba2a2f47904e5dc272d948a746352e2644005627467e055be19d73b39e", + "sha256:1e7a08622f7d51d7a068f7e4052a38739c412a3e74f55817073d2e2418149619", + "sha256:2905ff4a97fad42f2d0834d8b1ea3c2f856ec209837e458d71a061a7d05f9f01", + "sha256:294c0fb2e87c6bcc5f577c8f609210f5700b993151913352ed6c6af42f30f95f", + "sha256:2c1693ca6f444d554aa246b592355b5cec030ace5a2729eae1b04ab6e853e768", + "sha256:2cb00aabd96b345d56a8c2bc328c8d6c4d29935061e05078bf1f02302e12abf5", + "sha256:2f914ae8c804c8a8a562fe216100bc156bfb51338c1f8d55fe32cf407774359a", + "sha256:2fedd459c791da24914ecc474feecd94cf7845efb262ac3134fe27cbd7eda799", + "sha256:311fcccb76af31be4c588d5a17f8f1a059ae8f4b097192896ebffc95612f223a", + "sha256:31a5f561eb111d6aae14202e7043fb0b406d3c8dddbbb9e60851725c9b38ab1d", + "sha256:31aefac2506967b7dd69af2c58eca3cc8b086d4110b66d6ac6e9026f0ee5b697", + "sha256:38d88c6ed4a09ed61403dbdf515d969ccba34669af3961ceb7311ecd0cef504a", + "sha256:3a039474986e7a314ace6efb9ce52f5da2bdb80ac4955358723d350ec85c32ad", + "sha256:3aa0944f1dc6e92f91f3b306ba7f851e1009398c84bfd370633182ee4fc26a64", + "sha256:4071209fd4376ab5ceec72ad3507e9d3517c59e38a889079b98916477a871868", + "sha256:4146dc576ea99634ae9c15587d0c43273b4023a10702998edf0fa68ccb60237a", + "sha256:4192464fe3e6cb0ef6751f7d3b16f886d8270d359ed1590dd555539d364f0ff7", + "sha256:43cdde87006271be6963896ed816733b10967baaf0e271d529c82e93da66675b", + "sha256:4584a3ee5f257b71e4b693cc9be3a5104249399f4116fe518c3f79b0c6fc7083", + "sha256:46e69a4bf552e30e74a8aa73f473c87efcb7f6e8c8ece60d9fd7bf13d5c86f02", + "sha256:49cef7bb2a491f91a8869c7cdd90babf0a417047ab0bf923cd038ed2eab2ccb8", + "sha256:4a02faea614e7fdd6ba8b3bec6c8e79529d356b100381cec76e638f45d12ca04", + "sha256:50f1ee9488dd7a9fda850ec7c68cad7a32fa49fd19733f5403a3f92b451dcf73", + "sha256:516ee067c6c721d0d0bfb80a2004edbd060fffd07e456d4e1669e38fe82f922e", + "sha256:52136f5b71f095cb74b736cc3a1b578030dada2e361ef2f07ca582240b703946", + "sha256:5390b130cce14a7d1db226a3896273b7b35be10af35e69f1cca843b6e5d2bb2d", + "sha256:59a7a5216485a1896c5800e9feb8ff9213e11967b482633b6195d7da11450013", + "sha256:5a8f28dd32a4ce9c41758d43b5b9115c1c497b4b1f50c457602c1d571fa98ce1", + "sha256:5b81ff4f9cad99f90c807a00c5882fbcda86d8b3edd94e709fb531fc52cb3d25", + "sha256:5df947cabab4b643d4791af5e28aecf6bf62e6160e525651a12eba3d03755e6b", + "sha256:5e3a31e94d10e52a896adaa3adf3621bd526ad2b45b8c2d23d1bbe74c7423007", + "sha256:5e56c669535ac59cbf96ca1ece0ef26cb66809990cda4fa45e1e32c3b146599e", + "sha256:5ec1d7c080832fdd4e150c6f5621fe674c70c63b3ae5a4454cebd7796263b175", + "sha256:6380f29ff212ec922b6efb56100c089251940e0526a0d05aa7c2d9b571ddf2fe", + "sha256:64128549b600987e0f335c2365879895f860a9161f283b14207c800a6ed623d3", + "sha256:654dc41a5ba9b8cc8432b3f1aa8906d8b45f3e9502442a07c2f27f6c63f85db5", + "sha256:655f553a1fa3ab8a7fd570eca793408b8d26a80bfd89ed24d116baaf13a38969", + "sha256:66e6a43225ff1064f8926adbafe0922b370d381c3330edaf9891cade52daa790", + "sha256:676c4e6847a83a1d5732b4ed553881ad36f0a8133627bb695a89ecf3571499d3", + "sha256:6bc25d7e15f80c9dc7853cbb490b91c1ec7310808b09d56bd278fe03d776f4f6", + "sha256:6c8fb3b19652e425ff24169dad3ee07f99afa7996caa9dfbb3a9106cd726f49a", + "sha256:6fb8cb09b10e38f3ae17cc6dc04a1df77762bd0351b6ba9041438e7cc85ec310", + "sha256:7187fdee1be0896c1499a991e9bf7c78e4b56b7863e7405d7bb687888ac10c4b", + "sha256:74ff212aa61532246bb3036b3dfea62233414b0154b8bc3676975da78383cac3", + "sha256:75472631eee7898e16a8a20998d15106cb31cfde21cdf96ab40b432a7082af06", + "sha256:77cfd6b5e7c4e8bf7a39d243ea05882acf5e3c7002b0ef4756de6606893b0ecd", + "sha256:78af1e499cab704131f6f4e2f155b7f54ce396ca2acb6ef21a49507e4752e0be", + "sha256:79014115e6fdf18fd9b32e291d58181bf42d4298642beaa13fd73e69810e4cb6", + "sha256:790dbf87b0361606cb0d79b393c3e8f4436a14ee56568a7463014565d97da02a", + "sha256:80caaa1ddcc942ec7be18427354f9d58a79cee82dea2a6b3d4fd83302e1240d7", + "sha256:80d31c3f1fe7e4c6cd1831cd4478a0609903044dfcdc4660abfe6fb307add7f0", + "sha256:82336faeecac33297cd42857c3b36f12b91810e3fdd276befdd128f73a2b43fa", + "sha256:8457c1bc10ee9b29cdfd897ccda41dce6bde0e9abd514bcfef7bcd05e254d411", + "sha256:8497421099b981f67c99eba4154cf0dfd8e47159431427a11cfb6487f7791d9e", + "sha256:8abe671cf0f15c26b1ad389bf4043b068ce7d3b1c5d9313e12895f57d6738555", + "sha256:8dbff048c042beef60aa1848961384572c5afb9e8b290b0f1203a5c42cf5af65", + "sha256:8df08decd339e8b3f6a2eb5c05c687fe9d963ae91f352bc57beb05f5b2ac6879", + "sha256:8e6e77cd92216eb489e21e5652a11b186afe9bdefca8a2db739fd6b205a9e0a4", + "sha256:8edda06079bd770f7f0cf7f3bba1a0b447b96b4a543c91fe0c142d034c166161", + "sha256:93b16a18cadb938f0f2306267161d57eb33081a861cee9ffcd71e60941eb5dfc", + "sha256:93d881cab5afdc41a005dba1524a40947d6f7a525057aa64aaf16065cf62faa9", + "sha256:965d59792f5037d9138da6fed50ba943162160443b43d4895b182551805aff9c", + "sha256:997862c619994c4a356cb7c3592502cbd50c2ab98da5f61c5c871f10f22de7e5", + "sha256:9cbc69eae834afbf634f7c902fc72ff3e993f1c699156dd1af1adab5d06b7fe7", + "sha256:9dadc10d1c2bbb1326e572a226d2ec56474ab8aab26fdb8cf19419b372c349a9", + "sha256:9e6693b8567a59459b5dda19104c4a4dbbd4a1c78833eacc758796f2cfef1854", + "sha256:9fff45852160960f29e184ec8a5be5ab4063cfd0b168d439d1fc4ac3744bf29e", + "sha256:a032bc01a4bc73fc3cadba793fce28eb420da39338f47910c59ffcc11a5ba5ef", + "sha256:a09ae430e94c049dc6957f6baa35ee3418a3a77f3c12b6e02883bd80a2b679b0", + "sha256:a178df8ec03011153fbcd2c70cb961bc98cbbd9694b28f706c318bee8927c3db", + "sha256:ab780092b1424d13200aa5a62996e95f65ee3db8509be366437439cdc0af1a9f", + "sha256:b5100acb20648d9efd3f4e7e91f51187f95f22a741dcd719548a6cf4e1b34b3f", + "sha256:b9ab8dec42afefa6314ea9b31b188259ffdd93f433d77cad454cd0b8d235ce1c", + "sha256:bcf57d30659996ee5c7937999874504c11b5a068edc9515e6a59221cc2744dd1", + "sha256:c0761d7ae8d65773e01515ebb0b304df1bf37a0a79546caad9cbe79a42c12af7", + "sha256:c0924c64b082d4512b923ac016d6e1dcf647a3560b8a4c7e55cbbd13656cb4ed", + "sha256:c13228fbecb03eadbfd8f521732c5fda09ef761af02e920a3148e18ad0e09968", + "sha256:c1665138776e4ac1aa75146669236f7a8a696433ec4e525abf092ca9189247cc", + "sha256:c227f2922153ee42bbeb355fd6d009f8c81d9d7bdd666e2276ce41f53ed9a743", + "sha256:c7e121a918bbee3f12ac300ce0a0d2f2c979cf208fb071ed8df5a6323281915c", + "sha256:ccaaf9b907ea6b4223d5cbf5fa5dff5f33dc66f4907a25b967b8a81339a6e332", + "sha256:cce8027010d1ffa3eb89a0b19621cdc78ae548ea2b49fea1f7bfb3ea77064c2b", + "sha256:cdc0a80f679353bd68450d2a42996090c30b2e15ca90ded6156c31f1a3b63f3b", + "sha256:d00c95a2b6bfeb3ea1cb68d1751b1dfce2b05adc2a72c488d77a780db06ab867", + "sha256:d792b84709021945597e05656aac059526df4e0c9ef60a0eaebb306f8fafcaa8", + "sha256:d793c5b4d2b4c668524cd1651404cfc798d40694c759aec997e196fe9729ec60", + "sha256:d89f85a5ccc0cec125c24be75610d433d65295827ebaf0d884cbe56df82d4774", + "sha256:d96162140bb819814428800934c7b71b7bffe81fb6da2d6abc1dcca31741eca3", + "sha256:db5fd91eec71e7b08de10011a2223d0faa20448d4e1380b9daa179fa7bf58906", + "sha256:db970bcce4d63b37b3f9eb8c893f0db980bbf1d404a1d8d2b17aa8189de92c53", + "sha256:dbb240c81cfed5d4a67cb86d7676d9f7ec9c3f186310bec37d8a1415210e111e", + "sha256:e561dd47a85d2660d3d3af4e6cb2da825cf20f121e577147963f875b83d32786", + "sha256:e581f75d5c0b15669139ca1c2d3e23a65bb90e3c06ba9d9ea194c377c726a904", + "sha256:e689fed279cbe797a6b570bd18ff535b284d057202692c73420cb93cca41aa32", + "sha256:ea8dfc99689240e61fb21b5fc2828f68b90abf7777d057b62d3166b7c1543c4c", + "sha256:eb20c11aa4c3793c9ad04c19a972078cdadb261b8429380364be28e867a843f2", + "sha256:ec661807ffc14c8d14bb0b8c1bb3d5906e476bc96f98b565b709d03962ee4dd4", + "sha256:f374366ed35673ea81b86a8859c457d4fae6ba092b71024857e9e237410c7404", + "sha256:f5a37a17d110f9d5357a43aa7e3507cb077bf3143d1c549a45c4649e90e40a70", + "sha256:f9417fd853fcd00b7d55167e692966dd12d95ba1a88bf08a62002ccd85030790", + "sha256:fdbade8acba71bb45057c2b72f477f0b527c4895f9c83e6cfc30d4a006c21726" ], - "markers": "python_version >= '3.9'", - "version": "==2026.1.15" + "markers": "python_version >= '3.10'", + "version": "==2026.2.19" }, "requests": { "hashes": [ @@ -2403,19 +2525,19 @@ }, "responses": { "hashes": [ - "sha256:0c710af92def29c8352ceadff0c3fe340ace27cf5af1bbe46fb71275bcd2831c", - "sha256:9374d047a575c8f781b94454db5cab590b6029505f488d12899ddb10a4af1cf4" + "sha256:03ec4409088cd5c66b71ecbbbd27fe2c58ddfad801c66203457b3e6a04868c37", + "sha256:c7f6923e6343ef3682816ba421c006626777893cb0d5e1434f674b649bac9eb4" ], "markers": "python_version >= '3.8'", - "version": "==0.25.8" + "version": "==0.26.0" }, "rich": { "hashes": [ - "sha256:b8c5f568a3a749f9290ec6bddedf835cec33696bfc1e48bcfecb276c7386e4b8", - "sha256:da750b1aebbff0b372557426fb3f35ba56de8ef954b3190315eb64076d6fb54e" + "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", + "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b" ], "markers": "python_full_version >= '3.8.0'", - "version": "==14.3.1" + "version": "==14.3.3" }, "ruamel-yaml": { "hashes": [ @@ -2494,29 +2616,28 @@ }, "ruff": { "hashes": [ - "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", - "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", - "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", - "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", - "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", - "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", - "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", - "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", - "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", - "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", - "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", - "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", - "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", - "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", - "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", - "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", - "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", - "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", - "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e" + "sha256:120691a6fdae2f16d65435648160f5b81a9625288f75544dc40637436b5d3c0d", + "sha256:14b965afee0969e68bb871eba625343b8673375f457af4abe98553e8bbb98342", + "sha256:1b9164f57fc36058e9a6806eb92af185b0697c9fe4c7c52caa431c6554521e5c", + "sha256:2dcc987551952d73cbf5c88d9fdee815618d497e4df86cd4c4824cc59d5dd75f", + "sha256:42a47fd785cbe8c01b9ff45031af875d101b040ad8f4de7bbb716487c74c9a77", + "sha256:72ecc64f46f7019e2bcc3cdc05d4a7da958b629a5ab7033195e11a438403d956", + "sha256:80d24fcae24d42659db7e335b9e1531697a7102c19185b8dc4a028b952865fd8", + "sha256:8dcf243b15b561c655c1ef2f2b0050e5d50db37fe90115507f6ff37d865dc8b4", + "sha256:a89056d831256099658b6bba4037ac6dd06f49d194199215befe2bb10457ea5e", + "sha256:a9fb47b6d9764677f8c0a193c0943ce9a05d6763523f132325af8a858eadc2b9", + "sha256:b7a672c82b5f9887576087d97be5ce439f04bbaf548ee987b92d3a7dede41d3a", + "sha256:cabddc5822acdc8f7b5527b36ceac55cc51eec7b1946e60181de8fe83ca8876e", + "sha256:cbe9f49354866e575b4c6943856989f966421870e85cd2ac94dccb0a9dcb2fea", + "sha256:d20014e3dfa400f3ff84830dfb5755ece2de45ab62ecea4af6b7262d0fb4f7c5", + "sha256:dab6941c862c05739774677c6273166d2510d254dac0695c0e3f5efa1b5585de", + "sha256:e36dee3a64be0ebd23c86ffa3aa3fd3ac9a712ff295e192243f814a830b6bd87", + "sha256:f376990f9d0d6442ea9014b19621d8f2aaf2b8e39fdbfc79220b7f0c596c9b80", + "sha256:fd5ff9e5f519a7e1bd99cbe8daa324010a74f5e2ebc97c6242c08f26f3714f6f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.14.14" + "version": "==0.15.2" }, "s3transfer": { "hashes": [ @@ -2575,11 +2696,11 @@ }, "tenacity": { "hashes": [ - "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", - "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138" + "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", + "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a" ], - "markers": "python_version >= '3.9'", - "version": "==9.1.2" + "markers": "python_version >= '3.10'", + "version": "==9.1.4" }, "tomli": { "hashes": [ @@ -2652,11 +2773,11 @@ }, "tqdm": { "hashes": [ - "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", - "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2" + "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", + "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf" ], "markers": "python_version >= '3.7'", - "version": "==4.67.1" + "version": "==4.67.3" }, "traitlets": { "hashes": [ @@ -2668,11 +2789,11 @@ }, "typer": { "hashes": [ - "sha256:7985e89081c636b88d172c2ee0cfe33c253160994d47bdfdc302defd7d1f1d01", - "sha256:ea835607cd752343b6b2b7ce676893e5a0324082268b48f27aa058bdb7d2145d" + "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e", + "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45" ], - "markers": "python_version >= '3.9'", - "version": "==0.21.1" + "markers": "python_version >= '3.10'", + "version": "==0.24.1" }, "typing-extensions": { "hashes": [ @@ -2700,35 +2821,35 @@ }, "virtualenv": { "hashes": [ - "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f", - "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba" + "sha256:44888bba3775990a152ea1f73f8e5f566d49f11bbd1de61d426fd7732770043e", + "sha256:a15f0cebd00d50074fd336a169d53422436a12dfe15149efec7072cfe817df8b" ], "markers": "python_version >= '3.8'", - "version": "==20.36.1" + "version": "==20.39.0" }, "wcwidth": { "hashes": [ - "sha256:1efe1361b83b0ff7877b81ba57c8562c99cf812158b778988ce17ec061095695", - "sha256:f89c103c949a693bf563377b2153082bf58e309919dfb7f27b04d862a0089333" + "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", + "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159" ], "markers": "python_version >= '3.8'", - "version": "==0.5.0" + "version": "==0.6.0" }, "werkzeug": { "hashes": [ - "sha256:5111e36e91086ece91f93268bb39b4a35c1e6f1feac762c9c822ded0a4e322dc", - "sha256:6a548b0e88955dd07ccb25539d7d0cc97417ee9e179677d22c7041c8f078ce67" + "sha256:210c6bede5a420a913956b4791a7f4d6843a43b6fcee4dfa08a65e93007d0d25", + "sha256:7ddf3357bb9564e407607f988f683d72038551200c704012bb9a4c523d42f131" ], "markers": "python_version >= '3.9'", - "version": "==3.1.5" + "version": "==3.1.6" }, "xmltodict": { "hashes": [ - "sha256:54306780b7c2175a3967cad1db92f218207e5bc1aba697d887807c0fb68b7649", - "sha256:62d0fddb0dcbc9f642745d8bbf4d81fd17d6dfaec5a15b5c1876300aad92af0d" + "sha256:6d94c9f834dd9e44514162799d344d815a3a4faec913717a9ecbfa5be1bb8e61", + "sha256:a4a00d300b0e1c59fc2bfccb53d7b2e88c32f200df138a0dd2229f842497026a" ], "markers": "python_version >= '3.9'", - "version": "==1.0.2" + "version": "==1.0.4" } } } diff --git a/README.md b/README.md index fdf7962d..0f4efaf6 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ flowchart TD DSpace GeoData MARC + Others transmogrifier((transmogrifier)) timdex-dataset timdex-index-manager @@ -20,6 +21,7 @@ flowchart TD DSpace[("DSpace
(METS XML)")] --> transmogrifier GeoData[("GeoData
(Aardvark JSON)")] --> transmogrifier MARC[("Alma
(MARCXML)")] --> transmogrifier + Others[("*Other Sources")] --> transmogrifier transmogrifier --> timdex-dataset["TIMDEX Parquet Dataset"] timdex-dataset["TIMDEX Parquet Dataset"] --> timdex-index-manager((timdex-index-manager)) ``` @@ -52,7 +54,9 @@ WORKSPACE=### Set to `dev` for local development, this will be set to `stage` an ### Optional ```shell -WARNING_ONLY_LOGGERS=### Comma-seperated list of logger names to set as WARNING only, e.g. 'botocore,charset_normalizer,smart_open' +WARNING_ONLY_LOGGERS=### Comma-seperated list of logger names to set as WARNING only, e.g. 'botocore,charset_normalizer,smart_open' +LIBGUIDES_API_TOKEN=### Libguides API token [required for libguides source] +LIBGUIDES_CLIENT_ID=### Libguides account id [required for libguides source] ``` ## CLI commands diff --git a/pyproject.toml b/pyproject.toml index 158a0ed7..3bacbcfd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,12 @@ disallow_untyped_defs = true exclude = ["tests/", "output/"] [[tool.mypy.overrides]] -module = ["bs4", "bs4.*"] +module = [ + "bs4", + "bs4.*", + "pandas", + "requests" +] ignore_missing_imports = true [tool.pytest.ini_options] @@ -42,12 +47,15 @@ ignore = [ "D205", "D212", "D402", + "EM101", "EM102", "G004", "PLR0912", "PLR0913", "PLR0915", "S321", + "TD002", + "TD003", "TRY003" ] diff --git a/tests/fixtures/libguides/libguide.html b/tests/fixtures/libguides/libguide.html new file mode 100644 index 00000000..da4f27df --- /dev/null +++ b/tests/fixtures/libguides/libguide.html @@ -0,0 +1,36 @@ + + + + + Analyst reports - Business Databases by Category - LibGuides at MIT + Libraries + + + + + + + + + + + + + + + + + + + + +

You should not find me.

+

I am header information.

+

I am the main content.

+

You should not find me either.

+ + + diff --git a/tests/fixtures/libguides/libguide_minimal_dc.html b/tests/fixtures/libguides/libguide_minimal_dc.html new file mode 100644 index 00000000..60de1cbe --- /dev/null +++ b/tests/fixtures/libguides/libguide_minimal_dc.html @@ -0,0 +1,8 @@ + + + Test + + +

Content

+ + diff --git a/tests/fixtures/libguides/libguide_non_url_identifier.html b/tests/fixtures/libguides/libguide_non_url_identifier.html new file mode 100644 index 00000000..53783f0c --- /dev/null +++ b/tests/fixtures/libguides/libguide_non_url_identifier.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/fixtures/libguides/libguides-2026-02-20-full-extracted-records-to-index.jsonl b/tests/fixtures/libguides/libguides-2026-02-20-full-extracted-records-to-index.jsonl new file mode 100644 index 00000000..af2eab9b --- /dev/null +++ b/tests/fixtures/libguides/libguides-2026-02-20-full-extracted-records-to-index.jsonl @@ -0,0 +1,5 @@ +{"url": "https://libguides.mit.edu/bizcat", "status": "active", "cdx_warc_filename": "rec-d3274de52d0c-libguides-20260205201423787-6.warc.gz", "cdx_title": "Analyst reports - Business Databases by Category - LibGuides at MIT Libraries", "cdx_offset": "1001127", "cdx_length": "16655", "html_base64": "ICA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9RWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIAo8dGl0bGU+QW5hbHlzdCByZXBvcnRzIC0gQnVzaW5lc3MgRGF0YWJhc2VzIGJ5IENhdGVnb3J5IC0gTGliR3VpZGVzIGF0IE1JVCBMaWJyYXJpZXM8L3RpdGxlPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgo8IS0tIGZhdmljb24udHdpZyAtLT4KPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTgweDE4MCIgaHJlZj0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL2FwcGxlLXRvdWNoLWljb24ucG5nIj4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS9wbmciIHNpemVzPSIzMngzMiIgaHJlZj0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL2Zhdmljb24tMzJ4MzIucG5nIj4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS9wbmciIHNpemVzPSIxNngxNiIgaHJlZj0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL2Zhdmljb24tMTZ4MTYucG5nIj4KPGxpbmsgcmVsPSJtYW5pZmVzdCIgaHJlZj0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL3NpdGUud2VibWFuaWZlc3QiPgo8bGluayByZWw9Im1hc2staWNvbiIgaHJlZj0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL3NhZmFyaS1waW5uZWQtdGFiLnN2ZyIgY29sb3I9IiM1YmJhZDUiPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLmljbyI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tVGlsZUNvbG9yIiBjb250ZW50PSIjZmZjNDBkIj4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1jb25maWciIGNvbnRlbnQ9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9icm93c2VyY29uZmlnLnhtbCI+CjxtZXRhIG5hbWU9InRoZW1lLWNvbG9yIiBjb250ZW50PSIjZmZmZmZmIj4KPCEtLSAhZmF2aWNvbi50d2lnIC0tPgoKCgo8IS0tIHB1YmxpY19tZXRhZGF0YS50d2lnIC0tPgoKICAgIDwhLS0gYXV0byBnZW5lcmF0ZWQgZHVibGluIGNvcmUgbWV0YWRhdGEgLS0+CiAgICA8bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTGliR3VpZGVzOiBCdXNpbmVzcyBEYXRhYmFzZXMgYnkgQ2F0ZWdvcnk6IEFuYWx5c3QgcmVwb3J0cyIvPgogICAgPG1ldGEgbmFtZT0iREMuQ3JlYXRvciIgY29udGVudD0iU2hpa2hhIFNoYXJtYSIvPgogICAgPG1ldGEgbmFtZT0iREMuU3ViamVjdCIgY29udGVudD0iIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5EZXNjcmlwdGlvbiIgY29udGVudD0iIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5QdWJsaXNoZXJzIiBjb250ZW50PSJNSVQgTGlicmFyaWVzIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5SaWdodHMiIGNvbnRlbnQ9IkNvcHlyaWdodCBNSVQgTGlicmFyaWVzIDIwMjYiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkxhbmd1YWdlIiBjb250ZW50PSJlbiIvPgogICAgPG1ldGEgbmFtZT0iREMuSWRlbnRpZmllciIgY29udGVudD0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9iaXpjYXQvYW5hbHlzdHMiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkRhdGUuQ3JlYXRlZCIgY29udGVudD0iU2VwIDEzLCAyMDE1Ii8+CiAgICA8bWV0YSBuYW1lPSJEQy5EYXRlLk1vZGlmaWVkIiBjb250ZW50PSJGZWIgMiwgMjAyNiIvPgogICAgCgo8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkxpYkd1aWRlczogQnVzaW5lc3MgRGF0YWJhc2VzIGJ5IENhdGVnb3J5OiBBbmFseXN0IHJlcG9ydHMiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkxpYkd1aWRlczogQnVzaW5lc3MgRGF0YWJhc2VzIGJ5IENhdGVnb3J5OiBBbmFseXN0IHJlcG9ydHMiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CjxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYml6Y2F0L2FuYWx5c3RzIj4KPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIj4KPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAc3ByaW5nc2hhcmUiPgoKCgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvY3NzL2pxdWVyeS11aS5taW4uY3NzPzI2OTEiIC8+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL3NsaWNrLTEuOC4xL3NsaWNrL3NsaWNrLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9zbGljay0xLjguMS9zbGljay9zbGljay10aGVtZS5jc3MiPgoKICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2NzczMuMjMuNC9sZy1wdWJsaWMubWluLmNzcyIgLz4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvanMvMS4xMi40X2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgogICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgalF1ZXJ5KCIuZHJvcGRvd24tdG9nZ2xlIikub24oImNsaWNrIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5zaWJsaW5ncygidWwucy1sZy1zdWJ0YWItdWwuZHJvcGRvd24tbWVudSIpLnRvZ2dsZSgpOwogICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc19sZ19ndWlkZV9uYW1lID0galF1ZXJ5KCcjcy1sZy1ndWlkZS1uYW1lJyk7CiAgICAgICAgaWYgKHNfbGdfZ3VpZGVfbmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGpRdWVyeS50cmltKHNfbGdfZ3VpZGVfbmFtZS50ZXh0KCkpID09PSAnJykgewogICAgICAgICAgICAgICAgc19sZ19ndWlkZV9uYW1lLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEzLjIvanF1ZXJ5LXVpLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIGpRdWVyeS51aSB8fAogICAgICAgIGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pxdWVyeS9qcy9qcXVlcnktdWkubWluLmpzPzI2OTEiPlx4M0Mvc2NyaXB0PicpOwogICAgPC9zY3JpcHQ+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pzMy4yMy40L2xnLXB1YmxpYy5taW4uanMiPjwvc2NyaXB0Pgo8c3R5bGU+LyoqIGJvb3RzdHJhcF90YWJfY3NzLnR3aWcgKiovCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24sCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbiB7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmc6IDRweCAxNXB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgewogICAgYm9yZGVyLWJvdHRvbTogMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkjcy1sZy1hZG1pbi10YWItYWRkID4gYSB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b246aG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsgLW1vei1ib3JkZXItcmFkaXVzOiAwOyBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGNvbG9yOiAjZmZmZmZmOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IGJ1dHRvbiwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGJ1dHRvbiB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gLnMtbGctc3VidGFiLXVsID4gLmFjdGl2ZSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiAucy1sZy1zdWJ0YWItdWwgPiAuYWN0aXZlID4gYnV0dG9uIHsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYnV0dG9uOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGJ1dHRvbjpob3ZlciB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICAgIGJvcmRlci10b3AtY29sb3I6ICNlMWUxZTE7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyBidXR0b24uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgbWFyZ2luLXRvcDogLTNweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA2cHggMHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLWRyb3A6aG92ZXIgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JiYjsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDZweCAwcHggM3B4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluazpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmc6IDRweCA1cHggNHB4IDEwcHg7Cn0KCi5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluaywKLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmsgewogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEucy1sZy10YWItZHJvcCwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA4cHggNHB4IDhweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYS5zLWxnLXRhYi1kcm9wOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDhweCA0cHggOHB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluazpob3ZlciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGZsb2F0OiBsZWZ0OwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogNHB4IDE1cHggNHB4IDE1cHg7Cn0KCi8qKiAhYm9vdHN0cmFwX3RhYl9jc3MudHdpZyAqKi8KIC5zLWxpYi1ib3gge2JvcmRlci1jb2xvcjogI2NjY2NjYzsKICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggNnB4IC02cHggI0FBQUFBQTsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zLWxpYi1ib3gtc3RkIC5zLWxpYi1ib3gtdGl0bGUge2JhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Y29sb3I6ICM4ODg7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY2NjYzsKICAgICAgICAgICAgfQogICAgICAgICAgICAucy1saWItYm94IC5zLWxpYi1ib3gtdGl0bGUge2JhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Y29sb3I6ICM4ODg7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY2NjYzsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnMtbGliLWJveCAucy1sZy1ib3gtZm9vdGVyIHsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH08L3N0eWxlPjwhLS0gbG9hZCBmYXZpY29ucyBmb3IgbWlzY2VsbGFuZW91cyBwbGF0Zm9ybXMgLS0+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5pY28iIHNpemVzPSIzMngzMiI+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5zdmciIHR5cGU9ImltYWdlL3N2Zyt4bWwiPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL2FwcGxlLXRvdWNoLWljb24ucG5nIj48IS0tIDE4MMOXMTgwIC0tPgo8bGluayByZWw9Im1hbmlmZXN0IiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9tYW5pZmVzdC5qc29uIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw0MDBpdGFsaWMsNjAwLDYwMGl0YWxpYyw3MDAsNzAwaXRhbGljIj4KCjwhLS1hZGRlZCBieSBEYXJjeSB0byBjb25maXJtIHcvIEdvb2dsZSB3ZWJtYXN0ZXIgdG9vbHMgd2Ugb3duIHRoaXMgc2l0ZS0tPgo8bWV0YSBuYW1lPSJnb29nbGUtc2l0ZS12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjgyQ3YzSEZXdmNlZkNfOVhhdXZnbGNmQjRoM28wdXVpQzNuS1dXa0xfZUUiIC8+Cgo8IS0tbWV0YSB0YWcgdG8gc2NhbGUgbW9iaWxlIGRldmljZSBkaXNwbGF5LS0+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIG1heGltdW0tc2NhbGU9MSI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkgewogIGpRdWVyeSgiaW1nW2FsdD0nbnVsbCddLCBpbWdbYWx0PSdOdWxsJ10sIGltZ1thbHQ9J05VTEwnXSIpLmF0dHIoImFsdCIsICIiKTsKICB2YXIgbGliY2hhdF9lZmM3NWM1NTk0N2RiMzIzZDRmYWFiNzI1Yjc5MzA3ZiA9IHsgaWlkOjU5LCBrZXk6J2ZiMTA0NDY3MzBlMjcxYycsIHdpZHRoOicyNDAnIH07CgogICQoJ2hlYWRlciAubWVudS0tdG9nZ2xlJykuY2xpY2soZnVuY3Rpb24oKXsKICAgICQoJyNuYXYtbWFpbicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTsKICAgICQoJy53cmFwLXBhZ2UnKS50b2dnbGVDbGFzcygnbW9iaWxlLW5hdi1hY3RpdmUnKTsKICB9KTsKCiAgJCggJy5saW5rLXByaW1hcnknICkuYmluZCggIm1vdXNlZW50ZXIiLCBmdW5jdGlvbigpIHsgCiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgICAkKHRoaXMpLmZpbmQoICcubWVudS1jb250cm9sJyApLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgJ3RydWUnICk7CiAgICAkKHRoaXMpLmNsb3Nlc3QoICcubGluay1wcmltYXJ5JyApLmFkZENsYXNzKCAnb3BlbicgKTsKICB9KTsKICAkKCAnLmxpbmstcHJpbWFyeScgKS5iaW5kKCAibW91c2VsZWF2ZSIsIGZ1bmN0aW9uKCkgeyAKICAgICQodGhpcykuZmluZCggJy5tZW51LWNvbnRyb2wnICkuYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnICk7CiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgfSk7CgogIC8vIG1ha2UgZXNjIGNsb3NlIGFsbCBtZW51cwogICQoICcjbmF2LW1haW4nICkub24oICdrZXlkb3duJyAsIGZ1bmN0aW9uKGUpIHsKICAgIGlmIChlLmtleUNvZGUgPT0gMjcpIHsKICAgICAgaGlkZU1lbnUoZSk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIGhpZGVNZW51KCkgewogICAgJCggJy5saW5rLXByaW1hcnknICkucmVtb3ZlQ2xhc3MoICdvcGVuJyApOwogICAgJCggJy5tZW51LWNvbnRyb2wnICkuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOwogICAgJCggJy5saW5rcy1zdWInICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7CiAgfQoKICAvLyB0aGFua3MgdG8gaHR0cDovL2hleWRvbndvcmtzLmNvbS9wcmFjdGljYWxfYXJpYV9leGFtcGxlcy8KICAkKCcubWFpbi1uYXYtaGVhZGVyJykuZWFjaChmdW5jdGlvbigpIHsKCiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwoKICAgIC8vIGNyZWF0ZSB1bmlxdWUgaWQgZm9yIGExMXkgcmVsYXRpb25zaGlwCiAgICB2YXIgaWQgPSAnY29sbGFwc2libGUtJyArICQoICcjbmF2LW1haW4gaDInICkuaW5kZXgodGhpcyk7CgogICAgLy8gaWRlbnRpZnkgcGFuZWwgYW5kIG1ha2UgaXQgZm9jdXNhYmxlCiAgICB2YXIgcGFuZWwgPSAkKHRoaXMpLm5leHQoICcubGlua3Mtc3ViJyApLmF0dHIoICdhcmlhLWhpZGRlbicsICd0cnVlJyApLmF0dHIoICdpZCcsIGlkKTsKCiAgICAvLyBBZGQgZGVmYXVsdCBhcmlhIHN0YXRlcyB0byBidXR0b24KICAgICR0aGlzLmNoaWxkcmVuKCAnLm1lbnUtY29udHJvbCcgKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKS5hdHRyKCAnYXJpYS1jb250cm9scycsIGlkKTsKICAgIHZhciBidXR0b24gPSAkdGhpcy5jaGlsZHJlbiggJy5tZW51LWNvbnRyb2wnICk7CgogICAgLy8gVG9nZ2xlIHRoZSBzdGF0ZSBwcm9wZXJ0aWVzCiAgICBidXR0b24ub24oICdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNsb3Nlc3QoICcubGluay1wcmltYXJ5JyApLnRvZ2dsZUNsYXNzKCAnb3BlbicgKTsKICAgICAgdmFyIHN0YXRlID0gJCh0aGlzKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcgKSA9PT0gJ2ZhbHNlJyA/IHRydWUgOiBmYWxzZTsKICAgICAgJCh0aGlzKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsIHN0YXRlICk7CiAgICAgIHBhbmVsLmF0dHIoICdhcmlhLWhpZGRlbicsICFzdGF0ZSApOwogICAgfSk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci8qIEJhc2ljIGxheW91dCBydWxlcyAqLwoqIHsKICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbCB7CiAgZm9udC1zaXplOiAxNnB4Owp9Cgpib2R5IHsKICBmb250LWZhbWlseTogSGVsdmV0aWNhLCAiT3BlbiBTYW5zIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7IC8qIHdhcyAxMDAlOyAqLwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKfQoKYSB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgY29sb3I6ICMwMDA7Cn0KYTpob3ZlciB7CiAgY29sb3I6ICMwMGY7Cn0KCmgzIHsKICBmb250LXNpemU6IDIwcHg7Cn0KCi5mbGV4LWNvbnRhaW5lciB7CiAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7Cn0KCi5mbGV4LWVuZCB7CiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDsKICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAtbXMtZmxleC1hbGlnbjogZW5kOwogIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKfQoKLnNyIHsKICBib3JkZXI6IDAgbm9uZTsKICBjbGlwOiByZWN0KDFweCwxcHgsMXB4LDFweCk7CiAgaGVpZ2h0OiAxcHg7CiAgbWFyZ2luOiAtMXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDFweDsKICB3b3JkLXdyYXA6IG5vcm1hbDsKfQoKLmxpc3QtdW5idWxsZXRlZCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBwYWRkaW5nLWxlZnQ6IDA7CiAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi8qIE51bWJlcmVkIHNlY3Rpb25zIGJlbG93IGV4dHJhY3RlZCBmcm9tIGdlbmVyYXRlZCwgdW5taW5pZmllZCBwYXJlbnQgdGhlbWUgZ2xvYmFsLmNzcyAqLwoKLyogMS4gSGVhZGVyICYgTmF2ICovCi5oZWFkZXItbWFpbiB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJhY2tncm91bmQ6ICMwMDAgdXJsKCdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2ltYWdlcy92aS1zaGFwZTctdHAucG5nJykgbm8tcmVwZWF0IDAgNjUlOwogIGNsZWFyOiBib3RoOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAgd2lkdGg6IDEwMCU7CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogMCAxZW07CiAgfQp9Ci5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBvcmRlcjogMjsKICBtaW4td2lkdGg6IDc3cHg7CiAgbWluLXdpZHRoOiA0LjgxMjVyZW07CiAgcGFkZGluZy1ib3R0b206IDYuNHB4OwogIHBhZGRpbmctYm90dG9tOiAwLjRyZW07CiAgZm9udC1zaXplOiAxNC40cHg7CiAgZm9udC1zaXplOiAwLjlyZW07CiAgbGluZS1oZWlnaHQ6IDE7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICAgIG1heC13aWR0aDogMTA0cHg7CiAgICBtYXgtd2lkdGg6IDYuNXJlbTsKICAgIG1hcmdpbi1sZWZ0OiAxLjUlOwogICAgcGFkZGluZzogMDsKICB9Cn0KLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IGF1dG87Cn0KLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogIGZpbGw6ICNmZmY7CiAgcGFkZGluZzogOHB4Owp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHN2ZyB7CiAgbWF4LWhlaWdodDogMjhweDsKICBtYXgtaGVpZ2h0OiAxLjc1cmVtOwogIGhlaWdodDogYXV0bzsKICB3aWR0aDogNzVweDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgc3ZnIHsKICAgIG1heC1oZWlnaHQ6IDQ0cHg7CiAgICBtYXgtaGVpZ2h0OiAyLjc1cmVtOwogICAgd2lkdGg6IDEyMHB4OwogIH0KfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYiB0aXRsZSB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYjpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIG9yZGVyOiAxMDAwOwogIHBhZGRpbmc6IDYuNHB4OwogIHBhZGRpbmc6IDAuNHJlbTsKICBjb2xvcjogI2ZmZjsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIGZvbnQtc2l6ZTogMC43NXJlbTsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQ6Zm9jdXMsCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoOmZvY3VzLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLWNvbnRhY3Q6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgc3ZnLAouaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2ggc3ZnLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCBzdmcgewogIGZpbGw6ICNjOGM4Yzg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZy1ib3R0b206IDAuMjVlbTsKICB3aWR0aDogMmVtOwp9Ci5oZWFkZXItbWFpbiAubGluay1hY2NvdW50IGksCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaCBpLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCBpIHsKICBjb2xvcjogI2M4YzhjODsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1zaXplOiAxNHB4Owp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCwKICAuaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCiAgLmhlYWRlci1tYWluIC5saW5rLWNvbnRhY3QgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCB7CiAgbWFyZ2luLWxlZnQ6IDAuNnJlbTsKICBtYXJnaW4tcmlnaHQ6IDAuNnJlbTsKfQouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Ci5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgZGlzcGxheTogbm9uZTsKICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICBvcmRlcjogNDsKICBwYWRkaW5nLXRvcDogMzJweDsKICBwYWRkaW5nLXRvcDogMnJlbTsKICBwYWRkaW5nLWJvdHRvbTogOHB4OwogIHBhZGRpbmctYm90dG9tOiAwLjVyZW07CiAgcGFkZGluZy1sZWZ0OiAwLjVlbTsKICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKICBtYXgtd2lkdGg6IDc0cHg7CiAgbWF4LXdpZHRoOiA3My42cHg7CiAgbWF4LXdpZHRoOiA0LjZyZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9Cn0KLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9Ci5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdDpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0IHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IGF1dG87CiAgbWF4LWhlaWdodDogNDVweDsKICBtYXgtaGVpZ2h0OiAyLjgxMjVyZW07CiAgZmlsbDogI2I5YjdiNjsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0IC5jb2xvciB7CiAgZmlsbDogI2ZmZjsKfQojc2tpcCBhIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTEwMDAwcHg7CiAgdG9wOiBhdXRvOwogIHdpZHRoOiAxcHg7CiAgaGVpZ2h0OiAxcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiBibHVlOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IDEwcHg7Cn0KI3NraXAgYTpmb2N1cyB7CiAgcG9zaXRpb246IHN0YXRpYzsKICB3aWR0aDogYXV0bzsKICBoZWlnaHQ6IGF1dG87Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uby1mbGV4Ym94LmZsZXhib3hsZWdhY3kgLmhlYWRlci1tYWluIC5pY29uLWFjY291bnQsCiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLmljb24tc2VhcmNoIHsKICAgIG1heC1oZWlnaHQ6IDE2cHg7CiAgICBtYXgtaGVpZ2h0OiAxcmVtOwogICAgbWF4LXdpZHRoOiAxNnB4OwogICAgbWF4LXdpZHRoOiAxcmVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLm1lbnUtLXRvZ2dsZSBzdmcgewogICAgaGVpZ2h0OiAxMDAlOwogICAgcGFkZGluZzogMWVtOwogICAgd2lkdGg6IGF1dG87CiAgfQp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiB7CiAgaGVpZ2h0OiA2MnB4OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluICogewogIGhlaWdodDogNjJweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBtYXJnaW4tbGVmdDogMzJweDsKICBtYXgtd2lkdGg6IDEwM3B4Owp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAubG9nby1taXQgewogIG1hcmdpbi10b3A6IDI0cHg7CiAgbWFyZ2luLWxlZnQ6IDQwcHg7Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIC5zbWFsbCB7CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgcGFkZGluZy10b3A6IDI2cHg7CiAgcGFkZGluZy10b3A6IDEuNjI1cmVtOwp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAuc21hbGwgc3ZnIHsKICBkaXNwbGF5OiBub25lOwp9CmJvZHkudXNlci1pcy10YWJiaW5nICoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsubm8tdW5kZXJsaW5lOmZvY3VzIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgYm9keS51c2VyLWlzLXRhYmJpbmcgKi5uYXYtbWFpbiAubWFpbi1uYXYtbGluazpmb2N1cyB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gewogIGZsZXgtd3JhcDogd3JhcDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMDAlKTsKICB6LWluZGV4OiA3MDAwOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5uYXYtbWFpbi5hY3RpdmUgewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXNpemU6IDFyZW07CiAgcGFkZGluZzogMHB4IDhweCA4cHggOHB4OwogIHBhZGRpbmc6IDByZW0gMC41cmVtIDAuNXJlbSAwLjVyZW07CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm94LXNoYWRvdzogMCAzcHggM3B4ICNjY2M7CiAgaGVpZ2h0OiBhdXRvOwogIGZsZXg6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyLjhlbSk7CiAgdG9wOiAwOwogIHdpZHRoOiAxMDAlOwp9Ci5uYXYtbWFpbi5hY3RpdmUgYSB7CiAgd2lkdGg6IDEwMCU7Cn0KLm5hdi1tYWluLmFjdGl2ZSBhOmhvdmVyLAoubmF2LW1haW4uYWN0aXZlIGE6Zm9jdXMgewogIGNvbG9yOiAjZmZmOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLm5hdi1tYWluIHsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogODAwcHgpIHsKICAubmF2LW1haW4gewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG9yZGVyOiAzOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3aWR0aDogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7CiAgfQp9Ci5uYXYtbWFpbiAuc21hbGwgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAuc21hbGwgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDAuNzVlbTsKICB9CiAgLm5hdi1tYWluIC5zbWFsbCBhIHsKICAgIHBhZGRpbmc6IDFyZW0gMC41cmVtIDAuNXJlbSAwLjVyZW07CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgc3ZnIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmlsbDogI2ZmZjsKICAgIG1hcmdpbi1ib3R0b206IDAuNGVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkgewogIC5uYXYtbWFpbiAuc21hbGwgewogICAgZm9udC1zaXplOiAxZW07CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgYSB7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHBhZGRpbmctdG9wOiAyZW07CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgc3ZnIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5uYXYtbWFpbiAuY2hhdCB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5jaGF0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KICAubmF2LW1haW4gLmNoYXQgLmxpbmtzLXN1YiB7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgbWluLXdpZHRoOiA5LjM3NXJlbTsKICAgIGJhY2tncm91bmQ6ICNmM2YzZjM7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC5tb3JlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC53cmFwLWJ1dHRvbi1jaGF0IHsKICAgIG1pbi1oZWlnaHQ6IDQ2cHg7CiAgICBtaW4taGVpZ2h0OiAyLjg3NXJlbTsKICAgIHBhZGRpbmc6IDE2cHggOHB4IDBweCA4cHg7CiAgICBwYWRkaW5nOiAxcmVtIDAuNXJlbSAwcmVtIDAuNXJlbTsKICAgIG1pbi13aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC53cmFwLWJ1dHRvbi1jaGF0ICNsaWJjaGF0X2J0bl93aWRnZXQgewogICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjsKICB9Cn0KLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0IHsKICBkaXNwbGF5OiBibG9jazsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICB9Cn0KLm5hdi1tYWluIC5saW5rLXByaW1hcnkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubGluay1wcmltYXJ5IHsKICAgIHdpZHRoOiBhdXRvOwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeSAubGlua3Mtc3ViIHsKfQoubmF2LW1haW4gLm1haW4tbmF2LWhlYWRlciB7CiAgaGVpZ2h0OiAxMDAlOwogIGZvbnQtc2l6ZTogMTAwJTsKfQoubmF2LW1haW4gLm1haW4tbmF2LWhlYWRlciBidXR0b24gewogIGJvcmRlcjogMDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIHBhZGRpbmc6IDA7Cn0KLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICBwYWRkaW5nOiA4cHg7CiAgcGFkZGluZzogMC41cmVtOwogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nLXRvcDogMmVtOwogIH0KfQoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsuYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiBsaWdodGdyYXk7CiAgYm94LXNoYWRvdzoKICAgIDAgMCAycHggIzQ0NCwKICAgIGluc2V0IDFweCAwIDAgZ3JheSwKICAgIGluc2V0IC0xcHggMCAwIGdyYXksCiAgICBpbnNldCAwIDFweCAwIGdyYXk7Cn0KLm5hdi1tYWluIC5tYWluLW5hdi1saW5rLm5vLXVuZGVybGluZTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGNvbG9yOiAjZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluazpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gLmNvbC0xIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci5uYXYtbWFpbiAuY29sLTIgewogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci5uYXYtbWFpbiAubGlua3Mtc3ViIHsKICBkaXNwbGF5OiBub25lOwogIGxlZnQ6IDA7CiAgbWF4LWhlaWdodDogMDsKICBvcGFjaXR5OiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTAwJTsKICB0cmFuc2l0aW9uOgogICAgbWF4LWhlaWdodCAwLjNzLAogICAgbWFyZ2luIDAuM3MsCiAgICBvcGFjaXR5IDAuM3MsCiAgICBvdmVyZmxvdyAwLjNzLAogICAgcGFkZGluZy10b3AgMC4zcywKICAgIHBhZGRpbmctYm90dG9tIDAuM3M7CiAgd2lkdGg6IDMxLjc1ZW07Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIucHVzaCB7CiAgbGVmdDogYXV0bzsKICByaWdodDogMDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5saW5rLXByaW1hcnkub3BlbiAubWFpbi1uYXYtbGluayB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeS5vcGVuIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubGluay1wcmltYXJ5Lm9wZW4gLmxpbmtzLXN1YiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYm94LXNoYWRvdzogMCAwIDJweCAjNDQ0OwogICAgbWF4LWhlaWdodDogMTAwMHB4OwogICAgb3BhY2l0eTogMTsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwogIH0KfQoubmF2LW1haW4gLmxpbmtzLXN1YiB7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgYSB7CiAgY29sb3I6ICMwMDA7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nOiAwLjVlbTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBhOmhvdmVyLAoubmF2LW1haW4gLmxpbmtzLXN1YiBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3OwogIGNvbG9yOiAjZmZmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBbY2xhc3MqPSJjb2wtIl0gewogIHdpZHRoOiA1MCU7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmFib3V0IHsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDAuNjg3NWVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbSB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDA7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbS5leHRyYSBzcGFuOmZpcnN0LW9mLXR5cGU6YWZ0ZXIgewogIGNvbnRlbnQ6IHVybCguLi8uLi9pbWFnZXMvYXJyb3ctcmlnaHQtc2Z3LnN2Zyk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbTpub3QoLmV4dHJhKTphZnRlciB7CiAgY29udGVudDogdXJsKC4uLy4uL2ltYWdlcy9hcnJvdy1yaWdodC1zZncuc3ZnKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDAuMjVlbTsKfQoubmF2LW1haW4gLmJvdHRvbTpub3QoLmV4dHJhKSBzcGFuOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6YmVmb3JlIHsKICBjb2xvcjogIzAwN2RiODsKICBjb250ZW50OiAifCI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogNHB4Owp9Ci5uYXYtbWFpbiAuaGVhZGluZy1jb2wgewogIG1hcmdpbjogMTZweCAwcHggOHB4IDhweDsKICBtYXJnaW46IDFyZW0gMHJlbSAwLjVyZW0gMC41cmVtOwogIGNvbG9yOiAjMDAwOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMC43NWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgcGFkZGluZy1ib3R0b206IDA7Cn0KLm5hdi1wYWdlIHsKICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7Cn0KLm5vLWNzc3RyYW5zaXRpb25zIC5saW5rLXByaW1hcnkgLmxpbmtzLXN1YiB7CiAgaGVpZ2h0OiAwOwogIG1hcmdpbjogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAwOwp9Ci5uby1jc3N0cmFuc2l0aW9ucyAubGluay1wcmltYXJ5OmhvdmVyIC5saW5rcy1zdWIsCi5uby1jc3N0cmFuc2l0aW9ucyAubGluay1wcmltYXJ5OmZvY3VzIC5saW5rcy1zdWIgewogIGhlaWdodDogYXV0bzsKICBtYXJnaW46IGF1dG87CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgcGFkZGluZzogMTZweDsKICBwYWRkaW5nOiAxcmVtOwogIHdpZHRoOiA2MDBweDsKfQoubmF2LXNlY29uZGFyeSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWRlZGU7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc2l6ZTogMXJlbTsKICBtYXJnaW46IDAgMjBweDsKICB6LWluZGV4OiA3MDAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSB7CiAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgaGVpZ2h0OiAwOwogICAgbWFyZ2luOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBhZGRpbmc6IDA7CiAgfQogIC5uYXYtc2Vjb25kYXJ5LmFjdGl2ZSB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtYXJnaW46IDA7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHBhZGRpbmc6IDA7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IHVsIHsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGk6bnRoLWNoaWxkKG4gKyA0KSB1bCB7CiAgcmlnaHQ6IDA7Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwogIGJveC1zaGFkb3c6IDAgMCAycHggIzQ0NDsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWJhYmFiOwogIGhlaWdodDogYXV0bzsKICBsaW5lLWhlaWdodDogMTsKICBtYXJnaW46IGF1dG87CiAgb3BhY2l0eTogMTsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB3aWR0aDogMTAwJTsKICB6LWluZGV4OiA3MDAwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpob3ZlciBsaSBhIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxNnB4OwogIHBhZGRpbmc6IDFyZW07Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpID4gYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMTZweDsKICBwYWRkaW5nOiAxcmVtOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgPiBhIHsKICAgIGNvbG9yOiB3aGl0ZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIGxpIHsKICBoZWlnaHQ6IDA7CiAgbGluZS1oZWlnaHQ6IDA7CiAgbWFyZ2luOiAwOwogIG9wYWNpdHk6IDA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMDsKfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgdWwgewogIGJveC1zaGFkb3c6IDAgMXB4IDJweCAjNDQ0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMzIwcHg7CiAgd2lkdGg6IDIwcmVtOwp9Ci5uYXYtc2Vjb25kID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50OwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5tb2JpbGUtZGlzcGxheSB7CiAgZGlzcGxheTogbm9uZTsKfQouaGlkZS1tb2JpbGUtbmF2LWxpbmsgewogIGRpc3BsYXk6IG5vbmU7Cn0KLm1lbnUtLXRvZ2dsZSB7CiAgbWluLXdpZHRoOiA1MXB4OwogIG1pbi13aWR0aDogMy4xODc1cmVtOwogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXNpemU6IDFyZW07CiAgYmFja2dyb3VuZDogIzAwMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZmlsbDogI2ViZjVmZjsKICBvcmRlcjogMTsKICB3aWR0aDogMTQuMzc1JTsKICB6LWluZGV4OiA3MDAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubWVudS0tdG9nZ2xlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5tZW51LS10b2dnbGUgc3ZnIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDFlbSBhdXRvOwp9Ci5tZW51LS10b2dnbGU6aG92ZXIsCi5tZW51LS10b2dnbGU6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7CiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKfQoubm8tZmxleGJveCAubGluay1wcmltYXJ5LmNoYXQ6aG92ZXIgLmxpbmtzLXN1YiwKLm5vLWZsZXhib3ggLmxpbmstcHJpbWFyeS5jaGF0OmZvY3VzIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpob3ZlciAubGlua3Mtc3ViIGEsCi5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpmb2N1cyAubGlua3Mtc3ViIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwp9Ci5sdGUtaWU5IC5uYXYtbWFpbiAubGlua3Mtc3ViIHsKICBkaXNwbGF5OiBub25lOwp9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OHB4KSBhbmQgKG1heC13aWR0aDogNzAwcHgpIHsKICAubGluay1wcmltYXJ5IC5zZWFyY2gtbGluayB7CiAgICBwYWRkaW5nLXJpZ2h0OiAyZW07CiAgfQogIC5saW5rLXByaW1hcnkgLmFjY291bnQtbGluayB7CiAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICB9Cn0KCi8qIDIuIEZvb3RlciAqLwouZm9vdGVyLW1haW4gewogIGJhY2tncm91bmQ6ICMwMDAgdXJsKC4uLy4uL2ltYWdlcy92aS1zaGFwZTctdHAucG5nKSBuby1yZXBlYXQgMTAlIGNlbnRlcjsKICBmbGV4LXdyYXA6IHdyYXA7CiAgY2xlYXI6IGJvdGg7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiB7CiAgICBwYWRkaW5nOiAxLjI1ZW0gMS4zNzVlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiB7CiAgICB3aWR0aDogMTAwJTsKICB9Cn0KLmZvb3Rlci1tYWluIGEgewogIGNvbG9yOiAjZjNmM2YzOwp9Ci5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIGZsZXgtd3JhcDogd3JhcDsKICBwYWRkaW5nOiAyZW0gMCAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmlkZW50aXR5IHsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHdpZHRoOiAxMDAlOwogIH0KfQouZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjODA4Mjg1OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjODA4Mjg1OwogIGZsZXgtd3JhcDogd3JhcDsKICBmb250LXNpemU6IDAuODEyNWVtOwogIG1hcmdpbi10b3A6IDJlbTsKICBwYWRkaW5nOiAycmVtIDEuMzc1cmVtOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBmb250LXNpemU6IDAuODc1ZW07CiAgICBtYXJnaW4tdG9wOiAtMjIuNHB4OwogICAgbWFyZ2luLXRvcDogLTEuNHJlbTsKICAgIG1hcmdpbi1sZWZ0OiAxODRweDsKICAgIG1hcmdpbi1sZWZ0OiAxMS41cmVtOwogICAgcGFkZGluZzogMDsKICAgIHotaW5kZXg6IDMwMDA7CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICBtYXJnaW4tdG9wOiAxLjVyZW07CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgbWFyZ2luLWxlZnQ6IDByZW07CiAgfQp9Ci5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSBzcGFuIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNTAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbiB7CiAgICBmb250LXdlaWdodDogMzAwOwogICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHNwYW46bm90KDpsYXN0LW9mLXR5cGUpOmFmdGVyIHsKICAgIGNvbG9yOiAjZGVkZWRlOwogICAgY29udGVudDogInwiOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLWxlZnQ6IDFlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbjpmaXJzdC1vZi10eXBlIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9Cn0KLmZvb3Rlci1tYWluIC5sb2dvLW1pdC1saWIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZpbGw6ICNmZmY7CiAgcGFkZGluZy1sZWZ0OiAxLjM3NWVtOwogIHdpZHRoOiAxMC4zMTI1ZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICAgIG1heC13aWR0aDogOS41ZW07CiAgICB3aWR0aDogOS41ZW07CiAgfQp9Ci5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHN2ZyB7CiAgbWF4LWhlaWdodDogNGVtOwogIG1heC13aWR0aDogOS41ZW07CiAgZmlsbDogI2ZmZjsKfQouZm9vdGVyLW1haW4gLmxvZ28tbWl0LWxpYiB0aXRsZSB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQouZm9vdGVyLW1haW4gLnRleHQtZmluZC11cyB7CiAgY29sb3I6ICNlYmViZWI7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAwLjYyNWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgbWluLXdpZHRoOiA3ZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAudGV4dC1maW5kLXVzIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQouZm9vdGVyLW1haW4gLnNvY2lhbCB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBmbGV4LXdyYXA6IHdyYXA7CiAgcGFkZGluZy1sZWZ0OiAxLjM3NWVtOwogIHdpZHRoOiBhdXRvOwogIG1pbi13aWR0aDogMTJlbTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgewogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBtYXJnaW4tYm90dG9tOiAwLjJlbTsKICAgIHotaW5kZXg6IDQwMDA7CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIGEgewogIHdpZHRoOiAzMyU7Cn0KLmZvb3Rlci1tYWluIC5zb2NpYWwgYTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLnNvY2lhbCBhIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC5mb290ZXItbWFpbiAuc29jaWFsIGE6bm90KDpsYXN0LW9mLXR5cGUpIHsKICAgIG1hcmdpbi1yaWdodDogMC41ZW07CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIFtjbGFzcyo9Imljb24tc29jaWFsIl0gewogIGJhY2tncm91bmQ6ICNkZWRlZGU7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGhlaWdodDogMS41ZW07CiAgcGFkZGluZzogMC4yZW07CiAgd2lkdGg6IDEuNWVtOwp9Ci5mb290ZXItbWFpbiAuc29jaWFsIFtjbGFzcyo9Imljb24tc29jaWFsIl0gcGF0aCB7CiAgZmlsbDogIzQ3NDc0NzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgW2NsYXNzKj0iaWNvbi1zb2NpYWwiXSB7CiAgICBoZWlnaHQ6IDJlbTsKICAgIHBhZGRpbmc6IDAuMmVtOwogICAgd2lkdGg6IDJlbTsKICB9Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSB7CiAgYWxpZ24taXRlbXM6IHN0YXJ0OwogIGJhY2tncm91bmQ6ICMzMzM7CiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgcGFkZGluZzogMS4yNWVtIDEuMzc1ZW07Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAubGljZW5zZSB7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1zaXplOiAwLjY4NzVlbTsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXgtd2lkdGg6IDQwMHB4OwogIG1heC13aWR0aDogMjVyZW07Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAubGljZW5zZSBhIHsKICBjb2xvcjogI2VkZWRlZDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQouZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saW5rLWxvZ28tbWl0IHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW4tcmlnaHQ6IDUwcHg7CiAgbWFyZ2luLXJpZ2h0OiAzLjEyNXJlbTsKICBtaW4td2lkdGg6IDE1MnB4OwogIG1pbi13aWR0aDogOS41cmVtOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGU6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgPiBhLAoubm8tZmxleGJveCAuZm9vdGVyLWluZm8taW5zdGl0dXRlID4gZGl2IHsKICBmbG9hdDogbGVmdDsKfQoubm8tZmxleGJveCAuZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saW5rLWxvZ28tbWl0IHsKICBwYWRkaW5nLXRvcDogMS41ZW07Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1tYWluLmZsZXgtY29udGFpbmVyIHsKICBkaXNwbGF5OiBibG9jazsKICBmbG9hdDogbGVmdDsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW46YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMTAwJTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmlkZW50aXR5IC5sb2dvLW1pdC1saWIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0Owp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgLnNvY2lhbCB7CiAgYm90dG9tOiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIHJpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi10b3A6IDA7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbGVmdDogMjAycHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNzlweDsKICB3aWR0aDogMTAwJTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci5uby1mbGV4Ym94LmZsZXhib3hsZWdhY3kgLmZvb3Rlci1tYWluIHsKICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KLmx0ZS1pZTkubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmlkZW50aXR5IHsKICB3aWR0aDogMTAwJTsKfQoKLyogMy4gbm8tZmxleGJveCBmYWxsYmFja3MgKi8KLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jbGVhciB7CiAgY2xlYXI6IGJvdGgKfQoKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXIgewogIGRpc3BsYXk6IGJsb2NrCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmEsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmJ1dHRvbiwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+ZGl2LAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5mb3JtLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oMSwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+aDIsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmgzLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oZWFkZXIsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmlucHV0LAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5uYXYsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPnNwYW4sCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPnN2ZywKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+dWwgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiBhdXRvCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyOmFmdGVyIHsKICBjbGVhcjogYm90aDsKICBjb250ZW50OiAnJzsKICBkaXNwbGF5OiB0YWJsZQp9Cgoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWl0ZW0gewogIGZsb2F0OiBsZWZ0Cn0KCi8qIDQuIGhpZGluZyBhbmQgc2hvd2luZyBlbGVtZW50cyBiYXNlZCBvbiBtb2JpbGUgY2xhc3NlcyAqLwouaGlkZGVuLW1vYmlsZSB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhpZGRlbi1tb2JpbGUgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQp9Ci5pbmFjdGl2ZS1tb2JpbGUgewogIG9wYWNpdHk6IDA7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMjFweCkgewogIC5pbmFjdGl2ZS1tb2JpbGUgewogICAgb3BhY2l0eTogMTsKICB9Cn0KLmhpZGRlbi1ub24tbW9iaWxlIHsKICBkaXNwbGF5OiBibG9jazsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhpZGRlbi1ub24tbW9iaWxlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9CgovKiBMb2NhbCBvdmVycmlkZXMgZm9yIGxpYmd1aWRlcyAqLwoKLyogUmVzZXQgb25seSB3aGF0IHlvdSBuZWVkICovCi5oZWFkZXItbWFpbiwKZm9vdGVyIHsKICBtYXgtd2lkdGg6IDExNzBweDsgLyogbWF0Y2hlcyAuY29udGFpbmVyICovCiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luOiAwIGF1dG87Cn0KCi5oZWFkZXItbWFpbiB7CiAgcGFkZGluZzogMCAyMHB4Owp9CgouaGVhZGVyLW1haW4gLm5hbWUtc2l0ZSB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjhweCkgewogIC5oZWFkZXItbWFpbj5bY2xhc3MqPWxpbmtdIHsKICAgIGZvbnQtc2l6ZTogOXB4CiAgfQogIC5oZWFkZXItbWFpbiB7CiAgICBwYWRkaW5nOiAwOwogIH0KICAuaGVhZGVyLW1haW4gLm1lbnUtLXRvZ2dsZSB7CiAgICBtYXJnaW46IGF1dG8gMDsKICB9CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KfQoKLyogVGhlIHJ1bGVzIGluIHRoaXMgbWVkaWEgcXVlcnkgcHJpbWFyaWx5IHNldCBhbGlnbm1lbnQgZm9yIHRoZSBsb2dvcyBhbmQgbmF2ICovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAgaGVpZ2h0OiA3NXB4OyAvKiBtYXRjaGVzIGhlaWdodCBvZiBsb2dvcywgaW5jbHVkaW5nIDIwcHggdG9wL2JvdHRvbSBwYWRkaW5nICovCiAgfQogIC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICAgIG1heC13aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluLAogIC5uYXYtbWFpbiAubmF2LW1haW4tbGlzdCwKICAubmF2LW1haW4gLm5hdi1tYWluLWxpc3QgbGksCiAgLm5hdi1tYWluIC5zbWFsbCBhLAogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluayB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgfQogIC5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHsKICAgIHBhZGRpbmc6IDIwcHggMDsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICB9CiAgLm5hdi1tYWluIHsKICAgIG1hcmdpbjogMCAxMHB4OwogIH0KICAuaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCiAgLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgewogICAgcGFkZGluZzogMjBweCAwOwogIH0KICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogIH0KICAubmF2LW1haW4gLm1haW4tbmF2LWxpbmsgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMjBweCA4cHg7CiAgfQogIC5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgICBkaXNwbGF5OiBub25lCiAgfQp9CgovKiA2MzVweCBpcyB0aGUgbWF4aW11bSB3aWR0aCBiZWZvcmUgdGhlIGxvZ29zIHdpbGwgc2hyaW5rIGlmIGJvdGggYXJlIGRpc3BsYXllZCAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYzNXB4KSB7CiAgLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMjBweCAwOwogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIH0KfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsgLyogZmxleC1kaXJlY3Rpb24gYW5kIGFsaWdubWVudCBuZWVkcyB0byBjaGFuZ2Ugd2hlbiB0aGUgU1ZHcyBhcmUgaGlkZGVuICovCiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogIH0KfQoKLmhlYWRlci1tYWluIGgyIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIGJhY2tncm91bmQ6IDAgMDsKfQoKLmhlYWRlci1tYWluIHVsIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIGJhY2tncm91bmQ6IDAgMDsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cn0KCmZvb3RlciBhLApoZWFkZXIgYSB7CiAgY29sb3I6ICMwMDA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CmZvb3RlciBhOmhvdmVyLApmb290ZXIgYTpmb2N1cyB7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCmgxI3MtbGctZ3VpZGUtbmFtZSB7CiAgICBmb250LXNpemU6IDMwcHg7Cn0KCi5zLWxpYi1ib3gtY29udGVudCAudWktd2lkZ2V0IHsKICAgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsICJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAxNnB4OyAvKiB3YXMgMTAwJTsgKi8KICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owp9CgoudGFicyBhIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi51aS13aWRnZXQtY29udGVudCBhIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogIzAwMDsKfQoKLnVpLXdpZGdldC1jb250ZW50IGE6aG92ZXIgewogIGNvbG9yOiAjMDBmOwp9Cgp0YWJsZSwgdGgsIHRkIHsKICAgIHBhZGRpbmc6IDVweDsKfQoKI3MtbGctZ3VpZGUtZGVzY3JpcHRpb24sCiNzLWxnLWd1aWRlLWhlYWRlci1zZWFyY2gsCiNzLWxpYi1iYywKI3MtbGctZ3VpZGUtaGVhZGVyLXVwZGF0ZWQsCiNzLWxnLWd1aWRlLWhlYWRlci11cmwsCiNzLWxnLWd1aWRlLXByaW50LXVybCwKI3MtbGctZ3VpZGUtaGVhZGVyLXN1YmplY3RzLAojcy1sZy1ndWlkZS1oZWFkZXItdGFncyB7CiBkaXNwbGF5Ogogbm9uZTsKfQoKI3MtbGctZ3VpZGUtaGVhZGVyIHsKIG1hcmdpbi10b3A6IDE1cHg7Cn0KCiNzLWxnLWd1aWRlLW5hbWUgewogZm9udC13ZWlnaHQ6IDQwMDsKfQoKLnMtbGliLWJveCAucy1saWItYm94LXRpdGxlIHsKIGZvbnQtc2l6ZTogMThweDsKIGNvbG9yOiAjMTExOwp9Cgoucy1saWItYm94IHsKIGNvbG9yOiAjMTExOwp9Cgoucy1saWItYm94LWNvbnRlbnQgewogcGFkZGluZzogMjBweDsKfQoKLyogSGlkZXMgRW1haWwgTWUgYnV0dG9uKi8KLnMtbGliLXByb2ZpbGUtZW1haWwgPiBhIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qSGlkZXMgd2Vic2l0ZSwgU2t5cGUsICYgU29jaWFsIGxpbmtzIGZyb20gcHJvZmlsZSovCi5mYS1ib29rbWFyaywgLmZhLXNreXBlLCAucy1saWItcHJvZmlsZS1zb2NpYWwgewogZGlzcGxheTogbm9uZTsKfQoKLyogT3ZlcnJpZGluZyB0aGUgYWNjb3JkaW9uIG1hcmt1cCB3aXRoIGNoYW5nZWFibGUgYXJyb3dzICovCi5hY2NvcmRpb24tZ3JvdXAgLmFjY29yZGlvbi10b2dnbGUgewogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgYmFja2dyb3VuZDogdXJsKCdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2ltYWdlcy9saWJndWlkZXMtYXJyb3ctZG93bi5wbmcnKSBuby1yZXBlYXQgbGVmdCBjZW50ZXI7CiAgcGFkZGluZy1sZWZ0OiAxNXB4Owp9Ci5hY2NvcmRpb24tZ3JvdXAgLmFjY29yZGlvbi10b2dnbGUuY29sbGFwc2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaW1hZ2VzL2xpYmd1aWRlcy1hcnJvdy1yaWdodC5wbmcnKQp9CgovKiBCYXJ0b25QbHVzIHNlYXJjaCBib3ggKi8KI3MtbGctYm94LTM1MDA5NzQtY29udGFpbmVyIGlucHV0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQojcy1sZy1ib3gtMzUwMDk3NC1jb250YWluZXIgbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbWF4LXdpZHRoOiA4MCU7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLypIaWRlcyBndWlkZSBhdXRob3IsIGxhc3QgdXBkYXRlZCBkYXRlLCBhbmQgbnVtYmVyIG9mIHZpZXdzIHRoaXMgeWVhciBmcm9tIGd1aWRlIGxpc3RzKi8KLnMtbGctc3lzdGVtLWxpc3QgLnMtbGctZ3VpZGUtbGlzdC1pbmZvIHsKIGRpc3BsYXk6IG5vbmU7CiBmb250LXNpemU6IDAuOWVtOwp9CgovKkhpZGVzICJza2lwIHRvIG1haW4gY29udGVudCIgbGluayBpbiB0b3AgbGVmdCBvZiBiYW5uZXIqLwphI3MtbGctcHVibGljLXNraXBsaW5rIHsgCnBvc2l0aW9uOmFic29sdXRlOyAKbGVmdDotMTAwMDBweDsgCnRvcDphdXRvOyAKd2lkdGg6MXB4OyAKaGVpZ2h0OjFweDsgCm92ZXJmbG93OmhpZGRlbjsKfSAKIAphOmZvY3VzI3MtbGctcHVibGljLXNraXBsaW5rIHsgCnBvc2l0aW9uOnN0YXRpYzsgCndpZHRoOmF1dG87IApoZWlnaHQ6YXV0bzsgCn0gCgovKiBzdGFmZiBjb250YWN0IGNhcmQgc3R5bGVzICovCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1pbWFnZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAKICBtYXJnaW4tcmlnaHQ6IDE1cHg7Cn0KCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1pbmZvIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IAogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1oZWxwIHsKICBkaXNwbGF5OiBibG9jazsKfQoKLyogY3VzdG9taXplIGJyb3d6aW5lIHdpZGdldCAqLwojYnJvd3ppbmVXaWRnZXQgLnNtYWxsV2lkZ2V0IHsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluICFpbXBvcnRhbnQ7Cn0KCiNicm93emluZVdpZGdldCAuc21hbGxXaWRnZXQgLndpZGdldFRleHQgewogIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nOiAxMHB4Owp9CgojYnJvd3ppbmVXaWRnZXQgLndpZGdldFRleHQgLmludHJvIHsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKfQoKLyogY3VzdG9taXplIFdvcmxkY2F0IHNlYXJjaCBib3ggKi8KLnMtbGctYm94LXdyYXBwZXItMjUxOTM2NzEgewogICAgZm9udC1zaXplOiAuOGVtOwp9Ci5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxIC5zLWxpYi1ib3gtY29udGVudCB7CiAgcGFkZGluZzogMCAxZW07Cn0KCi5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxIGlucHV0IHsKICBwYWRkaW5nOiAuNWVtICFpbXBvcnRhbnQ7IAogIG1pbi13aWR0aDogNWVtICFpbXBvcnRhbnQ7IAp9Ci5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxICNkaXNjb3Zlcnktc2VhcmNoLWZvcm0gewogIHBhZGRpbmc6IDFlbTsKfQoKLyogU3R5bGluZyBmb3IgQ09WSUQtMTkgaW5mbyBiYW5uZXIgKi8KLmFsZXJ0LWJhbm5lciB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAxcmVtIGF1dG87CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIHBhZGRpbmc6IDEuNnJlbSAycmVtOwogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMDA7CiAgY29sb3I6ICMwMDA7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQouYWxlcnQtYmFubmVyIC5mYSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogMC41ZW07Cn0KPC9zdHlsZT4KCjwhLS0gU3R5bGluZyBmb3IgQS1aIGRhdGFiYXNlcyAtLT4KPHN0eWxlPgovKiBIaWRlIHRoZSBEYXRhYmFzZSBUeXBlcyBkcm9wZG93biAqLwojY29sLXR5cGVzIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLyogSGlkZSB0aGUgVmVuZG9ycyBkcm9wZG93biAqLwojY29sLXZlbmRvcnMgewogICAgZGlzcGxheTogbm9uZTsKfQovKmNoYW5nZSBhIHRvIHogZGF0YWJhc2UgdGl0bGVzIHRvIGJlIGxhcmdlciAqLwojcy1sZy1hei1yZXN1bHRzIC5zLWxnLWF6LXJlc3VsdC10aXRsZSB7CmZvbnQtc2l6ZTogMS4xZW07Cn0KLypjaGFuZ2UgYSB0byB6IGRhdGFiYXNlcyBhbHRlcm5hdGl2ZSB0aXRsZSBzaXppbmcgKi8KZGl2LnMtbGctYXotcmVzdWx0LWtleXdvcmRzIHsKZm9udC1zaXplOiAuOWVtOwp9Ci8qIENoYW5nZSBsZXR0ZXIgaGVhZGluZyBzaXplcyovCmgzLnMtbGctZGItcGFuZWwtdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxLjNlbTsKfQo8L3N0eWxlPgo8c2NyaXB0PgogICAgdmFyIHNwcmluZ1N0YXRzID0gc3ByaW5nU3RhdHMgfHwge307CiAgICBzcHJpbmdTdGF0cy5zYUNvbmZpZyA9IHNwcmluZ1N0YXRzLnNhQ29uZmlnIHx8IHsKICAgICAgICBzaXRlX2lkOiA2OCwKICAgICAgICB0cmFja2luZ19wYXJhbWV0ZXJzOiB7Il9zdF9ndWlkZV9pZCI6MzgzNDAzLCJfc3RfcGFnZV9pZCI6MjU5Nzk2NSwiX3N0X3NpdGVfaWQiOjY4fSwKICAgICAgICB0cmFja2luZ19zZXJ2ZXJfaG9zdDogImxpYmd1aWRlcy1wcm9jLnNwcmluZ3lhd3MuY29tIgogICAgfTsKPC9zY3JpcHQ+CjxzY3JpcHQgIHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pzL3NhLm1pbi5qcz8zMTE2Ij48L3NjcmlwdD4KPHNjcmlwdD4KCQkJc3ByaW5nU3BhY2UuQ29tbW9uID0gc3ByaW5nU3BhY2UuQ29tbW9uIHx8IHsgfTsKCQkJc3ByaW5nU3BhY2UuQ29tbW9uLmNvbnN0YW50ID0gewoJCQkJCVBST0NFU1NJTkc6IHsKCQkJCQkJQUNUSU9OX0RJU1BMQVlfUE9MTDogMTU5CgkJCQkJfQoJCQl9OwoJCQlzcHJpbmdTcGFjZS5Db21tb24uYmFzZVVSTCA9ICJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1LyI7CgkJCQoJCQloYW5kbGVTY3JvbGw9ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKCQkJCQl2YXIgdGFyZ2V0X2VsdCA9ICIjcy1sZy1wYWdlLXNlY3Rpb24tMjU5Nzk2NSI7CgkJCQkJalF1ZXJ5KCJodG1sLCBib2R5IikuYW5pbWF0ZSh7IHNjcm9sbFRvcDogalF1ZXJ5KHRhcmdldF9lbHQpLm9mZnNldCgpLnRvcCB9LCA3NTApOwoJCQkJCWlmIChqUXVlcnkodGhpcykuc2Nyb2xsVG9wKCkgPiAyMjApIHsKCQkJCQkJalF1ZXJ5KCIjcy1saWItc2Nyb2xsLXRvcCIpLmZhZGVJbig3NTApOwoJCQkJCX0KCQkJCX0KCQkJfQoJICAgPC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgLy8gRW5hYmxlIHRvb2x0aXBzLgogICAgICAgICAgICBqUXVlcnkoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzcHJpbmdTcGFjZS5VSS5pbml0UG9wT3ZlcnMoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgiLmF6LWJzLXRvb2x0aXAiKS50b29sdGlwKCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH0KICAgICAgICAgICAgfSk7CiAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrUGFnZSh7X3N0X3R5cGVfaWQ6ICcxJyxfc3RfZ3VpZGVfaWQ6ICczODM0MDMnLF9zdF9wYWdlX2lkOiAnMjU5Nzk2NSd9KTsKICAgICAgICB9KTsKICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVNjcm9sbCgpOwogICAgICAgICAgICB9KTsKICAgICAgICA8L3NjcmlwdD4KICAgIDwvaGVhZD4KICA8Ym9keSBjbGFzcz0icy1sZy1ndWlkZS1ib2R5Ij4KCjxhIGlkPSJzLWxnLXB1YmxpYy1za2lwbGluayIgY2xhc3M9ImFsZXJ0LWluZm8iIGhyZWY9IiNzLWxnLWd1aWRlLW1haW4iPlNraXAgdG8gTWFpbiBDb250ZW50PC9hPgoKPGhlYWRlciBjbGFzcz0iaGVhZGVyLW1haW4gZmxleC1jb250YWluZXIgZmxleC1lbmQiPgogIDxoMSBjbGFzcz0ibmFtZS1zaXRlIGdyb3VwIG5hdi1sb2dvIj4KICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvIiBjbGFzcz0ibG9nby1taXQtbGliIj48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0bGliLXdvcmRtYXJrLnN2ZyIgYWx0PSJNSVQgTGlicmFyaWVzIGxvZ28iIGhlaWdodD0iMzUiPgogICAgPC9hPjwhLS0gRW5kIE1JVCBMaWJyYXJpZXMgTG9nbyAtLT4KICA8L2gxPjwhLS0gRW5kIGRpdi5uYW1lLXNpdGUgLS0+CiAgPGRpdiBjbGFzcz0ibWVudS0tdG9nZ2xlIj48IS0tIE1vYmlsZSBIYW1idXJnZXIgaWNvbiAtLT4KICAgIDxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE4LjkwOXB4IiBoZWlnaHQ9IjEzLjA5MXB4IiB2aWV3Qm94PSIyLjE4MiA2LjU0NSAxOC45MDkgMTMuMDkxIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDIuMTgyIDYuNTQ1IDE4LjkwOSAxMy4wOTEiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0yLjkwOSw2LjU0NWgxNy40NTRjMC4xOTcsMCwwLjM2NywwLjA3MiwwLjUxMiwwLjIxNmMwLjE0NSwwLjE0NCwwLjIxNiwwLjMxNCwwLjIxNiwwLjUxMXMtMC4wNzEsMC4zNjctMC4yMTYsMC41MTEKICAgIGMtMC4xNDUsMC4xNDQtMC4zMTQsMC4yMTYtMC41MTIsMC4yMTZIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTZDMi4yNTQsNy42MzksMi4xODIsNy40NjksMi4xODIsNy4yNzIKICAgIHMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMUMyLjU0Miw2LjYxNywyLjcxMiw2LjU0NSwyLjkwOSw2LjU0NXogTTIwLjM2MywxMy44MThIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTYKICAgIHMtMC4yMTYtMC4zMTQtMC4yMTYtMC41MTFjMC0wLjE5NiwwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMXMwLjMxNC0wLjIxNiwwLjUxMS0wLjIxNmgxNy40NTRjMC4xOTcsMCwwLjM2NywwLjA3MiwwLjUxMiwwLjIxNgogICAgczAuMjE2LDAuMzE0LDAuMjE2LDAuNTExYzAsMC4xOTctMC4wNzEsMC4zNjctMC4yMTYsMC41MTFTMjAuNTYxLDEzLjgxOCwyMC4zNjMsMTMuODE4eiBNMjAuMzYzLDE5LjYzNkgyLjkwOQogICAgYy0wLjE5NywwLTAuMzY3LTAuMDcxLTAuNTExLTAuMjE2cy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMXMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMWMwLjE0NC0wLjE0NSwwLjMxNC0wLjIxNywwLjUxMS0wLjIxN2gxNy40NTQKICAgIGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE3YzAuMTQ1LDAuMTQ0LDAuMjE2LDAuMzE0LDAuMjE2LDAuNTExcy0wLjA3MSwwLjM2Ni0wLjIxNiwwLjUxMVMyMC41NjEsMTkuNjM2LDIwLjM2MywxOS42MzZ6Ii8+CiAgICA8L3N2Zz4KICA8L2Rpdj48IS0tIGVuZCBoYW1idXJnZXIgaWNvbiAtLT4KICA8bmF2IGlkPSJuYXYtbWFpbiIgY2xhc3M9Im5hdi1tYWluIiBhcmlhLWxhYmVsPSJQcmltYXJ5Ij4KICA8dWwgY2xhc3M9Im5hdi1tYWluLWxpc3QgZmxleC1jb250YWluZXIiPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LXNlYXJjaG1lbnUtdGl0bGUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoIiBjbGFzcz0ibm8tdW5kZXJsaW5lIHNlYXJjaC1saW5rIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPlNlYXJjaDwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPlNlYXJjaCBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1zZWFyY2htZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtc2VhcmNobWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBncm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlN0YXJ0IGhlcmU8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2giPlNlYXJjaCB0b29scyBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC1jb2xsZWN0aW9ucyI+U2VhcmNoIE91ciBDb2xsZWN0aW9ucyA8c3BhbiBjbGFzcz0iYWJvdXQiPkJvb2tzLCBhcnRpY2xlcywgYW5kIG1vcmU8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dvcmxkY2F0Ij5Xb3JsZENhdDxzcGFuIGNsYXNzPSJhYm91dCI+Qm9va3MgJmFtcDsgbW9yZSB3b3JsZHdpZGU8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2F6LnBocCI+RGF0YWJhc2VzIEEtWjxzcGFuIGNsYXNzPSJhYm91dCI+SlNUT1IsIFB1Yk1lZCwgV2ViIG9mIFNjaWVuY2UsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC1yZXNlcnZlcyI+Q291cnNlIHJlc2VydmVzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5BbHNvIHRyeTwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2dvb2dsZS1zY2hvbGFyLXRpcHMiPkdvb2dsZSBTY2hvbGFyIGZvciBNSVQgPHNwYW4gY2xhc3M9ImFib3V0Ij5DaGFuZ2Ugc2V0dGluZ3MgdG8gZ2V0IGJldHRlciBhY2Nlc3M8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2RzcGFjZSI+RFNwYWNlQE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVCByZXNlYXJjaDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZG9tZSI+RG9tZSA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVC1kaWdpdGl6ZWQgaW1hZ2VzLCBtYXBzLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zaXRlLXNlYXJjaCI+U2l0ZSBzZWFyY2g8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PjwhLS0gZW5kIGRpdi5saW5rcy1zdWIgLS0+CiAgICA8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LWhvdXJzbWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ob3VycyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIGZsZXgtZW5kIj5Ib3VycyAmYW1wOyBsb2NhdGlvbnM8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5Ib3VycyAmYW1wOyBsb2NhdGlvbnMgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtaG91cnNtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIGdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TG9jYXRpb25zPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaG91cnMiPkhvdXJzIGFuZCBsb2NhdGlvbnMgaG9tZTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9iYXJrZXIiPkJhcmtlciBMaWJyYXJ5PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2Rld2V5Ij5EZXdleSBMaWJyYXJ5PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2hheWRlbiI+SGF5ZGVuIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcm90Y2giPlJvdGNoIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZGlzdGluY3RpdmUtY29sbGVjdGlvbnMiPkRpc3RpbmN0aXZlIENvbGxlY3Rpb25zPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L211c2ljIj5MZXdpcyBNdXNpYyBMaWJyYXJ5PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2xzYSI+TGlicmFyeSBTdG9yYWdlIEFubmV4PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Vc2luZyB0aGUgTGlicmFyaWVzPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbG9jYXRpb25zIj5NYXAgb2YgbG9jYXRpb25zPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3N0dWR5Ij5TdHVkeSBzcGFjZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZGlzYWJpbGl0aWVzIj5QZXJzb25zIHdpdGggZGlzYWJpbGl0aWVzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvcHlpbmciPlNjYW4gJmFtcDsgcHJpbnQ8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXhoaWJpdHMiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS92aXNpdG9ycyI+VmlzaXRvcnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvdXNlLXBvbGljaWVzIj5MaWJyYXJ5IHVzZSBwb2xpY3k8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PjwhLS0gZW5kIGRpdi5saW5rcy1zdWIgLS0+CiAgICA8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LWJvcnJvd21lbnUtdGl0bGUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYm9ycm93IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPkJvcnJvdyAmYW1wOyByZXF1ZXN0PC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbnUtY29udHJvbCBzciI+Qm9ycm93ICZhbXA7IHJlcXVlc3QgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LWJvcnJvd21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5SZW5ldywgcmVxdWVzdCwgc3VnZ2VzdDwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2JvcnJvdyI+Qm9ycm93ICZhbXA7IHJlcXVlc3QgaG9tZTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2NvdW50cyI+QWNjb3VudHMgb3ZlcnZpZXcgPHNwYW4gY2xhc3M9ImFib3V0Ij5Zb3VyIEFjY291bnQsIElMTGlhZCwgQWVvbiwgZXRjLjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoLWNvbGxlY3Rpb25zIj5TZWFyY2ggT3VyIENvbGxlY3Rpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBvd25lZCBieSBNSVQ8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dvcmxkY2F0Ij5Xb3JsZENhdCA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgbm90IG93bmVkIGJ5IE1JVDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaWxsaWFkIj5JTExpYWQgPHNwYW4gY2xhc3M9ImFib3V0Ij5UcmFjayB5b3VyIEludGVybGlicmFyeSBCb3Jyb3dpbmcgcmVxdWVzdHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3N1Z2dlc3QtcHVyY2hhc2UiPlN1Z2dlc3QgYSBwdXJjaGFzZTwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TW9yZSBpbmZvcm1hdGlvbjwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYm9ycm93LWRpcmVjdCI+Qm9ycm93IERpcmVjdCA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgZnJvbSBIYXJ2YXJkLCBZYWxlLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9vdGhlcmxpYnJhcmllcyI+VmlzaXQgbm9uLU1JVCBsaWJyYXJpZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5IYXJ2YXJkLCBCb3Jyb3cgRGlyZWN0LCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2xpPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LXJlc2VhcmNobWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPlJlc2VhcmNoIHN1cHBvcnQ8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5SZXNlYXJjaCBzdXBwb3J0IG1lbnU8L2J1dHRvbj4KICAgICAgPC9oMj4KICAgICAgPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LXJlc2VhcmNobWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LXJlc2VhcmNobWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBwdXNoIGdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+SGVscCAmYW1wOyB1c2VmdWwgdG9vbHM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0Ij5SZXNlYXJjaCBzdXBwb3J0IGhvbWU8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXNrIj5Bc2sgdXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5FbWFpbCwgY2hhdCwgY2FsbCwgZHJvcCBieTwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXhwZXJ0cyI+UmVzZWFyY2ggZ3VpZGVzICZhbXA7IGV4cGVydCBsaWJyYXJpYW5zIDxzcGFuIGNsYXNzPSJhYm91dCI+Rm9yIGV2ZXJ5IHJlc2VhcmNoIGludGVyZXN0PC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hdXRoZW50aWNhdGUiPkF1dGhlbnRpY2F0ZSB0byBvbmxpbmUgcmVzb3VyY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+VGlwcyAmYW1wOyB0cmlja3M8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5QdWJsaXNoaW5nICZhbXA7IGNvbnRlbnQgbWFuYWdlbWVudDwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3JlZmVyZW5jZXMiPkNpdGF0aW9uICZhbXA7IHdyaXRpbmcgdG9vbHMgPHNwYW4gY2xhc3M9ImFib3V0Ij5NZW5kZWxleSwgWm90ZXJvLCAmYW1wOyBPdmVybGVhZjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY2l0aW5nIj5DaXRpbmcgc291cmNlcyA8c3BhbiBjbGFzcz0iYWJvdXQiPkF2b2lkIHBsYWdpYXJpc20sIGZvcm1hdCByZWZlcmVuY2VzLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kYXRhLXNlcnZpY2VzIj5EYXRhIHNlcnZpY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+R0lTLCBkYXRhIG1hbmFnZW1lbnQsIHN0YXRpc3RpY2FsIHN1cHBvcnQ8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NjaG9sYXJseSI+U2Nob2xhcmx5IGNvbW11bmljYXRpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+T3BlbiBhY2Nlc3MsIGNvcHlyaWdodCwgJmFtcDsgcHVibGlzaGluZzwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBpcyI+QVBJcyBmb3Igc2Nob2xhcmx5IHJlc291cmNlczwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2Fib3V0IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPkFib3V0PC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbnUtY29udHJvbCBzciI+QWJvdXQgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYWJvdXRtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5BYm91dCB0aGUgTGlicmFyaWVzPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWJvdXQvIj5BYm91dCB1cyBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvbnRhY3QiPkNvbnRhY3QgdXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvam9icyI+Sm9iczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9naXZpbmciPkdpdmluZyB0byB0aGUgTUlUIExpYnJhcmllczwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TmV3cywgZXZlbnRzLCAmYW1wOyBleGhpYml0czwvaDM+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2V2ZW50cyI+Q2xhc3NlcyAmYW1wOyBldmVudHM8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L25ld3MiPk5ld3M8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2V4aGliaXRzIj5FeGhpYml0cyAmYW1wOyBnYWxsZXJpZXM8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L25ld3MvaW4tdGhlLW1lZGlhIj5JbiB0aGUgbWVkaWE8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L21pdC1yZWFkcy8iPk1JVCBSZWFkczwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCBzbWFsbCBjaGF0IHB1c2giPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LWFza3VzbWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hc2siIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayI+PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNi41OTNweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYuNTkzIDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNi41OTMgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0xNi41OTMgNi4yNzhjMCAxLjA3NC0wLjA3NCAyLjE0OC0wLjI0MSAzLjE4NSAtMC4yMDQgMS4zNTMtMS43MjIgMi41NzQtMy4wNTUgMi43MjIgLTEuMzUzIDAuMTMxLTIuNjg2IDAuMjA0LTQuMDIgMC4yMjNMNS43NCAxNS44MzNDNS42MyAxNS45NDQgNS40ODEgMTYgNS4zMzQgMTZjLTAuMDk0IDAtMC4xNjctMC4wMTktMC4yNDEtMC4wMzdDNC44NzEgMTUuODcgNC43NCAxNS42NDcgNC43NCAxNS40MDdWMTIuMzdjLTAuNDgxLTAuMDM2LTAuOTYzLTAuMDU1LTEuNDQzLTAuMTExIC0xLjMzNC0wLjE0OC0yLjg1My0xLjQ0My0zLjA3NC0yLjc5NkMwLjA3NCA4LjQyNiAwIDcuMzUyIDAgNi4yOTZjMC0xLjA5MiAwLjA3NC0yLjE4NSAwLjIyMy0zLjI0IDAuMjIyLTEuMzUyIDEuNzQtMi42NDggMy4wNzQtMi43OTdDNC45NjMgMC4wOTMgNi42MyAwIDguMjk3IDBzMy4zMzMgMC4wOTMgNSAwLjI1OWMxLjMzMyAwLjE0OSAyLjg1MSAxLjQ0NSAzLjA1NSAyLjc5N0MxNi41MTkgNC4xMTEgMTYuNTkzIDUuMjA0IDE2LjU5MyA2LjI3OCIvPjwvc3ZnPjxzcGFuPkFzayBVczwvc3Bhbj48L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5Bc2sgdXMgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYXNrdXNtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYXNrdXNtZW51IiBjbGFzcz0ibGlua3Mtc3ViIHB1c2giPgogICAgICAgIDxkaXYgY2xhc3M9IndyYXAtYnV0dG9uLWNoYXQiPgogICAgICAgIDxkaXYgaWQ9J2xpYmNoYXRfYmUyYzY1NGI2M2RkNDNmMzFjNTYyOTVlZTVkNzhkODgnPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxhIGNsYXNzPSJtb3JlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FzayI+TW9yZSB3YXlzIHRvIGFzayB1czwvYT4KICAgICAgPC9kaXY+CiAgICA8L2xpPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQgc21hbGwiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2NvdW50cyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIGFjY291bnQtbGluayI+CiAgICAgICAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUuNCIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE1LjQgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE1LjQ0NSAxNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEzLjQgMTUuN0MxMi4yIDE1LjkgMTAuNCAxNiA3LjcgMTZjLTUuNCAwLTcuMy0wLjYtNy4zLTAuNiAtMC4zLTAuMS0wLjQtMC40LTAuNC0wLjcgMC4zLTEuNiAxLjItMi41IDIuNS0zLjMgMC4zLTAuMiAwLjgtMC40IDEuMi0wLjYgMC44LTAuMyAxLjgtMC43IDItMS4zQzUuOCA5LjIgNS43IDguNiA1LjIgNy45Yy0xLjQtMi4zLTEuNy00LjMtMC44LTUuOUM1LjEgMC43IDYuNCAwIDcuNyAwYzEuNCAwIDIuNiAwLjcgMy4zIDIgMC45IDEuNiAwLjcgMy42LTAuOCA1LjlDOS44IDguNiA5LjYgOS4yIDkuOCA5LjZjMC4yIDAuNiAxLjIgMSAyIDEuMyAwLjQgMC4yIDAuOSAwLjQgMS4yIDAuNiAxLjIgMC44IDIuMSAxLjYgMi41IDMuMyAwLjEgMC4zLTAuMSAwLjYtMC40IDAuN0MxNSAxNS40IDE0LjUgMTUuNiAxMy40IDE1LjciLz48L3N2Zz48c3Bhbj5BY2NvdW50PC9zcGFuPgogICAgICAgIDwvYT4KICAgICAgPC9oMj4KICAgIDwvbGk+CiAgPC91bD4KICA8L25hdj4KICA8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cDovL3d3dy5taXQuZWR1Ij48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0X2xvZ29fc3RkX3JnYl93aGl0ZS5zdmciIGFsdD0iTUlUIGxvZ28iIGhlaWdodD0iMzUiPjwvYT4KICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaCIgY2xhc3M9Imxpbmstc2l0ZS1zZWFyY2ggaGlkZGVuLW5vbi1tb2JpbGUiPgogICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEyIiBhbHQ9InNlYXJjaCIgY2xhc3M9Imljb24tc2VhcmNoIj48cGF0aCBkPSJNNy4yNzMgMC43MjdxMS4xODcgMCAyLjE5IDAuNTg1dDEuNTg4IDEuNTg4IDAuNTg1IDIuMTktMC41ODUgMi4xOS0xLjU4OCAxLjU4OC0yLjE5IDAuNTg1cS0xLjI3OCAwLTIuMzMtMC42NzZsLTMuMjg0IDMuMzAxcS0wLjI5NSAwLjI4NC0wLjY4OCAwLjI4NC0wLjQwMyAwLTAuNjg4LTAuMjg0dC0wLjI4NC0wLjY4OCAwLjI4NC0wLjY4OGwzLjMwMS0zLjI4NHEtMC42NzYtMS4wNTEtMC42NzYtMi4zMyAwLTEuMTg4IDAuNTg1LTIuMTl0MS41ODgtMS41ODggMi4xOS0wLjU4NXpNNy4yNzMgOHEwLjU5MSAwIDEuMTI4LTAuMjN0MC45MjktMC42MjIgMC42MjItMC45MjkgMC4yMy0xLjEyOC0wLjIzLTEuMTI4LTAuNjIyLTAuOTI5LTAuOTI5LTAuNjIyLTEuMTI4LTAuMjMtMS4xMjggMC4yMy0wLjkyOSAwLjYyMi0wLjYyMiAwLjkyOS0wLjIzIDEuMTI4IDAuMjMgMS4xMjggMC42MjIgMC45MjkgMC45MjkgMC42MjIgMS4xMjggMC4yM3oiPjwvcGF0aD4KICAgIDwvc3ZnPgogICAgPHNwYW4gY2xhc3M9ImJvdHRvbSI+U2VhcmNoPC9zcGFuPgogIDwvYT4KICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY291bnRzIiBjbGFzcz0ibGluay1hY2NvdW50IGhpZGRlbi1ub24tbW9iaWxlIj4KICAgIDxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0iaWNvbi1hY2NvdW50Ij48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPgogICAgPHNwYW4gY2xhc3M9ImJvdHRvbSI+QWNjb3VudDwvc3Bhbj4KICA8L2E+Cgo8L2hlYWRlcj4KCgo8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlciIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1oZWFkZXIgcy1saWItc2lkZS1ib3JkZXJzIj4KICAgIDxuYXYgaWQ9InMtbGliLWJjIiBhcmlhLWxhYmVsPSJicmVhZGNydW1iIj4KICAgICAgICA8b2wgaWQ9InMtbGliLWJjLWxpc3QiIGNsYXNzPSJicmVhZGNydW1iIj48bGkgaWQ9InMtbGliLWJjLWN1c3RvbWVyIiBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1Ij5NSVQ8L2E+PC9saT48bGkgaWQ9InMtbGliLWJjLXNpdGUiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvIj5MaWJHdWlkZXM8L2E+PC9saT48bGkgaWQ9InMtbGliLWJjLWd1aWRlIiBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2JpemNhdCI+QnVzaW5lc3MgRGF0YWJhc2VzIGJ5IENhdGVnb3J5PC9hPjwvbGk+PGxpIGlkPSJzLWxpYi1iYy1wYWdlIiBjbGFzcz0iYWN0aXZlIGJyZWFkY3J1bWItaXRlbSI+QW5hbHlzdCByZXBvcnRzPC9saT48L29sPgogICAgPC9uYXY+CgogICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItc2VhcmNoIj4KICAgICAgICAgICAgCjxkaXYgaWQ9InMtbGctZ3VpZGUtc2VhcmNoLWJveCI+CiAgICA8Zm9ybSByb2xlPSJzZWFyY2giIGlkPSJzLWxnLWd1aWRlLXNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvc3JjaC5waHAiIG1ldGhvZD0iR0VUIj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSI+CiAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgIHR5cGU9InRleHQiIAogICAgICAgICAgICAgICAgaWQ9InMtbGctZ3VpZGUtc2VhcmNoLXRlcm1zIiAKICAgICAgICAgICAgICAgIG5hbWU9InEiIAogICAgICAgICAgICAgICAgY2xhc3M9ImZvcm0tY29udHJvbCIKICAgICAgICAgICAgICAgIG1heGxlbmd0aD0iMjYwIiAKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggdGhpcyBHdWlkZSI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJzci1vbmx5IiBmb3I9InMtbGctZ3VpZGUtc2VhcmNoLXRlcm1zIj5TZWFyY2ggdGhpcyBHdWlkZTwvbGFiZWw+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZ3VpZGVfaWQiIHZhbHVlPSIzODM0MDMiPgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnB1dC1ncm91cC1idG4iPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPgogICAgICAgICAgICAgICAgICAgIFNlYXJjaAogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZm9ybT4KPC9kaXY+CgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItaW5mbyI+CiAgICAgICAgPGgxIGlkPSJzLWxnLWd1aWRlLW5hbWUiPkJ1c2luZXNzIERhdGFiYXNlcyBieSBDYXRlZ29yeTogQW5hbHlzdCByZXBvcnRzPC9oMT4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWRlc2MtY29udGFpbmVyIj4KICAgICAgICAgICAgPHNwYW4gaWQ9InMtbGctZ3VpZGUtZGVzY3JpcHRpb24iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctdGFicy1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIHBhZC10b3AtbWVkIj4KICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicyIgY2xhc3M9InRhYnMiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ikd1aWRlIFBhZ2VzIj4KICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyBzcGxpdC1idXR0b24tbmF2Ij4KICAgICAgICAgICAgCgoKICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KICAgICAgICA8YSB0aXRsZT0iIiBjbGFzcz0iYWN0aXZlIiAKICAgICAgICAgICBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2JpemNhdC9hbmFseXN0cyIgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuPkFuYWx5c3QgcmVwb3J0czwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgICAgIAogICAgPC9saT4KCgoKICAgIDxsaSBjbGFzcz0iIj4KICAgICAgICA8YSB0aXRsZT0iIiBjbGFzcz0iIiAKICAgICAgICAgICBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2JpemNhdC9hcnRpY2xlcyIgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuPkFydGljbGVzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKCgogICAgPGxpIGNsYXNzPSIiPgogICAgICAgIDxhIHRpdGxlPSIiIGNsYXNzPSIiIAogICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYml6Y2F0L2NvbXBhbmllcyIgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuPkNvbXBhbmllczwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgICAgIAogICAgPC9saT4KCgoKICAgIDxsaSBjbGFzcz0iIj4KICAgICAgICA8YSB0aXRsZT0iIiBjbGFzcz0iIiAKICAgICAgICAgICBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2JpemNhdC9jb3VudHJpZXMiIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgPgogICAgICAgICAgICA8c3Bhbj5Db3VudHJpZXM8L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgIDwvYT4KICAgICAgICAKICAgIDwvbGk+CgoKCiAgICA8bGkgY2xhc3M9IiI+CiAgICAgICAgPGEgdGl0bGU9IiIgY2xhc3M9IiIgCiAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9iaXpjYXQvZWNvbmluZGljYXRvcnMiIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgPgogICAgICAgICAgICA8c3Bhbj5FY29ub21pYyBpbmRpY2F0b3JzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKCgogICAgPGxpIGNsYXNzPSIiPgogICAgICAgIDxhIHRpdGxlPSIiIGNsYXNzPSIiIAogICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYml6Y2F0L2Zpbm1hcmtldCIgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuPkZpbmFuY2lhbCBtYXJrZXRzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKCgogICAgPGxpIGNsYXNzPSIiPgogICAgICAgIDxhIHRpdGxlPSIiIGNsYXNzPSIiIAogICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYml6Y2F0L2luZHVzdHJpZXMiIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgPgogICAgICAgICAgICA8c3Bhbj5JbmR1c3RyaWVzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKCgogICAgPGxpIGNsYXNzPSIiPgogICAgICAgIDxhIHRpdGxlPSIiIGNsYXNzPSIiIAogICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYml6Y2F0L21yIiAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgID4KICAgICAgICAgICAgPHNwYW4+TWFya2V0IHJlc2VhcmNoPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKICAgICAgICA8L3VsPgogICAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0icy1sZy1ndWlkZS10YWJzLXRpdGxlLWJhciIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1zaWRlLWJvcmRlcnMiPjwvZGl2PgoKPGRpdiBpZD0icy1sZy1ndWlkZS1tYWluIiBjbGFzcz0iY29udGFpbmVyIHMtbGliLW1haW4gcy1saWItc2lkZS1ib3JkZXJzIiB0YWJpbmRleD0iLTEiPgogICAgCiAgICA8ZGl2IGNsYXNzPSJyb3cgcy1sZy1yb3ciPjxkaXYgaWQ9InMtbGctY29sLTEyNiIgY2xhc3M9ImNvbC1tZC0xMiI+PGRpdiBjbGFzcz0icy1sZy1jb2wtYm94ZXMiPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJvdyBzLWxnLXJvdyI+PGRpdiBpZD0icy1sZy1jb2wtMSIgY2xhc3M9ImNvbC1tZC0zIj48ZGl2IGNsYXNzPSJzLWxnLWNvbC1ib3hlcyI+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci0xMDU1NzI3MCIgY2xhc3M9InMtbGctYm94LXdyYXBwZXItMTA1NTcyNzAiPgoKCiAgICA8ZGl2IGlkPSJzLWxnLWJveC04OTU2NjgwLWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTg5NTY2ODAiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGUgdGhpcyBzaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTg5NTY2ODAiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAKCQkJPGRpdiBpZD0icy1sZy1jb250ZW50LTE4MTIzOTUyIiBjbGFzcz0iICBjbGVhcmZpeCI+CgkJCQk8cD48YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYnVzaW5lc3MiPkJ1c2luZXNzIHJlc291cmNlcyBob21lICZhbXA7IHJlbGF0ZWQgZ3VpZGVzPC9hPjwvcD4KCjxwPjxzdHJvbmc+SnVtcCB0bzo8L3N0cm9uZz48L3A+Cgo8dWw+Cgk8bGk+PGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9MzgzNDAzJmFtcDtwPTI1OTc5NjUiPkFuYWx5c3QgcmVwb3J0czwvYT48L2xpPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9jLnBocD9nPTM4MzQwMyZhbXA7cD0yNTk4MDAyIj5BcnRpY2xlczwvYT48L2xpPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9jLnBocD9nPTM4MzQwMyZhbXA7cD0yNTk4MzYyIj5Db21wYW5pZXM8L2E+PC9saT4KCTxsaT48YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0zODM0MDMmYW1wO3A9MjY0NTI3NyI+Q291bnRyaWVzPC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9MzgzNDAzJmFtcDtwPTI2MDgxMDYiPkVjb25vbWljIGluZGljYXRvcnM8L2E+PC9saT4KCTxsaT48YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0zODM0MDMmYW1wO3A9MjYwODAxNyI+RmluYW5jaWFsIE1hcmtldHM8L2E+PC9saT4KCTxsaT48YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0zODM0MDMmYW1wO3A9MjYwOTM3NSI+SW5kdXN0cmllczwvYT48L2xpPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9jLnBocD9nPTM4MzQwMyZhbXA7cD0yNjA4MjA3Ij5NYXJrZXQgUmVzZWFyY2g8L2E+PC9saT4KPC91bD4KCjxwPjxzdHJvbmc+U2VlIGFsc286PC9zdHJvbmc+PC9wPgoKPHA+PGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2Jpei1hdG96Ij5CdXNpbmVzcyBkYXRhYmFzZXMgQS1aPC9hPjwvcD4KCQkgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMTA3MzI5NzEiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTEwNzMyOTcxIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtOTEwNzQyNy1jb250YWluZXIiIGNsYXNzPSJzLWxpYi1ib3gtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC05MTA3NDI3IiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIEJ1c2luZXNzICYgTWFuYWdlbWVudCBMaWJyYXJpYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtOTEwNzQyNyIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIAoJCQk8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtMTg0MzIyNDYiIGNsYXNzPSIgIGNsZWFyZml4Ij4KCQkJCTxwPjxzdHJvbmc+U2hpa2hhIFNoYXJtYTwvc3Ryb25nPjwvcD4KCjxwPkNvbnRhY3Q6IDxhIGhyZWY9Im1haWx0bzpzaGFybWFzaEBtaXQuZWR1Ij5zaGFybWFzaEBtaXQuZWR1PC9hPjxicj4KPGEgaHJlZj0iaHR0cDovL2xpYnJhcmllcy5taXQuZWR1L2Rld2V5Ij5Sb29tIEU1My0xNjhLPC9hPjxicj4KNjE3LjI1My41NjcwPC9wPgoJCSAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci0xMDczMjk2NCIgY2xhc3M9InMtbGctYm94LXdyYXBwZXItMTA3MzI5NjQiPgoKCiAgICA8ZGl2IGlkPSJzLWxnLWJveC04MzA2NDc2LWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTgzMDY0NzYiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgTW9yZSB3YXlzIHRvIGdldCBoZWxwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTgzMDY0NzYiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAKCQkJPGRpdiBpZD0icy1sZy1jb250ZW50LTE2NzAyNTQwIiBjbGFzcz0iICBjbGVhcmZpeCI+CgkJCQk8ZGl2IGlkPSJsaWJjaGF0XzdhZTQ4OGZjOGEyMzFiYjhjMDE3ZTliNWUzODFmOTI0Ij48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvL3YyLmxpYmFuc3dlcnMuY29tL2xvYWRfY2hhdC5waHA/aGFzaD03YWU0ODhmYzhhMjMxYmI4YzAxN2U5YjVlMzgxZjkyNCI+PC9zY3JpcHQ+Cgo8cD4mbmJzcDs8L3A+Cgo8cD48Zm9udCBzaXplPSI0Ij48Yj48YSBocmVmPSJodHRwOi8vbGlicmFyaWVzLm1pdC5lZHUvYXNrIj5Bc2sgVXM8L2E+PC9iPjwvZm9udD48YnIgLz4KQXNrIGEgcXVlc3Rpb24sIG1ha2UmbmJzcDthbiBhcHBvaW50bWVudCwgZ2l2ZSZuYnNwO2ZlZWRiYWNrLCBvciB2aXNpdCB1cy48L3A+CgkJICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJzLWxnLWNvbC0yIiBjbGFzcz0iY29sLW1kLTkiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTI1MTc4MzIxIiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci0yNTE3ODMyMSI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTIxNDY1NjE2LWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTIxNDY1NjE2IiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIEFuYWx5c3QgUmVwb3J0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0yMTQ2NTYxNiIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIAoKICAgIDxkaXYgY2xhc3M9IiI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWxpbmstbGlzdC01MTA4OTA0MyIKICAgICAgICAgICAgY2xhc3M9InMtbGctbGluay1saXN0IHMtbGctbGluay1saXN0LTIiPgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTQ4MjgwNzAyIiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvY2FwaXEiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs0ODI4MDcwMiYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQ2FwaXRhbCBJUQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNDgyODA3MDIiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIENsaWNrIG9uIFJlc2VhcmNoIHRhYiB0byBmaW5kIENGUkEgRXF1aXR5IFJlcG9ydHMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1sZy1sYWJlbC1tb3JlaW5mbyI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJzLWxnLWxhYmVsLW1vcmUiIGlkPSJzLWxnLWNvbnRlbnQtbW9yZS00ODI4MDcwMiIKICAgICAgICAgICAgICAgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IGZvbnQtc3R5bGU6aXRhbGljOyIKICAgICAgICAgICAgICAgb25jbGljaz0iICAgIHZhciAkcGFyZW50ID0galF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJyNzLWxnLWNvbnRlbnQtNDgyODA3MDInKTsKICAgICRwYXJlbnQuZmluZCgnI3MtbGctY29udGVudC1tb3JlaW5mby00ODI4MDcwMicpLnRvZ2dsZSgpOwogICAgJHBhcmVudC5maW5kKCcjcy1sZy1jb250ZW50LWxlc3MtNDgyODA3MDInKS50b2dnbGUoKTsKICAgICRwYXJlbnQuZmluZCgnI3MtbGctY29udGVudC1tb3JlLTQ4MjgwNzAyJykudG9nZ2xlKCk7CiI+CiAgICAgICAgICAgICAgICBtb3JlLi4uCiAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9InMtbGctbGFiZWwtbGVzcyIgaWQ9InMtbGctY29udGVudC1sZXNzLTQ4MjgwNzAyIgogICAgICAgICAgICAgICBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBzdHlsZT0iZGlzcGxheTpub25lOyBmb250LXN0eWxlOml0YWxpYzsiCiAgICAgICAgICAgICAgIG9uY2xpY2s9IiAgICB2YXIgJHBhcmVudCA9IGpRdWVyeSh0aGlzKS5jbG9zZXN0KCcjcy1sZy1jb250ZW50LTQ4MjgwNzAyJyk7CiAgICAkcGFyZW50LmZpbmQoJyNzLWxnLWNvbnRlbnQtbW9yZWluZm8tNDgyODA3MDInKS50b2dnbGUoKTsKICAgICRwYXJlbnQuZmluZCgnI3MtbGctY29udGVudC1sZXNzLTQ4MjgwNzAyJykudG9nZ2xlKCk7CiAgICAkcGFyZW50LmZpbmQoJyNzLWxnLWNvbnRlbnQtbW9yZS00ODI4MDcwMicpLnRvZ2dsZSgpOwoiPgogICAgICAgICAgICAgICAgbGVzcy4uLgogICAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0icy1sZy1jb250ZW50LW1vcmVpbmZvLTQ4MjgwNzAyIiBjbGFzcz0icy1sZy1jb250ZW50LW1vcmVpbmZvIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgICAgICAgIE5ldyB1c2VycyBjYW4gcmVnaXN0ZXIgZm9yIGFuIGFjY291bnQgYnkgZm9sbG93aW5nIHRoZSAgTmV3IFVzZXI/IGxpbmsgb24gdGhlIHNjcmVlbi4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NTIyOTc0NSIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd29ya3NwYWNlLnJlZmluaXRpdi5jb20vd2ViIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjUyMjk3NDUmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIExTRUcgV29ya3NwYWNlCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NTIyOTc0NSIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgTFNFRyBXb3Jrc3BhY2UgaXMgdGhlIG5ldyBuYW1lIGFuZCBpbnRlcmZhY2UgZm9yIFRob21zb25PTkUgZGF0YWJhc2UuIFRvIGZpbmQgYW5hbHlzdCByZXBvcnRzICBmb3IgYSBzcGVjaWZpYyBjb21wYW55IChhbHNvIGtub3duIGFzIHNlbGwtc2lkZSwgYWZ0ZXJtYXJrZXQsIGJyb2tlciwgb3IgZXF1aXR5IHJlc2VhcmNoKSwgc2VhcmNoIGJ5IHRpY2tlciBzeW1ib2wgb3IgY29tcGFueSBuYW1lIGluIHRoZSB0b3Agc2VhcmNoIGJveC4gVGhlbiwgdW5kZXIgTmV3cyAmIFJlc2VhcmNoIG1lbnUsIGNsaWNrIG9uIENvbXBhbnkgUmVzZWFyY2guIFVzZSBmaWx0ZXJzIG9uIHRoZSBsZWZ0IHRvIHJlZmluZSB5b3VyIHNlYXJjaC4gVG8gc2NyZWVuIGZvciBhbmFseXN0IHJlcG9ydHMgYmFzZWQgb24gYSBzZXQgb2YgY3JpdGVyaWEsIGVudGVyIEFEVlJFUyBpbiB0aGUgc2VhcmNoIGJveCB0byBnZXQgYSBtZW51IGZvciBhZHZhbmNlZCByZXNlYXJjaC4gVXNlIGZpbHRlcnMgb24gdGhlIGxlZnQgdG8gcmVmaW5lIHlvdXIgc2VhcmNoIGJ5IGluZHVzdHJ5LCBnZW9ncmFwaHksIGNvbnRyaWJ1dG9yLCBrZXl3b3JkcyBpbiB0aGUgdGV4dCwgYW5kIG1vcmUuPGJyIC8+DQo8YnIgLz4NCk5vdGU6IFRoZXJlIGlzIGEgZGFpbHkgbGltaXQgb2YgMTUwIHBhZ2VzIGZvciB2aWV3aW5nIGFuZCBkb3dubG9hZGluZyBhbmFseXN0IHJlcG9ydHMuICBUaGlzIGxpbWl0IHJlc2V0cyBhdCAxMjowMCBBTSBFYXN0ZXJuIFRpbWUgZGFpbHkuCiAgICAgICAgPC9kaXY+CiAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1sZy1sYWJlbC1tb3JlaW5mbyI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJzLWxnLWxhYmVsLW1vcmUiIGlkPSJzLWxnLWNvbnRlbnQtbW9yZS02NTIyOTc0NSIKICAgICAgICAgICAgICAgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IGZvbnQtc3R5bGU6aXRhbGljOyIKICAgICAgICAgICAgICAgb25jbGljaz0iICAgIHZhciAkcGFyZW50ID0galF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJyNzLWxnLWNvbnRlbnQtNjUyMjk3NDUnKTsKICAgICRwYXJlbnQuZmluZCgnI3MtbGctY29udGVudC1tb3JlaW5mby02NTIyOTc0NScpLnRvZ2dsZSgpOwogICAgJHBhcmVudC5maW5kKCcjcy1sZy1jb250ZW50LWxlc3MtNjUyMjk3NDUnKS50b2dnbGUoKTsKICAgICRwYXJlbnQuZmluZCgnI3MtbGctY29udGVudC1tb3JlLTY1MjI5NzQ1JykudG9nZ2xlKCk7CiI+CiAgICAgICAgICAgICAgICBtb3JlLi4uCiAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9InMtbGctbGFiZWwtbGVzcyIgaWQ9InMtbGctY29udGVudC1sZXNzLTY1MjI5NzQ1IgogICAgICAgICAgICAgICBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBzdHlsZT0iZGlzcGxheTpub25lOyBmb250LXN0eWxlOml0YWxpYzsiCiAgICAgICAgICAgICAgIG9uY2xpY2s9IiAgICB2YXIgJHBhcmVudCA9IGpRdWVyeSh0aGlzKS5jbG9zZXN0KCcjcy1sZy1jb250ZW50LTY1MjI5NzQ1Jyk7CiAgICAkcGFyZW50LmZpbmQoJyNzLWxnLWNvbnRlbnQtbW9yZWluZm8tNjUyMjk3NDUnKS50b2dnbGUoKTsKICAgICRwYXJlbnQuZmluZCgnI3MtbGctY29udGVudC1sZXNzLTY1MjI5NzQ1JykudG9nZ2xlKCk7CiAgICAkcGFyZW50LmZpbmQoJyNzLWxnLWNvbnRlbnQtbW9yZS02NTIyOTc0NScpLnRvZ2dsZSgpOwoiPgogICAgICAgICAgICAgICAgbGVzcy4uLgogICAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0icy1sZy1jb250ZW50LW1vcmVpbmZvLTY1MjI5NzQ1IiBjbGFzcz0icy1sZy1jb250ZW50LW1vcmVpbmZvIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgICAgICAgIE5ldyB1c2VyPyBSZWdpc3RlciBmb3IgYW4gPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9yd3MiIHRhcmdldD0iX2JsYW5rIj5hY2NvdW50PC9hPiBmaXJzdC4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9saT4KCiAgICAgICAgPC91bD4KCiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyb3cgcy1sZy1yb3ciPjxkaXYgaWQ9InMtbGctY29sLTEyNyIgY2xhc3M9ImNvbC1tZC0xMiI+PGRpdiBjbGFzcz0icy1sZy1jb2wtYm94ZXMiPjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPHVsIGlkPSJzLWxnLXBhZ2UtcHJldm5leHQiIGNsYXNzPSJwYWdlciBzLWxpYi1oaWRlIj4KICAgIDxsaSBjbGFzcz0icHJldmlvdXMiPgogICAgICAgIAogICAgPC9saT4KICAgIDxsaSBjbGFzcz0ibmV4dCI+CiAgICAgICAgPGEgY2xhc3M9InBhZ2UtbGluayIgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9iaXpjYXQvYXJ0aWNsZXMiPjxzdHJvbmc+TmV4dDo8L3N0cm9uZz4gQXJ0aWNsZXMgJmd0OyZndDs8L2E+CiAgICA8L2xpPgo8L3VsPgoKCjwvZGl2PgoKPGRpdiBpZD0icy1saWItZm9vdGVyLXB1YmxpYyIgY2xhc3M9InMtbGliLWZvb3RlciBmb290ZXIgY29udGFpbmVyIHMtbGliLXNpZGUtYm9yZGVycyI+CiAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci1tZXRhIiBjbGFzcz0icGFkLXRvcC1zbSBwYWQtbGVmdC1tZWQgY2xlYXJmaXgiPgogICAgICAgIDx1bCBpZD0icy1sZy1ndWlkZS1oZWFkZXItYXR0cmlidXRlcyI+CiAgICAgICAgICAgIDxsaSBpZD0icy1sZy1ndWlkZS1oZWFkZXItdXBkYXRlZCIgY2xhc3M9InMtbGctaC1zZXBhcmF0b3IiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InMtbGctZ3VpZGUtbGFiZWwiPkxhc3QgVXBkYXRlZDo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzLWxnLXRleHQtZ3JleW91dCI+RmViIDIsIDIwMjYgMTE6MTMgQU08L3NwYW4+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBpZD0icy1sZy1ndWlkZS1oZWFkZXItdXJsIiBjbGFzcz0icy1sZy1oLXNlcGFyYXRvciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icy1sZy1ndWlkZS1sYWJlbCI+VVJMOjwvc3Bhbj4gPHNwYW4gY2xhc3M9InMtbGctdGV4dC1ncmV5b3V0Ij5odHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2JpemNhdDwvc3Bhbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpIGlkPSJzLWxnLWd1aWRlLXByaW50LXVybCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OiB3aW5kb3cucHJpbnQoKTsiPjxpIGNsYXNzPSJmYSBmYS1wcmludCIgYXJpYS1oaWRkZW49InRydWUiIHRpdGxlPSJQcmludCBQYWdlIj48L2k+IFByaW50IFBhZ2U8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KCiAgICAgICAgPGRpdiBpZD0icy1saWItZm9vdGVyLWxvZ2luLWxpbmsiIGNsYXNzPSJwdWxsLXJpZ2h0IHBhZC1yaWdodC1tZWQiPgogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL21pdC5saWJhcHBzLmNvbS9saWJhcHBzL2xvZ2luLnBocD9zaXRlX2lkPTY4JnRhcmdldDY0PUwyeHBZbWQxYVdSbGN5OWhaRzFwYmw5akxuQm9jRDluUFRNNE16UXdNeVp3UFRJMU9UYzVOalU9Ij5Mb2dpbiB0byBMaWJBcHBzPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0icGFkLWJvdHRvbS1zbSBjbGVhcmZpeCI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItc3ViamVjdHMiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBwYWQtcmlnaHQtbWVkIHB1bGwtbGVmdCI+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXRhZ3MiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBwdWxsLWxlZnQiPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzLWxpYi1mb290ZXItc3VwcG9ydC1saW5rIiBjbGFzcz0icHVsbC1yaWdodCBwYWQtcmlnaHQtbWVkIj4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIHNjcm9sbF90b3AudHdpZyAtLT4KPGRpdiBpZD0icy1saWItc2Nyb2xsLXRvcCI+CiAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJqUXVlcnkoJ2JvZHknKS5mb2N1cygpOyIgdGl0bGU9IkJhY2sgdG8gVG9wIgogICAgICAgYXJpYS1sYWJlbD0iQmFjayB0byBUb3AiPgogICAgICAgIDxzcGFuIGNsYXNzPSJmYS1zdGFjayBmYS1sZyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3F1YXJlLW8gZmEtc3RhY2stMngiPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWFuZ2xlLWRvdWJsZS11cCBmYS1zdGFjay0xeCIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyBib3R0b206MnB4OyI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvYT4KPC9kaXY+CjwhLS0gIXNjcm9sbF90b3AudHdpZyAtLT4KCjxkaXYgaWQ9InMtbGliLWFsZXJ0IiB0aXRsZT0iIj48ZGl2IGlkPSJzLWxpYi1hbGVydC1jb250ZW50Ij48L2Rpdj48L2Rpdj4KCiAgICAKPGZvb3Rlcj4KPGRpdiBjbGFzcz0iZm9vdGVyLW1haW4gZmxleC1jb250YWluZXIiIGFyaWEtbGFiZWw9Ik1JVCBMaWJyYXJpZXMgZm9vdGVyIj4KICAgIDxkaXYgY2xhc3M9ImlkZW50aXR5IGZsZXgtY29udGFpbmVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1IiBjbGFzcz0ibG9nby1taXQtbGliIj4KICAgICAgICAgICAgPGltZyBzcmM9ICJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRsaWItd29yZG1hcmsuc3ZnIiBhbHQ9Ik1JVCBMaWJyYXJpZXMgbG9nbyIgd2lkdGg9IjE1MCI+CiAgICAgICAgPC9hPgogICAgICAgIDxkaXYgY2xhc3M9ImxpbmtzLXByaW1hcnkgZmxleC1jb250YWluZXIiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9wcml2YWN5IiBjbGFzcz0ibGluay1zdWIiPlByaXZhY3k8L2E+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9wZXJtaXNzaW9ucyIgY2xhc3M9Imxpbmstc3ViIj5QZXJtaXNzaW9uczwvYT48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtIj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY2Vzc2liaWxpdHkiIGNsYXNzPSJsaW5rLXN1YiI+QWNjZXNzaWJpbGl0eTwvYT48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtIj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvbnRhY3QiIGNsYXNzPSJsaW5rLXN1YiI+Q29udGFjdCB1czwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PjwhLS0gZW5kIC5pZGVudGl0eSAtLT4KPC9kaXY+CjxkaXYgY2xhc3M9ImZvb3Rlci1pbmZvLWluc3RpdHV0ZSI+CiAgICA8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cHM6Ly93d3cubWl0LmVkdSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdF9sb2NrdXBfc3RkLXRocmVlLWxpbmVfcmdiX3doaXRlLnN2ZyIgYWx0PSJNSVQgbG9nbyIgd2lkdGg9IjE1MCI+CiAgICA8L2E+CiAgICA8ZGl2IGNsYXNzPSJsaWNlbnNlIj5Db250ZW50IGNyZWF0ZWQgYnkgdGhlIE1JVCBMaWJyYXJpZXMsIDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy80LjAvIj5DQyBCWS1OQzwvYT4gdW5sZXNzIG90aGVyd2lzZSBub3RlZC4gPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0L25vdGljZXMvY29weXJpZ2h0LW5vdGlmeS8iPk5vdGlmeSB1cyBhYm91dCBjb3B5cmlnaHQgY29uY2VybnM8L2E+LgogICAgPC9kaXY+PCEtLSBlbmQgLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAtLT4KPC9kaXY+CjwvZm9vdGVyPgo8c2NyaXB0IHNyYz0iLy92Mi5saWJhbnN3ZXJzLmNvbS9sb2FkX2NoYXQucGhwP2hhc2g9YmUyYzY1NGI2M2RkNDNmMzFjNTYyOTVlZTVkNzhkODgiPjwvc2NyaXB0PgoKCiAgICA8IS0tIEJFR0lOOiBBbmFseXRpY3MgY29kZSAtLT48IS0tIE1hdG9tbyBUYWcgTWFuYWdlciAtLT48c2NyaXB0PiAgdmFyIF9tdG0gPSB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAgX210bS5wdXNoKHsnbXRtLnN0YXJ0VGltZSc6IChuZXcgRGF0ZSgpLmdldFRpbWUoKSksICdldmVudCc6ICdtdG0uU3RhcnQnfSk7ICAoZnVuY3Rpb24oKSB7ICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07ICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9J2h0dHBzOi8vbWF0b21vLmxpYnJhcmllcy5taXQuZWR1L2pzL2NvbnRhaW5lcl9vRldNU2IzZy5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTsgIH0pKCk7PC9zY3JpcHQ+PCEtLSBFbmQgTWF0b21vIFRhZyBNYW5hZ2VyIC0tPjwhLS0gRU5EOiBBbmFseXRpY3MgY29kZSAtLT4KCiAgPC9ib2R5PgogIDwvaHRtbD4KICA=", "response_headers": {"Content-Security-Policy": ["upgrade-insecure-requests"], "content-type": ["text/html; charset=UTF-8"], "date": ["Thu, 05 Feb 2026 20:16:24 GMT"], "server": ["nginx"], "strict-transport-security": ["max-age=31536000; preload"], "vary": ["Accept-Encoding"], "x-backend-server": ["libguides-us-1.springyaws.com"], "x-content-type-options": ["nosniff"], "x-springy-cache-disabled": ["0"], "x-orig-content-encoding": ["gzip"]}} +{"url": "https://libguides.mit.edu/mbot", "status": "active", "cdx_warc_filename": "rec-d3274de52d0c-libguides-20260205201423951-7.warc.gz", "cdx_title": "Home - Materials Budget Operations Team (MBOT) - LibGuides at MIT Libraries", "cdx_offset": "1004456", "cdx_length": "6421", "html_base64": "ICA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9RWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIAo8dGl0bGU+SG9tZSAtIE1hdGVyaWFscyBCdWRnZXQgT3BlcmF0aW9ucyBUZWFtIChNQk9UKSAtIExpYkd1aWRlcyBhdCBNSVQgTGlicmFyaWVzPC90aXRsZT4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KPCEtLSBmYXZpY29uLnR3aWcgLS0+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9hcHBsZS10b3VjaC1pY29uLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMzJ4MzIiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLTMyeDMyLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMTZ4MTYiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLTE2eDE2LnBuZyI+CjxsaW5rIHJlbD0ibWFuaWZlc3QiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9zaXRlLndlYm1hbmlmZXN0Ij4KPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9zYWZhcmktcGlubmVkLXRhYi5zdmciIGNvbG9yPSIjNWJiYWQ1Ij4KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vZmF2aWNvbi5pY28iPgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVDb2xvciIgY29udGVudD0iI2ZmYzQwZCI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tY29uZmlnIiBjb250ZW50PSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vYnJvd3NlcmNvbmZpZy54bWwiPgo8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iI2ZmZmZmZiI+CjwhLS0gIWZhdmljb24udHdpZyAtLT4KCgoKPCEtLSBwdWJsaWNfbWV0YWRhdGEudHdpZyAtLT4KCiAgICA8IS0tIGF1dG8gZ2VuZXJhdGVkIGR1YmxpbiBjb3JlIG1ldGFkYXRhIC0tPgogICAgPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkxpYkd1aWRlczogTWF0ZXJpYWxzIEJ1ZGdldCBPcGVyYXRpb25zIFRlYW0gKE1CT1QpOiBIb21lIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5DcmVhdG9yIiBjb250ZW50PSJTaGFubm9uIEh1bnQiLz4KICAgIDxtZXRhIG5hbWU9IkRDLlN1YmplY3QiIGNvbnRlbnQ9IiIvPgogICAgPG1ldGEgbmFtZT0iREMuRGVzY3JpcHRpb24iIGNvbnRlbnQ9IiIvPgogICAgPG1ldGEgbmFtZT0iREMuUHVibGlzaGVycyIgY29udGVudD0iTUlUIExpYnJhcmllcyIvPgogICAgPG1ldGEgbmFtZT0iREMuUmlnaHRzIiBjb250ZW50PSJDb3B5cmlnaHQgTUlUIExpYnJhcmllcyAyMDI2Ii8+CiAgICA8bWV0YSBuYW1lPSJEQy5MYW5ndWFnZSIgY29udGVudD0iZW4iLz4KICAgIDxtZXRhIG5hbWU9IkRDLklkZW50aWZpZXIiIGNvbnRlbnQ9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0xNzYyNjMmcD0xMTU5NTM2Ii8+CiAgICA8bWV0YSBuYW1lPSJEQy5EYXRlLkNyZWF0ZWQiIGNvbnRlbnQ9IkZlYiAyMiwgMjAxMiIvPgogICAgPG1ldGEgbmFtZT0iREMuRGF0ZS5Nb2RpZmllZCIgY29udGVudD0iTm92IDMsIDIwMjIiLz4KICAgIAoKPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJMaWJHdWlkZXM6IE1hdGVyaWFscyBCdWRnZXQgT3BlcmF0aW9ucyBUZWFtIChNQk9UKTogSG9tZSI+CjxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iTGliR3VpZGVzOiBNYXRlcmlhbHMgQnVkZ2V0IE9wZXJhdGlvbnMgVGVhbSAoTUJPVCk6IEhvbWUiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CjxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0xNzYyNjMmYW1wO3A9MTE1OTUzNiI+CjxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeV9sYXJnZV9pbWFnZSI+CjxtZXRhIG5hbWU9InR3aXR0ZXI6c2l0ZSIgY29udGVudD0iQHNwcmluZ3NoYXJlIj4KCgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvanF1ZXJ5L2Nzcy9qcXVlcnktdWkubWluLmNzcz8yNjkxIiAvPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL25ldGRuYS5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjcuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9zbGljay0xLjguMS9zbGljay9zbGljay5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvc2xpY2stMS44LjEvc2xpY2svc2xpY2stdGhlbWUuY3NzIj4KCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9jc3MzLjIzLjQvbGctcHVibGljLm1pbi5jc3MiIC8+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvanF1ZXJ5L2pzLzEuMTIuNF9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdD4KICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgewogICAgICAgIGpRdWVyeSgiLmRyb3Bkb3duLXRvZ2dsZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBqUXVlcnkodGhpcykuc2libGluZ3MoInVsLnMtbGctc3VidGFiLXVsLmRyb3Bkb3duLW1lbnUiKS50b2dnbGUoKTsKICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNfbGdfZ3VpZGVfbmFtZSA9IGpRdWVyeSgnI3MtbGctZ3VpZGUtbmFtZScpOwogICAgICAgIGlmIChzX2xnX2d1aWRlX25hbWUubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChqUXVlcnkudHJpbShzX2xnX2d1aWRlX25hbWUudGV4dCgpKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgIHNfbGdfZ3VpZGVfbmFtZS5yZW1vdmUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwo8L3NjcmlwdD4KCiAgICA8c2NyaXB0IHNyYz0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMy4yL2pxdWVyeS11aS5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdD4KICAgICAgICBqUXVlcnkudWkgfHwKICAgICAgICBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvanMvanF1ZXJ5LXVpLm1pbi5qcz8yNjkxIj5ceDNDL3NjcmlwdD4nKTsKICAgIDwvc2NyaXB0PgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qczMuMjMuNC9sZy1wdWJsaWMubWluLmpzIj48L3NjcmlwdD4KPHN0eWxlPi8qKiBib290c3RyYXBfdGFiX2Nzcy50d2lnICoqLwojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24gewogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTsKICAgIGNvbG9yOiAjODg4ODg4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBwYWRkaW5nOiA0cHggMTVweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzIHsKICAgIGJvcmRlci1ib3R0b206IDA7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpI3MtbGctYWRtaW4tdGFiLWFkZCA+IGEgewogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGJ1dHRvbjpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYTpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uOmhvdmVyIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOyBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKICAgIGJhY2tncm91bmQtY29sb3I6ICM0YjdiNWQ7CiAgICBjb2xvcjogI2ZmZjsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiBidXR0b24sCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBidXR0b24gewogICAgY29sb3I6ICNmZmY7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI3YjVkOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IC5zLWxnLXN1YnRhYi11bCA+IC5hY3RpdmUgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gLnMtbGctc3VidGFiLXVsID4gLmFjdGl2ZSA+IGJ1dHRvbiB7CiAgICBjb2xvcjogI2ZmZjsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIGJhY2tncm91bmQtY29sb3I6ICM0YjdiNWQ7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IGE6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYTpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IGJ1dHRvbjpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBidXR0b246aG92ZXIgewogICAgY29sb3I6ICNmZmY7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI3YjVkOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgICBib3JkZXItdG9wLWNvbG9yOiAjZTFlMWUxOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQgewogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIG1hcmdpbi10b3A6IC0zcHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi1kcm9wIHsKICAgIGJvcmRlci1yYWRpdXM6IDAgNHB4IDAgMDsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMCA0cHggMCAwOwogICAgcGFkZGluZzogNHB4IDZweCAwcHggM3B4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIG1hcmdpbi1yaWdodDogMnB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDA7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNiYmI7CiAgICBwYWRkaW5nOiA0cHggNnB4IDRweCAzcHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3A6aG92ZXIgewogICAgYm9yZGVyLXJhZGl1czogMCA0cHggMCAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDZweCAwcHggM3B4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluazpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAwIDAgMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogNHB4IDVweCA0cHggMTBweDsKfQoKLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rLAoubmF2LXRhYnMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluayB7CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYS5zLWxnLXRhYi1kcm9wLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcCB7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDA7CiAgICBwYWRkaW5nOiA0cHggOHB4IDRweCA4cHg7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDA7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEucy1sZy10YWItZHJvcDpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3A6aG92ZXIgewogICAgYm9yZGVyLXJhZGl1czogMCA0cHggMCAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDhweCA0cHggOHB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluazpob3ZlciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGZsb2F0OiBsZWZ0OwogICAgYm9yZGVyLXJhZGl1czogNHB4IDAgMCAwOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBwYWRkaW5nOiA0cHggMTVweCA0cHggMTVweDsKfQoKLyoqICFib290c3RyYXBfdGFiX2Nzcy50d2lnICoqLwogLnMtbGliLWJveCB7Ym9yZGVyLWNvbG9yOiAjY2NjY2NjOwogICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDhweCA2cHggLTZweCAjQUFBQUFBOwogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCA0cHggNHB4OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgICAgICAgICAgfQogICAgICAgICAgICAucy1saWItYm94LXN0ZCAucy1saWItYm94LXRpdGxlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxOyBiYWNrZ3JvdW5kLWltYWdlOiBub25lO2NvbG9yOiAjODg4OwogICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2NjY2M7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnMtbGliLWJveCAucy1saWItYm94LXRpdGxlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxOyBiYWNrZ3JvdW5kLWltYWdlOiBub25lO2NvbG9yOiAjODg4OwogICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2NjY2M7CiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDBweCAwcHg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnMtbGliLWJveCAucy1sZy1ib3gtZm9vdGVyIHsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBweCAwcHggM3B4IDNweDsKICAgICAgICAgICAgfTwvc3R5bGU+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNDAwaXRhbGljLDYwMCw2MDBpdGFsaWMsNzAwLDcwMGl0YWxpYyI+Cgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKaDMgewogIGZvbnQtc2l6ZTogMjBweDsKfQoKYm9keSB7CiAgZm9udC1mYW1pbHk6ICJPcGVuIFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxNnB4OyAKICBsaW5lLWhlaWdodDogMS40OwogIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cn0KCnRhYmxlLCB0aCwgdGQgewogICAgcGFkZGluZzogNXB4Owp9CgouaGVhZGVyLXN0YWZmZ3VpZGUgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzQ3N0E1RDsKfQoKI3MtbGliLWJjIC5icmVhZGNydW1iLCAKI3MtbGliLWFkbWluLWJjIC5icmVhZGNydW1iLCAKI3MtbGctZ3VpZGUtZGVzY3JpcHRpb24sIAojcy1sZy1ndWlkZS1oZWFkZXItc3ViamVjdHMsIAojcy1sZy1ndWlkZS1oZWFkZXItdGFncyB7IAogICAgZGlzcGxheTogbm9uZTsgCn0KCiNzLWxnLWd1aWRlLWhlYWRlciB7IAogICAgbWFyZ2luLXRvcDogMTVweDsgCn0gCgojcy1sZy1ndWlkZS1uYW1lIHsgCiAgICBmb250LXNpemU6IDI4cHg7IAogICAgY29sb3I6ICM3MDcwNzA7IAp9Cgoucy1saWItYm94IC5zLWxpYi1ib3gtdGl0bGUgewogZm9udC1zaXplOiAxOHB4OwogY29sb3I6ICMxMTE7Cn0KCi5zLWxpYi1ib3ggewogY29sb3I6ICMxMTE7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyAgPiBsaSA+IGEgeyAKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQ0NDQ0NDOyAKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNDQ0NDQ0M7IAogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQ0NDQ0NDOyAKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNGI3YjVkOyAKfQo8L3N0eWxlPjxzY3JpcHQ+CiAgICB2YXIgc3ByaW5nU3RhdHMgPSBzcHJpbmdTdGF0cyB8fCB7fTsKICAgIHNwcmluZ1N0YXRzLnNhQ29uZmlnID0gc3ByaW5nU3RhdHMuc2FDb25maWcgfHwgewogICAgICAgIHNpdGVfaWQ6IDY4LAogICAgICAgIHRyYWNraW5nX3BhcmFtZXRlcnM6IHsiX3N0X2d1aWRlX2lkIjoxNzYyNjMsIl9zdF9wYWdlX2lkIjoxMTU5NTM2LCJfc3Rfc2l0ZV9pZCI6Njh9LAogICAgICAgIHRyYWNraW5nX3NlcnZlcl9ob3N0OiAibGliZ3VpZGVzLXByb2Muc3ByaW5neWF3cy5jb20iCiAgICB9Owo8L3NjcmlwdD4KPHNjcmlwdCAgc3JjPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvanMvc2EubWluLmpzPzMxMTYiPjwvc2NyaXB0Pgo8c2NyaXB0PgoJCQlzcHJpbmdTcGFjZS5Db21tb24gPSBzcHJpbmdTcGFjZS5Db21tb24gfHwgeyB9OwoJCQlzcHJpbmdTcGFjZS5Db21tb24uY29uc3RhbnQgPSB7CgkJCQkJUFJPQ0VTU0lORzogewoJCQkJCQlBQ1RJT05fRElTUExBWV9QT0xMOiAxNTkKCQkJCQl9CgkJCX07CgkJCXNwcmluZ1NwYWNlLkNvbW1vbi5iYXNlVVJMID0gImh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvIjsKCQkJCgkJCWhhbmRsZVNjcm9sbD1mdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgewoJCQkJCXZhciB0YXJnZXRfZWx0ID0gIiNzLWxnLXBhZ2Utc2VjdGlvbi0xMTU5NTM2IjsKCQkJCQlqUXVlcnkoImh0bWwsIGJvZHkiKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBqUXVlcnkodGFyZ2V0X2VsdCkub2Zmc2V0KCkudG9wIH0sIDc1MCk7CgkJCQkJaWYgKGpRdWVyeSh0aGlzKS5zY3JvbGxUb3AoKSA+IDIyMCkgewoJCQkJCQlqUXVlcnkoIiNzLWxpYi1zY3JvbGwtdG9wIikuZmFkZUluKDc1MCk7CgkJCQkJfQoJCQkJfQoJCQl9CgkgICA8L3NjcmlwdD4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAvLyBFbmFibGUgdG9vbHRpcHMuCiAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHNwcmluZ1NwYWNlLlVJLmluaXRQb3BPdmVycyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCIuYXotYnMtdG9vbHRpcCIpLnRvb2x0aXAoKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfQogICAgICAgICAgICB9KTsKICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tQYWdlKHtfc3RfdHlwZV9pZDogJzEnLF9zdF9ncm91cF9pZDogJzM3NTQnLF9zdF9ndWlkZV9pZDogJzE3NjI2MycsX3N0X3BhZ2VfaWQ6ICcxMTU5NTM2J30pOwogICAgICAgIH0pOwogICAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaGFuZGxlU2Nyb2xsKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0PgogICAgPC9oZWFkPgogIDxib2R5IGNsYXNzPSJzLWxnLWd1aWRlLWJvZHkiPgoKPGEgaWQ9InMtbGctcHVibGljLXNraXBsaW5rIiBjbGFzcz0iYWxlcnQtaW5mbyIgaHJlZj0iI3MtbGctZ3VpZGUtbWFpbiI+U2tpcCB0byBNYWluIENvbnRlbnQ8L2E+Cgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIgLz4KPGRpdiBjbGFzcz0iaGVhZGVyLXN0YWZmZ3VpZGUgY29udGFpbmVyIj4KPGEgY2xhc3M9ImxpbmstaG9tZSIgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L3N0YWZmIj4KPGltZyBzcmM9Imh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9saWJhcHBzL2FjY291bnRzLzM1MS9pbWFnZXMvc3RhZmZsb2dvLWdyZWVuLnBuZyIgYWx0PSJNSVQgTGlicmFyaWVzIFN0YWZmIFdlYiIvPgo8L2E+CjwvZGl2PgoKPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItaGVhZGVyIHMtbGliLXNpZGUtYm9yZGVycyI+CiAgICA8bmF2IGlkPSJzLWxpYi1iYyIgYXJpYS1sYWJlbD0iYnJlYWRjcnVtYiI+CiAgICAgICAgPG9sIGlkPSJzLWxpYi1iYy1saXN0IiBjbGFzcz0iYnJlYWRjcnVtYiI+PGxpIGlkPSJzLWxpYi1iYy1jdXN0b21lciIgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdSI+TUlUPC9hPjwvbGk+PGxpIGlkPSJzLWxpYi1iYy1zaXRlIiBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1LyI+TGliR3VpZGVzPC9hPjwvbGk+PGxpIGlkPSJzLWxpYi1iYy1ncm91cCIgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdT9ncm91cF9pZD0zNzU0Ij5NSVQgTGlicmFyaWVzIFN0YWZmIEd1aWRlczwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtZ3VpZGUiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvbWJvdCI+TWF0ZXJpYWxzIEJ1ZGdldCBPcGVyYXRpb25zIFRlYW0gKE1CT1QpPC9hPjwvbGk+PGxpIGlkPSJzLWxpYi1iYy1wYWdlIiBjbGFzcz0iYWN0aXZlIGJyZWFkY3J1bWItaXRlbSI+SG9tZTwvbGk+PC9vbD4KICAgIDwvbmF2PgoKICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXNlYXJjaCI+CiAgICAgICAgICAgIAo8ZGl2IGlkPSJzLWxnLWd1aWRlLXNlYXJjaC1ib3giPgogICAgPGZvcm0gcm9sZT0ic2VhcmNoIiBpZD0icy1sZy1ndWlkZS1zZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L3NyY2gucGhwIiBtZXRob2Q9IkdFVCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20iPgogICAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IiAKICAgICAgICAgICAgICAgIGlkPSJzLWxnLWd1aWRlLXNlYXJjaC10ZXJtcyIgCiAgICAgICAgICAgICAgICBuYW1lPSJxIiAKICAgICAgICAgICAgICAgIGNsYXNzPSJmb3JtLWNvbnRyb2wiCiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjI2MCIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIHRoaXMgR3JvdXAiPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0ic3Itb25seSIgZm9yPSJzLWxnLWd1aWRlLXNlYXJjaC10ZXJtcyI+U2VhcmNoIHRoaXMgR3JvdXA8L2xhYmVsPgoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJncm91cF9pZCIgdmFsdWU9IjM3NTQiPgogICAgICAgICAgICAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHR5cGU9InN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgU2VhcmNoCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgPC9mb3JtPgo8L2Rpdj4KCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci1pbmZvIj4KICAgICAgICA8aDEgaWQ9InMtbGctZ3VpZGUtbmFtZSI+TWF0ZXJpYWxzIEJ1ZGdldCBPcGVyYXRpb25zIFRlYW0gKE1CT1QpOiBIb21lPC9oMT4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWRlc2MtY29udGFpbmVyIj4KICAgICAgICAgICAgPHNwYW4gaWQ9InMtbGctZ3VpZGUtZGVzY3JpcHRpb24iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctdGFicy1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIHBhZC10b3AtbWVkIj4KICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicyIgY2xhc3M9InRhYnMiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ikd1aWRlIFBhZ2VzIj4KICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyBzcGxpdC1idXR0b24tbmF2Ij4KICAgICAgICAgICAgCiAgICAgICAgPC91bD4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicy10aXRsZS1iYXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIj48L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtbWFpbiIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1tYWluIHMtbGliLXNpZGUtYm9yZGVycyIgdGFiaW5kZXg9Ii0xIj4KICAgIAogICAgPGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xMjYiIGNsYXNzPSJjb2wtbWQtMTIiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyb3cgcy1sZy1yb3ciPjxkaXYgaWQ9InMtbGctY29sLTEiIGNsYXNzPSJjb2wtbWQtMyI+PGRpdiBjbGFzcz0icy1sZy1jb2wtYm94ZXMiPjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItNDExODk2NSIgY2xhc3M9InMtbGctYm94LXdyYXBwZXItNDExODk2NSI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTM0OTkwMjgtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMzQ5OTAyOCIgY2xhc3M9InMtbGliLWJveCBzLWxpYi1ib3gtc3RkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0icy1saWItYm94LXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICBIb21lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTM0OTkwMjgiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAKCiAgICA8ZGl2IGNsYXNzPSIiPgogICAgICAgIDx1bCBpZD0icy1sZy1saW5rLWxpc3QtNzQwODY3MyIKICAgICAgICAgICAgY2xhc3M9InMtbGctbGluay1saXN0IHMtbGctbGluay1saXN0LTIiPgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDM0MTgiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9MTc2MTAzIiB0YXJnZXQ9IiIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwMzQxOCYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgU3RhZmYgV2ViIEhvbWUKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA1NDI1IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9jb21taXR0ZWVzIiB0YXJnZXQ9IiIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwNTQyNSYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQ29tbWl0dGVlcyAmIEdyb3VwcyBIb21lCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgCiAgICA8L2Rpdj4KCjwvbGk+CgogICAgICAgIDwvdWw+CgogICAgICAgIAogICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBpZD0icy1sZy1jb2wtMiIgY2xhc3M9ImNvbC1tZC05Ij48ZGl2IGNsYXNzPSJzLWxnLWNvbC1ib3hlcyI+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci00MTE4OTY2IiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci00MTE4OTY2Ij4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMzQ5OTAyNy1jb250YWluZXIiIGNsYXNzPSJzLWxpYi1ib3gtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNDk5MDI3IiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIE1hdGVyaWFscyBCdWRnZXQgT3BlcmF0aW9ucyBUZWFtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTM0OTkwMjciID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjU5NTk3NiIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPHAgc3R5bGU9InBhZGRpbmc6IDBweCAzMHB4IDBweCAzMHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+VGhlIChMaWJyYXJpZXMpIE1hdGVyaWFscyBCdWRnZXQgT3BlcmF0aW9ucyBUZWFtIChNQk9UKSBpcyBhIGNyb3NzLWRpcmVjdG9yYXRlIGdyb3VwIHdob3NlIGNoYXJnZSBpcyB0byBtb25pdG9yIGZpbmFuY2lhbHMgaW4gQWxtYSZuYnNwO2FuZCBTQVAsIE1JVCYjMzk7cyBmaW5hbmNpYWwgc3lzdGVtLCB0byBhc3N1cmUgdGhhdCBleHBlbmRpdHVyZXMgZm9yIHRoZSBjb2xsZWN0aW9ucyBtYXRlcmlhbHMgYnVkZ2V0IGFyZSBvbiB0YXJnZXQuPC9zcGFuPjwvcD4KCjxwIHN0eWxlPSJwYWRkaW5nOiAwcHggMzBweCAwcHggMzBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDsiPlRoZSBUZWFtIG1vbml0b3JzIGFuZCBwbGFucyByZWxldmFudCBmaW5hbmNpYWwgcHJvY2Vzc2VzIGluY2x1ZGluZzogYXVkaXQgY29tcGxpYW5jZSwgZnVuZCBlbmN1bWJyYW5jZSB0YXJnZXRzLCBwYXltZW50IHRyYWNraW5nLCB2ZW5kb3IgcHJlcGF5bWVudHMsIG9yZGVybHkgZmxvdyBvZiBleHBlbmRpdHVyZXMgdGhyb3VnaG91dCB0aGUgeWVhciwgYW5kIGVuZC1vZi15ZWFyIGNsb3NpbmcuIFRoZSBUZWFtIG5vcm1hbGx5IG1lZXRzIGVpZ2h0Jm5ic3A7dGltZXMgYSB5ZWFyIHdpdGggZmV3ZXIgbWVldGluZ3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXNjYWwgeWVhciBhbmQgbW9udGhseSBtZWV0aW5ncyBpbiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGZpc2NhbCB5ZWFyLiZuYnNwOzwvc3Bhbj48L3A+Cgo8cCBzdHlsZT0icGFkZGluZzogMHB4IDMwcHggMHB4IDMwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij5UaGUgbmV3IE1hdGVyaWFscyBCdWRnZXQgT3BlcmF0aW9ucyBUZWFtIHdhcyBmb3JtZWQgaW4gTm92ZW1iZXIgMjAyMi4mbmJzcDsgSXQgaXMgYSByZWZvcm11bGF0aW9uJm5ic3A7b2YgYSBsb25nLXN0YW5kaW5nIGdyb3VwJm5ic3A7Y2FsbGVkIHRoZSBNYXRlcmlhbHMgRmluYW5jZSBUZWFtIChNRlQpICgyMDExKSBhbmQgYW4gZWFybGllciB0ZWFtJm5ic3A7PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+TWF0ZXJpYWxzIEJ1ZGdldCBDb3VuY2lsIChNQkMpLjwvc3Bhbj48L3NwYW4+PC9wPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItNDExODk2NyIgY2xhc3M9InMtbGctYm94LXdyYXBwZXItNDExODk2NyI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTM0OTkwMjktY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMzQ5OTAyOSIgY2xhc3M9InMtbGliLWJveCBzLWxpYi1ib3gtc3RkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0icy1saWItYm94LXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICBNQk9UIE1lbWJlcnNoaXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMzQ5OTAyOSIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NTk1OTc3IiBjbGFzcz0iICBjbGVhcmZpeCI+CiAgICA8cCBzdHlsZT0icGFkZGluZy1sZWZ0OiAzMHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogc21hbGw7Ij5NQk9UIE1lbWJlcnNoaXAgKGFzIG9mIE5vdmVtYmVyIDIwMjIpPC9zcGFuPjwvcD4KCjxwIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDMwcHg7Ij48Zm9udCBzaXplPSIyIj5NYXJ0aW5hIEFuZGVyc29uPC9mb250PjxiciAvPgo8c3BhbiBzdHlsZT0iZm9udC1zaXplOiBzbWFsbDsiPkp1ZGl0aCBHYWxsYWdoZXI8L3NwYW4+PGJyIC8+CjxzcGFuIHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+QWxsaWFoIEh1bWJlcjwvc3Bhbj48YnIgLz4KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogc21hbGw7Ij5EZWJvcmFoIExlbmFyZXM8L3NwYW4+PC9wPgoKPHAgc3R5bGU9InBhZGRpbmctbGVmdDogMzBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+d2l0aCBvdmVyc2lnaHQgZnJvbTo8L3NwYW4+PC9wPgoKPHAgc3R5bGU9InBhZGRpbmctbGVmdDogMzBweDsiPjxmb250IHNpemU9IjIiPkxhdXJhIEhhbnNjb208L2ZvbnQ+PGJyIC8+CjxzcGFuIHN0eWxlPSJmb250LXNpemU6c21hbGwiPktpbSBNYXh3ZWxsPC9zcGFuPjxiciAvPgo8c3BhbiBzdHlsZT0iZm9udC1zaXplOnNtYWxsIj5TdGVwaGFuaWUgUmljaGFyZHM8L3NwYW4+PC9wPgoKPHAgc3R5bGU9InBhZGRpbmctbGVmdDogMzBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+RW1haWw6IG1ib3QtbGliPC9zcGFuPjwvcD4KCgogICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyb3cgcy1sZy1yb3ciPjxkaXYgaWQ9InMtbGctY29sLTEyNyIgY2xhc3M9ImNvbC1tZC0xMiI+PGRpdiBjbGFzcz0icy1sZy1jb2wtYm94ZXMiPjwvZGl2PjwvZGl2PjwvZGl2PgogICAgCjwvZGl2PgoKPGRpdiBpZD0icy1saWItZm9vdGVyLXB1YmxpYyIgY2xhc3M9InMtbGliLWZvb3RlciBmb290ZXIgY29udGFpbmVyIHMtbGliLXNpZGUtYm9yZGVycyI+CiAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci1tZXRhIiBjbGFzcz0icGFkLXRvcC1zbSBwYWQtbGVmdC1tZWQgY2xlYXJmaXgiPgogICAgICAgIDx1bCBpZD0icy1sZy1ndWlkZS1oZWFkZXItYXR0cmlidXRlcyI+CiAgICAgICAgICAgIDxsaSBpZD0icy1sZy1ndWlkZS1oZWFkZXItdXBkYXRlZCIgY2xhc3M9InMtbGctaC1zZXBhcmF0b3IiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InMtbGctZ3VpZGUtbGFiZWwiPkxhc3QgVXBkYXRlZDo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzLWxnLXRleHQtZ3JleW91dCI+Tm92IDMsIDIwMjIgNDoyOCBQTTwvc3Bhbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpIGlkPSJzLWxnLWd1aWRlLWhlYWRlci11cmwiIGNsYXNzPSJzLWxnLWgtc2VwYXJhdG9yIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzLWxnLWd1aWRlLWxhYmVsIj5VUkw6PC9zcGFuPiA8c3BhbiBjbGFzcz0icy1sZy10ZXh0LWdyZXlvdXQiPmh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvbWJvdDwvc3Bhbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpIGlkPSJzLWxnLWd1aWRlLXByaW50LXVybCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OiB3aW5kb3cucHJpbnQoKTsiPjxpIGNsYXNzPSJmYSBmYS1wcmludCIgYXJpYS1oaWRkZW49InRydWUiIHRpdGxlPSJQcmludCBQYWdlIj48L2k+IFByaW50IFBhZ2U8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KCiAgICAgICAgPGRpdiBpZD0icy1saWItZm9vdGVyLWxvZ2luLWxpbmsiIGNsYXNzPSJwdWxsLXJpZ2h0IHBhZC1yaWdodC1tZWQiPgogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL21pdC5saWJhcHBzLmNvbS9saWJhcHBzL2xvZ2luLnBocD9zaXRlX2lkPTY4JnRhcmdldDY0PUwyeHBZbWQxYVdSbGN5OWhaRzFwYmw5akxuQm9jRDluUFRFM05qSTJNeVp3UFRFeE5UazFNelk9Ij5Mb2dpbiB0byBMaWJBcHBzPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0icGFkLWJvdHRvbS1zbSBjbGVhcmZpeCI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItc3ViamVjdHMiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBwYWQtcmlnaHQtbWVkIHB1bGwtbGVmdCI+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXRhZ3MiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBwdWxsLWxlZnQiPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzLWxpYi1mb290ZXItc3VwcG9ydC1saW5rIiBjbGFzcz0icHVsbC1yaWdodCBwYWQtcmlnaHQtbWVkIj4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIHNjcm9sbF90b3AudHdpZyAtLT4KPGRpdiBpZD0icy1saWItc2Nyb2xsLXRvcCI+CiAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJqUXVlcnkoJ2JvZHknKS5mb2N1cygpOyIgdGl0bGU9IkJhY2sgdG8gVG9wIgogICAgICAgYXJpYS1sYWJlbD0iQmFjayB0byBUb3AiPgogICAgICAgIDxzcGFuIGNsYXNzPSJmYS1zdGFjayBmYS1sZyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3F1YXJlLW8gZmEtc3RhY2stMngiPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWFuZ2xlLWRvdWJsZS11cCBmYS1zdGFjay0xeCIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyBib3R0b206MnB4OyI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvYT4KPC9kaXY+CjwhLS0gIXNjcm9sbF90b3AudHdpZyAtLT4KCjxkaXYgaWQ9InMtbGliLWFsZXJ0IiB0aXRsZT0iIj48ZGl2IGlkPSJzLWxpYi1hbGVydC1jb250ZW50Ij48L2Rpdj48L2Rpdj4KCiAgICAKPGRpdiBjbGFzcz0iZm9vdGVyLXN0YWZmZ3VpZGUgY29udGFpbmVyIj4KPHA+CjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvc3RhZmYiPlN0YWZmIFdlYjwvYT4gIHwgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdSI+TUlUIExpYnJhcmllczwvYT4gfCA8YSBocmVmPSJodHRwczovL3dlYi5taXQuZWR1Ij5NSVQ8L2E+CjwvcD4KPHA+UG93ZXJlZCBieSA8YSBocmVmPSJodHRwczovL3d3dy5zcHJpbmdzaGFyZS5jb20iPlNwcmluZ3NoYXJlLjwvYT4gVGV4dCBsaWNlbnNlZCB1bmRlciA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLyI+Q3JlYXRpdmUgQ29tbW9ucyw8L2E+IHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuIEFsbCBvdGhlciBtZWRpYSBhbGwgcmlnaHRzIHJlc2VydmVkIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuPC9wPgo8L2Rpdj4KCiAgICA8IS0tIEJFR0lOOiBBbmFseXRpY3MgY29kZSAtLT48IS0tIE1hdG9tbyBUYWcgTWFuYWdlciAtLT48c2NyaXB0PiAgdmFyIF9tdG0gPSB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAgX210bS5wdXNoKHsnbXRtLnN0YXJ0VGltZSc6IChuZXcgRGF0ZSgpLmdldFRpbWUoKSksICdldmVudCc6ICdtdG0uU3RhcnQnfSk7ICAoZnVuY3Rpb24oKSB7ICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07ICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9J2h0dHBzOi8vbWF0b21vLmxpYnJhcmllcy5taXQuZWR1L2pzL2NvbnRhaW5lcl9vRldNU2IzZy5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTsgIH0pKCk7PC9zY3JpcHQ+PCEtLSBFbmQgTWF0b21vIFRhZyBNYW5hZ2VyIC0tPjwhLS0gRU5EOiBBbmFseXRpY3MgY29kZSAtLT4KCiAgPC9ib2R5PgogIDwvaHRtbD4KICA=", "response_headers": {"Content-Security-Policy": ["upgrade-insecure-requests"], "content-type": ["text/html; charset=UTF-8"], "date": ["Thu, 05 Feb 2026 20:17:06 GMT"], "server": ["nginx"], "strict-transport-security": ["max-age=31536000; preload"], "vary": ["Accept-Encoding"], "x-backend-server": ["libguides-us-1.springyaws.com"], "x-content-type-options": ["nosniff"], "x-springy-cache-disabled": ["0"], "x-orig-content-encoding": ["gzip"]}} +{"url": "https://libguides.mit.edu/rws", "status": "active", "cdx_warc_filename": "rec-d3274de52d0c-libguides-20260205201423951-7.warc.gz", "cdx_title": "Getting Started - LSEG WorkSpace - LibGuides at MIT Libraries", "cdx_offset": "1014327", "cdx_length": "17629", "html_base64": "ICA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9RWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIAo8dGl0bGU+R2V0dGluZyBTdGFydGVkIC0gTFNFRyBXb3JrU3BhY2UgLSBMaWJHdWlkZXMgYXQgTUlUIExpYnJhcmllczwvdGl0bGU+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+CjwhLS0gZmF2aWNvbi50d2lnIC0tPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxODB4MTgwIiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vYXBwbGUtdG91Y2gtaWNvbi5wbmciPgo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjMyeDMyIiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vZmF2aWNvbi0zMngzMi5wbmciPgo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjE2eDE2IiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vZmF2aWNvbi0xNngxNi5wbmciPgo8bGluayByZWw9Im1hbmlmZXN0IiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vc2l0ZS53ZWJtYW5pZmVzdCI+CjxsaW5rIHJlbD0ibWFzay1pY29uIiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vc2FmYXJpLXBpbm5lZC10YWIuc3ZnIiBjb2xvcj0iIzViYmFkNSI+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL2Zhdmljb24uaWNvIj4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1UaWxlQ29sb3IiIGNvbnRlbnQ9IiNmZmM0MGQiPgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLWNvbmZpZyIgY29udGVudD0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hcHBzL2NvbW1vbi9mYXZpY29uL2Jyb3dzZXJjb25maWcueG1sIj4KPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiIGNvbnRlbnQ9IiNmZmZmZmYiPgo8IS0tICFmYXZpY29uLnR3aWcgLS0+CgoKCjwhLS0gcHVibGljX21ldGFkYXRhLnR3aWcgLS0+CgogICAgPCEtLSBhdXRvIGdlbmVyYXRlZCBkdWJsaW4gY29yZSBtZXRhZGF0YSAtLT4KICAgIDxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJMaWJHdWlkZXM6IExTRUcgV29ya1NwYWNlOiBHZXR0aW5nIFN0YXJ0ZWQiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkNyZWF0b3IiIGNvbnRlbnQ9IlNoaWtoYSBTaGFybWEiLz4KICAgIDxtZXRhIG5hbWU9IkRDLlN1YmplY3QiIGNvbnRlbnQ9IiIvPgogICAgPG1ldGEgbmFtZT0iREMuRGVzY3JpcHRpb24iIGNvbnRlbnQ9IlJlZ2lzdHJhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIExTRUcgV29ya3NwYWNlIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5QdWJsaXNoZXJzIiBjb250ZW50PSJNSVQgTGlicmFyaWVzIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5SaWdodHMiIGNvbnRlbnQ9IkNvcHlyaWdodCBNSVQgTGlicmFyaWVzIDIwMjYiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkxhbmd1YWdlIiBjb250ZW50PSJlbiIvPgogICAgPG1ldGEgbmFtZT0iREMuSWRlbnRpZmllciIgY29udGVudD0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9jLnBocD9nPTEyMDU2NzYmcD04ODE3MTg5Ii8+CiAgICA8bWV0YSBuYW1lPSJEQy5EYXRlLkNyZWF0ZWQiIGNvbnRlbnQ9IkphbiAzLCAyMDIyIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5EYXRlLk1vZGlmaWVkIiBjb250ZW50PSJOb3YgMTUsIDIwMjQiLz4KICAgIAoKPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJMaWJHdWlkZXM6IExTRUcgV29ya1NwYWNlOiBHZXR0aW5nIFN0YXJ0ZWQiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlJlZ2lzdHJhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIExTRUcgV29ya3NwYWNlIj4KPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9MTIwNTY3NiZhbXA7cD04ODE3MTg5Ij4KPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIj4KPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAc3ByaW5nc2hhcmUiPgoKCgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvY3NzL2pxdWVyeS11aS5taW4uY3NzPzI2OTEiIC8+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL3NsaWNrLTEuOC4xL3NsaWNrL3NsaWNrLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9zbGljay0xLjguMS9zbGljay9zbGljay10aGVtZS5jc3MiPgoKICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2NzczMuMjMuNC9sZy1wdWJsaWMubWluLmNzcyIgLz4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvanMvMS4xMi40X2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgogICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgalF1ZXJ5KCIuZHJvcGRvd24tdG9nZ2xlIikub24oImNsaWNrIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5zaWJsaW5ncygidWwucy1sZy1zdWJ0YWItdWwuZHJvcGRvd24tbWVudSIpLnRvZ2dsZSgpOwogICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc19sZ19ndWlkZV9uYW1lID0galF1ZXJ5KCcjcy1sZy1ndWlkZS1uYW1lJyk7CiAgICAgICAgaWYgKHNfbGdfZ3VpZGVfbmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGpRdWVyeS50cmltKHNfbGdfZ3VpZGVfbmFtZS50ZXh0KCkpID09PSAnJykgewogICAgICAgICAgICAgICAgc19sZ19ndWlkZV9uYW1lLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEzLjIvanF1ZXJ5LXVpLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIGpRdWVyeS51aSB8fAogICAgICAgIGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pxdWVyeS9qcy9qcXVlcnktdWkubWluLmpzPzI2OTEiPlx4M0Mvc2NyaXB0PicpOwogICAgPC9zY3JpcHQ+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pzMy4yMy40L2xnLXB1YmxpYy5taW4uanMiPjwvc2NyaXB0Pgo8c3R5bGU+LyoqIGJvb3RzdHJhcF90YWJfY3NzLnR3aWcgKiovCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24sCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbiB7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmc6IDRweCAxNXB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgewogICAgYm9yZGVyLWJvdHRvbTogMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkjcy1sZy1hZG1pbi10YWItYWRkID4gYSB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b246aG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsgLW1vei1ib3JkZXItcmFkaXVzOiAwOyBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGNvbG9yOiAjZmZmZmZmOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IGJ1dHRvbiwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGJ1dHRvbiB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gLnMtbGctc3VidGFiLXVsID4gLmFjdGl2ZSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiAucy1sZy1zdWJ0YWItdWwgPiAuYWN0aXZlID4gYnV0dG9uIHsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYnV0dG9uOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGJ1dHRvbjpob3ZlciB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICAgIGJvcmRlci10b3AtY29sb3I6ICNlMWUxZTE7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyBidXR0b24uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgbWFyZ2luLXRvcDogLTNweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA2cHggMHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLWRyb3A6aG92ZXIgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JiYjsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDZweCAwcHggM3B4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluazpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmc6IDRweCA1cHggNHB4IDEwcHg7Cn0KCi5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluaywKLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmsgewogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEucy1sZy10YWItZHJvcCwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA4cHggNHB4IDhweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYS5zLWxnLXRhYi1kcm9wOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDhweCA0cHggOHB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluazpob3ZlciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGZsb2F0OiBsZWZ0OwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogNHB4IDE1cHggNHB4IDE1cHg7Cn0KCi8qKiAhYm9vdHN0cmFwX3RhYl9jc3MudHdpZyAqKi8KIC5zLWxpYi1ib3gge2JvcmRlci1jb2xvcjogI2NjY2NjYzsKICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggNnB4IC02cHggI0FBQUFBQTsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zLWxpYi1ib3gtc3RkIC5zLWxpYi1ib3gtdGl0bGUge2JhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Y29sb3I6ICM4ODg7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY2NjYzsKICAgICAgICAgICAgfQogICAgICAgICAgICAucy1saWItYm94IC5zLWxpYi1ib3gtdGl0bGUge2JhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Y29sb3I6ICM4ODg7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY2NjYzsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnMtbGliLWJveCAucy1sZy1ib3gtZm9vdGVyIHsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH08L3N0eWxlPjwhLS0gbG9hZCBmYXZpY29ucyBmb3IgbWlzY2VsbGFuZW91cyBwbGF0Zm9ybXMgLS0+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5pY28iIHNpemVzPSIzMngzMiI+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5zdmciIHR5cGU9ImltYWdlL3N2Zyt4bWwiPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL2FwcGxlLXRvdWNoLWljb24ucG5nIj48IS0tIDE4MMOXMTgwIC0tPgo8bGluayByZWw9Im1hbmlmZXN0IiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9tYW5pZmVzdC5qc29uIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw0MDBpdGFsaWMsNjAwLDYwMGl0YWxpYyw3MDAsNzAwaXRhbGljIj4KCjwhLS1hZGRlZCBieSBEYXJjeSB0byBjb25maXJtIHcvIEdvb2dsZSB3ZWJtYXN0ZXIgdG9vbHMgd2Ugb3duIHRoaXMgc2l0ZS0tPgo8bWV0YSBuYW1lPSJnb29nbGUtc2l0ZS12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjgyQ3YzSEZXdmNlZkNfOVhhdXZnbGNmQjRoM28wdXVpQzNuS1dXa0xfZUUiIC8+Cgo8IS0tbWV0YSB0YWcgdG8gc2NhbGUgbW9iaWxlIGRldmljZSBkaXNwbGF5LS0+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIG1heGltdW0tc2NhbGU9MSI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkgewogIGpRdWVyeSgiaW1nW2FsdD0nbnVsbCddLCBpbWdbYWx0PSdOdWxsJ10sIGltZ1thbHQ9J05VTEwnXSIpLmF0dHIoImFsdCIsICIiKTsKICB2YXIgbGliY2hhdF9lZmM3NWM1NTk0N2RiMzIzZDRmYWFiNzI1Yjc5MzA3ZiA9IHsgaWlkOjU5LCBrZXk6J2ZiMTA0NDY3MzBlMjcxYycsIHdpZHRoOicyNDAnIH07CgogICQoJ2hlYWRlciAubWVudS0tdG9nZ2xlJykuY2xpY2soZnVuY3Rpb24oKXsKICAgICQoJyNuYXYtbWFpbicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTsKICAgICQoJy53cmFwLXBhZ2UnKS50b2dnbGVDbGFzcygnbW9iaWxlLW5hdi1hY3RpdmUnKTsKICB9KTsKCiAgJCggJy5saW5rLXByaW1hcnknICkuYmluZCggIm1vdXNlZW50ZXIiLCBmdW5jdGlvbigpIHsgCiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgICAkKHRoaXMpLmZpbmQoICcubWVudS1jb250cm9sJyApLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgJ3RydWUnICk7CiAgICAkKHRoaXMpLmNsb3Nlc3QoICcubGluay1wcmltYXJ5JyApLmFkZENsYXNzKCAnb3BlbicgKTsKICB9KTsKICAkKCAnLmxpbmstcHJpbWFyeScgKS5iaW5kKCAibW91c2VsZWF2ZSIsIGZ1bmN0aW9uKCkgeyAKICAgICQodGhpcykuZmluZCggJy5tZW51LWNvbnRyb2wnICkuYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnICk7CiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgfSk7CgogIC8vIG1ha2UgZXNjIGNsb3NlIGFsbCBtZW51cwogICQoICcjbmF2LW1haW4nICkub24oICdrZXlkb3duJyAsIGZ1bmN0aW9uKGUpIHsKICAgIGlmIChlLmtleUNvZGUgPT0gMjcpIHsKICAgICAgaGlkZU1lbnUoZSk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIGhpZGVNZW51KCkgewogICAgJCggJy5saW5rLXByaW1hcnknICkucmVtb3ZlQ2xhc3MoICdvcGVuJyApOwogICAgJCggJy5tZW51LWNvbnRyb2wnICkuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOwogICAgJCggJy5saW5rcy1zdWInICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7CiAgfQoKICAvLyB0aGFua3MgdG8gaHR0cDovL2hleWRvbndvcmtzLmNvbS9wcmFjdGljYWxfYXJpYV9leGFtcGxlcy8KICAkKCcubWFpbi1uYXYtaGVhZGVyJykuZWFjaChmdW5jdGlvbigpIHsKCiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwoKICAgIC8vIGNyZWF0ZSB1bmlxdWUgaWQgZm9yIGExMXkgcmVsYXRpb25zaGlwCiAgICB2YXIgaWQgPSAnY29sbGFwc2libGUtJyArICQoICcjbmF2LW1haW4gaDInICkuaW5kZXgodGhpcyk7CgogICAgLy8gaWRlbnRpZnkgcGFuZWwgYW5kIG1ha2UgaXQgZm9jdXNhYmxlCiAgICB2YXIgcGFuZWwgPSAkKHRoaXMpLm5leHQoICcubGlua3Mtc3ViJyApLmF0dHIoICdhcmlhLWhpZGRlbicsICd0cnVlJyApLmF0dHIoICdpZCcsIGlkKTsKCiAgICAvLyBBZGQgZGVmYXVsdCBhcmlhIHN0YXRlcyB0byBidXR0b24KICAgICR0aGlzLmNoaWxkcmVuKCAnLm1lbnUtY29udHJvbCcgKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKS5hdHRyKCAnYXJpYS1jb250cm9scycsIGlkKTsKICAgIHZhciBidXR0b24gPSAkdGhpcy5jaGlsZHJlbiggJy5tZW51LWNvbnRyb2wnICk7CgogICAgLy8gVG9nZ2xlIHRoZSBzdGF0ZSBwcm9wZXJ0aWVzCiAgICBidXR0b24ub24oICdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNsb3Nlc3QoICcubGluay1wcmltYXJ5JyApLnRvZ2dsZUNsYXNzKCAnb3BlbicgKTsKICAgICAgdmFyIHN0YXRlID0gJCh0aGlzKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcgKSA9PT0gJ2ZhbHNlJyA/IHRydWUgOiBmYWxzZTsKICAgICAgJCh0aGlzKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsIHN0YXRlICk7CiAgICAgIHBhbmVsLmF0dHIoICdhcmlhLWhpZGRlbicsICFzdGF0ZSApOwogICAgfSk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci8qIEJhc2ljIGxheW91dCBydWxlcyAqLwoqIHsKICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbCB7CiAgZm9udC1zaXplOiAxNnB4Owp9Cgpib2R5IHsKICBmb250LWZhbWlseTogSGVsdmV0aWNhLCAiT3BlbiBTYW5zIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7IC8qIHdhcyAxMDAlOyAqLwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKfQoKYSB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgY29sb3I6ICMwMDA7Cn0KYTpob3ZlciB7CiAgY29sb3I6ICMwMGY7Cn0KCmgzIHsKICBmb250LXNpemU6IDIwcHg7Cn0KCi5mbGV4LWNvbnRhaW5lciB7CiAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7Cn0KCi5mbGV4LWVuZCB7CiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDsKICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAtbXMtZmxleC1hbGlnbjogZW5kOwogIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKfQoKLnNyIHsKICBib3JkZXI6IDAgbm9uZTsKICBjbGlwOiByZWN0KDFweCwxcHgsMXB4LDFweCk7CiAgaGVpZ2h0OiAxcHg7CiAgbWFyZ2luOiAtMXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDFweDsKICB3b3JkLXdyYXA6IG5vcm1hbDsKfQoKLmxpc3QtdW5idWxsZXRlZCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBwYWRkaW5nLWxlZnQ6IDA7CiAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi8qIE51bWJlcmVkIHNlY3Rpb25zIGJlbG93IGV4dHJhY3RlZCBmcm9tIGdlbmVyYXRlZCwgdW5taW5pZmllZCBwYXJlbnQgdGhlbWUgZ2xvYmFsLmNzcyAqLwoKLyogMS4gSGVhZGVyICYgTmF2ICovCi5oZWFkZXItbWFpbiB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJhY2tncm91bmQ6ICMwMDAgdXJsKCdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2ltYWdlcy92aS1zaGFwZTctdHAucG5nJykgbm8tcmVwZWF0IDAgNjUlOwogIGNsZWFyOiBib3RoOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAgd2lkdGg6IDEwMCU7CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogMCAxZW07CiAgfQp9Ci5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBvcmRlcjogMjsKICBtaW4td2lkdGg6IDc3cHg7CiAgbWluLXdpZHRoOiA0LjgxMjVyZW07CiAgcGFkZGluZy1ib3R0b206IDYuNHB4OwogIHBhZGRpbmctYm90dG9tOiAwLjRyZW07CiAgZm9udC1zaXplOiAxNC40cHg7CiAgZm9udC1zaXplOiAwLjlyZW07CiAgbGluZS1oZWlnaHQ6IDE7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICAgIG1heC13aWR0aDogMTA0cHg7CiAgICBtYXgtd2lkdGg6IDYuNXJlbTsKICAgIG1hcmdpbi1sZWZ0OiAxLjUlOwogICAgcGFkZGluZzogMDsKICB9Cn0KLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IGF1dG87Cn0KLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogIGZpbGw6ICNmZmY7CiAgcGFkZGluZzogOHB4Owp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHN2ZyB7CiAgbWF4LWhlaWdodDogMjhweDsKICBtYXgtaGVpZ2h0OiAxLjc1cmVtOwogIGhlaWdodDogYXV0bzsKICB3aWR0aDogNzVweDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgc3ZnIHsKICAgIG1heC1oZWlnaHQ6IDQ0cHg7CiAgICBtYXgtaGVpZ2h0OiAyLjc1cmVtOwogICAgd2lkdGg6IDEyMHB4OwogIH0KfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYiB0aXRsZSB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYjpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIG9yZGVyOiAxMDAwOwogIHBhZGRpbmc6IDYuNHB4OwogIHBhZGRpbmc6IDAuNHJlbTsKICBjb2xvcjogI2ZmZjsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIGZvbnQtc2l6ZTogMC43NXJlbTsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQ6Zm9jdXMsCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoOmZvY3VzLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLWNvbnRhY3Q6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgc3ZnLAouaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2ggc3ZnLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCBzdmcgewogIGZpbGw6ICNjOGM4Yzg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZy1ib3R0b206IDAuMjVlbTsKICB3aWR0aDogMmVtOwp9Ci5oZWFkZXItbWFpbiAubGluay1hY2NvdW50IGksCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaCBpLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCBpIHsKICBjb2xvcjogI2M4YzhjODsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1zaXplOiAxNHB4Owp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCwKICAuaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCiAgLmhlYWRlci1tYWluIC5saW5rLWNvbnRhY3QgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCB7CiAgbWFyZ2luLWxlZnQ6IDAuNnJlbTsKICBtYXJnaW4tcmlnaHQ6IDAuNnJlbTsKfQouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Ci5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgZGlzcGxheTogbm9uZTsKICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICBvcmRlcjogNDsKICBwYWRkaW5nLXRvcDogMzJweDsKICBwYWRkaW5nLXRvcDogMnJlbTsKICBwYWRkaW5nLWJvdHRvbTogOHB4OwogIHBhZGRpbmctYm90dG9tOiAwLjVyZW07CiAgcGFkZGluZy1sZWZ0OiAwLjVlbTsKICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKICBtYXgtd2lkdGg6IDc0cHg7CiAgbWF4LXdpZHRoOiA3My42cHg7CiAgbWF4LXdpZHRoOiA0LjZyZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9Cn0KLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9Ci5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdDpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0IHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IGF1dG87CiAgbWF4LWhlaWdodDogNDVweDsKICBtYXgtaGVpZ2h0OiAyLjgxMjVyZW07CiAgZmlsbDogI2I5YjdiNjsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0IC5jb2xvciB7CiAgZmlsbDogI2ZmZjsKfQojc2tpcCBhIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTEwMDAwcHg7CiAgdG9wOiBhdXRvOwogIHdpZHRoOiAxcHg7CiAgaGVpZ2h0OiAxcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiBibHVlOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IDEwcHg7Cn0KI3NraXAgYTpmb2N1cyB7CiAgcG9zaXRpb246IHN0YXRpYzsKICB3aWR0aDogYXV0bzsKICBoZWlnaHQ6IGF1dG87Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uby1mbGV4Ym94LmZsZXhib3hsZWdhY3kgLmhlYWRlci1tYWluIC5pY29uLWFjY291bnQsCiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLmljb24tc2VhcmNoIHsKICAgIG1heC1oZWlnaHQ6IDE2cHg7CiAgICBtYXgtaGVpZ2h0OiAxcmVtOwogICAgbWF4LXdpZHRoOiAxNnB4OwogICAgbWF4LXdpZHRoOiAxcmVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLm1lbnUtLXRvZ2dsZSBzdmcgewogICAgaGVpZ2h0OiAxMDAlOwogICAgcGFkZGluZzogMWVtOwogICAgd2lkdGg6IGF1dG87CiAgfQp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiB7CiAgaGVpZ2h0OiA2MnB4OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluICogewogIGhlaWdodDogNjJweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBtYXJnaW4tbGVmdDogMzJweDsKICBtYXgtd2lkdGg6IDEwM3B4Owp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAubG9nby1taXQgewogIG1hcmdpbi10b3A6IDI0cHg7CiAgbWFyZ2luLWxlZnQ6IDQwcHg7Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIC5zbWFsbCB7CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgcGFkZGluZy10b3A6IDI2cHg7CiAgcGFkZGluZy10b3A6IDEuNjI1cmVtOwp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAuc21hbGwgc3ZnIHsKICBkaXNwbGF5OiBub25lOwp9CmJvZHkudXNlci1pcy10YWJiaW5nICoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsubm8tdW5kZXJsaW5lOmZvY3VzIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgYm9keS51c2VyLWlzLXRhYmJpbmcgKi5uYXYtbWFpbiAubWFpbi1uYXYtbGluazpmb2N1cyB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gewogIGZsZXgtd3JhcDogd3JhcDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMDAlKTsKICB6LWluZGV4OiA3MDAwOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5uYXYtbWFpbi5hY3RpdmUgewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXNpemU6IDFyZW07CiAgcGFkZGluZzogMHB4IDhweCA4cHggOHB4OwogIHBhZGRpbmc6IDByZW0gMC41cmVtIDAuNXJlbSAwLjVyZW07CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm94LXNoYWRvdzogMCAzcHggM3B4ICNjY2M7CiAgaGVpZ2h0OiBhdXRvOwogIGZsZXg6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyLjhlbSk7CiAgdG9wOiAwOwogIHdpZHRoOiAxMDAlOwp9Ci5uYXYtbWFpbi5hY3RpdmUgYSB7CiAgd2lkdGg6IDEwMCU7Cn0KLm5hdi1tYWluLmFjdGl2ZSBhOmhvdmVyLAoubmF2LW1haW4uYWN0aXZlIGE6Zm9jdXMgewogIGNvbG9yOiAjZmZmOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLm5hdi1tYWluIHsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogODAwcHgpIHsKICAubmF2LW1haW4gewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG9yZGVyOiAzOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3aWR0aDogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7CiAgfQp9Ci5uYXYtbWFpbiAuc21hbGwgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAuc21hbGwgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDAuNzVlbTsKICB9CiAgLm5hdi1tYWluIC5zbWFsbCBhIHsKICAgIHBhZGRpbmc6IDFyZW0gMC41cmVtIDAuNXJlbSAwLjVyZW07CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgc3ZnIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmlsbDogI2ZmZjsKICAgIG1hcmdpbi1ib3R0b206IDAuNGVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkgewogIC5uYXYtbWFpbiAuc21hbGwgewogICAgZm9udC1zaXplOiAxZW07CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgYSB7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHBhZGRpbmctdG9wOiAyZW07CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgc3ZnIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5uYXYtbWFpbiAuY2hhdCB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5jaGF0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KICAubmF2LW1haW4gLmNoYXQgLmxpbmtzLXN1YiB7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgbWluLXdpZHRoOiA5LjM3NXJlbTsKICAgIGJhY2tncm91bmQ6ICNmM2YzZjM7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC5tb3JlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC53cmFwLWJ1dHRvbi1jaGF0IHsKICAgIG1pbi1oZWlnaHQ6IDQ2cHg7CiAgICBtaW4taGVpZ2h0OiAyLjg3NXJlbTsKICAgIHBhZGRpbmc6IDE2cHggOHB4IDBweCA4cHg7CiAgICBwYWRkaW5nOiAxcmVtIDAuNXJlbSAwcmVtIDAuNXJlbTsKICAgIG1pbi13aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC53cmFwLWJ1dHRvbi1jaGF0ICNsaWJjaGF0X2J0bl93aWRnZXQgewogICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjsKICB9Cn0KLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0IHsKICBkaXNwbGF5OiBibG9jazsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICB9Cn0KLm5hdi1tYWluIC5saW5rLXByaW1hcnkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubGluay1wcmltYXJ5IHsKICAgIHdpZHRoOiBhdXRvOwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeSAubGlua3Mtc3ViIHsKfQoubmF2LW1haW4gLm1haW4tbmF2LWhlYWRlciB7CiAgaGVpZ2h0OiAxMDAlOwogIGZvbnQtc2l6ZTogMTAwJTsKfQoubmF2LW1haW4gLm1haW4tbmF2LWhlYWRlciBidXR0b24gewogIGJvcmRlcjogMDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIHBhZGRpbmc6IDA7Cn0KLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICBwYWRkaW5nOiA4cHg7CiAgcGFkZGluZzogMC41cmVtOwogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nLXRvcDogMmVtOwogIH0KfQoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsuYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiBsaWdodGdyYXk7CiAgYm94LXNoYWRvdzoKICAgIDAgMCAycHggIzQ0NCwKICAgIGluc2V0IDFweCAwIDAgZ3JheSwKICAgIGluc2V0IC0xcHggMCAwIGdyYXksCiAgICBpbnNldCAwIDFweCAwIGdyYXk7Cn0KLm5hdi1tYWluIC5tYWluLW5hdi1saW5rLm5vLXVuZGVybGluZTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGNvbG9yOiAjZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluazpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gLmNvbC0xIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci5uYXYtbWFpbiAuY29sLTIgewogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci5uYXYtbWFpbiAubGlua3Mtc3ViIHsKICBkaXNwbGF5OiBub25lOwogIGxlZnQ6IDA7CiAgbWF4LWhlaWdodDogMDsKICBvcGFjaXR5OiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTAwJTsKICB0cmFuc2l0aW9uOgogICAgbWF4LWhlaWdodCAwLjNzLAogICAgbWFyZ2luIDAuM3MsCiAgICBvcGFjaXR5IDAuM3MsCiAgICBvdmVyZmxvdyAwLjNzLAogICAgcGFkZGluZy10b3AgMC4zcywKICAgIHBhZGRpbmctYm90dG9tIDAuM3M7CiAgd2lkdGg6IDMxLjc1ZW07Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIucHVzaCB7CiAgbGVmdDogYXV0bzsKICByaWdodDogMDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5saW5rLXByaW1hcnkub3BlbiAubWFpbi1uYXYtbGluayB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeS5vcGVuIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubGluay1wcmltYXJ5Lm9wZW4gLmxpbmtzLXN1YiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYm94LXNoYWRvdzogMCAwIDJweCAjNDQ0OwogICAgbWF4LWhlaWdodDogMTAwMHB4OwogICAgb3BhY2l0eTogMTsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwogIH0KfQoubmF2LW1haW4gLmxpbmtzLXN1YiB7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgYSB7CiAgY29sb3I6ICMwMDA7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nOiAwLjVlbTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBhOmhvdmVyLAoubmF2LW1haW4gLmxpbmtzLXN1YiBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3OwogIGNvbG9yOiAjZmZmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBbY2xhc3MqPSJjb2wtIl0gewogIHdpZHRoOiA1MCU7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmFib3V0IHsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDAuNjg3NWVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbSB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDA7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbS5leHRyYSBzcGFuOmZpcnN0LW9mLXR5cGU6YWZ0ZXIgewogIGNvbnRlbnQ6IHVybCguLi8uLi9pbWFnZXMvYXJyb3ctcmlnaHQtc2Z3LnN2Zyk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbTpub3QoLmV4dHJhKTphZnRlciB7CiAgY29udGVudDogdXJsKC4uLy4uL2ltYWdlcy9hcnJvdy1yaWdodC1zZncuc3ZnKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDAuMjVlbTsKfQoubmF2LW1haW4gLmJvdHRvbTpub3QoLmV4dHJhKSBzcGFuOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6YmVmb3JlIHsKICBjb2xvcjogIzAwN2RiODsKICBjb250ZW50OiAifCI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogNHB4Owp9Ci5uYXYtbWFpbiAuaGVhZGluZy1jb2wgewogIG1hcmdpbjogMTZweCAwcHggOHB4IDhweDsKICBtYXJnaW46IDFyZW0gMHJlbSAwLjVyZW0gMC41cmVtOwogIGNvbG9yOiAjMDAwOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMC43NWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgcGFkZGluZy1ib3R0b206IDA7Cn0KLm5hdi1wYWdlIHsKICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7Cn0KLm5vLWNzc3RyYW5zaXRpb25zIC5saW5rLXByaW1hcnkgLmxpbmtzLXN1YiB7CiAgaGVpZ2h0OiAwOwogIG1hcmdpbjogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAwOwp9Ci5uby1jc3N0cmFuc2l0aW9ucyAubGluay1wcmltYXJ5OmhvdmVyIC5saW5rcy1zdWIsCi5uby1jc3N0cmFuc2l0aW9ucyAubGluay1wcmltYXJ5OmZvY3VzIC5saW5rcy1zdWIgewogIGhlaWdodDogYXV0bzsKICBtYXJnaW46IGF1dG87CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgcGFkZGluZzogMTZweDsKICBwYWRkaW5nOiAxcmVtOwogIHdpZHRoOiA2MDBweDsKfQoubmF2LXNlY29uZGFyeSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWRlZGU7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc2l6ZTogMXJlbTsKICBtYXJnaW46IDAgMjBweDsKICB6LWluZGV4OiA3MDAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSB7CiAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgaGVpZ2h0OiAwOwogICAgbWFyZ2luOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBhZGRpbmc6IDA7CiAgfQogIC5uYXYtc2Vjb25kYXJ5LmFjdGl2ZSB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtYXJnaW46IDA7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHBhZGRpbmc6IDA7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IHVsIHsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGk6bnRoLWNoaWxkKG4gKyA0KSB1bCB7CiAgcmlnaHQ6IDA7Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwogIGJveC1zaGFkb3c6IDAgMCAycHggIzQ0NDsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWJhYmFiOwogIGhlaWdodDogYXV0bzsKICBsaW5lLWhlaWdodDogMTsKICBtYXJnaW46IGF1dG87CiAgb3BhY2l0eTogMTsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB3aWR0aDogMTAwJTsKICB6LWluZGV4OiA3MDAwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpob3ZlciBsaSBhIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxNnB4OwogIHBhZGRpbmc6IDFyZW07Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpID4gYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMTZweDsKICBwYWRkaW5nOiAxcmVtOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgPiBhIHsKICAgIGNvbG9yOiB3aGl0ZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIGxpIHsKICBoZWlnaHQ6IDA7CiAgbGluZS1oZWlnaHQ6IDA7CiAgbWFyZ2luOiAwOwogIG9wYWNpdHk6IDA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMDsKfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgdWwgewogIGJveC1zaGFkb3c6IDAgMXB4IDJweCAjNDQ0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMzIwcHg7CiAgd2lkdGg6IDIwcmVtOwp9Ci5uYXYtc2Vjb25kID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50OwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5tb2JpbGUtZGlzcGxheSB7CiAgZGlzcGxheTogbm9uZTsKfQouaGlkZS1tb2JpbGUtbmF2LWxpbmsgewogIGRpc3BsYXk6IG5vbmU7Cn0KLm1lbnUtLXRvZ2dsZSB7CiAgbWluLXdpZHRoOiA1MXB4OwogIG1pbi13aWR0aDogMy4xODc1cmVtOwogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXNpemU6IDFyZW07CiAgYmFja2dyb3VuZDogIzAwMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZmlsbDogI2ViZjVmZjsKICBvcmRlcjogMTsKICB3aWR0aDogMTQuMzc1JTsKICB6LWluZGV4OiA3MDAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubWVudS0tdG9nZ2xlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5tZW51LS10b2dnbGUgc3ZnIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDFlbSBhdXRvOwp9Ci5tZW51LS10b2dnbGU6aG92ZXIsCi5tZW51LS10b2dnbGU6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7CiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKfQoubm8tZmxleGJveCAubGluay1wcmltYXJ5LmNoYXQ6aG92ZXIgLmxpbmtzLXN1YiwKLm5vLWZsZXhib3ggLmxpbmstcHJpbWFyeS5jaGF0OmZvY3VzIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpob3ZlciAubGlua3Mtc3ViIGEsCi5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpmb2N1cyAubGlua3Mtc3ViIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwp9Ci5sdGUtaWU5IC5uYXYtbWFpbiAubGlua3Mtc3ViIHsKICBkaXNwbGF5OiBub25lOwp9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OHB4KSBhbmQgKG1heC13aWR0aDogNzAwcHgpIHsKICAubGluay1wcmltYXJ5IC5zZWFyY2gtbGluayB7CiAgICBwYWRkaW5nLXJpZ2h0OiAyZW07CiAgfQogIC5saW5rLXByaW1hcnkgLmFjY291bnQtbGluayB7CiAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICB9Cn0KCi8qIDIuIEZvb3RlciAqLwouZm9vdGVyLW1haW4gewogIGJhY2tncm91bmQ6ICMwMDAgdXJsKC4uLy4uL2ltYWdlcy92aS1zaGFwZTctdHAucG5nKSBuby1yZXBlYXQgMTAlIGNlbnRlcjsKICBmbGV4LXdyYXA6IHdyYXA7CiAgY2xlYXI6IGJvdGg7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiB7CiAgICBwYWRkaW5nOiAxLjI1ZW0gMS4zNzVlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiB7CiAgICB3aWR0aDogMTAwJTsKICB9Cn0KLmZvb3Rlci1tYWluIGEgewogIGNvbG9yOiAjZjNmM2YzOwp9Ci5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIGZsZXgtd3JhcDogd3JhcDsKICBwYWRkaW5nOiAyZW0gMCAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmlkZW50aXR5IHsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHdpZHRoOiAxMDAlOwogIH0KfQouZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjODA4Mjg1OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjODA4Mjg1OwogIGZsZXgtd3JhcDogd3JhcDsKICBmb250LXNpemU6IDAuODEyNWVtOwogIG1hcmdpbi10b3A6IDJlbTsKICBwYWRkaW5nOiAycmVtIDEuMzc1cmVtOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBmb250LXNpemU6IDAuODc1ZW07CiAgICBtYXJnaW4tdG9wOiAtMjIuNHB4OwogICAgbWFyZ2luLXRvcDogLTEuNHJlbTsKICAgIG1hcmdpbi1sZWZ0OiAxODRweDsKICAgIG1hcmdpbi1sZWZ0OiAxMS41cmVtOwogICAgcGFkZGluZzogMDsKICAgIHotaW5kZXg6IDMwMDA7CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICBtYXJnaW4tdG9wOiAxLjVyZW07CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgbWFyZ2luLWxlZnQ6IDByZW07CiAgfQp9Ci5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSBzcGFuIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNTAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbiB7CiAgICBmb250LXdlaWdodDogMzAwOwogICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHNwYW46bm90KDpsYXN0LW9mLXR5cGUpOmFmdGVyIHsKICAgIGNvbG9yOiAjZGVkZWRlOwogICAgY29udGVudDogInwiOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLWxlZnQ6IDFlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbjpmaXJzdC1vZi10eXBlIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9Cn0KLmZvb3Rlci1tYWluIC5sb2dvLW1pdC1saWIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZpbGw6ICNmZmY7CiAgcGFkZGluZy1sZWZ0OiAxLjM3NWVtOwogIHdpZHRoOiAxMC4zMTI1ZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICAgIG1heC13aWR0aDogOS41ZW07CiAgICB3aWR0aDogOS41ZW07CiAgfQp9Ci5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHN2ZyB7CiAgbWF4LWhlaWdodDogNGVtOwogIG1heC13aWR0aDogOS41ZW07CiAgZmlsbDogI2ZmZjsKfQouZm9vdGVyLW1haW4gLmxvZ28tbWl0LWxpYiB0aXRsZSB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQouZm9vdGVyLW1haW4gLnRleHQtZmluZC11cyB7CiAgY29sb3I6ICNlYmViZWI7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAwLjYyNWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgbWluLXdpZHRoOiA3ZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAudGV4dC1maW5kLXVzIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQouZm9vdGVyLW1haW4gLnNvY2lhbCB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBmbGV4LXdyYXA6IHdyYXA7CiAgcGFkZGluZy1sZWZ0OiAxLjM3NWVtOwogIHdpZHRoOiBhdXRvOwogIG1pbi13aWR0aDogMTJlbTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgewogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBtYXJnaW4tYm90dG9tOiAwLjJlbTsKICAgIHotaW5kZXg6IDQwMDA7CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIGEgewogIHdpZHRoOiAzMyU7Cn0KLmZvb3Rlci1tYWluIC5zb2NpYWwgYTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLnNvY2lhbCBhIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC5mb290ZXItbWFpbiAuc29jaWFsIGE6bm90KDpsYXN0LW9mLXR5cGUpIHsKICAgIG1hcmdpbi1yaWdodDogMC41ZW07CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIFtjbGFzcyo9Imljb24tc29jaWFsIl0gewogIGJhY2tncm91bmQ6ICNkZWRlZGU7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGhlaWdodDogMS41ZW07CiAgcGFkZGluZzogMC4yZW07CiAgd2lkdGg6IDEuNWVtOwp9Ci5mb290ZXItbWFpbiAuc29jaWFsIFtjbGFzcyo9Imljb24tc29jaWFsIl0gcGF0aCB7CiAgZmlsbDogIzQ3NDc0NzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgW2NsYXNzKj0iaWNvbi1zb2NpYWwiXSB7CiAgICBoZWlnaHQ6IDJlbTsKICAgIHBhZGRpbmc6IDAuMmVtOwogICAgd2lkdGg6IDJlbTsKICB9Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSB7CiAgYWxpZ24taXRlbXM6IHN0YXJ0OwogIGJhY2tncm91bmQ6ICMzMzM7CiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgcGFkZGluZzogMS4yNWVtIDEuMzc1ZW07Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAubGljZW5zZSB7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1zaXplOiAwLjY4NzVlbTsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXgtd2lkdGg6IDQwMHB4OwogIG1heC13aWR0aDogMjVyZW07Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAubGljZW5zZSBhIHsKICBjb2xvcjogI2VkZWRlZDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQouZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saW5rLWxvZ28tbWl0IHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW4tcmlnaHQ6IDUwcHg7CiAgbWFyZ2luLXJpZ2h0OiAzLjEyNXJlbTsKICBtaW4td2lkdGg6IDE1MnB4OwogIG1pbi13aWR0aDogOS41cmVtOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGU6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgPiBhLAoubm8tZmxleGJveCAuZm9vdGVyLWluZm8taW5zdGl0dXRlID4gZGl2IHsKICBmbG9hdDogbGVmdDsKfQoubm8tZmxleGJveCAuZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saW5rLWxvZ28tbWl0IHsKICBwYWRkaW5nLXRvcDogMS41ZW07Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1tYWluLmZsZXgtY29udGFpbmVyIHsKICBkaXNwbGF5OiBibG9jazsKICBmbG9hdDogbGVmdDsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW46YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMTAwJTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmlkZW50aXR5IC5sb2dvLW1pdC1saWIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0Owp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgLnNvY2lhbCB7CiAgYm90dG9tOiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIHJpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi10b3A6IDA7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbGVmdDogMjAycHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNzlweDsKICB3aWR0aDogMTAwJTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci5uby1mbGV4Ym94LmZsZXhib3hsZWdhY3kgLmZvb3Rlci1tYWluIHsKICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KLmx0ZS1pZTkubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmlkZW50aXR5IHsKICB3aWR0aDogMTAwJTsKfQoKLyogMy4gbm8tZmxleGJveCBmYWxsYmFja3MgKi8KLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jbGVhciB7CiAgY2xlYXI6IGJvdGgKfQoKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXIgewogIGRpc3BsYXk6IGJsb2NrCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmEsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmJ1dHRvbiwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+ZGl2LAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5mb3JtLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oMSwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+aDIsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmgzLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oZWFkZXIsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmlucHV0LAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5uYXYsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPnNwYW4sCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPnN2ZywKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+dWwgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiBhdXRvCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyOmFmdGVyIHsKICBjbGVhcjogYm90aDsKICBjb250ZW50OiAnJzsKICBkaXNwbGF5OiB0YWJsZQp9Cgoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWl0ZW0gewogIGZsb2F0OiBsZWZ0Cn0KCi8qIDQuIGhpZGluZyBhbmQgc2hvd2luZyBlbGVtZW50cyBiYXNlZCBvbiBtb2JpbGUgY2xhc3NlcyAqLwouaGlkZGVuLW1vYmlsZSB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhpZGRlbi1tb2JpbGUgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQp9Ci5pbmFjdGl2ZS1tb2JpbGUgewogIG9wYWNpdHk6IDA7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMjFweCkgewogIC5pbmFjdGl2ZS1tb2JpbGUgewogICAgb3BhY2l0eTogMTsKICB9Cn0KLmhpZGRlbi1ub24tbW9iaWxlIHsKICBkaXNwbGF5OiBibG9jazsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhpZGRlbi1ub24tbW9iaWxlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9CgovKiBMb2NhbCBvdmVycmlkZXMgZm9yIGxpYmd1aWRlcyAqLwoKLyogUmVzZXQgb25seSB3aGF0IHlvdSBuZWVkICovCi5oZWFkZXItbWFpbiwKZm9vdGVyIHsKICBtYXgtd2lkdGg6IDExNzBweDsgLyogbWF0Y2hlcyAuY29udGFpbmVyICovCiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luOiAwIGF1dG87Cn0KCi5oZWFkZXItbWFpbiB7CiAgcGFkZGluZzogMCAyMHB4Owp9CgouaGVhZGVyLW1haW4gLm5hbWUtc2l0ZSB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjhweCkgewogIC5oZWFkZXItbWFpbj5bY2xhc3MqPWxpbmtdIHsKICAgIGZvbnQtc2l6ZTogOXB4CiAgfQogIC5oZWFkZXItbWFpbiB7CiAgICBwYWRkaW5nOiAwOwogIH0KICAuaGVhZGVyLW1haW4gLm1lbnUtLXRvZ2dsZSB7CiAgICBtYXJnaW46IGF1dG8gMDsKICB9CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KfQoKLyogVGhlIHJ1bGVzIGluIHRoaXMgbWVkaWEgcXVlcnkgcHJpbWFyaWx5IHNldCBhbGlnbm1lbnQgZm9yIHRoZSBsb2dvcyBhbmQgbmF2ICovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAgaGVpZ2h0OiA3NXB4OyAvKiBtYXRjaGVzIGhlaWdodCBvZiBsb2dvcywgaW5jbHVkaW5nIDIwcHggdG9wL2JvdHRvbSBwYWRkaW5nICovCiAgfQogIC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICAgIG1heC13aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluLAogIC5uYXYtbWFpbiAubmF2LW1haW4tbGlzdCwKICAubmF2LW1haW4gLm5hdi1tYWluLWxpc3QgbGksCiAgLm5hdi1tYWluIC5zbWFsbCBhLAogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluayB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgfQogIC5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHsKICAgIHBhZGRpbmc6IDIwcHggMDsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICB9CiAgLm5hdi1tYWluIHsKICAgIG1hcmdpbjogMCAxMHB4OwogIH0KICAuaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCiAgLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgewogICAgcGFkZGluZzogMjBweCAwOwogIH0KICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogIH0KICAubmF2LW1haW4gLm1haW4tbmF2LWxpbmsgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMjBweCA4cHg7CiAgfQogIC5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgICBkaXNwbGF5OiBub25lCiAgfQp9CgovKiA2MzVweCBpcyB0aGUgbWF4aW11bSB3aWR0aCBiZWZvcmUgdGhlIGxvZ29zIHdpbGwgc2hyaW5rIGlmIGJvdGggYXJlIGRpc3BsYXllZCAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYzNXB4KSB7CiAgLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMjBweCAwOwogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIH0KfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsgLyogZmxleC1kaXJlY3Rpb24gYW5kIGFsaWdubWVudCBuZWVkcyB0byBjaGFuZ2Ugd2hlbiB0aGUgU1ZHcyBhcmUgaGlkZGVuICovCiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogIH0KfQoKLmhlYWRlci1tYWluIGgyIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIGJhY2tncm91bmQ6IDAgMDsKfQoKLmhlYWRlci1tYWluIHVsIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIGJhY2tncm91bmQ6IDAgMDsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cn0KCmZvb3RlciBhLApoZWFkZXIgYSB7CiAgY29sb3I6ICMwMDA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CmZvb3RlciBhOmhvdmVyLApmb290ZXIgYTpmb2N1cyB7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCmgxI3MtbGctZ3VpZGUtbmFtZSB7CiAgICBmb250LXNpemU6IDMwcHg7Cn0KCi5zLWxpYi1ib3gtY29udGVudCAudWktd2lkZ2V0IHsKICAgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsICJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAxNnB4OyAvKiB3YXMgMTAwJTsgKi8KICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owp9CgoudGFicyBhIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi51aS13aWRnZXQtY29udGVudCBhIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogIzAwMDsKfQoKLnVpLXdpZGdldC1jb250ZW50IGE6aG92ZXIgewogIGNvbG9yOiAjMDBmOwp9Cgp0YWJsZSwgdGgsIHRkIHsKICAgIHBhZGRpbmc6IDVweDsKfQoKI3MtbGctZ3VpZGUtZGVzY3JpcHRpb24sCiNzLWxnLWd1aWRlLWhlYWRlci1zZWFyY2gsCiNzLWxpYi1iYywKI3MtbGctZ3VpZGUtaGVhZGVyLXVwZGF0ZWQsCiNzLWxnLWd1aWRlLWhlYWRlci11cmwsCiNzLWxnLWd1aWRlLXByaW50LXVybCwKI3MtbGctZ3VpZGUtaGVhZGVyLXN1YmplY3RzLAojcy1sZy1ndWlkZS1oZWFkZXItdGFncyB7CiBkaXNwbGF5Ogogbm9uZTsKfQoKI3MtbGctZ3VpZGUtaGVhZGVyIHsKIG1hcmdpbi10b3A6IDE1cHg7Cn0KCiNzLWxnLWd1aWRlLW5hbWUgewogZm9udC13ZWlnaHQ6IDQwMDsKfQoKLnMtbGliLWJveCAucy1saWItYm94LXRpdGxlIHsKIGZvbnQtc2l6ZTogMThweDsKIGNvbG9yOiAjMTExOwp9Cgoucy1saWItYm94IHsKIGNvbG9yOiAjMTExOwp9Cgoucy1saWItYm94LWNvbnRlbnQgewogcGFkZGluZzogMjBweDsKfQoKLyogSGlkZXMgRW1haWwgTWUgYnV0dG9uKi8KLnMtbGliLXByb2ZpbGUtZW1haWwgPiBhIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qSGlkZXMgd2Vic2l0ZSwgU2t5cGUsICYgU29jaWFsIGxpbmtzIGZyb20gcHJvZmlsZSovCi5mYS1ib29rbWFyaywgLmZhLXNreXBlLCAucy1saWItcHJvZmlsZS1zb2NpYWwgewogZGlzcGxheTogbm9uZTsKfQoKLyogT3ZlcnJpZGluZyB0aGUgYWNjb3JkaW9uIG1hcmt1cCB3aXRoIGNoYW5nZWFibGUgYXJyb3dzICovCi5hY2NvcmRpb24tZ3JvdXAgLmFjY29yZGlvbi10b2dnbGUgewogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgYmFja2dyb3VuZDogdXJsKCdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2ltYWdlcy9saWJndWlkZXMtYXJyb3ctZG93bi5wbmcnKSBuby1yZXBlYXQgbGVmdCBjZW50ZXI7CiAgcGFkZGluZy1sZWZ0OiAxNXB4Owp9Ci5hY2NvcmRpb24tZ3JvdXAgLmFjY29yZGlvbi10b2dnbGUuY29sbGFwc2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaW1hZ2VzL2xpYmd1aWRlcy1hcnJvdy1yaWdodC5wbmcnKQp9CgovKiBCYXJ0b25QbHVzIHNlYXJjaCBib3ggKi8KI3MtbGctYm94LTM1MDA5NzQtY29udGFpbmVyIGlucHV0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQojcy1sZy1ib3gtMzUwMDk3NC1jb250YWluZXIgbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbWF4LXdpZHRoOiA4MCU7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLypIaWRlcyBndWlkZSBhdXRob3IsIGxhc3QgdXBkYXRlZCBkYXRlLCBhbmQgbnVtYmVyIG9mIHZpZXdzIHRoaXMgeWVhciBmcm9tIGd1aWRlIGxpc3RzKi8KLnMtbGctc3lzdGVtLWxpc3QgLnMtbGctZ3VpZGUtbGlzdC1pbmZvIHsKIGRpc3BsYXk6IG5vbmU7CiBmb250LXNpemU6IDAuOWVtOwp9CgovKkhpZGVzICJza2lwIHRvIG1haW4gY29udGVudCIgbGluayBpbiB0b3AgbGVmdCBvZiBiYW5uZXIqLwphI3MtbGctcHVibGljLXNraXBsaW5rIHsgCnBvc2l0aW9uOmFic29sdXRlOyAKbGVmdDotMTAwMDBweDsgCnRvcDphdXRvOyAKd2lkdGg6MXB4OyAKaGVpZ2h0OjFweDsgCm92ZXJmbG93OmhpZGRlbjsKfSAKIAphOmZvY3VzI3MtbGctcHVibGljLXNraXBsaW5rIHsgCnBvc2l0aW9uOnN0YXRpYzsgCndpZHRoOmF1dG87IApoZWlnaHQ6YXV0bzsgCn0gCgovKiBzdGFmZiBjb250YWN0IGNhcmQgc3R5bGVzICovCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1pbWFnZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAKICBtYXJnaW4tcmlnaHQ6IDE1cHg7Cn0KCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1pbmZvIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IAogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1oZWxwIHsKICBkaXNwbGF5OiBibG9jazsKfQoKLyogY3VzdG9taXplIGJyb3d6aW5lIHdpZGdldCAqLwojYnJvd3ppbmVXaWRnZXQgLnNtYWxsV2lkZ2V0IHsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluICFpbXBvcnRhbnQ7Cn0KCiNicm93emluZVdpZGdldCAuc21hbGxXaWRnZXQgLndpZGdldFRleHQgewogIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nOiAxMHB4Owp9CgojYnJvd3ppbmVXaWRnZXQgLndpZGdldFRleHQgLmludHJvIHsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKfQoKLyogY3VzdG9taXplIFdvcmxkY2F0IHNlYXJjaCBib3ggKi8KLnMtbGctYm94LXdyYXBwZXItMjUxOTM2NzEgewogICAgZm9udC1zaXplOiAuOGVtOwp9Ci5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxIC5zLWxpYi1ib3gtY29udGVudCB7CiAgcGFkZGluZzogMCAxZW07Cn0KCi5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxIGlucHV0IHsKICBwYWRkaW5nOiAuNWVtICFpbXBvcnRhbnQ7IAogIG1pbi13aWR0aDogNWVtICFpbXBvcnRhbnQ7IAp9Ci5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxICNkaXNjb3Zlcnktc2VhcmNoLWZvcm0gewogIHBhZGRpbmc6IDFlbTsKfQoKLyogU3R5bGluZyBmb3IgQ09WSUQtMTkgaW5mbyBiYW5uZXIgKi8KLmFsZXJ0LWJhbm5lciB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAxcmVtIGF1dG87CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIHBhZGRpbmc6IDEuNnJlbSAycmVtOwogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMDA7CiAgY29sb3I6ICMwMDA7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQouYWxlcnQtYmFubmVyIC5mYSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogMC41ZW07Cn0KPC9zdHlsZT4KCjwhLS0gU3R5bGluZyBmb3IgQS1aIGRhdGFiYXNlcyAtLT4KPHN0eWxlPgovKiBIaWRlIHRoZSBEYXRhYmFzZSBUeXBlcyBkcm9wZG93biAqLwojY29sLXR5cGVzIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLyogSGlkZSB0aGUgVmVuZG9ycyBkcm9wZG93biAqLwojY29sLXZlbmRvcnMgewogICAgZGlzcGxheTogbm9uZTsKfQovKmNoYW5nZSBhIHRvIHogZGF0YWJhc2UgdGl0bGVzIHRvIGJlIGxhcmdlciAqLwojcy1sZy1hei1yZXN1bHRzIC5zLWxnLWF6LXJlc3VsdC10aXRsZSB7CmZvbnQtc2l6ZTogMS4xZW07Cn0KLypjaGFuZ2UgYSB0byB6IGRhdGFiYXNlcyBhbHRlcm5hdGl2ZSB0aXRsZSBzaXppbmcgKi8KZGl2LnMtbGctYXotcmVzdWx0LWtleXdvcmRzIHsKZm9udC1zaXplOiAuOWVtOwp9Ci8qIENoYW5nZSBsZXR0ZXIgaGVhZGluZyBzaXplcyovCmgzLnMtbGctZGItcGFuZWwtdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxLjNlbTsKfQo8L3N0eWxlPgo8c2NyaXB0PgogICAgdmFyIHNwcmluZ1N0YXRzID0gc3ByaW5nU3RhdHMgfHwge307CiAgICBzcHJpbmdTdGF0cy5zYUNvbmZpZyA9IHNwcmluZ1N0YXRzLnNhQ29uZmlnIHx8IHsKICAgICAgICBzaXRlX2lkOiA2OCwKICAgICAgICB0cmFja2luZ19wYXJhbWV0ZXJzOiB7Il9zdF9ndWlkZV9pZCI6MTIwNTY3NiwiX3N0X3BhZ2VfaWQiOjg4MTcxODksIl9zdF9zaXRlX2lkIjo2OH0sCiAgICAgICAgdHJhY2tpbmdfc2VydmVyX2hvc3Q6ICJsaWJndWlkZXMtcHJvYy5zcHJpbmd5YXdzLmNvbSIKICAgIH07Cjwvc2NyaXB0Pgo8c2NyaXB0ICBzcmM9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcy9zYS5taW4uanM/MzExNiI+PC9zY3JpcHQ+CjxzY3JpcHQ+CgkJCXNwcmluZ1NwYWNlLkNvbW1vbiA9IHNwcmluZ1NwYWNlLkNvbW1vbiB8fCB7IH07CgkJCXNwcmluZ1NwYWNlLkNvbW1vbi5jb25zdGFudCA9IHsKCQkJCQlQUk9DRVNTSU5HOiB7CgkJCQkJCUFDVElPTl9ESVNQTEFZX1BPTEw6IDE1OQoJCQkJCX0KCQkJfTsKCQkJc3ByaW5nU3BhY2UuQ29tbW9uLmJhc2VVUkwgPSAiaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS8iOwoJCQkKCQkJaGFuZGxlU2Nyb2xsPWZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7CgkJCQkJdmFyIHRhcmdldF9lbHQgPSAiI3MtbGctcGFnZS1zZWN0aW9uLTg4MTcxODkiOwoJCQkJCWpRdWVyeSgiaHRtbCwgYm9keSIpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IGpRdWVyeSh0YXJnZXRfZWx0KS5vZmZzZXQoKS50b3AgfSwgNzUwKTsKCQkJCQlpZiAoalF1ZXJ5KHRoaXMpLnNjcm9sbFRvcCgpID4gMjIwKSB7CgkJCQkJCWpRdWVyeSgiI3MtbGliLXNjcm9sbC10b3AiKS5mYWRlSW4oNzUwKTsKCQkJCQl9CgkJCQl9CgkJCX0KCSAgIDwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgIC8vIEVuYWJsZSB0b29sdGlwcy4KICAgICAgICAgICAgalF1ZXJ5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgc3ByaW5nU3BhY2UuVUkuaW5pdFBvcE92ZXJzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIi5hei1icy10b29sdGlwIikudG9vbHRpcCgpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9CiAgICAgICAgICAgIH0pOwogICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja1BhZ2Uoe19zdF90eXBlX2lkOiAnMScsX3N0X2d1aWRlX2lkOiAnMTIwNTY3NicsX3N0X3BhZ2VfaWQ6ICc4ODE3MTg5J30pOwogICAgICAgIH0pOwogICAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaGFuZGxlU2Nyb2xsKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0PgogICAgPC9oZWFkPgogIDxib2R5IGNsYXNzPSJzLWxnLWd1aWRlLWJvZHkiPgoKPGEgaWQ9InMtbGctcHVibGljLXNraXBsaW5rIiBjbGFzcz0iYWxlcnQtaW5mbyIgaHJlZj0iI3MtbGctZ3VpZGUtbWFpbiI+U2tpcCB0byBNYWluIENvbnRlbnQ8L2E+Cgo8aGVhZGVyIGNsYXNzPSJoZWFkZXItbWFpbiBmbGV4LWNvbnRhaW5lciBmbGV4LWVuZCI+CiAgPGgxIGNsYXNzPSJuYW1lLXNpdGUgZ3JvdXAgbmF2LWxvZ28iPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS8iIGNsYXNzPSJsb2dvLW1pdC1saWIiPjxpbWcgc3JjPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRsaWItd29yZG1hcmsuc3ZnIiBhbHQ9Ik1JVCBMaWJyYXJpZXMgbG9nbyIgaGVpZ2h0PSIzNSI+CiAgICA8L2E+PCEtLSBFbmQgTUlUIExpYnJhcmllcyBMb2dvIC0tPgogIDwvaDE+PCEtLSBFbmQgZGl2Lm5hbWUtc2l0ZSAtLT4KICA8ZGl2IGNsYXNzPSJtZW51LS10b2dnbGUiPjwhLS0gTW9iaWxlIEhhbWJ1cmdlciBpY29uIC0tPgogICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTguOTA5cHgiIGhlaWdodD0iMTMuMDkxcHgiIHZpZXdCb3g9IjIuMTgyIDYuNTQ1IDE4LjkwOSAxMy4wOTEiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMi4xODIgNi41NDUgMTguOTA5IDEzLjA5MSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTIuOTA5LDYuNTQ1aDE3LjQ1NGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE2YzAuMTQ1LDAuMTQ0LDAuMjE2LDAuMzE0LDAuMjE2LDAuNTExcy0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMQogICAgYy0wLjE0NSwwLjE0NC0wLjMxNCwwLjIxNi0wLjUxMiwwLjIxNkgyLjkwOWMtMC4xOTcsMC0wLjM2Ny0wLjA3Mi0wLjUxMS0wLjIxNkMyLjI1NCw3LjYzOSwyLjE4Miw3LjQ2OSwyLjE4Miw3LjI3MgogICAgczAuMDcyLTAuMzY3LDAuMjE2LTAuNTExQzIuNTQyLDYuNjE3LDIuNzEyLDYuNTQ1LDIuOTA5LDYuNTQ1eiBNMjAuMzYzLDEzLjgxOEgyLjkwOWMtMC4xOTcsMC0wLjM2Ny0wLjA3Mi0wLjUxMS0wLjIxNgogICAgcy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMWMwLTAuMTk2LDAuMDcyLTAuMzY3LDAuMjE2LTAuNTExczAuMzE0LTAuMjE2LDAuNTExLTAuMjE2aDE3LjQ1NGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE2CiAgICBzMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFjMCwwLjE5Ny0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMVMyMC41NjEsMTMuODE4LDIwLjM2MywxMy44MTh6IE0yMC4zNjMsMTkuNjM2SDIuOTA5CiAgICBjLTAuMTk3LDAtMC4zNjctMC4wNzEtMC41MTEtMC4yMTZzLTAuMjE2LTAuMzE0LTAuMjE2LTAuNTExczAuMDcyLTAuMzY3LDAuMjE2LTAuNTExYzAuMTQ0LTAuMTQ1LDAuMzE0LTAuMjE3LDAuNTExLTAuMjE3aDE3LjQ1NAogICAgYzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTdjMC4xNDUsMC4xNDQsMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFzLTAuMDcxLDAuMzY2LTAuMjE2LDAuNTExUzIwLjU2MSwxOS42MzYsMjAuMzYzLDE5LjYzNnoiLz4KICAgIDwvc3ZnPgogIDwvZGl2PjwhLS0gZW5kIGhhbWJ1cmdlciBpY29uIC0tPgogIDxuYXYgaWQ9Im5hdi1tYWluIiBjbGFzcz0ibmF2LW1haW4iIGFyaWEtbGFiZWw9IlByaW1hcnkiPgogIDx1bCBjbGFzcz0ibmF2LW1haW4tbGlzdCBmbGV4LWNvbnRhaW5lciI+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtc2VhcmNobWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2giIGNsYXNzPSJuby11bmRlcmxpbmUgc2VhcmNoLWxpbmsgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+U2VhcmNoPC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbnUtY29udHJvbCBzciI+U2VhcmNoIG1lbnU8L2J1dHRvbj4KICAgICAgPC9oMj4KICAgICAgPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LXNlYXJjaG1lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1zZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIGdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+U3RhcnQgaGVyZTwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaCI+U2VhcmNoIHRvb2xzIGhvbWU8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoLWNvbGxlY3Rpb25zIj5TZWFyY2ggT3VyIENvbGxlY3Rpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+Qm9va3MsIGFydGljbGVzLCBhbmQgbW9yZTwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd29ybGRjYXQiPldvcmxkQ2F0PHNwYW4gY2xhc3M9ImFib3V0Ij5Cb29rcyAmYW1wOyBtb3JlIHdvcmxkd2lkZTwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYXoucGhwIj5EYXRhYmFzZXMgQS1aPHNwYW4gY2xhc3M9ImFib3V0Ij5KU1RPUiwgUHViTWVkLCBXZWIgb2YgU2NpZW5jZSwgZXRjLjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoLXJlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPkFsc28gdHJ5PC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZ29vZ2xlLXNjaG9sYXItdGlwcyI+R29vZ2xlIFNjaG9sYXIgZm9yIE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPkNoYW5nZSBzZXR0aW5ncyB0byBnZXQgYmV0dGVyIGFjY2Vzczwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZHNwYWNlIj5EU3BhY2VATUlUIDxzcGFuIGNsYXNzPSJhYm91dCI+TUlUIHJlc2VhcmNoPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kb21lIj5Eb21lIDxzcGFuIGNsYXNzPSJhYm91dCI+TUlULWRpZ2l0aXplZCBpbWFnZXMsIG1hcHMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NpdGUtc2VhcmNoIj5TaXRlIHNlYXJjaDwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2hvdXJzIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPkhvdXJzICZhbXA7IGxvY2F0aW9uczwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPkhvdXJzICZhbXA7IGxvY2F0aW9ucyBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ob3Vyc21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1ob3Vyc21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Mb2NhdGlvbnM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ob3VycyI+SG91cnMgYW5kIGxvY2F0aW9ucyBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2JhcmtlciI+QmFya2VyIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZGV3ZXkiPkRld2V5IExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaGF5ZGVuIj5IYXlkZW4gTGlicmFyeTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yb3RjaCI+Um90Y2ggTGlicmFyeTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kaXN0aW5jdGl2ZS1jb2xsZWN0aW9ucyI+RGlzdGluY3RpdmUgQ29sbGVjdGlvbnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbXVzaWMiPkxld2lzIE11c2ljIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbHNhIj5MaWJyYXJ5IFN0b3JhZ2UgQW5uZXg8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlVzaW5nIHRoZSBMaWJyYXJpZXM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9sb2NhdGlvbnMiPk1hcCBvZiBsb2NhdGlvbnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc3R1ZHkiPlN0dWR5IHNwYWNlczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kaXNhYmlsaXRpZXMiPlBlcnNvbnMgd2l0aCBkaXNhYmlsaXRpZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY29weWluZyI+U2NhbiAmYW1wOyBwcmludDwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9leGhpYml0cyI+RXhoaWJpdHMgJmFtcDsgZ2FsbGVyaWVzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Zpc2l0b3JzIj5WaXNpdG9yczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS91c2UtcG9saWNpZXMiPkxpYnJhcnkgdXNlIHBvbGljeTwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ib3Jyb3ciIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5Cb3Jyb3cgJmFtcDsgcmVxdWVzdCBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ib3Jyb3dtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYm9ycm93bWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBncm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlJlbmV3LCByZXF1ZXN0LCBzdWdnZXN0PC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYm9ycm93Ij5Cb3Jyb3cgJmFtcDsgcmVxdWVzdCBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY291bnRzIj5BY2NvdW50cyBvdmVydmlldyA8c3BhbiBjbGFzcz0iYWJvdXQiPllvdXIgQWNjb3VudCwgSUxMaWFkLCBBZW9uLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2gtY29sbGVjdGlvbnMiPlNlYXJjaCBPdXIgQ29sbGVjdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5SZXF1ZXN0IGl0ZW1zIG93bmVkIGJ5IE1JVDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd29ybGRjYXQiPldvcmxkQ2F0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBub3Qgb3duZWQgYnkgTUlUPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9pbGxpYWQiPklMTGlhZCA8c3BhbiBjbGFzcz0iYWJvdXQiPlRyYWNrIHlvdXIgSW50ZXJsaWJyYXJ5IEJvcnJvd2luZyByZXF1ZXN0czwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc3VnZ2VzdC1wdXJjaGFzZSI+U3VnZ2VzdCBhIHB1cmNoYXNlPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Nb3JlIGluZm9ybWF0aW9uPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVzZXJ2ZXMiPkNvdXJzZSByZXNlcnZlczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ib3Jyb3ctZGlyZWN0Ij5Cb3Jyb3cgRGlyZWN0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBmcm9tIEhhcnZhcmQsIFlhbGUsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L290aGVybGlicmFyaWVzIj5WaXNpdCBub24tTUlUIGxpYnJhcmllcyA8c3BhbiBjbGFzcz0iYWJvdXQiPkhhcnZhcmQsIEJvcnJvdyBEaXJlY3QsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvbGk+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VhcmNoLXN1cHBvcnQiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+UmVzZWFyY2ggc3VwcG9ydDwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPlJlc2VhcmNoIHN1cHBvcnQgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5IZWxwICZhbXA7IHVzZWZ1bCB0b29sczwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VhcmNoLXN1cHBvcnQiPlJlc2VhcmNoIHN1cHBvcnQgaG9tZTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hc2siPkFzayB1cyA8c3BhbiBjbGFzcz0iYWJvdXQiPkVtYWlsLCBjaGF0LCBjYWxsLCBkcm9wIGJ5PC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9leHBlcnRzIj5SZXNlYXJjaCBndWlkZXMgJmFtcDsgZXhwZXJ0IGxpYnJhcmlhbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5Gb3IgZXZlcnkgcmVzZWFyY2ggaW50ZXJlc3Q8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2F1dGhlbnRpY2F0ZSI+QXV0aGVudGljYXRlIHRvIG9ubGluZSByZXNvdXJjZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5UaXBzICZhbXA7IHRyaWNrczwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlB1Ymxpc2hpbmcgJmFtcDsgY29udGVudCBtYW5hZ2VtZW50PC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVmZXJlbmNlcyI+Q2l0YXRpb24gJmFtcDsgd3JpdGluZyB0b29scyA8c3BhbiBjbGFzcz0iYWJvdXQiPk1lbmRlbGV5LCBab3Rlcm8sICZhbXA7IE92ZXJsZWFmPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9jaXRpbmciPkNpdGluZyBzb3VyY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+QXZvaWQgcGxhZ2lhcmlzbSwgZm9ybWF0IHJlZmVyZW5jZXMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2RhdGEtc2VydmljZXMiPkRhdGEgc2VydmljZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5HSVMsIGRhdGEgbWFuYWdlbWVudCwgc3RhdGlzdGljYWwgc3VwcG9ydDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2Nob2xhcmx5Ij5TY2hvbGFybHkgY29tbXVuaWNhdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5PcGVuIGFjY2VzcywgY29weXJpZ2h0LCAmYW1wOyBwdWJsaXNoaW5nPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcGlzIj5BUElzIGZvciBzY2hvbGFybHkgcmVzb3VyY2VzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgogICAgPC9saT48IS0tIGVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KICAgIDxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIj4KICAgICAgPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgogICAgICAgIDxhIGlkPSJtYWluLW5hdi1hYm91dG1lbnUtdGl0bGUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWJvdXQiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+QWJvdXQ8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5BYm91dCBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1hYm91dG1lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1hYm91dG1lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgcHVzaCBncm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPkFib3V0IHRoZSBMaWJyYXJpZXM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hYm91dC8iPkFib3V0IHVzIGhvbWU8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY29udGFjdCI+Q29udGFjdCB1czwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9qb2JzIj5Kb2JzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2dpdmluZyI+R2l2aW5nIHRvIHRoZSBNSVQgTGlicmFyaWVzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5OZXdzLCBldmVudHMsICZhbXA7IGV4aGliaXRzPC9oMz4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXZlbnRzIj5DbGFzc2VzICZhbXA7IGV2ZW50czwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbmV3cyI+TmV3czwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXhoaWJpdHMiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbmV3cy9pbi10aGUtbWVkaWEiPkluIHRoZSBtZWRpYTwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbWl0LXJlYWRzLyI+TUlUIFJlYWRzPC9hPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgogICAgPC9saT48IS0tIGVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KICAgIDxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIHNtYWxsIGNoYXQgcHVzaCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtYXNrdXNtZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FzayIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIj48c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2LjU5M3B4IiBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNi41OTMgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2LjU5MyAxNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTE2LjU5MyA2LjI3OGMwIDEuMDc0LTAuMDc0IDIuMTQ4LTAuMjQxIDMuMTg1IC0wLjIwNCAxLjM1My0xLjcyMiAyLjU3NC0zLjA1NSAyLjcyMiAtMS4zNTMgMC4xMzEtMi42ODYgMC4yMDQtNC4wMiAwLjIyM0w1Ljc0IDE1LjgzM0M1LjYzIDE1Ljk0NCA1LjQ4MSAxNiA1LjMzNCAxNmMtMC4wOTQgMC0wLjE2Ny0wLjAxOS0wLjI0MS0wLjAzN0M0Ljg3MSAxNS44NyA0Ljc0IDE1LjY0NyA0Ljc0IDE1LjQwN1YxMi4zN2MtMC40ODEtMC4wMzYtMC45NjMtMC4wNTUtMS40NDMtMC4xMTEgLTEuMzM0LTAuMTQ4LTIuODUzLTEuNDQzLTMuMDc0LTIuNzk2QzAuMDc0IDguNDI2IDAgNy4zNTIgMCA2LjI5NmMwLTEuMDkyIDAuMDc0LTIuMTg1IDAuMjIzLTMuMjQgMC4yMjItMS4zNTIgMS43NC0yLjY0OCAzLjA3NC0yLjc5N0M0Ljk2MyAwLjA5MyA2LjYzIDAgOC4yOTcgMHMzLjMzMyAwLjA5MyA1IDAuMjU5YzEuMzMzIDAuMTQ5IDIuODUxIDEuNDQ1IDMuMDU1IDIuNzk3QzE2LjUxOSA0LjExMSAxNi41OTMgNS4yMDQgMTYuNTkzIDYuMjc4Ii8+PC9zdmc+PHNwYW4+QXNrIFVzPC9zcGFuPjwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPkFzayB1cyBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1hc2t1c21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1hc2t1c21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgcHVzaCI+CiAgICAgICAgPGRpdiBjbGFzcz0id3JhcC1idXR0b24tY2hhdCI+CiAgICAgICAgPGRpdiBpZD0nbGliY2hhdF9iZTJjNjU0YjYzZGQ0M2YzMWM1NjI5NWVlNWQ3OGQ4OCc+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGEgY2xhc3M9Im1vcmUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXNrIj5Nb3JlIHdheXMgdG8gYXNrIHVzPC9hPgogICAgICA8L2Rpdj4KICAgIDwvbGk+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCBzbWFsbCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY291bnRzIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgYWNjb3VudC1saW5rIj4KICAgICAgICAgIDxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPjxzcGFuPkFjY291bnQ8L3NwYW4+CiAgICAgICAgPC9hPgogICAgICA8L2gyPgogICAgPC9saT4KICA8L3VsPgogIDwvbmF2PgogIDxhIGNsYXNzPSJsaW5rLWxvZ28tbWl0IiBocmVmPSJodHRwOi8vd3d3Lm1pdC5lZHUiPjxpbWcgc3JjPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRfbG9nb19zdGRfcmdiX3doaXRlLnN2ZyIgYWx0PSJNSVQgbG9nbyIgaGVpZ2h0PSIzNSI+PC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoIiBjbGFzcz0ibGluay1zaXRlLXNlYXJjaCBoaWRkZW4tbm9uLW1vYmlsZSI+CiAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTIgMTIiIGFsdD0ic2VhcmNoIiBjbGFzcz0iaWNvbi1zZWFyY2giPjxwYXRoIGQ9Ik03LjI3MyAwLjcyN3ExLjE4NyAwIDIuMTkgMC41ODV0MS41ODggMS41ODggMC41ODUgMi4xOS0wLjU4NSAyLjE5LTEuNTg4IDEuNTg4LTIuMTkgMC41ODVxLTEuMjc4IDAtMi4zMy0wLjY3NmwtMy4yODQgMy4zMDFxLTAuMjk1IDAuMjg0LTAuNjg4IDAuMjg0LTAuNDAzIDAtMC42ODgtMC4yODR0LTAuMjg0LTAuNjg4IDAuMjg0LTAuNjg4bDMuMzAxLTMuMjg0cS0wLjY3Ni0xLjA1MS0wLjY3Ni0yLjMzIDAtMS4xODggMC41ODUtMi4xOXQxLjU4OC0xLjU4OCAyLjE5LTAuNTg1ek03LjI3MyA4cTAuNTkxIDAgMS4xMjgtMC4yM3QwLjkyOS0wLjYyMiAwLjYyMi0wLjkyOSAwLjIzLTEuMTI4LTAuMjMtMS4xMjgtMC42MjItMC45MjktMC45MjktMC42MjItMS4xMjgtMC4yMy0xLjEyOCAwLjIzLTAuOTI5IDAuNjIyLTAuNjIyIDAuOTI5LTAuMjMgMS4xMjggMC4yMyAxLjEyOCAwLjYyMiAwLjkyOSAwLjkyOSAwLjYyMiAxLjEyOCAwLjIzeiI+PC9wYXRoPgogICAgPC9zdmc+CiAgICA8c3BhbiBjbGFzcz0iYm90dG9tIj5TZWFyY2g8L3NwYW4+CiAgPC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWNjb3VudHMiIGNsYXNzPSJsaW5rLWFjY291bnQgaGlkZGVuLW5vbi1tb2JpbGUiPgogICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1LjQiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNS40IDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS40NDUgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJpY29uLWFjY291bnQiPjxwYXRoIGQ9Ik0xMy40IDE1LjdDMTIuMiAxNS45IDEwLjQgMTYgNy43IDE2Yy01LjQgMC03LjMtMC42LTcuMy0wLjYgLTAuMy0wLjEtMC40LTAuNC0wLjQtMC43IDAuMy0xLjYgMS4yLTIuNSAyLjUtMy4zIDAuMy0wLjIgMC44LTAuNCAxLjItMC42IDAuOC0wLjMgMS44LTAuNyAyLTEuM0M1LjggOS4yIDUuNyA4LjYgNS4yIDcuOWMtMS40LTIuMy0xLjctNC4zLTAuOC01LjlDNS4xIDAuNyA2LjQgMCA3LjcgMGMxLjQgMCAyLjYgMC43IDMuMyAyIDAuOSAxLjYgMC43IDMuNi0wLjggNS45QzkuOCA4LjYgOS42IDkuMiA5LjggOS42YzAuMiAwLjYgMS4yIDEgMiAxLjMgMC40IDAuMiAwLjkgMC40IDEuMiAwLjYgMS4yIDAuOCAyLjEgMS42IDIuNSAzLjMgMC4xIDAuMy0wLjEgMC42LTAuNCAwLjdDMTUgMTUuNCAxNC41IDE1LjYgMTMuNCAxNS43Ii8+PC9zdmc+CiAgICA8c3BhbiBjbGFzcz0iYm90dG9tIj5BY2NvdW50PC9zcGFuPgogIDwvYT4KCjwvaGVhZGVyPgoKCjxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyIiBjbGFzcz0iY29udGFpbmVyIHMtbGliLWhlYWRlciBzLWxpYi1zaWRlLWJvcmRlcnMiPgogICAgPG5hdiBpZD0icy1saWItYmMiIGFyaWEtbGFiZWw9ImJyZWFkY3J1bWIiPgogICAgICAgIDxvbCBpZD0icy1saWItYmMtbGlzdCIgY2xhc3M9ImJyZWFkY3J1bWIiPjxsaSBpZD0icy1saWItYmMtY3VzdG9tZXIiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUiPk1JVDwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtc2l0ZSIgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS8iPkxpYkd1aWRlczwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtZ3VpZGUiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvcndzIj5MU0VHIFdvcmtTcGFjZTwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtcGFnZSIgY2xhc3M9ImFjdGl2ZSBicmVhZGNydW1iLWl0ZW0iPkdldHRpbmcgU3RhcnRlZDwvbGk+PC9vbD4KICAgIDwvbmF2PgoKICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXNlYXJjaCI+CiAgICAgICAgICAgIAo8ZGl2IGlkPSJzLWxnLWd1aWRlLXNlYXJjaC1ib3giPgogICAgPGZvcm0gcm9sZT0ic2VhcmNoIiBpZD0icy1sZy1ndWlkZS1zZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L3NyY2gucGhwIiBtZXRob2Q9IkdFVCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20iPgogICAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IiAKICAgICAgICAgICAgICAgIGlkPSJzLWxnLWd1aWRlLXNlYXJjaC10ZXJtcyIgCiAgICAgICAgICAgICAgICBuYW1lPSJxIiAKICAgICAgICAgICAgICAgIGNsYXNzPSJmb3JtLWNvbnRyb2wiCiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjI2MCIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIHRoaXMgR3VpZGUiPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0ic3Itb25seSIgZm9yPSJzLWxnLWd1aWRlLXNlYXJjaC10ZXJtcyI+U2VhcmNoIHRoaXMgR3VpZGU8L2xhYmVsPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imd1aWRlX2lkIiB2YWx1ZT0iMTIwNTY3NiI+CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHR5cGU9InN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgU2VhcmNoCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgPC9mb3JtPgo8L2Rpdj4KCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci1pbmZvIj4KICAgICAgICA8aDEgaWQ9InMtbGctZ3VpZGUtbmFtZSI+TFNFRyBXb3JrU3BhY2U6IEdldHRpbmcgU3RhcnRlZDwvaDE+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1kZXNjLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxzcGFuIGlkPSJzLWxnLWd1aWRlLWRlc2NyaXB0aW9uIj5SZWdpc3RyYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBMU0VHIFdvcmtzcGFjZTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctdGFicy1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIHBhZC10b3AtbWVkIj4KICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicyIgY2xhc3M9InRhYnMiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ikd1aWRlIFBhZ2VzIj4KICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyBzcGxpdC1idXR0b24tbmF2Ij4KICAgICAgICAgICAgCiAgICAgICAgPC91bD4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicy10aXRsZS1iYXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIj48L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtbWFpbiIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1tYWluIHMtbGliLXNpZGUtYm9yZGVycyIgdGFiaW5kZXg9Ii0xIj4KICAgIAogICAgPGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xMjYiIGNsYXNzPSJjb2wtbWQtMTIiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyb3cgcy1sZy1yb3ciPjxkaXYgaWQ9InMtbGctY29sLTEiIGNsYXNzPSJjb2wtbWQtOSI+PGRpdiBjbGFzcz0icy1sZy1jb2wtYm94ZXMiPjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMzI4OTU1OTYiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTMyODk1NTk2Ij4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NzMyMDUtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NzMyMDUiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgTFNFRyBXb3Jrc3BhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMjc5NzMyMDUiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjQ5MDE0MzAiIGNsYXNzPSIgIGNsZWFyZml4Ij4KICAgIDxwPjxpbWcgYWx0PSJMU0VHIFdvcmtzcGFjZSIgbG9hZGluZz0ibGF6eSIgc3JjPSJodHRwczovL2xpYmFwcHMuczMuYW1hem9uYXdzLmNvbS9hY2NvdW50cy82ODYzMy9pbWFnZXMvbHNlZy5wbmciIHN0eWxlPSJtYXJnaW46IDE1cHg7IGZsb2F0OiBsZWZ0OyIgLz48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij5MU0VHIFdvcmtzcGFjZSwgZm9ybWVybHkgUmVmaW5pdGl2IFdvcmtzcGFjZSwgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm9ybWF0aW9uIG9uIGdsb2JhbCBwdWJsaWMgJmFtcDsgcHJpdmF0ZSBjb21wYW5pZXMgaW5jbHVkaW5nIGZpbmFuY2lhbHMgYW5kIGZpbGluZ3MsIG5ld3MgJmFtcDsgY29ycG9yYXRlIGV2ZW50cywgZWFybmluZ3MgZXN0aW1hdGVzLCBwcmljZSBxdW90ZXMsIE0mYW1wO0EgdHJhbnNhY3Rpb25zLCBQRS9WQyBkYXRhLCBFU0cmbmJzcDsgcmF0aW5ncywgb3duZXJzaGlwIGRhdGEsIGFuZCZuYnNwO2FuYWx5c3QgcmVwb3J0cy4gU2NyZWVuIGFuZCBhbmFseXplIGNvbXBhbmllcywgZGVhbHMsIFBFL1ZDIGZpcm1zLCBmdW5kcywgcG9ydGZvbGlvIGNvbXBhbmllcyBhbmQgbW9yZS48L3NwYW4+PC9wPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMzI4Nzc3NzEiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTMyODc3NzcxIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NTgzOTAtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NTgzOTAiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgU3RlcCAxOiBSZWdpc3RlciBmb3IgYW4gYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0yNzk1ODM5MCIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NDg2MzIwMSIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPHVsPgoJPGxpPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPklmIG9mZiBjYW1wdXMmbmJzcDtjb25uZWN0IHRvPHN0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly9pc3QubWl0LmVkdS9wcmlzbWEvY2xpZW50IiB0YXJnZXQ9Il9ibGFuayI+R2xvYmFsUHJvdGVjdCBWUE48L2E+PGEgaHJlZj0iaHR0cHM6Ly9pc3QubWl0LmVkdS9wcmlzbWEvY2xpZW50Ij4mbmJzcDs8L2E+PC9zdHJvbmc+Zmlyc3QuPC9zcGFuPjwvbGk+Cgk8bGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+UmVnaXN0ZXIgZm9yIGEgUmVmaW5pdGl2IGFjY291bnQgdXNpbmcgeW91ciBAbWl0LmVkdSBlbWFpbCBhZGRyZXNzOiZuYnNwOzxhIGhyZWY9Imh0dHBzOi8vbmFtMTIuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRm15LnJlZmluaXRpdi5jb20lMkZwcm9kdWN0cmVnaXN0cmF0aW9uLmh0bWwmYW1wO2RhdGE9MDQlN0MwMSU3Q0FyY2hhbmEuQUslNDByZWZpbml0aXYuY29tJTdDNmIwYTlkZmYyZjcwNGI3ZmVhOGIwOGQ4Y2VmM2QxNzAlN0M3MWFkMmY2MjYxZTI0NGZjOWU4NTg2YzI4MjdmNmRlOSU3QzAlN0MwJTdDNjM3NDg2ODk0Njk2MjIzMTYzJTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUzRCU3QzEwMDAmYW1wO3NkYXRhPTRzb2ZvaEdUbTFYaEVpZ0slMkZhZlhiR0FNVTJwZCUyRlA1aVNYcXlPTlpLYTB3JTNEJmFtcDtyZXNlcnZlZD0wIiB0YXJnZXQ9Il9ibGFuayI+PHN0cm9uZz5TZWxmIFJlZ2lzdHJhdGlvbiBQb3J0YWw8L3N0cm9uZz48L2E+PC9zcGFuPjwvbGk+CjwvdWw+Cgo8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij5XYWl0IGZvciB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIGFuZCBmb2xsb3cgdGhlIGxpbmsgdG8gY29tcGxldGUgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIChpdCBtYXkgdGFrZSBhIGZldyBtaW51dGVzLiBDaGVjayZuYnNwO3lvdXIgU3BhbSBmb2xkZXIgaWYgbmVlZGVkKTwvc3Bhbj48L3A+Cgo8aHIgLz4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+PC9zcGFuPjwvcD4KCjxwPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPjwvc3Bhbj48c3Ryb25nPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPldoZW4gcmVnaXN0ZXJpbmcgZm9yIGFuIGFjY291bnQsIGNvbXBsZXRlIGFsbCBmaWVsZHMgb24gdGhlIGZvcm0gaW5jbHVkaW5nOjwvc3Bhbj48L3N0cm9uZz48L3A+Cgo8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij4xLiBUaGUgUmVmZXJlbmNlIGZpZWxkOiBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNhdGVnb3J5IChGYWN1bHR5L1N0YWZmLCBNYXN0ZXJzLCBQaEQgb3IgVW5kZXJncmFkdWF0ZSBTdHVkZW50KTwvc3Bhbj48L3A+Cgo8cD48aW1nIGFsdD0iU2VsZWN0IHVzZXIgbGV2ZWwiIGxvYWRpbmc9ImxhenkiIHNyYz0iaHR0cHM6Ly9saWJhcHBzLnMzLmFtYXpvbmF3cy5jb20vYWNjb3VudHMvNjg2MzMvaW1hZ2VzL1JXUy1SZWZlcmVuY2UucG5nIiAvPjwvcD4KCjxwPiZuYnNwOzwvcD4KCjxwPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPjwvc3Bhbj48L3A+Cgo8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij4yLiBBZGQtb246IFNlbGVjdCBBTVIgZm9yIFN0dWRlbnRzIC0gVVNFUiBMRVZFTDwvc3Bhbj48L3A+Cgo8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48c3Ryb25nPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPlQ8L3NwYW4+PC9zdHJvbmc+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+PHN0cm9uZz5oaXMmbmJzcDs8L3N0cm9uZz48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+PGI+PGk+c3RlcCBlbmFibGVzIGFjY2VzcyB0byBhbmFseXN0IHJlc2VhcmNoIHJlcG9ydHMgKGFsc28gcmVmZXJyZWQgdG8gYXMgYWZ0ZXJtYXJrZXQgcmVzZWFyY2gpLjwvaT48L2I+PC9zcGFuPjwvc3Bhbj48L3A+Cgo8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48c3Ryb25nPlN0dWRlbnRzOiZuYnNwOyA8L3N0cm9uZz5zZWxlY3Q6IEFNUiBmb3IgU3R1ZGVudHM8L3NwYW4+PC9wPgoKPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+PHN0cm9uZz4gRmFjdWx0eS9TdGFmZjombmJzcDs8L3N0cm9uZz5zZWxlY3QgQU1SIGZvciBBY2FkZW1pYyBTdGFmZi48L3NwYW4+PC9wPgoKPHA+PGltZyBhbHQ9IlNlbGVjdCBhcHByb3ByaWF0ZSBBTVIgVXNlciBsTGV2ZWwiIGxvYWRpbmc9ImxhenkiIHNyYz0iaHR0cHM6Ly9saWJhcHBzLnMzLmFtYXpvbmF3cy5jb20vYWNjb3VudHMvNjg2MzMvaW1hZ2VzL1JXUy1BTVIucG5nIiAvPjwvcD4KCjxwPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPk9uY2UgcmVnaXN0ZXJlZCwgbmV3IHVzZXJzIHdpbGwgcmVjZWl2ZSBhIHdlbGNvbWUmbmJzcDtlbWFpbCBkaXJlY3RseSBmcm9tIFJlZmluaXRpdiAoY3VzdG9tZXJ6b25lQHJlZmluaXRpdi5jb20pIGNvbnRhaW5pbmcgYWNjZXNzIGluc3RydWN0aW9ucy4mbmJzcDs8L3NwYW4+PC9wPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMzI4NzgyOTEiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTMyODc4MjkxIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NTg4MTgtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NTg4MTgiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgU3RlcCAyOiBMb2ctaW4gdG8gTFNFRyBXb3Jrc3BhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMjc5NTg4MTgiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjQ4NjQwMjMiIGNsYXNzPSIgIGNsZWFyZml4Ij4KICAgIDxwPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPlJlZ2lzdGVyZWQgdXNlcnMgY2FuIGFjY2VzcyBSZWZpbml0aXYgV29ya3NwYWNlIGluIHR3byB3YXlzOjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48L3NwYW4+PC9wPgoKPG9sPgoJPGxpPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPiZuYnNwOzxhIGhyZWY9Imh0dHBzOi8vd29ya3NwYWNlLnJlZmluaXRpdi5jb20vd2ViIiB0YXJnZXQ9Il9ibGFuayI+PHN0cm9uZz5MU0VHIFdvcmtzcGFjZSBXZWJBY2Nlc3MuPC9zdHJvbmc+PC9hPiZuYnNwO0xvZy1pbiB1c2luZyA8c3Ryb25nPkNocm9tZSA8L3N0cm9uZz5vcjxzdHJvbmc+IFNhZmFyaS48L3N0cm9uZz48L3NwYW4+PC9saT4KCTxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij4mbmJzcDs8YSBocmVmPSJodHRwczovL3d3dy5yZWZpbml0aXYuY29tL2VuL3Byb2R1Y3RzL3JlZmluaXRpdi13b3Jrc3BhY2UvZG93bmxvYWQtd29ya3NwYWNlIiB0YXJnZXQ9Il9ibGFuayI+PHN0cm9uZz5MU0VHIFdvcmtzcGFjZSBEZXNrdG9wIEFwcGxpY2F0aW9uPC9zdHJvbmc+PC9hPi4gWW91IHdpbGwgcmVjZWl2ZSB0aGUgbGluayB0byBpbnN0YWxsIHRoZSBhcHBsaWNhdGlvbiBpbiB5b3VyIHdlbGNvbWUgZW1haWwuJm5ic3A7VGhlIGRlc2t0b3AgYXBwbGljYXRpb24gaW5jbHVkZXMmbmJzcDt0aGUgUmVmaW5pdGl2IFdvcmtzcGFjZSBFeGNlbCBwbHVnLWluLiZuYnNwOyZuYnNwOzxzdHJvbmc+PGEgaHJlZj0iaHR0cHM6Ly90cmFpbmluZy5yZWZpbml0aXYuY29tL3ZpZGVvcGxheWVyL3ZpZGVvcy8yOTc2P3BtZj0xNDltMTVmMCIgdGFyZ2V0PSJfYmxhbmsiPldhdGNoJm5ic3A7dGhlJm5ic3A7STxlbT5uc3RhbGxpbmcgYW5kIEFjY2Vzc2luZyBMU0VHIFdvcmtzcGFjZTwvZW0+Jm5ic3A7dHV0b3JpYWwuPC9hPjwvc3Ryb25nPjwvc3Bhbj48L2xpPgo8L29sPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMzI4OTU0NjUiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTMyODk1NDY1Ij4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NzMwNzgtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjc5NzMwNzgiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgUmVmaW5pdGl2IFdvcmtzcGFjZSBUcmFpbmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0yNzk3MzA3OCIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NDkwMTM4NCIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPGg1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPkxpdmUgb25saW5lIHRyYWluaW5nJm5ic3A7PC9zcGFuPjwvaDU+Cgo8dWwgaWQ9InMtbGctbGluay1saXN0LTYxOTIxMDc1Ij4KCTxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48YSBocmVmPSJodHRwczovL3RyYWluaW5nLnJlZmluaXRpdi5jb20vcG9ydGFsL2NvdXJzZS5waHA/Y29pZD1XLTYzNDMmYW1wO2xhbmc9ZW4iIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICcyJyxfc3RfY29udGVudF9pZDogJzU5NTQ3Njg2J30pOyIgdGFyZ2V0PSJfYmxhbmsiPkxTRUcgV29ya3NwYWNlIGZvciBzdHVkZW50czogSGVscGluZyBzdHVkZW50cyBnZXQgc3RhcnRlZDwvYT48L3NwYW4+CgoJPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+TGl2ZSBzZXNzaW9ucyBwcm92aWRlIGFuIGludHJvZHVjdGlvbiB0byBXb3Jrc3BhY2UgYW5kIGNvdmVyIGhvdyB0byBuYXZpZ2F0ZSBhbmQgLnNjcmVlbiBmb3IgTSZhbXA7QSwgRXF1aXR5LCBCb25kIGFuZCBMb2FuIGRlYWxzPC9zcGFuPjwvcD4KCTwvbGk+CjwvdWw+Cgo8aDU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+T24tZGVtYW5kIHRyYWluaW5nIHZpZGVvczwvc3Bhbj48L2g1PgoKPHVsIGlkPSJzLWxnLWxpbmstbGlzdC02MDUzNTA5OSI+Cgk8bGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+PGEgaHJlZj0iaHR0cHM6Ly90cmFpbmluZy5yZWZpbml0aXYuY29tL3ZpZGVvcGxheWVyL3ZpZGVvcy81MTc1P3BtZj0xNDltMTVmMCIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJzInLF9zdF9jb250ZW50X2lkOiAnNTgxNDgzMTMnfSk7IiB0YXJnZXQ9Il9ibGFuayI+SW50cm9kdWNpbmcgTFNFRyBXb3Jrc3BhY2UgZm9yIFN0dWRlbnRzPC9hPjwvc3Bhbj4KCgk8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij5EaXNjb3ZlciBob3cgTFNFRyBXb3Jrc3BhY2UgY2FuIG9mZmVyIGEgc3RlcCBjaGFuZ2UgaW4gd29ya2Zsb3csIGZ1bmN0aW9uYWxpdHkgYW5kIHBlcmZvcm1hbmNlIC48L3NwYW4+PC9wPgoJPC9saT4KCTxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48YSBocmVmPSJodHRwczovL3RyYWluaW5nLnJlZmluaXRpdi5jb20vdmlkZW9wbGF5ZXIvdmlkZW9zLzUxNzY/cG1mPTE0OW0xNWYwIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAnMicsX3N0X2NvbnRlbnRfaWQ6ICc1ODE0ODMxNSd9KTsiIHRhcmdldD0iX2JsYW5rIj5MU0VHIFdvcmtzcGFjZSAtIEJhc2ljIE5hdmlnYXRpb248L2E+PC9zcGFuPgoJPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+TGVhcm4gaG93IHRvIG5hdmlnYXRlIExTRUcgV29ya3NwYWNlIGZvciBTdHVkZW50cy48L3NwYW4+PC9wPgoJPC9saT4KCTxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48YSBocmVmPSJodHRwczovL3RyYWluaW5nLnJlZmluaXRpdi5jb20vdmlkZW9wbGF5ZXIvdmlkZW9zLzQwODE/cG1mPTE0OW0xNWYwIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAnMicsX3N0X2NvbnRlbnRfaWQ6ICc1ODE0ODMxNyd9KTsiIHRhcmdldD0iX2JsYW5rIj5TZWFyY2hpbmcgaW4gTFNFRyBXb3Jrc3BhY2U8L2E+PC9zcGFuPgoJPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+TGVhcm4gaG93IHRvIGdldCBtb3JlIG91dCBvZiB0aGUgc2VhcmNoIGNhcGFiaWxpdGllcyBpbiBMU0VHIFdvcmtzcGFjZS48L3NwYW4+PC9wPgoJPC9saT4KCTxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48YSBocmVmPSJodHRwczovL3RyYWluaW5nLnJlZmluaXRpdi5jb20vdmlkZW9wbGF5ZXIvdmlkZW9zLzQwODA/cG1mPTE0OW0xNWYwIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAnMicsX3N0X2NvbnRlbnRfaWQ6ICc1ODE0ODMxOCd9KTsiIHRhcmdldD0iX2JsYW5rIj5Xb3JraW5nIHdpdGggTGF5b3V0cyBpbiBMU0VHIFdvcmtzcGFjZTwvYT48L3NwYW4+Cgk8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij5MZWFybiBhYm91dCBMYXlvdXRzIGluIExTRUcgV29ya3NwYWNlIHdoZW4gYWNjZXNzZWQgaW4gdGhlIFdlYiBlbnZpcm9ubWVudC48L3NwYW4+PC9wPgoJPC9saT4KCTxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij48YSBocmVmPSJodHRwczovL3RyYWluaW5nLnJlZmluaXRpdi5jb20vdmlkZW9wbGF5ZXIvdmlkZW9zLzQwNzk/cG1mPTE0OW0xNWYwIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAnMicsX3N0X2NvbnRlbnRfaWQ6ICc1ODE0ODMxOSd9KTsiIHRhcmdldD0iX2JsYW5rIj5TZXR0aW5ncyBpbiBMU0VHIFdvcmtzcGFjZTwvYT48L3NwYW4+Cgk8cD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Ij5MZWFybiBhYm91dCBTZXR0aW5ncyBpbiBMU0VHIFdvcmtzcGFjZS48L3NwYW4+PC9wPgoJPC9saT4KPC91bD4KCgogICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJzLWxnLWNvbC0yIiBjbGFzcz0iY29sLW1kLTMiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTMyODc3NzMxIiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci0zMjg3NzczMSI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTI3OTU4MzUxLWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTI3OTU4MzUxIiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+IExpYnJhcmlhbiAgZm9yIEJ1c2luZXNzICYgTWFuYWdlbWVudDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0yNzk1ODM1MSIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gYnMzL2JveC9wcm9maWxlX2JveF9jb250ZW50LnR3aWcgLS0+CjxkaXYgaWQ9InMtbGliLXByb2ZpbGUtNTg3NjQiIGNsYXNzPSJzLWxpYi1wcm9maWxlLWNvbnRhaW5lciI+CiAgICAgICAgPGEgaHJlZj0iLy9saWJndWlkZXMubWl0LmVkdS9wcmYucGhwP2lkPTU5N2UxMjY1LTdjZGItMTFlZC05OTIyLTBhZDc1OGI3OThjMyI+CiAgICAKICAgICAgICA8ZGl2IGlkPSJzLWxpYi1wcm9maWxlLWltYWdlLTU4NzY0IgogICAgICAgICAgICAgY2xhc3M9InMtbGliLXByb2ZpbGUtZGl2IHMtbGliLXByb2ZpbGUtY2VudGVyIHMtbGliLXByb2ZpbGUtaW1hZ2UiPgogICAgICAgICAgICA8aW1nIGxvYWRpbmc9ImxhenkiIHNyYz0iLy9kMmp2MDJxZjd4Z2p3eC5jbG91ZGZyb250Lm5ldC9hY2NvdW50cy82ODYzMy9wcm9maWxlcy81ODc2NC9TU18yMDI0LTA2LTI3LnBuZyIgYWx0PSIiLz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS1uYW1lLTU4NzY0IgogICAgICAgICAgICAgICAgIGNsYXNzPSJzLWxpYi1wcm9maWxlLWRpdiBzLWxpYi1wcm9maWxlLWNlbnRlciBzLWxpYi1wcm9maWxlLW5hbWUiCiAgICAgICAgICAgICAgICAgc3R5bGU9IiI+CiAgICAgICAgICAgICAgICBTaGlraGEgU2hhcm1hCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDwvYT4KICAgIAogICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS1wcm9ub3Vucy01ODc2NCIKICAgICAgICAgY2xhc3M9InMtbGliLXByb2ZpbGUtZGl2IHMtbGliLXByb2ZpbGUtY2VudGVyIHMtbGliLXByb2ZpbGUtcHJvbm91bnMiPgogICAgICAgIAogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS1lbWFpbC01ODc2NCIgY2xhc3M9InMtbGliLXByb2ZpbGUtZGl2IHMtbGliLXByb2ZpbGUtY2VudGVyIHMtbGliLXByb2ZpbGUtZW1haWwiPgogICAgICAgIAogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS13aWRnZXQtbGEtNTg3NjQiIGNsYXNzPSJzLWxpYi1wcm9maWxlLWRpdiBzLWxpYi1wcm9maWxlLXdpZGdldC1sYSI+CiAgICAgICAgPGRpdiBjbGFzcz0icy1saWItcHJvZmlsZS13aWRnZXQiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS13aWRnZXQtbGMtNTg3NjQiIGNsYXNzPSJzLWxpYi1wcm9maWxlLWRpdiBzLWxpYi1wcm9maWxlLXdpZGdldC1sYyI+CiAgICAgICAgPGRpdiBjbGFzcz0icy1saWItcHJvZmlsZS13aWRnZXQiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS13aWRnZXQtb3RoZXItNTg3NjQiIGNsYXNzPSJzLWxpYi1wcm9maWxlLWRpdiBzLWxpYi1wcm9maWxlLXdpZGdldC1vdGhlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icy1saWItcHJvZmlsZS13aWRnZXQiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1saWItcHJvZmlsZS1jb250YWN0LTU4NzY0IiBjbGFzcz0icy1saWItcHJvZmlsZS1kaXYgcy1saWItcHJvZmlsZS1jb250YWN0Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbnRhY3Q6PC9zdHJvbmc+IDxkaXY+PGEgaHJlZj0ibWFpbHRvOnNoYXJtYXNoQG1pdC5lZHUiPnNoYXJtYXNoQG1pdC5lZHU8L2E+PGJyIC8+CjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJpZXMubWl0LmVkdS9kZXdleSI+Um9vbSBFNTMtMTY4SzwvYT48YnIgLz4KNjE3LjI1My41NjcwPC9icj48YnIgLz4KPGEgaHJlZiA9Imh0dHBzOi8vY2FsZW5kbHkuY29tL3NoYXJtYXNoLW1pdCI+U2NoZWR1bGUgYW4gYXBwb2ludG1lbnQ8L2E+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InMtbGliLXByb2ZpbGUtc29jaWFsLTU4NzY0IiBjbGFzcz0icy1saWItcHJvZmlsZS1kaXYgcy1saWItcHJvZmlsZS1zb2NpYWwiPgogICAgICAgICAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzLWxpYi1wcm9maWxlLXN1YmplY3RzLTU4NzY0IiBjbGFzcz0icy1saWItcHJvZmlsZS1kaXYgcy1saWItcHJvZmlsZS1zdWJqZWN0cyI+CiAgICAgICAgICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSAhYnMzL2JveC9wcm9maWxlX2JveF9jb250ZW50LnR3aWcgLS0+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xMjciIGNsYXNzPSJjb2wtbWQtMTIiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIAo8L2Rpdj4KCjxkaXYgaWQ9InMtbGliLWZvb3Rlci1wdWJsaWMiIGNsYXNzPSJzLWxpYi1mb290ZXIgZm9vdGVyIGNvbnRhaW5lciBzLWxpYi1zaWRlLWJvcmRlcnMiPgogICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItbWV0YSIgY2xhc3M9InBhZC10b3Atc20gcGFkLWxlZnQtbWVkIGNsZWFyZml4Ij4KICAgICAgICA8dWwgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLWF0dHJpYnV0ZXMiPgogICAgICAgICAgICA8bGkgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXVwZGF0ZWQiIGNsYXNzPSJzLWxnLWgtc2VwYXJhdG9yIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzLWxnLWd1aWRlLWxhYmVsIj5MYXN0IFVwZGF0ZWQ6PC9zcGFuPiA8c3BhbiBjbGFzcz0icy1sZy10ZXh0LWdyZXlvdXQiPk5vdiAxNSwgMjAyNCAyOjQwIFBNPC9zcGFuPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXVybCIgY2xhc3M9InMtbGctaC1zZXBhcmF0b3IiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InMtbGctZ3VpZGUtbGFiZWwiPlVSTDo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzLWxnLXRleHQtZ3JleW91dCI+aHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9yd3M8L3NwYW4+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBpZD0icy1sZy1ndWlkZS1wcmludC11cmwiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDogd2luZG93LnByaW50KCk7Ij48aSBjbGFzcz0iZmEgZmEtcHJpbnQiIGFyaWEtaGlkZGVuPSJ0cnVlIiB0aXRsZT0iUHJpbnQgUGFnZSI+PC9pPiBQcmludCBQYWdlPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CgogICAgICAgIDxkaXYgaWQ9InMtbGliLWZvb3Rlci1sb2dpbi1saW5rIiBjbGFzcz0icHVsbC1yaWdodCBwYWQtcmlnaHQtbWVkIj4KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9taXQubGliYXBwcy5jb20vbGliYXBwcy9sb2dpbi5waHA/c2l0ZV9pZD02OCZ0YXJnZXQ2ND1MMnhwWW1kMWFXUmxjeTloWkcxcGJsOWpMbkJvY0Q5blBURXlNRFUyTnpZbWNEMDRPREUzTVRnNSI+TG9naW4gdG8gTGliQXBwczwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBhZC1ib3R0b20tc20gY2xlYXJmaXgiPgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXN1YmplY3RzIiBjbGFzcz0icGFkLXRvcC1zbSBwYWQtbGVmdC1tZWQgcGFkLXJpZ2h0LW1lZCBwdWxsLWxlZnQiPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci10YWdzIiBjbGFzcz0icGFkLXRvcC1zbSBwYWQtbGVmdC1tZWQgcHVsbC1sZWZ0Ij4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0icy1saWItZm9vdGVyLXN1cHBvcnQtbGluayIgY2xhc3M9InB1bGwtcmlnaHQgcGFkLXJpZ2h0LW1lZCI+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBzY3JvbGxfdG9wLnR3aWcgLS0+CjxkaXYgaWQ9InMtbGliLXNjcm9sbC10b3AiPgogICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0ialF1ZXJ5KCdib2R5JykuZm9jdXMoKTsiIHRpdGxlPSJCYWNrIHRvIFRvcCIKICAgICAgIGFyaWEtbGFiZWw9IkJhY2sgdG8gVG9wIj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmEtc3RhY2sgZmEtbGciIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNxdWFyZS1vIGZhLXN0YWNrLTJ4Ij48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1hbmdsZS1kb3VibGUtdXAgZmEtc3RhY2stMXgiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgYm90dG9tOjJweDsiPjwvaT4KICAgICAgICA8L3NwYW4+CiAgICA8L2E+CjwvZGl2Pgo8IS0tICFzY3JvbGxfdG9wLnR3aWcgLS0+Cgo8ZGl2IGlkPSJzLWxpYi1hbGVydCIgdGl0bGU9IiI+PGRpdiBpZD0icy1saWItYWxlcnQtY29udGVudCI+PC9kaXY+PC9kaXY+CgogICAgCjxmb290ZXI+CjxkaXYgY2xhc3M9ImZvb3Rlci1tYWluIGZsZXgtY29udGFpbmVyIiBhcmlhLWxhYmVsPSJNSVQgTGlicmFyaWVzIGZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJpZGVudGl0eSBmbGV4LWNvbnRhaW5lciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdSIgY2xhc3M9ImxvZ28tbWl0LWxpYiI+CiAgICAgICAgICAgIDxpbWcgc3JjPSAiaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0bGliLXdvcmRtYXJrLnN2ZyIgYWx0PSJNSVQgTGlicmFyaWVzIGxvZ28iIHdpZHRoPSIxNTAiPgogICAgICAgIDwvYT4KICAgICAgICA8ZGl2IGNsYXNzPSJsaW5rcy1wcmltYXJ5IGZsZXgtY29udGFpbmVyIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcHJpdmFjeSIgY2xhc3M9Imxpbmstc3ViIj5Qcml2YWN5PC9hPjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcGVybWlzc2lvbnMiIGNsYXNzPSJsaW5rLXN1YiI+UGVybWlzc2lvbnM8L2E+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2Nlc3NpYmlsaXR5IiBjbGFzcz0ibGluay1zdWIiPkFjY2Vzc2liaWxpdHk8L2E+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9jb250YWN0IiBjbGFzcz0ibGluay1zdWIiPkNvbnRhY3QgdXM8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj48IS0tIGVuZCAuaWRlbnRpdHkgLS0+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJmb290ZXItaW5mby1pbnN0aXR1dGUiPgogICAgPGEgY2xhc3M9ImxpbmstbG9nby1taXQiIGhyZWY9Imh0dHBzOi8vd3d3Lm1pdC5lZHUiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRfbG9ja3VwX3N0ZC10aHJlZS1saW5lX3JnYl93aGl0ZS5zdmciIGFsdD0iTUlUIGxvZ28iIHdpZHRoPSIxNTAiPgogICAgPC9hPgogICAgPGRpdiBjbGFzcz0ibGljZW5zZSI+Q29udGVudCBjcmVhdGVkIGJ5IHRoZSBNSVQgTGlicmFyaWVzLCA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvNC4wLyI+Q0MgQlktTkM8L2E+IHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVzZWFyY2gtc3VwcG9ydC9ub3RpY2VzL2NvcHlyaWdodC1ub3RpZnkvIj5Ob3RpZnkgdXMgYWJvdXQgY29weXJpZ2h0IGNvbmNlcm5zPC9hPi4KICAgIDwvZGl2PjwhLS0gZW5kIC5mb290ZXItaW5mby1pbnN0aXR1dGUgLS0+CjwvZGl2Pgo8L2Zvb3Rlcj4KPHNjcmlwdCBzcmM9Ii8vdjIubGliYW5zd2Vycy5jb20vbG9hZF9jaGF0LnBocD9oYXNoPWJlMmM2NTRiNjNkZDQzZjMxYzU2Mjk1ZWU1ZDc4ZDg4Ij48L3NjcmlwdD4KCgogICAgPCEtLSBCRUdJTjogQW5hbHl0aWNzIGNvZGUgLS0+PCEtLSBNYXRvbW8gVGFnIE1hbmFnZXIgLS0+PHNjcmlwdD4gIHZhciBfbXRtID0gd2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgIF9tdG0ucHVzaCh7J210bS5zdGFydFRpbWUnOiAobmV3IERhdGUoKS5nZXRUaW1lKCkpLCAnZXZlbnQnOiAnbXRtLlN0YXJ0J30pOyAgKGZ1bmN0aW9uKCkgeyAgICB2YXIgZD1kb2N1bWVudCwgZz1kLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyAgICBnLmFzeW5jPXRydWU7IGcuc3JjPSdodHRwczovL21hdG9tby5saWJyYXJpZXMubWl0LmVkdS9qcy9jb250YWluZXJfb0ZXTVNiM2cuanMnOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyk7ICB9KSgpOzwvc2NyaXB0PjwhLS0gRW5kIE1hdG9tbyBUYWcgTWFuYWdlciAtLT48IS0tIEVORDogQW5hbHl0aWNzIGNvZGUgLS0+CgogIDwvYm9keT4KICA8L2h0bWw+CiAg", "response_headers": {"Content-Security-Policy": ["upgrade-insecure-requests"], "content-type": ["text/html; charset=UTF-8"], "date": ["Thu, 05 Feb 2026 20:17:13 GMT"], "server": ["nginx"], "strict-transport-security": ["max-age=31536000; preload"], "vary": ["Accept-Encoding"], "x-backend-server": ["libguides-us-1.springyaws.com"], "x-content-type-options": ["nosniff"], "x-springy-cache-disabled": ["0"], "x-orig-content-encoding": ["gzip"]}} +{"url": "https://libguides.mit.edu/sts", "status": "active", "cdx_warc_filename": "rec-d3274de52d0c-libguides-20260205201423902-0.warc.gz", "cdx_title": "STS Databases - Science, Technology, & Society (STS) - LibGuides at MIT Libraries", "cdx_offset": "1015075", "cdx_length": "21918", "html_base64": "ICA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9RWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIAo8dGl0bGU+U1RTIERhdGFiYXNlcyAtIFNjaWVuY2UsIFRlY2hub2xvZ3ksICYgU29jaWV0eSAoU1RTKSAtIExpYkd1aWRlcyBhdCBNSVQgTGlicmFyaWVzPC90aXRsZT4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KPCEtLSBmYXZpY29uLnR3aWcgLS0+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9hcHBsZS10b3VjaC1pY29uLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMzJ4MzIiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLTMyeDMyLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMTZ4MTYiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLTE2eDE2LnBuZyI+CjxsaW5rIHJlbD0ibWFuaWZlc3QiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9zaXRlLndlYm1hbmlmZXN0Ij4KPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9zYWZhcmktcGlubmVkLXRhYi5zdmciIGNvbG9yPSIjNWJiYWQ1Ij4KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vZmF2aWNvbi5pY28iPgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVDb2xvciIgY29udGVudD0iI2ZmYzQwZCI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tY29uZmlnIiBjb250ZW50PSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vYnJvd3NlcmNvbmZpZy54bWwiPgo8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iI2ZmZmZmZiI+CjwhLS0gIWZhdmljb24udHdpZyAtLT4KCgoKPCEtLSBwdWJsaWNfbWV0YWRhdGEudHdpZyAtLT4KCiAgICA8IS0tIGF1dG8gZ2VuZXJhdGVkIGR1YmxpbiBjb3JlIG1ldGFkYXRhIC0tPgogICAgPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkxpYkd1aWRlczogU2NpZW5jZSwgVGVjaG5vbG9neSwgJiBTb2NpZXR5IChTVFMpOiBTVFMgRGF0YWJhc2VzIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5DcmVhdG9yIiBjb250ZW50PSJFY2UgVHVybmF0b3IiLz4KICAgIDxtZXRhIG5hbWU9IkRDLlN1YmplY3QiIGNvbnRlbnQ9Ikh1bWFuaXRpZXMsIFNvY2lhbCBzY2llbmNlcyIvPgogICAgPG1ldGEgbmFtZT0iREMuRGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgZ3VpZGUgdG8gbGlicmFyeSByZXNlYXJjaCB0b29scyBmb3Igc2NpZW5jZSwgdGVjaG5vbG9neSAmIHNvY2lldHkuIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5QdWJsaXNoZXJzIiBjb250ZW50PSJNSVQgTGlicmFyaWVzIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5SaWdodHMiIGNvbnRlbnQ9IkNvcHlyaWdodCBNSVQgTGlicmFyaWVzIDIwMjYiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkxhbmd1YWdlIiBjb250ZW50PSJlbiIvPgogICAgPG1ldGEgbmFtZT0iREMuSWRlbnRpZmllciIgY29udGVudD0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9jLnBocD9nPTE3NTg4OCZwPTExNTg2OTciLz4KICAgIDxtZXRhIG5hbWU9IkRDLkRhdGUuQ3JlYXRlZCIgY29udGVudD0iSnVsIDUsIDIwMDgiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkRhdGUuTW9kaWZpZWQiIGNvbnRlbnQ9Ik1heSAyOSwgMjAyNSIvPgogICAgCgo8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkxpYkd1aWRlczogU2NpZW5jZSwgVGVjaG5vbG9neSwgJmFtcDsgU29jaWV0eSAoU1RTKTogU1RTIERhdGFiYXNlcyI+CjxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQSBndWlkZSB0byBsaWJyYXJ5IHJlc2VhcmNoIHRvb2xzIGZvciBzY2llbmNlLCB0ZWNobm9sb2d5ICZhbXA7IHNvY2lldHkuIj4KPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9MTc1ODg4JmFtcDtwPTExNTg2OTciPgo8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InN1bW1hcnlfbGFyZ2VfaW1hZ2UiPgo8bWV0YSBuYW1lPSJ0d2l0dGVyOnNpdGUiIGNvbnRlbnQ9IkBzcHJpbmdzaGFyZSI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pxdWVyeS9jc3MvanF1ZXJ5LXVpLm1pbi5jc3M/MjY5MSIgLz4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9uZXRkbmEuYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC43LjAvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvc2xpY2stMS44LjEvc2xpY2svc2xpY2suY3NzIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL3NsaWNrLTEuOC4xL3NsaWNrL3NsaWNrLXRoZW1lLmNzcyI+CgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvY3NzMy4yMy40L2xnLXB1YmxpYy5taW4uY3NzIiAvPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pxdWVyeS9qcy8xLjEyLjRfanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQ+CiAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICBqUXVlcnkoIi5kcm9wZG93bi10b2dnbGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLnNpYmxpbmdzKCJ1bC5zLWxnLXN1YnRhYi11bC5kcm9wZG93bi1tZW51IikudG9nZ2xlKCk7CiAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzX2xnX2d1aWRlX25hbWUgPSBqUXVlcnkoJyNzLWxnLWd1aWRlLW5hbWUnKTsKICAgICAgICBpZiAoc19sZ19ndWlkZV9uYW1lLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoalF1ZXJ5LnRyaW0oc19sZ19ndWlkZV9uYW1lLnRleHQoKSkgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBzX2xnX2d1aWRlX25hbWUucmVtb3ZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKPC9zY3JpcHQ+CgogICAgPHNjcmlwdCBzcmM9Ii8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTMuMi9qcXVlcnktdWkubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAgICAgalF1ZXJ5LnVpIHx8CiAgICAgICAgZG9jdW1lbnQud3JpdGUoJzxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvanF1ZXJ5L2pzL2pxdWVyeS11aS5taW4uanM/MjY5MSI+XHgzQy9zY3JpcHQ+Jyk7CiAgICA8L3NjcmlwdD4KCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvanMzLjIzLjQvbGctcHVibGljLm1pbi5qcyI+PC9zY3JpcHQ+CjxzdHlsZT4vKiogYm9vdHN0cmFwX3RhYl9jc3MudHdpZyAqKi8KI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGJ1dHRvbiwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7IC1tb3otYm9yZGVyLXJhZGl1czogMDsgYm9yZGVyLXJhZGl1czogMDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogNHB4IDE1cHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyB7CiAgICBib3JkZXItYm90dG9tOiAwOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSNzLWxnLWFkbWluLXRhYi1hZGQgPiBhIHsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYTpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b246aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGE6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbjpob3ZlciB7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMGZmOwogICAgY29sb3I6ICNmZmZmZmY7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYnV0dG9uLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYnV0dG9uIHsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7IC1tb3otYm9yZGVyLXJhZGl1czogMDsgYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiAucy1sZy1zdWJ0YWItdWwgPiAuYWN0aXZlID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IC5zLWxnLXN1YnRhYi11bCA+IC5hY3RpdmUgPiBidXR0b24gewogICAgY29sb3I6ICNmZmZmZmY7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMGZmOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGE6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiBidXR0b246aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYnV0dG9uOmhvdmVyIHsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7IC1tb3otYm9yZGVyLXJhZGl1czogMDsgYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQgewogICAgYm9yZGVyLXRvcC1jb2xvcjogI2UxZTFlMTsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzIGJ1dHRvbi5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tdG9wOiAtM3B4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItZHJvcCB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgcGFkZGluZzogNHB4IDZweCA0cHggM3B4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcCB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgcGFkZGluZzogNHB4IDZweCAwcHggM3B4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIG1hcmdpbi1yaWdodDogMnB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDZweCA0cHggM3B4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi1kcm9wOmhvdmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNiYmI7CiAgICBwYWRkaW5nOiA0cHggNnB4IDBweCAzcHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluaywKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluaywKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbms6aG92ZXIgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogNHB4IDVweCA0cHggMTBweDsKfQoKLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rLAoubmF2LXRhYnMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluayB7CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYS5zLWxnLXRhYi1kcm9wLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcCB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgcGFkZGluZzogNHB4IDhweCA0cHggOHB4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAwOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLWRyb3A6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi1kcm9wOmhvdmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNiYmI7CiAgICBwYWRkaW5nOiA0cHggOHB4IDRweCA4cHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEucy1sZy10YWItdG9wLWxpbms6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluaywKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyIHsKICAgIHdpZHRoOiAxMDAlOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBwYWRkaW5nOiA0cHggMTVweCA0cHggMTVweDsKfQoKLyoqICFib290c3RyYXBfdGFiX2Nzcy50d2lnICoqLwogLnMtbGliLWJveCB7Ym9yZGVyLWNvbG9yOiAjY2NjY2NjOwogICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDhweCA2cHggLTZweCAjQUFBQUFBOwogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnMtbGliLWJveC1zdGQgLnMtbGliLWJveC10aXRsZSB7YmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtjb2xvcjogIzg4ODsKICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjY2NjOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zLWxpYi1ib3ggLnMtbGliLWJveC10aXRsZSB7YmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtjb2xvcjogIzg4ODsKICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjY2NjOwogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAucy1saWItYm94IC5zLWxnLWJveC1mb290ZXIgewogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgICAgfTwvc3R5bGU+PCEtLSBsb2FkIGZhdmljb25zIGZvciBtaXNjZWxsYW5lb3VzIHBsYXRmb3JtcyAtLT4KPGxpbmsgcmVsPSJpY29uIiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9mYXZpY29uLmljbyIgc2l6ZXM9IjMyeDMyIj4KPGxpbmsgcmVsPSJpY29uIiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9mYXZpY29uLnN2ZyIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvYXBwbGUtdG91Y2gtaWNvbi5wbmciPjwhLS0gMTgww5cxODAgLS0+CjxsaW5rIHJlbD0ibWFuaWZlc3QiIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL21hbmlmZXN0Lmpzb24iPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDQwMGl0YWxpYyw2MDAsNjAwaXRhbGljLDcwMCw3MDBpdGFsaWMiPgoKPCEtLWFkZGVkIGJ5IERhcmN5IHRvIGNvbmZpcm0gdy8gR29vZ2xlIHdlYm1hc3RlciB0b29scyB3ZSBvd24gdGhpcyBzaXRlLS0+CjxtZXRhIG5hbWU9Imdvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbiIgY29udGVudD0iODJDdjNIRld2Y2VmQ185WGF1dmdsY2ZCNGgzbzB1dWlDM25LV1drTF9lRSIgLz4KCjwhLS1tZXRhIHRhZyB0byBzY2FsZSBtb2JpbGUgZGV2aWNlIGRpc3BsYXktLT4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgbWF4aW11bS1zY2FsZT0xIj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7CiAgalF1ZXJ5KCJpbWdbYWx0PSdudWxsJ10sIGltZ1thbHQ9J051bGwnXSwgaW1nW2FsdD0nTlVMTCddIikuYXR0cigiYWx0IiwgIiIpOwogIHZhciBsaWJjaGF0X2VmYzc1YzU1OTQ3ZGIzMjNkNGZhYWI3MjViNzkzMDdmID0geyBpaWQ6NTksIGtleTonZmIxMDQ0NjczMGUyNzFjJywgd2lkdGg6JzI0MCcgfTsKCiAgJCgnaGVhZGVyIC5tZW51LS10b2dnbGUnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI25hdi1tYWluJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpOwogICAgJCgnLndyYXAtcGFnZScpLnRvZ2dsZUNsYXNzKCdtb2JpbGUtbmF2LWFjdGl2ZScpOwogIH0pOwoKICAkKCAnLmxpbmstcHJpbWFyeScgKS5iaW5kKCAibW91c2VlbnRlciIsIGZ1bmN0aW9uKCkgeyAKICAgICQoICcubGluay1wcmltYXJ5JyApLnJlbW92ZUNsYXNzKCAnb3BlbicgKTsKICAgICQodGhpcykuZmluZCggJy5tZW51LWNvbnRyb2wnICkuYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScgKTsKICAgICQodGhpcykuY2xvc2VzdCggJy5saW5rLXByaW1hcnknICkuYWRkQ2xhc3MoICdvcGVuJyApOwogIH0pOwogICQoICcubGluay1wcmltYXJ5JyApLmJpbmQoICJtb3VzZWxlYXZlIiwgZnVuY3Rpb24oKSB7IAogICAgJCh0aGlzKS5maW5kKCAnLm1lbnUtY29udHJvbCcgKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKTsKICAgICQoICcubGluay1wcmltYXJ5JyApLnJlbW92ZUNsYXNzKCAnb3BlbicgKTsKICB9KTsKCiAgLy8gbWFrZSBlc2MgY2xvc2UgYWxsIG1lbnVzCiAgJCggJyNuYXYtbWFpbicgKS5vbiggJ2tleWRvd24nICwgZnVuY3Rpb24oZSkgewogICAgaWYgKGUua2V5Q29kZSA9PSAyNykgewogICAgICBoaWRlTWVudShlKTsKICAgIH0KICB9KTsKCiAgZnVuY3Rpb24gaGlkZU1lbnUoKSB7CiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgICAkKCAnLm1lbnUtY29udHJvbCcgKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7CiAgICAkKCAnLmxpbmtzLXN1YicgKS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKTsKICB9CgogIC8vIHRoYW5rcyB0byBodHRwOi8vaGV5ZG9ud29ya3MuY29tL3ByYWN0aWNhbF9hcmlhX2V4YW1wbGVzLwogICQoJy5tYWluLW5hdi1oZWFkZXInKS5lYWNoKGZ1bmN0aW9uKCkgewoKICAgIHZhciAkdGhpcyA9ICQodGhpcyk7CgogICAgLy8gY3JlYXRlIHVuaXF1ZSBpZCBmb3IgYTExeSByZWxhdGlvbnNoaXAKICAgIHZhciBpZCA9ICdjb2xsYXBzaWJsZS0nICsgJCggJyNuYXYtbWFpbiBoMicgKS5pbmRleCh0aGlzKTsKCiAgICAvLyBpZGVudGlmeSBwYW5lbCBhbmQgbWFrZSBpdCBmb2N1c2FibGUKICAgIHZhciBwYW5lbCA9ICQodGhpcykubmV4dCggJy5saW5rcy1zdWInICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICkuYXR0ciggJ2lkJywgaWQpOwoKICAgIC8vIEFkZCBkZWZhdWx0IGFyaWEgc3RhdGVzIHRvIGJ1dHRvbgogICAgJHRoaXMuY2hpbGRyZW4oICcubWVudS1jb250cm9sJyApLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyApLmF0dHIoICdhcmlhLWNvbnRyb2xzJywgaWQpOwogICAgdmFyIGJ1dHRvbiA9ICR0aGlzLmNoaWxkcmVuKCAnLm1lbnUtY29udHJvbCcgKTsKCiAgICAvLyBUb2dnbGUgdGhlIHN0YXRlIHByb3BlcnRpZXMKICAgIGJ1dHRvbi5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICQodGhpcykuY2xvc2VzdCggJy5saW5rLXByaW1hcnknICkudG9nZ2xlQ2xhc3MoICdvcGVuJyApOwogICAgICB2YXIgc3RhdGUgPSAkKHRoaXMpLmF0dHIoICdhcmlhLWV4cGFuZGVkJyApID09PSAnZmFsc2UnID8gdHJ1ZSA6IGZhbHNlOwogICAgICAkKHRoaXMpLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgc3RhdGUgKTsKICAgICAgcGFuZWwuYXR0ciggJ2FyaWEtaGlkZGVuJywgIXN0YXRlICk7CiAgICB9KTsKICB9KTsKfSk7Cjwvc2NyaXB0PgoKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLyogQmFzaWMgbGF5b3V0IHJ1bGVzICovCiogewogIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgpodG1sIHsKICBmb250LXNpemU6IDE2cHg7Cn0KCmJvZHkgewogIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsICJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMTZweDsgLyogd2FzIDEwMCU7ICovCiAgbGluZS1oZWlnaHQ6IDEuNDsKICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owp9CgphIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogIzAwMDsKfQphOmhvdmVyIHsKICBjb2xvcjogIzAwZjsKfQoKaDMgewogIGZvbnQtc2l6ZTogMjBweDsKfQoKLmZsZXgtY29udGFpbmVyIHsKICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKfQoKLmZsZXgtZW5kIHsKICAtd2Via2l0LWJveC1hbGlnbjogZW5kOwogIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwp9Cgouc3IgewogIGJvcmRlcjogMCBub25lOwogIGNsaXA6IHJlY3QoMXB4LDFweCwxcHgsMXB4KTsKICBoZWlnaHQ6IDFweDsKICBtYXJnaW46IC0xcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMXB4OwogIHdvcmQtd3JhcDogbm9ybWFsOwp9CgoubGlzdC11bmJ1bGxldGVkIHsKICBsaXN0LXN0eWxlOiBub25lOwogIHBhZGRpbmctbGVmdDogMDsKICB0ZXh0LWluZGVudDogMDsKfQoKLyogTnVtYmVyZWQgc2VjdGlvbnMgYmVsb3cgZXh0cmFjdGVkIGZyb20gZ2VuZXJhdGVkLCB1bm1pbmlmaWVkIHBhcmVudCB0aGVtZSBnbG9iYWwuY3NzICovCgovKiAxLiBIZWFkZXIgJiBOYXYgKi8KLmhlYWRlci1tYWluIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYmFja2dyb3VuZDogIzAwMCB1cmwoJ2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaW1hZ2VzL3ZpLXNoYXBlNy10cC5wbmcnKSBuby1yZXBlYXQgMCA2NSU7CiAgY2xlYXI6IGJvdGg7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiB7CiAgICB3aWR0aDogMTAwJTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiAwIDFlbTsKICB9Cn0KLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgewogIG9yZGVyOiAyOwogIG1pbi13aWR0aDogNzdweDsKICBtaW4td2lkdGg6IDQuODEyNXJlbTsKICBwYWRkaW5nLWJvdHRvbTogNi40cHg7CiAgcGFkZGluZy1ib3R0b206IDAuNHJlbTsKICBmb250LXNpemU6IDE0LjRweDsKICBmb250LXNpemU6IDAuOXJlbTsKICBsaW5lLWhlaWdodDogMTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgewogICAgbWF4LXdpZHRoOiAxMDRweDsKICAgIG1heC13aWR0aDogNi41cmVtOwogICAgbWFyZ2luLWxlZnQ6IDEuNSU7CiAgICBwYWRkaW5nOiAwOwogIH0KfQouaGVhZGVyLW1haW4gLm5hbWUtc2l0ZSBhIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogYXV0bzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYiB7CiAgZmlsbDogI2ZmZjsKICBwYWRkaW5nOiA4cHg7Cn0KLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgc3ZnIHsKICBtYXgtaGVpZ2h0OiAyOHB4OwogIG1heC1oZWlnaHQ6IDEuNzVyZW07CiAgaGVpZ2h0OiBhdXRvOwogIHdpZHRoOiA3NXB4Owp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYiBzdmcgewogICAgbWF4LWhlaWdodDogNDRweDsKICAgIG1heC1oZWlnaHQ6IDIuNzVyZW07CiAgICB3aWR0aDogMTIwcHg7CiAgfQp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHRpdGxlIHsKICBjb2xvcjogIzAwMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQtbGliOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQtbGliOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9Ci5oZWFkZXItbWFpbiAubGluay1hY2NvdW50LAouaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCi5oZWFkZXItbWFpbiAubGluay1jb250YWN0IHsKICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgb3JkZXI6IDEwMDA7CiAgcGFkZGluZzogNi40cHg7CiAgcGFkZGluZzogMC40cmVtOwogIGNvbG9yOiAjZmZmOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgZm9udC1zaXplOiAwLjc1cmVtOwp9Ci5oZWFkZXItbWFpbiAubGluay1hY2NvdW50OmhvdmVyLAouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudDpmb2N1cywKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoOmhvdmVyLAouaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2g6Zm9jdXMsCi5oZWFkZXItbWFpbiAubGluay1jb250YWN0OmhvdmVyLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdDpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCBzdmcsCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaCBzdmcsCi5oZWFkZXItbWFpbiAubGluay1jb250YWN0IHN2ZyB7CiAgZmlsbDogI2M4YzhjODsKICBtYXJnaW46IDAgYXV0bzsKICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwogIHdpZHRoOiAyZW07Cn0KLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgaSwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoIGksCi5oZWFkZXItbWFpbiAubGluay1jb250YWN0IGkgewogIGNvbG9yOiAjYzhjOGM4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDE0cHg7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubGluay1hY2NvdW50LAogIC5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaCwKICAuaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQouaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2ggewogIG1hcmdpbi1sZWZ0OiBhdXRvOwp9Ci5oZWFkZXItbWFpbiAubGluay1hY2NvdW50IHsKICBtYXJnaW4tbGVmdDogMC42cmVtOwogIG1hcmdpbi1yaWdodDogMC42cmVtOwp9Ci5oZWFkZXItbWFpbiAubGluay1jb250YWN0IHsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0IHsKICBkaXNwbGF5OiBub25lOwogIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogIG9yZGVyOiA0OwogIHBhZGRpbmctdG9wOiAzMnB4OwogIHBhZGRpbmctdG9wOiAycmVtOwogIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTsKICBwYWRkaW5nLWxlZnQ6IDAuNWVtOwogIHBhZGRpbmctcmlnaHQ6IDAuNWVtOwogIG1heC13aWR0aDogNzRweDsKICBtYXgtd2lkdGg6IDczLjZweDsKICBtYXgtd2lkdGg6IDQuNnJlbTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQouaGVhZGVyLW1haW4gLmxpbmstbG9nby1taXQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0OmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQgewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogYXV0bzsKICBtYXgtaGVpZ2h0OiA0NXB4OwogIG1heC1oZWlnaHQ6IDIuODEyNXJlbTsKICBmaWxsOiAjYjliN2I2Owp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQgLmNvbG9yIHsKICBmaWxsOiAjZmZmOwp9CiNza2lwIGEgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAtMTAwMDBweDsKICB0b3A6IGF1dG87CiAgd2lkdGg6IDFweDsKICBoZWlnaHQ6IDFweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJhY2tncm91bmQ6ICNmZmY7CiAgY29sb3I6IGJsdWU7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMTBweDsKfQojc2tpcCBhOmZvY3VzIHsKICBwb3NpdGlvbjogc3RhdGljOwogIHdpZHRoOiBhdXRvOwogIGhlaWdodDogYXV0bzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLmljb24tYWNjb3VudCwKICAubm8tZmxleGJveC5mbGV4Ym94bGVnYWN5IC5oZWFkZXItbWFpbiAuaWNvbi1zZWFyY2ggewogICAgbWF4LWhlaWdodDogMTZweDsKICAgIG1heC1oZWlnaHQ6IDFyZW07CiAgICBtYXgtd2lkdGg6IDE2cHg7CiAgICBtYXgtd2lkdGg6IDFyZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubm8tZmxleGJveC5mbGV4Ym94bGVnYWN5IC5oZWFkZXItbWFpbiAubWVudS0tdG9nZ2xlIHN2ZyB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nOiAxZW07CiAgICB3aWR0aDogYXV0bzsKICB9Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIHsKICBoZWlnaHQ6IDYycHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoubHRlLWllOSAuaGVhZGVyLW1haW4gKiB7CiAgaGVpZ2h0OiA2MnB4OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgewogIG1hcmdpbi1sZWZ0OiAzMnB4OwogIG1heC13aWR0aDogMTAzcHg7Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIC5sb2dvLW1pdCB7CiAgbWFyZ2luLXRvcDogMjRweDsKICBtYXJnaW4tbGVmdDogNDBweDsKfQoubHRlLWllOSAuaGVhZGVyLW1haW4gLnNtYWxsIHsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC1zaXplOiAwLjYyNXJlbTsKICBwYWRkaW5nLXRvcDogMjZweDsKICBwYWRkaW5nLXRvcDogMS42MjVyZW07Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIC5zbWFsbCBzdmcgewogIGRpc3BsYXk6IG5vbmU7Cn0KYm9keS51c2VyLWlzLXRhYmJpbmcgKi5uYXYtbWFpbiAubWFpbi1uYXYtbGluay5uby11bmRlcmxpbmU6Zm9jdXMgewogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICBib2R5LnVzZXItaXMtdGFiYmluZyAqLm5hdi1tYWluIC5tYWluLW5hdi1saW5rOmZvY3VzIHsKICAgIGJhY2tncm91bmQ6ICNjNzAyYzc7CiAgfQp9Ci5uYXYtbWFpbiB7CiAgZmxleC13cmFwOiB3cmFwOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwMCUpOwogIHotaW5kZXg6IDcwMDA7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgd2lkdGg6IDA7CiAgaGVpZ2h0OiAwOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLm5hdi1tYWluLmFjdGl2ZSB7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc2l6ZTogMXJlbTsKICBwYWRkaW5nOiAwcHggOHB4IDhweCA4cHg7CiAgcGFkZGluZzogMHJlbSAwLjVyZW0gMC41cmVtIDAuNXJlbTsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICBib3gtc2hhZG93OiAwIDNweCAzcHggI2NjYzsKICBoZWlnaHQ6IGF1dG87CiAgZmxleDogbm9uZTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIuOGVtKTsKICB0b3A6IDA7CiAgd2lkdGg6IDEwMCU7Cn0KLm5hdi1tYWluLmFjdGl2ZSBhIHsKICB3aWR0aDogMTAwJTsKfQoubmF2LW1haW4uYWN0aXZlIGE6aG92ZXIsCi5uYXYtbWFpbi5hY3RpdmUgYTpmb2N1cyB7CiAgY29sb3I6ICNmZmY7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAubmF2LW1haW4gewogICAgZm9udC1zaXplOiAwLjllbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkgewogIC5uYXYtbWFpbiB7CiAgICBmb250LXNpemU6IDAuNzVlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiB7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIGhlaWdodDogYXV0bzsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3JkZXI6IDM7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdpZHRoOiBhdXRvOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTsKICB9Cn0KLm5hdi1tYWluIC5zbWFsbCB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5zbWFsbCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMC43NWVtOwogIH0KICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgcGFkZGluZzogMXJlbSAwLjVyZW0gMC41cmVtIDAuNXJlbTsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB9CiAgLm5hdi1tYWluIC5zbWFsbCBzdmcgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmaWxsOiAjZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMC40ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLm5hdi1tYWluIC5zbWFsbCB7CiAgICBmb250LXNpemU6IDFlbTsKICB9CiAgLm5hdi1tYWluIC5zbWFsbCBhIHsKICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgcGFkZGluZy10b3A6IDJlbTsKICB9CiAgLm5hdi1tYWluIC5zbWFsbCBzdmcgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KLm5hdi1tYWluIC5jaGF0IHsKICBkaXNwbGF5OiBub25lOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gLmNoYXQgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQogIC5uYXYtbWFpbiAuY2hhdCAubGlua3Mtc3ViIHsKICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICBtaW4td2lkdGg6IDkuMzc1cmVtOwogICAgYmFja2dyb3VuZDogI2YzZjNmMzsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAubmF2LW1haW4gLmNoYXQgLm1vcmUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAubmF2LW1haW4gLmNoYXQgLndyYXAtYnV0dG9uLWNoYXQgewogICAgbWluLWhlaWdodDogNDZweDsKICAgIG1pbi1oZWlnaHQ6IDIuODc1cmVtOwogICAgcGFkZGluZzogMTZweCA4cHggMHB4IDhweDsKICAgIHBhZGRpbmc6IDFyZW0gMC41cmVtIDByZW0gMC41cmVtOwogICAgbWluLXdpZHRoOiAxMDAlOwogIH0KICAubmF2LW1haW4gLmNoYXQgLndyYXAtYnV0dG9uLWNoYXQgI2xpYmNoYXRfYnRuX3dpZGdldCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNjY2OwogIH0KfQoubmF2LW1haW4gLm5hdi1tYWluLWxpc3QgewogIGRpc3BsYXk6IGJsb2NrOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gLm5hdi1tYWluLWxpc3QgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsKICB3aWR0aDogMTAwJTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5saW5rLXByaW1hcnkgewogICAgd2lkdGg6IGF1dG87CiAgfQp9Ci5uYXYtbWFpbiAubGluay1wcmltYXJ5IC5saW5rcy1zdWIgewp9Ci5uYXYtbWFpbiAubWFpbi1uYXYtaGVhZGVyIHsKICBoZWlnaHQ6IDEwMCU7CiAgZm9udC1zaXplOiAxMDAlOwp9Ci5uYXYtbWFpbiAubWFpbi1uYXYtaGVhZGVyIGJ1dHRvbiB7CiAgYm9yZGVyOiAwOwogIGJhY2tncm91bmQ6ICNmZmY7CiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICBmb250LXNpemU6IGluaGVyaXQ7CiAgcGFkZGluZzogMDsKfQoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsgewogIHBhZGRpbmc6IDhweDsKICBwYWRkaW5nOiAwLjVyZW07CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gLm1haW4tbmF2LWxpbmsgewogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIGNvbG9yOiAjZmZmOwogICAgZGlzcGxheTogZmxleDsKICAgIGhlaWdodDogMTAwJTsKICAgIHBhZGRpbmctdG9wOiAyZW07CiAgfQp9Ci5uYXYtbWFpbiAubWFpbi1uYXYtbGluay5hY3RpdmUgewogIGJhY2tncm91bmQ6IGxpZ2h0Z3JheTsKICBib3gtc2hhZG93OgogICAgMCAwIDJweCAjNDQ0LAogICAgaW5zZXQgMXB4IDAgMCBncmF5LAogICAgaW5zZXQgLTFweCAwIDAgZ3JheSwKICAgIGluc2V0IDAgMXB4IDAgZ3JheTsKfQoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsubm8tdW5kZXJsaW5lOmhvdmVyIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5tYWluLW5hdi1saW5rOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNjNzAyYzc7CiAgfQp9Ci5uYXYtbWFpbiAuY29sLTEgewogIGJhY2tncm91bmQ6ICNmZmY7Cn0KLm5hdi1tYWluIC5jb2wtMiB7CiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMDAwOwogIGJhY2tncm91bmQ6ICNmZmY7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IG5vbmU7CiAgbGVmdDogMDsKICBtYXgtaGVpZ2h0OiAwOwogIG9wYWNpdHk6IDA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxMDAlOwogIHRyYW5zaXRpb246CiAgICBtYXgtaGVpZ2h0IDAuM3MsCiAgICBtYXJnaW4gMC4zcywKICAgIG9wYWNpdHkgMC4zcywKICAgIG92ZXJmbG93IDAuM3MsCiAgICBwYWRkaW5nLXRvcCAwLjNzLAogICAgcGFkZGluZy1ib3R0b20gMC4zczsKICB3aWR0aDogMzEuNzVlbTsKfQoubmF2LW1haW4gLmxpbmtzLXN1Yi5wdXNoIHsKICBsZWZ0OiBhdXRvOwogIHJpZ2h0OiAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gLmxpbmstcHJpbWFyeS5vcGVuIC5tYWluLW5hdi1saW5rIHsKICAgIGJhY2tncm91bmQ6ICNjNzAyYzc7CiAgfQp9Ci5uYXYtbWFpbiAubGluay1wcmltYXJ5Lm9wZW4gLmxpbmtzLXN1YiB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5saW5rLXByaW1hcnkub3BlbiAubGlua3Mtc3ViIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBib3gtc2hhZG93OiAwIDAgMnB4ICM0NDQ7CiAgICBtYXgtaGVpZ2h0OiAxMDAwcHg7CiAgICBvcGFjaXR5OiAxOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgfQp9Ci5uYXYtbWFpbiAubGlua3Mtc3ViIHsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBhIHsKICBjb2xvcjogIzAwMDsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXdlaWdodDogNjAwOwogIHBhZGRpbmc6IDAuNWVtOwp9Ci5uYXYtbWFpbiAubGlua3Mtc3ViIGE6aG92ZXIsCi5uYXYtbWFpbiAubGlua3Mtc3ViIGE6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci5uYXYtbWFpbiAubGlua3Mtc3ViIFtjbGFzcyo9ImNvbC0iXSB7CiAgd2lkdGg6IDUwJTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiAuYWJvdXQgewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMC42ODc1ZW07CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiAuYm90dG9tIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgIzAwMDsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiAuYm90dG9tLmV4dHJhIHNwYW46Zmlyc3Qtb2YtdHlwZTphZnRlciB7CiAgY29udGVudDogdXJsKC4uLy4uL2ltYWdlcy9hcnJvdy1yaWdodC1zZncuc3ZnKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDAuMjVlbTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiAuYm90dG9tOm5vdCguZXh0cmEpOmFmdGVyIHsKICBjb250ZW50OiB1cmwoLi4vLi4vaW1hZ2VzL2Fycm93LXJpZ2h0LXNmdy5zdmcpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW4tbGVmdDogMC4yNWVtOwp9Ci5uYXYtbWFpbiAuYm90dG9tOm5vdCguZXh0cmEpIHNwYW46bm90KDpmaXJzdC1vZi10eXBlKTpiZWZvcmUgewogIGNvbG9yOiAjMDA3ZGI4OwogIGNvbnRlbnQ6ICJ8IjsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KLm5hdi1tYWluIC5oZWFkaW5nLWNvbCB7CiAgbWFyZ2luOiAxNnB4IDBweCA4cHggOHB4OwogIG1hcmdpbjogMXJlbSAwcmVtIDAuNXJlbSAwLjVyZW07CiAgY29sb3I6ICMwMDA7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwLjc1ZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBwYWRkaW5nLWJvdHRvbTogMDsKfQoubmF2LXBhZ2UgewogIG1hcmdpbi1ib3R0b206IDFyZW0gIWltcG9ydGFudDsKfQoubm8tY3NzdHJhbnNpdGlvbnMgLmxpbmstcHJpbWFyeSAubGlua3Mtc3ViIHsKICBoZWlnaHQ6IDA7CiAgbWFyZ2luOiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDA7Cn0KLm5vLWNzc3RyYW5zaXRpb25zIC5saW5rLXByaW1hcnk6aG92ZXIgLmxpbmtzLXN1YiwKLm5vLWNzc3RyYW5zaXRpb25zIC5saW5rLXByaW1hcnk6Zm9jdXMgLmxpbmtzLXN1YiB7CiAgaGVpZ2h0OiBhdXRvOwogIG1hcmdpbjogYXV0bzsKICBvdmVyZmxvdzogdmlzaWJsZTsKICBwYWRkaW5nOiAxNnB4OwogIHBhZGRpbmc6IDFyZW07CiAgd2lkdGg6IDYwMHB4Owp9Ci5uYXYtc2Vjb25kYXJ5IHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RlZGVkZTsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC1zaXplOiAxcmVtOwogIG1hcmdpbjogMCAyMHB4OwogIHotaW5kZXg6IDcwMDA7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uYXYtc2Vjb25kYXJ5IHsKICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICBoZWlnaHQ6IDA7CiAgICBtYXJnaW46IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMDsKICB9CiAgLm5hdi1zZWNvbmRhcnkuYWN0aXZlIHsKICAgIGhlaWdodDogYXV0bzsKICAgIG1hcmdpbjogMDsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgcGFkZGluZzogMDsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgdWwgewogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpudGgtY2hpbGQobiArIDQpIHVsIHsKICByaWdodDogMDsKfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGk6aG92ZXIgewogIGJhY2tncm91bmQ6ICNkZWRlZGU7CiAgYm94LXNoYWRvdzogMCAwIDJweCAjNDQ0OwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3gtc2hhZG93OiBub25lOwogIH0KfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGk6aG92ZXIgbGkgewogIGJhY2tncm91bmQ6ICNkZWRlZGU7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhYmFiYWI7CiAgaGVpZ2h0OiBhdXRvOwogIGxpbmUtaGVpZ2h0OiAxOwogIG1hcmdpbjogYXV0bzsKICBvcGFjaXR5OiAxOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHdpZHRoOiAxMDAlOwogIHotaW5kZXg6IDcwMDA7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGk6aG92ZXIgbGkgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IDE2cHg7CiAgcGFkZGluZzogMXJlbTsKfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgPiBhIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxNnB4OwogIHBhZGRpbmc6IDFyZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaSA+IGEgewogICAgY29sb3I6IHdoaXRlOwogIH0KfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgbGkgewogIGhlaWdodDogMDsKICBsaW5lLWhlaWdodDogMDsKICBtYXJnaW46IDA7CiAgb3BhY2l0eTogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAwOwp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaSB1bCB7CiAgYm94LXNoYWRvdzogMCAxcHggMnB4ICM0NDQ7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAzMjBweDsKICB3aWR0aDogMjByZW07Cn0KLm5hdi1zZWNvbmQgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLm1vYmlsZS1kaXNwbGF5IHsKICBkaXNwbGF5OiBub25lOwp9Ci5oaWRlLW1vYmlsZS1uYXYtbGluayB7CiAgZGlzcGxheTogbm9uZTsKfQoubWVudS0tdG9nZ2xlIHsKICBtaW4td2lkdGg6IDUxcHg7CiAgbWluLXdpZHRoOiAzLjE4NzVyZW07CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc2l6ZTogMXJlbTsKICBiYWNrZ3JvdW5kOiAjMDAwOwogIGN1cnNvcjogcG9pbnRlcjsKICBmaWxsOiAjZWJmNWZmOwogIG9yZGVyOiAxOwogIHdpZHRoOiAxNC4zNzUlOwogIHotaW5kZXg6IDcwMDA7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5tZW51LS10b2dnbGUgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KLm1lbnUtLXRvZ2dsZSBzdmcgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogMWVtIGF1dG87Cn0KLm1lbnUtLXRvZ2dsZTpob3ZlciwKLm1lbnUtLXRvZ2dsZTpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwp9Ci5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpob3ZlciAubGlua3Mtc3ViLAoubm8tZmxleGJveCAubGluay1wcmltYXJ5LmNoYXQ6Zm9jdXMgLmxpbmtzLXN1YiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLm5vLWZsZXhib3ggLmxpbmstcHJpbWFyeS5jaGF0OmhvdmVyIC5saW5rcy1zdWIgYSwKLm5vLWZsZXhib3ggLmxpbmstcHJpbWFyeS5jaGF0OmZvY3VzIC5saW5rcy1zdWIgYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7Cn0KLmx0ZS1pZTkgLm5hdi1tYWluIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY4cHgpIGFuZCAobWF4LXdpZHRoOiA3MDBweCkgewogIC5saW5rLXByaW1hcnkgLnNlYXJjaC1saW5rIHsKICAgIHBhZGRpbmctcmlnaHQ6IDJlbTsKICB9CiAgLmxpbmstcHJpbWFyeSAuYWNjb3VudC1saW5rIHsKICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgcGFkZGluZy1yaWdodDogMWVtOwogIH0KfQoKLyogMi4gRm9vdGVyICovCi5mb290ZXItbWFpbiB7CiAgYmFja2dyb3VuZDogIzAwMCB1cmwoLi4vLi4vaW1hZ2VzL3ZpLXNoYXBlNy10cC5wbmcpIG5vLXJlcGVhdCAxMCUgY2VudGVyOwogIGZsZXgtd3JhcDogd3JhcDsKICBjbGVhcjogYm90aDsKICB3aWR0aDogMTAwJTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIHsKICAgIHBhZGRpbmc6IDEuMjVlbSAxLjM3NWVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KfQouZm9vdGVyLW1haW4gYSB7CiAgY29sb3I6ICNmM2YzZjM7Cn0KLmZvb3Rlci1tYWluIC5pZGVudGl0eSB7CiAgZmxleC13cmFwOiB3cmFwOwogIHBhZGRpbmc6IDJlbSAwIDA7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgfQp9Ci5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM4MDgyODU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4MDgyODU7CiAgZmxleC13cmFwOiB3cmFwOwogIGZvbnQtc2l6ZTogMC44MTI1ZW07CiAgbWFyZ2luLXRvcDogMmVtOwogIHBhZGRpbmc6IDJyZW0gMS4zNzVyZW07CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSB7CiAgICBib3JkZXItdG9wOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMC44NzVlbTsKICAgIG1hcmdpbi10b3A6IC0yMi40cHg7CiAgICBtYXJnaW4tdG9wOiAtMS40cmVtOwogICAgbWFyZ2luLWxlZnQ6IDE4NHB4OwogICAgbWFyZ2luLWxlZnQ6IDExLjVyZW07CiAgICBwYWRkaW5nOiAwOwogICAgei1pbmRleDogMzAwMDsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogICAgbWFyZ2luLXRvcDogMjRweDsKICAgIG1hcmdpbi10b3A6IDEuNXJlbTsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tbGVmdDogMHJlbTsKICB9Cn0KLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHNwYW4gewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiA1MCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSBzcGFuIHsKICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3Bhbjpub3QoOmxhc3Qtb2YtdHlwZSk6YWZ0ZXIgewogICAgY29sb3I6ICNkZWRlZGU7CiAgICBjb250ZW50OiAifCI7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtYXJnaW4tbGVmdDogMWVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkgewogIC5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSBzcGFuOmZpcnN0LW9mLXR5cGUgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KfQouZm9vdGVyLW1haW4gLmxvZ28tbWl0LWxpYiB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmlsbDogI2ZmZjsKICBwYWRkaW5nLWxlZnQ6IDEuMzc1ZW07CiAgd2lkdGg6IDEwLjMxMjVlbTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5sb2dvLW1pdC1saWIgewogICAgcGFkZGluZy1sZWZ0OiAwOwogICAgbWF4LXdpZHRoOiA5LjVlbTsKICAgIHdpZHRoOiA5LjVlbTsKICB9Cn0KLmZvb3Rlci1tYWluIC5sb2dvLW1pdC1saWIgc3ZnIHsKICBtYXgtaGVpZ2h0OiA0ZW07CiAgbWF4LXdpZHRoOiA5LjVlbTsKICBmaWxsOiAjZmZmOwp9Ci5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHRpdGxlIHsKICBjb2xvcjogIzAwMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9Ci5mb290ZXItbWFpbiAudGV4dC1maW5kLXVzIHsKICBjb2xvcjogI2ViZWJlYjsKICBkaXNwbGF5OiBub25lOwogIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsKICBmb250LXNpemU6IDAuNjI1ZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBtaW4td2lkdGg6IDdlbTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC50ZXh0LWZpbmQtdXMgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIHsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGZsZXgtd3JhcDogd3JhcDsKICBwYWRkaW5nLWxlZnQ6IDEuMzc1ZW07CiAgd2lkdGg6IGF1dG87CiAgbWluLXdpZHRoOiAxMmVtOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLnNvY2lhbCB7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG1hcmdpbi1ib3R0b206IDAuMmVtOwogICAgei1pbmRleDogNDAwMDsKICB9Cn0KLmZvb3Rlci1tYWluIC5zb2NpYWwgYSB7CiAgd2lkdGg6IDMzJTsKfQouZm9vdGVyLW1haW4gLnNvY2lhbCBhOmhvdmVyIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAuc29jaWFsIGEgewogICAgd2lkdGg6IDIwJTsKICB9CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgYTpub3QoOmxhc3Qtb2YtdHlwZSkgewogICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTsKICB9Cn0KLmZvb3Rlci1tYWluIC5zb2NpYWwgW2NsYXNzKj0iaWNvbi1zb2NpYWwiXSB7CiAgYmFja2dyb3VuZDogI2RlZGVkZTsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgaGVpZ2h0OiAxLjVlbTsKICBwYWRkaW5nOiAwLjJlbTsKICB3aWR0aDogMS41ZW07Cn0KLmZvb3Rlci1tYWluIC5zb2NpYWwgW2NsYXNzKj0iaWNvbi1zb2NpYWwiXSBwYXRoIHsKICBmaWxsOiAjNDc0NzQ3Owp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLnNvY2lhbCBbY2xhc3MqPSJpY29uLXNvY2lhbCJdIHsKICAgIGhlaWdodDogMmVtOwogICAgcGFkZGluZzogMC4yZW07CiAgICB3aWR0aDogMmVtOwogIH0KfQouZm9vdGVyLWluZm8taW5zdGl0dXRlIHsKICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgYmFja2dyb3VuZDogIzMzMzsKICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBwYWRkaW5nOiAxLjI1ZW0gMS4zNzVlbTsKfQouZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saWNlbnNlIHsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDAuNjg3NWVtOwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1heC13aWR0aDogNDAwcHg7CiAgbWF4LXdpZHRoOiAyNXJlbTsKfQouZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saWNlbnNlIGEgewogIGNvbG9yOiAjZWRlZGVkOwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5mb290ZXItaW5mby1pbnN0aXR1dGUgLmxpbmstbG9nby1taXQgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi1yaWdodDogNTBweDsKICBtYXJnaW4tcmlnaHQ6IDMuMTI1cmVtOwogIG1pbi13aWR0aDogMTUycHg7CiAgbWluLXdpZHRoOiA5LjVyZW07Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1pbmZvLWluc3RpdHV0ZTphZnRlciB7CiAgY2xlYXI6IGJvdGg7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogdGFibGU7Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSA+IGEsCi5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgPiBkaXYgewogIGZsb2F0OiBsZWZ0Owp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgLmxpbmstbG9nby1taXQgewogIHBhZGRpbmctdG9wOiAxLjVlbTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4uZmxleC1jb250YWluZXIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0Owp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbjphZnRlciB7CiAgY2xlYXI6IGJvdGg7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogdGFibGU7Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1tYWluIC5pZGVudGl0eSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgLmxvZ28tbWl0LWxpYiB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1tYWluIC5pZGVudGl0eSAuc29jaWFsIHsKICBib3R0b206IDA7CiAgZGlzcGxheTogYmxvY2s7CiAgcmlnaHQ6IDIycHg7CiAgcG9zaXRpb246IGFic29sdXRlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLXRvcDogMDsKICBtYXJnaW4tbGVmdDogMDsKICBsZWZ0OiAyMDJweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA3OXB4OwogIHdpZHRoOiAxMDAlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSBzcGFuIHsKICBkaXNwbGF5OiBibG9jazsKICBmbG9hdDogbGVmdDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuZm9vdGVyLW1haW4gewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoubHRlLWllOS5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIHdpZHRoOiAxMDAlOwp9CgovKiAzLiBuby1mbGV4Ym94IGZhbGxiYWNrcyAqLwoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNsZWFyIHsKICBjbGVhcjogYm90aAp9Cgoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lciB7CiAgZGlzcGxheTogYmxvY2sKfQoKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+YSwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+YnV0dG9uLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5kaXYsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmZvcm0sCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmgxLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oMiwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+aDMsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmhlYWRlciwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+aW5wdXQsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPm5hdiwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+c3BhbiwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+c3ZnLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj51bCB7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IGF1dG8KfQoKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICcnOwogIGRpc3BsYXk6IHRhYmxlCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtaXRlbSB7CiAgZmxvYXQ6IGxlZnQKfQoKLyogNC4gaGlkaW5nIGFuZCBzaG93aW5nIGVsZW1lbnRzIGJhc2VkIG9uIG1vYmlsZSBjbGFzc2VzICovCi5oaWRkZW4tbW9iaWxlIHsKICBkaXNwbGF5OiBub25lOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGlkZGVuLW1vYmlsZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9Cn0KLmluYWN0aXZlLW1vYmlsZSB7CiAgb3BhY2l0eTogMDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDMyMXB4KSB7CiAgLmluYWN0aXZlLW1vYmlsZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KfQouaGlkZGVuLW5vbi1tb2JpbGUgewogIGRpc3BsYXk6IGJsb2NrOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGlkZGVuLW5vbi1tb2JpbGUgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KCi8qIExvY2FsIG92ZXJyaWRlcyBmb3IgbGliZ3VpZGVzICovCgovKiBSZXNldCBvbmx5IHdoYXQgeW91IG5lZWQgKi8KLmhlYWRlci1tYWluLApmb290ZXIgewogIG1heC13aWR0aDogMTE3MHB4OyAvKiBtYXRjaGVzIC5jb250YWluZXIgKi8KICB3aWR0aDogMTAwJTsKICBtYXJnaW46IDAgYXV0bzsKfQoKLmhlYWRlci1tYWluIHsKICBwYWRkaW5nOiAwIDIwcHg7Cn0KCi5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2OHB4KSB7CiAgLmhlYWRlci1tYWluPltjbGFzcyo9bGlua10gewogICAgZm9udC1zaXplOiA5cHgKICB9CiAgLmhlYWRlci1tYWluIHsKICAgIHBhZGRpbmc6IDA7CiAgfQogIC5oZWFkZXItbWFpbiAubWVudS0tdG9nZ2xlIHsKICAgIG1hcmdpbjogYXV0byAwOwogIH0KICAuaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYiB7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQp9CgovKiBUaGUgcnVsZXMgaW4gdGhpcyBtZWRpYSBxdWVyeSBwcmltYXJpbHkgc2V0IGFsaWdubWVudCBmb3IgdGhlIGxvZ29zIGFuZCBuYXYgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiB7CiAgICBoZWlnaHQ6IDc1cHg7IC8qIG1hdGNoZXMgaGVpZ2h0IG9mIGxvZ29zLCBpbmNsdWRpbmcgMjBweCB0b3AvYm90dG9tIHBhZGRpbmcgKi8KICB9CiAgLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgewogICAgbWF4LXdpZHRoOiAxMDAlOwogIH0KICAubmF2LW1haW4sCiAgLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0LAogIC5uYXYtbWFpbiAubmF2LW1haW4tbGlzdCBsaSwKICAubmF2LW1haW4gLnNtYWxsIGEsCiAgLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICAgIGhlaWdodDogMTAwJTsKICB9CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogICAgcGFkZGluZzogMjBweCAwOwogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIH0KICAubmF2LW1haW4gewogICAgbWFyZ2luOiAwIDEwcHg7CiAgfQogIC5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaCwKICAuaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCB7CiAgICBwYWRkaW5nOiAyMHB4IDA7CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgYSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmctdG9wOiAyMHB4OwogICAgcGFkZGluZy1ib3R0b206IDIwcHg7CiAgfQogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluayB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAyMHB4IDhweDsKICB9CiAgLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0IHsKICAgIGRpc3BsYXk6IG5vbmUKICB9Cn0KCi8qIDYzNXB4IGlzIHRoZSBtYXhpbXVtIHdpZHRoIGJlZm9yZSB0aGUgbG9nb3Mgd2lsbCBzaHJpbmsgaWYgYm90aCBhcmUgZGlzcGxheWVkICovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjM1cHgpIHsKICAuaGVhZGVyLW1haW4gLmxpbmstbG9nby1taXQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CiAgfQp9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkgewogIC5uYXYtbWFpbiAuc21hbGwgYSB7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OyAvKiBmbGV4LWRpcmVjdGlvbiBhbmQgYWxpZ25tZW50IG5lZWRzIHRvIGNoYW5nZSB3aGVuIHRoZSBTVkdzIGFyZSBoaWRkZW4gKi8KICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgIGhlaWdodDogMTAwJTsKICAgIHBhZGRpbmctdG9wOiAyMHB4OwogICAgcGFkZGluZy1ib3R0b206IDIwcHg7CiAgfQp9CgouaGVhZGVyLW1haW4gaDIgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGJvcmRlcjogMDsKICBvdXRsaW5lOiAwOwogIGZvbnQtc2l6ZTogMTAwJTsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CiAgYmFja2dyb3VuZDogMCAwOwp9CgouaGVhZGVyLW1haW4gdWwgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGJvcmRlcjogMDsKICBvdXRsaW5lOiAwOwogIGZvbnQtc2l6ZTogMTAwJTsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CiAgYmFja2dyb3VuZDogMCAwOwogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKfQoKZm9vdGVyIGEsCmhlYWRlciBhIHsKICBjb2xvcjogIzAwMDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KZm9vdGVyIGE6aG92ZXIsCmZvb3RlciBhOmZvY3VzIHsKICBjb2xvcjogI2ZmZjsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKaDEjcy1sZy1ndWlkZS1uYW1lIHsKICAgIGZvbnQtc2l6ZTogMzBweDsKfQoKLnMtbGliLWJveC1jb250ZW50IC51aS13aWRnZXQgewogICAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgIk9wZW4gU2FucyIsIHNhbnMtc2VyaWY7CiAgICBmb250LXNpemU6IDE2cHg7IC8qIHdhcyAxMDAlOyAqLwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cn0KCi50YWJzIGEgewogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLnVpLXdpZGdldC1jb250ZW50IGEgewogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIGNvbG9yOiAjMDAwOwp9CgoudWktd2lkZ2V0LWNvbnRlbnQgYTpob3ZlciB7CiAgY29sb3I6ICMwMGY7Cn0KCnRhYmxlLCB0aCwgdGQgewogICAgcGFkZGluZzogNXB4Owp9Cgojcy1sZy1ndWlkZS1kZXNjcmlwdGlvbiwKI3MtbGctZ3VpZGUtaGVhZGVyLXNlYXJjaCwKI3MtbGliLWJjLAojcy1sZy1ndWlkZS1oZWFkZXItdXBkYXRlZCwKI3MtbGctZ3VpZGUtaGVhZGVyLXVybCwKI3MtbGctZ3VpZGUtcHJpbnQtdXJsLAojcy1sZy1ndWlkZS1oZWFkZXItc3ViamVjdHMsCiNzLWxnLWd1aWRlLWhlYWRlci10YWdzIHsKIGRpc3BsYXk6CiBub25lOwp9Cgojcy1sZy1ndWlkZS1oZWFkZXIgewogbWFyZ2luLXRvcDogMTVweDsKfQoKI3MtbGctZ3VpZGUtbmFtZSB7CiBmb250LXdlaWdodDogNDAwOwp9Cgoucy1saWItYm94IC5zLWxpYi1ib3gtdGl0bGUgewogZm9udC1zaXplOiAxOHB4OwogY29sb3I6ICMxMTE7Cn0KCi5zLWxpYi1ib3ggewogY29sb3I6ICMxMTE7Cn0KCi5zLWxpYi1ib3gtY29udGVudCB7CiBwYWRkaW5nOiAyMHB4Owp9CgovKiBIaWRlcyBFbWFpbCBNZSBidXR0b24qLwoucy1saWItcHJvZmlsZS1lbWFpbCA+IGEgewogICAgZGlzcGxheTogbm9uZTsKfQoKLypIaWRlcyB3ZWJzaXRlLCBTa3lwZSwgJiBTb2NpYWwgbGlua3MgZnJvbSBwcm9maWxlKi8KLmZhLWJvb2ttYXJrLCAuZmEtc2t5cGUsIC5zLWxpYi1wcm9maWxlLXNvY2lhbCB7CiBkaXNwbGF5OiBub25lOwp9CgovKiBPdmVycmlkaW5nIHRoZSBhY2NvcmRpb24gbWFya3VwIHdpdGggY2hhbmdlYWJsZSBhcnJvd3MgKi8KLmFjY29yZGlvbi1ncm91cCAuYWNjb3JkaW9uLXRvZ2dsZSB7CiAgbWFyZ2luLWxlZnQ6IDBweDsKICBiYWNrZ3JvdW5kOiB1cmwoJ2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaW1hZ2VzL2xpYmd1aWRlcy1hcnJvdy1kb3duLnBuZycpIG5vLXJlcGVhdCBsZWZ0IGNlbnRlcjsKICBwYWRkaW5nLWxlZnQ6IDE1cHg7Cn0KLmFjY29yZGlvbi1ncm91cCAuYWNjb3JkaW9uLXRvZ2dsZS5jb2xsYXBzZWQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9pbWFnZXMvbGliZ3VpZGVzLWFycm93LXJpZ2h0LnBuZycpCn0KCi8qIEJhcnRvblBsdXMgc2VhcmNoIGJveCAqLwojcy1sZy1ib3gtMzUwMDk3NC1jb250YWluZXIgaW5wdXQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW4tcmlnaHQ6IDVweDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CiNzLWxnLWJveC0zNTAwOTc0LWNvbnRhaW5lciBsYWJlbCB7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBtYXgtd2lkdGg6IDgwJTsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgovKkhpZGVzIGd1aWRlIGF1dGhvciwgbGFzdCB1cGRhdGVkIGRhdGUsIGFuZCBudW1iZXIgb2Ygdmlld3MgdGhpcyB5ZWFyIGZyb20gZ3VpZGUgbGlzdHMqLwoucy1sZy1zeXN0ZW0tbGlzdCAucy1sZy1ndWlkZS1saXN0LWluZm8gewogZGlzcGxheTogbm9uZTsKIGZvbnQtc2l6ZTogMC45ZW07Cn0KCi8qSGlkZXMgInNraXAgdG8gbWFpbiBjb250ZW50IiBsaW5rIGluIHRvcCBsZWZ0IG9mIGJhbm5lciovCmEjcy1sZy1wdWJsaWMtc2tpcGxpbmsgeyAKcG9zaXRpb246YWJzb2x1dGU7IApsZWZ0Oi0xMDAwMHB4OyAKdG9wOmF1dG87IAp3aWR0aDoxcHg7IApoZWlnaHQ6MXB4OyAKb3ZlcmZsb3c6aGlkZGVuOwp9IAogCmE6Zm9jdXMjcy1sZy1wdWJsaWMtc2tpcGxpbmsgeyAKcG9zaXRpb246c3RhdGljOyAKd2lkdGg6YXV0bzsgCmhlaWdodDphdXRvOyAKfSAKCi8qIHN0YWZmIGNvbnRhY3QgY2FyZCBzdHlsZXMgKi8KLmNvbnRhY3QtY2FyZCAud3JhcC1jb250YWN0LWltYWdlIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IAogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IAogIG1hcmdpbi1yaWdodDogMTVweDsKfQoKLmNvbnRhY3QtY2FyZCAud3JhcC1jb250YWN0LWluZm8gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsgCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLmNvbnRhY3QtY2FyZCAud3JhcC1jb250YWN0LWhlbHAgewogIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBjdXN0b21pemUgYnJvd3ppbmUgd2lkZ2V0ICovCiNicm93emluZVdpZGdldCAuc21hbGxXaWRnZXQgewogIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW4gIWltcG9ydGFudDsKfQoKI2Jyb3d6aW5lV2lkZ2V0IC5zbWFsbFdpZGdldCAud2lkZ2V0VGV4dCB7CiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDEwcHg7Cn0KCiNicm93emluZVdpZGdldCAud2lkZ2V0VGV4dCAuaW50cm8gewogIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Owp9CgovKiBjdXN0b21pemUgV29ybGRjYXQgc2VhcmNoIGJveCAqLwoucy1sZy1ib3gtd3JhcHBlci0yNTE5MzY3MSB7CiAgICBmb250LXNpemU6IC44ZW07Cn0KLnMtbGctYm94LXdyYXBwZXItMjUxOTM2NzEgLnMtbGliLWJveC1jb250ZW50IHsKICBwYWRkaW5nOiAwIDFlbTsKfQoKLnMtbGctYm94LXdyYXBwZXItMjUxOTM2NzEgaW5wdXQgewogIHBhZGRpbmc6IC41ZW0gIWltcG9ydGFudDsgCiAgbWluLXdpZHRoOiA1ZW0gIWltcG9ydGFudDsgCn0KLnMtbGctYm94LXdyYXBwZXItMjUxOTM2NzEgI2Rpc2NvdmVyeS1zZWFyY2gtZm9ybSB7CiAgcGFkZGluZzogMWVtOwp9CgovKiBTdHlsaW5nIGZvciBDT1ZJRC0xOSBpbmZvIGJhbm5lciAqLwouYWxlcnQtYmFubmVyIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDFyZW0gYXV0bzsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgcGFkZGluZzogMS42cmVtIDJyZW07CiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDsKICBib3JkZXItdG9wOiA1cHggc29saWQgIzAwMDsKICBjb2xvcjogIzAwMDsKICBmb250LXdlaWdodDogNjAwOwp9Ci5hbGVydC1iYW5uZXIgLmZhIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLXJpZ2h0OiAwLjVlbTsKfQo8L3N0eWxlPgoKPCEtLSBTdHlsaW5nIGZvciBBLVogZGF0YWJhc2VzIC0tPgo8c3R5bGU+Ci8qIEhpZGUgdGhlIERhdGFiYXNlIFR5cGVzIGRyb3Bkb3duICovCiNjb2wtdHlwZXMgewogICAgZGlzcGxheTogbm9uZTsKfQovKiBIaWRlIHRoZSBWZW5kb3JzIGRyb3Bkb3duICovCiNjb2wtdmVuZG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci8qY2hhbmdlIGEgdG8geiBkYXRhYmFzZSB0aXRsZXMgdG8gYmUgbGFyZ2VyICovCiNzLWxnLWF6LXJlc3VsdHMgLnMtbGctYXotcmVzdWx0LXRpdGxlIHsKZm9udC1zaXplOiAxLjFlbTsKfQovKmNoYW5nZSBhIHRvIHogZGF0YWJhc2VzIGFsdGVybmF0aXZlIHRpdGxlIHNpemluZyAqLwpkaXYucy1sZy1hei1yZXN1bHQta2V5d29yZHMgewpmb250LXNpemU6IC45ZW07Cn0KLyogQ2hhbmdlIGxldHRlciBoZWFkaW5nIHNpemVzKi8KaDMucy1sZy1kYi1wYW5lbC10aXRsZSB7CiAgICBtYXJnaW46IDA7CiAgICBmb250LXNpemU6IDEuM2VtOwp9Cjwvc3R5bGU+CjxzY3JpcHQ+CiAgICB2YXIgc3ByaW5nU3RhdHMgPSBzcHJpbmdTdGF0cyB8fCB7fTsKICAgIHNwcmluZ1N0YXRzLnNhQ29uZmlnID0gc3ByaW5nU3RhdHMuc2FDb25maWcgfHwgewogICAgICAgIHNpdGVfaWQ6IDY4LAogICAgICAgIHRyYWNraW5nX3BhcmFtZXRlcnM6IHsiX3N0X2d1aWRlX2lkIjoxNzU4ODgsIl9zdF9wYWdlX2lkIjoxMTU4Njk3LCJfc3Rfc2l0ZV9pZCI6Njh9LAogICAgICAgIHRyYWNraW5nX3NlcnZlcl9ob3N0OiAibGliZ3VpZGVzLXByb2Muc3ByaW5neWF3cy5jb20iCiAgICB9Owo8L3NjcmlwdD4KPHNjcmlwdCAgc3JjPSJodHRwczovL3N0YXRpYy1hc3NldHMtdXMubGliZ3VpZGVzLmNvbS93ZWIvanMvc2EubWluLmpzPzMxMTYiPjwvc2NyaXB0Pgo8c2NyaXB0PgoJCQlzcHJpbmdTcGFjZS5Db21tb24gPSBzcHJpbmdTcGFjZS5Db21tb24gfHwgeyB9OwoJCQlzcHJpbmdTcGFjZS5Db21tb24uY29uc3RhbnQgPSB7CgkJCQkJUFJPQ0VTU0lORzogewoJCQkJCQlBQ1RJT05fRElTUExBWV9QT0xMOiAxNTkKCQkJCQl9CgkJCX07CgkJCXNwcmluZ1NwYWNlLkNvbW1vbi5iYXNlVVJMID0gImh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvIjsKCQkJCgkJCWhhbmRsZVNjcm9sbD1mdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgewoJCQkJCXZhciB0YXJnZXRfZWx0ID0gIiNzLWxnLXBhZ2Utc2VjdGlvbi0xMTU4Njk3IjsKCQkJCQlqUXVlcnkoImh0bWwsIGJvZHkiKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBqUXVlcnkodGFyZ2V0X2VsdCkub2Zmc2V0KCkudG9wIH0sIDc1MCk7CgkJCQkJaWYgKGpRdWVyeSh0aGlzKS5zY3JvbGxUb3AoKSA+IDIyMCkgewoJCQkJCQlqUXVlcnkoIiNzLWxpYi1zY3JvbGwtdG9wIikuZmFkZUluKDc1MCk7CgkJCQkJfQoJCQkJfQoJCQl9CgkgICA8L3NjcmlwdD4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAvLyBFbmFibGUgdG9vbHRpcHMuCiAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHNwcmluZ1NwYWNlLlVJLmluaXRQb3BPdmVycyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCIuYXotYnMtdG9vbHRpcCIpLnRvb2x0aXAoKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfQogICAgICAgICAgICB9KTsKICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tQYWdlKHtfc3RfdHlwZV9pZDogJzEnLF9zdF9ndWlkZV9pZDogJzE3NTg4OCcsX3N0X3BhZ2VfaWQ6ICcxMTU4Njk3J30pOwogICAgICAgIH0pOwogICAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaGFuZGxlU2Nyb2xsKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0PgogICAgPC9oZWFkPgogIDxib2R5IGNsYXNzPSJzLWxnLWd1aWRlLWJvZHkiPgoKPGEgaWQ9InMtbGctcHVibGljLXNraXBsaW5rIiBjbGFzcz0iYWxlcnQtaW5mbyIgaHJlZj0iI3MtbGctZ3VpZGUtbWFpbiI+U2tpcCB0byBNYWluIENvbnRlbnQ8L2E+Cgo8aGVhZGVyIGNsYXNzPSJoZWFkZXItbWFpbiBmbGV4LWNvbnRhaW5lciBmbGV4LWVuZCI+CiAgPGgxIGNsYXNzPSJuYW1lLXNpdGUgZ3JvdXAgbmF2LWxvZ28iPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS8iIGNsYXNzPSJsb2dvLW1pdC1saWIiPjxpbWcgc3JjPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRsaWItd29yZG1hcmsuc3ZnIiBhbHQ9Ik1JVCBMaWJyYXJpZXMgbG9nbyIgaGVpZ2h0PSIzNSI+CiAgICA8L2E+PCEtLSBFbmQgTUlUIExpYnJhcmllcyBMb2dvIC0tPgogIDwvaDE+PCEtLSBFbmQgZGl2Lm5hbWUtc2l0ZSAtLT4KICA8ZGl2IGNsYXNzPSJtZW51LS10b2dnbGUiPjwhLS0gTW9iaWxlIEhhbWJ1cmdlciBpY29uIC0tPgogICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTguOTA5cHgiIGhlaWdodD0iMTMuMDkxcHgiIHZpZXdCb3g9IjIuMTgyIDYuNTQ1IDE4LjkwOSAxMy4wOTEiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMi4xODIgNi41NDUgMTguOTA5IDEzLjA5MSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTIuOTA5LDYuNTQ1aDE3LjQ1NGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE2YzAuMTQ1LDAuMTQ0LDAuMjE2LDAuMzE0LDAuMjE2LDAuNTExcy0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMQogICAgYy0wLjE0NSwwLjE0NC0wLjMxNCwwLjIxNi0wLjUxMiwwLjIxNkgyLjkwOWMtMC4xOTcsMC0wLjM2Ny0wLjA3Mi0wLjUxMS0wLjIxNkMyLjI1NCw3LjYzOSwyLjE4Miw3LjQ2OSwyLjE4Miw3LjI3MgogICAgczAuMDcyLTAuMzY3LDAuMjE2LTAuNTExQzIuNTQyLDYuNjE3LDIuNzEyLDYuNTQ1LDIuOTA5LDYuNTQ1eiBNMjAuMzYzLDEzLjgxOEgyLjkwOWMtMC4xOTcsMC0wLjM2Ny0wLjA3Mi0wLjUxMS0wLjIxNgogICAgcy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMWMwLTAuMTk2LDAuMDcyLTAuMzY3LDAuMjE2LTAuNTExczAuMzE0LTAuMjE2LDAuNTExLTAuMjE2aDE3LjQ1NGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE2CiAgICBzMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFjMCwwLjE5Ny0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMVMyMC41NjEsMTMuODE4LDIwLjM2MywxMy44MTh6IE0yMC4zNjMsMTkuNjM2SDIuOTA5CiAgICBjLTAuMTk3LDAtMC4zNjctMC4wNzEtMC41MTEtMC4yMTZzLTAuMjE2LTAuMzE0LTAuMjE2LTAuNTExczAuMDcyLTAuMzY3LDAuMjE2LTAuNTExYzAuMTQ0LTAuMTQ1LDAuMzE0LTAuMjE3LDAuNTExLTAuMjE3aDE3LjQ1NAogICAgYzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTdjMC4xNDUsMC4xNDQsMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFzLTAuMDcxLDAuMzY2LTAuMjE2LDAuNTExUzIwLjU2MSwxOS42MzYsMjAuMzYzLDE5LjYzNnoiLz4KICAgIDwvc3ZnPgogIDwvZGl2PjwhLS0gZW5kIGhhbWJ1cmdlciBpY29uIC0tPgogIDxuYXYgaWQ9Im5hdi1tYWluIiBjbGFzcz0ibmF2LW1haW4iIGFyaWEtbGFiZWw9IlByaW1hcnkiPgogIDx1bCBjbGFzcz0ibmF2LW1haW4tbGlzdCBmbGV4LWNvbnRhaW5lciI+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtc2VhcmNobWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2giIGNsYXNzPSJuby11bmRlcmxpbmUgc2VhcmNoLWxpbmsgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+U2VhcmNoPC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbnUtY29udHJvbCBzciI+U2VhcmNoIG1lbnU8L2J1dHRvbj4KICAgICAgPC9oMj4KICAgICAgPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LXNlYXJjaG1lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1zZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIGdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+U3RhcnQgaGVyZTwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaCI+U2VhcmNoIHRvb2xzIGhvbWU8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoLWNvbGxlY3Rpb25zIj5TZWFyY2ggT3VyIENvbGxlY3Rpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+Qm9va3MsIGFydGljbGVzLCBhbmQgbW9yZTwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd29ybGRjYXQiPldvcmxkQ2F0PHNwYW4gY2xhc3M9ImFib3V0Ij5Cb29rcyAmYW1wOyBtb3JlIHdvcmxkd2lkZTwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYXoucGhwIj5EYXRhYmFzZXMgQS1aPHNwYW4gY2xhc3M9ImFib3V0Ij5KU1RPUiwgUHViTWVkLCBXZWIgb2YgU2NpZW5jZSwgZXRjLjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoLXJlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPkFsc28gdHJ5PC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZ29vZ2xlLXNjaG9sYXItdGlwcyI+R29vZ2xlIFNjaG9sYXIgZm9yIE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPkNoYW5nZSBzZXR0aW5ncyB0byBnZXQgYmV0dGVyIGFjY2Vzczwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZHNwYWNlIj5EU3BhY2VATUlUIDxzcGFuIGNsYXNzPSJhYm91dCI+TUlUIHJlc2VhcmNoPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kb21lIj5Eb21lIDxzcGFuIGNsYXNzPSJhYm91dCI+TUlULWRpZ2l0aXplZCBpbWFnZXMsIG1hcHMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NpdGUtc2VhcmNoIj5TaXRlIHNlYXJjaDwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2hvdXJzIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPkhvdXJzICZhbXA7IGxvY2F0aW9uczwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPkhvdXJzICZhbXA7IGxvY2F0aW9ucyBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ob3Vyc21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1ob3Vyc21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Mb2NhdGlvbnM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ob3VycyI+SG91cnMgYW5kIGxvY2F0aW9ucyBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2JhcmtlciI+QmFya2VyIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZGV3ZXkiPkRld2V5IExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaGF5ZGVuIj5IYXlkZW4gTGlicmFyeTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yb3RjaCI+Um90Y2ggTGlicmFyeTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kaXN0aW5jdGl2ZS1jb2xsZWN0aW9ucyI+RGlzdGluY3RpdmUgQ29sbGVjdGlvbnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbXVzaWMiPkxld2lzIE11c2ljIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbHNhIj5MaWJyYXJ5IFN0b3JhZ2UgQW5uZXg8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlVzaW5nIHRoZSBMaWJyYXJpZXM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9sb2NhdGlvbnMiPk1hcCBvZiBsb2NhdGlvbnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc3R1ZHkiPlN0dWR5IHNwYWNlczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kaXNhYmlsaXRpZXMiPlBlcnNvbnMgd2l0aCBkaXNhYmlsaXRpZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY29weWluZyI+U2NhbiAmYW1wOyBwcmludDwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9leGhpYml0cyI+RXhoaWJpdHMgJmFtcDsgZ2FsbGVyaWVzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Zpc2l0b3JzIj5WaXNpdG9yczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS91c2UtcG9saWNpZXMiPkxpYnJhcnkgdXNlIHBvbGljeTwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ib3Jyb3ciIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5Cb3Jyb3cgJmFtcDsgcmVxdWVzdCBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ib3Jyb3dtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYm9ycm93bWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBncm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlJlbmV3LCByZXF1ZXN0LCBzdWdnZXN0PC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYm9ycm93Ij5Cb3Jyb3cgJmFtcDsgcmVxdWVzdCBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY291bnRzIj5BY2NvdW50cyBvdmVydmlldyA8c3BhbiBjbGFzcz0iYWJvdXQiPllvdXIgQWNjb3VudCwgSUxMaWFkLCBBZW9uLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2gtY29sbGVjdGlvbnMiPlNlYXJjaCBPdXIgQ29sbGVjdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5SZXF1ZXN0IGl0ZW1zIG93bmVkIGJ5IE1JVDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd29ybGRjYXQiPldvcmxkQ2F0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBub3Qgb3duZWQgYnkgTUlUPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9pbGxpYWQiPklMTGlhZCA8c3BhbiBjbGFzcz0iYWJvdXQiPlRyYWNrIHlvdXIgSW50ZXJsaWJyYXJ5IEJvcnJvd2luZyByZXF1ZXN0czwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc3VnZ2VzdC1wdXJjaGFzZSI+U3VnZ2VzdCBhIHB1cmNoYXNlPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Nb3JlIGluZm9ybWF0aW9uPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVzZXJ2ZXMiPkNvdXJzZSByZXNlcnZlczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ib3Jyb3ctZGlyZWN0Ij5Cb3Jyb3cgRGlyZWN0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBmcm9tIEhhcnZhcmQsIFlhbGUsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L290aGVybGlicmFyaWVzIj5WaXNpdCBub24tTUlUIGxpYnJhcmllcyA8c3BhbiBjbGFzcz0iYWJvdXQiPkhhcnZhcmQsIEJvcnJvdyBEaXJlY3QsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvbGk+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VhcmNoLXN1cHBvcnQiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+UmVzZWFyY2ggc3VwcG9ydDwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPlJlc2VhcmNoIHN1cHBvcnQgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5IZWxwICZhbXA7IHVzZWZ1bCB0b29sczwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VhcmNoLXN1cHBvcnQiPlJlc2VhcmNoIHN1cHBvcnQgaG9tZTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hc2siPkFzayB1cyA8c3BhbiBjbGFzcz0iYWJvdXQiPkVtYWlsLCBjaGF0LCBjYWxsLCBkcm9wIGJ5PC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9leHBlcnRzIj5SZXNlYXJjaCBndWlkZXMgJmFtcDsgZXhwZXJ0IGxpYnJhcmlhbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5Gb3IgZXZlcnkgcmVzZWFyY2ggaW50ZXJlc3Q8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2F1dGhlbnRpY2F0ZSI+QXV0aGVudGljYXRlIHRvIG9ubGluZSByZXNvdXJjZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5UaXBzICZhbXA7IHRyaWNrczwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlB1Ymxpc2hpbmcgJmFtcDsgY29udGVudCBtYW5hZ2VtZW50PC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVmZXJlbmNlcyI+Q2l0YXRpb24gJmFtcDsgd3JpdGluZyB0b29scyA8c3BhbiBjbGFzcz0iYWJvdXQiPk1lbmRlbGV5LCBab3Rlcm8sICZhbXA7IE92ZXJsZWFmPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9jaXRpbmciPkNpdGluZyBzb3VyY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+QXZvaWQgcGxhZ2lhcmlzbSwgZm9ybWF0IHJlZmVyZW5jZXMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2RhdGEtc2VydmljZXMiPkRhdGEgc2VydmljZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5HSVMsIGRhdGEgbWFuYWdlbWVudCwgc3RhdGlzdGljYWwgc3VwcG9ydDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2Nob2xhcmx5Ij5TY2hvbGFybHkgY29tbXVuaWNhdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5PcGVuIGFjY2VzcywgY29weXJpZ2h0LCAmYW1wOyBwdWJsaXNoaW5nPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcGlzIj5BUElzIGZvciBzY2hvbGFybHkgcmVzb3VyY2VzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgogICAgPC9saT48IS0tIGVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KICAgIDxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIj4KICAgICAgPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgogICAgICAgIDxhIGlkPSJtYWluLW5hdi1hYm91dG1lbnUtdGl0bGUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWJvdXQiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBmbGV4LWVuZCI+QWJvdXQ8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5BYm91dCBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1hYm91dG1lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1hYm91dG1lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgcHVzaCBncm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPkFib3V0IHRoZSBMaWJyYXJpZXM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hYm91dC8iPkFib3V0IHVzIGhvbWU8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY29udGFjdCI+Q29udGFjdCB1czwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9qb2JzIj5Kb2JzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2dpdmluZyI+R2l2aW5nIHRvIHRoZSBNSVQgTGlicmFyaWVzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5OZXdzLCBldmVudHMsICZhbXA7IGV4aGliaXRzPC9oMz4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXZlbnRzIj5DbGFzc2VzICZhbXA7IGV2ZW50czwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbmV3cyI+TmV3czwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXhoaWJpdHMiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbmV3cy9pbi10aGUtbWVkaWEiPkluIHRoZSBtZWRpYTwvYT4KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbWl0LXJlYWRzLyI+TUlUIFJlYWRzPC9hPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgogICAgPC9saT48IS0tIGVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KICAgIDxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIHNtYWxsIGNoYXQgcHVzaCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtYXNrdXNtZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FzayIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIj48c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2LjU5M3B4IiBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNi41OTMgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2LjU5MyAxNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTE2LjU5MyA2LjI3OGMwIDEuMDc0LTAuMDc0IDIuMTQ4LTAuMjQxIDMuMTg1IC0wLjIwNCAxLjM1My0xLjcyMiAyLjU3NC0zLjA1NSAyLjcyMiAtMS4zNTMgMC4xMzEtMi42ODYgMC4yMDQtNC4wMiAwLjIyM0w1Ljc0IDE1LjgzM0M1LjYzIDE1Ljk0NCA1LjQ4MSAxNiA1LjMzNCAxNmMtMC4wOTQgMC0wLjE2Ny0wLjAxOS0wLjI0MS0wLjAzN0M0Ljg3MSAxNS44NyA0Ljc0IDE1LjY0NyA0Ljc0IDE1LjQwN1YxMi4zN2MtMC40ODEtMC4wMzYtMC45NjMtMC4wNTUtMS40NDMtMC4xMTEgLTEuMzM0LTAuMTQ4LTIuODUzLTEuNDQzLTMuMDc0LTIuNzk2QzAuMDc0IDguNDI2IDAgNy4zNTIgMCA2LjI5NmMwLTEuMDkyIDAuMDc0LTIuMTg1IDAuMjIzLTMuMjQgMC4yMjItMS4zNTIgMS43NC0yLjY0OCAzLjA3NC0yLjc5N0M0Ljk2MyAwLjA5MyA2LjYzIDAgOC4yOTcgMHMzLjMzMyAwLjA5MyA1IDAuMjU5YzEuMzMzIDAuMTQ5IDIuODUxIDEuNDQ1IDMuMDU1IDIuNzk3QzE2LjUxOSA0LjExMSAxNi41OTMgNS4yMDQgMTYuNTkzIDYuMjc4Ii8+PC9zdmc+PHNwYW4+QXNrIFVzPC9zcGFuPjwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPkFzayB1cyBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1hc2t1c21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1hc2t1c21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgcHVzaCI+CiAgICAgICAgPGRpdiBjbGFzcz0id3JhcC1idXR0b24tY2hhdCI+CiAgICAgICAgPGRpdiBpZD0nbGliY2hhdF9iZTJjNjU0YjYzZGQ0M2YzMWM1NjI5NWVlNWQ3OGQ4OCc+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGEgY2xhc3M9Im1vcmUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXNrIj5Nb3JlIHdheXMgdG8gYXNrIHVzPC9hPgogICAgICA8L2Rpdj4KICAgIDwvbGk+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCBzbWFsbCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY291bnRzIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgYWNjb3VudC1saW5rIj4KICAgICAgICAgIDxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPjxzcGFuPkFjY291bnQ8L3NwYW4+CiAgICAgICAgPC9hPgogICAgICA8L2gyPgogICAgPC9saT4KICA8L3VsPgogIDwvbmF2PgogIDxhIGNsYXNzPSJsaW5rLWxvZ28tbWl0IiBocmVmPSJodHRwOi8vd3d3Lm1pdC5lZHUiPjxpbWcgc3JjPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRfbG9nb19zdGRfcmdiX3doaXRlLnN2ZyIgYWx0PSJNSVQgbG9nbyIgaGVpZ2h0PSIzNSI+PC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoIiBjbGFzcz0ibGluay1zaXRlLXNlYXJjaCBoaWRkZW4tbm9uLW1vYmlsZSI+CiAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTIgMTIiIGFsdD0ic2VhcmNoIiBjbGFzcz0iaWNvbi1zZWFyY2giPjxwYXRoIGQ9Ik03LjI3MyAwLjcyN3ExLjE4NyAwIDIuMTkgMC41ODV0MS41ODggMS41ODggMC41ODUgMi4xOS0wLjU4NSAyLjE5LTEuNTg4IDEuNTg4LTIuMTkgMC41ODVxLTEuMjc4IDAtMi4zMy0wLjY3NmwtMy4yODQgMy4zMDFxLTAuMjk1IDAuMjg0LTAuNjg4IDAuMjg0LTAuNDAzIDAtMC42ODgtMC4yODR0LTAuMjg0LTAuNjg4IDAuMjg0LTAuNjg4bDMuMzAxLTMuMjg0cS0wLjY3Ni0xLjA1MS0wLjY3Ni0yLjMzIDAtMS4xODggMC41ODUtMi4xOXQxLjU4OC0xLjU4OCAyLjE5LTAuNTg1ek03LjI3MyA4cTAuNTkxIDAgMS4xMjgtMC4yM3QwLjkyOS0wLjYyMiAwLjYyMi0wLjkyOSAwLjIzLTEuMTI4LTAuMjMtMS4xMjgtMC42MjItMC45MjktMC45MjktMC42MjItMS4xMjgtMC4yMy0xLjEyOCAwLjIzLTAuOTI5IDAuNjIyLTAuNjIyIDAuOTI5LTAuMjMgMS4xMjggMC4yMyAxLjEyOCAwLjYyMiAwLjkyOSAwLjkyOSAwLjYyMiAxLjEyOCAwLjIzeiI+PC9wYXRoPgogICAgPC9zdmc+CiAgICA8c3BhbiBjbGFzcz0iYm90dG9tIj5TZWFyY2g8L3NwYW4+CiAgPC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWNjb3VudHMiIGNsYXNzPSJsaW5rLWFjY291bnQgaGlkZGVuLW5vbi1tb2JpbGUiPgogICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1LjQiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNS40IDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS40NDUgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJpY29uLWFjY291bnQiPjxwYXRoIGQ9Ik0xMy40IDE1LjdDMTIuMiAxNS45IDEwLjQgMTYgNy43IDE2Yy01LjQgMC03LjMtMC42LTcuMy0wLjYgLTAuMy0wLjEtMC40LTAuNC0wLjQtMC43IDAuMy0xLjYgMS4yLTIuNSAyLjUtMy4zIDAuMy0wLjIgMC44LTAuNCAxLjItMC42IDAuOC0wLjMgMS44LTAuNyAyLTEuM0M1LjggOS4yIDUuNyA4LjYgNS4yIDcuOWMtMS40LTIuMy0xLjctNC4zLTAuOC01LjlDNS4xIDAuNyA2LjQgMCA3LjcgMGMxLjQgMCAyLjYgMC43IDMuMyAyIDAuOSAxLjYgMC43IDMuNi0wLjggNS45QzkuOCA4LjYgOS42IDkuMiA5LjggOS42YzAuMiAwLjYgMS4yIDEgMiAxLjMgMC40IDAuMiAwLjkgMC40IDEuMiAwLjYgMS4yIDAuOCAyLjEgMS42IDIuNSAzLjMgMC4xIDAuMy0wLjEgMC42LTAuNCAwLjdDMTUgMTUuNCAxNC41IDE1LjYgMTMuNCAxNS43Ii8+PC9zdmc+CiAgICA8c3BhbiBjbGFzcz0iYm90dG9tIj5BY2NvdW50PC9zcGFuPgogIDwvYT4KCjwvaGVhZGVyPgoKCjxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyIiBjbGFzcz0iY29udGFpbmVyIHMtbGliLWhlYWRlciBzLWxpYi1zaWRlLWJvcmRlcnMiPgogICAgPG5hdiBpZD0icy1saWItYmMiIGFyaWEtbGFiZWw9ImJyZWFkY3J1bWIiPgogICAgICAgIDxvbCBpZD0icy1saWItYmMtbGlzdCIgY2xhc3M9ImJyZWFkY3J1bWIiPjxsaSBpZD0icy1saWItYmMtY3VzdG9tZXIiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUiPk1JVDwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtc2l0ZSIgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS8iPkxpYkd1aWRlczwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtZ3VpZGUiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvc3RzIj5TY2llbmNlLCBUZWNobm9sb2d5LCAmIFNvY2lldHkgKFNUUyk8L2E+PC9saT48bGkgaWQ9InMtbGliLWJjLXBhZ2UiIGNsYXNzPSJhY3RpdmUgYnJlYWRjcnVtYi1pdGVtIj5TVFMgRGF0YWJhc2VzPC9saT48L29sPgogICAgPC9uYXY+CgogICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItc2VhcmNoIj4KICAgICAgICAgICAgCjxkaXYgaWQ9InMtbGctZ3VpZGUtc2VhcmNoLWJveCI+CiAgICA8Zm9ybSByb2xlPSJzZWFyY2giIGlkPSJzLWxnLWd1aWRlLXNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvc3JjaC5waHAiIG1ldGhvZD0iR0VUIj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSI+CiAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgIHR5cGU9InRleHQiIAogICAgICAgICAgICAgICAgaWQ9InMtbGctZ3VpZGUtc2VhcmNoLXRlcm1zIiAKICAgICAgICAgICAgICAgIG5hbWU9InEiIAogICAgICAgICAgICAgICAgY2xhc3M9ImZvcm0tY29udHJvbCIKICAgICAgICAgICAgICAgIG1heGxlbmd0aD0iMjYwIiAKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggdGhpcyBHdWlkZSI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJzci1vbmx5IiBmb3I9InMtbGctZ3VpZGUtc2VhcmNoLXRlcm1zIj5TZWFyY2ggdGhpcyBHdWlkZTwvbGFiZWw+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZ3VpZGVfaWQiIHZhbHVlPSIxNzU4ODgiPgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnB1dC1ncm91cC1idG4iPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPgogICAgICAgICAgICAgICAgICAgIFNlYXJjaAogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZm9ybT4KPC9kaXY+CgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItaW5mbyI+CiAgICAgICAgPGgxIGlkPSJzLWxnLWd1aWRlLW5hbWUiPlNjaWVuY2UsIFRlY2hub2xvZ3ksICYgU29jaWV0eSAoU1RTKTogU1RTIERhdGFiYXNlczwvaDE+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1kZXNjLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxzcGFuIGlkPSJzLWxnLWd1aWRlLWRlc2NyaXB0aW9uIj5BIGd1aWRlIHRvIGxpYnJhcnkgcmVzZWFyY2ggdG9vbHMgZm9yIHNjaWVuY2UsIHRlY2hub2xvZ3kgJiBzb2NpZXR5Ljwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctdGFicy1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIHBhZC10b3AtbWVkIj4KICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicyIgY2xhc3M9InRhYnMiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ikd1aWRlIFBhZ2VzIj4KICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyBzcGxpdC1idXR0b24tbmF2Ij4KICAgICAgICAgICAgCiAgICAgICAgPC91bD4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicy10aXRsZS1iYXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIj48L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtbWFpbiIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1tYWluIHMtbGliLXNpZGUtYm9yZGVycyIgdGFiaW5kZXg9Ii0xIj4KICAgIAogICAgPGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xMjYiIGNsYXNzPSJjb2wtbWQtMTIiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIHMtbGctYm94LXNwZWNpYWwiPjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItNDExNDM5NyIgY2xhc3M9InMtbGctYm94LXdyYXBwZXItNDExNDM5NyI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTM1MDE1NDktY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMzUwMTU0OSIgY2xhc3M9InMtbGliLWJveCBzLWxpYi1ib3gtc3RkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0icy1saWItYm94LXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICBPbiB0aGlzIFBhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMzUwMTU0OSIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIAoKICAgIDxkaXYgY2xhc3M9IiI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWxpbmstbGlzdC03NDE0NzEyIgogICAgICAgICAgICBjbGFzcz0icy1sZy1saW5rLWxpc3Qgcy1sZy1saW5rLWxpc3QtMiI+Cgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwOTQyNSIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0xNzU4ODgmYW1wO3A9MTE1ODY5NyMyMTY1MDYxIiB0YXJnZXQ9IiIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwOTQyNSYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgUGxhY2VzIHRvIFN0YXJ0CiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwOTQyNiIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0xNzU4ODgmYW1wO3A9MTE1ODY5NyMxMzk4NzQzMiIgdGFyZ2V0PSIiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDk0MjYmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFNlY29uZGFyeSBTb3VyY2VzCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwOTQyOCIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0xNzU4ODgmYW1wO3A9MTE1ODY5NyMxMzk4Nzc5NyIgdGFyZ2V0PSIiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDk0MjgmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEJpb2dyYXBoeQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDk0MjciIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9MTc1ODg4JmFtcDtwPTExNTg2OTcjMTM5ODgwNTgiIHRhcmdldD0iIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA5NDI3JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBFbmN5Y2xvcGVkaWFzICYgRGljdGlvbmFyaWVzCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwOTQyOSIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz0xNzU4ODgmYW1wO3A9MTE1ODY5NyMxMzk4NzU2NCIgdGFyZ2V0PSIiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDk0MjkmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFByaW1hcnkgU291cmNlcwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKICAgICAgICA8L3VsPgoKICAgICAgICAKICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJvdyBzLWxnLXJvdyI+PGRpdiBpZD0icy1sZy1jb2wtMSIgY2xhc3M9ImNvbC1tZC05Ij48ZGl2IGNsYXNzPSJzLWxnLWNvbC1ib3hlcyI+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci00MTE0Mzk5IiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci00MTE0Mzk5Ij4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMzQ5NTg1OS1jb250YWluZXIiIGNsYXNzPSJzLWxpYi1ib3gtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNDk1ODU5IiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIFBsYWNlcyB0byBTdGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0zNDk1ODU5IiA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzLWxpYi1ib3gtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1jb250ZW50LTY1OTM2MzMiIGNsYXNzPSIgIGNsZWFyZml4Ij4KICAgIDxzdHlsZT4KCiNsaW5rMTAzNjcxNDMsICNsaW5rMTAzNjcxNjUsICNsaW5rMTAzNjczMTAsICNsaW5rMTAzNjc0NjIsICNsaW5rMTAzNjc0OTcgewpsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cm1hcmdpbi1sZWZ0Oi04cHg7Cgpmb250LXNpemU6IDExcHg7CmZvbnQtd2VpZ2h0OiBib2xkOwp9Cgo8L3N0eWxlPgoKICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IiI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWxpbmstbGlzdC03NDA4MjU3IgogICAgICAgICAgICBjbGFzcz0icy1sZy1saW5rLWxpc3Qgcy1sZy1saW5rLWxpc3QtMiI+Cgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwNTI1NSIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2FtZXJpY2EiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA1MjU1JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBBbWVyaWNhOiBIaXN0b3J5IGFuZCBMaWZlCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA1MjU1IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBLZXkgcmVzb3VyY2UgY292ZXJzIFVTICYgQ2FuYWRpYW4gaGlzdG9yeSwgcHJlaGlzdG9yeS1wcmVzZW50LiBJbmRleGVzIGFydGljbGVzLCBib29rIHJldmlld3MsIGVzc2F5IGNvbGxlY3Rpb25zLCBkaXNzZXJ0YXRpb25zLCBtZWRpYS4gV2l0aCBhYnN0cmFjdHMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA1MjU2IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYW50aHJvLXBsdXMiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA1MjU2JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBBbnRocm9wb2xvZ3kgUGx1cwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwNTI1NiIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgSW5kZXhlcyBhcnRpY2xlcywgcmVwb3J0cywgZWRpdGVkIHdvcmtzLCBhbmQgb3RoZXIgcHVibGljYXRpb25zIGluIEFudGhyb3BvbG9neSBhbmQgcmVsYXRlZCBmaWVsZHMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA1MjU3IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvaGlzdC1hYnMiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA1MjU3JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBIaXN0b3JpY2FsIEFic3RyYWN0cwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwNTI1NyIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgUmVzb3VyY2UgY292ZXJzIHdvcmxkIGhpc3RvcnkgKGV4Y2x1ZGluZyBVUyAmIENhbmFkYSksIDE0NTAtcHJlc2VudC4gSW5kZXhlcyBhcnRpY2xlcywgYm9va3MsIGVzc2F5IGNvbGxlY3Rpb25zLCBkaXNzZXJ0YXRpb25zLCBtZWRpYS4gV2l0aCBhYnN0cmFjdHMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA1MjU4IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvaGlzdC1zY2l0ZWNoIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwNTI1OCYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgSGlzdG9yeSBvZiBTY2llbmNlLCBUZWNobm9sb2d5LCBhbmQgTWVkaWNpbmUKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDUyNTgiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIEluZGV4ZXMgam91cm5hbCBhcnRpY2xlcywgY29uZmVyZW5jZSBwcm9jZWVkaW5ncywgYm9va3MsIHJldmlld3MsIGRpc3NlcnRhdGlvbnMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCiAgICAgICAgPC91bD4KCiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTQxMTQ0MDMiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTQxMTQ0MDMiPgoKCiAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNTAwOTc4LWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTM1MDA5NzgiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBTb3VyY2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTM1MDA5NzgiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjU5NzI3MiIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPHN0eWxlPgoKI2xpbmsxMDM2NzE0MywgI2xpbmsxMDM2NzE2NSwgI2xpbmsxMDM2NzMxMCwgI2xpbmsxMDM2NzQ2MiwgI2xpbmsxMDM2NzQ5NyB7Cmxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKbWFyZ2luLWxlZnQ6LThweDsKCmZvbnQtc2l6ZTogMTFweDsKZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCjwvc3R5bGU+CgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iIj4KICAgICAgICA8dWwgaWQ9InMtbGctbGluay1saXN0LTc0MTYwMjciCiAgICAgICAgICAgIGNsYXNzPSJzLWxnLWxpbmstbGlzdCBzLWxnLWxpbmstbGlzdC0yIj4KCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjEwMDg3IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbWl0LnByaW1vLmV4bGlicmlzZ3JvdXAuY29tL3Blcm1hbGluay8wMU1JVF9JTlNUL2VqZGNrai9hbG1hOTkwMDIxODU0OTEwMTA2NzYxIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYxMDA4NyYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQWdyaWNvbGEKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MTAwODciIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIENvbXByZWhlbnNpdmUgc291cmNlIG9mIFUuUy4gYWdyaWN1bHR1cmFsIGFuZCBsaWZlIHNjaWVuY2VzIGluZm9ybWF0aW9uIGFuZCBhbGxpZWQgZGlzY2lwbGluZXMsIGluY2x1ZGluZyBhbmltYWwgYW5kIHZldGVyaW5hcnkgc2NpZW5jZXMsIGVudG9tb2xvZ3ksIHBsYW50IHNjaWVuY2VzLCBmb3Jlc3RyeSwgYXF1YWN1bHR1cmUgYW5kIGZpc2hlcmllcywgZmFybWluZyBhbmQgZmFybWluZyBzeXN0ZW1zLCBhZ3JpY3VsdHVyYWwgZWNvbm9taWNzLCBleHRlbnNpb24gYW5kIGVkdWNhdGlvbiwgZm9vZCBhbmQgaHVtYW4gbnV0cml0aW9uLCBhZ3JpY3VsdHVyYWwgZW5naW5lZXJpbmcgYW5kIHRlY2hub2xvZ3ksIGFuZCBlYXJ0aCBhbmQgZW52aXJvbm1lbnRhbCBzY2llbmNlcy48YnIgLz4NCjE5NzAtcHJlc2VudAogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYxMDA4NSIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL21pdC5wcmltby5leGxpYnJpc2dyb3VwLmNvbS9wZXJtYWxpbmsvMDFNSVRfSU5TVC9zamQ5ZmsvY2RpX3Byb3F1ZXN0X3JlcG9ydHNfMTQ5MTQ0NTA2NyIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MTAwODUmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEFpciAmIFNwYWNlIE1hZ2F6aW5lIEFyY2hpdmUKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MTAwODUiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIHYuMTpuby4xICgxOTg2OkFwci4pIC0gdi4yNTpuby42ICgyMDEwOkRlYy4vMjAxMTpKYW4uKQogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYxMDA4NiIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2FzdHMiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjEwMDg2JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBBcHBsaWVkIFNjaWVuY2UgJiBUZWNobm9sb2d5IFNvdXJjZQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYxMDA4NiIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgU2VhcmNoIGpvdXJuYWxzLCB0cmFkZSBtYWdhemluZXMsIGNvbmZlcmVuY2UgcHJvY2VlZGluZ3MsIGFuZCBtb3JlIHNwZWNpYWxpemVkIHB1YmxpY2F0aW9ucy4gIEluY2x1ZGVzIHNvbWUgZnVsbC10ZXh0IGpvdXJuYWxzLjxici8+SW5kZXhpbmcgZ29lcyBiYWNrIHRvIDE5MTM7IGluY2x1ZGVzIHRoZSBJbmR1c3RyaWFsIEFydHMgSW5kZXgsIDE5MTMtNTcuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjAyNjI5IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZGFyd2luIiB0YXJnZXQ9IiIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwMjYyOSYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQ29tcGxldGUgV29yayBvZiBDaGFybGVzIERhcndpbgogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwMjYyOSIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgQ29tcGxldGUgcHVibGljYXRpb25zOyAyMCwwMDAgcHJpdmF0ZSBwYXBlcnM7IGJpYmxpb2dyYXBoeSBhbmQgbWFudXNjcmlwdCBjYXRhbG9nOyBwbHVzIHNwZWNpbWVucywgYmlvZ3JhcGhpZXMsIG9iaXR1YXJpZXMsIHJldmlld3MsIHJlZmVyZW5jZSB3b3Jrcy4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNTkiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvMW50c21raC9hbG1hOTkzNTExNzA2OTMwNjc2MSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNTkmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIERpZ2l0YWwgTmF0aW9uYWwgU2VjdXJpdHkgQXJjaGl2ZQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM1OSIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgVGhlIERpZ2l0YWwgTmF0aW9uYWwgU2VjdXJpdHkgQXJjaGl2ZSBpcyBhIGNvbGxlY3Rpb24gb2YgcHJpbWFyeSBkb2N1bWVudHMgY2VudHJhbCB0byBVUyBmb3JlaWduIGFuZCBtaWxpdGFyeSBwb2xpY3kgc2luY2UgMTk0NS4gTW9yZSB0aGFuIDM1LDAwMCBkZWNsYXNzaWZpZWQgZG9jdW1lbnRzIC0gdG90YWxsaW5nIG1vcmUgdGhhbiAyMDAsMDAwIHBhZ2VzIC0gaGF2ZSBiZWVuIGdhdGhlcmVkIHRocm91Z2ggdXNlIG9mIHRoZSBVUyBGcmVlZG9tIG9mIEluZm9ybWF0aW9uIEFjdCAoRk9JQSkuIDE5NDUgLSBwcmVzZW50LgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgogICAgICAgIDwvdWw+CgogICAgICAgIAogICAgPC9kaXY+CgoKICAgIDxkaXYgY2xhc3M9IiI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWxpbmstbGlzdC03MTQ1NzU5MiIKICAgICAgICAgICAgY2xhc3M9InMtbGctbGluay1saXN0IHMtbGctbGluay1saXN0LTEwIj4KCjxsaSBjbGFzcz0iIj4KICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NTI1NzkzMyIgY2xhc3M9IiI+CgogICAgCgogICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9lZWJvIiAgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJzE2Jyxfc3RfY29udGVudF9pZDogJzY1MjU3OTMzJyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgIEVhcmx5IEVuZ2xpc2ggQm9va3MgT25saW5lIChFRUJPKQogICAgPC9hPiAKCiAgICAKCiAgICAKICAgIAoKICAgIAogICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWRhdGFiYXNlLWRlc2MtNjUyNTc5MzMiIGNsYXNzPSJzLWxnLWRhdGFiYXNlLWRlc2MiPgogICAgICAgICAgICA8cD48c3Ryb25nPkNvdmVyYWdlOjwvc3Ryb25nPiAxNDcwIC0gMTcwMDxiciAvPg0KUGFnZSBpbWFnZXMgb2YgYWxtb3N0IGV2ZXJ5IHdvcmsgcHJpbnRlZCBpbiB0aGUgQnJpdGlzaCBJc2xlcyBhbmQgTm9ydGggQW1lcmljYSwgYXMgd2VsbCBhcyB3b3JrcyBpbiBFbmdsaXNoIHByaW50ZWQgZWxzZXdoZXJlLiBUZXh0cyBtYXkgYWxzbyBiZSBzZWFyY2hlZCBvbiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9xdW9kLmxpYi51bWljaC5lZHUvZS9lZWJvZ3JvdXAvIiB0YXJnZXQ9ImJsYW5rIj5Vbml2ZXJzaXR5IG9mIE1pY2hpZ2FuIERpZ2l0YWwgQ29sbGVjdGlvbnMgc2l0ZTwvYT4uPC9wPgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjUyNTg4MTkiIGNsYXNzPSIiPgoKICAgIAoKICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZm9vZCIgIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICcxNicsX3N0X2NvbnRlbnRfaWQ6ICc2NTI1ODgxOScsX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICBGb29kIFN0dWRpZXMgT25saW5lCiAgICA8L2E+IAoKICAgIAoKICAgIAogICAgCgogICAgCiAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctZGF0YWJhc2UtZGVzYy02NTI1ODgxOSIgY2xhc3M9InMtbGctZGF0YWJhc2UtZGVzYyI+CiAgICAgICAgICAgIDxwPjxzdHJvbmc+Q292ZXJhZ2U6PC9zdHJvbmc+IDE3MDYgLSAyMDE2PGJyPlByaW1hcnkgc291cmNlcyBjb3ZlcmluZyB0aGUgdG9waWMgb2YgZm9vZCBmcm9tIHNvY2lhbCwgaGlzdG9yaWNhbCwgZWNvbm9taWMsIGN1bHR1cmFsLCByZWxpZ2lvdXMsIGFuZCBwb2xpdGljYWwgcGVyc3BlY3RpdmVzLiBJbmNsdWRlcyBhcmNoaXZhbCBjb250ZW50LCBhZHZlcnRpc2VtZW50cyBhbmQgb3RoZXIgdmlzdWFsIGVwaGVtZXJhLCB0ZXh0LCBhbmQgdmlkZW8uPC9wPgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgogICAgICAgIDwvdWw+CgogICAgICAgIAogICAgPC9kaXY+CgoKICAgIDxkaXYgY2xhc3M9IiI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWxpbmstbGlzdC03NDEzMDIzIgogICAgICAgICAgICBjbGFzcz0icy1sZy1saW5rLWxpc3Qgcy1sZy1saW5rLWxpc3QtMiI+Cgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM2MCIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL21pdC5wcmltby5leGxpYnJpc2dyb3VwLmNvbS9wZXJtYWxpbmsvMDFNSVRfSU5TVC8xbnRzbWtoL2FsbWE5OTAwMDI5NDE3MDAxMDY3NjEiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzYwJiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBOYXR1cmUgQXJjaGl2ZSAoMTg2OS0xOTQ5KQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNjEiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvMW50c21raC9hbG1hOTkwMDAyOTQyMDIwMTA2NzYxIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM2MSYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgTmV3IEVuZ2xhbmQgSm91cm5hbCBvZiBNZWRpY2luZSBBcmNoaXZlICgxODEyLTE5ODkpCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM2MyIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L3NjaXBlciIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNjMmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFNjaWVuY2UgaW4gdGhlIE5pbmV0ZWVudGgtQ2VudHVyeSBQZXJpb2RpY2FsCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA4MzYzIiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBBbiBpbmRleCB0byB0aGUgc2NpZW5jZSBjb250ZW50IGluIHNldmVyYWwgMTl0aC1jZW50dXJ5IEJyaXRpc2ggZ2VuZXJhbCBwZXJpb2RpY2Fscy4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDk0MzAiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvMW50c21raC9hbG1hOTkwMDAyOTQ5NzMwMTA2NzYxIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwOTQzMCYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgU2NpZW50aWZpYyBBbWVyaWNhbiBBcmNoaXZlLCAxODQ1LXByZXNlbnQKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA5NDM0IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9nby5nYWxlZ3JvdXAuY29tL3BzL2kuZG8/aWQ9R0FMRXw5NzgwMzEzMzUzNzcyJmFtcDt2PTIuMSZhbXA7dT1jYW1iMjcwMDImYW1wO2l0PWV0b2MmYW1wO3A9R1ZSTCZhbXA7c3c9dyIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDk0MzQmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFN1YnN0YW5jZSBBYnVzZSBpbiBBbWVyaWNhOiAgQSBEb2N1bWVudGFyeSBhbmQgUmVmZXJlbmNlIEd1aWRlCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA5NDM0IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBJbmNsdWRlcyBwcmltYXJ5IHNvdXJjZSBtYXRlcmlhbCBkb2N1bWVudGluZyBkcnVnIHVzZSBhbmQgZHJ1ZyBwb2xpY3ksIHN1Y2ggYXMgbWFnYXppbmUgYXJ0aWNsZXMsIGFkcywgYW5kIGxlZ2lzbGF0aW9uLiAgRG9jdW1lbnRzIGFyZSBhY2NvbXBhbmllZCBieSBhbmFseXNpcyB0aGF0IHByb3ZpZGUgYmFja2dyb3VuZCBhbmQgY29udGV4dC4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKICAgICAgICA8L3VsPgoKICAgICAgICAKICAgIDwvZGl2PgoKCiAgICA8ZGl2IGNsYXNzPSIiPgogICAgICAgIDx1bCBpZD0icy1sZy1saW5rLWxpc3QtNzE0NTc2MTkiCiAgICAgICAgICAgIGNsYXNzPSJzLWxnLWxpbmstbGlzdCBzLWxnLWxpbmstbGlzdC0xMCI+Cgo8bGkgY2xhc3M9IiI+CiAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjUyNTg2NzciIGNsYXNzPSIiPgoKICAgIAoKICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvdHJhZGVsaXQiICBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAnMTYnLF9zdF9jb250ZW50X2lkOiAnNjUyNTg2NzcnLF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgU21pdGhzb25pYW4gQ29sbGVjdGlvbnMgT25saW5lLiBUcmFkZSBMaXRlcmF0dXJlIGFuZCB0aGUgTWVyY2hhbmRpc2luZyBvZiBJbmR1c3RyeQogICAgPC9hPiAKCiAgICAKCiAgICAKICAgIAoKICAgIAogICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWRhdGFiYXNlLWRlc2MtNjUyNTg2NzciIGNsYXNzPSJzLWxnLWRhdGFiYXNlLWRlc2MiPgogICAgICAgICAgICA8cD48c3Ryb25nPkNvdmVyYWdlOjwvc3Ryb25nPiAxODIwIC0gMTkyNjxicj5DYXRhbG9ncywgcGFtcGhsZXRzLCBhZHZlcnRpc2luZyBtYXRlcmlhbHMsIGFuZCBlcGhlbWVyYSBvbiBlc3NlbnRpYWwgaW5kdXN0cmllcyB0aGF0IGVtZXJnZWQgaW4gdGhlIG5pbmV0ZWVudGggYW5kIGVhcmx5IHR3ZW50aWV0aCBjZW50dXJpZXMuPC9wPgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjUyNTg3MjUiIGNsYXNzPSIiPgoKICAgIAoKICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZmxpZ2h0IiAgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJzE2Jyxfc3RfY29udGVudF9pZDogJzY1MjU4NzI1Jyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgIFNtaXRoc29uaWFuIENvbGxlY3Rpb25zIE9ubGluZTogRXZvbHV0aW9uIG9mIEZsaWdodCwgMTc4NC0xOTkxCiAgICA8L2E+IAoKICAgIAoKICAgIAogICAgCgogICAgCiAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctZGF0YWJhc2UtZGVzYy02NTI1ODcyNSIgY2xhc3M9InMtbGctZGF0YWJhc2UtZGVzYyI+CiAgICAgICAgICAgIDxwPjxzdHJvbmc+Q292ZXJhZ2U6PC9zdHJvbmc+IDE3ODQgLSAxOTkxPGJyIC8+DQpQcmltYXJ5IHNvdXJjZXMgZG9jdW1lbnRpbmcgdGhlIGhpc3Rvcnkgb2YgZmxpZ2h0LiBJbmNsdWRlcyBpbWFnZXMsIGRpYXJpZXMsIGNvcnJlc3BvbmRlbmNlLCBzY3JhcGJvb2tzLCBhbmQgZ292ZXJubWVudCBkb2N1bWVudHMgaGVsZCBieSB0aGUgTmF0aW9uYWwgQWlyIGFuZCBTcGFjZSBNdXNldW0gQXJjaGl2ZXMsIE5hdGlvbmFsIEFpciBhbmQgU3BhY2UgTXVzZXVtIExpYnJhcnksIFNtaXRoc29uaWFuIEFyY2hpdmVzLCBhbmQgU21pdGhzb25pYW4gTGlicmFyaWVzLjwvcD4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgPGRpdiBpZD0icy1sZy1jb250ZW50LTY1MjU4Njc2IiBjbGFzcz0iIj4KCiAgICAKCiAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L3dvcmxkc2ZhaXJzIiAgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJzE2Jyxfc3RfY29udGVudF9pZDogJzY1MjU4Njc2Jyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgIFNtaXRoc29uaWFuIENvbGxlY3Rpb25zIE9ubGluZTogV29ybGQncyBGYWlycyBhbmQgRXhwb3NpdGlvbnMKICAgIDwvYT4gCgogICAgCgogICAgCiAgICAKCiAgICAKICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1kYXRhYmFzZS1kZXNjLTY1MjU4Njc2IiBjbGFzcz0icy1sZy1kYXRhYmFzZS1kZXNjIj4KICAgICAgICAgICAgPHA+PHN0cm9uZz5Db3ZlcmFnZTo8L3N0cm9uZz4gMTg0MCAtIDE5MjM8YnIgLz4NCkluY2x1ZGVzIHByaW1hcnkgc291cmNlIGRvY3VtZW50cyBjb3ZlcmluZyBsYW5kbWFyayBleGhpYml0cy48L3A+CiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NTI1Nzk3NyIgY2xhc3M9IiI+CgogICAgCgogICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9wYXN0bWFzdGVycyIgIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICcxNicsX3N0X2NvbnRlbnRfaWQ6ICc2NTI1Nzk3NycsX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICBQYXN0IE1hc3RlcnMKICAgIDwvYT4gCgogICAgCgogICAgCiAgICAKCiAgICAKICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1kYXRhYmFzZS1kZXNjLTY1MjU3OTc3IiBjbGFzcz0icy1sZy1kYXRhYmFzZS1kZXNjIj4KICAgICAgICAgICAgPHA+RnVsbC10ZXh0IGNvbGxlY3Rpb25zIG9mIHBoaWxvc29waGljYWwgYW5kIGhpc3RvcmljYWwgc2NpZW50aWZpYyBib29rcy48L3A+CiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCiAgICAgICAgPC91bD4KCiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTQxMTQ0MDAiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTQxMTQ0MDAiPgoKCiAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNTAwOTc3LWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTM1MDA5NzciIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgU2Vjb25kYXJ5IFNvdXJjZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMzUwMDk3NyIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NTk3MjcxIiBjbGFzcz0iICBjbGVhcmZpeCI+CiAgICA8c3R5bGU+CgojbGluazEwMzY3MTQzLCAjbGluazEwMzY3MTY1LCAjbGluazEwMzY3MzEwLCAjbGluazEwMzY3NDYyLCAjbGluazEwMzY3NDk3IHsKbGlzdC1zdHlsZS10eXBlOiBub25lOwptYXJnaW4tbGVmdDotOHB4OwoKZm9udC1zaXplOiAxMXB4Owpmb250LXdlaWdodDogYm9sZDsKfQoKPC9zdHlsZT4KCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSIiPgogICAgICAgIDx1bCBpZD0icy1sZy1saW5rLWxpc3QtNzQxMzA1MCIKICAgICAgICAgICAgY2xhc3M9InMtbGctbGluay1saXN0IHMtbGctbGluay1saXN0LTIiPgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDUyNTgiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9oaXN0LXNjaXRlY2giIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA1MjU4JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBIaXN0b3J5IG9mIFNjaWVuY2UsIFRlY2hub2xvZ3ksIGFuZCBNZWRpY2luZQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwNTI1OCIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgSW5kZXhlcyBqb3VybmFsIGFydGljbGVzLCBjb25mZXJlbmNlIHByb2NlZWRpbmdzLCBib29rcywgcmV2aWV3cywgZGlzc2VydGF0aW9ucy4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzODUiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvZWpkY2tqL2FsbWE5OTAwMDkyMzMxOTAxMDY3NjEiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4Mzg1JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBKU1RPUgogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM4NSIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgQSBmdWxsLXRleHQgc2Nob2xhcmx5IGpvdXJuYWwgYXJjaGl2ZSwgYmFjayB0byB2b2wuIDEsIGlzc3VlIDEsIGluIG1hbnkgZmllbGRzLiBDdXJyZW50IHllYXJzIGFyZSBleGNsdWRlZCBmb3IgbW9zdCBqb3VybmFscy4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNTIiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9kaXNzZXJ0YXRpb25zIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM1MiYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgUHJvUXVlc3QgRGlzc2VydGF0aW9ucyBhbmQgVGhlc2VzIChGdWxsIFRleHQpCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA4MzUyIiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBJbmRleGluZyBhbmQgYWJzdHJhY3Rpbmcgb2YgZGlzc2VydGF0aW9ucyBhbmQgdGhlc2VzIDE4NjEtcHJlc2VudC4gRnVsbCB0ZXh0IGZvciBtb3N0IGRpc3NlcnRhdGlvbnMgMTk5Ny1wcmVzZW50IGFuZCBzZWxlY3RpdmUgZnVsbC10ZXh0IGZvciBlYXJsaWVyIGRpc3NlcnRhdGlvbnMuIENvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb2YgTm9ydGggQW1lcmljYW4gdW5pdmVyc2l0aWVzIGFuZCBzZWxlY3RpdmUgY292ZXJhZ2Ugd29ybGR3aWRlLgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM1NiIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL21pdC5wcmltby5leGxpYnJpc2dyb3VwLmNvbS9wZXJtYWxpbmsvMDFNSVRfSU5TVC9lamRja2ovYWxtYTk5MDAwMjk1MDY3MDEwNjc2MSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNTYmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFNvY2lvbG9naWNhbCBBYnN0cmFjdHMKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNTYiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBiaWJsaW9ncmFwaGljIHRvb2wgZm9yIHNvY2lvbG9neSBhbmQgcmVsYXRlZCBkaXNjaXBsaW5lcy4gUHJvdmlkZXMgYWJzdHJhY3RzIGFuZCBpbmRleGluZyBvZiBqb3VybmFsIGFydGljbGVzLCBjaXRhdGlvbnMgdG8gYm9vayByZXZpZXdzLCBhYnN0cmFjdHMgb2YgYm9va3MsIGJvb2sgY2hhcHRlcnMsIGRpc3NlcnRhdGlvbnMsIGFuZCBjb25mZXJlbmNlIHBhcGVycy4gMTk1MiAtIHByZXNlbnQuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzU3IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvd2Vib2ZzY2kiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzU3JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBXZWIgb2YgU2NpZW5jZSBbSVNJIFdlYiBvZiBLbm93bGVkZ2VdCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIDxkaXYgY2xhc3M9InMtbGctaWNvbnMgcGFkLWxlZnQtc20iPjx1bCBjbGFzcz0iIj48bGk+PGEgaHJlZj0iaHR0cDovL3RlY2h0di5taXQuZWR1L3ZpZGVvcy8yNjk4LXNwYW4tY2xhc3NoaWdobGlnaHR3ZWJzcGFuLXNwYW4tY2xhc3NoaWdobGlnaHRvZnNwYW4tc2NpZW5jZSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgbG9hZGluZz0ibGF6eSIgYWx0PSJQbGF5IHRoZSB2aWRlbyIgY2xhc3M9InMtbGctaWNvbiIgc3JjPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L3NpdGVzLzY4L2ljb25zLzU5NTYvcGxheV9hcnJvdy5qcGciLz48aSBjbGFzcz0iZmEgZmEtZncgZmEtZXh0ZXJuYWwtbGluayIgdGl0bGU9IlRoaXMgbGluayBvcGVucyBpbiBhIG5ldyB3aW5kb3ciPjxzcGFuIGNsYXNzPSJzci1vbmx5Ij5UaGlzIGxpbmsgb3BlbnMgaW4gYSBuZXcgd2luZG93PC9zcGFuPjwvaT48L2E+IDwvbGk+PC91bD48L2Rpdj4KICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM1NyIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgSW5kZXhlcyBoaWdoLWltcGFjdCBzY2llbmNlLCBzb2NpYWwgc2NpZW5jZSwgZW5naW5lZXJpbmcsIGFydCAmIGh1bWFuaXRpZXMgcmVzZWFyY2ggam91cm5hbHMsIDE4OTktcHJlc2VudC4gQWxzbyBpbmNsdWRlcyBib29rcyBhbmQgYm9vayBjaGFwdGVycyAoMjAwNS1wcmVzZW50KSBhbmQgY29uZmVyZW5jZSBwcm9jZWVkaW5ncyAoMTk5MC1wcmVzZW50KS4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNTgiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS93b3JsZGNhdCIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNTgmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFdvcmxkQ2F0CiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA4MzU4IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBGaW5kIG92ZXIgNDMgbWlsbGlvbiByZWNvcmRzIG9mIGFueSB0eXBlIG9mIG1hdGVyaWFsIChib29rcywgam91cm5hbHMsIGV0Yy4pIGhlbGQgYnkgbGlicmFyaWVzIGFsbCBvdmVyIHRoZSBVUyBhbmQgdGhlIHdvcmxkLiAiQ2xhc3NpYyIgaW50ZXJmYWNlIGFsbG93cyBmb3IgbW9yZSBhZHZhbmNlZCBzZWFyY2hpbmcgb3B0aW9ucyB0aGFuIHRoZSAiTUlUJ3MgV29ybGRjYXQiIGludGVyZmFjZS4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKICAgICAgICA8L3VsPgoKICAgICAgICAKICAgIDwvZGl2PgoKCiAgICA8ZGl2IGNsYXNzPSIiPgogICAgICAgIDx1bCBpZD0icy1sZy1saW5rLWxpc3QtNzE0NTc2NjEiCiAgICAgICAgICAgIGNsYXNzPSJzLWxnLWxpbmstbGlzdCBzLWxnLWxpbmstbGlzdC0xMCI+Cgo8bGkgY2xhc3M9IiI+CiAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjUyNTgwMzUiIGNsYXNzPSIiPgoKICAgIAoKICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvaHNzLXJldHJvIiAgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJzE2Jyxfc3RfY29udGVudF9pZDogJzY1MjU4MDM1Jyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgIEh1bWFuaXRpZXMgYW5kIFNvY2lhbCBTY2llbmNlcyBJbmRleCBSZXRyb3NwZWN0aXZlCiAgICA8L2E+IAoKICAgIAoKICAgIAogICAgCgogICAgCiAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctZGF0YWJhc2UtZGVzYy02NTI1ODAzNSIgY2xhc3M9InMtbGctZGF0YWJhc2UtZGVzYyI+CiAgICAgICAgICAgIDxwPjxzdHJvbmc+Q292ZXJhZ2U6PC9zdHJvbmc+IDE5MDcgLSAxOTg0PGJyIC8+DQpJbmRleGVzIGpvdXJuYWxzIGluIHRoZSBodW1hbml0aWVzIGFuZCBzb2NpYWwgc2NpZW5jZXMuPC9wPgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjUyNTgxNjIiIGNsYXNzPSIiPgoKICAgIAoKICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYW1lcmljYSIgIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICcxNicsX3N0X2NvbnRlbnRfaWQ6ICc2NTI1ODE2MicsX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICBBbWVyaWNhOiBIaXN0b3J5IGFuZCBMaWZlCiAgICA8L2E+IAoKICAgIAoKICAgIAogICAgCgogICAgCiAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctZGF0YWJhc2UtZGVzYy02NTI1ODE2MiIgY2xhc3M9InMtbGctZGF0YWJhc2UtZGVzYyI+CiAgICAgICAgICAgIDxwPktleSByZXNvdXJjZSBjb3ZlcmluZyBVUyAmYW1wOyBDYW5hZGlhbiBoaXN0b3J5LCBwcmVoaXN0b3J5LXByZXNlbnQuIEluZGV4ZXMgYXJ0aWNsZXMsIGJvb2sgcmV2aWV3cywgZXNzYXkgY29sbGVjdGlvbnMsIGRpc3NlcnRhdGlvbnMsIG1lZGlhLiBXaXRoIGFic3RyYWN0cy4gPHN0cm9uZz5NYXhpbXVtIHNpbXVsdGFuZW91cyB1c2VyczogNi48L3N0cm9uZz48L3A+CiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIDxkaXYgaWQ9InMtbGctY29udGVudC02NTI1ODQ5NiIgY2xhc3M9IiI+CgogICAgCgogICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9hbnRocm8tcGx1cyIgIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICcxNicsX3N0X2NvbnRlbnRfaWQ6ICc2NTI1ODQ5NicsX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICBBbnRocm9wb2xvZ3kgUGx1cwogICAgPC9hPiAKCiAgICAKCiAgICAKICAgIAoKICAgIAogICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWRhdGFiYXNlLWRlc2MtNjUyNTg0OTYiIGNsYXNzPSJzLWxnLWRhdGFiYXNlLWRlc2MiPgogICAgICAgICAgICA8cD5JbmRleGVzIGFydGljbGVzLCByZXBvcnRzLCBlZGl0ZWQgd29ya3MsIGFuZCBvdGhlciBwdWJsaWNhdGlvbnMgaW4gQW50aHJvcG9sb2d5IGFuZCByZWxhdGVkIGZpZWxkcy5Db21iaW5lcyB0aGUgQW50aHJvcG9sb2dpY2FsIExpdGVyYXR1cmUgZGF0YWJhc2UgKGZyb20gSGFydmFyZCBVbml2ZXJzaXR5KSBhbmQgQW50aHJvcG9sb2dpY2FsIEluZGV4IChmcm9tIHRoZSBVSydzIFJveWFsIEFudGhyb3BvbG9naWNhbCBJbnN0aXR1dGUpLjwvcD4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgPGRpdiBpZD0icy1sZy1jb250ZW50LTY1MjU4MTI0IiBjbGFzcz0iIj4KCiAgICAKCiAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2Etc291cmNlIiAgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJzE2Jyxfc3RfY29udGVudF9pZDogJzY1MjU4MTI0Jyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgIEFudGhyb1NvdXJjZQogICAgPC9hPiAKCiAgICAKCiAgICAKICAgIAoKICAgIAogICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWRhdGFiYXNlLWRlc2MtNjUyNTgxMjQiIGNsYXNzPSJzLWxnLWRhdGFiYXNlLWRlc2MiPgogICAgICAgICAgICA8cD5Db250YWlucyBmdWxsIHRleHQgb2YgdGhlIHB1YmxpY2F0aW9ucyBvZiB0aGUgQW1lcmljYW4gQW50aHJvcG9sb2dpY2FsIEFzc29jaWF0aW9uLiBJbmNsdWRlcyBjdXJyZW50IGlzc3VlcyBvZiB0aGUgQUFBJ3MgbW9zdCBjcml0aWNhbCBwZWVyLXJldmlld2VkIHB1YmxpY2F0aW9ucywgc3VjaCBhcyBBbWVyaWNhbiBBbnRocm9wb2xvZ2lzdCwgQW1lcmljYW4gRXRobm9sb2dpc3QsIEN1bHR1cmFsIEFudGhyb3BvbG9neSwgRXRob3MsIGFuZCBNZWRpY2FsIEFudGhyb3BvbG9neSBRdWFydGVybHkuPC9wPgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjUyNTgxNjEiIGNsYXNzPSIiPgoKICAgIAoKICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvaGlzdC1hYnMiICBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAnMTYnLF9zdF9jb250ZW50X2lkOiAnNjUyNTgxNjEnLF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgSGlzdG9yaWNhbCBBYnN0cmFjdHMKICAgIDwvYT4gCgogICAgCgogICAgCiAgICAKCiAgICAKICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1kYXRhYmFzZS1kZXNjLTY1MjU4MTYxIiBjbGFzcz0icy1sZy1kYXRhYmFzZS1kZXNjIj4KICAgICAgICAgICAgPHA+PHN0cm9uZz5Db3ZlcmFnZTo8L3N0cm9uZz4gMTQ1MCAtIHByZXNlbnQ8YnIgLz4NClJlc291cmNlIGNvdmVycyB3b3JsZCBoaXN0b3J5IChleGNsdWRpbmcgVVMgJmFtcDsgQ2FuYWRhKS4gSW5kZXhlcyBhcnRpY2xlcywgYm9va3MsIGVzc2F5IGNvbGxlY3Rpb25zLCBkaXNzZXJ0YXRpb25zLCBtZWRpYS4gV2l0aCBhYnN0cmFjdHMuPC9wPgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgogICAgICAgIDwvdWw+CgogICAgICAgIAogICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci00MTE0NDAyIiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci00MTE0NDAyIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMzUwMDk4MS1jb250YWluZXIiIGNsYXNzPSJzLWxpYi1ib3gtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNTAwOTgxIiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIEVuY3ljbG9wZWRpYXMgYW5kIERpY3Rpb25hcmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0zNTAwOTgxIiA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzLWxpYi1ib3gtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1jb250ZW50LTY1OTcyNzQiIGNsYXNzPSIgIGNsZWFyZml4Ij4KICAgIDxzdHlsZT4KCiNsaW5rMTAzNjcxNDMsICNsaW5rMTAzNjcxNjUsICNsaW5rMTAzNjczMTAsICNsaW5rMTAzNjc0NjIsICNsaW5rMTAzNjc0OTcgewpsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cm1hcmdpbi1sZWZ0Oi04cHg7Cgpmb250LXNpemU6IDExcHg7CmZvbnQtd2VpZ2h0OiBib2xkOwp9Cgo8L3N0eWxlPgoKICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IiI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWxpbmstbGlzdC03NDEzMDM0IgogICAgICAgICAgICBjbGFzcz0icy1sZy1saW5rLWxpc3Qgcy1sZy1saW5rLWxpc3QtMiI+Cgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM3MSIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2Fhc2UiIHRhcmdldD0iIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzcxJiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBBZnJpY2FuIEFtZXJpY2FucyBpbiBTY2llbmNlOiBhbiBFbmN5Y2xvcGVkaWEgb2YgUGVvcGxlIGFuZCBQcm9ncmVzcwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDk0MzYiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9sb2dpbi5saWJwcm94eS5taXQuZWR1L2xvZ2luP3VybD1odHRwczovL21pdC5wcmltby5leGxpYnJpc2dyb3VwLmNvbS9wZXJtYWxpbmsvMDFNSVRfSU5TVC8xcTR0Z3ZwL2FsbWE5OTM1MDU1NzM3NzA2NzYxIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwOTQzNiYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQW1lcmljYSBHb2VzIEdyZWVuOiBBbiBFbmN5Y2xvcGVkaWEgb2YgRWNvLUZyaWVuZGx5IEN1bHR1cmUgaW4gdGhlIFVuaXRlZCBTdGF0ZXMKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDk0MzYiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDMgdi4sIDIwMTMKICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNzIiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9jaGRkIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM3MiYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQ2FtYnJpZGdlIEhpc3RvcmljYWwgRGljdGlvbmFyeSBvZiBEaXNlYXNlCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA4MzcyIiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBBIGhpc3RvcnkgYW5kIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3JsZCdzIG1ham9yIGRpc2Vhc2VzIG9mIHllc3RlcmRheSBhbmQgdG9kYXkuIDIwMDMKICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNzMiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9lbmN5Y2hzdG0iIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzczJiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBFbmN5Y2xvcGFlZGlhIG9mIHRoZSBIaXN0b3J5IG9mIFNjaWVuY2UsIFRlY2hub2xvZ3ksIGFuZCBNZWRpY2luZSBpbiBOb24tV2VzdGVybiBDdWx0dXJlcwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM3MyIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgMiB2LiwgMm5kIGVkLiwgMjAwOC4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNzQiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9lbmN5Y2JpbyIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNzQmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEVuY3ljbG9wZWRpYSBvZiBCaW9ldGhpY3MKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNzQiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDV2LCAzcmQgZWQuLCAyMDA0LgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwOTQzMyIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xvZ2luLmxpYnByb3h5Lm1pdC5lZHUvbG9naW4/dXJsPWh0dHBzOi8vbWl0LnByaW1vLmV4bGlicmlzZ3JvdXAuY29tL3Blcm1hbGluay8wMU1JVF9JTlNULzFxNHRndnAvYWxtYTk5MDAzNDg5Mzk5MDEwNjc2MSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDk0MzMmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEVuY3ljbG9wZWRpYSBvZiBFbnZpcm9ubWVudGFsIEV0aGljcyBhbmQgUGhpbG9zb3BoeQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwOTQzMyIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgMiB2LiwgMjAwOS4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNzUiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9lbmNzY2lyZWwiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4Mzc1JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBFbmN5Y2xvcGVkaWEgb2YgU2NpZW5jZSBhbmQgUmVsaWdpb24KICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNzUiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDQgdi4sIDIwMDMKICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNzYiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9lbmN5Y3N0YW5kZSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNzYmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEVuY3ljbG9wZWRpYSBvZiBTY2llbmNlLCBUZWNobm9sb2d5LCBhbmQgRXRoaWNzCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA4Mzc2IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICA0diwgMjAwNQogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM3NyIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2VuY3l0aW1lIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM3NyYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgRW5jeWNsb3BlZGlhIG9mIFRpbWU6IFNjaWVuY2UsIFBoaWxvc29waHksIFRoZW9sb2d5LCAmIEN1bHR1cmUKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNzciIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDN2LCAyMDA5CiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA5NDM3IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbG9naW4ubGlicHJveHkubWl0LmVkdS9sb2dpbj91cmw9aHR0cDovL2dvLmdhbGVncm91cC5jb20vcHMvaS5kbz9pZD1HQUxFfDk3ODAzMTMzNzkzNzYmYW1wO3Y9Mi4xJmFtcDt1PWNhbWIyNzAwMiZhbXA7aXQ9YWJvdXRCb29rJmFtcDtwPUdWUkwmYW1wO3N3PXciIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA5NDM3JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBFbmN5Y2xvcGVkaWEgb2YgVmlkZW8gR2FtZXM6IFRoZSBDdWx0dXJlLCBUZWNobm9sb2d5LCBhbmQgQXJ0IG9mIEdhbWluZwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwOTQzNyIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgMiB2LiwgMjAxMgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM3OCIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2ludGVuY3NvY3NjaSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNzgmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEludGVybmF0aW9uYWwgRW5jeWNsb3BlZGlhIG9mIHRoZSBTb2NpYWwgU2NpZW5jZXMKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNzgiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIFRoaXMgcmV2aXNpb24gb2YgYSBjbGFzc2ljIHJlZmVyZW5jZSB3b3JrIGNvdmVycyB0b3BpY3MgaW4gc29jaWFsIHNjaWVuY2UgcmVzZWFyY2ggYW5kIHByYWN0aWNlLiAybmQgZWQuLCA5diwgMjAwOC4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNzkiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9tZWUiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4Mzc5JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBNYWNtaWxsYW4gRW5jeWNsb3BlZGlhIG9mIEVuZXJneQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM3OSIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgM3YsIDIwMDEKICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzODAiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9uZGhpIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM4MCYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgTmV3IERpY3Rpb25hcnkgb2YgdGhlIEhpc3Rvcnkgb2YgSWRlYXMKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzODAiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDZ2LCAyMDA1CiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzgxIiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbG9naW4ubGlicHJveHkubWl0LmVkdS9sb2dpbj91cmw9aHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvMXE0dGd2cC9hbG1hOTkzNTA2NjAyNjgwNjc2MSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzODEmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIE94Zm9yZCBDb21wYW5pb24gdG8gdGhlIEhpc3Rvcnkgb2YgTW9kZXJuIFNjaWVuY2UKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzODEiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDIwMDMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzgyIiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvc2NpdGkiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzgyJiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBTY2llbmNlIGFuZCBJdHMgVGltZXMKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzODIiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIDh2LCAyMDAxCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA5NDM5IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbG9naW4ubGlicHJveHkubWl0LmVkdS9sb2dpbj91cmw9aHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvZWpkY2tqL2FsbWE5OTM1MDg4MzI2NjA2NzYxIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwOTQzOSYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgU2NpZW5jZSwgUmVsaWdpb24sIGFuZCBTb2NpZXR5CiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA5NDM5IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICAyIHYuLCAyMDA3CiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4Mzg0IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbWl0LnByaW1vLmV4bGlicmlzZ3JvdXAuY29tL3Blcm1hbGluay8wMU1JVF9JTlNULzFqZG45bDEvYWxtYTk5MDAyMzIyODI5MDEwNjc2MSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzODQmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFNjaWVudGlmaWMgRXhwbG9yYXRpb24gYW5kIEV4cGVkaXRpb25zOiBGcm9tIHRoZSBBZ2Ugb2YgRGlzY292ZXJ5IHRvIHRoZSBUd2VudHktRmlyc3QgQ2VudHVyeQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM4NCIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgMnYsIDIwMTAKICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDk0MzUiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9sb2dpbi5saWJwcm94eS5taXQuZWR1L2xvZ2luP3VybD1odHRwczovL21pdC5wcmltby5leGxpYnJpc2dyb3VwLmNvbS9wZXJtYWxpbmsvMDFNSVRfSU5TVC9lamRja2ovYWxtYTk5MDAyMTQxMDIxMDEwNjc2MSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDk0MzUmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIFN1YnN0YW5jZSBBYnVzZSBpbiBBbWVyaWNhOiAgQSBEb2N1bWVudGFyeSBhbmQgUmVmZXJlbmNlIEd1aWRlCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA5NDM1IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICAyMDEyCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCiAgICAgICAgPC91bD4KCiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTQxMTQ0MDEiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTQxMTQ0MDEiPgoKCiAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNTAwOTgwLWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTM1MDA5ODAiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgQmlvZ3JhcGh5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTM1MDA5ODAiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjU5NzI3MyIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPHN0eWxlPgoKI2xpbmsxMDM2NzE0MywgI2xpbmsxMDM2NzE2NSwgI2xpbmsxMDM2NzMxMCwgI2xpbmsxMDM2NzQ2MiwgI2xpbmsxMDM2NzQ5NyB7Cmxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKbWFyZ2luLWxlZnQ6LThweDsKCmZvbnQtc2l6ZTogMTFweDsKZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCjwvc3R5bGU+CgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iIj4KICAgICAgICA8dWwgaWQ9InMtbGctbGluay1saXN0LTc0MTMwMjciCiAgICAgICAgICAgIGNsYXNzPSJzLWxnLWxpbmstbGlzdCBzLWxnLWxpbmstbGlzdC0yIj4KCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzY0IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYWFzZSIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9InJldHVybiBzcHJpbmdTcGFjZS5zcHJpbmdUcmFjay50cmFja0xpbmsoe2xpbms6IHRoaXMsX3N0X3R5cGVfaWQ6ICYjMDM5OzImIzAzOTssX3N0X2NvbnRlbnRfaWQ6ICYjMDM5OzY2MDgzNjQmIzAzOTssX3N0X2luY19yZXR1cm46IHRoaXN9KTsiID4KICAgICAgICAgICAgICAgIEFmcmljYW4gQW1lcmljYW5zIGluIFNjaWVuY2U6IGFuIEVuY3ljbG9wZWRpYSBvZiBQZW9wbGUgYW5kIFByb2dyZXNzCiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgPC9zcGFuPgoKICAgIAogICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWxpbmstZGVzYy02NjA4MzY0IiBjbGFzcz0icy1sZy1saW5rLWRlc2MiPgogICAgICAgICAgICBDb3ZlcnMgdGhlIGFjY29tcGxpc2htZW50cyBhbmQgc3RydWdnbGVzIG9mIEFmcmljYW4gQW1lcmljYW4gc2NpZW50aXN0cy4gSW5jbHVkZXMgZW50cmllcyBvbiBwZW9wbGUsIHNjaWVudGlmaWMgZmllbGRzLCBhbmQgaW5zdGl0dXRpb25zLCBhcyB3ZWxsIGFzIGEgY2hyb25vbG9neS4KICAgICAgICA8L2Rpdj4KICAgIAogICAgPC9kaXY+Cgo8L2xpPgoKCgoKPGxpIGNsYXNzPSIiPgogICAgCgoKPGRpdiBpZD0icy1sZy1jb250ZW50LTY2MDgzNjUiIGNsYXNzPSIiPgogICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9hbXdzY2kiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzY1JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBBbWVyaWNhbiBNZW4gYW5kIFdvbWVuIG9mIFNjaWVuY2U6IDogQSBCaW9ncmFwaGljYWwgRGlyZWN0b3J5IG9mIFRvZGF5J3MgTGVhZGVycyBpbiBQaHlzaWNhbCwgQmlvbG9naWNhbCwgYW5kIFJlbGF0ZWQgU2NpZW5jZXMKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNjUiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIEVkaXRpb25zIDIyICgyMDA1KS1wcmVzZW50LgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM2NiIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2Ftd29tZW4iIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzY2JiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBBbWVyaWNhbiBXb21lbiBvZiBTY2llbmNlIFNpbmNlIDE5MDAKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNjYiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIENvdmVycyBBbWVyaWNhbiB3b21lbiBzY2llbnRpc3RzIGFjcm9zcyB0aGUgc2NpZW5jZXMgdGhyb3VnaG91dCB0aGUgMjB0aCBjZW50dXJ5LgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgoKCgo8bGkgY2xhc3M9IiI+CiAgICAKCgo8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjYwODM3MCIgY2xhc3M9IiI+CiAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm5hc29ubGluZS5vcmcvcHVibGljYXRpb25zL2Jpb2dyYXBoaWNhbC1tZW1vaXJzL29ubGluZS1jb2xsZWN0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJyZXR1cm4gc3ByaW5nU3BhY2Uuc3ByaW5nVHJhY2sudHJhY2tMaW5rKHtsaW5rOiB0aGlzLF9zdF90eXBlX2lkOiAmIzAzOTsyJiMwMzk7LF9zdF9jb250ZW50X2lkOiAmIzAzOTs2NjA4MzcwJiMwMzk7LF9zdF9pbmNfcmV0dXJuOiB0aGlzfSk7IiA+CiAgICAgICAgICAgICAgICBCaW9ncmFwaGljYWwgTWVtb2lycyBvZiB0aGUgTmF0aW9uYWwgQWNhZGVteSBvZiBTY2llbmNlcwogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM3MCIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgUHVibGlzaGVkIHNpbmNlIDE4NzcsIEJpb2dyYXBoaWNhbCBNZW1vaXJzIHByb3ZpZGUgdGhlIGxpZmUgaGlzdG9yaWVzIGFuZCBzZWxlY3RlZCBiaWJsaW9ncmFwaGllcyBvZiBkZWNlYXNlZCBOYXRpb25hbCBBY2FkZW15IG9mIFNjaWVuY2VzIG1lbWJlcnMuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzY5IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbG9naW4ubGlicHJveHkubWl0LmVkdS9sb2dpbj91cmw9aHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vcGVybWFsaW5rLzAxTUlUX0lOU1QvMW50c21raC9hbG1hOTkwMDAyOTU2NjMwMTA2NzYxIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM2OSYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQmlvZ3JhcGhpY2FsIE1lbW9pcnMgb2YgdGhlIFJveWFsIFNvY2lldHkKICAgICAgICAgICAgPC9hPgogICAgICAgIAogICAgICAgICAgICA8L3NwYW4+CgogICAgCiAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctbGluay1kZXNjLTY2MDgzNjkiIGNsYXNzPSJzLWxnLWxpbmstZGVzYyI+CiAgICAgICAgICAgIE9iaXR1YXJpZXMgb2YgbmVhcmx5IGV2ZXJ5IGRlY2Vhc2VkIEZlbGxvdyBhbmQgRm9yZWlnbiBNZW1iZXIgb2YgdGhlIFJveWFsIFNvY2lldHkuICAxOTU1LXByZXNlbnQuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzY3IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZHNiIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM2NyYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgQ29tcGxldGUgRGljdGlvbmFyeSBvZiBTY2llbnRpZmljIEJpb2dyYXBoeQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM2NyIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgTGVuZ3RoeSBiaW9ncmFwaGljYWwgZXNzYXlzIGFib3V0IGRlY2Vhc2VkIG5hdHVyYWwgc2NpZW50aXN0cyBhbmQgbWF0aGVtYXRpY2lhbnMgZnJvbSBhbGwgY291bnRyaWVzIGFuZCBoaXN0b3JpY2FsIHBlcmlvZHMuIDxici8+Vm9sLiAxLTE2IGFyZSB0aGUgb3JpZ2luYWwgRFNCIChwdWJsaXNoZWQgMTk3MC04MCkuIFZvbC4gMTctMTggYXJlIHN1cHBsZW1lbnRzICgxOTkwKS4gVm9sLiAxOS0yNyBhcmUgdGhlIE5ldyBEU0IgKDIwMDcpLCBpbmNsdWRpbmcgNTc1IG5ldyBhcnRpY2xlcyBhbmQgMjUwIHN1cHBsZW1lbnRhcnkgb3IgcmVwbGFjZW1lbnQgYXJ0aWNsZXMgYWJvdXQgZmlndXJlcyBjb3ZlcmVkIGluIHRoZSBvcmlnaW5hbCBEU0IuCiAgICAgICAgPC9kaXY+CiAgICAKICAgIDwvZGl2PgoKPC9saT4KCgoKCjxsaSBjbGFzcz0iIj4KICAgIAoKCjxkaXYgaWQ9InMtbGctY29udGVudC02NjA4MzY4IiBjbGFzcz0iIj4KICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZG1iIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0icmV0dXJuIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrTGluayh7bGluazogdGhpcyxfc3RfdHlwZV9pZDogJiMwMzk7MiYjMDM5Oyxfc3RfY29udGVudF9pZDogJiMwMzk7NjYwODM2OCYjMDM5Oyxfc3RfaW5jX3JldHVybjogdGhpc30pOyIgPgogICAgICAgICAgICAgICAgRGljdGlvbmFyeSBvZiBNZWRpY2FsIEJpb2dyYXBoeQogICAgICAgICAgICA8L2E+CiAgICAgICAgCiAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAKICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1saW5rLWRlc2MtNjYwODM2OCIgY2xhc3M9InMtbGctbGluay1kZXNjIj4KICAgICAgICAgICAgVGhpcyBBLVogbGlzdGluZyBvZiBtZWRpY2FsIHByYWN0aXRpb25lcnMgZnJvbSBhbmNpZW50IHRocm91Z2ggbW9kZXJuIHRpbWVzLS1hbHNvIGluZGV4ZWQgYnkgY291bnRyeSwgZmllbGQgb2YgYWN0aXZpdHksIGFuZCBiaXJ0aCBhbmQgZGVhdGggZGF0ZXMtLXByb3ZpZGVzIGEgYmlvZ3JhcGh5IG9mIGVhY2gsIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIGZpZWxkIG9mIG1lZGljaW5lLCBhbmQgYSBiaWJsaW9ncmFwaHkgb2YgdGhlaXIgd29ya3MuICA1IHYuLCAyMDA3LgogICAgICAgIDwvZGl2PgogICAgCiAgICA8L2Rpdj4KCjwvbGk+CgogICAgICAgIDwvdWw+CgogICAgICAgIAogICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBpZD0icy1sZy1jb2wtMiIgY2xhc3M9ImNvbC1tZC0zIj48ZGl2IGNsYXNzPSJzLWxnLWNvbC1ib3hlcyI+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci05OTYzOTUxIiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci05OTYzOTUxIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtODMwNjQ3Ni1jb250YWluZXIiIGNsYXNzPSJzLWxpYi1ib3gtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC04MzA2NDc2IiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIE1vcmUgd2F5cyB0byBnZXQgaGVscAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS04MzA2NDc2IiA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzLWxpYi1ib3gtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgCgkJCTxkaXYgaWQ9InMtbGctY29udGVudC0xNjcwMjU0MCIgY2xhc3M9IiAgY2xlYXJmaXgiPgoJCQkJPGRpdiBpZD0ibGliY2hhdF83YWU0ODhmYzhhMjMxYmI4YzAxN2U5YjVlMzgxZjkyNCI+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLy92Mi5saWJhbnN3ZXJzLmNvbS9sb2FkX2NoYXQucGhwP2hhc2g9N2FlNDg4ZmM4YTIzMWJiOGMwMTdlOWI1ZTM4MWY5MjQiPjwvc2NyaXB0PgoKPHA+Jm5ic3A7PC9wPgoKPHA+PGZvbnQgc2l6ZT0iNCI+PGI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcmllcy5taXQuZWR1L2FzayI+QXNrIFVzPC9hPjwvYj48L2ZvbnQ+PGJyIC8+CkFzayBhIHF1ZXN0aW9uLCBtYWtlJm5ic3A7YW4gYXBwb2ludG1lbnQsIGdpdmUmbmJzcDtmZWVkYmFjaywgb3IgdmlzaXQgdXMuPC9wPgoJCSAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PGRpdiBpZD0icy1sZy1ib3gtd3JhcHBlci00MTE0Mzk4IiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci00MTE0Mzk4Ij4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMzQ5NDc2MC1jb250YWluZXIiIGNsYXNzPSJzLWxpYi1ib3gtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC0zNDk0NzYwIiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIFJlbGF0ZWQgZ3VpZGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTM0OTQ3NjAiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNjU5MjgwMCIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPHVsPgo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9hbnRocm8iPkFudGhyb3BvbG9neTwvYT48L2xpPgo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9oaXN0b3J5Ij5IaXN0b3J5PC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYmlvZ3JhcGh5Ij5CaW9ncmFwaHk8L2E+PC9saT4KPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vbGlicmFyaWVzLm1pdC5lZHUvbWl0aGlzdG9yeS9iaWJsaW9ncmFwaHkvIj5NSVQgSGlzdG9yeTwvYT48L2xpPgo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9saWJndWlkZXMubWl0LmVkdS9maW5kaW5nLWRhdGEiPkRhdGEgJmFtcDsgR0lTIFJlc291cmNlczwvYT48L2xpPgo8L3VsPgoKICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xMjciIGNsYXNzPSJjb2wtbWQtMTIiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIAo8L2Rpdj4KCjxkaXYgaWQ9InMtbGliLWZvb3Rlci1wdWJsaWMiIGNsYXNzPSJzLWxpYi1mb290ZXIgZm9vdGVyIGNvbnRhaW5lciBzLWxpYi1zaWRlLWJvcmRlcnMiPgogICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItbWV0YSIgY2xhc3M9InBhZC10b3Atc20gcGFkLWxlZnQtbWVkIGNsZWFyZml4Ij4KICAgICAgICA8dWwgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLWF0dHJpYnV0ZXMiPgogICAgICAgICAgICA8bGkgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXVwZGF0ZWQiIGNsYXNzPSJzLWxnLWgtc2VwYXJhdG9yIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzLWxnLWd1aWRlLWxhYmVsIj5MYXN0IFVwZGF0ZWQ6PC9zcGFuPiA8c3BhbiBjbGFzcz0icy1sZy10ZXh0LWdyZXlvdXQiPk1heSAyOSwgMjAyNSA1OjA4IFBNPC9zcGFuPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXVybCIgY2xhc3M9InMtbGctaC1zZXBhcmF0b3IiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InMtbGctZ3VpZGUtbGFiZWwiPlVSTDo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzLWxnLXRleHQtZ3JleW91dCI+aHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9zdHM8L3NwYW4+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBpZD0icy1sZy1ndWlkZS1wcmludC11cmwiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDogd2luZG93LnByaW50KCk7Ij48aSBjbGFzcz0iZmEgZmEtcHJpbnQiIGFyaWEtaGlkZGVuPSJ0cnVlIiB0aXRsZT0iUHJpbnQgUGFnZSI+PC9pPiBQcmludCBQYWdlPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CgogICAgICAgIDxkaXYgaWQ9InMtbGliLWZvb3Rlci1sb2dpbi1saW5rIiBjbGFzcz0icHVsbC1yaWdodCBwYWQtcmlnaHQtbWVkIj4KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9taXQubGliYXBwcy5jb20vbGliYXBwcy9sb2dpbi5waHA/c2l0ZV9pZD02OCZ0YXJnZXQ2ND1MMnhwWW1kMWFXUmxjeTloWkcxcGJsOWpMbkJvY0Q5blBURTNOVGc0T0Nad1BURXhOVGcyT1RjPSI+TG9naW4gdG8gTGliQXBwczwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBhZC1ib3R0b20tc20gY2xlYXJmaXgiPgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXN1YmplY3RzIiBjbGFzcz0icGFkLXRvcC1zbSBwYWQtbGVmdC1tZWQgcGFkLXJpZ2h0LW1lZCBwdWxsLWxlZnQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icy1sZy1ndWlkZS1sYWJlbCI+U3ViamVjdHM6IDwvc3Bhbj48c3BhbiBjbGFzcz0icy1sZy1zbWFsbCBib2xkIj48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L3NiLnBocD9zdWJqZWN0X2lkPTE4NjY2Ij5IdW1hbml0aWVzPC9hPiwgPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9zYi5waHA/c3ViamVjdF9pZD0xODY2NCI+U29jaWFsIHNjaWVuY2VzPC9hPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci10YWdzIiBjbGFzcz0icGFkLXRvcC1zbSBwYWQtbGVmdC1tZWQgcHVsbC1sZWZ0Ij4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0icy1saWItZm9vdGVyLXN1cHBvcnQtbGluayIgY2xhc3M9InB1bGwtcmlnaHQgcGFkLXJpZ2h0LW1lZCI+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBzY3JvbGxfdG9wLnR3aWcgLS0+CjxkaXYgaWQ9InMtbGliLXNjcm9sbC10b3AiPgogICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0ialF1ZXJ5KCdib2R5JykuZm9jdXMoKTsiIHRpdGxlPSJCYWNrIHRvIFRvcCIKICAgICAgIGFyaWEtbGFiZWw9IkJhY2sgdG8gVG9wIj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmEtc3RhY2sgZmEtbGciIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNxdWFyZS1vIGZhLXN0YWNrLTJ4Ij48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1hbmdsZS1kb3VibGUtdXAgZmEtc3RhY2stMXgiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgYm90dG9tOjJweDsiPjwvaT4KICAgICAgICA8L3NwYW4+CiAgICA8L2E+CjwvZGl2Pgo8IS0tICFzY3JvbGxfdG9wLnR3aWcgLS0+Cgo8ZGl2IGlkPSJzLWxpYi1hbGVydCIgdGl0bGU9IiI+PGRpdiBpZD0icy1saWItYWxlcnQtY29udGVudCI+PC9kaXY+PC9kaXY+CgogICAgCjxmb290ZXI+CjxkaXYgY2xhc3M9ImZvb3Rlci1tYWluIGZsZXgtY29udGFpbmVyIiBhcmlhLWxhYmVsPSJNSVQgTGlicmFyaWVzIGZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJpZGVudGl0eSBmbGV4LWNvbnRhaW5lciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdSIgY2xhc3M9ImxvZ28tbWl0LWxpYiI+CiAgICAgICAgICAgIDxpbWcgc3JjPSAiaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0bGliLXdvcmRtYXJrLnN2ZyIgYWx0PSJNSVQgTGlicmFyaWVzIGxvZ28iIHdpZHRoPSIxNTAiPgogICAgICAgIDwvYT4KICAgICAgICA8ZGl2IGNsYXNzPSJsaW5rcy1wcmltYXJ5IGZsZXgtY29udGFpbmVyIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcHJpdmFjeSIgY2xhc3M9Imxpbmstc3ViIj5Qcml2YWN5PC9hPjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcGVybWlzc2lvbnMiIGNsYXNzPSJsaW5rLXN1YiI+UGVybWlzc2lvbnM8L2E+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2Nlc3NpYmlsaXR5IiBjbGFzcz0ibGluay1zdWIiPkFjY2Vzc2liaWxpdHk8L2E+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9jb250YWN0IiBjbGFzcz0ibGluay1zdWIiPkNvbnRhY3QgdXM8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj48IS0tIGVuZCAuaWRlbnRpdHkgLS0+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJmb290ZXItaW5mby1pbnN0aXR1dGUiPgogICAgPGEgY2xhc3M9ImxpbmstbG9nby1taXQiIGhyZWY9Imh0dHBzOi8vd3d3Lm1pdC5lZHUiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRfbG9ja3VwX3N0ZC10aHJlZS1saW5lX3JnYl93aGl0ZS5zdmciIGFsdD0iTUlUIGxvZ28iIHdpZHRoPSIxNTAiPgogICAgPC9hPgogICAgPGRpdiBjbGFzcz0ibGljZW5zZSI+Q29udGVudCBjcmVhdGVkIGJ5IHRoZSBNSVQgTGlicmFyaWVzLCA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvNC4wLyI+Q0MgQlktTkM8L2E+IHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVzZWFyY2gtc3VwcG9ydC9ub3RpY2VzL2NvcHlyaWdodC1ub3RpZnkvIj5Ob3RpZnkgdXMgYWJvdXQgY29weXJpZ2h0IGNvbmNlcm5zPC9hPi4KICAgIDwvZGl2PjwhLS0gZW5kIC5mb290ZXItaW5mby1pbnN0aXR1dGUgLS0+CjwvZGl2Pgo8L2Zvb3Rlcj4KPHNjcmlwdCBzcmM9Ii8vdjIubGliYW5zd2Vycy5jb20vbG9hZF9jaGF0LnBocD9oYXNoPWJlMmM2NTRiNjNkZDQzZjMxYzU2Mjk1ZWU1ZDc4ZDg4Ij48L3NjcmlwdD4KCgogICAgPCEtLSBCRUdJTjogQW5hbHl0aWNzIGNvZGUgLS0+PCEtLSBNYXRvbW8gVGFnIE1hbmFnZXIgLS0+PHNjcmlwdD4gIHZhciBfbXRtID0gd2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgIF9tdG0ucHVzaCh7J210bS5zdGFydFRpbWUnOiAobmV3IERhdGUoKS5nZXRUaW1lKCkpLCAnZXZlbnQnOiAnbXRtLlN0YXJ0J30pOyAgKGZ1bmN0aW9uKCkgeyAgICB2YXIgZD1kb2N1bWVudCwgZz1kLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyAgICBnLmFzeW5jPXRydWU7IGcuc3JjPSdodHRwczovL21hdG9tby5saWJyYXJpZXMubWl0LmVkdS9qcy9jb250YWluZXJfb0ZXTVNiM2cuanMnOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyk7ICB9KSgpOzwvc2NyaXB0PjwhLS0gRW5kIE1hdG9tbyBUYWcgTWFuYWdlciAtLT48IS0tIEVORDogQW5hbHl0aWNzIGNvZGUgLS0+CgogIDwvYm9keT4KICA8L2h0bWw+CiAg", "response_headers": {"Content-Security-Policy": ["upgrade-insecure-requests"], "content-type": ["text/html; charset=UTF-8"], "date": ["Thu, 05 Feb 2026 20:16:50 GMT"], "server": ["nginx"], "strict-transport-security": ["max-age=31536000; preload"], "vary": ["Accept-Encoding"], "x-backend-server": ["libguides-us-1.springyaws.com"], "x-content-type-options": ["nosniff"], "x-springy-cache-disabled": ["0"], "x-orig-content-encoding": ["gzip"]}} +{"url": "https://libguides.mit.edu/dawn", "status": "active", "cdx_warc_filename": "rec-d3274de52d0c-libguides-20260205201423787-6.warc.gz", "cdx_title": "Book - MIT Reads: Dawn by Octavia Butler - LibGuides at MIT Libraries", "cdx_offset": "1021372", "cdx_length": "16609", "html_base64": "ICA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9RWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIAo8dGl0bGU+Qm9vayAtIE1JVCBSZWFkczogRGF3biBieSBPY3RhdmlhIEJ1dGxlciAtIExpYkd1aWRlcyBhdCBNSVQgTGlicmFyaWVzPC90aXRsZT4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KPCEtLSBmYXZpY29uLnR3aWcgLS0+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9hcHBsZS10b3VjaC1pY29uLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMzJ4MzIiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLTMyeDMyLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMTZ4MTYiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9mYXZpY29uLTE2eDE2LnBuZyI+CjxsaW5rIHJlbD0ibWFuaWZlc3QiIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9zaXRlLndlYm1hbmlmZXN0Ij4KPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Ii8vZDJqdjAycWY3eGdqd3guY2xvdWRmcm9udC5uZXQvYXBwcy9jb21tb24vZmF2aWNvbi9zYWZhcmktcGlubmVkLXRhYi5zdmciIGNvbG9yPSIjNWJiYWQ1Ij4KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vZmF2aWNvbi5pY28iPgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVDb2xvciIgY29udGVudD0iI2ZmYzQwZCI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tY29uZmlnIiBjb250ZW50PSIvL2QyanYwMnFmN3hnand4LmNsb3VkZnJvbnQubmV0L2FwcHMvY29tbW9uL2Zhdmljb24vYnJvd3NlcmNvbmZpZy54bWwiPgo8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iI2ZmZmZmZiI+CjwhLS0gIWZhdmljb24udHdpZyAtLT4KCgoKPCEtLSBwdWJsaWNfbWV0YWRhdGEudHdpZyAtLT4KCiAgICA8IS0tIGF1dG8gZ2VuZXJhdGVkIGR1YmxpbiBjb3JlIG1ldGFkYXRhIC0tPgogICAgPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkxpYkd1aWRlczogTUlUIFJlYWRzOiBEYXduIGJ5IE9jdGF2aWEgQnV0bGVyOiBCb29rIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5DcmVhdG9yIiBjb250ZW50PSJKdWxpYSBMYW5pZ2FuIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5TdWJqZWN0IiBjb250ZW50PSIiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkRlc2NyaXB0aW9uIiBjb250ZW50PSJEYXduIGlzIHRoZSBmaXJzdCBib29rIGluIEJ1dGxlcidzIFhlbm9nZW5lc2lzIHNlcmllcy4iLz4KICAgIDxtZXRhIG5hbWU9IkRDLlB1Ymxpc2hlcnMiIGNvbnRlbnQ9Ik1JVCBMaWJyYXJpZXMiLz4KICAgIDxtZXRhIG5hbWU9IkRDLlJpZ2h0cyIgY29udGVudD0iQ29weXJpZ2h0IE1JVCBMaWJyYXJpZXMgMjAyNiIvPgogICAgPG1ldGEgbmFtZT0iREMuTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIi8+CiAgICA8bWV0YSBuYW1lPSJEQy5JZGVudGlmaWVyIiBjb250ZW50PSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9ODYxNDYwJnA9NjE3MzY1MiIvPgogICAgPG1ldGEgbmFtZT0iREMuRGF0ZS5DcmVhdGVkIiBjb250ZW50PSJBdWcgMTUsIDIwMTgiLz4KICAgIDxtZXRhIG5hbWU9IkRDLkRhdGUuTW9kaWZpZWQiIGNvbnRlbnQ9IkphbiAzMCwgMjAyMiIvPgogICAgCgo8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkxpYkd1aWRlczogTUlUIFJlYWRzOiBEYXduIGJ5IE9jdGF2aWEgQnV0bGVyOiBCb29rIj4KPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJEYXduIGlzIHRoZSBmaXJzdCBib29rIGluIEJ1dGxlciYjMDM5O3MgWGVub2dlbmVzaXMgc2VyaWVzLiI+CjxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIj4KPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9jLnBocD9nPTg2MTQ2MCZhbXA7cD02MTczNjUyIj4KPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIj4KPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAc3ByaW5nc2hhcmUiPgoKCgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvY3NzL2pxdWVyeS11aS5taW4uY3NzPzI2OTEiIC8+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL3NsaWNrLTEuOC4xL3NsaWNrL3NsaWNrLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9zbGljay0xLjguMS9zbGljay9zbGljay10aGVtZS5jc3MiPgoKICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2NzczMuMjMuNC9sZy1wdWJsaWMubWluLmNzcyIgLz4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vc3RhdGljLWFzc2V0cy11cy5saWJndWlkZXMuY29tL3dlYi9qcXVlcnkvanMvMS4xMi40X2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgogICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgalF1ZXJ5KCIuZHJvcGRvd24tdG9nZ2xlIikub24oImNsaWNrIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5zaWJsaW5ncygidWwucy1sZy1zdWJ0YWItdWwuZHJvcGRvd24tbWVudSIpLnRvZ2dsZSgpOwogICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc19sZ19ndWlkZV9uYW1lID0galF1ZXJ5KCcjcy1sZy1ndWlkZS1uYW1lJyk7CiAgICAgICAgaWYgKHNfbGdfZ3VpZGVfbmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGpRdWVyeS50cmltKHNfbGdfZ3VpZGVfbmFtZS50ZXh0KCkpID09PSAnJykgewogICAgICAgICAgICAgICAgc19sZ19ndWlkZV9uYW1lLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEzLjIvanF1ZXJ5LXVpLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIGpRdWVyeS51aSB8fAogICAgICAgIGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pxdWVyeS9qcy9qcXVlcnktdWkubWluLmpzPzI2OTEiPlx4M0Mvc2NyaXB0PicpOwogICAgPC9zY3JpcHQ+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pzMy4yMy40L2xnLXB1YmxpYy5taW4uanMiPjwvc2NyaXB0Pgo8c3R5bGU+LyoqIGJvb3RzdHJhcF90YWJfY3NzLnR3aWcgKiovCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24sCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbiB7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmc6IDRweCAxNXB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgewogICAgYm9yZGVyLWJvdHRvbTogMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkjcy1sZy1hZG1pbi10YWItYWRkID4gYSB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b246aG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsgLW1vei1ib3JkZXItcmFkaXVzOiAwOyBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGNvbG9yOiAjZmZmZmZmOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYSwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gLmFjdGl2ZSA+IGJ1dHRvbiwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGJ1dHRvbiB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gLnMtbGctc3VidGFiLXVsID4gLmFjdGl2ZSA+IGEsCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IC5hY3RpdmUgPiAucy1sZy1zdWJ0YWItdWwgPiAuYWN0aXZlID4gYnV0dG9uIHsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiAuYWN0aXZlID4gYnV0dG9uOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGJ1dHRvbjpob3ZlciB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICAgIGJvcmRlci10b3AtY29sb3I6ICNlMWUxZTE7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyBidXR0b24uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgbWFyZ2luLXRvcDogLTNweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA2cHggMHB4IDNweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBhLnMtbGctdGFiLWRyb3A6aG92ZXIgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JiYjsKICAgIHBhZGRpbmc6IDRweCA2cHggNHB4IDNweDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDZweCAwcHggM3B4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXRhYnMgPiBsaSA+IGEucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluazpob3ZlciwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtdGFicyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmc6IDRweCA1cHggNHB4IDEwcHg7Cn0KCi5uYXYtdGFicyA+IGxpID4gYS5zLWxnLXRhYi10b3AtbGluaywKLm5hdi10YWJzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmsgewogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGEucy1sZy10YWItZHJvcCwKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYnV0dG9uLnMtbGctdGFiLWRyb3AgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIHBhZGRpbmc6IDRweCA4cHggNHB4IDhweDsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMDsKfQoKI3MtbGctdGFicy1jb250YWluZXIgLm5hdi1waWxscyA+IGxpID4gYS5zLWxnLXRhYi1kcm9wOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItZHJvcDpob3ZlciB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmJiOwogICAgcGFkZGluZzogNHB4IDhweCA0cHggOHB4Owp9Cgojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBhLnMtbGctdGFiLXRvcC1saW5rOmhvdmVyLAojcy1sZy10YWJzLWNvbnRhaW5lciAubmF2LXBpbGxzID4gbGkgPiBidXR0b24ucy1sZy10YWItdG9wLWxpbmssCiNzLWxnLXRhYnMtY29udGFpbmVyIC5uYXYtcGlsbHMgPiBsaSA+IGJ1dHRvbi5zLWxnLXRhYi10b3AtbGluazpob3ZlciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGZsb2F0OiBsZWZ0OwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogNHB4IDE1cHggNHB4IDE1cHg7Cn0KCi8qKiAhYm9vdHN0cmFwX3RhYl9jc3MudHdpZyAqKi8KIC5zLWxpYi1ib3gge2JvcmRlci1jb2xvcjogI2NjY2NjYzsKICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggNnB4IC02cHggI0FBQUFBQTsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zLWxpYi1ib3gtc3RkIC5zLWxpYi1ib3gtdGl0bGUge2JhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Y29sb3I6ICM4ODg7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY2NjYzsKICAgICAgICAgICAgfQogICAgICAgICAgICAucy1saWItYm94IC5zLWxpYi1ib3gtdGl0bGUge2JhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Y29sb3I6ICM4ODg7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY2NjYzsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnMtbGliLWJveCAucy1sZy1ib3gtZm9vdGVyIHsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH08L3N0eWxlPjwhLS0gbG9hZCBmYXZpY29ucyBmb3IgbWlzY2VsbGFuZW91cyBwbGF0Zm9ybXMgLS0+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5pY28iIHNpemVzPSIzMngzMiI+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5zdmciIHR5cGU9ImltYWdlL3N2Zyt4bWwiPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL2FwcGxlLXRvdWNoLWljb24ucG5nIj48IS0tIDE4MMOXMTgwIC0tPgo8bGluayByZWw9Im1hbmlmZXN0IiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9tYW5pZmVzdC5qc29uIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw0MDBpdGFsaWMsNjAwLDYwMGl0YWxpYyw3MDAsNzAwaXRhbGljIj4KCjwhLS1hZGRlZCBieSBEYXJjeSB0byBjb25maXJtIHcvIEdvb2dsZSB3ZWJtYXN0ZXIgdG9vbHMgd2Ugb3duIHRoaXMgc2l0ZS0tPgo8bWV0YSBuYW1lPSJnb29nbGUtc2l0ZS12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjgyQ3YzSEZXdmNlZkNfOVhhdXZnbGNmQjRoM28wdXVpQzNuS1dXa0xfZUUiIC8+Cgo8IS0tbWV0YSB0YWcgdG8gc2NhbGUgbW9iaWxlIGRldmljZSBkaXNwbGF5LS0+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIG1heGltdW0tc2NhbGU9MSI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkgewogIGpRdWVyeSgiaW1nW2FsdD0nbnVsbCddLCBpbWdbYWx0PSdOdWxsJ10sIGltZ1thbHQ9J05VTEwnXSIpLmF0dHIoImFsdCIsICIiKTsKICB2YXIgbGliY2hhdF9lZmM3NWM1NTk0N2RiMzIzZDRmYWFiNzI1Yjc5MzA3ZiA9IHsgaWlkOjU5LCBrZXk6J2ZiMTA0NDY3MzBlMjcxYycsIHdpZHRoOicyNDAnIH07CgogICQoJ2hlYWRlciAubWVudS0tdG9nZ2xlJykuY2xpY2soZnVuY3Rpb24oKXsKICAgICQoJyNuYXYtbWFpbicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTsKICAgICQoJy53cmFwLXBhZ2UnKS50b2dnbGVDbGFzcygnbW9iaWxlLW5hdi1hY3RpdmUnKTsKICB9KTsKCiAgJCggJy5saW5rLXByaW1hcnknICkuYmluZCggIm1vdXNlZW50ZXIiLCBmdW5jdGlvbigpIHsgCiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgICAkKHRoaXMpLmZpbmQoICcubWVudS1jb250cm9sJyApLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgJ3RydWUnICk7CiAgICAkKHRoaXMpLmNsb3Nlc3QoICcubGluay1wcmltYXJ5JyApLmFkZENsYXNzKCAnb3BlbicgKTsKICB9KTsKICAkKCAnLmxpbmstcHJpbWFyeScgKS5iaW5kKCAibW91c2VsZWF2ZSIsIGZ1bmN0aW9uKCkgeyAKICAgICQodGhpcykuZmluZCggJy5tZW51LWNvbnRyb2wnICkuYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnICk7CiAgICAkKCAnLmxpbmstcHJpbWFyeScgKS5yZW1vdmVDbGFzcyggJ29wZW4nICk7CiAgfSk7CgogIC8vIG1ha2UgZXNjIGNsb3NlIGFsbCBtZW51cwogICQoICcjbmF2LW1haW4nICkub24oICdrZXlkb3duJyAsIGZ1bmN0aW9uKGUpIHsKICAgIGlmIChlLmtleUNvZGUgPT0gMjcpIHsKICAgICAgaGlkZU1lbnUoZSk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIGhpZGVNZW51KCkgewogICAgJCggJy5saW5rLXByaW1hcnknICkucmVtb3ZlQ2xhc3MoICdvcGVuJyApOwogICAgJCggJy5tZW51LWNvbnRyb2wnICkuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOwogICAgJCggJy5saW5rcy1zdWInICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7CiAgfQoKICAvLyB0aGFua3MgdG8gaHR0cDovL2hleWRvbndvcmtzLmNvbS9wcmFjdGljYWxfYXJpYV9leGFtcGxlcy8KICAkKCcubWFpbi1uYXYtaGVhZGVyJykuZWFjaChmdW5jdGlvbigpIHsKCiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwoKICAgIC8vIGNyZWF0ZSB1bmlxdWUgaWQgZm9yIGExMXkgcmVsYXRpb25zaGlwCiAgICB2YXIgaWQgPSAnY29sbGFwc2libGUtJyArICQoICcjbmF2LW1haW4gaDInICkuaW5kZXgodGhpcyk7CgogICAgLy8gaWRlbnRpZnkgcGFuZWwgYW5kIG1ha2UgaXQgZm9jdXNhYmxlCiAgICB2YXIgcGFuZWwgPSAkKHRoaXMpLm5leHQoICcubGlua3Mtc3ViJyApLmF0dHIoICdhcmlhLWhpZGRlbicsICd0cnVlJyApLmF0dHIoICdpZCcsIGlkKTsKCiAgICAvLyBBZGQgZGVmYXVsdCBhcmlhIHN0YXRlcyB0byBidXR0b24KICAgICR0aGlzLmNoaWxkcmVuKCAnLm1lbnUtY29udHJvbCcgKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKS5hdHRyKCAnYXJpYS1jb250cm9scycsIGlkKTsKICAgIHZhciBidXR0b24gPSAkdGhpcy5jaGlsZHJlbiggJy5tZW51LWNvbnRyb2wnICk7CgogICAgLy8gVG9nZ2xlIHRoZSBzdGF0ZSBwcm9wZXJ0aWVzCiAgICBidXR0b24ub24oICdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNsb3Nlc3QoICcubGluay1wcmltYXJ5JyApLnRvZ2dsZUNsYXNzKCAnb3BlbicgKTsKICAgICAgdmFyIHN0YXRlID0gJCh0aGlzKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcgKSA9PT0gJ2ZhbHNlJyA/IHRydWUgOiBmYWxzZTsKICAgICAgJCh0aGlzKS5hdHRyKCAnYXJpYS1leHBhbmRlZCcsIHN0YXRlICk7CiAgICAgIHBhbmVsLmF0dHIoICdhcmlhLWhpZGRlbicsICFzdGF0ZSApOwogICAgfSk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci8qIEJhc2ljIGxheW91dCBydWxlcyAqLwoqIHsKICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbCB7CiAgZm9udC1zaXplOiAxNnB4Owp9Cgpib2R5IHsKICBmb250LWZhbWlseTogSGVsdmV0aWNhLCAiT3BlbiBTYW5zIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7IC8qIHdhcyAxMDAlOyAqLwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKfQoKYSB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgY29sb3I6ICMwMDA7Cn0KYTpob3ZlciB7CiAgY29sb3I6ICMwMGY7Cn0KCmgzIHsKICBmb250LXNpemU6IDIwcHg7Cn0KCi5mbGV4LWNvbnRhaW5lciB7CiAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7Cn0KCi5mbGV4LWVuZCB7CiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDsKICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAtbXMtZmxleC1hbGlnbjogZW5kOwogIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKfQoKLnNyIHsKICBib3JkZXI6IDAgbm9uZTsKICBjbGlwOiByZWN0KDFweCwxcHgsMXB4LDFweCk7CiAgaGVpZ2h0OiAxcHg7CiAgbWFyZ2luOiAtMXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDFweDsKICB3b3JkLXdyYXA6IG5vcm1hbDsKfQoKLmxpc3QtdW5idWxsZXRlZCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBwYWRkaW5nLWxlZnQ6IDA7CiAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi8qIE51bWJlcmVkIHNlY3Rpb25zIGJlbG93IGV4dHJhY3RlZCBmcm9tIGdlbmVyYXRlZCwgdW5taW5pZmllZCBwYXJlbnQgdGhlbWUgZ2xvYmFsLmNzcyAqLwoKLyogMS4gSGVhZGVyICYgTmF2ICovCi5oZWFkZXItbWFpbiB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJhY2tncm91bmQ6ICMwMDAgdXJsKCdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2ltYWdlcy92aS1zaGFwZTctdHAucG5nJykgbm8tcmVwZWF0IDAgNjUlOwogIGNsZWFyOiBib3RoOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAgd2lkdGg6IDEwMCU7CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogMCAxZW07CiAgfQp9Ci5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBvcmRlcjogMjsKICBtaW4td2lkdGg6IDc3cHg7CiAgbWluLXdpZHRoOiA0LjgxMjVyZW07CiAgcGFkZGluZy1ib3R0b206IDYuNHB4OwogIHBhZGRpbmctYm90dG9tOiAwLjRyZW07CiAgZm9udC1zaXplOiAxNC40cHg7CiAgZm9udC1zaXplOiAwLjlyZW07CiAgbGluZS1oZWlnaHQ6IDE7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICAgIG1heC13aWR0aDogMTA0cHg7CiAgICBtYXgtd2lkdGg6IDYuNXJlbTsKICAgIG1hcmdpbi1sZWZ0OiAxLjUlOwogICAgcGFkZGluZzogMDsKICB9Cn0KLmhlYWRlci1tYWluIC5uYW1lLXNpdGUgYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IGF1dG87Cn0KLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogIGZpbGw6ICNmZmY7CiAgcGFkZGluZzogOHB4Owp9Ci5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHN2ZyB7CiAgbWF4LWhlaWdodDogMjhweDsKICBtYXgtaGVpZ2h0OiAxLjc1cmVtOwogIGhlaWdodDogYXV0bzsKICB3aWR0aDogNzVweDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgc3ZnIHsKICAgIG1heC1oZWlnaHQ6IDQ0cHg7CiAgICBtYXgtaGVpZ2h0OiAyLjc1cmVtOwogICAgd2lkdGg6IDEyMHB4OwogIH0KfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYiB0aXRsZSB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0LWxpYjpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIG9yZGVyOiAxMDAwOwogIHBhZGRpbmc6IDYuNHB4OwogIHBhZGRpbmc6IDAuNHJlbTsKICBjb2xvcjogI2ZmZjsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIGZvbnQtc2l6ZTogMC43NXJlbTsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQ6Zm9jdXMsCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoOmZvY3VzLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdDpob3ZlciwKLmhlYWRlci1tYWluIC5saW5rLWNvbnRhY3Q6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgc3ZnLAouaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2ggc3ZnLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCBzdmcgewogIGZpbGw6ICNjOGM4Yzg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZy1ib3R0b206IDAuMjVlbTsKICB3aWR0aDogMmVtOwp9Ci5oZWFkZXItbWFpbiAubGluay1hY2NvdW50IGksCi5oZWFkZXItbWFpbiAubGluay1zaXRlLXNlYXJjaCBpLAouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCBpIHsKICBjb2xvcjogI2M4YzhjODsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1zaXplOiAxNHB4Owp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCwKICAuaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCiAgLmhlYWRlci1tYWluIC5saW5rLWNvbnRhY3QgewogICAgZGlzcGxheTogbm9uZTsKICB9Cn0KLmhlYWRlci1tYWluIC5saW5rLXNpdGUtc2VhcmNoIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKfQouaGVhZGVyLW1haW4gLmxpbmstYWNjb3VudCB7CiAgbWFyZ2luLWxlZnQ6IDAuNnJlbTsKICBtYXJnaW4tcmlnaHQ6IDAuNnJlbTsKfQouaGVhZGVyLW1haW4gLmxpbmstY29udGFjdCB7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Ci5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgZGlzcGxheTogbm9uZTsKICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICBvcmRlcjogNDsKICBwYWRkaW5nLXRvcDogMzJweDsKICBwYWRkaW5nLXRvcDogMnJlbTsKICBwYWRkaW5nLWJvdHRvbTogOHB4OwogIHBhZGRpbmctYm90dG9tOiAwLjVyZW07CiAgcGFkZGluZy1sZWZ0OiAwLjVlbTsKICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKICBtYXgtd2lkdGg6IDc0cHg7CiAgbWF4LXdpZHRoOiA3My42cHg7CiAgbWF4LXdpZHRoOiA0LjZyZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9Cn0KLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3Owp9Ci5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdDpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0IHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IGF1dG87CiAgbWF4LWhlaWdodDogNDVweDsKICBtYXgtaGVpZ2h0OiAyLjgxMjVyZW07CiAgZmlsbDogI2I5YjdiNjsKfQouaGVhZGVyLW1haW4gLmxvZ28tbWl0IC5jb2xvciB7CiAgZmlsbDogI2ZmZjsKfQojc2tpcCBhIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTEwMDAwcHg7CiAgdG9wOiBhdXRvOwogIHdpZHRoOiAxcHg7CiAgaGVpZ2h0OiAxcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiBibHVlOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IDEwcHg7Cn0KI3NraXAgYTpmb2N1cyB7CiAgcG9zaXRpb246IHN0YXRpYzsKICB3aWR0aDogYXV0bzsKICBoZWlnaHQ6IGF1dG87Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uby1mbGV4Ym94LmZsZXhib3hsZWdhY3kgLmhlYWRlci1tYWluIC5pY29uLWFjY291bnQsCiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLmljb24tc2VhcmNoIHsKICAgIG1heC1oZWlnaHQ6IDE2cHg7CiAgICBtYXgtaGVpZ2h0OiAxcmVtOwogICAgbWF4LXdpZHRoOiAxNnB4OwogICAgbWF4LXdpZHRoOiAxcmVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5vLWZsZXhib3guZmxleGJveGxlZ2FjeSAuaGVhZGVyLW1haW4gLm1lbnUtLXRvZ2dsZSBzdmcgewogICAgaGVpZ2h0OiAxMDAlOwogICAgcGFkZGluZzogMWVtOwogICAgd2lkdGg6IGF1dG87CiAgfQp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiB7CiAgaGVpZ2h0OiA2MnB4OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluICogewogIGhlaWdodDogNjJweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICBtYXJnaW4tbGVmdDogMzJweDsKICBtYXgtd2lkdGg6IDEwM3B4Owp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAubG9nby1taXQgewogIG1hcmdpbi10b3A6IDI0cHg7CiAgbWFyZ2luLWxlZnQ6IDQwcHg7Cn0KLmx0ZS1pZTkgLmhlYWRlci1tYWluIC5zbWFsbCB7CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgcGFkZGluZy10b3A6IDI2cHg7CiAgcGFkZGluZy10b3A6IDEuNjI1cmVtOwp9Ci5sdGUtaWU5IC5oZWFkZXItbWFpbiAuc21hbGwgc3ZnIHsKICBkaXNwbGF5OiBub25lOwp9CmJvZHkudXNlci1pcy10YWJiaW5nICoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsubm8tdW5kZXJsaW5lOmZvY3VzIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogI2M3MDJjNzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgYm9keS51c2VyLWlzLXRhYmJpbmcgKi5uYXYtbWFpbiAubWFpbi1uYXYtbGluazpmb2N1cyB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gewogIGZsZXgtd3JhcDogd3JhcDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMDAlKTsKICB6LWluZGV4OiA3MDAwOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5uYXYtbWFpbi5hY3RpdmUgewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXNpemU6IDFyZW07CiAgcGFkZGluZzogMHB4IDhweCA4cHggOHB4OwogIHBhZGRpbmc6IDByZW0gMC41cmVtIDAuNXJlbSAwLjVyZW07CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm94LXNoYWRvdzogMCAzcHggM3B4ICNjY2M7CiAgaGVpZ2h0OiBhdXRvOwogIGZsZXg6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyLjhlbSk7CiAgdG9wOiAwOwogIHdpZHRoOiAxMDAlOwp9Ci5uYXYtbWFpbi5hY3RpdmUgYSB7CiAgd2lkdGg6IDEwMCU7Cn0KLm5hdi1tYWluLmFjdGl2ZSBhOmhvdmVyLAoubmF2LW1haW4uYWN0aXZlIGE6Zm9jdXMgewogIGNvbG9yOiAjZmZmOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLm5hdi1tYWluIHsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogODAwcHgpIHsKICAubmF2LW1haW4gewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubmF2LW1haW4gewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG9yZGVyOiAzOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3aWR0aDogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7CiAgfQp9Ci5uYXYtbWFpbiAuc21hbGwgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAuc21hbGwgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDAuNzVlbTsKICB9CiAgLm5hdi1tYWluIC5zbWFsbCBhIHsKICAgIHBhZGRpbmc6IDFyZW0gMC41cmVtIDAuNXJlbSAwLjVyZW07CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgc3ZnIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmlsbDogI2ZmZjsKICAgIG1hcmdpbi1ib3R0b206IDAuNGVtOwogIH0KfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkgewogIC5uYXYtbWFpbiAuc21hbGwgewogICAgZm9udC1zaXplOiAxZW07CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgYSB7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHBhZGRpbmctdG9wOiAyZW07CiAgfQogIC5uYXYtbWFpbiAuc21hbGwgc3ZnIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5uYXYtbWFpbiAuY2hhdCB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5jaGF0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KICAubmF2LW1haW4gLmNoYXQgLmxpbmtzLXN1YiB7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgbWluLXdpZHRoOiA5LjM3NXJlbTsKICAgIGJhY2tncm91bmQ6ICNmM2YzZjM7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC5tb3JlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC53cmFwLWJ1dHRvbi1jaGF0IHsKICAgIG1pbi1oZWlnaHQ6IDQ2cHg7CiAgICBtaW4taGVpZ2h0OiAyLjg3NXJlbTsKICAgIHBhZGRpbmc6IDE2cHggOHB4IDBweCA4cHg7CiAgICBwYWRkaW5nOiAxcmVtIDAuNXJlbSAwcmVtIDAuNXJlbTsKICAgIG1pbi13aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluIC5jaGF0IC53cmFwLWJ1dHRvbi1jaGF0ICNsaWJjaGF0X2J0bl93aWRnZXQgewogICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjsKICB9Cn0KLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0IHsKICBkaXNwbGF5OiBibG9jazsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5uYXYtbWFpbi1saXN0IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICB9Cn0KLm5hdi1tYWluIC5saW5rLXByaW1hcnkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubGluay1wcmltYXJ5IHsKICAgIHdpZHRoOiBhdXRvOwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeSAubGlua3Mtc3ViIHsKfQoubmF2LW1haW4gLm1haW4tbmF2LWhlYWRlciB7CiAgaGVpZ2h0OiAxMDAlOwogIGZvbnQtc2l6ZTogMTAwJTsKfQoubmF2LW1haW4gLm1haW4tbmF2LWhlYWRlciBidXR0b24gewogIGJvcmRlcjogMDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIHBhZGRpbmc6IDA7Cn0KLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICBwYWRkaW5nOiA4cHg7CiAgcGFkZGluZzogMC41cmVtOwogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5tYWluLW5hdi1saW5rIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nLXRvcDogMmVtOwogIH0KfQoubmF2LW1haW4gLm1haW4tbmF2LWxpbmsuYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiBsaWdodGdyYXk7CiAgYm94LXNoYWRvdzoKICAgIDAgMCAycHggIzQ0NCwKICAgIGluc2V0IDFweCAwIDAgZ3JheSwKICAgIGluc2V0IC0xcHggMCAwIGdyYXksCiAgICBpbnNldCAwIDFweCAwIGdyYXk7Cn0KLm5hdi1tYWluIC5tYWluLW5hdi1saW5rLm5vLXVuZGVybGluZTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGNvbG9yOiAjZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluazpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gLmNvbC0xIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci5uYXYtbWFpbiAuY29sLTIgewogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci5uYXYtbWFpbiAubGlua3Mtc3ViIHsKICBkaXNwbGF5OiBub25lOwogIGxlZnQ6IDA7CiAgbWF4LWhlaWdodDogMDsKICBvcGFjaXR5OiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTAwJTsKICB0cmFuc2l0aW9uOgogICAgbWF4LWhlaWdodCAwLjNzLAogICAgbWFyZ2luIDAuM3MsCiAgICBvcGFjaXR5IDAuM3MsCiAgICBvdmVyZmxvdyAwLjNzLAogICAgcGFkZGluZy10b3AgMC4zcywKICAgIHBhZGRpbmctYm90dG9tIDAuM3M7CiAgd2lkdGg6IDMxLjc1ZW07Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIucHVzaCB7CiAgbGVmdDogYXV0bzsKICByaWdodDogMDsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLm5hdi1tYWluIC5saW5rLXByaW1hcnkub3BlbiAubWFpbi1uYXYtbGluayB7CiAgICBiYWNrZ3JvdW5kOiAjYzcwMmM3OwogIH0KfQoubmF2LW1haW4gLmxpbmstcHJpbWFyeS5vcGVuIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IG5vbmU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5uYXYtbWFpbiAubGluay1wcmltYXJ5Lm9wZW4gLmxpbmtzLXN1YiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYm94LXNoYWRvdzogMCAwIDJweCAjNDQ0OwogICAgbWF4LWhlaWdodDogMTAwMHB4OwogICAgb3BhY2l0eTogMTsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwogIH0KfQoubmF2LW1haW4gLmxpbmtzLXN1YiB7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgYSB7CiAgY29sb3I6ICMwMDA7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nOiAwLjVlbTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBhOmhvdmVyLAoubmF2LW1haW4gLmxpbmtzLXN1YiBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzcwMmM3OwogIGNvbG9yOiAjZmZmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoubmF2LW1haW4gLmxpbmtzLXN1YiBbY2xhc3MqPSJjb2wtIl0gewogIHdpZHRoOiA1MCU7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmFib3V0IHsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDAuNjg3NWVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbSB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDA7Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbS5leHRyYSBzcGFuOmZpcnN0LW9mLXR5cGU6YWZ0ZXIgewogIGNvbnRlbnQ6IHVybCguLi8uLi9pbWFnZXMvYXJyb3ctcmlnaHQtc2Z3LnN2Zyk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07Cn0KLm5hdi1tYWluIC5saW5rcy1zdWIgLmJvdHRvbTpub3QoLmV4dHJhKTphZnRlciB7CiAgY29udGVudDogdXJsKC4uLy4uL2ltYWdlcy9hcnJvdy1yaWdodC1zZncuc3ZnKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDAuMjVlbTsKfQoubmF2LW1haW4gLmJvdHRvbTpub3QoLmV4dHJhKSBzcGFuOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6YmVmb3JlIHsKICBjb2xvcjogIzAwN2RiODsKICBjb250ZW50OiAifCI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogNHB4Owp9Ci5uYXYtbWFpbiAuaGVhZGluZy1jb2wgewogIG1hcmdpbjogMTZweCAwcHggOHB4IDhweDsKICBtYXJnaW46IDFyZW0gMHJlbSAwLjVyZW0gMC41cmVtOwogIGNvbG9yOiAjMDAwOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMC43NWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgcGFkZGluZy1ib3R0b206IDA7Cn0KLm5hdi1wYWdlIHsKICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7Cn0KLm5vLWNzc3RyYW5zaXRpb25zIC5saW5rLXByaW1hcnkgLmxpbmtzLXN1YiB7CiAgaGVpZ2h0OiAwOwogIG1hcmdpbjogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAwOwp9Ci5uby1jc3N0cmFuc2l0aW9ucyAubGluay1wcmltYXJ5OmhvdmVyIC5saW5rcy1zdWIsCi5uby1jc3N0cmFuc2l0aW9ucyAubGluay1wcmltYXJ5OmZvY3VzIC5saW5rcy1zdWIgewogIGhlaWdodDogYXV0bzsKICBtYXJnaW46IGF1dG87CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgcGFkZGluZzogMTZweDsKICBwYWRkaW5nOiAxcmVtOwogIHdpZHRoOiA2MDBweDsKfQoubmF2LXNlY29uZGFyeSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWRlZGU7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc2l6ZTogMXJlbTsKICBtYXJnaW46IDAgMjBweDsKICB6LWluZGV4OiA3MDAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSB7CiAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgaGVpZ2h0OiAwOwogICAgbWFyZ2luOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBhZGRpbmc6IDA7CiAgfQogIC5uYXYtc2Vjb25kYXJ5LmFjdGl2ZSB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtYXJnaW46IDA7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHBhZGRpbmc6IDA7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IHVsIHsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGk6bnRoLWNoaWxkKG4gKyA0KSB1bCB7CiAgcmlnaHQ6IDA7Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwogIGJveC1zaGFkb3c6IDAgMCAycHggIzQ0NDsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkgewogIC5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWJhYmFiOwogIGhlaWdodDogYXV0bzsKICBsaW5lLWhlaWdodDogMTsKICBtYXJnaW46IGF1dG87CiAgb3BhY2l0eTogMTsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB3aWR0aDogMTAwJTsKICB6LWluZGV4OiA3MDAwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7CiAgLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpOmhvdmVyIGxpIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5uYXYtc2Vjb25kYXJ5IC5tZW51ID4gdWwgPiBsaTpob3ZlciBsaSBhIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxNnB4OwogIHBhZGRpbmc6IDFyZW07Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpID4gYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMTZweDsKICBwYWRkaW5nOiAxcmVtOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKICAubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgPiBhIHsKICAgIGNvbG9yOiB3aGl0ZTsKICB9Cn0KLm5hdi1zZWNvbmRhcnkgLm1lbnUgPiB1bCA+IGxpIGxpIHsKICBoZWlnaHQ6IDA7CiAgbGluZS1oZWlnaHQ6IDA7CiAgbWFyZ2luOiAwOwogIG9wYWNpdHk6IDA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMDsKfQoubmF2LXNlY29uZGFyeSAubWVudSA+IHVsID4gbGkgdWwgewogIGJveC1zaGFkb3c6IDAgMXB4IDJweCAjNDQ0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMzIwcHg7CiAgd2lkdGg6IDIwcmVtOwp9Ci5uYXYtc2Vjb25kID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50OwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5tb2JpbGUtZGlzcGxheSB7CiAgZGlzcGxheTogbm9uZTsKfQouaGlkZS1tb2JpbGUtbmF2LWxpbmsgewogIGRpc3BsYXk6IG5vbmU7Cn0KLm1lbnUtLXRvZ2dsZSB7CiAgbWluLXdpZHRoOiA1MXB4OwogIG1pbi13aWR0aDogMy4xODc1cmVtOwogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXNpemU6IDFyZW07CiAgYmFja2dyb3VuZDogIzAwMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZmlsbDogI2ViZjVmZjsKICBvcmRlcjogMTsKICB3aWR0aDogMTQuMzc1JTsKICB6LWluZGV4OiA3MDAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAubWVudS0tdG9nZ2xlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Ci5tZW51LS10b2dnbGUgc3ZnIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDFlbSBhdXRvOwp9Ci5tZW51LS10b2dnbGU6aG92ZXIsCi5tZW51LS10b2dnbGU6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICNjNzAyYzc7CiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKfQoubm8tZmxleGJveCAubGluay1wcmltYXJ5LmNoYXQ6aG92ZXIgLmxpbmtzLXN1YiwKLm5vLWZsZXhib3ggLmxpbmstcHJpbWFyeS5jaGF0OmZvY3VzIC5saW5rcy1zdWIgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpob3ZlciAubGlua3Mtc3ViIGEsCi5uby1mbGV4Ym94IC5saW5rLXByaW1hcnkuY2hhdDpmb2N1cyAubGlua3Mtc3ViIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwp9Ci5sdGUtaWU5IC5uYXYtbWFpbiAubGlua3Mtc3ViIHsKICBkaXNwbGF5OiBub25lOwp9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OHB4KSBhbmQgKG1heC13aWR0aDogNzAwcHgpIHsKICAubGluay1wcmltYXJ5IC5zZWFyY2gtbGluayB7CiAgICBwYWRkaW5nLXJpZ2h0OiAyZW07CiAgfQogIC5saW5rLXByaW1hcnkgLmFjY291bnQtbGluayB7CiAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICB9Cn0KCi8qIDIuIEZvb3RlciAqLwouZm9vdGVyLW1haW4gewogIGJhY2tncm91bmQ6ICMwMDAgdXJsKC4uLy4uL2ltYWdlcy92aS1zaGFwZTctdHAucG5nKSBuby1yZXBlYXQgMTAlIGNlbnRlcjsKICBmbGV4LXdyYXA6IHdyYXA7CiAgY2xlYXI6IGJvdGg7CiAgd2lkdGg6IDEwMCU7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiB7CiAgICBwYWRkaW5nOiAxLjI1ZW0gMS4zNzVlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiB7CiAgICB3aWR0aDogMTAwJTsKICB9Cn0KLmZvb3Rlci1tYWluIGEgewogIGNvbG9yOiAjZjNmM2YzOwp9Ci5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIGZsZXgtd3JhcDogd3JhcDsKICBwYWRkaW5nOiAyZW0gMCAwOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmlkZW50aXR5IHsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHdpZHRoOiAxMDAlOwogIH0KfQouZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjODA4Mjg1OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjODA4Mjg1OwogIGZsZXgtd3JhcDogd3JhcDsKICBmb250LXNpemU6IDAuODEyNWVtOwogIG1hcmdpbi10b3A6IDJlbTsKICBwYWRkaW5nOiAycmVtIDEuMzc1cmVtOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBmb250LXNpemU6IDAuODc1ZW07CiAgICBtYXJnaW4tdG9wOiAtMjIuNHB4OwogICAgbWFyZ2luLXRvcDogLTEuNHJlbTsKICAgIG1hcmdpbi1sZWZ0OiAxODRweDsKICAgIG1hcmdpbi1sZWZ0OiAxMS41cmVtOwogICAgcGFkZGluZzogMDsKICAgIHotaW5kZXg6IDMwMDA7CiAgfQp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7CiAgLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICBtYXJnaW4tdG9wOiAxLjVyZW07CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgbWFyZ2luLWxlZnQ6IDByZW07CiAgfQp9Ci5mb290ZXItbWFpbiAubGlua3MtcHJpbWFyeSBzcGFuIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNTAlOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbiB7CiAgICBmb250LXdlaWdodDogMzAwOwogICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLmZvb3Rlci1tYWluIC5saW5rcy1wcmltYXJ5IHNwYW46bm90KDpsYXN0LW9mLXR5cGUpOmFmdGVyIHsKICAgIGNvbG9yOiAjZGVkZWRlOwogICAgY29udGVudDogInwiOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLWxlZnQ6IDFlbTsKICB9Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbjpmaXJzdC1vZi10eXBlIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9Cn0KLmZvb3Rlci1tYWluIC5sb2dvLW1pdC1saWIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZpbGw6ICNmZmY7CiAgcGFkZGluZy1sZWZ0OiAxLjM3NWVtOwogIHdpZHRoOiAxMC4zMTI1ZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICAgIG1heC13aWR0aDogOS41ZW07CiAgICB3aWR0aDogOS41ZW07CiAgfQp9Ci5mb290ZXItbWFpbiAubG9nby1taXQtbGliIHN2ZyB7CiAgbWF4LWhlaWdodDogNGVtOwogIG1heC13aWR0aDogOS41ZW07CiAgZmlsbDogI2ZmZjsKfQouZm9vdGVyLW1haW4gLmxvZ28tbWl0LWxpYiB0aXRsZSB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQouZm9vdGVyLW1haW4gLnRleHQtZmluZC11cyB7CiAgY29sb3I6ICNlYmViZWI7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAwLjYyNWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgbWluLXdpZHRoOiA3ZW07Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NjlweCkgewogIC5mb290ZXItbWFpbiAudGV4dC1maW5kLXVzIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KfQouZm9vdGVyLW1haW4gLnNvY2lhbCB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBmbGV4LXdyYXA6IHdyYXA7CiAgcGFkZGluZy1sZWZ0OiAxLjM3NWVtOwogIHdpZHRoOiBhdXRvOwogIG1pbi13aWR0aDogMTJlbTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgewogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBtYXJnaW4tYm90dG9tOiAwLjJlbTsKICAgIHotaW5kZXg6IDQwMDA7CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIGEgewogIHdpZHRoOiAzMyU7Cn0KLmZvb3Rlci1tYWluIC5zb2NpYWwgYTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuZm9vdGVyLW1haW4gLnNvY2lhbCBhIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC5mb290ZXItbWFpbiAuc29jaWFsIGE6bm90KDpsYXN0LW9mLXR5cGUpIHsKICAgIG1hcmdpbi1yaWdodDogMC41ZW07CiAgfQp9Ci5mb290ZXItbWFpbiAuc29jaWFsIFtjbGFzcyo9Imljb24tc29jaWFsIl0gewogIGJhY2tncm91bmQ6ICNkZWRlZGU7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGhlaWdodDogMS41ZW07CiAgcGFkZGluZzogMC4yZW07CiAgd2lkdGg6IDEuNWVtOwp9Ci5mb290ZXItbWFpbiAuc29jaWFsIFtjbGFzcyo9Imljb24tc29jaWFsIl0gcGF0aCB7CiAgZmlsbDogIzQ3NDc0NzsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmZvb3Rlci1tYWluIC5zb2NpYWwgW2NsYXNzKj0iaWNvbi1zb2NpYWwiXSB7CiAgICBoZWlnaHQ6IDJlbTsKICAgIHBhZGRpbmc6IDAuMmVtOwogICAgd2lkdGg6IDJlbTsKICB9Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSB7CiAgYWxpZ24taXRlbXM6IHN0YXJ0OwogIGJhY2tncm91bmQ6ICMzMzM7CiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgcGFkZGluZzogMS4yNWVtIDEuMzc1ZW07Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAubGljZW5zZSB7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1zaXplOiAwLjY4NzVlbTsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXgtd2lkdGg6IDQwMHB4OwogIG1heC13aWR0aDogMjVyZW07Cn0KLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAubGljZW5zZSBhIHsKICBjb2xvcjogI2VkZWRlZDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQouZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saW5rLWxvZ28tbWl0IHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW4tcmlnaHQ6IDUwcHg7CiAgbWFyZ2luLXJpZ2h0OiAzLjEyNXJlbTsKICBtaW4td2lkdGg6IDE1MnB4OwogIG1pbi13aWR0aDogOS41cmVtOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGU6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItaW5mby1pbnN0aXR1dGUgPiBhLAoubm8tZmxleGJveCAuZm9vdGVyLWluZm8taW5zdGl0dXRlID4gZGl2IHsKICBmbG9hdDogbGVmdDsKfQoubm8tZmxleGJveCAuZm9vdGVyLWluZm8taW5zdGl0dXRlIC5saW5rLWxvZ28tbWl0IHsKICBwYWRkaW5nLXRvcDogMS41ZW07Cn0KLm5vLWZsZXhib3ggLmZvb3Rlci1tYWluLmZsZXgtY29udGFpbmVyIHsKICBkaXNwbGF5OiBibG9jazsKICBmbG9hdDogbGVmdDsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW46YWZ0ZXIgewogIGNsZWFyOiBib3RoOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlOwp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMTAwJTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmlkZW50aXR5IC5sb2dvLW1pdC1saWIgewogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0Owp9Ci5uby1mbGV4Ym94IC5mb290ZXItbWFpbiAuaWRlbnRpdHkgLnNvY2lhbCB7CiAgYm90dG9tOiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIHJpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi10b3A6IDA7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbGVmdDogMjAycHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNzlweDsKICB3aWR0aDogMTAwJTsKfQoubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmxpbmtzLXByaW1hcnkgc3BhbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci5uby1mbGV4Ym94LmZsZXhib3hsZWdhY3kgLmZvb3Rlci1tYWluIHsKICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KLmx0ZS1pZTkubm8tZmxleGJveCAuZm9vdGVyLW1haW4gLmlkZW50aXR5IHsKICB3aWR0aDogMTAwJTsKfQoKLyogMy4gbm8tZmxleGJveCBmYWxsYmFja3MgKi8KLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jbGVhciB7CiAgY2xlYXI6IGJvdGgKfQoKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXIgewogIGRpc3BsYXk6IGJsb2NrCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmEsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmJ1dHRvbiwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+ZGl2LAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5mb3JtLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oMSwKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+aDIsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmgzLAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5oZWFkZXIsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPmlucHV0LAoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWNvbnRhaW5lcj5uYXYsCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPnNwYW4sCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyPnN2ZywKLm5vLWZsZXhib3gubm8tZmxleGJveGxlZ2FjeSAuZmxleC1jb250YWluZXI+dWwgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiBhdXRvCn0KCi5uby1mbGV4Ym94Lm5vLWZsZXhib3hsZWdhY3kgLmZsZXgtY29udGFpbmVyOmFmdGVyIHsKICBjbGVhcjogYm90aDsKICBjb250ZW50OiAnJzsKICBkaXNwbGF5OiB0YWJsZQp9Cgoubm8tZmxleGJveC5uby1mbGV4Ym94bGVnYWN5IC5mbGV4LWl0ZW0gewogIGZsb2F0OiBsZWZ0Cn0KCi8qIDQuIGhpZGluZyBhbmQgc2hvd2luZyBlbGVtZW50cyBiYXNlZCBvbiBtb2JpbGUgY2xhc3NlcyAqLwouaGlkZGVuLW1vYmlsZSB7CiAgZGlzcGxheTogbm9uZTsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhpZGRlbi1tb2JpbGUgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQp9Ci5pbmFjdGl2ZS1tb2JpbGUgewogIG9wYWNpdHk6IDA7Cn0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMjFweCkgewogIC5pbmFjdGl2ZS1tb2JpbGUgewogICAgb3BhY2l0eTogMTsKICB9Cn0KLmhpZGRlbi1ub24tbW9iaWxlIHsKICBkaXNwbGF5OiBibG9jazsKfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU2OXB4KSB7CiAgLmhpZGRlbi1ub24tbW9iaWxlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9CgovKiBMb2NhbCBvdmVycmlkZXMgZm9yIGxpYmd1aWRlcyAqLwoKLyogUmVzZXQgb25seSB3aGF0IHlvdSBuZWVkICovCi5oZWFkZXItbWFpbiwKZm9vdGVyIHsKICBtYXgtd2lkdGg6IDExNzBweDsgLyogbWF0Y2hlcyAuY29udGFpbmVyICovCiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luOiAwIGF1dG87Cn0KCi5oZWFkZXItbWFpbiB7CiAgcGFkZGluZzogMCAyMHB4Owp9CgouaGVhZGVyLW1haW4gLm5hbWUtc2l0ZSB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjhweCkgewogIC5oZWFkZXItbWFpbj5bY2xhc3MqPWxpbmtdIHsKICAgIGZvbnQtc2l6ZTogOXB4CiAgfQogIC5oZWFkZXItbWFpbiB7CiAgICBwYWRkaW5nOiAwOwogIH0KICAuaGVhZGVyLW1haW4gLm1lbnUtLXRvZ2dsZSB7CiAgICBtYXJnaW46IGF1dG8gMDsKICB9CiAgLmhlYWRlci1tYWluIC5sb2dvLW1pdC1saWIgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KfQoKLyogVGhlIHJ1bGVzIGluIHRoaXMgbWVkaWEgcXVlcnkgcHJpbWFyaWx5IHNldCBhbGlnbm1lbnQgZm9yIHRoZSBsb2dvcyBhbmQgbmF2ICovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTY5cHgpIHsKICAuaGVhZGVyLW1haW4gewogICAgaGVpZ2h0OiA3NXB4OyAvKiBtYXRjaGVzIGhlaWdodCBvZiBsb2dvcywgaW5jbHVkaW5nIDIwcHggdG9wL2JvdHRvbSBwYWRkaW5nICovCiAgfQogIC5oZWFkZXItbWFpbiAubmFtZS1zaXRlIHsKICAgIG1heC13aWR0aDogMTAwJTsKICB9CiAgLm5hdi1tYWluLAogIC5uYXYtbWFpbiAubmF2LW1haW4tbGlzdCwKICAubmF2LW1haW4gLm5hdi1tYWluLWxpc3QgbGksCiAgLm5hdi1tYWluIC5zbWFsbCBhLAogIC5uYXYtbWFpbiAubWFpbi1uYXYtbGluayB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgfQogIC5oZWFkZXItbWFpbiAubG9nby1taXQtbGliIHsKICAgIHBhZGRpbmc6IDIwcHggMDsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICB9CiAgLm5hdi1tYWluIHsKICAgIG1hcmdpbjogMCAxMHB4OwogIH0KICAuaGVhZGVyLW1haW4gLmxpbmstc2l0ZS1zZWFyY2gsCiAgLmhlYWRlci1tYWluIC5saW5rLWFjY291bnQgewogICAgcGFkZGluZzogMjBweCAwOwogIH0KICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogIH0KICAubmF2LW1haW4gLm1haW4tbmF2LWxpbmsgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMjBweCA4cHg7CiAgfQogIC5oZWFkZXItbWFpbiAubGluay1sb2dvLW1pdCB7CiAgICBkaXNwbGF5OiBub25lCiAgfQp9CgovKiA2MzVweCBpcyB0aGUgbWF4aW11bSB3aWR0aCBiZWZvcmUgdGhlIGxvZ29zIHdpbGwgc2hyaW5rIGlmIGJvdGggYXJlIGRpc3BsYXllZCAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYzNXB4KSB7CiAgLmhlYWRlci1tYWluIC5saW5rLWxvZ28tbWl0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMjBweCAwOwogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIH0KfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAubmF2LW1haW4gLnNtYWxsIGEgewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsgLyogZmxleC1kaXJlY3Rpb24gYW5kIGFsaWdubWVudCBuZWVkcyB0byBjaGFuZ2Ugd2hlbiB0aGUgU1ZHcyBhcmUgaGlkZGVuICovCiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogIH0KfQoKLmhlYWRlci1tYWluIGgyIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIGJhY2tncm91bmQ6IDAgMDsKfQoKLmhlYWRlci1tYWluIHVsIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIGJhY2tncm91bmQ6IDAgMDsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cn0KCmZvb3RlciBhLApoZWFkZXIgYSB7CiAgY29sb3I6ICMwMDA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CmZvb3RlciBhOmhvdmVyLApmb290ZXIgYTpmb2N1cyB7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCmgxI3MtbGctZ3VpZGUtbmFtZSB7CiAgICBmb250LXNpemU6IDMwcHg7Cn0KCi5zLWxpYi1ib3gtY29udGVudCAudWktd2lkZ2V0IHsKICAgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsICJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAxNnB4OyAvKiB3YXMgMTAwJTsgKi8KICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owp9CgoudGFicyBhIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi51aS13aWRnZXQtY29udGVudCBhIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogIzAwMDsKfQoKLnVpLXdpZGdldC1jb250ZW50IGE6aG92ZXIgewogIGNvbG9yOiAjMDBmOwp9Cgp0YWJsZSwgdGgsIHRkIHsKICAgIHBhZGRpbmc6IDVweDsKfQoKI3MtbGctZ3VpZGUtZGVzY3JpcHRpb24sCiNzLWxnLWd1aWRlLWhlYWRlci1zZWFyY2gsCiNzLWxpYi1iYywKI3MtbGctZ3VpZGUtaGVhZGVyLXVwZGF0ZWQsCiNzLWxnLWd1aWRlLWhlYWRlci11cmwsCiNzLWxnLWd1aWRlLXByaW50LXVybCwKI3MtbGctZ3VpZGUtaGVhZGVyLXN1YmplY3RzLAojcy1sZy1ndWlkZS1oZWFkZXItdGFncyB7CiBkaXNwbGF5Ogogbm9uZTsKfQoKI3MtbGctZ3VpZGUtaGVhZGVyIHsKIG1hcmdpbi10b3A6IDE1cHg7Cn0KCiNzLWxnLWd1aWRlLW5hbWUgewogZm9udC13ZWlnaHQ6IDQwMDsKfQoKLnMtbGliLWJveCAucy1saWItYm94LXRpdGxlIHsKIGZvbnQtc2l6ZTogMThweDsKIGNvbG9yOiAjMTExOwp9Cgoucy1saWItYm94IHsKIGNvbG9yOiAjMTExOwp9Cgoucy1saWItYm94LWNvbnRlbnQgewogcGFkZGluZzogMjBweDsKfQoKLyogSGlkZXMgRW1haWwgTWUgYnV0dG9uKi8KLnMtbGliLXByb2ZpbGUtZW1haWwgPiBhIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qSGlkZXMgd2Vic2l0ZSwgU2t5cGUsICYgU29jaWFsIGxpbmtzIGZyb20gcHJvZmlsZSovCi5mYS1ib29rbWFyaywgLmZhLXNreXBlLCAucy1saWItcHJvZmlsZS1zb2NpYWwgewogZGlzcGxheTogbm9uZTsKfQoKLyogT3ZlcnJpZGluZyB0aGUgYWNjb3JkaW9uIG1hcmt1cCB3aXRoIGNoYW5nZWFibGUgYXJyb3dzICovCi5hY2NvcmRpb24tZ3JvdXAgLmFjY29yZGlvbi10b2dnbGUgewogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgYmFja2dyb3VuZDogdXJsKCdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2ltYWdlcy9saWJndWlkZXMtYXJyb3ctZG93bi5wbmcnKSBuby1yZXBlYXQgbGVmdCBjZW50ZXI7CiAgcGFkZGluZy1sZWZ0OiAxNXB4Owp9Ci5hY2NvcmRpb24tZ3JvdXAgLmFjY29yZGlvbi10b2dnbGUuY29sbGFwc2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaW1hZ2VzL2xpYmd1aWRlcy1hcnJvdy1yaWdodC5wbmcnKQp9CgovKiBCYXJ0b25QbHVzIHNlYXJjaCBib3ggKi8KI3MtbGctYm94LTM1MDA5NzQtY29udGFpbmVyIGlucHV0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQojcy1sZy1ib3gtMzUwMDk3NC1jb250YWluZXIgbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbWF4LXdpZHRoOiA4MCU7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLypIaWRlcyBndWlkZSBhdXRob3IsIGxhc3QgdXBkYXRlZCBkYXRlLCBhbmQgbnVtYmVyIG9mIHZpZXdzIHRoaXMgeWVhciBmcm9tIGd1aWRlIGxpc3RzKi8KLnMtbGctc3lzdGVtLWxpc3QgLnMtbGctZ3VpZGUtbGlzdC1pbmZvIHsKIGRpc3BsYXk6IG5vbmU7CiBmb250LXNpemU6IDAuOWVtOwp9CgovKkhpZGVzICJza2lwIHRvIG1haW4gY29udGVudCIgbGluayBpbiB0b3AgbGVmdCBvZiBiYW5uZXIqLwphI3MtbGctcHVibGljLXNraXBsaW5rIHsgCnBvc2l0aW9uOmFic29sdXRlOyAKbGVmdDotMTAwMDBweDsgCnRvcDphdXRvOyAKd2lkdGg6MXB4OyAKaGVpZ2h0OjFweDsgCm92ZXJmbG93OmhpZGRlbjsKfSAKIAphOmZvY3VzI3MtbGctcHVibGljLXNraXBsaW5rIHsgCnBvc2l0aW9uOnN0YXRpYzsgCndpZHRoOmF1dG87IApoZWlnaHQ6YXV0bzsgCn0gCgovKiBzdGFmZiBjb250YWN0IGNhcmQgc3R5bGVzICovCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1pbWFnZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAKICBtYXJnaW4tcmlnaHQ6IDE1cHg7Cn0KCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1pbmZvIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IAogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5jb250YWN0LWNhcmQgLndyYXAtY29udGFjdC1oZWxwIHsKICBkaXNwbGF5OiBibG9jazsKfQoKLyogY3VzdG9taXplIGJyb3d6aW5lIHdpZGdldCAqLwojYnJvd3ppbmVXaWRnZXQgLnNtYWxsV2lkZ2V0IHsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluICFpbXBvcnRhbnQ7Cn0KCiNicm93emluZVdpZGdldCAuc21hbGxXaWRnZXQgLndpZGdldFRleHQgewogIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nOiAxMHB4Owp9CgojYnJvd3ppbmVXaWRnZXQgLndpZGdldFRleHQgLmludHJvIHsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKfQoKLyogY3VzdG9taXplIFdvcmxkY2F0IHNlYXJjaCBib3ggKi8KLnMtbGctYm94LXdyYXBwZXItMjUxOTM2NzEgewogICAgZm9udC1zaXplOiAuOGVtOwp9Ci5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxIC5zLWxpYi1ib3gtY29udGVudCB7CiAgcGFkZGluZzogMCAxZW07Cn0KCi5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxIGlucHV0IHsKICBwYWRkaW5nOiAuNWVtICFpbXBvcnRhbnQ7IAogIG1pbi13aWR0aDogNWVtICFpbXBvcnRhbnQ7IAp9Ci5zLWxnLWJveC13cmFwcGVyLTI1MTkzNjcxICNkaXNjb3Zlcnktc2VhcmNoLWZvcm0gewogIHBhZGRpbmc6IDFlbTsKfQoKLyogU3R5bGluZyBmb3IgQ09WSUQtMTkgaW5mbyBiYW5uZXIgKi8KLmFsZXJ0LWJhbm5lciB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAxcmVtIGF1dG87CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIHBhZGRpbmc6IDEuNnJlbSAycmVtOwogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMDA7CiAgY29sb3I6ICMwMDA7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQouYWxlcnQtYmFubmVyIC5mYSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogMC41ZW07Cn0KPC9zdHlsZT4KCjwhLS0gU3R5bGluZyBmb3IgQS1aIGRhdGFiYXNlcyAtLT4KPHN0eWxlPgovKiBIaWRlIHRoZSBEYXRhYmFzZSBUeXBlcyBkcm9wZG93biAqLwojY29sLXR5cGVzIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLyogSGlkZSB0aGUgVmVuZG9ycyBkcm9wZG93biAqLwojY29sLXZlbmRvcnMgewogICAgZGlzcGxheTogbm9uZTsKfQovKmNoYW5nZSBhIHRvIHogZGF0YWJhc2UgdGl0bGVzIHRvIGJlIGxhcmdlciAqLwojcy1sZy1hei1yZXN1bHRzIC5zLWxnLWF6LXJlc3VsdC10aXRsZSB7CmZvbnQtc2l6ZTogMS4xZW07Cn0KLypjaGFuZ2UgYSB0byB6IGRhdGFiYXNlcyBhbHRlcm5hdGl2ZSB0aXRsZSBzaXppbmcgKi8KZGl2LnMtbGctYXotcmVzdWx0LWtleXdvcmRzIHsKZm9udC1zaXplOiAuOWVtOwp9Ci8qIENoYW5nZSBsZXR0ZXIgaGVhZGluZyBzaXplcyovCmgzLnMtbGctZGItcGFuZWwtdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxLjNlbTsKfQo8L3N0eWxlPgo8c2NyaXB0PgogICAgdmFyIHNwcmluZ1N0YXRzID0gc3ByaW5nU3RhdHMgfHwge307CiAgICBzcHJpbmdTdGF0cy5zYUNvbmZpZyA9IHNwcmluZ1N0YXRzLnNhQ29uZmlnIHx8IHsKICAgICAgICBzaXRlX2lkOiA2OCwKICAgICAgICB0cmFja2luZ19wYXJhbWV0ZXJzOiB7Il9zdF9ndWlkZV9pZCI6ODYxNDYwLCJfc3RfcGFnZV9pZCI6NjE3MzY1MiwiX3N0X3NpdGVfaWQiOjY4fSwKICAgICAgICB0cmFja2luZ19zZXJ2ZXJfaG9zdDogImxpYmd1aWRlcy1wcm9jLnNwcmluZ3lhd3MuY29tIgogICAgfTsKPC9zY3JpcHQ+CjxzY3JpcHQgIHNyYz0iaHR0cHM6Ly9zdGF0aWMtYXNzZXRzLXVzLmxpYmd1aWRlcy5jb20vd2ViL2pzL3NhLm1pbi5qcz8zMTE2Ij48L3NjcmlwdD4KPHNjcmlwdD4KCQkJc3ByaW5nU3BhY2UuQ29tbW9uID0gc3ByaW5nU3BhY2UuQ29tbW9uIHx8IHsgfTsKCQkJc3ByaW5nU3BhY2UuQ29tbW9uLmNvbnN0YW50ID0gewoJCQkJCVBST0NFU1NJTkc6IHsKCQkJCQkJQUNUSU9OX0RJU1BMQVlfUE9MTDogMTU5CgkJCQkJfQoJCQl9OwoJCQlzcHJpbmdTcGFjZS5Db21tb24uYmFzZVVSTCA9ICJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1LyI7CgkJCQoJCQloYW5kbGVTY3JvbGw9ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKCQkJCQl2YXIgdGFyZ2V0X2VsdCA9ICIjcy1sZy1wYWdlLXNlY3Rpb24tNjE3MzY1MiI7CgkJCQkJalF1ZXJ5KCJodG1sLCBib2R5IikuYW5pbWF0ZSh7IHNjcm9sbFRvcDogalF1ZXJ5KHRhcmdldF9lbHQpLm9mZnNldCgpLnRvcCB9LCA3NTApOwoJCQkJCWlmIChqUXVlcnkodGhpcykuc2Nyb2xsVG9wKCkgPiAyMjApIHsKCQkJCQkJalF1ZXJ5KCIjcy1saWItc2Nyb2xsLXRvcCIpLmZhZGVJbig3NTApOwoJCQkJCX0KCQkJCX0KCQkJfQoJICAgPC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgLy8gRW5hYmxlIHRvb2x0aXBzLgogICAgICAgICAgICBqUXVlcnkoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzcHJpbmdTcGFjZS5VSS5pbml0UG9wT3ZlcnMoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgiLmF6LWJzLXRvb2x0aXAiKS50b29sdGlwKCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH0KICAgICAgICAgICAgfSk7CiAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHNwcmluZ1NwYWNlLnNwcmluZ1RyYWNrLnRyYWNrUGFnZSh7X3N0X3R5cGVfaWQ6ICcxJyxfc3RfZ3VpZGVfaWQ6ICc4NjE0NjAnLF9zdF9wYWdlX2lkOiAnNjE3MzY1Mid9KTsKICAgICAgICB9KTsKICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVNjcm9sbCgpOwogICAgICAgICAgICB9KTsKICAgICAgICA8L3NjcmlwdD4KICAgIDwvaGVhZD4KICA8Ym9keSBjbGFzcz0icy1sZy1ndWlkZS1ib2R5Ij4KCjxhIGlkPSJzLWxnLXB1YmxpYy1za2lwbGluayIgY2xhc3M9ImFsZXJ0LWluZm8iIGhyZWY9IiNzLWxnLWd1aWRlLW1haW4iPlNraXAgdG8gTWFpbiBDb250ZW50PC9hPgoKPGhlYWRlciBjbGFzcz0iaGVhZGVyLW1haW4gZmxleC1jb250YWluZXIgZmxleC1lbmQiPgogIDxoMSBjbGFzcz0ibmFtZS1zaXRlIGdyb3VwIG5hdi1sb2dvIj4KICAgIDxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvIiBjbGFzcz0ibG9nby1taXQtbGliIj48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0bGliLXdvcmRtYXJrLnN2ZyIgYWx0PSJNSVQgTGlicmFyaWVzIGxvZ28iIGhlaWdodD0iMzUiPgogICAgPC9hPjwhLS0gRW5kIE1JVCBMaWJyYXJpZXMgTG9nbyAtLT4KICA8L2gxPjwhLS0gRW5kIGRpdi5uYW1lLXNpdGUgLS0+CiAgPGRpdiBjbGFzcz0ibWVudS0tdG9nZ2xlIj48IS0tIE1vYmlsZSBIYW1idXJnZXIgaWNvbiAtLT4KICAgIDxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE4LjkwOXB4IiBoZWlnaHQ9IjEzLjA5MXB4IiB2aWV3Qm94PSIyLjE4MiA2LjU0NSAxOC45MDkgMTMuMDkxIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDIuMTgyIDYuNTQ1IDE4LjkwOSAxMy4wOTEiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0yLjkwOSw2LjU0NWgxNy40NTRjMC4xOTcsMCwwLjM2NywwLjA3MiwwLjUxMiwwLjIxNmMwLjE0NSwwLjE0NCwwLjIxNiwwLjMxNCwwLjIxNiwwLjUxMXMtMC4wNzEsMC4zNjctMC4yMTYsMC41MTEKICAgIGMtMC4xNDUsMC4xNDQtMC4zMTQsMC4yMTYtMC41MTIsMC4yMTZIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTZDMi4yNTQsNy42MzksMi4xODIsNy40NjksMi4xODIsNy4yNzIKICAgIHMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMUMyLjU0Miw2LjYxNywyLjcxMiw2LjU0NSwyLjkwOSw2LjU0NXogTTIwLjM2MywxMy44MThIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTYKICAgIHMtMC4yMTYtMC4zMTQtMC4yMTYtMC41MTFjMC0wLjE5NiwwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMXMwLjMxNC0wLjIxNiwwLjUxMS0wLjIxNmgxNy40NTRjMC4xOTcsMCwwLjM2NywwLjA3MiwwLjUxMiwwLjIxNgogICAgczAuMjE2LDAuMzE0LDAuMjE2LDAuNTExYzAsMC4xOTctMC4wNzEsMC4zNjctMC4yMTYsMC41MTFTMjAuNTYxLDEzLjgxOCwyMC4zNjMsMTMuODE4eiBNMjAuMzYzLDE5LjYzNkgyLjkwOQogICAgYy0wLjE5NywwLTAuMzY3LTAuMDcxLTAuNTExLTAuMjE2cy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMXMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMWMwLjE0NC0wLjE0NSwwLjMxNC0wLjIxNywwLjUxMS0wLjIxN2gxNy40NTQKICAgIGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE3YzAuMTQ1LDAuMTQ0LDAuMjE2LDAuMzE0LDAuMjE2LDAuNTExcy0wLjA3MSwwLjM2Ni0wLjIxNiwwLjUxMVMyMC41NjEsMTkuNjM2LDIwLjM2MywxOS42MzZ6Ii8+CiAgICA8L3N2Zz4KICA8L2Rpdj48IS0tIGVuZCBoYW1idXJnZXIgaWNvbiAtLT4KICA8bmF2IGlkPSJuYXYtbWFpbiIgY2xhc3M9Im5hdi1tYWluIiBhcmlhLWxhYmVsPSJQcmltYXJ5Ij4KICA8dWwgY2xhc3M9Im5hdi1tYWluLWxpc3QgZmxleC1jb250YWluZXIiPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LXNlYXJjaG1lbnUtdGl0bGUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoIiBjbGFzcz0ibm8tdW5kZXJsaW5lIHNlYXJjaC1saW5rIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPlNlYXJjaDwvYT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW51LWNvbnRyb2wgc3IiPlNlYXJjaCBtZW51PC9idXR0b24+CiAgICAgIDwvaDI+CiAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1zZWFyY2htZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtc2VhcmNobWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBncm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KICAgICAgICAgIDxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlN0YXJ0IGhlcmU8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2giPlNlYXJjaCB0b29scyBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC1jb2xsZWN0aW9ucyI+U2VhcmNoIE91ciBDb2xsZWN0aW9ucyA8c3BhbiBjbGFzcz0iYWJvdXQiPkJvb2tzLCBhcnRpY2xlcywgYW5kIG1vcmU8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dvcmxkY2F0Ij5Xb3JsZENhdDxzcGFuIGNsYXNzPSJhYm91dCI+Qm9va3MgJmFtcDsgbW9yZSB3b3JsZHdpZGU8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2F6LnBocCI+RGF0YWJhc2VzIEEtWjxzcGFuIGNsYXNzPSJhYm91dCI+SlNUT1IsIFB1Yk1lZCwgV2ViIG9mIFNjaWVuY2UsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC1yZXNlcnZlcyI+Q291cnNlIHJlc2VydmVzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5BbHNvIHRyeTwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2dvb2dsZS1zY2hvbGFyLXRpcHMiPkdvb2dsZSBTY2hvbGFyIGZvciBNSVQgPHNwYW4gY2xhc3M9ImFib3V0Ij5DaGFuZ2Ugc2V0dGluZ3MgdG8gZ2V0IGJldHRlciBhY2Nlc3M8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2RzcGFjZSI+RFNwYWNlQE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVCByZXNlYXJjaDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZG9tZSI+RG9tZSA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVC1kaWdpdGl6ZWQgaW1hZ2VzLCBtYXBzLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zaXRlLXNlYXJjaCI+U2l0ZSBzZWFyY2g8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PjwhLS0gZW5kIGRpdi5saW5rcy1zdWIgLS0+CiAgICA8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LWhvdXJzbWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9ob3VycyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIGZsZXgtZW5kIj5Ib3VycyAmYW1wOyBsb2NhdGlvbnM8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5Ib3VycyAmYW1wOyBsb2NhdGlvbnMgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtaG91cnNtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIGdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TG9jYXRpb25zPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaG91cnMiPkhvdXJzIGFuZCBsb2NhdGlvbnMgaG9tZTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9iYXJrZXIiPkJhcmtlciBMaWJyYXJ5PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2Rld2V5Ij5EZXdleSBMaWJyYXJ5PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2hheWRlbiI+SGF5ZGVuIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcm90Y2giPlJvdGNoIExpYnJhcnk8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZGlzdGluY3RpdmUtY29sbGVjdGlvbnMiPkRpc3RpbmN0aXZlIENvbGxlY3Rpb25zPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L211c2ljIj5MZXdpcyBNdXNpYyBMaWJyYXJ5PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2xzYSI+TGlicmFyeSBTdG9yYWdlIEFubmV4PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Vc2luZyB0aGUgTGlicmFyaWVzPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvbG9jYXRpb25zIj5NYXAgb2YgbG9jYXRpb25zPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3N0dWR5Ij5TdHVkeSBzcGFjZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZGlzYWJpbGl0aWVzIj5QZXJzb25zIHdpdGggZGlzYWJpbGl0aWVzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvcHlpbmciPlNjYW4gJmFtcDsgcHJpbnQ8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXhoaWJpdHMiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS92aXNpdG9ycyI+VmlzaXRvcnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvdXNlLXBvbGljaWVzIj5MaWJyYXJ5IHVzZSBwb2xpY3k8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PjwhLS0gZW5kIGRpdi5saW5rcy1zdWIgLS0+CiAgICA8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LWJvcnJvd21lbnUtdGl0bGUiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYm9ycm93IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPkJvcnJvdyAmYW1wOyByZXF1ZXN0PC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbnUtY29udHJvbCBzciI+Qm9ycm93ICZhbXA7IHJlcXVlc3QgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LWJvcnJvd21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5SZW5ldywgcmVxdWVzdCwgc3VnZ2VzdDwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2JvcnJvdyI+Qm9ycm93ICZhbXA7IHJlcXVlc3QgaG9tZTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2NvdW50cyI+QWNjb3VudHMgb3ZlcnZpZXcgPHNwYW4gY2xhc3M9ImFib3V0Ij5Zb3VyIEFjY291bnQsIElMTGlhZCwgQWVvbiwgZXRjLjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvc2VhcmNoLWNvbGxlY3Rpb25zIj5TZWFyY2ggT3VyIENvbGxlY3Rpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBvd25lZCBieSBNSVQ8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dvcmxkY2F0Ij5Xb3JsZENhdCA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgbm90IG93bmVkIGJ5IE1JVDwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvaWxsaWFkIj5JTExpYWQgPHNwYW4gY2xhc3M9ImFib3V0Ij5UcmFjayB5b3VyIEludGVybGlicmFyeSBCb3Jyb3dpbmcgcmVxdWVzdHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3N1Z2dlc3QtcHVyY2hhc2UiPlN1Z2dlc3QgYSBwdXJjaGFzZTwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TW9yZSBpbmZvcm1hdGlvbjwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYm9ycm93LWRpcmVjdCI+Qm9ycm93IERpcmVjdCA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgZnJvbSBIYXJ2YXJkLCBZYWxlLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9vdGhlcmxpYnJhcmllcyI+VmlzaXQgbm9uLU1JVCBsaWJyYXJpZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5IYXJ2YXJkLCBCb3Jyb3cgRGlyZWN0LCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2xpPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LXJlc2VhcmNobWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPlJlc2VhcmNoIHN1cHBvcnQ8L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5SZXNlYXJjaCBzdXBwb3J0IG1lbnU8L2J1dHRvbj4KICAgICAgPC9oMj4KICAgICAgPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LXJlc2VhcmNobWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LXJlc2VhcmNobWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBwdXNoIGdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+SGVscCAmYW1wOyB1c2VmdWwgdG9vbHM8L2gzPgogICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0Ij5SZXNlYXJjaCBzdXBwb3J0IGhvbWU8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXNrIj5Bc2sgdXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5FbWFpbCwgY2hhdCwgY2FsbCwgZHJvcCBieTwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvZXhwZXJ0cyI+UmVzZWFyY2ggZ3VpZGVzICZhbXA7IGV4cGVydCBsaWJyYXJpYW5zIDxzcGFuIGNsYXNzPSJhYm91dCI+Rm9yIGV2ZXJ5IHJlc2VhcmNoIGludGVyZXN0PC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hdXRoZW50aWNhdGUiPkF1dGhlbnRpY2F0ZSB0byBvbmxpbmUgcmVzb3VyY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+VGlwcyAmYW1wOyB0cmlja3M8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5QdWJsaXNoaW5nICZhbXA7IGNvbnRlbnQgbWFuYWdlbWVudDwvaDM+CiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3JlZmVyZW5jZXMiPkNpdGF0aW9uICZhbXA7IHdyaXRpbmcgdG9vbHMgPHNwYW4gY2xhc3M9ImFib3V0Ij5NZW5kZWxleSwgWm90ZXJvLCAmYW1wOyBPdmVybGVhZjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY2l0aW5nIj5DaXRpbmcgc291cmNlcyA8c3BhbiBjbGFzcz0iYWJvdXQiPkF2b2lkIHBsYWdpYXJpc20sIGZvcm1hdCByZWZlcmVuY2VzLCBldGMuPC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9kYXRhLXNlcnZpY2VzIj5EYXRhIHNlcnZpY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+R0lTLCBkYXRhIG1hbmFnZW1lbnQsIHN0YXRpc3RpY2FsIHN1cHBvcnQ8L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NjaG9sYXJseSI+U2Nob2xhcmx5IGNvbW11bmljYXRpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+T3BlbiBhY2Nlc3MsIGNvcHlyaWdodCwgJmFtcDsgcHVibGlzaGluZzwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBpcyI+QVBJcyBmb3Igc2Nob2xhcmx5IHJlc291cmNlczwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CiAgICAgIDxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KICAgICAgICA8YSBpZD0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2Fib3V0IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgZmxleC1lbmQiPkFib3V0PC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbnUtY29udHJvbCBzciI+QWJvdXQgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYWJvdXRtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CiAgICAgICAgICA8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5BYm91dCB0aGUgTGlicmFyaWVzPC9oMz4KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWJvdXQvIj5BYm91dCB1cyBob21lPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvbnRhY3QiPkNvbnRhY3QgdXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvam9icyI+Sm9iczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9naXZpbmciPkdpdmluZyB0byB0aGUgTUlUIExpYnJhcmllczwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgogICAgICAgICAgPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TmV3cywgZXZlbnRzLCAmYW1wOyBleGhpYml0czwvaDM+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2V2ZW50cyI+Q2xhc3NlcyAmYW1wOyBldmVudHM8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L25ld3MiPk5ld3M8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2V4aGliaXRzIj5FeGhpYml0cyAmYW1wOyBnYWxsZXJpZXM8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L25ld3MvaW4tdGhlLW1lZGlhIj5JbiB0aGUgbWVkaWE8L2E+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L21pdC1yZWFkcy8iPk1JVCBSZWFkczwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KICAgIDwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CiAgICA8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCBzbWFsbCBjaGF0IHB1c2giPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaWQ9Im1haW4tbmF2LWFza3VzbWVudS10aXRsZSIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hc2siIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayI+PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNi41OTNweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYuNTkzIDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNi41OTMgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0xNi41OTMgNi4yNzhjMCAxLjA3NC0wLjA3NCAyLjE0OC0wLjI0MSAzLjE4NSAtMC4yMDQgMS4zNTMtMS43MjIgMi41NzQtMy4wNTUgMi43MjIgLTEuMzUzIDAuMTMxLTIuNjg2IDAuMjA0LTQuMDIgMC4yMjNMNS43NCAxNS44MzNDNS42MyAxNS45NDQgNS40ODEgMTYgNS4zMzQgMTZjLTAuMDk0IDAtMC4xNjctMC4wMTktMC4yNDEtMC4wMzdDNC44NzEgMTUuODcgNC43NCAxNS42NDcgNC43NCAxNS40MDdWMTIuMzdjLTAuNDgxLTAuMDM2LTAuOTYzLTAuMDU1LTEuNDQzLTAuMTExIC0xLjMzNC0wLjE0OC0yLjg1My0xLjQ0My0zLjA3NC0yLjc5NkMwLjA3NCA4LjQyNiAwIDcuMzUyIDAgNi4yOTZjMC0xLjA5MiAwLjA3NC0yLjE4NSAwLjIyMy0zLjI0IDAuMjIyLTEuMzUyIDEuNzQtMi42NDggMy4wNzQtMi43OTdDNC45NjMgMC4wOTMgNi42MyAwIDguMjk3IDBzMy4zMzMgMC4wOTMgNSAwLjI1OWMxLjMzMyAwLjE0OSAyLjg1MSAxLjQ0NSAzLjA1NSAyLjc5N0MxNi41MTkgNC4xMTEgMTYuNTkzIDUuMjA0IDE2LjU5MyA2LjI3OCIvPjwvc3ZnPjxzcGFuPkFzayBVczwvc3Bhbj48L2E+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVudS1jb250cm9sIHNyIj5Bc2sgdXMgbWVudTwvYnV0dG9uPgogICAgICA8L2gyPgogICAgICA8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYXNrdXNtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYXNrdXNtZW51IiBjbGFzcz0ibGlua3Mtc3ViIHB1c2giPgogICAgICAgIDxkaXYgY2xhc3M9IndyYXAtYnV0dG9uLWNoYXQiPgogICAgICAgIDxkaXYgaWQ9J2xpYmNoYXRfYmUyYzY1NGI2M2RkNDNmMzFjNTYyOTVlZTVkNzhkODgnPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxhIGNsYXNzPSJtb3JlIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FzayI+TW9yZSB3YXlzIHRvIGFzayB1czwvYT4KICAgICAgPC9kaXY+CiAgICA8L2xpPgogICAgPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQgc21hbGwiPgogICAgICA8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2NvdW50cyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIGFjY291bnQtbGluayI+CiAgICAgICAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUuNCIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE1LjQgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE1LjQ0NSAxNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEzLjQgMTUuN0MxMi4yIDE1LjkgMTAuNCAxNiA3LjcgMTZjLTUuNCAwLTcuMy0wLjYtNy4zLTAuNiAtMC4zLTAuMS0wLjQtMC40LTAuNC0wLjcgMC4zLTEuNiAxLjItMi41IDIuNS0zLjMgMC4zLTAuMiAwLjgtMC40IDEuMi0wLjYgMC44LTAuMyAxLjgtMC43IDItMS4zQzUuOCA5LjIgNS43IDguNiA1LjIgNy45Yy0xLjQtMi4zLTEuNy00LjMtMC44LTUuOUM1LjEgMC43IDYuNCAwIDcuNyAwYzEuNCAwIDIuNiAwLjcgMy4zIDIgMC45IDEuNiAwLjcgMy42LTAuOCA1LjlDOS44IDguNiA5LjYgOS4yIDkuOCA5LjZjMC4yIDAuNiAxLjIgMSAyIDEuMyAwLjQgMC4yIDAuOSAwLjQgMS4yIDAuNiAxLjIgMC44IDIuMSAxLjYgMi41IDMuMyAwLjEgMC4zLTAuMSAwLjYtMC40IDAuN0MxNSAxNS40IDE0LjUgMTUuNiAxMy40IDE1LjciLz48L3N2Zz48c3Bhbj5BY2NvdW50PC9zcGFuPgogICAgICAgIDwvYT4KICAgICAgPC9oMj4KICAgIDwvbGk+CiAgPC91bD4KICA8L25hdj4KICA8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cDovL3d3dy5taXQuZWR1Ij48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0X2xvZ29fc3RkX3JnYl93aGl0ZS5zdmciIGFsdD0iTUlUIGxvZ28iIGhlaWdodD0iMzUiPjwvYT4KICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaCIgY2xhc3M9Imxpbmstc2l0ZS1zZWFyY2ggaGlkZGVuLW5vbi1tb2JpbGUiPgogICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEyIiBhbHQ9InNlYXJjaCIgY2xhc3M9Imljb24tc2VhcmNoIj48cGF0aCBkPSJNNy4yNzMgMC43MjdxMS4xODcgMCAyLjE5IDAuNTg1dDEuNTg4IDEuNTg4IDAuNTg1IDIuMTktMC41ODUgMi4xOS0xLjU4OCAxLjU4OC0yLjE5IDAuNTg1cS0xLjI3OCAwLTIuMzMtMC42NzZsLTMuMjg0IDMuMzAxcS0wLjI5NSAwLjI4NC0wLjY4OCAwLjI4NC0wLjQwMyAwLTAuNjg4LTAuMjg0dC0wLjI4NC0wLjY4OCAwLjI4NC0wLjY4OGwzLjMwMS0zLjI4NHEtMC42NzYtMS4wNTEtMC42NzYtMi4zMyAwLTEuMTg4IDAuNTg1LTIuMTl0MS41ODgtMS41ODggMi4xOS0wLjU4NXpNNy4yNzMgOHEwLjU5MSAwIDEuMTI4LTAuMjN0MC45MjktMC42MjIgMC42MjItMC45MjkgMC4yMy0xLjEyOC0wLjIzLTEuMTI4LTAuNjIyLTAuOTI5LTAuOTI5LTAuNjIyLTEuMTI4LTAuMjMtMS4xMjggMC4yMy0wLjkyOSAwLjYyMi0wLjYyMiAwLjkyOS0wLjIzIDEuMTI4IDAuMjMgMS4xMjggMC42MjIgMC45MjkgMC45MjkgMC42MjIgMS4xMjggMC4yM3oiPjwvcGF0aD4KICAgIDwvc3ZnPgogICAgPHNwYW4gY2xhc3M9ImJvdHRvbSI+U2VhcmNoPC9zcGFuPgogIDwvYT4KICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY291bnRzIiBjbGFzcz0ibGluay1hY2NvdW50IGhpZGRlbi1ub24tbW9iaWxlIj4KICAgIDxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0iaWNvbi1hY2NvdW50Ij48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPgogICAgPHNwYW4gY2xhc3M9ImJvdHRvbSI+QWNjb3VudDwvc3Bhbj4KICA8L2E+Cgo8L2hlYWRlcj4KCgo8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlciIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1oZWFkZXIgcy1saWItc2lkZS1ib3JkZXJzIj4KICAgIDxuYXYgaWQ9InMtbGliLWJjIiBhcmlhLWxhYmVsPSJicmVhZGNydW1iIj4KICAgICAgICA8b2wgaWQ9InMtbGliLWJjLWxpc3QiIGNsYXNzPSJicmVhZGNydW1iIj48bGkgaWQ9InMtbGliLWJjLWN1c3RvbWVyIiBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1Ij5NSVQ8L2E+PC9saT48bGkgaWQ9InMtbGliLWJjLXNpdGUiIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvIj5MaWJHdWlkZXM8L2E+PC9saT48bGkgaWQ9InMtbGliLWJjLWd1aWRlIiBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2Rhd24iPk1JVCBSZWFkczogRGF3biBieSBPY3RhdmlhIEJ1dGxlcjwvYT48L2xpPjxsaSBpZD0icy1saWItYmMtcGFnZSIgY2xhc3M9ImFjdGl2ZSBicmVhZGNydW1iLWl0ZW0iPkJvb2s8L2xpPjwvb2w+CiAgICA8L25hdj4KCiAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci1zZWFyY2giPgogICAgICAgICAgICAKPGRpdiBpZD0icy1sZy1ndWlkZS1zZWFyY2gtYm94Ij4KICAgIDxmb3JtIHJvbGU9InNlYXJjaCIgaWQ9InMtbGctZ3VpZGUtc2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9zcmNoLnBocCIgbWV0aG9kPSJHRVQiPgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtIj4KICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIgCiAgICAgICAgICAgICAgICBpZD0icy1sZy1ndWlkZS1zZWFyY2gtdGVybXMiIAogICAgICAgICAgICAgICAgbmFtZT0icSIgCiAgICAgICAgICAgICAgICBjbGFzcz0iZm9ybS1jb250cm9sIgogICAgICAgICAgICAgICAgbWF4bGVuZ3RoPSIyNjAiIAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCB0aGlzIEd1aWRlIj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InNyLW9ubHkiIGZvcj0icy1sZy1ndWlkZS1zZWFyY2gtdGVybXMiPlNlYXJjaCB0aGlzIEd1aWRlPC9sYWJlbD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJndWlkZV9pZCIgdmFsdWU9Ijg2MTQ2MCI+CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHR5cGU9InN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgU2VhcmNoCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgPC9mb3JtPgo8L2Rpdj4KCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWhlYWRlci1pbmZvIj4KICAgICAgICA8aDEgaWQ9InMtbGctZ3VpZGUtbmFtZSI+TUlUIFJlYWRzOiBEYXduIGJ5IE9jdGF2aWEgQnV0bGVyOiBCb29rPC9oMT4KICAgICAgICA8ZGl2IGlkPSJzLWxnLWd1aWRlLWRlc2MtY29udGFpbmVyIj4KICAgICAgICAgICAgPHNwYW4gaWQ9InMtbGctZ3VpZGUtZGVzY3JpcHRpb24iPkRhd24gaXMgdGhlIGZpcnN0IGJvb2sgaW4gQnV0bGVyJ3MgWGVub2dlbmVzaXMgc2VyaWVzLjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctdGFicy1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIHBhZC10b3AtbWVkIj4KICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicyIgY2xhc3M9InRhYnMiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ikd1aWRlIFBhZ2VzIj4KICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyBzcGxpdC1idXR0b24tbmF2Ij4KICAgICAgICAgICAgCgoKICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KICAgICAgICA8YSB0aXRsZT0iIiBjbGFzcz0iYWN0aXZlIiAKICAgICAgICAgICBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9ODYxNDYwJmFtcDtwPTYxNzM2NTIiIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgPgogICAgICAgICAgICA8c3Bhbj5Cb29rPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKCgogICAgPGxpIGNsYXNzPSIiPgogICAgICAgIDxhIHRpdGxlPSIiIGNsYXNzPSIiIAogICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz04NjE0NjAmYW1wO3A9NjI4NzIyMyIgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuPk9jdGF2aWEgRS4gQnV0bGVyPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICAgICAgCiAgICA8L2xpPgoKCgogICAgPGxpIGNsYXNzPSIiPgogICAgICAgIDxhIHRpdGxlPSIiIGNsYXNzPSIiIAogICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYy5waHA/Zz04NjE0NjAmYW1wO3A9NjI4NzIyNCIgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuPkFmcm9mdXR1cmlzbTwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgICAgIAogICAgPC9saT4KCgoKICAgIDxsaSBjbGFzcz0iIj4KICAgICAgICA8YSB0aXRsZT0iIiBjbGFzcz0iIiAKICAgICAgICAgICBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9ODYxNDYwJmFtcDtwPTYyODcyMzEiIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgPgogICAgICAgICAgICA8c3Bhbj5Pbi1DYW1wdXMgRXhoaWJpdGlvbjwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgICAgIAogICAgPC9saT4KCiAgICAgICAgPC91bD4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtdGFicy10aXRsZS1iYXIiIGNsYXNzPSJjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIj48L2Rpdj4KCjxkaXYgaWQ9InMtbGctZ3VpZGUtbWFpbiIgY2xhc3M9ImNvbnRhaW5lciBzLWxpYi1tYWluIHMtbGliLXNpZGUtYm9yZGVycyIgdGFiaW5kZXg9Ii0xIj4KICAgIAogICAgPGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xMjYiIGNsYXNzPSJjb2wtbWQtMTIiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIHMtbGctYm94LXNwZWNpYWwiPjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMjM0OTE0MjkiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTIzNDkxNDI5Ij4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjAwMTQ4NTMtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjAwMTQ4NTMiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCBzLWxpYi1mbG9hdGluZy1ib3giPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0yMDAxNDg1MyIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQgcy1saWItZmxvYXRpbmctYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctY29udGVudC00NDY0ODQ3MCIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPGJsb2NrcXVvdGU+CjxwPiZsZHF1bztCdXRsZXIgc2V0cyB0aGUgaW1hZ2luYXRpb24gZnJlZSwgYmxlbmRpbmcgdGhlIHJlYWwgYW5kIHRoZSBwb3NzaWJsZS4mcmRxdW87ICZtZGFzaDs8ZW0+VW5pdGVkIFByZXNzIEludGVybmF0aW9uYWw8L2VtPjwvcD4KPC9ibG9ja3F1b3RlPgoKICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icm93IHMtbGctcm93Ij48ZGl2IGlkPSJzLWxnLWNvbC0xIiBjbGFzcz0iY29sLW1kLTkiPjxkaXYgY2xhc3M9InMtbGctY29sLWJveGVzIj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTIzNTEwNTE4IiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci0yMzUxMDUxOCI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTIwMDMxMDgwLWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTIwMDMxMDgwIiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIFN1bW1hcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMjAwMzEwODAiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNDQ2ODU0MDciIGNsYXNzPSIgIGNsZWFyZml4Ij4KICAgIDxoNCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsZ2VuZXZhLHNhbnMtc2VyaWY7Ij4mcXVvdDsmIzM5O0ludGVsbGlnZW5jZSBkb2VzIGVuYWJsZSB5b3UgdG8gZGVueSBmYWN0cyB5b3UgZGlzbGlrZS4gQnV0IHlvdXIgZGVuaWFsIGRvZXNuJnJzcXVvO3QgbWF0dGVyLiYjMzk7JnF1b3Q7Jm5ic3A7PC9zcGFuPjwvaDQ+Cgo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsZ2VuZXZhLHNhbnMtc2VyaWY7Ij4tLSZuYnNwO09jdGF2aWEgRS4gQnV0bGVyLCZuYnNwOzxlbT5EYXduPC9lbT48L3NwYW4+PC9wPgoKPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxnZW5ldmEsc2Fucy1zZXJpZjsiPkxpbGl0aCBseWFwbyBhd29rZSBmcm9tIGEgY2VudHVyaWVzLWxvbmcgc2xlZXAgdG8gZmluZCBoZXJzZWxmIGFib2FyZCB0aGUgdmFzdCBzcGFjZXNoaXAgb2YgdGhlIE9hbmthbGkuIENyZWF0dXJlcyBjb3ZlcmVkIGluIHdyaXRoaW5nIHRlbnRhY2xlcywgdGhlIE9hbmthbGkgaGFkIHNhdmVkIGV2ZXJ5IHN1cnZpdmluZyBodW1hbiBmcm9tIGEgZHlpbmcsIHJ1aW5lZCBFYXJ0aC4gVGhleSBoZWFsZWQgdGhlIHBsYW5ldCwgY3VyZWQgY2FuY2VyLCBpbmNyZWFzZWQgc3RyZW5ndGgsIGFuZCB3ZXJlIG5vdyByZWFkeSB0byBoZWxwIExpbGl0aCBsZWFkIGhlciBwZW9wbGUgYmFjayB0byBFYXJ0aCZtZGFzaDtidXQgZm9yIGEgcHJpY2UuPC9zcGFuPjwvcD4KCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+PGltZyBhbHQ9IkNyb3Agb2YgRGF3biBjb3ZlciBhcnQgYnkgSm9obiBKdWRlIFBhbGVuY2FyIiBzcmM9Ii8vbGliYXBwcy5zMy5hbWF6b25hd3MuY29tL2FjY291bnRzLzMwNDc5L2ltYWdlcy9EYXduUGFsbGVuY2FyLWNyb3AuanBnIiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IiAvPjwvcD4KCgogICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48ZGl2IGlkPSJzLWxnLWJveC13cmFwcGVyLTIzNTEwNTIwIiBjbGFzcz0icy1sZy1ib3gtd3JhcHBlci0yMzUxMDUyMCI+CgoKICAgIDxkaXYgaWQ9InMtbGctYm94LTIwMDMxMDgyLWNvbnRhaW5lciIgY2xhc3M9InMtbGliLWJveC1jb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InMtbGctYm94LTIwMDMxMDgyIiBjbGFzcz0icy1saWItYm94IHMtbGliLWJveC1zdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJzLWxpYi1ib3gtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIERpc2N1c3Npb24gUHJvbXB0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWJveC1jb2xsYXBzZS0yMDAzMTA4MiIgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icy1saWItYm94LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctY29udGVudC00NTM0NzM0NyIgY2xhc3M9IiAgY2xlYXJmaXgiPgogICAgPG9sPgoJPGxpPkFyZSB0aGUgT2Fua2FsaSBoZWxwaW5nIHRoZSBodW1hbnM/PC9saT4KCTxsaT5XaHkgZG8gdGhlIE9hbmthbGkgZm9yYmlkIExpbGl0aCB3cml0aW5nIGltcGxlbWVudHM/Jm5ic3A7PC9saT4KCTxsaT5JZiB5b3Ugd2VyZSBpbiBMaWxpdGgmIzM5O3MgcG9zaXRpb24sIHdoYXQgd291bGQgeW91IHRha2UgaW50byBjb25zaWRlcmF0aW9uIHdoZW4gY2hvb3Npbmcgd2hvIHRvIEF3YWtlbj88L2xpPgoJPGxpPkpkYWh5YSBzZWVzIGh1bWFuaXR5JiMzOTtzICZxdW90O3R3byBpbmNvbXBhdGlibGUgY2hhcmFjdGVyaXN0aWNzJnF1b3Q7IC0tIGJlaW5nIGJvdGggaW50ZWxsaWdlbnQgYW5kIGhpZXJhcmNoaWNhbCAtLSBhcyBiZWluZyB0aGUgc291cmNlIG9mIG91ciBwcm9ibGVtcy4mbmJzcDsgV2hhdCBkbyB5b3UgdGhpbmsgb2YgdGhpcyBhc3Nlc3NtZW50IG9mIGh1bWFuaXR5PyZuYnNwOzwvbGk+Cgk8bGk+V2h5IGRvZXMgQnV0bGVyJiMzOTtzIHdvcmsgY29udGludWUgdG8gcmVzb25hdGUgc28gcG93ZXJmdWxseSB0b2RheT88L2xpPgo8L29sPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgaWQ9InMtbGctY29sLTIiIGNsYXNzPSJjb2wtbWQtMyI+PGRpdiBjbGFzcz0icy1sZy1jb2wtYm94ZXMiPjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMjM1MTA1MjEiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTIzNTEwNTIxIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjAwMzEwODMtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjAwMzEwODMiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgU2VyaWVzIEFkYXB0YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtY29sbGFwc2UtMjAwMzEwODMiID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InMtbGliLWJveC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzLWxnLWNvbnRlbnQtNDQ2ODU0MTMiIGNsYXNzPSIgIGNsZWFyZml4Ij4KICAgIDxwPjxpbWcgYWx0PSIiIHNyYz0iLy9saWJhcHBzLnMzLmFtYXpvbmF3cy5jb20vYWNjb3VudHMvMzA0NzkvaW1hZ2VzL0F2YV9EdVZlcm5heV8yMDE1LmpwZyIgc3R5bGU9IndpZHRoOiAxNDRweDsgaGVpZ2h0OiAyMDBweDsiIC8+PC9wPgoKPHA+QXZhIER1VmVybmF5ICg8ZW0+U2VsbWEsIEEgV3JpbmtsZSBpbiBUaW1lPC9lbT4pJm5ic3A7d2lsbCBiZSBkaXJlY3RpbmcgYW5kIGV4ZWN1dGl2ZSBwcm9kdWNpbmcmbmJzcDs8ZW0+RGF3bjwvZW0+Jm5ic3A7YXMgYSB0ZWxldmlzaW9uIHNlcmllcyZuYnNwOy0tIHRoZSBmaXJzdCB3b3JrIGJ5IEJ1dGxlciB0byBiZSBhZGFwdGVkIGZvciB0aGUgc2NyZWVuLiZuYnNwOzwvcD4KCjxwPlJlYWQgbW9yZSBhYm91dCBsYXN0IHllYXImIzM5O3MmbmJzcDthbm5vdW5jZW1lbnQgYXQgVG9yJiMzOTtzIHdlYnNpdGUsIGFuZCBsZWFybiBhYm91dCBBdmEgRHVWZXJuYXkmIzM5O3MgdmlzaW9uIGFuZCBzdG9yeSwgY2hlY2sgb3V0IGhlcjxhIGhyZWY9Imh0dHA6Ly93d3cuYXZhZHV2ZXJuYXkuY29tLyIgdGFyZ2V0PSJfYmxhbmsiPiB3ZWJzaXRlPC9hPiBhbmQ8YSBocmVmPSJodHRwczovL3d3dy53aXJlZC5jb20vc3RvcnkvYXZhLWR1dmVybmF5LWNyZWF0b3Itb2Ytd29ybGRzLyIgdGFyZ2V0PSJfYmxhbmsiPiBpbnRlcnZpZXcgd2l0aCBXaXJlZC48L2E+PC9wPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9InMtbGctYm94LXdyYXBwZXItMjM1MTA1MjIiIGNsYXNzPSJzLWxnLWJveC13cmFwcGVyLTIzNTEwNTIyIj4KCgogICAgPGRpdiBpZD0icy1sZy1ib3gtMjAwMzEwODQtY29udGFpbmVyIiBjbGFzcz0icy1saWItYm94LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ib3gtMjAwMzEwODQiIGNsYXNzPSJzLWxpYi1ib3ggcy1saWItYm94LXN0ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InMtbGliLWJveC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgTWFpbiBDaGFyYWN0ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InMtbGctYm94LWNvbGxhcHNlLTIwMDMxMDg0IiA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzLWxpYi1ib3gtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icy1sZy1jb250ZW50LTQ0Njg1NDE0IiBjbGFzcz0iICBjbGVhcmZpeCI+CiAgICA8cD48c3Ryb25nPkh1bWFuczwvc3Ryb25nPjwvcD4KCjx1bD4KCTxsaT5MaWxpdGggSXlhcG88L2xpPgoJPGxpPkpvc2VwaCBTaGluZzwvbGk+Cgk8bGk+VGF0ZSBNYXJhaDwvbGk+Cgk8bGk+R2FicmllbCBSaW5hbGRpPC9saT4KCTxsaT5DdXJ0IExvZWhyPC9saT4KPC91bD4KCjxwPjxzdHJvbmc+T2Fua2FsaTwvc3Ryb25nPjwvcD4KCjx1bD4KCTxsaT5KZGFoeWE8L2xpPgoJPGxpPlRlZGlpbjwvbGk+Cgk8bGk+TmlrYW5qPC9saT4KCTxsaT5LYWhndXlhaHQ8L2xpPgo8L3VsPgoKCiAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJvdyBzLWxnLXJvdyI+PGRpdiBpZD0icy1sZy1jb2wtMTI3IiBjbGFzcz0iY29sLW1kLTEyIj48ZGl2IGNsYXNzPSJzLWxnLWNvbC1ib3hlcyI+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8dWwgaWQ9InMtbGctcGFnZS1wcmV2bmV4dCIgY2xhc3M9InBhZ2VyIHMtbGliLWhpZGUiPgogICAgPGxpIGNsYXNzPSJwcmV2aW91cyI+CiAgICAgICAgCiAgICA8L2xpPgogICAgPGxpIGNsYXNzPSJuZXh0Ij4KICAgICAgICA8YSBjbGFzcz0icGFnZS1saW5rIiBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2MucGhwP2c9ODYxNDYwJnA9NjI4NzIyMyI+PHN0cm9uZz5OZXh0Ojwvc3Ryb25nPiBPY3RhdmlhIEUuIEJ1dGxlciAmZ3Q7Jmd0OzwvYT4KICAgIDwvbGk+CjwvdWw+CgoKPC9kaXY+Cgo8ZGl2IGlkPSJzLWxpYi1mb290ZXItcHVibGljIiBjbGFzcz0icy1saWItZm9vdGVyIGZvb3RlciBjb250YWluZXIgcy1saWItc2lkZS1ib3JkZXJzIj4KICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLW1ldGEiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBjbGVhcmZpeCI+CiAgICAgICAgPHVsIGlkPSJzLWxnLWd1aWRlLWhlYWRlci1hdHRyaWJ1dGVzIj4KICAgICAgICAgICAgPGxpIGlkPSJzLWxnLWd1aWRlLWhlYWRlci11cGRhdGVkIiBjbGFzcz0icy1sZy1oLXNlcGFyYXRvciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icy1sZy1ndWlkZS1sYWJlbCI+TGFzdCBVcGRhdGVkOjwvc3Bhbj4gPHNwYW4gY2xhc3M9InMtbGctdGV4dC1ncmV5b3V0Ij5KYW4gMzAsIDIwMjIgMjo1NyBQTTwvc3Bhbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpIGlkPSJzLWxnLWd1aWRlLWhlYWRlci11cmwiIGNsYXNzPSJzLWxnLWgtc2VwYXJhdG9yIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzLWxnLWd1aWRlLWxhYmVsIj5VUkw6PC9zcGFuPiA8c3BhbiBjbGFzcz0icy1sZy10ZXh0LWdyZXlvdXQiPmh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZGF3bjwvc3Bhbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpIGlkPSJzLWxnLWd1aWRlLXByaW50LXVybCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OiB3aW5kb3cucHJpbnQoKTsiPjxpIGNsYXNzPSJmYSBmYS1wcmludCIgYXJpYS1oaWRkZW49InRydWUiIHRpdGxlPSJQcmludCBQYWdlIj48L2k+IFByaW50IFBhZ2U8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KCiAgICAgICAgPGRpdiBpZD0icy1saWItZm9vdGVyLWxvZ2luLWxpbmsiIGNsYXNzPSJwdWxsLXJpZ2h0IHBhZC1yaWdodC1tZWQiPgogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL21pdC5saWJhcHBzLmNvbS9saWJhcHBzL2xvZ2luLnBocD9zaXRlX2lkPTY4JnRhcmdldDY0PUwyeHBZbWQxYVdSbGN5OWhaRzFwYmw5akxuQm9jRDluUFRnMk1UUTJNQ1p3UFRZeE56TTJOVEk9Ij5Mb2dpbiB0byBMaWJBcHBzPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0icGFkLWJvdHRvbS1zbSBjbGVhcmZpeCI+CiAgICAgICAgPGRpdiBpZD0icy1sZy1ndWlkZS1oZWFkZXItc3ViamVjdHMiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBwYWQtcmlnaHQtbWVkIHB1bGwtbGVmdCI+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InMtbGctZ3VpZGUtaGVhZGVyLXRhZ3MiIGNsYXNzPSJwYWQtdG9wLXNtIHBhZC1sZWZ0LW1lZCBwdWxsLWxlZnQiPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzLWxpYi1mb290ZXItc3VwcG9ydC1saW5rIiBjbGFzcz0icHVsbC1yaWdodCBwYWQtcmlnaHQtbWVkIj4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIHNjcm9sbF90b3AudHdpZyAtLT4KPGRpdiBpZD0icy1saWItc2Nyb2xsLXRvcCI+CiAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJqUXVlcnkoJ2JvZHknKS5mb2N1cygpOyIgdGl0bGU9IkJhY2sgdG8gVG9wIgogICAgICAgYXJpYS1sYWJlbD0iQmFjayB0byBUb3AiPgogICAgICAgIDxzcGFuIGNsYXNzPSJmYS1zdGFjayBmYS1sZyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3F1YXJlLW8gZmEtc3RhY2stMngiPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWFuZ2xlLWRvdWJsZS11cCBmYS1zdGFjay0xeCIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyBib3R0b206MnB4OyI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvYT4KPC9kaXY+CjwhLS0gIXNjcm9sbF90b3AudHdpZyAtLT4KCjxkaXYgaWQ9InMtbGliLWFsZXJ0IiB0aXRsZT0iIj48ZGl2IGlkPSJzLWxpYi1hbGVydC1jb250ZW50Ij48L2Rpdj48L2Rpdj4KCiAgICAKPGZvb3Rlcj4KPGRpdiBjbGFzcz0iZm9vdGVyLW1haW4gZmxleC1jb250YWluZXIiIGFyaWEtbGFiZWw9Ik1JVCBMaWJyYXJpZXMgZm9vdGVyIj4KICAgIDxkaXYgY2xhc3M9ImlkZW50aXR5IGZsZXgtY29udGFpbmVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1IiBjbGFzcz0ibG9nby1taXQtbGliIj4KICAgICAgICAgICAgPGltZyBzcmM9ICJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9sb2NhbC9taXRsaWItd29yZG1hcmsuc3ZnIiBhbHQ9Ik1JVCBMaWJyYXJpZXMgbG9nbyIgd2lkdGg9IjE1MCI+CiAgICAgICAgPC9hPgogICAgICAgIDxkaXYgY2xhc3M9ImxpbmtzLXByaW1hcnkgZmxleC1jb250YWluZXIiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9wcml2YWN5IiBjbGFzcz0ibGluay1zdWIiPlByaXZhY3k8L2E+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9wZXJtaXNzaW9ucyIgY2xhc3M9Imxpbmstc3ViIj5QZXJtaXNzaW9uczwvYT48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtIj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY2Vzc2liaWxpdHkiIGNsYXNzPSJsaW5rLXN1YiI+QWNjZXNzaWJpbGl0eTwvYT48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtIj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvbnRhY3QiIGNsYXNzPSJsaW5rLXN1YiI+Q29udGFjdCB1czwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PjwhLS0gZW5kIC5pZGVudGl0eSAtLT4KPC9kaXY+CjxkaXYgY2xhc3M9ImZvb3Rlci1pbmZvLWluc3RpdHV0ZSI+CiAgICA8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cHM6Ly93d3cubWl0LmVkdSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdF9sb2NrdXBfc3RkLXRocmVlLWxpbmVfcmdiX3doaXRlLnN2ZyIgYWx0PSJNSVQgbG9nbyIgd2lkdGg9IjE1MCI+CiAgICA8L2E+CiAgICA8ZGl2IGNsYXNzPSJsaWNlbnNlIj5Db250ZW50IGNyZWF0ZWQgYnkgdGhlIE1JVCBMaWJyYXJpZXMsIDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy80LjAvIj5DQyBCWS1OQzwvYT4gdW5sZXNzIG90aGVyd2lzZSBub3RlZC4gPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0L25vdGljZXMvY29weXJpZ2h0LW5vdGlmeS8iPk5vdGlmeSB1cyBhYm91dCBjb3B5cmlnaHQgY29uY2VybnM8L2E+LgogICAgPC9kaXY+PCEtLSBlbmQgLmZvb3Rlci1pbmZvLWluc3RpdHV0ZSAtLT4KPC9kaXY+CjwvZm9vdGVyPgo8c2NyaXB0IHNyYz0iLy92Mi5saWJhbnN3ZXJzLmNvbS9sb2FkX2NoYXQucGhwP2hhc2g9YmUyYzY1NGI2M2RkNDNmMzFjNTYyOTVlZTVkNzhkODgiPjwvc2NyaXB0PgoKCiAgICA8IS0tIEJFR0lOOiBBbmFseXRpY3MgY29kZSAtLT48IS0tIE1hdG9tbyBUYWcgTWFuYWdlciAtLT48c2NyaXB0PiAgdmFyIF9tdG0gPSB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAgX210bS5wdXNoKHsnbXRtLnN0YXJ0VGltZSc6IChuZXcgRGF0ZSgpLmdldFRpbWUoKSksICdldmVudCc6ICdtdG0uU3RhcnQnfSk7ICAoZnVuY3Rpb24oKSB7ICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07ICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9J2h0dHBzOi8vbWF0b21vLmxpYnJhcmllcy5taXQuZWR1L2pzL2NvbnRhaW5lcl9vRldNU2IzZy5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTsgIH0pKCk7PC9zY3JpcHQ+PCEtLSBFbmQgTWF0b21vIFRhZyBNYW5hZ2VyIC0tPjwhLS0gRU5EOiBBbmFseXRpY3MgY29kZSAtLT4KCiAgPC9ib2R5PgogIDwvaHRtbD4KICA=", "response_headers": {"Content-Security-Policy": ["upgrade-insecure-requests"], "content-type": ["text/html; charset=UTF-8"], "date": ["Thu, 05 Feb 2026 20:16:27 GMT"], "server": ["nginx"], "strict-transport-security": ["max-age=31536000; preload"], "vary": ["Accept-Encoding"], "x-backend-server": ["libguides-us-1.springyaws.com"], "x-content-type-options": ["nosniff"], "x-springy-cache-disabled": ["0"], "x-orig-content-encoding": ["gzip"]}} \ No newline at end of file diff --git a/tests/fixtures/libguides/libguides_api_guides_df.pkl b/tests/fixtures/libguides/libguides_api_guides_df.pkl new file mode 100644 index 00000000..1054cc48 Binary files /dev/null and b/tests/fixtures/libguides/libguides_api_guides_df.pkl differ diff --git a/tests/fixtures/oai_dc/springshare/libguides/libguides_record_all_fields.xml b/tests/fixtures/oai_dc/springshare/libguides/libguides_record_all_fields.xml deleted file mode 100644 index 0b5ebf63..00000000 --- a/tests/fixtures/oai_dc/springshare/libguides/libguides_record_all_fields.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - -
- oai:libguides.com:guides/175846 - 2023-05-31T19:49:21Z - guides -
- - - Materials Science & Engineering - Ye Li - Engineering - Science - Useful databases and other research tips for materials science. - MIT Libraries - 2008-06-19 17:55:27 - https://libguides.mit.edu/materials - - -
-
\ No newline at end of file diff --git a/tests/fixtures/oai_dc/springshare/libguides/libguides_record_optional_fields_blank.xml b/tests/fixtures/oai_dc/springshare/libguides/libguides_record_optional_fields_blank.xml deleted file mode 100644 index a516bffd..00000000 --- a/tests/fixtures/oai_dc/springshare/libguides/libguides_record_optional_fields_blank.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - -
- oai:libguides.com:guides/175846 - 2023-05-31T19:49:21Z - guides -
- - - Materials Science & Engineering - - - - - - - https://libguides.mit.edu/materials - - -
-
\ No newline at end of file diff --git a/tests/fixtures/oai_dc/springshare/libguides/libguides_record_optional_fields_missing.xml b/tests/fixtures/oai_dc/springshare/libguides/libguides_record_optional_fields_missing.xml deleted file mode 100644 index d7acf57f..00000000 --- a/tests/fixtures/oai_dc/springshare/libguides/libguides_record_optional_fields_missing.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - -
- oai:libguides.com:guides/175846 - 2023-05-31T19:49:21Z - guides -
- - - Materials Science & Engineering - https://libguides.mit.edu/materials - - -
-
\ No newline at end of file diff --git a/tests/fixtures/oai_dc/springshare/libguides/libguides_records.xml b/tests/fixtures/oai_dc/springshare/libguides/libguides_records.xml deleted file mode 100644 index 9fb574bf..00000000 --- a/tests/fixtures/oai_dc/springshare/libguides/libguides_records.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - -
- oai:libguides.com:guides/175846 - 2023-05-31T19:49:21Z - guides -
- - - Materials Science & Engineering - Ye Li - Engineering - Science - Useful databases and other research tips for materials science. - MIT Libraries - 2008-06-19 17:55:27 - https://libguides.mit.edu/materials - - -
- -
- oai:libguides.com:guides/175847 - 2018-08-17T17:47:32Z - guides -
- - - NTSB Reports - Barbara Williams - Engineering - A guide to library research tools for aeronautics & astronautics. - MIT Libraries - 2008-06-24 04:29:10 - https://libguides.mit.edu/c.php?g=175847 - - -
- -
- oai:libguides.com:guides/175849 - 2023-06-27T18:37:44Z - guides -
- - - Country Data & Analysis - Nicholas Albaugh - Business & management - This is the subject guide for Country Data & Analysis - MIT Libraries - 2008-06-26 00:51:04 - https://libguides.mit.edu/country - - -
- -
- oai:libguides.com:guides/175853 - 2023-06-12T15:30:12Z - guides -
- - - News, Newspapers, and Current Events - Jennifer Greenleaf - Interdisciplinary - This is the subject guide for News - MIT Libraries - 2008-06-26 21:29:54 - https://libguides.mit.edu/news - - -
- -
- oai:libguides.com:guides/175855 - 2021-07-19T09:31:31Z - guides -
- - - Biography - Tina Chan - Interdisciplinary - MIT Libraries - 2008-06-26 22:05:13 - https://libguides.mit.edu/biography - - -
-
\ No newline at end of file diff --git a/tests/sources/json/test_libguides.py b/tests/sources/json/test_libguides.py new file mode 100644 index 00000000..c2b69ba8 --- /dev/null +++ b/tests/sources/json/test_libguides.py @@ -0,0 +1,344 @@ +# ruff: noqa: E501, PLC0415, S301, SLF001 + +import base64 +from unittest.mock import PropertyMock, patch + +import pandas as pd +import pytest + +from transmogrifier import models + + +@pytest.fixture(autouse=True) +def _test_env_libguides(): + with patch("transmogrifier.config.LIBGUIDES_CLIENT_ID", "123"), patch( + "transmogrifier.config.LIBGUIDES_API_TOKEN", "aaabbbdddccc" + ): + yield + + +@pytest.fixture +def mocked_libguides_api_client_df_property(): + """Mock API Guides dataframe from LibGuidesAPIClient.""" + from transmogrifier.sources.json.libguides import LibGuidesAPIClient + + api_guides_df = pd.read_pickle("tests/fixtures/libguides/libguides_api_guides_df.pkl") + + with patch.object( + LibGuidesAPIClient, + "api_guides_df", + new_callable=PropertyMock, + return_value=api_guides_df, + ): + yield + + +@pytest.fixture +def libguides_records(): + from transmogrifier.sources.json.libguides import LibGuides + + return LibGuides.parse_source_file( + "tests/fixtures/libguides/libguides-2026-02-20-full-extracted-records-to-index.jsonl" + ) + + +@pytest.fixture +def libguides_transformer(mocked_libguides_api_client_df_property, libguides_records): + """Create LibGuides transformer.""" + from transmogrifier.sources.json.libguides import LibGuides + + return LibGuides( + "libguides", + libguides_records, + ) + + +def create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide.html", +) -> dict: + with open(html_filepath) as f: + html_content = f.read() + + return { + "url": "https://libguides.mit.edu/bizcat", + "status": "active", + "cdx_warc_filename": "rec-d3274de52d0c-libguides-20260205201423787-6.warc.gz", + "cdx_title": "Analyst reports - Business Databases by Category - LibGuides at MIT Libraries", + "cdx_offset": "1001127", + "cdx_length": "16655", + "html_base64": base64.b64encode(html_content.encode()).decode(), + "response_headers": { + "Content-Security-Policy": ["upgrade-insecure-requests"], + "content-type": ["text/html; charset=UTF-8"], + "date": ["Thu, 05 Feb 2026 20:16:24 GMT"], + "server": ["nginx"], + "strict-transport-security": ["max-age=31536000; preload"], + "vary": ["Accept-Encoding"], + "x-backend-server": ["libguides-us-1.springyaws.com"], + "x-content-type-options": ["nosniff"], + "x-springy-cache-disabled": ["0"], + "x-orig-content-encoding": ["gzip"], + }, + } + + +def test_libguides_api_client_composition_and_guides_dataframe(libguides_transformer): + """Test that LibGuides transformer has proper API client composition.""" + from transmogrifier.sources.json.libguides import LibGuidesAPIClient + + # assert composition to Transformer + assert isinstance(libguides_transformer.api_client, LibGuidesAPIClient) + + # assert dataframe properties + api_guides_df = libguides_transformer.api_client.api_guides_df + assert isinstance(api_guides_df, pd.DataFrame) + assert set(api_guides_df.columns) == { + "count_hit", + "created", + "description", + "friendly_url", + "group_id", + "id", + "name", + "nav_type", + "owner_id", + "published", + "redirect_url", + "site_id", + "slug", + "slug_id", + "status", + "status_label", + "thumbnail_url", + "type_id", + "type_label", + "updated", + "url", + } + + +def test_libguides_class_methods_can_utilize_api_client( + mocked_libguides_api_client_df_property, +): + from transmogrifier.sources.json.libguides import LibGuides + + source_record = create_libguides_source_record_stub() + source_link = LibGuides.get_source_link(source_record) + source_record_id = LibGuides.get_source_record_id(source_record) + + assert source_link == "https://libguides.mit.edu/bizcat" + assert source_record_id == "guides-383403" + + +def test_libguides_api_client_single_api_call_for_guides_dataframe(): + """Using api_guides_df multiple times only makes one API call, rest are cached.""" + from transmogrifier.sources.json.libguides import LibGuidesAPIClient + + api_guides_df = pd.read_pickle("tests/fixtures/libguides/libguides_api_guides_df.pkl") + client = LibGuidesAPIClient() + + with patch.object( + client, "fetch_guides", return_value=api_guides_df + ) as mock_fetch, patch.object(client, "get_api_token", return_value="fake-token"): + _ = client.api_guides_df + _ = client.api_guides_df + _ = client.api_guides_df + + mock_fetch.assert_called_once() + + +def test_libguides_extract_dc_metadata_skips_empty_content(): + from transmogrifier.sources.json.libguides import LibGuides + + # reuses fixture which has a whitespace-only DC.Subject + source_record = create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide_non_url_identifier.html" + ) + dc = LibGuides.extract_dublin_core_metadata(source_record["html_base64"]) + assert "Subject" not in dc + + +def test_libguides_record_get_main_titles_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + assert libguides_transformer.get_main_titles(source_record) == [ + "Business Databases by Category: Analyst reports" + ] + + +def test_libguides_record_get_main_titles_fallback_to_cdx_title(libguides_transformer): + source_record = create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide_minimal_dc.html" + ) + assert libguides_transformer.get_main_titles(source_record) == [ + "Analyst reports - Business Databases by Category" + ] + + +def test_libguides_record_is_deleted_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + assert not libguides_transformer.record_is_deleted(source_record) + + source_record["status"] = "deleted" + assert libguides_transformer.record_is_deleted(source_record) + + +def test_libguides_record_get_content_type_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + assert libguides_transformer.get_content_type(source_record) == ["LibGuide"] + + +def test_libguides_record_get_dates_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + dates = libguides_transformer.get_dates(source_record) + assert set(dates) == { + models.Date(kind="Accessed", note=None, range=None, value="2000-01-01"), + models.Date(kind="Created", note=None, range=None, value="2015-09-13"), + models.Date(kind="Modified", note=None, range=None, value="2026-02-02"), + } + + +def test_libguides_record_get_format_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + assert libguides_transformer.get_format(source_record) == "electronic resource" + + +def test_libguides_record_get_timdex_record_id(libguides_transformer): + source_record = create_libguides_source_record_stub() + assert ( + libguides_transformer.get_timdex_record_id(source_record) + == "libguides:guides-383403" + ) + + +def test_libguides_record_get_identifiers_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + identifiers = libguides_transformer.get_identifiers(source_record) + assert identifiers == [models.Identifier(value="383403", kind="LibGuide ID")] + + +def test_libguides_record_get_identifiers_includes_non_url_dc_identifier( + libguides_transformer, +): + source_record = create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide_non_url_identifier.html" + ) + identifiers = libguides_transformer.get_identifiers(source_record) + assert models.Identifier(value="ISBN:1234567890") in identifiers + + +def test_libguides_record_get_links_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + links = libguides_transformer.get_links(source_record) + assert links == [ + models.Link( + url="https://libguides.mit.edu/bizcat/analysts", + kind=None, + restrictions=None, + text=None, + ) + ] + + +def test_libguides_record_get_links_returns_none_when_no_url_identifiers( + libguides_transformer, +): + source_record = create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide_non_url_identifier.html" + ) + assert libguides_transformer.get_links(source_record) is None + + +def test_libguides_record_get_fulltext_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + fulltext = libguides_transformer.get_fulltext(source_record) + + assert "I am the main content." in fulltext + assert "I am header information." in fulltext + + assert "You should not find me." not in fulltext + assert "You should not find me either." not in fulltext + + +def test_libguides_record_get_summary_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + summary = libguides_transformer.get_summary(source_record) + assert summary == ["This is a libguide about business databases."] + + +def test_libguides_record_get_publishers_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + publishers = libguides_transformer.get_publishers(source_record) + assert publishers == [ + models.Publisher(name="MIT Libraries", date=None, location=None) + ] + + +def test_libguides_record_get_rights_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + rights = libguides_transformer.get_rights(source_record) + assert rights == [ + models.Rights(description="Copyright MIT Libraries 2026", kind=None, uri=None) + ] + + +def test_libguides_record_get_subjects_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + subjects = libguides_transformer.get_subjects(source_record) + assert subjects == [ + models.Subject( + value=["Business", "Databases"], + kind="Subject scheme not provided", + ) + ] + + +def test_libguides_record_get_subjects_returns_none_when_no_subjects( + libguides_transformer, +): + source_record = create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide_minimal_dc.html" + ) + assert libguides_transformer.get_subjects(source_record) is None + + +def test_libguides_record_get_languages_success(libguides_transformer): + source_record = create_libguides_source_record_stub() + languages = libguides_transformer.get_languages(source_record) + assert languages == ["en"] + + +def test_libguides_record_get_languages_returns_none_when_no_languages( + libguides_transformer, +): + source_record = create_libguides_source_record_stub( + html_filepath="tests/fixtures/libguides/libguide_minimal_dc.html" + ) + assert libguides_transformer.get_languages(source_record) is None + + +def test_libguides_record_is_excluded_when_guide_in_excluded_group(libguides_transformer): + source_record = create_libguides_source_record_stub() + url = source_record["url"] + + # modify the LibGuides API dataframe to put this guide in an excluded group + # this works because libguides_transformer.api_client.api_guides_df is a cached + # object that gets reused, so it's modifiable like this + df = libguides_transformer.api_client.api_guides_df + df.loc[df.friendly_url == url, "group_id"] = 3754 + libguides_transformer._allowed_guides_df = None + + assert libguides_transformer.record_is_excluded(source_record) + + +def test_libguides_record_is_excluded_when_guide_type_not_allowed(libguides_transformer): + source_record = create_libguides_source_record_stub() + url = source_record["url"] + + # modify the LibGuides API dataframe to give this guide a non-allowed type + # this works because libguides_transformer.api_client.api_guides_df is a cached + # object that gets reused, so it's modifiable like this + df = libguides_transformer.api_client.api_guides_df + df.loc[df.friendly_url == url, "type_label"] = "Internal Guide" + libguides_transformer._allowed_guides_df = None + + assert libguides_transformer.record_is_excluded(source_record) diff --git a/tests/sources/xml/test_libguides.py b/tests/sources/xml/test_libguides.py deleted file mode 100644 index 67988aab..00000000 --- a/tests/sources/xml/test_libguides.py +++ /dev/null @@ -1,142 +0,0 @@ -import transmogrifier.models as timdex -from tests.sources.xml.test_springshare import ( - SPRINGSHARE_FIXTURES_PREFIX, - create_oaidc_source_record_stub, -) -from transmogrifier.sources.xml.libguides import LibGuides - -LIBGUIDES_FIXTURES_PREFIX = f"{SPRINGSHARE_FIXTURES_PREFIX}/libguides" - - -def test_libguides_transform_with_all_fields_transforms_correctly(): - source_records = LibGuides.parse_source_file( - f"{LIBGUIDES_FIXTURES_PREFIX}/libguides_record_all_fields.xml" - ) - output_records = LibGuides("libguides", source_records) - timdex_record = output_records.transform(next(output_records.source_records)) - assert timdex_record == timdex.TimdexRecord( - source="LibGuides", - source_link="https://libguides.mit.edu/materials", - timdex_record_id="libguides:guides-175846", - title="Materials Science & Engineering", - citation="Materials Science & Engineering. MIT Libraries. libguides. " - "https://libguides.mit.edu/materials", - content_type=["libguides"], - contributors=None, - dates=[ - timdex.Date(value="2008-06-19T17:55:27", kind="Created"), - ], - format="electronic resource", - identifiers=[ - timdex.Identifier(value="oai:libguides.com:guides/175846", kind="OAI-PMH") - ], - links=[ - timdex.Link( - url="https://libguides.mit.edu/materials", - kind="LibGuide URL", - text="LibGuide URL", - ) - ], - publishers=[timdex.Publisher(name="MIT Libraries")], - subjects=[ - timdex.Subject( - value=["Engineering", "Science"], - kind="Subject scheme not provided", - ), - ], - summary=["Useful databases and other research tips for materials science."], - ) - - -def test_libguides_transform_with_optional_fields_blank_transforms_correctly(): - source_records = LibGuides.parse_source_file( - f"{LIBGUIDES_FIXTURES_PREFIX}/libguides_record_optional_fields_blank.xml" - ) - output_records = LibGuides("libguides", source_records) - timdex_record = output_records.transform(next(output_records.source_records)) - assert timdex_record == timdex.TimdexRecord( - source="LibGuides", - source_link="https://libguides.mit.edu/materials", - timdex_record_id="libguides:guides-175846", - title="Materials Science & Engineering", - citation="Materials Science & Engineering. libguides. " - "https://libguides.mit.edu/materials", - content_type=["libguides"], - format="electronic resource", - identifiers=[ - timdex.Identifier(value="oai:libguides.com:guides/175846", kind="OAI-PMH") - ], - links=[ - timdex.Link( - url="https://libguides.mit.edu/materials", - kind="LibGuide URL", - text="LibGuide URL", - ) - ], - ) - - -def test_libguides_transform_with_optional_fields_missing_transforms_correctly(): - source_records = LibGuides.parse_source_file( - f"{LIBGUIDES_FIXTURES_PREFIX}/libguides_record_optional_fields_missing.xml" - ) - output_records = LibGuides("libguides", source_records) - timdex_record = output_records.transform(next(output_records.source_records)) - assert timdex_record == timdex.TimdexRecord( - source="LibGuides", - source_link="https://libguides.mit.edu/materials", - timdex_record_id="libguides:guides-175846", - title="Materials Science & Engineering", - citation="Materials Science & Engineering. libguides. " - "https://libguides.mit.edu/materials", - content_type=["libguides"], - format="electronic resource", - identifiers=[ - timdex.Identifier(value="oai:libguides.com:guides/175846", kind="OAI-PMH") - ], - links=[ - timdex.Link( - url="https://libguides.mit.edu/materials", - kind="LibGuide URL", - text="LibGuide URL", - ) - ], - ) - - -def test_libguides_record_is_excluded_returns_true_for_excluded_record( - mock_s3_exclusion_list, -): - source_record = create_oaidc_source_record_stub( - header_insert=(""" - https://libguides.mit.edu/1234 - """), - metadata_insert=(""" - https://libguides.mit.edu/excluded1 - """), - ) - output_records = LibGuides( - "libguides", - iter(source_record), - exclusion_list_path="s3://test-bucket/libguides/config/libguides-exclusions.csv", - ) - assert output_records.record_is_excluded(source_record) is True - - -def test_libguides_record_is_excluded_returns_false_for_non_excluded_record( - mock_s3_exclusion_list, -): - source_record = create_oaidc_source_record_stub( - header_insert=(""" - https://libguides.mit.edu/5678 - """), - metadata_insert=(""" - https://libguides.mit.edu/someotherguide - """), - ) - output_records = LibGuides( - "libguides", - iter(source_record), - exclusion_list_path="s3://test-bucket/libguides/config/libguides-exclusions.csv", - ) - assert output_records.record_is_excluded(source_record) is False diff --git a/tests/test_cli.py b/tests/test_cli.py index a2dee8e1..f9443813 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -5,53 +5,60 @@ from transmogrifier.exceptions import CriticalError -def test_transform_no_sentry_not_verbose( - caplog, monkeypatch, runner, source_input_file, empty_dataset_location -): +def _mock_transformer(): + transformer = mock.MagicMock() + transformer.processed_record_count = 100 + transformer.transformed_record_count = 100 + transformer.skipped_record_count = 0 + transformer.deleted_records = [] + return transformer + + +def test_transform_no_sentry_not_verbose(caplog, monkeypatch, runner, tmp_path): monkeypatch.delenv("SENTRY_DSN", raising=False) - result = runner.invoke( - main, - [ - "-i", - source_input_file, - "--output-location", - empty_dataset_location, - "-s", - "libguides", - ], - ) - assert result.exit_code == 0 + with mock.patch( + "transmogrifier.cli.Transformer.load", return_value=_mock_transformer() + ): + result = runner.invoke( + main, + [ + "-i", + "fake-input-file", + "--output-location", + str(tmp_path), + "-s", + "libguides", + ], + ) assert "Logger 'root' configured with level=INFO" in caplog.text assert "No Sentry DSN found, exceptions will not be sent to Sentry" in caplog.text - assert "Running transform for source libguides" in caplog.text - assert ("Completed transform, total records processed: 4") in caplog.text assert "Total time to complete transform" in caplog.text + assert result.exit_code == 0 -def test_transform_with_sentry_and_verbose( - caplog, monkeypatch, runner, source_input_file, empty_dataset_location -): +def test_transform_with_sentry_and_verbose(caplog, monkeypatch, runner, tmp_path): monkeypatch.setenv("SENTRY_DSN", "https://1234567890@00000.ingest.sentry.io/123456") monkeypatch.setenv("STATUS_UPDATE_INTERVAL", "10") - result = runner.invoke( - main, - [ - "-i", - source_input_file, - "--output-location", - empty_dataset_location, - "-s", - "libguides", - "-v", - ], - ) - assert result.exit_code == 0 + with mock.patch( + "transmogrifier.cli.Transformer.load", return_value=_mock_transformer() + ): + result = runner.invoke( + main, + [ + "-i", + "fake-input-file", + "--output-location", + str(tmp_path), + "-s", + "libguides", + "-v", + ], + ) assert "Logger 'root' configured with level=DEBUG" in caplog.text assert ( "Sentry DSN found, exceptions will be sent to Sentry with env=test" in caplog.text ) - assert "Running transform for source libguides" in caplog.text - assert ("Completed transform, total records processed: 4") in caplog.text + assert result.exit_code == 0 def test_transform_no_records( diff --git a/transmogrifier/config.py b/transmogrifier/config.py index e532b100..d1ad87b1 100644 --- a/transmogrifier/config.py +++ b/transmogrifier/config.py @@ -102,7 +102,7 @@ "libguides": { "name": "LibGuides", "base-url": "https://libguides.mit.edu/", - "transform-class": "transmogrifier.sources.xml.libguides.LibGuides", + "transform-class": "transmogrifier.sources.json.libguides.LibGuides", }, "mitlibwebsite": { "name": "MIT Libraries Website", @@ -136,6 +136,15 @@ }, } +LIBGUIDES_TOKEN_URL = os.getenv( + "LIBGUIDES_TOKEN_URL", "https://lgapi-us.libapps.com/1.2/oauth/token" +) +LIBGUIDES_GUIDES_URL = os.getenv( + "LIBGUIDES_GUIDES_URL", "https://lgapi-us.libapps.com/1.2/guides" +) +LIBGUIDES_API_TOKEN = os.getenv("LIBGUIDES_API_TOKEN") +LIBGUIDES_CLIENT_ID = os.getenv("LIBGUIDES_CLIENT_ID") + def configure_logger( root_logger: logging.Logger, diff --git a/transmogrifier/sources/json/libguides.py b/transmogrifier/sources/json/libguides.py new file mode 100644 index 00000000..9bd28173 --- /dev/null +++ b/transmogrifier/sources/json/libguides.py @@ -0,0 +1,398 @@ +import base64 +import logging +import re +from collections import defaultdict +from functools import lru_cache + +import pandas as pd +import requests +from bs4 import BeautifulSoup, Tag +from dateutil.parser import parse as date_parser + +import transmogrifier.models as timdex +from transmogrifier.config import ( + LIBGUIDES_API_TOKEN, + LIBGUIDES_CLIENT_ID, + LIBGUIDES_GUIDES_URL, + LIBGUIDES_TOKEN_URL, +) +from transmogrifier.sources.jsontransformer import JSONTransformer +from transmogrifier.sources.transformer import JSON + +logger = logging.getLogger(__name__) + + +# The following constants support logic for identifying LibGuides to exclude. +ALLOWED_TYPE_STATUS_PAIRS = [ + ("General Purpose Guide", "Published"), + ("Course Guide", "Published"), + ("Topic Guide", "Published"), + ("Subject Guide", "Published"), +] +EXCLUDED_GROUPS = [ + 3754, # Internal staff guides + 32635, # Records retention schedules +] +EXCLUDED_URL_REGEX = [ + r".*libguides.mit.edu/directory.*", +] + + +class LibGuidesAPIClient: + """Client for LibGuides API communication and data retrieval. + + This class retrieves metadata about all LibGuides via an API, retrieving data that is + not found in the OAI-PMH XML records or the websites themselves. This valuable data + is used during transformation to identify records for exclusion, occasionally + provide friendlier URLs, and other data augmentation. + + This class is instantiated as a singleton object in this module. Once instantiated, + it is attached to the Libguides transformer instance. This allows class methods + on the transformer to access cached data from this singleton object, ultimately + resulting in only a single API call per multiple record transformation run. + + This class relies on two environment variables: + - LIBGUIDES_CLIENT_ID + - LIBGUIDES_API_TOKEN + """ + + def __init__(self) -> None: + if not LIBGUIDES_CLIENT_ID: + raise RuntimeError("Required env var 'LIBGUIDES_CLIENT_ID' is not set") + if not LIBGUIDES_API_TOKEN: + raise RuntimeError("Required env var 'LIBGUIDES_API_TOKEN' is not set") + + self.client_id = str(LIBGUIDES_CLIENT_ID) + self.client_secret = LIBGUIDES_API_TOKEN + self._api_guides_df: pd.DataFrame | None = None + + @property + def api_guides_df(self) -> pd.DataFrame: + if self._api_guides_df is None: + self._api_guides_df = self.fetch_guides(self.get_api_token()) + return self._api_guides_df + + def get_api_token(self) -> str: + data = { + "grant_type": "client_credentials", + "client_id": self.client_id, + "client_secret": self.client_secret, + } + response = requests.post(LIBGUIDES_TOKEN_URL, headers={}, data=data, timeout=60) + response.raise_for_status() + payload = response.json() + return payload.get("access_token") + + def fetch_guides(self, token: str) -> pd.DataFrame: + """Retrieve metadata for all LibGuides.""" + logger.debug("Retrieving all guides from Libguides API.") + headers = {"Authorization": f"Bearer {token}"} + response = requests.get(LIBGUIDES_GUIDES_URL, headers=headers, timeout=60) + response.raise_for_status() + guides = response.json() + return pd.DataFrame(guides) + + def get_guide_by_url(self, url: str) -> pd.Series: + """Get metadata for a single guide via a URL.""" + matches = self.api_guides_df[ + (self.api_guides_df.url == url) | (self.api_guides_df.friendly_url == url) + ] + if len(matches) == 1: + return matches.iloc[0] + raise ValueError(f"Found {len(matches)} guide ids for URL: {url}, expecting one.") + + +# instantiate a LibGuidesAPIClient singleton +libguides_api_client = LibGuidesAPIClient() + + +class LibGuides(JSONTransformer): + """Transformer for Libguides originating from a Browsertrix-Harvester crawl. + + A web crawl is performed for Libguides via the Browsertrix-Harvester. In addition to + this data, the LibGuidesAPIClient is used to pull some metadata about the guides + via an API. This transformer uses both data sources to construct records for TIMDEX. + """ + + # attach LibGuidesAPIClient singleton to class + api_client = libguides_api_client + + # cached class level property + _allowed_guides_df: pd.DataFrame | None = None + + @property + def allowed_guides_df(self) -> pd.DataFrame: + """Cached dataframe of allowed guides.""" + if self._allowed_guides_df is None: + self._allowed_guides_df = self._filter_allowed_guides() + return self._allowed_guides_df + + def _filter_allowed_guides( + self, + allowed_types: list[tuple[str, str]] | None = None, + excluded_group_ids: list[int] | None = None, + ) -> pd.DataFrame: + if not allowed_types: + allowed_types = ALLOWED_TYPE_STATUS_PAIRS + if not excluded_group_ids: + excluded_group_ids = EXCLUDED_GROUPS + + # filter by allowed (type_label, status_label) combos + type_status_pairs = self.api_client.api_guides_df[ + ["type_label", "status_label"] + ].apply(tuple, axis=1) + filtered_df = self.api_client.api_guides_df[type_status_pairs.isin(allowed_types)] + + # filter by excluded group IDs + filtered_df = filtered_df[~filtered_df["group_id"].isin(excluded_group_ids)] + + # filter by excluded URL regex patterns + for pattern in EXCLUDED_URL_REGEX: + regex = re.compile(pattern) + filtered_df = filtered_df[ + ~( + filtered_df["url"].str.match(regex, na=False) + | filtered_df["friendly_url"].str.match(regex, na=False) + ) + ] + + logger.debug( + f"Total guides: {len(self.api_client.api_guides_df)}, " + f"filtered to {len(filtered_df)} allowed." + ) + + return filtered_df + + def record_is_excluded(self, source_record: dict) -> bool: + """Determine if a single Guide is excluded. + + This method utilizes multiple private methods which check for specific things. If + any of them return True, the record is excluded. + """ + return any( + [ + self._excluded_per_allowed_rules(source_record), + self._excluded_per_missing_html(source_record), + ] + ) + + def _excluded_per_allowed_rules(self, source_record: dict) -> bool: + """Exclude a record if not present in allowed guides dataframe.""" + source_link = self.get_source_link(source_record) + return not ( + (self.allowed_guides_df.url == source_link) + | (self.allowed_guides_df.friendly_url == source_link) + ).any() + + def _excluded_per_missing_html(self, source_record: dict) -> bool: + """Exclude a record if the crawled HTML is empty (e.g. a redirect).""" + return source_record["html_base64"].strip() == "" + + @classmethod + @lru_cache(maxsize=8) + def parse_html(cls, html_base64: str) -> Tag: + """Parse HTML from base64 encoded ASCII string. + + This method utilizes an LRU cache to only parse the HTML once per unique HTML + base64 string passed. + """ + html_bytes = base64.b64decode(html_base64) + return BeautifulSoup(html_bytes, "html.parser") + + @classmethod + @lru_cache(maxsize=8) + def extract_dublin_core_metadata(cls, html_base64: str) -> dict: + """Extract DC metadata from the full Libguide HTML. + + This method utilizes an LRU cache to avoid re-parsing this data multiple times. + """ + soup = cls.parse_html(html_base64) + + dc_metadata = defaultdict(list) + + # loop through all head.meta elements + for meta in soup.find_all("meta"): + name = meta.get("name") + + # skip those without a "DC." prefix + if not name or not name.startswith("DC."): + continue + + # extract DC element name + name = name.removeprefix("DC.") + + # skip if not content + content = meta.get("content") + if not content or not content.strip(): + continue + + dc_metadata[name].append(content) + + return dict(dc_metadata) + + @classmethod + def get_source_link(cls, source_record: dict) -> str: + """Use the 'friendly' URL from LibGuides API data.""" + url = source_record["url"] + guide = cls.api_client.get_guide_by_url(url) + friendly_url = guide.get("friendly_url", "").strip() + return friendly_url or url + + @classmethod + def get_source_record_id(cls, source_record: dict) -> str: + """Use numeric 'id' field from Libguides metadata with 'guides-' prefix.""" + guide = cls.api_client.get_guide_by_url(cls.get_source_link(source_record)) + return f"guides-{guide['id']}" + + def get_timdex_record_id(self, source_record: dict) -> str: + return f"{self.source}:{self.get_source_record_id(source_record)}" + + @classmethod + def get_main_titles(cls, source_record: dict) -> list[str]: + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + + # prefer DC title + if dc_title := dc_meta.get("Title"): + title = dc_title[0] + + # fallback on CDX title + else: + title = source_record["cdx_title"] + + # cleanup prefixes and suffixes + title = title.removeprefix("Libguides: ") # case-sensitive + title = title.removeprefix("LibGuides: ") # case-sensitive + title = title.removeprefix("Home - ") + title = title.removesuffix(" - LibGuides at MIT Libraries") + title = title.removesuffix(": Home") + + return [title] + + @classmethod + def record_is_deleted(cls, source_record: dict[str, JSON]) -> bool: + return source_record.get("status") == "deleted" + + @classmethod + def get_content_type(cls, _source_record: dict) -> list[str]: + return ["LibGuide"] + + def get_dates(self, source_record: dict) -> list[timdex.Date]: + # initialize with accessed date per web crawl + dates = [ + timdex.Date( + value=date_parser(self.run_data["run_timestamp"]).strftime("%Y-%m-%d"), + kind="Accessed", + ) + ] + + # add DC dates if present + dc_meta = self.extract_dublin_core_metadata(source_record["html_base64"]) + for kind, key in ( + ("Created", "Date.Created"), + ("Modified", "Date.Modified"), + ): + for raw in dc_meta.get(key, []): + dates.append( # noqa: PERF401 + timdex.Date( + value=date_parser(raw).strftime("%Y-%m-%d"), + kind=kind, + ) + ) + + return dates + + def get_format(self, _source_record: dict) -> str: + return "electronic resource" + + def get_identifiers(self, source_record: dict) -> list[timdex.Identifier]: + identifiers = [] + + # add API data + guide = self.api_client.get_guide_by_url(self.get_source_link(source_record)) + identifiers.extend( + [ + timdex.Identifier(kind="LibGuide ID", value=str(guide["id"])), + ] + ) + + # add any non-URL DC identifiers (those are saved in 'links' field) + dc_meta = self.extract_dublin_core_metadata(source_record["html_base64"]) + for identifier in dc_meta.get("Identifier", []): + + if identifier.lower().startswith("http"): + continue + + identifiers.append(timdex.Identifier(value=identifier)) + + return identifiers + + @classmethod + def get_links(cls, source_record: dict) -> list[timdex.Link] | None: + links = [] + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + + for link in dc_meta.get("Identifier", []): + if not link.lower().startswith("http"): + continue + links.append(timdex.Link(url=link)) + + return links or None + + def get_fulltext(self, source_record: dict) -> str | None: + """Extract meaningful full-text from full Libguide HTML. + + Note: this does not currently capture sidebar content, where things like the guide + creator or staff profile is populated. This is a consideration for future work. + """ + html_soup = self.parse_html(source_record["html_base64"]) + + texts = set() + selectors = [ + ("div", {"class": "s-lib-header"}), + ("div", {"class": "s-lib-main"}), + ] + + for element, attrs in selectors: + if target := html_soup.find(element, attrs=attrs): + texts.add(target.get_text(separator=" ", strip=True)) + + return "\n".join(texts) + + @classmethod + def get_summary(cls, source_record: dict) -> list[str] | None: + summaries = [] + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + + for description in dc_meta.get("Description", []): + summaries.append(description) # noqa: PERF402 + + return summaries or None + + @classmethod + def get_publishers(cls, source_record: dict) -> list[timdex.Publisher] | None: + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + return [ + timdex.Publisher(name=publisher) + for publisher in dc_meta.get("Publishers", []) + ] or None + + @classmethod + def get_rights(cls, source_record: dict) -> list[timdex.Rights] | None: + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + return [ + timdex.Rights(description=right) for right in dc_meta.get("Rights", []) + ] or None + + @classmethod + def get_subjects(cls, source_record: dict) -> list[timdex.Subject] | None: + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + if subjects := dc_meta.get("Subject"): + return [timdex.Subject(kind="Subject scheme not provided", value=subjects)] + return None + + @classmethod + def get_languages(cls, source_record: dict) -> list[str] | None: + dc_meta = cls.extract_dublin_core_metadata(source_record["html_base64"]) + if languages := dc_meta.get("Language"): + return languages + return None diff --git a/transmogrifier/sources/transformer.py b/transmogrifier/sources/transformer.py index e9d5daad..4860cf32 100644 --- a/transmogrifier/sources/transformer.py +++ b/transmogrifier/sources/transformer.py @@ -46,7 +46,6 @@ class Transformer(ABC): """Base transformer class.""" - @final def __init__( self, source: str, @@ -356,9 +355,7 @@ def transform(self, source_record: dict[str, JSON] | Tag) -> timdex.TimdexRecord raise DeletedRecordEvent(timdex_record_id) if self.record_is_excluded(source_record): source_record_id = self.get_source_record_id(source_record) - logger.info( - f"Record ID {source_record_id} is in exclusion list, skipping record." - ) + logger.info(f"Record ID {source_record_id} is excluded, skipping.") raise SkippedRecordEvent(source_record_id) timdex_record = timdex.TimdexRecord( diff --git a/transmogrifier/sources/xml/libguides.py b/transmogrifier/sources/xml/libguides.py deleted file mode 100644 index d4c5faf7..00000000 --- a/transmogrifier/sources/xml/libguides.py +++ /dev/null @@ -1,38 +0,0 @@ -import logging - -from bs4 import Tag # type: ignore[import-untyped] - -from transmogrifier.sources.xml.springshare import SpringshareOaiDc - -logger = logging.getLogger(__name__) - - -class LibGuides(SpringshareOaiDc): - """LibGuides transformer that extends SpringshareOaiDc.""" - - def record_is_excluded(self, source_record: Tag) -> bool: - """ - Determine whether a source record should be excluded. - - Args: - source_record: A single source record. - """ - source_link = self.get_source_link(source_record) - excluded = source_link in self.exclusion_list if self.exclusion_list else False - if excluded: - logger.info( - f"Record ID {self.get_source_record_id(source_record)} with source link " - f"'{source_link}' excluded" - ) - return excluded - - @classmethod - def get_contributors(cls, _source_record: Tag) -> None: - """ - Override get_contributors to always return None for LibGuides records. - - Args: - _source_record: A BeautifulSoup Tag representing a - single OAI DC record in XML. - """ - return None # noqa: RET501