devicely 2.0.11 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/devicely.js +1 -1
- package/lib/.env.example +20 -0
- package/lib/androidDeviceDetection.js +1 -1
- package/lib/appMappings.js +1 -1
- package/lib/deviceDetection.js +1 -1
- package/lib/devices.js +1 -1
- package/lib/doctor.js +1 -1
- package/lib/executor.js +1 -1
- package/lib/frontend/static/js/main.96600727.js +3 -1
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/package.json +7 -2
- package/scripts/shell/android_device_control.enc +1 -0
- package/scripts/shell/connect_android_usb_multi_final.enc +1 -0
- package/scripts/shell/connect_android_wireless.enc +1 -0
- package/scripts/shell/connect_android_wireless_multi_final.enc +1 -0
- package/scripts/shell/connect_ios_usb_multi_final.enc +1 -0
- package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -0
- package/scripts/shell/ios_device_control.enc +1 -0
- package/config/apps_presets.conf +0 -271
- package/config/devices.conf +0 -24
- package/scripts/shell/android_device_control.sh +0 -64
- package/scripts/shell/connect_android_usb_multi_final.sh +0 -64
- package/scripts/shell/connect_android_wireless.sh +0 -64
- package/scripts/shell/connect_android_wireless_multi_final.sh +0 -64
- package/scripts/shell/connect_ios_usb_multi_final.sh +0 -64
- package/scripts/shell/connect_ios_wireless_multi_final.sh +0 -64
- package/scripts/shell/create_production_scripts.sh +0 -64
- package/scripts/shell/install_uiautomator2.sh +0 -64
- package/scripts/shell/ios_device_control.sh +0 -64
- package/scripts/shell/organize_project.sh +0 -64
- package/scripts/shell/pre-publish-check.sh +0 -64
- package/scripts/shell/publish-to-npm.sh +0 -64
- package/scripts/shell/publish.sh +0 -64
- package/scripts/shell/setup.sh +0 -64
- package/scripts/shell/start.sh +0 -64
- package/scripts/shell/sync-to-npm-package-final.sh +0 -64
- package/scripts/shell/sync-to-npm-package.sh +0 -64
- package/scripts/shell/test-local-package.sh +0 -64
- package/scripts/shell/verify-shell-protection.sh +0 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"iv":"e7fccfac1d49a1bbbb5cb8ea5aa4aba2","content":"bb29f9f6ffafe2acb858764e52d0f30858e2077174d2b69576a9fb3273f65690ecbbd945872905e7fe9625f4da1de8f9b77ca806ef949bb1c247b5447f7818c0f47f77b735c699dece441ca251ebad1c03169b6f3421009105a47bbf2cf98c2311a2b79967f45856a2ca0c980980d1bc8f0c30d38964da880d33277fc51539dd6f2c5af0ee79619d1ca4bc7834e030dce693904217be43c2236c7af3dbe0f737247fa6d3d603024a6a9dd2cdac623543fe1073f5fe6400ab1c85efc3e976a6b534774ff8c2fe3c1355b925d8c91fea30616b85c11762820604d063733185c1234604ebbef80dab831ce96afdd08f66d3297b50c5482f996dfde5b4918afe2bade8dbdbf8d6904bf1cfcbfc4878fb2fb5b7d33d9f9155495a1c6a1d4ddcbdd8e57448d1591938469173ae270035101d60b31f28f5ea5c21df4339c08006dd737f7dbaf4829c3579aa0a7097b64ec3f7629d17c5cfe069e0a33a2c3a8b4a48bbba0c6fc3b839df30b587e00ff956fe55cccf483629157b325ada628ca2ec3ea50597a1c12cc19d337a55707b7150e78ba3eb038dc4c0e460a1c88aeb6550498744e23eb0cb95dee10a2e2868337c8280d30ff169a26807557495cc6e293e7c845b8daa0d494aa7ae73dba4d728b343a806baa0d3e672a3d2ddd352d26eda9698aa380ffe69d10a536454cd1efc8d5f5c2333e99e877f468d6020c773c17bf89273a09548014d58483282618ab6768be8c599a82edb337df595bc6c924a2d0268efdecde41585b890a952d4784ccc6bb8728f5aa3a61570c0ece8d7daadd1dc499abf4f08af8821d36ff71b6c736988807516d2e90239822d5823fbbd13e8acc1fec03d6b6f2668bfc2ff2aa4004666b33d6f16414b60c7f6fae83894f23f4ec04529a785f1d92336c010ec3185bcc1d5deb4d84e9dbad97a6030fd5d25e3a8517c616455a22b18f02546b5ca330c998d1866b36a122379769b576344d04a419a2e33c7a2620ea78baa8e9bd47aab99717cf014fc9b6f25b9fcc73169043b83d4a90887b21a920bd6b6d365eeb91017a87721b57a9d6de301686a219d7006089568e65a38ab2851a95297afa0630591998d1c82a776716f56703d292b4fda50c2a13be9090d8a4128c06958a50bc972ee7c35741ba79cc6c6d592de5b4df101f5fdaf9f521a6ca6bbec7f819dc1f1192ac69fd60473ad37ca5c21a6b54a5177d6d52456d98957f425d97d82dceea30c682ff9c5f27460addc7214da44c5d3d0dbe529358ff26e500706d4e66af671c5b4d7db04c90def3f9f934fe8620f9ae0e3366c2d5e646b4abfcb947c55bb1050c21fd1b158cb84b27c180d01f62e5222a6bf36d8aa4a5e4859d5b7a36735e896bce24f6aa7f1abc03f5657ec032f797da3c2250e7669cf0dd451a28ec9733e22383acf2405186ca86d5ef6c8e92793dfceb5476e2cf710b7e4e9bbd2786590c8feba270cd97ccc259f7b9b854dd85eccaf8972e1402a6d8f004b9ee549d6098cd49c0454262447a2b856c9bc511415adf0cbe8c2f796b09fda23a4ca95b9fe2849029e147dc3adace7310412c40252d8341d57c2eb8dd3a2444aba6abf9235b15a20812652f18f19692e6de2dd6fbc24209febd91a09ce4838b9d6fa2a0f77294ef1db1092a26859c7f23820cb949a50514e57138357aee0ec7e0e0b45c3ffd40a1b8af3a71433d2e459bbf47bb724213588e0f8c4438762f4739a115fc773d4d4a19f705c29164db3dbd7d0cbc40e6ee388eb04ce793087ca882c950f0b63d681750c5ed507b37b0fdfb867cd42e89b051caba4e016334812b8cd1d55bb428cb9dbb7f3b458dabd68b18de23a8377343c58564620f5b2b3e7d808b9074aabd5c6ffd0c35aa3bd80989b7d343efef415565ea9291613dd2a374d9ed636a4742d0e41fcbe65a8814af2aad0c3b7791b9b9c0dbb4487950bf0742b0f7e725704bd9bce9b8ffa01682a9e6b853aedeeda46cdf5f25499f32be4f1f413e104e726f745f9f18242af44a5012ee252413f1a1f188c8e328fbfcb27e845ad3087cc232510cfb73cf4ae89aa6fb96046e5a8542bf11f6e37a5cb17ef3599dd9764f2a850c273f1f607215af7f3f0b3cedb5e366dbaa2e521a79afd88b39803ea2230d5a1d8196dbfa3d7c20f6352b8152a6529af3417c2e3e78020779e2717a885318e91d8ef087f0faba10d2c14d9546d543180fdf96c58cf7ed78b3ad18f107f4ba6dd325f0948711306b04dfff221994533f24d96022953a1701c82d14cf996947774ba038d9f55f03ce7ef4bad02b26789ad142712671b3197b54cc93f0eda7f82f1fd92037096910a31a1e9dfd1bf97464fa5be31c22b94230d5df9db37d9d6255163723269a0ad0cb09f835c415cf57ea38df7d657ac0f82da98723a005296d8a3154dea139d761e9fe4b3a0b92c02c38d52fa0c22c376171818eda48c6653cb5c030653ea29d6c70e48943d195ceaa51085dadb6297abff3086aaadd08a3ec823ce8855e051ffe0ab78342a7c9fe48e0dd80edf463e14529dce7dfda6b305f8cf3fc9bf9b1dbbd661dac8877cdea8a6a6e8ea4f6e6b55f89fc70594b38bb47a7c1ac6ee842883c70bdf03251888d4c0a3620e6f35b23ba58a7f28cff3aa67b6fbc6598160c6fb886d57d61c78e0f082c6f5e906b50a9e489ff60c381f6fa8c1f2013270c19f98b079c5074fdae6a26d124cd1a9c55983bf345c656c0493c0b43cce997eb42cfc96e633b2028398eacdcd0067d76a33873f0bc6de621b6a0261c1a23b942aeaf21b8bae1757524b98069b6ecc91dad22ba2ed5ab7a0e3d398979177c4338dc850587ad94286f39ae9705222dfdeee19cf7815da4b6f8fea9602503762004868415d75481df8e530746122ce1d9cdabe00aa797f89a2d7190c069e85cc4e038273dc03ede0c0938c96eeb38e804aab438a2a90ee1008de471a9ec25d27fab601976e474510956b4ab9e88a99d8426cd72b9cc3de931195bc5aa8c994d43f5776f7089d3f013900b7680a11002d4330adb3be619d4cf1fe13a5f0258e7b98925f704f5c291ce8f499d546cae4ed2ae7024544be235d5e521279c3b03fedbcc8892e357c1956ed5c24d1abda710c8f2f16d96d1fb51716cd79ac4cda89c2c1ff7a37bb056cb3724395f21a31abe667ba16433317a6678b6744e8cf94c323d02a19a4f84d7838e3bdfbe4efeedd490d12b24db895b62de800f4309501e21ee8ce814ad1d17fa6e7c46c39bb402cbe920932a5f0e70a3ac454d506c225eb810d71b65902578c8835b505bfb16d6e41da82ec929af78ad0d62720f265d80c1a2ca0943ba5df2835be5e63b9127cb1e8e83e23f69ef29304f035ed07bf7ec4b30fd38621f47a97b9cfbf4fff2463ea0f1ccf135bd7574482668d7acf7ee0c47bbbc9217d86299d686514f58c382a25eb3ecdef15542dc9cc61c86552daa053ab1eb314899887a8ee3ef868559cf2117b9b564207991a482bbb631da9d60e9881bd1f771937bfb340ef7d5d7d6028e8cb5df3cc3065f2ab48c209a70678388d149f052fdbf5f4717d56f92adcb15212591b2833085592f8376bad749c84d214b209f788b1b5036b04b793fd2bfed06175563305a0fc8762d0df7fce06c8d0fee427d4a6ce40999312345ea0570997e195bab5895901b8780bb75d5f7b8ae67e5217e10b5a42bb32029d7de62d0801cfc697f53539cf232af974e4fe01060da536213850040057f93479edd1c3b64f30bed12ca476c5acca8ca953f305d86838b3ddfe7209b7e8106f8e67575687a0733561a86aeece0b38bc29d25e162996edf0ba398ff555425c63c9b486af6c8b05f3b45ab19dc12671a457d33728c7a394bfc4531f46ea9dc57d71bc0eac339debc75401a7d692fbd8601a61dff372fa43ae0164c20d677cd0d77db35da8276007b672d16b90a5ad2cdf7c6b2e0a995026086a2be61760a13a50dc7cd98e16a649de0800106522eca9bd068545159084aa49df7d31849d0796ace9ea0da827b3def6c8cfb40431e3af5fc5a122f33c7ffd6f6ca00ad41a8452c507eff313bad3e70a86dba63ed70d6da69feed9599160a7fb742deb6e29db0f36975e1f94021e83906d375a082e731925466c55af8cc0d2e6636739c09f41a29279dcc8e3e3d33291b946cb093552156c28e2f0f3ff8238473a99946bc49a0d332d4de0c72ee003f79a1ed652b8e5a37b74fd4797631e0e5e460c57aa62683b5ea6af730b9ac9fc495aae58e0928c87e4e15b59813abab6f5acac09ea64845dd831060f7bbb70a24d10b3388817ef372d07ab28e260df862773c9655d97a5507111f95ceba1bc9f8104f949da089732f62cf37e7fc840bf747dd6569eeb35aecf54b29d59fd51de8622f18eefa05dade1e21b36959602cc9929aacfcf7d12bf0d82fb3655b089b10b227f2b0c43c2121c1426b2c1d59c53a646337eeabeaffb2e845dd50bd1985dfc8104cbad1f137ded9b598d00518ff65a27070b118963967f22daa2fec7e04ce70dc916021c972e90f87975bcd26f2e46bd9c549e2f20bb8488ec129ea36b095659aa0cbbd59b63940567ebefba16395cf71061bef7fc4da14f354eb8723543fb6963731513d4a45fd409cbf47c89e47595f48d95724a11b5b9db2f5ac75bab9d50d17d1367650213e777fcb8e49cc2d844294d4a9bfec9479009932d3d8336bfc970e98f5fead8a8e6b26a14af83eb4fc95b8eca76f5b3bdf85001fc7209f7c282996a263731347d54a8483b6fa5d25a594762ecdc83cb2c548b65593f431639ea87195c36962d05cf3d9a7361c89f0bc1829641a4d220fc0e28fa099f5382d765f9b4c06e862374cae20439b6e366d51d92d0adc7cd9bc1d34c358ca5c6bebb6afc0f26a6bfa16b9eef498ffb89900fec0b3d5987c5a9b56782dd520cc116efc513f35bac9b288039d48860d9166a84f5fc32a0bf01ded49a340c230e37ea2a690d7f27e41dc4dfc1f5f290e34ea3212a2194e4ff4bacfa4597050ad3e9c4c1e5f0cadd386f9e62bfef9af66c2024f8e8e1633f306a77b0fc168d8af973b62b7d6773ade3fb0efa6c8e65a79eb198a066a18e7b231dece245af1224bd95db22c0e2a395397b446367e18b42167eafa4e8789e902b0890d39254b825397eaa4dd2bda7b96e608009cb1837ce72bf9ff7a6971f14933d2279a9bf784adbd8fc908b2c5f81fff78c66be4cf34495e2f01385b9244a1fef765c21e07bb6a893e344edad2aa4485eb5f45f52900a8f54f55efcb1141900455e25174aed03f5bf83d404412a7086b8c5497acf6add5132a0a372bf2e1e63918f07d2495f15240074fecf02a1c1b341571146baad672d018860ff879e661be142db9e2d357f7dafc5ff8cbe3a77f5cde4261599878183c1f4eaaed7de683fa54c5e0c166adf9977851225a93ee40757c1a88016074bcee8289d8e8029e84d565aab4d3bf8fdfee597cb1636ebed316f42191752e14e69447cdd72c213bf8e93974cbdf3712a90db37e36a019c67c983a7c3acf3d8339967c6cf59e8d166416fb04e9c1fb9a466c0e991cdccb64dc0422a5dee981bdc3c34a70213a7b9e69730da1f7253bbfd3369051aa1634e8e8a4819acca7ab6a06c335b85063b28fcb75920a4aca8f7006bb7dc5d3cc79b88ee2e8dd676a5a11519a5eb8084466c95a0bab4565b79ec8a4fd9f48d350306a1eb01452fda1c74bd85e7e133ea6e54f9ca697dc75d7bbb54dd5f4938d034c53bc6d721e63ffb5c1e035939be54060ade5225bf2ed9beec43d81e0a60a6cd61db3d21f104de83bf14916e61963ff3255d97b37bb2479190615cbad13403ccbd4a5794faf6ff1feb3f5c6a55c82077750ed0c65e08b591ff7ab408d46b0d47fde298ab825d02c0d4164ef6219af1f42da42e5626108a53b875e6cfd129858437b64a1d0bb2e34cb343f12e83ab68f41557adf76af84d844662b1c409e38d0da3fc181a1667d11a96d1a4c775e726ce675798ad1c50bd350867acab3cc0629148f5a3f5da7b4ac49c0bd3d0cd7bf93b07ef8b23af9b4ebfa6c331b3a66d28d613a5d21793c4d25f555497d37d8b6bc918d3ee69699c8e7f96ad5656bd95230cc03c714ca45555f87e961ae790a5ffc3256e47b38ccbe549bf5c6a817169278e329a412d4da76a9b454d727b58b28ab2afd603a22d29d95b3f57b5b62ec167d82acd8a9c5584c045a01e1ee9497e9324cfd576ce03ca10b761887730006ab0468c0326b7793019642532d211e7409b630344f5ada0f26fdf5aec77d201c8d5b5a7ece51e4168f559b2032626af30f7a1ce2760893fe3a0c253c9e43cec5918ae92d8b6ab848169048bc288b0c6e10a38222642a5600bcc47aa57b785f32dc837eff2e3e553eafb141490e9d5b468b30b42eda3b97a16c4a4861875e4e0dce1beb01d5f926210c48ec4c197d68c51f125d25eaca78f9436b87a7141c2005d71afbceae583d20e0a61e8939e51fe02cc9261de89ec78551449550f564d790226e33b530d3f06bcf1f0334d167be2c2db00610f5b247f92c6f760e8b7dd39ae80bc8c7b3246987e3dda713d45f2116343b635740859fcc37f10362e60f2b77753aab3f778d1d267fdd441cf2419702790f1566c67d61c054272026e35136873add86a7f9f6f18179f0b976410a4607615763001bd9247605c627fa8addb896a54ae38704aaedeb227a13fa2bd3548599a6cf06f69853969fc073ed0274023bc56c82f680e212a3473c268963649db42273f49b5fdc9d620cf0ad31976078f05fa5802fc4652ddff4441881312210be7c681ebf3e71fe71b6a26467eaefb6d8725a6653ec9ed9ad915f3c8bde9de422bc0118dfbbe9c45e39dbf289ba9fb8d95e4f75682094637bdae92671a8618634c3691d4beb1b59422cff1d99f20f05afff535d14a44ca4c9b733a7d24e0504c16f12d147641e531897ac4e945e0366616452a175ae320424814047eb997ead475cb64c8dc4bf7f6e7ae42052597e6453d1becf694358d6272e2d33607618405438d156e1dde9ce3b518261b6aad799026edf7a4a3b17c4d1a87715cc0e83b4cdf9b19625b76504f9589a94d4e206b28b9f8f82ae502928f66ababf7ef633e37b3fd3e3fcc1fc4807d3424d7d3f1f91341402ae47f2ddf3cb1ccede0005cda24524e18f3d1ed3a4a572e4a9c709457bece17272453afedf3dbe7f915b8282db445de12d3206de83c4f9e936dd6edfd7d835c35f32b57b0a534aecd565f7335add381a4e23f70d9d6ece4d7a016622cc0c04f22b43bfca9ce085111d91468b82f313d34c6508cdfa42335a6240e1684346222f44ddcf2275410040473b61369a3cd13fc951d636e596cc79513667650d29c2ffc4278dfe98f036b8434a5560960607badcd231842592138e3f1251831912b5d5ef76eda445912d3f6b304e060613633d3acb7b33f2aeb3ea505be4ea0cfff7f27b435390c0cccf3da6934c945ba2f9b41ac0e691c08e6b496f211d207d0513cb2d10fedee6333e772a4658fd20f04657589920922291a8083521aaccd4c4a612ce04f82cd4a6717bc40a776dc3c142c1f7037114098bbe5adcc7728881143d347d72b74ca6f6637679cf53acef06b8a44f42a6517c01ea174e0db7965442769f68712a6112129b23730fe70f774857afd78f7269a356defaa38f4315d4251ab54425768efc5d9be4b99a8790e8db810c1071aefd631dab17e26d6300d9d15dd79f5383461c78c1c17d24a0112edb3be85a675a703342572c6e49e7376095b7ae8c9ac8a2a474f39f89e6bed27ce147a0ed9a0ac95e53c951e0750ecd358c52fe18087f83619ac94eeacfefc02a962dd5334e6b2c30ebfd1aa2edc613f7d33750c9b8179e6c516f9afe501c9a261acbef3aa40e76994cb0d6e009c30fec06128589c4216be89d27308b04471666454617eef52cef09807ffac5317368d7e8f97853779ff592a01a9914d5c7a81102d4ac1d43c84c323002633091efe4d7245f3f5747f377c37ba799881f47b124c05e65ad544b6b889a608458c4cc042274b61d29fed50e8854ffbf4c2b649d2eb12fc94abcfc319cbab9ab98737d1de0899f235f139e86446dba63bb8c3de6414cc8aad988d17225df88ae32a37c462c11e7b93b044416451180d151f11e6d53c8e022bb5a60dfdc284f148fca2b6ac881a1d6c73167613a2513ec72ed7bffb51826b76e02e87b0879a34e41ca2bebe995ecf26d12d3b5b4c9f3ba4626d8b2ed99c0d21f59ad859e395c10d48235b4fbaf2d2f5daa74b27a4ad64b9905ebd07f7aba240a933a19b060e193ef0cd9def6d95fd6cdb42fcb0108c5e2919084f43cbb4b3c9a89eb60af1dedad8ee21239f23aacf573a3fc93dd29c5a5a94ab84b785f23f7c15f0ae04b06c7fbcbecf8530ff3563a3731dd03333416863b87d7d5fef1000b80568cfdc857944b5e383e9a62eecfb1c9b8c87b57c9913df87caf6ecdecfaf79c310b5c3e1f3a81ebc3f7b41e1ef2a575d70205733cc3df972f386d518b73e5490d4ab8ea6f02225c54067cc29c613016115b9207143036f8de049ab14700efe3784679a3b1c3f20501332f7af93249791da832a1a0d8f046420f452c47855a879b7cac3f0ee34e83428e94777672554507b27e21d2fb9c2cb562276496dbb42bd10756534c8d171c201577cbf69d5b2d9a807f7e309133928e90544c6c0e7115f4ad7e0d74416ce52028439564ca6ac8a97387816e2ef8732e9339da5c98ec7c9ea1928db4ff404064426ce00c5be9c17032d5324560d998baf5ff345aedaeacc181af9850554cb5f142046b8469809885c61a9c062dbc88a9402f71b04452a47fd101ea826063024410b33fe2c4ca5ecef29887bc3a0d0301450e6869812b358f1edc294ab17421e5ab64f11f0db74275186f26f3a6b6851ee5ad0be0a8ddc33334dfbb4d6d385b00f6980b6ed986aef8d11e7110d36a05c274cc1dae5d8a177545078dd2383fedcb934cfb9ed3c2c8874a51798774c7dc631ae9423d164a3059eb678fbcaf49f9ac58616ff066cbbce2edaf3ad0aae56aa79fdaac1b76c0fd42e8c91b267203cc982789e4048fc2a1aec7259116be531c59afdd08076"}
|
package/config/apps_presets.conf
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
# Platform-Aware App Presets
|
|
2
|
-
# Format: name.platform,bundle_id
|
|
3
|
-
# Priority: Most commonly used apps first (system apps, then popular apps)
|
|
4
|
-
# All apps support both iOS & Android (cross-platform)
|
|
5
|
-
|
|
6
|
-
# ============================================================================
|
|
7
|
-
# SYSTEM APPS (Highest Priority - Most Frequently Used)
|
|
8
|
-
# ============================================================================
|
|
9
|
-
|
|
10
|
-
# Settings
|
|
11
|
-
settings.ios,com.apple.Preferences
|
|
12
|
-
settings.android,com.android.settings
|
|
13
|
-
|
|
14
|
-
# Camera
|
|
15
|
-
camera.ios,com.apple.camera
|
|
16
|
-
camera.android,com.android.camera2
|
|
17
|
-
|
|
18
|
-
# Photos/Gallery
|
|
19
|
-
photos.ios,com.apple.mobileslideshow
|
|
20
|
-
photos.android,com.google.android.apps.photos
|
|
21
|
-
|
|
22
|
-
# Phone
|
|
23
|
-
phone.ios,com.apple.mobilephone
|
|
24
|
-
phone.android,com.google.android.dialer
|
|
25
|
-
|
|
26
|
-
# Messages/SMS
|
|
27
|
-
messages.ios,com.apple.MobileSMS
|
|
28
|
-
messages.android,com.google.android.apps.messaging
|
|
29
|
-
|
|
30
|
-
# Contacts
|
|
31
|
-
contacts.ios,com.apple.MobileAddressBook
|
|
32
|
-
contacts.android,com.google.android.contacts
|
|
33
|
-
|
|
34
|
-
# Mail/Email (default)
|
|
35
|
-
mail.ios,com.apple.mobilemail
|
|
36
|
-
mail.android,com.google.android.gm
|
|
37
|
-
|
|
38
|
-
# Calendar
|
|
39
|
-
calendar.ios,com.apple.mobilecal
|
|
40
|
-
calendar.android,com.google.android.calendar
|
|
41
|
-
|
|
42
|
-
# Clock/Timer
|
|
43
|
-
clock.ios,com.apple.mobiletimer
|
|
44
|
-
clock.android,com.google.android.deskclock
|
|
45
|
-
|
|
46
|
-
# Calculator
|
|
47
|
-
calculator.ios,com.apple.calculator
|
|
48
|
-
calculator.android,com.google.android.calculator
|
|
49
|
-
|
|
50
|
-
# Notes
|
|
51
|
-
notes.ios,com.apple.mobilenotes
|
|
52
|
-
notes.android,com.google.android.keep
|
|
53
|
-
|
|
54
|
-
# ============================================================================
|
|
55
|
-
# BROWSERS (High Priority)
|
|
56
|
-
# ============================================================================
|
|
57
|
-
|
|
58
|
-
# Chrome
|
|
59
|
-
chrome.ios,com.google.chrome.ios
|
|
60
|
-
chrome.android,com.android.chrome
|
|
61
|
-
|
|
62
|
-
# Safari (iOS only)
|
|
63
|
-
safari.ios,com.apple.mobilesafari
|
|
64
|
-
|
|
65
|
-
# Firefox
|
|
66
|
-
firefox.ios,org.mozilla.ios.Firefox
|
|
67
|
-
firefox.android,org.mozilla.firefox
|
|
68
|
-
|
|
69
|
-
# Edge
|
|
70
|
-
edge.ios,com.microsoft.msedge
|
|
71
|
-
edge.android,com.microsoft.emmx
|
|
72
|
-
|
|
73
|
-
# Brave
|
|
74
|
-
brave.ios,com.brave.ios.browser
|
|
75
|
-
brave.android,com.brave.browser
|
|
76
|
-
|
|
77
|
-
# ============================================================================
|
|
78
|
-
# COMMUNICATION APPS (High Priority - Daily Use)
|
|
79
|
-
# ============================================================================
|
|
80
|
-
|
|
81
|
-
# Gmail
|
|
82
|
-
gmail.ios,com.google.Gmail
|
|
83
|
-
gmail.android,com.google.android.gm
|
|
84
|
-
|
|
85
|
-
# WhatsApp
|
|
86
|
-
whatsapp.ios,net.whatsapp.WhatsApp
|
|
87
|
-
whatsapp.android,com.whatsapp
|
|
88
|
-
|
|
89
|
-
# Telegram
|
|
90
|
-
telegram.ios,ph.telegra.Telegraph
|
|
91
|
-
telegram.android,org.telegram.messenger
|
|
92
|
-
|
|
93
|
-
# Zoom
|
|
94
|
-
zoom.ios,us.zoom.videomeetings
|
|
95
|
-
zoom.android,us.zoom.videomeetings
|
|
96
|
-
|
|
97
|
-
# Skype
|
|
98
|
-
skype.ios,com.skype.skype
|
|
99
|
-
skype.android,com.skype.raider
|
|
100
|
-
|
|
101
|
-
# Microsoft Teams
|
|
102
|
-
teams.ios,com.microsoft.skype.teams
|
|
103
|
-
teams.android,com.microsoft.teams
|
|
104
|
-
|
|
105
|
-
# Slack
|
|
106
|
-
slack.ios,com.tinyspeck.chatlyio
|
|
107
|
-
slack.android,com.Slack
|
|
108
|
-
|
|
109
|
-
# Discord
|
|
110
|
-
discord.ios,com.hammerandchisel.discord
|
|
111
|
-
discord.android,com.discord
|
|
112
|
-
|
|
113
|
-
# ============================================================================
|
|
114
|
-
# SOCIAL MEDIA (High Priority - Very Popular)
|
|
115
|
-
# ============================================================================
|
|
116
|
-
|
|
117
|
-
# Instagram
|
|
118
|
-
instagram.ios,com.burbn.instagram
|
|
119
|
-
instagram.android,com.instagram.android
|
|
120
|
-
|
|
121
|
-
# Twitter/X
|
|
122
|
-
twitter.ios,com.atebits.Tweetie2
|
|
123
|
-
twitter.android,com.twitter.android
|
|
124
|
-
|
|
125
|
-
# Facebook
|
|
126
|
-
facebook.ios,com.facebook.Facebook
|
|
127
|
-
facebook.android,com.facebook.katana
|
|
128
|
-
|
|
129
|
-
# TikTok
|
|
130
|
-
tiktok.ios,com.zhiliaoapp.musically
|
|
131
|
-
tiktok.android,com.zhiliaoapp.musically
|
|
132
|
-
|
|
133
|
-
# Snapchat
|
|
134
|
-
snapchat.ios,com.toyopagroup.picaboo
|
|
135
|
-
snapchat.android,com.snapchat.android
|
|
136
|
-
|
|
137
|
-
# LinkedIn
|
|
138
|
-
linkedin.ios,com.linkedin.LinkedIn
|
|
139
|
-
linkedin.android,com.linkedin.android
|
|
140
|
-
|
|
141
|
-
# Reddit
|
|
142
|
-
reddit.ios,com.reddit.Reddit
|
|
143
|
-
reddit.android,com.reddit.frontpage
|
|
144
|
-
|
|
145
|
-
# ============================================================================
|
|
146
|
-
# MAPS & NAVIGATION (High Priority)
|
|
147
|
-
# ============================================================================
|
|
148
|
-
|
|
149
|
-
# Google Maps
|
|
150
|
-
maps.ios,com.apple.Maps
|
|
151
|
-
maps.android,com.google.android.apps.maps
|
|
152
|
-
|
|
153
|
-
# Uber
|
|
154
|
-
uber.ios,com.ubercab.UberClient
|
|
155
|
-
uber.android,com.ubercab
|
|
156
|
-
|
|
157
|
-
# Lyft
|
|
158
|
-
lyft.ios,com.ubercab.Lyft
|
|
159
|
-
lyft.android,me.lyft.android
|
|
160
|
-
|
|
161
|
-
# ============================================================================
|
|
162
|
-
# ENTERTAINMENT (Medium-High Priority - Daily Use)
|
|
163
|
-
# ============================================================================
|
|
164
|
-
|
|
165
|
-
# YouTube
|
|
166
|
-
youtube.ios,com.google.ios.youtube
|
|
167
|
-
youtube.android,com.google.android.youtube
|
|
168
|
-
|
|
169
|
-
# Netflix
|
|
170
|
-
netflix.ios,com.netflix.Netflix
|
|
171
|
-
netflix.android,com.netflix.mediaclient
|
|
172
|
-
|
|
173
|
-
# Spotify
|
|
174
|
-
spotify.ios,com.spotify.client
|
|
175
|
-
spotify.android,com.spotify.music
|
|
176
|
-
|
|
177
|
-
# Apple Music
|
|
178
|
-
applemusic.ios,com.apple.Music
|
|
179
|
-
applemusic.android,com.apple.android.music
|
|
180
|
-
|
|
181
|
-
# Amazon Music
|
|
182
|
-
amazonmusic.ios,com.amazon.mp3
|
|
183
|
-
amazonmusic.android,com.amazon.mp3
|
|
184
|
-
|
|
185
|
-
# Hulu
|
|
186
|
-
hulu.ios,com.hulu.plus
|
|
187
|
-
hulu.android,com.hulu.plus
|
|
188
|
-
|
|
189
|
-
# Disney+
|
|
190
|
-
disneyplus.ios,com.disney.disneyplus
|
|
191
|
-
disneyplus.android,com.disney.disneyplus
|
|
192
|
-
|
|
193
|
-
# Prime Video
|
|
194
|
-
primevideo.ios,com.amazon.aiv.AIVApp
|
|
195
|
-
primevideo.android,com.amazon.avod.thirdpartyclient
|
|
196
|
-
|
|
197
|
-
# ============================================================================
|
|
198
|
-
# PRODUCTIVITY (Medium Priority)
|
|
199
|
-
# ============================================================================
|
|
200
|
-
|
|
201
|
-
# Microsoft Outlook
|
|
202
|
-
outlook.ios,com.microsoft.Office.Outlook
|
|
203
|
-
outlook.android,com.microsoft.office.outlook
|
|
204
|
-
|
|
205
|
-
# Google Drive
|
|
206
|
-
googledrive.ios,com.google.Drive
|
|
207
|
-
googledrive.android,com.google.android.apps.docs
|
|
208
|
-
|
|
209
|
-
# Dropbox
|
|
210
|
-
dropbox.ios,com.getdropbox.Dropbox
|
|
211
|
-
dropbox.android,com.dropbox.android
|
|
212
|
-
|
|
213
|
-
# OneDrive
|
|
214
|
-
onedrive.ios,com.microsoft.skydrive
|
|
215
|
-
onedrive.android,com.microsoft.skydrive
|
|
216
|
-
|
|
217
|
-
# Notion
|
|
218
|
-
notion.ios,notion.id
|
|
219
|
-
notion.android,notion.id
|
|
220
|
-
|
|
221
|
-
# Evernote
|
|
222
|
-
evernote.ios,com.evernote.iPhone.Evernote
|
|
223
|
-
evernote.android,com.evernote
|
|
224
|
-
|
|
225
|
-
# ============================================================================
|
|
226
|
-
# SHOPPING (Lower Priority)
|
|
227
|
-
# ============================================================================
|
|
228
|
-
|
|
229
|
-
# Amazon
|
|
230
|
-
amazon.ios,com.amazon.Amazon
|
|
231
|
-
amazon.android,com.amazon.mShop.android.shopping
|
|
232
|
-
|
|
233
|
-
# eBay
|
|
234
|
-
ebay.ios,com.ebay.iphone
|
|
235
|
-
ebay.android,com.ebay.mobile
|
|
236
|
-
|
|
237
|
-
# Walmart
|
|
238
|
-
walmart.ios,com.walmart.groceries
|
|
239
|
-
walmart.android,com.walmart.android
|
|
240
|
-
|
|
241
|
-
# Target
|
|
242
|
-
target.ios,com.target.mobile
|
|
243
|
-
target.android,com.target.ui
|
|
244
|
-
|
|
245
|
-
# ============================================================================
|
|
246
|
-
# TRAVEL (Lower Priority)
|
|
247
|
-
# ============================================================================
|
|
248
|
-
|
|
249
|
-
# Airbnb
|
|
250
|
-
airbnb.ios,com.airbnb.app
|
|
251
|
-
airbnb.android,com.airbnb.android
|
|
252
|
-
|
|
253
|
-
# Booking.com
|
|
254
|
-
booking.ios,com.booking.BookingApp
|
|
255
|
-
booking.android,com.booking
|
|
256
|
-
|
|
257
|
-
# ============================================================================
|
|
258
|
-
# FINANCE (Lower Priority)
|
|
259
|
-
# ============================================================================
|
|
260
|
-
|
|
261
|
-
# PayPal
|
|
262
|
-
paypal.ios,com.yourcompany.PPClient
|
|
263
|
-
paypal.android,com.paypal.android.p2pmobile
|
|
264
|
-
|
|
265
|
-
# Venmo
|
|
266
|
-
venmo.ios,com.venmo.touch.Venmo
|
|
267
|
-
venmo.android,com.venmo
|
|
268
|
-
|
|
269
|
-
# Cash App
|
|
270
|
-
cashapp.ios,com.squareup.cash
|
|
271
|
-
cashapp.android,com.squareup.cash
|
package/config/devices.conf
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Device Configuration (Auto-updated)
|
|
2
|
-
# Format: device_name,udid,ip_address,platform,type
|
|
3
|
-
# Platform: ios | android
|
|
4
|
-
# Type: usb | wireless
|
|
5
|
-
#
|
|
6
|
-
# 🔌 USB DEVICES: Automatically detected and saved here
|
|
7
|
-
# - No configuration needed for USB connection
|
|
8
|
-
# - Add IP address to enable wireless support later
|
|
9
|
-
#
|
|
10
|
-
# 📡 WIRELESS DEVICES: Manually add with IP address
|
|
11
|
-
# - Format: device_name,udid,ip_address,platform,wireless
|
|
12
|
-
# - iOS: Device must be paired in Xcode, WebDriverAgent running
|
|
13
|
-
# - Android: Enable wireless ADB first
|
|
14
|
-
#
|
|
15
|
-
# Example entries:
|
|
16
|
-
# MyiPhone,00008130-001A45C83ED8402E,,ios,usb (iOS USB - auto-detected)
|
|
17
|
-
# MyiPad,00008140-002B24361E41901C,192.168.1.100,ios,wireless (iOS Wireless)
|
|
18
|
-
# Pixel8,1A2B3C4D5E6F,,android,usb (Android USB - auto-detected)
|
|
19
|
-
# GalaxyS23,ABCD1234,192.168.1.150,android,wireless (Android Wireless)
|
|
20
|
-
|
|
21
|
-
iPhone17,00008150-001058D13478401C,,ios,usb
|
|
22
|
-
Pixel Tablet,emulator-5554,,android,usb
|
|
23
|
-
iPhone17,00008150-001058D13478401C,10.28.127.167,ios,wireless
|
|
24
|
-
2109119DI,100.84.68.240:5555,100.84.68.240,android,wireless
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Protected Shell Script - Devicely
|
|
3
|
-
# This script is encrypted for code protection
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
NODE_BIN="node"
|
|
7
|
-
|
|
8
|
-
# Check if node is available
|
|
9
|
-
if ! command -v node &> /dev/null; then
|
|
10
|
-
echo "Error: Node.js is required to run Devicely"
|
|
11
|
-
exit 1
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
# Decrypt and execute
|
|
15
|
-
$NODE_BIN -e "
|
|
16
|
-
const crypto = require('crypto');
|
|
17
|
-
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
-
|
|
19
|
-
function generateKey() {
|
|
20
|
-
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function decrypt(iv, content) {
|
|
24
|
-
const key = generateKey();
|
|
25
|
-
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
-
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
-
decrypted += decipher.final('utf8');
|
|
28
|
-
return decrypted;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const encrypted = {
|
|
32
|
-
iv: '42f5be9a67bbb4a4653903463aecf1b9',
|
|
33
|
-
content: 'd97963ed6fab696c8aa979f16f1422120d2a89d1cddaa952c86b9568e4cfbea5516a6769daa25453c34d66e789a2f88555ac5bdfc156e604ad15884f88dc426679ecae528a973ef86ff588484f41d56ac759a3df42d0b8eaecdfe4a694b760a2d3b4c1bbdf0b44b3baca3de1b80c3e68d2567a7d7e50d7ae7fad4231494f2472cf19fc12c51a658c9942029ede500820f168ca100e5782597850aa92efbd607dd84066b8ce33ae071b8558896413bc9ba23e24d741ff61178c2b87996f8f209d1526e4b43e917b15e1e1d6ae631d22ed7050ce1e5380254ccbd29fe9bdfa201de8d816245f9bf84138c95124227b6fc8ae49d14f4ea4936936c7e2b23e4cee63b10bc92b1c6afa8e6c0c0d7c6cc1419ffd0854f6cdd11352e28202392d65cfe3ea8081cb2ca4e80cda65e369092d38ecd11fa615aae10d5f7a4f5e7d17c31a190c5f95377fd57c2080ce17cbe82125b22092cfb310cb6b821d11af235331c85b3a12e3a6582bc223128b7d6835eecd2baab7c2c869c3b3f231a93d34f71c298109cdbada529eb420fc19f1fb454b6ed4a315733bef8ac7990b4b5e11f5ebfa24a58450f9b98c1a481bfbc806ab04396b91174831faccd5a254fd31c354b0729d7b80693ee28f5cf052a7e7bde0844dd58b1388dd9cad4a02fe9e574ef300aebbb034f0ab39ac9e7ea4ca796145f0dbe4e1c8021c67a878b6f58deeda034d7182501db0658e948d34697a395dc6d3e12788dd5d6b3756b74dd23ee7e87efc287fae380c72f938118a5d6afe779d9ab6449fe7ebfea7f1ee1547b84f705119b222127bd75519ef83cd1d6c948e73b7a14e2528ebfac27b97de90106879c94e63968be49d1f6fe4657468f968d6ac994067f3b7ca24ae5bc42ff3f3ba40809896b667d00880100d0318efdb7c140f1cbc6349af28842deb343b2a1ba238ef0e0a85f33cc54d7514004a2e491c6f8772f925a9bcfd3bc97e1875516ced5191b331b9701b947dfffd19c14ed42bb861221c8e7c8df5986134fbc649f801f14999ecdbf08d4413147dcd7e49da82fb5f79832c37d42c56ccd5726f2479205091fa268846d067588f05da967585938d340be4edd6e67aee8f15f4a73deb49774ab87679792ea6d31d85ee6044093b6335ea930f3b5c92eadab04e4b47c8805c90101abf4eba6330bcb3ff767a58bfc9efc7236e1f15d2b50d8d606894ce512dbf1e28cba23b6006360d69239be4b56df561216b6f33cfdcb39ca3d622420d91b276a85b0e41518ae855f2cf3a039ba4718224e2bdc5bc897166f5669eb3fa0192a842413a77bd59831e54181316156fd7254437d5068b5deefc3832a7644bcb81cea29ada0a9416826908dac3a7bc64fdeea0f122ce7f5d04ae001912609a68e025dcfdcc7ed068650d438dcb398ac9f5760ce900cd9d4387549cde427a990e7e9e9e128281d951b7cac20427b0f1f6f3bc2874a334ca47930d47660fc4b60543d41b28fc1a1c99856dd14ba2cfb1a7f325c0bc9e53fd4c91955465b75a9fbc08ccd76d4feb039c3295a01426bae24345ec42057f253a6970f57e307cae7e8a308c6863d97114ab801a67f47bcd4b127422a6e4161a60de31ff2e32c141dd08ec854e94045d849cb2205dba167e8fcda23a89eba33323d2b5f9a3f92f50ce6025964159ab15864c99d6f2d0d340546d7c865869347b6a203c2b1665e7f1615e19c41892e9693ac57094118061b6dc64e3b2245d4e18f66d00f7d99fe386fc5e54d3f85c423dcf87b8e4f92c2419f3b0cd102e7012a868e6b9fa686a96432c70ba1756ae700269776eed0854232cb97a79bd8cc193d1a95aa7c624705e760ea6437da0915f22d3f987c9403b7f8e602ed1516fe6200e56fffd4c40ac3e58eae707745f7fb291a31d75bba54b1992099a9658b0ec0da405d4ec2ef529d9e8fa31aba300db22a24215b34aebecb9d2a52c607043eedfd5759b9f0973ec5ec42f04fc38b2417fc78e995881c044ab2053f051ff853270cca1783865efe5dc30a3603408b1b646b3d35bf92534b6392832da90586dacd70b4f460465083af0f163da18fb4b72887ef91e8924a4d67c129e28504e753c7f22ecadec9a411ce95129b9acc7e1c3b0c7cde123f7e27712798a1c38076047697622ca9ae45516cc1b21e049acaf6292c5d11e1a67430670d9fc7104afd795f881808f75e88abf7cb20a3820b3e8e6bea600667fd697af7b6ca4193c9bff64dbb9bf18056f8933bde2b2309f94b53323acc050e2956789a85313ca533d5c109e44d4382277c42193f20aec97a0bc55ad70b4b72fe203e2e823009b1f25f25a383223c492a5f4c177271add5bdb5c9ded3c965faba340ec7a63d67c5539e5705b0454d6f2051876820b6f4a67ee4978347f7b23c11fe37ba5e16f7585a3c813910d7b7fe42bc5d076a6034c15ad0fe9e22ee8bdec4591cd3a4a637f19e1cb97ecaa2fc68c16d329fa47efae6f06505188cbefe25cd62b507c118dbdcabdc2fce32e4b37149beec6f154a56d221928737da4d3420ffb22415690ac790944901abfc51365e2c5488c1f6eb28a4d9297b48adb2c863d01aa6f1ada4bd114ea0d55a3fc0538030a0418bd918e8428b735f8629deb2d2c29adbe8d801af468d7be86322965da62ef9a6fb6b718275f52aabbae22d74b60548226a1523418256805759c90505665c7640d30420b86db7fbf612268d54d89522b2864a05a3df38a8b9ccba5d1564982e8381e0f2a4b30498f732ad3aee84c220a3d5d62a7c9b2fcea25ca081ead984c3eceb5731afbfc3dd49b7066493ec7c8338b9ee84fb7ffa3499a2dae0f0e7c0e7895e1a7dc1d7bb5e3d05c89c3fc0c531b58a92015cf96edc486ae74f4e6ec058a6b262c75823d125bbdc0eaa2b034e7078bf986b5f22a4dfb8b17054eca23658e4d59dc586e924e718871ec2c4aa0c79637d9830b6732d20cb5d1d90d7fe4a09d3479c3eac97be88a68d160ca2a9430e3ba2d4774d64c4b4e41ba7b107e45388a220e44bf12fe0d8845ef5eba438f1250d6e09dde4eccf15c8cab3fb30836835b50197cff9816c0a91612afcf93289e0d1be97dbae6bf58de45833a65d83f986c3f39f4f62c76b9c0e16817569cc3dc1e963cf9b86fd9ea400c468b047f4cfd4d16a1023694b414e6050c163add3373409616e54608dfd8005c9577376232bb573af3ce1d5f2359400a29d38c1e3a127c9ca3204adbff1586c112498d9c67d16785f417f6a8132c041e06acf9458a621214d2adbf0fd456cd9f2424fc9cc784e5ff5c93048e360c1baadde1679a9569648ac0a3a60992fa6489d5dd2bfb93e641ceebb69242702fab28fe841ecebd002eb540de803eb8cac7723e9ae0b6b97aa5cb5df8ecbcb6e201270817e8b8aaca672cc7bb3770ab5a1041d7a3a627dcd7c1b02c72aa81d305272218f421628a35165dfc9f2f2127b2aa6778614a114e5ad7b38539e01ccb8cf62f1f89390709e408208886a92ad7de923f683e6ef91d2e46fcd1e55d9694780d05be34c67524f97411e092a7c2358a4b8911dad5165ff81991975c9a0d46da547094959cef12ba3d98eaf560371ba6ca702ebeeda7c6e4a0bd941e9a3fe8749275a3a212408c647426aaae47e279fc4d2fc290fdd6e43692974c1f1a11313e621c54d68b94285dbb2c7480fc8c2a5f6b5ca76b1dd7936b5ff2954b78fe6c743c236a0710a55eaa14548dc4ef31617cbd2c442ee9c5ef92d701946b87941fcf29e21bc4dad17cf4bac7258c816a158c7e9ea6aadf23ce3d042d860a25b44561c6fe0b3158e0fa3578d5c57c162e26e167cd7f993c09472e2a583a7745d8fd09d2f4fb111405e2e2d0bf859a5f7df1d26d4ee10dd7eb656942df0d1231ed02bf234e00b151c2337ddf6d0def3f5d74b1551ca00d2f64c2d777426f06897d28296bb1a929aea7769540efd2a20ab9c90887072af13619d4117a47c233f82e3dbe8663067f721d8e0c366718ba7b26fd9163c6fd32f697b9acd4fc8a05400fb96784763000e2a1ff29686522fb712e9e1610fc387c9f7277a49d726735cbea485689e7bb4a31ee973b63c51d2c05030213a84f39004dba38e9a579248f4de24629b33f347866e64c2fb482ddb4789d6c026945ca0e41b7ba6c5ceeece679160418dbec1b067e23db6804b6fde927163b640755907bd455bf79d543796aaa7f67fa1eb71aa12a2937f549bebce35815091b685e503f2e3d1ec317bdb540df346b37ae9729359a6c532298fd4fa4271f402720db69b10063abcf64a978e05799525c954e039ae64bd8c1af9f0cb76d26c370912099e10f95d951eb97554bd5194c2da59dbcbf500451069fa1b6b622d186764edfec37f74e9ce401ab4da599863a08c3df390e5181352008e7e88c8cbc26358d2e8d98c7de2eddb14cba562959b5051b29575b3033d8626e94ec1cfe9a90ce7689f0754a0aa9e38e15e897f581e8e4ef30cce7ce9e81fdc2477323d852c740f8967871c6254cee58baf651880352cdd0c352bd06e6f105b40b93ffc783f5669d949aceb66bf0ac39b17442e4d3f05a9ec30d109998c8cf7eaefd0752dab02ce0cda25f1b591b4c97f657d62be18bf53fc2ce915a5c1f40f3fc20c09595300e015ddb4fcd5455f98fe7a2358401bc00d8d383dbfd8ec40838ca1c6f18814b7f5822228a0ffc7503fb3b34ea715799db466375c284c5cbe5a57933e522955fb2d70b3526fc0a0455fca6d6c19806e5b32260612ecf21d0bed5e98c3e76512d3947c1bbdc198b45910efbfca69f7be195fa51050d1594a9d80961e3bfa12d9f36325d65c006905491cf9b590302632ad6ac6c9996e2b217cf0de7f322b5912cafb7ed5efa92d5967efc632e102fb08c4c8f3f702acec50cc04b4dff4acb138eeb7562be77f64cfd17a45ac39d27996859f3d37e3dd08326733d8abf169a4b29350a24564548d928555075eec6feb8255311ca92816d52da772e151c3c0c31cc8de6c5c12899592843b9ff2e0112fbb44b38153bbbe0b6dcee562b267247270734aa12ad646069481449bd79ef2fed09d86d99922ce9e4daac8ea87d4da7d8d99257dfc2ad47b44c059440e4ef672d38cd07bfb3485ec8dc5ac0dc617aed3faee6ee2ddfd2f2b85290caf5bf0d8152c679387e2ffa92bacb1877bb33de56d10fd829524d368095ccf1d7063808b13e62e40171d41557a8dd98e1fab4bebe22481402b87cede9e7a6351c8e08074f586050b4b80ebf31a432660be63b85d212b40848cc8126300cf2b28aee271d4df383e73bf009fc3e6072c8ee3a50128b838cd7fc5d8d9e5de0d66e99f7774516a2f02b05d5083e5048ff4ade05da4e35e9e373afffc1f5d02de0d26d75173f9a1065ee2f52412481d669199fb23df35d4777fef290a8ce549ee70db93203adc87f705db2343fff735e03f1ada606bb2b71ab0fc83cd859a94608a5dac8685779647e863fbd4d64bfbcecf4952a45952e9ff5fd9f773bb714538f6d7fb72f1823eb5dc3749e67b1f86148df28ccb96e959defc17bb6b208d90d8147ae29f5bf0b1aa317e5b5199e841ea2f5665b04fc824d285e565172d78265253a4ad7d00f29a0c55aed6ea6c6ff9961a79be88b3faf2600725b224754d7caae3044c137e6890154cdcbc9819a59be81df379721f04c05ec02c110bab64bc301d95fe3bd401fe0c5d49e42417b601a290e59c42d470b271e523d39a935db74af26c6b440d42990ce262afcd0088267717ab4b04baa589f4268d9e86bf17de55a8b72f9ab52a8b265ab73784a149699446cf43f1111a5a405c2988661e3a531bb7432598922b54f393656d0c9032d0ee080bce82fe9bcfb2422fc6db53efc32b5a7cbb1c1147484ec0dbf8c29822972f82d2ab31cae2a329824662ef455e0abeaf740d7682105e34ceb29b3b0e19b5d9d6d3e6fb4f3c044e4b6e8633c02493988737418464c8d61107dc174ab775f3675c4b960622c1f5c2a5315324872053da30deaa5da2d0bb397e1b5238a947cb0a82cbc1445248b693770f954a9b5cbb94271d49e0009ebc407c174d074584fc81e924428971727b6f92e4555d7ae3756d0493151741fe76fa543f088942752283a2509de8f9ae727c227f307ed927f5112836735b813c6b3d5864b43ec3270d8f0df8c962f00f3ecf0213cd0bb05bb8b1f167d636bc9925cb2e00cc418a1dcc9394abcfb9176f6780c3e08164ddcd8d4bc43fa40944af98bbd15e7a85f5b6ae22ff0cdfc8ba1d21083f810fbfaace58cfbddb21e5a2b2881cd3aba5376fea5bd2be1047266f21ab026ec25a0296dbf81176f7eb4942b925bb836e7cfe6db25c7e427fb0b2ee64737c125cb7c9af1474bf7caeffa113e0deb7588e66b3c96e5d551aa74819405dc45a462a654d6754e9b1c826d722ed7a271511590b40e901ef34f56fd5edc42cde01572fed486b0d1bbaaa7b1c93cf992f8d0072232717a4127690efc44f9bd2118d25db87d17fba965770526442f21e260d049948266f8b7fe6293ad2becd0a9f173a608df79806a1dc9a6579a676c62a9793d461f6c6eb773e4dbfdbc29c27b349021ab996a49c67856726274dc675f5d2645cb6c47cc184e5cce063938f41103ca3eb6fea4cf41c04df3f06e87cc9288334366ecc82669da4b42ae1bbae696565ff5b0b42d74e041b41b9a01829d20f0d78c3ab61bc0536eb6a36171850b5cb77600be0a0d9302c3c7e9adabd3fde173cd5410b242ed6cb8b92fb2c42295fa1edc028635b42158fbea8a4fdd900d1ef891a4ace37cf4379c360d76dfe0c075e42aba92f3986ab996c50c35321a89c39a69d86eb753ece8ed2f75fa26fe661709439cb478454c1b0900c453938d0f1c3013d9b16de9042be19232027c6200af7bedda58d746f5f6120e9f4e953dc495fcab0fdae107f972dd5110cd7a27880df90ea2056f95785ccfc661b8bf1f0c6223c36b518e1dcad60268158f62fb6a2e41062d83a3f4cfd10c39e9ec82dec9d3cb7488cec00bd2ffcc46bdd7af7ac4fd4de3ff877d6f582abd172144e12291b125c8caeef12cee0c205a08a93ff620f938254d0c7061730342cd37dbdc685981738446c1c8c52d10b1aaf1448bb738091cd213d682d83d3acd17b03288933683511ca537ac903aa6a7a8aec1e5499ca6f7c3cdc4b0e13ab4c53321946fa5b45535197ffa494cb17c311f65e39c51f91488c07edd9e0f695f9457f5d34a3392147c6f1d7da7d8bd1f8b8dede995ad4f51eb80c22a5ef774d367bc0403e491563c05eb556ebeaa42f278f4311016b6c8a5e373c0be05bd4182c75d7d0b0109396d504ab763cce029c6ca63b90b3541a5f42637e2d9f7f133da06603a223de4be7c4c19a4e3172849838b6ef994d8ee9fbac9b502b249d6aaed4e4b4c0450a03132d8b5e015dabdfb1c26101e3365e2c6e962afe44036c323e634144d1248396210a94d9342d919b43e67baaecae3a8ea61d7634dc240a042aa3d8b42c50e67541a52acbd22174c433c7cdf30e0beacfa57be25fcee9f4b8b99ef1e3ee6e2c81c416f8721367a7888ee0717c6bf4e7956c21ba5b1ab63dcb8c30659fac0a5c104fce0a03949165fbc41f0d0a184a4b5d63e27d0d22fef0fa839df6bdf4c89ba2fa954f4aa51dbdbf89d5137228c6935368a3d738dabd912da8d36f5fc2189a26ccd04fe9d7605dd93a4b833306eea19e1f107eab1429855f439fa449c46a8c0b031d7cde7035357cf0092e0b145739d7c784a464787645b2733f87d8b42ef5d70929e4d64907f5b44930cc8edae637718b43de510e8b713b601dfb14607484decc22f4eb935b5368872d45af6cb9a7a97cb216c940305a52a0db01b7d3b14f7131c1c6d77943bcb18b294dc08b36980916dff2330ad530a50c05598277e1d389fb4e40d051ca46a2013ec73af85bba993ae52fb60c7371342b52a3bcb235b080d0c45c0b7c0dfc1e4c905856ea332e05755d3e338528aa304775105e7ba7b89ce6a07a0efc25bd64c1d86dc3330b080c7bcb10ba1e91acac94332a3fda2428701010338f3486cda6bd8d15e950db1a5b2ed4108c3e45eaffd4d5ed8b13a9f0d320304e1b2ad9a7aa8fffea97441b5257d1220213439e238d3124475bcb3c0deaf80e5acc0789e5c857248e580065fc02619bee1862c0bacdcc2bae5b9e3ec06ca4bb21a219b9759fd3f969eb570bbdb9d39a10e644a0fac0f75ff0f8425626281349d024c282e95c8b6c0aaaad5dc29bd54a197f544a575b962f6adb679b1dd7c7ed7d41ffdacf16668eedf5751dc5667dbeb16f2f729644684e2264f61eeaacecab833a5c491edcf1fb2d2dfdd72a9f57bb4f8f8e1181cfa2d6fc4de42a86330ea16df2ff4cb082079ff6deb71e43c755cd6b8057b1a392ac1aeead9502b4fd733f84a3706f4690b3b69fd7255dcd7fb2b85fac60c1c3af2cd9b2b3b61e298cc35d41694f4a1e2d3b14df1fc4faefb8e5299fa7ce26aab76622ccdc6d2b46dcee72aa93d1ac0429ea7a159a58be89a8b8af719f844a58049f5002f31900704a0e14da3570eac6dd7065105db77c662cb309684397caf318a0e30d8ab2c731b26b7dcba14d4421f07d73113dbc3914fdfff01292c4ddae3b20feaa9124655f792ab94ae7d7332fb8d11650aeedcfebb3de1b7066379d1d40eae703cdafed1d17e48a801e7e4506ab2e8102c97f80633dddf2b1f89d59cfa6a791b201c2cab6c2d9612a976d990894183e74123a0b4389e59fdf95c18b5b8212867fb383369219046d877956ec8bbbf32d9d7e1edc80b784f2d6b0c187620a07e216d9b4318f107fd56ed5af6f4b30b650a1c16aa6612683ff332e9ee75d996b2cb0cdb281d6d6d1161d82cdf5e48bce4367ea11bdf4bf3323663aecee01cd3b7c36a587b64ab027f16b4130f9b4c262d3d62d8d770182e14736944b19963a8f716ccfe07e09cf00fd65cce1681105e8ab90eeaedaec75d0ab9d57624943c4d7aff47df3dc54cedb94741b16737d8dadedaf29e4c1758b62a380621f546faec8e20fdb770b3c911fbe21b0ca5054655ae168124736a8ed5fbaa725c7fc005d6309e6fe097c4ba274233fa880e35d65c2f23d3b9adfc64330ef7e26f851c36cbefaa5e0183b75bb39c51557707e28764233e9c7372e1eaeff84f584f68f96b45cb104ffd776788e4a29392e6249fee8d1193acad1ddc1e4b4cdebc78972d509dfecb433b78c06f02180618f5b719dc492884feff1daa64f66c6d82a9fe00bfbe639d43db1a89b49f598a53227748d69d780cc53b239e963f8824a889e785106daba035f4830172ccd194f8cfa511210d3be5508fce5f674a638d00f4a7b34bc3380ba99b423b8fa2a052e7ecd1355e36a522a24b335468d54b20ed895fbc5915f89dacf82819bd8ae340da34dba5f5920c852ab2f1d370e5b700cb8ae01589573039d61c9e41e1b1da91c3aa6552c932880fdd141287e35546095ef3970e42e34ee115cf43c7fa5c255ae09a5e68558963c752f2aeac0ce7008dab400a11ce2415dde63e6ffd403afce1fb41eb2403c7e199dd75f6cfaa8a7b0f08455a05c5143ff49a962b462d733ddb1900e30f1319b1bf7111d71f4af45bf7ef0202b8e41c9e00eec9b78cf28283789cb8120b03386ced180041d2c82825e7e2daa9676d90e04f3794438ba68340b7353f0955689ac4fdc04c8324a9b2c3f0050d3cd59988596a3624778ec4f44158acc0ef5ea5ed09900a69355deb6bd4b5e807debd08d5e21cef547c3a7177e562f7ff64c4ee4fe3d8ed82f5ab436a3b1ddbc026735bb306dddd233ada103f4652714e311053b342d8b47571b1399fe57573471c1e8fda05baf9396e9ab8595c97b094b2be2f962326823c3cf6e7b5441a55648785b57e542a78bb9af72c218ae5fb46a158a148a91f31959a4e7179cf301ff002434567ecf0e4ccf6d812c856efadd7b4cef51d3b8831ee379c4b1d270014e19c1e79890a7c1d5928edcbf7de6f9ffcb307f78277f857111003ac528374772ef42a6e2aa6f0dcc00625634064970e964ba02fdd76bca031f6b2f4810af91040173d24cf52600c5f2e42c6669ad01e4fcc56368e684535c4c9c85d9788ce5d207d59bc9cabd97b693fa72587cb5c01a6c818a3cad328d74deb30bc8cf4221649e770f3bbd13feedfa7d1db15190eaff00cfe22cdbc77be9afe4450ec5b1c8660d92802c0e7f065400c051df4d7abdf7442ce6286ae32ef9e987f80aa596a0295cb54c240f8dd2d1a8363c5eac3f85eb67acb6682deb482df9ac5889ca4e831f4f2d4851684aa3e23308de9605dc6b7a1debe0b41db407ec0c9783dbccead3cfcac1de80e14353b31871b00474653add2d864957313d9d989846b370e97f112aa589d36f4d517468c03d471b0a3e086da4b90f7c42ceeba0b2eb4ed8c205ee89eba0f75eb9a0d5aec7440c052f9cc17022a5802e828ccdd4647f26bec9c9083f9fd2dc19d44a701f72381214f3dc0bcdeda5597a9be291634354eb654065f7d095e77a6ed962f71deed61b4ccf84a3e53234f30beed092006deeb4b1bcafbda840315abaedab9a75bd4a266b8a565527ee9e303b1cf7539db076eb280f3f26af62cb497f293ac9704deb22888ba47d560fa8e0083077c490666363f807b2b9fd7a8f03dc0d2f1ed77bb135e353aebab5413ad742efb39ed271063255047cada4024b000c1801be54ebad38534cad51b8f53eab9460acede8d6f7628536dc1aa6f2087b82dfbc302c724b427040ca62e4849cce34626ab5e2d8fafbc0df33df6946eee00377b3d5b0f67f70e7e07f151b288b93e27ee1c3fbe114e0bc23da8d2ac1f2bac6f5be5ce470432feaceed398b6fddc457a153ca18b088cbf9eef741afae5f571e3b89368f04f7d4fba05aaed4e242be1adcf51e281e1e5e4f1b3339758f8eddedd6ace805d0bcc2181c39d9321344f88c660bcb933694ef22dd6561e8b9b6e60e797d397066abe9441eafc5d48444c7c09910bd7a2b4e670861925360e1762a366b7f9d9778b2d85801198b30d591cf3ad9aac024dbd25ed4f75c4861662f45dfcbd98c37a2e825f03a3b8e6a126256bf80f365785f995bb638adf6e007e236b609f10ca1e552830594f2db3ef352413d909ebefe1cca7c5af7b27ebb4821839f7b9c0a8ee7be4a35c40ead52896021795f310f7570d779d7dfc47a7ffe15241c858b43a197415980f33032147d4685457054eb41dfb85405eda5fd9f7b014cd341d4e9f2efe3eef97447c0b8b82c4da600db2f5c48bb88d63f4cd7bae40d71fc93c201d6ac89dc8eb9298b825e319da17e997dc6cefbead27e3a58ad0e8d63f85e02126947ec8c986f097f2c0248ddf1faa32c5bc67e2372d01c5a3578ad19e439c7837f992f2eaaa81301963cf6c7d54919d64dc6552e01355302f659a470d880aad0d2da807b4cffdc4f129a5f733ac0f44f4789f5239bde68c05c4b48a82283dfa0a7e70a7ca630e4e84589afc99ef02c06c3c67893ee0f368ef61c26d367f74b9e7443e50e8d776ce1de020a842f4a9da5d0ce3e32225086d7e4ca208a1a5118839a6abdcdd0d74883d8e4ded767de9b1831efdca070cd1ad159f976f1bb3d561ca3f4aa1e7e35136a4cca8d6e94b9bd691a40c68089f8f7b1b29ea56c42b15ccb4545bf94a415973f51f54adcfa7ce743a547db6b69108f522ca431f0cdd1435dcae1e495b090b62e38ba2e934a47b3f048c82d6436bd82677b07236885f4f5c8e1770fa28fa378ef2ff27659b4412a8cb26be55bd9737dbcbe33b7c5713285caa487a1db0529c885398377a6e2d93195e7ecf50f335a96a4a3d727f7fe1add765eb03f965153a89bcb90c414281aca92d35ba8c3dfd50f256eae42f99c6901e3a03c9f54d29f9145f0d03fca69ce51738c0470cbb6db54a37b3d4d781eaba49a4547b57082341892c7714a353f750db3a7ca9d7788bcad5437146e0a9ed15289fb9d0271931b85b992159e077d69f81554bc2a3fee1e38af00ba937937aa23ec57c04b08e740ccd94a98390deef7c1c9d27e263cf26e550f8964c748c64502f773d1e79dc2a675bd2110742240fa29b8ccf08ffc749bd5a307b955556ee8e06ab4a345d62eab190554d91c77ce443ec64ce8a26834a5dd51f8a774e880d99af661a854336dbf4673ef5b1d4e2e118669115b4e507e04bdabc8b908c4eb0cdace1ec1c4ac43a7d2d641716012aad88253da56bfa0052d3d8012f3c72a61560594cff0c7e425871dfec224c68c4add18c6f93fbc792a33133e4d56f2463730435560ac93477b8aae4223045253e69cfafec490fc57135f84bf74dd9279288e26df95cf3ce57f29f65f7f4a61d41051204315fc9bc8b2c6fab0f74714f1c2559a0a3de290e4999d96bb0b467ba7bee431599d1335734a9a1cbd1cfe44ba7ed742682fd1d5916a765a44ff4df409db7391cdfbba4d288f0e581712adf7da1ee98ecb84829ee171a2acdaae1fd7f18556cd9bd9902d09419edc36b32965c3a11f8ae55a17148ac11299e384e21adc5e80e9959e440cafc6a93bcd2fab49a8deca0140f8b999bb44d3213e82e62759adf9d44c215a575e2bd5fa4f5c22f2ce8e2e8ef4868075555ccde0414bdceade96e9a28c47bd22b1a3ccfd2727a2c755452859c8ad8974c2e4c2c3e22adb8484a92b9fcbfa010a3ab7336459ab44648e0e320b0de1a18d9e2003239b309ccb474639c363df8da8d57e8318946ef5e63f36627ad6371eece6576d3a2494ff06c0d61dc41a8e7192bf6e6f33539d01f0711826a7b0fa4f49e592c536a30d9de140a0c40383e8db4e304bc2ccff2f2449f3099ebb57593a813fdd9de1a40c3af441eec4929d2356fdd324e5adbd805081bdbec99bb8265e4c76ae22317db9877aeac5e1f7a2d6cff5bfce3736a24db6d01e8ab864462d370928f00ef8d64a18d30bfb4dd06253760d685f16f2cd1b5f9d4ce89595f6e817b85c4f46a098de5afc00ea61f849f9eaed39776aab22e3a49bf7800e9746c429bbbc35cc49a9a29311c29a41e013074c07acf3a5dd2f7a0a63266354a7dfbc1c897d933a723e12317bad49d7f16a4aa20ac370412dad3bc60652e5d851fef14dbb55457b1239a400b950a288e5e3a97cbf56b2befa1e5358f0c4248b13e1c921c9d33776a2449c6ce42b451d78901aae1e30e8e6cd177bc3bf253ba5477d390a788b45ae6870063c1a96f054e82391f217193e8494cba4a3a49889189069932aa13fb60895008ba1cce968456eac457412bd748ab16ccc7ce2eafd9de72ad0e9b48c39d73e11eb2d81afeffed35d8bbf14e21758773dc9ad6381a8612acd125bfb506950d3506669dbc74556ade5b6646cf196376138d59949943659233336675988572337f8b5e63232a0fcae148dd6d64d7cdc421c741f4f9298256d34e47e29792a9ee4affe2d3d358533e32918bb6599270f9866b4daa673366a41ced3a4e5e4f9f95717d9c7afac90751b1cec5b0cc5eaea40e76baed78074cc2d5d575249048d5c5a8f4e393c50a83bdfd5bcedf997d7f5ba54b17d5a63542152593c53e9a204af7b5118ab2ce83ca9ca017c085e05305284bb1a20ef258a6ea10e8fd311982743c162f2e05ea9b92b7aca865dce5b784b580c398c9501e6962e3c40ad03a793ffd39d4075fe7fb90cab0148273bef990eace34ca77e52e98e23d116c5989cabce148911d183d82ab3962d1f70e27d83e7d4abcc99cd01a0533a1f2a2caddc35644da5a876f55e76852cfe58879896d1517e594371e95b8eadd009090782185e490207c97891ca4f9c8038f45028166f55e3396f251666c158cfe583cefd8ad3d73b03783a6de3a80c77774663c684f0db76c52a3875c199a316362949e2a10ca8981e2aff196b1b487cd689ed9ddbf0c1b1c10b0b57448e4c503e2e65f6ed45086fd619f73c5390e33d546f2b50261d17cc5d6eeb12be4a9708749179461f32e583af87aca7a7ff66afc0c3837c00eafbbedae369548d2d2df6ebf4ba153fb222b48945f173814b16e2e28915cb11da34b025be88d26522002a7f4b97250b54f0bae330a81eb30804f73d39818d6ccad7289ce7640cbbbe2e8804e68d9e6b038aa5cd2313f1dd4864058d58aee284fb1aee705dae0bc8f2c7261bb90754ae7ef2a9898194398512165c0de8f7ca75bdf50a1ac5117857bd4ea4808dde0150b0190195c822e7fc5d15d3f39dbf04f4771c93b654ae1e7c8221a5b989b07d3c03d85c219227a35ab0b80fd41698efd57efc55259127ae1b4ae17aa7202526a1d4f2386bc870a8d29304d72c821e7fba9c26a7f6164674cc0760825b7ae0d84fe4ca8a106cc69638a22c9cb6d63cfcf285b2f5c1a1ce814a425c54276af34ade029a9fe3d6eb950cbbe419332e91728070f8acd6f73720320e0bc988c049d0d4fa5ad614ef0ae135651e59b3cb0072f97ec47970165d69587d46f22cf2549ddc62019450e9eb427a517376dcf397b470859ef84fcefd415c98ea03c2f0169d76ad6fb4671b552045ee5cc6beaa1b280a2777e40eed499a02993e62edc57228109321da028786ee0ba3a7021640c6bce6573f3ea15ff95c04eb1091ac550d1449b4a978c50ca7d3fb520fadfdf96d96df8ca49bed3453ae18a76f8f387973f0cc977a39ea6101c50f598e4d481aa075c8f8a0293b77738f309cec22be89e597fa3a4341c3774549605f2923978ce7956f95820e53e965530984855ab381e30311b489235ab86baa2d3cadd3135fe1379c126c2dced715a068b5fcedc91ad0b93e553deca4819d8d6f45886a3f6a0df77cd58e55f7f696e6f4a22e3f6aa94aec3add50b5e8a5069ff47dcd5b7f5be5e6aec83f3821bcebbeebdbba54cbc39e122e991939ff2bbe3234229b357a4f0c2fa71f8425ad4c8527b3eebdca65033f0af6f8cbae5b86d484cb096a69884e14253d5ead279ea57bbe3d48bf7f1d47f57076a315518f95108a8c241f40618c528d3042a4d60017c48de9c5ef2060dd23de35340c36406e7db58892d5b9100c8bb5b906bb81052709ebce0ebe1273127051fffe1f71579540a0b0e18107bf6b45149d0b6e9afdf2cfb43cac635874674614f63d861fe7fc3e10b695ce34b198a5dbf8ed87d7535206ea133b111cda653b0452914e15eca801de2e123c100ab971813d8bce6a59603b39b0dcb820e1f097e53a800be6a7d9872b2df5584291ce4aa339f18f45e74a8190f83d9403041b762e8e3fd297b113852a40e86b1607a4a3c021bd668b3ffe6350f23d50ae78b66e5aacacd12084c7904e845e46c27a4ee52ef56d8a7262e9b0d2842354de08868529d09d401870b906672e926cf544ee4481136e2dc495591f31f21befa61d562503fed73b6186f80573b612405f3e2c477e6a0faffacb6eea3ce998d095e3c9bcc9fd0c256036829894641be95db79afdef89630d079a31573b6e3285b893c3fbe32679c924c899a57dafe084fcbc72960cb022fd5a83991079a79fd9dbeb6efa1f27477041eea24ef51e3cbf2d6f6ec5de688bc098c7a617c01005031d2f048f0943d1df59a578bb8f438114cb13e533c00f9242af6299311fd349f680f82d828e67512d19fcc41c05915f7f9f8eeecbe6d71b0b732f9a59369369b91f2a2ca5cabe25f409cacebcef7fc86d51032ef727fc59b64d45c9924a3e2bc758f2d95ed1e45866c41eb7f48eadcffe894c0b791c9ee94d0225f8ade6f980d1c17b5be2c35d7b8e0932db13dd2cceab4862e14806014bb5d196acd4252c783416421800f3b2f3bfba0b5ac9b334eb616f5c6765af9d415f3c2b90b540a78e0840e9c28aac3e8e3176ba8fb783bc2b4de04ec9e55a37472fbe81f0120375248c9ad243f46a67d88c7aaa154498a0bd162962e448119af4960c2d49602276df73cbecb719db268b781cc4e44c38da75c42362b545fe0cf41b74bbc522d820945afc7348ea19139de9fdd9070693eeaa97dbf70a8a70c715149d0f2bf39d7949a3d11f429d2fbc8237a73f330d226e368b23d0bd8a992c1aa0e6e906b78826d68a71714cbe61408fd9cbdfc177253bd5f304f931e35e30dc0652411899b8b2c1cf5611813561eea1bba2a6570aa5e4bd267d5b6f23e9578da523c55626b0d6c616b5ab46b05abbbd0f6b2bdaed9774da3ba090de6e17d8400fff04e4e55921a0d6ee785fc5eb64008fbbd7b7ee12c9c645269e2a80d43e26bb77442ed3246a36038557e8a9973bbcd1f01f03b35dc4196db7a3a6967c04272e18ce49fd9e7420dcb6eed732f197744ce71ed9a4e8491dc12b88795ee46a1e9e3dc56424ad3ab2df7fbb0745fb82b327958e4e771980de1402b02b0f4f8e5ba6c5f038d5df632b8b0fa384b0496eb4d5ef803d0c2a9b226e605f4b8f1fab20fefb36daab015edb84c067ef810de4c99f29bc23302f00513e4024ed283176a876296499395ed88169ae9ce2440271e448f168c0b0ca9ecf1bc30b8befb6d809c123a92d9ad6120a058636701cf5a7f7a6af990f50aeafd56b34f2ed9951353c20ebc6db58945ab79ec1e95ae7e706c2d350e5d7728ff51c97f020d307e9894d56585500d838981c2c7447b53b1d21787070ace0da4a692eb5f72a0c3cbc918457773b8d483eb9810771ea76526006003e3c929ee38e34a71e0b9eb21baa672814c60089a666ca46f301c94cc71e34675a23ae3c4c4a1f5be4730fd841b46c53eb0909fb29e0ea9eaf59c3f96b35245633f83f2149a2fe1b5ca768cd0cae0c0d08ff2147ea03e0bf9745360a7a36ccb76c63242db96ff3cd6acf812156cf1d864a95bb0b8995efebf6e2c02c97e2656d6a2fd3bdd8a59e29710f82223997ddec6f84e4f041cae43b086ecb7ce2f6d33410cec12d93cbb4586ae42ef53b521bfde9fbba9a15b4f9b9c9092e058e5a4469579ce9b966b7272c65340670e9c665b201f2360e1b9d29905430455244275bc9012977c1cd6f61ae19da11ea3575cb7b56cda76609283d8a7784822e58baec3e3476e95a4d72b159825ded30f488851eb9d22fb3ec8359b81177a7870575148efb2c7b20d2583386c12c9082248709f3276ac05960deaf761eaff66a23da4373122fe9c250527e2690a7ac6bbfae1c929744f80b47ed9d5bafdbb28dd23b92aea7db8ef3808d97925c32dbc504cf63c69c577b9d8370fb7f245e59e877cfabb268944e10c0c6a20ceb30ae2e70c3dbc8ec55b029d9536fb4e7ee0f97669568d69ace8aad5415cb26dbc2da1e43aff1b54993a9cc0ec030f66b8bcfe5ccc3cf71bb8278b3890c79534e8478693aede3bce3443d0a22876dee1a7e7666aaa8a2695e1c29104fd1b4985dc9ab9ea50cf9e4563724cd5d9a4c3ae2cd65e3729f96cabb814cc91d605a874409dc5e569be23648320a85681285f95986fa430a9399f2c9c06829f77f3823194bd7b6eb72d2b06cdee78b1243b5c18233e60ce6cc030852ce5fa78a9f595a12a5cf519e5570d1c515533d61bc3a1b22323deee18872bc5771f7160c30cf132839326eb9f3a027b5a4ae84efdd9b09cab0ac7cb3b88d2ddbdec774c5f58be2f5fc08f6ef57b7d46266631c32199c61e4ff4057d4fee9da8adfba39f16dc9309f6f72c03e714ff4fa37bd3e12b3f4e12fbb3e1e5292f6730e02cfc29b22cbc1bd30d983078069fb2f215707e2a7571f6591cdf419d35ef2f2301c51aceb587d8ebb61f392ce3b78090eeca3eb2a5d58973b40a3ecd1bc34d498da20da45103b92eb7ad6c6ed4ddf0dfc36c7c63dbe8f53ca08147ffffd1cfb7cb54f26663c6a634f41564ed5afdba187fdc8b50eb5cc1a1eaa05168507e00a91a044ce1909dfced5b2124b501b71056df61307dd34cedb3bcdbcd131eb9a2e641114ce750d2d950d9ae4b1f0db2e24010f076fdf8733ea1e7d42e7925e8207ab456fc7c8fedbadb15a826a84d913ab64087c1162b788ccec73205cf2168e41eff276ac0bb6cc5e5c359191eae265f7120bd3960459fa1a5e03d8c1d14e46b4a37902a7251a8a6036b73fdbde335cdfd0745a45f7a947948180506943a8c388f6da14079b93c0d8890dc746cfb6a843e20f47feedaf651e036b76d688bfdba37cff9344a08df1d3e43f68a77bee910771b79df9b1759bae8de6dde8854554c45069016ff01ddf5ff1ca3765bc3f5c4527d167176503f49cd47dd6be3b69ac913e82396de6fce509e78de7153efbae37fecf45624c8d0a2dcb10d5cbb6a5d998431d38c1802062668a98f348fe89345b473140b9cfb584d2e5031ca8d7713973f61c4aa8228307da6c151439d28226824a164af39f037f0440db1feb088bbd65cff041178eb9a883d725b2b413ee203292b059e0547e33dbe827578a1ed8a1b1a535d50fbcacd35b8a6aff46bdf06b919767ec1764233504a27cc070c752233e9d9b0956ff01ba3ba9e9634cdb516b57ce3ca23be0b04ce6d1680730471371bc5a560676a64453c03becfa92e55832596c0031d8e4aa77609f6abb6f842570d5fe27e5e0dc585ff0aa8aecc9e36a73ab12e4c513606e941f2745da07463434282ce00b319ee27f77b3f255e53f8fcbf139b8deac29bab513d6c933119be2eeadd771ba4e64d4de1d7d5e1661d8867bc06333f288415788764c0353285dcd4e6d3c46df79e830e090a5610f103d27361a18ff2b380d6dbb77cf830f456a67cb92daa426d45609c4cdf398d1f9938b3cfc9094fe5ffd0f2c6b908d01047e9e43245364e680d9569d6368e99437d2c2919722bad6477a1df11a6f877a3d1ae7b3d31a8e15a319cf8e3ef51b0b466a4b8e764e953ac2516a2ec80165165e4098a25f324d87d5bb9d111eb741d6c779eb93440e6d5fad1e286b18d06a466acb190dae22483c8b73bfbf079bace2d8abe4fbf228ee4344bdfc08af572d5df0b030963cdd571005d2ea6b2c49df455c56135a09afbe9f1d6a5e09167285a1655f91de0f6bcc59761db299a81ca2c73de4562d88026ef24f196d2956a9c1c79e5a81abf8824813be656b82f619cf5cf8c679ed53249aff6eeccb1f9af2d95afb8c0f29f70f1fb4cf5be9c0f5a1210792258c428f2807f6d6a218c765ec11e620e052dd7265c71b513641cd0db6ba34ccf171fbd315c66a37c8d430f3c7bb50f126887ee20bd277764c4a452d3c5ecd639976562237d0fa730ea2ed27b685495d70e04a0cd081eb0b23eba2a1a848a905f03aad2ba4af8412e6db759d645e3b53d8e451009ecc41299b57496f043d41cef26bfce1e32e8a7dab1de12256e23de1373500f55bd627ae081a2bd78205755b0d57df0b92e61ce2518cbd0c1d44c31683771e8c0174542efbe0ef92d5b3133e51e34a5c5cd2247d0de2609780c8cf5f4cd39daa9c0fb0544f1a39cb76ddb5ed2c3d8bb0b5a0421062c49d5cbd97306cc091d1fac23d5d33a21e6b40a3de9f15e897fddc77c9376b92e7169584c35d165a749a84976e5a9d0faeec71cccae6a9ff197035f9105ee89cb5d4a50865aea8322eefebcf07b1789fdc29bc784f08ad2da0aa208952c28d6aedc7e7db6f6a0186c97eb906a298c6f8f5ce0baace691af47dbdefe619d6f4b33f08fef1e155c2f6674a82e425df6fec6dd2ddd95f24ac6b98319bb63815b06c5da4fcd8d8cfd27651cc91a283c61fb61cb13284e419b161f056ec07b73af70a105a2f8c92afeeb211fe77a443427f01ccf1350b3d3439204b876f8b3492ea026487d2326f678485b43f2fdc8e0331bacf78d9b4d30469fd775a2f0d49d6bbd2952d90104bc06aff69e2247b12995ae665182c884fe7f8fdcbfe23d62cb951d00ee4b2393aa1df167c47faefc7cf7f8298e86d4e945a71770219430b087466078c96481b80c2c67b9c46fbb0879f9cc37f958e1a7488729288e18c7cf309968e782c02368d954b8fd1a4f493d59403b0d365cb64e6f826e2f5c86b685dfdf34579924f8c92fb4140d6848309118ed8a0b6b6a4577085c2c416128b4a269c2ae4265ef72cb65793a08f1e0d451324a3fe58687a0daa714aa56d5dab7402839f07c36805309acc5ca80b76da5bc4c754855a19e5f526b50c64f96e56e8bb38e3c2ed6082c739f3d41bc94a67d0b1a4c52578d9f85b9cab66e95db264f333965c248f3abd13d1df76e4f028eeabac2575a17b2fb3ab15cfe5246c70594e862619e01056d7d9501b17224be110e1ef67b9d97d53271a99caa4a22a9d3c1f8bd246acc0ab3c26aacdf24a2cd874f1ad4802dc79ca511b4cc71c13ea934fb820f6afa1570b48556d485a3b82141c0218113416db25960d8cd7dbb66328f4e5d9cbedc1fd67b4235054fb7d1e5c63bbe69bfcc6a881f636c30bcb4ef00f6799d8ad526f3c627dbf3b9bdcda8a7856f62f5893dac69902c21f753eef1d08d8f9548de1df9733a46a8cceb004b277d890e2641ef352b3cadcebd5ad0cc75bf8d19c7807ff91966e65dae9ba106a0484be548331653730b00d8cfaedff5ac2aeee59505d89b2063a9e59e99e1cd7bfa5a14a9ff47f1ad9602ff2c345d6bca03a80b4aa7006ea0fca872d80f3690ecb740e28c69e88715d60b9574dead65d350481ce40c90bf526c0e3ab133533aa7c4d49f5298609ec9b32ce4c8f1a2b8100262f187138e408e0c10110d70beb95a7209a7b27de093ac9fd5085b85d35e8312ecc95e9cb8a7165e3f3795886f7535ce72b7afa35add618bda9cee41c616c6d8b848952d29bce18a063c3a01d84a0ad758b79236c8ba6e941bfba0da3b730bad27544d294dfefd14f9fcff2b07d70ca03a70ad89f13820ee2146de9b2f705234040ab8c8a0d02962232f89c0679ac81e1c1f964d755a433d1eb67cf88fa0ee6ebc0e6f641358c446b9de6c8c581070f033a460d3ba453bcb4aeb511a8b13fc6b63d28fe1d63aed1e4482b4d5bdbb98514e3262cb989f80e0c5eddc850445b4424a7e867ec3636170f6c2c857cd17886de3d1892443ff95616cefd59620979285fd510430c1363f627c4129aa792571c651d512727415158651d4ee3f8228df218d6587aa3b1b984b8d74bed249c89bb50736c79efa1758eaa3eb25c1a3599ff9b14cecaaac0208ec7679c3b5ed3b37465c8d84bc087bad336502ce555d3e9b05fc5ea701aa0d84ef5dc8b604eb0b548bc5250c27f8df3ff633fd14c37cf30fcee5ad15f72604e04b8719f2c0866f7ca5ce89bb261ec1eff7c360501f6dcc723135d8ef0aa142404a3950b155cf71cf2b1aa974b16ac00216af30709bfc85d8ca199056677ee10c8cdca13c4d3746d2c283cbb8be6697e9f0983b619289b60060ea1ef145910972aa483375d8bf42906cd31b42bf42cd2796900e1a6a8a56290953df2a1a13a497a94e51dd5888cf485385d069b5157e20beda3026b0e98271c3949bccdaedef4c9a26fb56ad2cbf8fee5f9ed3555a2bd4b40229dccfbee9e858d60dfa643aa9d07e3a117027148233710ff423948cb3d936ad344e13cd1e9e40765001c6bdb19eadcf5cfc195964dd9f6adaf60589cae3943b6316a31eed654ed84a4b40ec0f2643048fc05998f8d5ed4b5584c46827bdd8095a8df8bce53278677797c022b719d56937157e453f32fe5777b7b418ca9df7ebf9d10f9c472ff184e320c65830ccdf846c488359f8ec3ee050ba76b83c46d7f015596d39de2f766a93e5cc90dd002ab59c13e4cf014872d1b8fab2e000af44e349d5f0f4ad9ce0e679ebed52a492ee528533716ef3ad6ea20217ca1765a812bfadc400ae1fc87e9e79bc0c3d5e48bb73cfcb5f618e97bce549afced6155e6d02f6ee0b40c247cd636708554ea2d61097f38e229c0bad26de711d93634456e1a8f9065ee945109aa4bfb2bacb2e6920db93c9ac20dd90fc894d0bf54edb743175c3ab2cf53e45bb25c8aa0b3c28e75b34820b99ed23f59c6a54c5f397d695731eeee0205b2420529bab93435ede07ddcdce1c0f0ac65cb0d6029e5741ee6bd34e72f573045b63cf7b14b4f7b2dc42ba56febf374022a156b2ce25e644e312e7b0bdbec9f982d4f183206abbab282c1f08033b49c94ab5df58a881ea116a504852a8dd3780dcc150e353a5f4abc3f0e6dc7f903b2130ad0dd7f592b74d9bfdffc31c974cb1ca2c19ae921e1cafaf77d005e98b11e5f22803666e0f31d09fd681d78bd8a2f4b4e1083955d3767a8379b81e7d65d1fd3681609ea941da585816722b6c003e6c96d104fc21ef4a9f6f7d748d45896c4807af86b05930fa5ff100672a605296287b16bb7385b27cac8bce655e03f7bf8e3493d3a5ecc1853ec05bceba74eba0d5dbb4952efb70f4c089cd96fc854bfd2bd2765f6469349f950efef86346bbe16bede4821caa965dcc87356cf04a8cb78f50c265eb80d6b3adb0be7feb17e7d4d9fdeb1a176db6b10557c1b77f53d4b2251ca73ba598451826a5247bef454017781bdca32e0c934a01ed4193849822bfd9cd3d8c90b1143101bd1ca0fa4130511fca6927b7d9af4ce0e4f6e39dbb476c5cea8aec96e845e44b537e9f122ea78c2dad28d2710b45ddd5290fd0ddb69de321b6b005ee2254e570f7379ca8dc8d9c2a7db90937bf1fe57b3319d80b9e40cd06f6d75784c7105d5196908dba223da93ef516e459a88986d457f86dd496c94b2ad5e7f2b2ced10d7ee7638873ed5748d842a8439e7cec0587bec16bd3ed714b66c25e8d3089cc06c14baa5849b41e4286a47c412cfba61c27d56c262d2f4861c6ff3ca6135936ce24ba2992f953484f92ce622b25d547c28521bbe559a3d5688d6af4d413dd517e0caf664ee409758f6e1978c8a291cb3e7b8182514a57d39c1ee13b998ddd67e22478360db276e11dd4f07f5c2e2b1df3d57030da8704d451d233fbf0e4d99fadbf69f72a45ae6993a7e7af3dd31a2d222ee1ebb5eea73ee14d9b1aa7ec430c35971f243299dfbaf434c0df2ef8d4ee1159173e47c88d39e77a1f6341d9ca5ff256d4c7b8f81b11b2f4c031076f425c27c440233cb550470ab468d2ac0f6ae1ea90b8ac8c7faf09cebf79d19eed590d1bfd0a8fa71f290f9c0b1a5f4ac7e08a221b98e51532c2156ec347f3d5cc8d885223de08cb526ce8b9ef62d76fe6d29de226921f3cc4b29e86beae8cdd82537d0cc3a93e1884f1998235a7bde4b2371b43e2b2d79f91848266edaa4ca546ad9643aca469431efea6369fe0695f22a2aa902cc503b896d58089ddb24d393258aefa3f76e56211cdc191d97edcbce4dd40eeedde12ac610db39e8832a5ee57b315a386aaea438b99d7085a41912136834653bce3cf49b36905da5fc894bd163348dd2c5a7bb6f13f1a0fd923cb673048ff57b30b37c87754fe1802349d58720e272977be5dcbb418617e3dc9b647efd669590cae9c8e4d715de9c9d977b0ddb8a06f34509c5a990f0f419fd26cae263c705dd9fc1b5994e82b42a5c8ee85d0fceda594b8045fae632340aeda145437c3bd2410fd237e181069f75364d1dcf073651b183649267f14dd60d5bb706208c0292f11f8f634641b6d4fa70aef91c4652dd47452f922aa9b9f8620c24aef3f10ad549ebb4a153e69c4cea923de909e687f1160ef22a0f5bb5c0317a9902536eeb7fc1adcf6004bfbf96b7e412341051aebbfc04a25f98d781021d9981535b57f8d742649f159839305ee203d1e0b3c90ad1710733f96dcae0fd4c9062d95d2505d9cf29ced71193072576488b4ff000b6a2d86d1b2e473bf61c506981a12703dd8427c6f843cf446373def6ac237db931bbdaaf40544692b0adafc62beab9afa6441d9f787bf5a29abad3666a0a8dad8cb22a335a42be461e7be5b1f4ebf2572206ee668fb372b06c7291c4d7590c30bbaba3a9bd55fed680e16699244beb472d27fcbba614d0aa9fc2b55c626ce18f359530e46e3bc6a8dc86b4335cc05a81d0689bd25dc35bcf4130ad1953a8b83de52558973bcc2c21bfbc3d30ebcdd490d4a9117089e9597e787bb526701b7a92bc1035a662047c9ad52f4306a71fdecbfee01c1e389ddf79f8281c4ed21ce5b44546eaed1b3f5d3252576db95ac137851afdbac7024a89349b45fa17209254dd8f047be922fcdb90c275c6ed4a45551d8d4810bc25e623861faa341200b92b39df44ee6a0bbc96627df16c52c16c4ade1d3b0f77ff62c72589fcb1ae9bd760b9a09e5d18b119bd52290e21cb1bcd30457192607fb489f3c433bf29a5f7d8ef37c2237bab95109d1e2bd0d193c6c7abde673b36fce774591023f0a4e019824b8ae300d7f61299312764d8f7aa44ff2de3ea6bc0977dfac84b830d4ba03aa11009398e1007d9f93b524bdc279071ab1b779bf2215a8b1e83643a63bd7201bd7718acf7249e5f81f7baa9be1c7d0e7b4f0ab8028a237e8357f58ecb3fdc1377ec9c3752efecef1cf1f0acd013f63c92b8ff62ea74b1389e30fbb67cc639f3dada8e175ae04d39d864330cf837273e636bb0395a9e367a6f089321da6e9440634402ace7f5d2deafb1b3536b97bf7b881c3830a795bb1497d8de1be0781670ee0ededd5e6f491315a6c0593c752a2f0ecc4a1e873ef85808f1e576aa002427d156500285e44895afcc7d6130f9e571e87c86da4486d8910e97cb425559f6fdf42362a21650fbc31deda83809535a5bb8f3623372cfca379c7c3940c817477b6ecfa875b8069021772e4ca4f95f1540d39a5de4346c070ea22eb3adf5b2b2a47471ccb95dc4afb39e320f76a3f5564b82300d32cb333760b04fc53535691f8232cb5a4c7b535e9bd99fc04cc04d21edaae790a829b26bfec10f35c2bc9ef1e82834055135c2ffc95df01e100a14efc6ac8038b354b8c9e32681867f98d8d42605f033a61f3d2214c698a5e088ad6eeb8fe07754515fb51423d79ef8870c10bfecdedb8c051fa2fcef3be80746acadc9c82f3a98f9a798690b2d15dc283b53692dd95ea20e84ff9f08d3df89168de06d8c9c53597474491bbc024c872078118b65405de7a3fb722abe7a351294f59320070842ac04d70f7b89de4725a8e7eae410809b9e57e906b018275cf1317863851c4d19130d2e0b32edff9fa05666cda82d11d60fded600f34babf1e97ec327b10d3ab829b36dedf9532fcb755574004dbcb6ee42efe343d89699b3d56b8d394623a36807849875b5e072fa466c25b55933aa94f8214e23fa4e90660b0368127c49d357bb858da450287d12ffafce1560df20b2d2881cbd4eda15d6f8951736ec22c3d162c7f85f57b8555a04aeb89f69174b8d8f550b76bf30f486a896ac511cdcae6a4c3ed0b98365d5f0357c480e71055b9d16e7037394caed81dd5cc59fa8017699db73ac1808aa582cafe3d6d2ae496adf2efff07dcdc3cf93086c2ebba85397b1d8aaf3d31333af3381a76f1f19dd7cbd0040ef905c5b7d142000b9069a077a2241a8eb4237297bc4995954c634a1e75aeb7344fa5787c3b81e0e817f3cb33ca0d4e6c26de7242448369390f7537ee84f1ce8f9e9e7e54059ce29166043c23dce24bfc62cf7eb745358ad3a392d2457468c23f580158c8303e6ab09849ee0f8687b0c12b804ab6804fbbd41948bf636175accdb7072df10709bc24b025686e6b8e6a7cb6f604de189ed11d7ece6b1deb510bf8879c90a6fda500088cb9b030f7fca27b6d52ead9e981e794cae211c4693355de95060e3fcb9e0b6b6df01d10237d9b6a57e62bd530e4b53fa83c45cd3e2a41d3912689788e00e3d22e5f61ce8da2e440fc7fc2da247ffb28946489900a5f2ede84d780195cf13db622fb2aa5f59377fc0b97e47e5ecfeb2640cccd4bb8c61929415f5be70172c8479137a79c0de072245cd0977c603bed0fa82486a2a828b71f6e1a404de36071277a957aa30f5cee0001ba2d0cf1d3d0d2fd6567ba077e532e4a17fbae4cbeeba2232293af680cc2734c1273c3bf190f46628b369dc3adb507d78d403b957e07ae5b88c6fdd276937de6599d4900dd827e0c1ad345174ac21597e65f6bfc4a68929504c8204ca3ae8eb479c1298b5f7004165dc6aad342e366c5fb71621e881168c160b11cae705ca7eef7c903f0163cff8bf1b8935730ea138ee3dfbc4d84e92188b900ad1308196896fb7bebefa3ada1d5b76c2e2cb3dfc00c3bba5da93dcb4bbf97c7232c6817490f5073247db38cafe0bd5ca2f345b57614a3f2cfe605786e60db09b14435181ea093a42f1e392aa2517ea651f69d9d83ded6f419ff361358ef2ee85c4fcf13335f60eccc3c365a6bfbcfa568da7ec95fb68eb6d6e8b00edc30d36ef04cb7dcaba5b53f0872ab0c71e2f3510073b5bf87af832891b86073550a61e1e5c612b6ea9146a9abb401bbda1f3eff91dcc3d1b1189be3bf93d427e58498be2caba8390644778d78f970f2cd9e8b96606986102eb9bb7a3662536a50636bf97629771bb331b630c206f1984f9e583dcead72a5044e096abba0736e257b872c118faf3f28c9ef26c701964c09c9f2718b39b845c5022c25df4e3ded8db809d3e3910137b9d36d2991d2f172399da975221148d51c0de32c97405af12ac295445ad0ba20482007b8c7b92fc5b52f4395d43d0969b3a01f4cacdcc3b4e7c7f8c5e31078dca69e089f6ef2201673b3d26f82339770db1b640447edb029fd739243fd6383b928769ef130c100f24960c063a3766dad22d22d931f24aa6573b319aebd2e7770c2de4da52e24373222044e526f94f7c4a4483fde9d00f8c05708c4d3c0da7254973494ed530da7ba85074b48cabfdefee25229d05ed04828838d1f5447e74807fdfd12909a62818253b58515245bde282382e6adbe79bf499105029fbadf216469edcea2461becc302c48b66b7d8037a7c4326e9c30572cbcc0099dcc8363fd44c6212134b66ca4c3631223024c80264f427ba1b8ca30fe8b9482ed724dcd8aed5158e265892136470c65b779a36f578992377ca869bd48672e499c3ba17563e40acb648e2d85b29e117c6b422c1b2b54cba235f2585570e65cdace030ae4871b1f1f6ff7d6e1b3f559376a4b9564787b8537a0b3cad63580e60addf45d218f154202ba4116b9602d865fb60fbfb0c7d312cd44e01462382ed84c1e6f0579a586123456838eb82391dbbed56d6355892356bcfe3a2d04e6310a4c3239e74538b73590e61de9e36bceb3d89138349aac49c895b508e0abd62d165807e5c664c688c27462acc95dcc15779fa51f3e4b4453ee4a745bfe58a91e3dfd02b91c897985e258428db8af75a0141f904b8a7653ef45e0888366ae704e5f40a9cc6c00f7504b07a8afba49554b37a3f72eedc2ae37ef7031e11e4deb1f0d5a45cabecfaf82c6c4f294c3b2ce0eba2e3a6cb6d2cc99aed17a67607de5ccb73d1e904cd6bd3f7cb401909fccbb86b54def7227988a5b6867af2c7bdf4eed0448985ea38dafd3d34f05651ac1b0eb2a13df0b28a54859da37ff4fe306a5c815061c5070bca5c740da64f7679a43111b41ef79dd94e345fa7a5de4fbb77fc3d23cc9237dacb259c53657d813431d12bb91bf6b9fb493ea7888358c19df72cf896d1b6e303898cb3a2423b78087f6cd21ab39744a7e3ed5a78475550a4a141d5c3c6cf56115d043307f269f0655c4b0a122c7273ddf6976289b515a43cdb0f2f76d1164c94b23465ee3fa3633b00859bcb628484eb23f2c6f583a533768f3a87cee81c74b1bf848a14f7dbe5741c32be6f6eb067767f861eeefe085d25251eda31d71555a17cc53fee9c48a6e2b6364f8431b7183f318b4e0b3ab7ad425f6393b2ca8bfefa3a0cc5837cfc3f7e18f92fd83687b0eeacf1f51056e87c7cf13b55ab07056905359808fda19186ab19b3031b21e0e5defd5518b42d3389726f1c1928ecf9a6c4d9fe155d722a251e9dce17fceda66439f6fa1bc151523c7884133e6e9dd970486bc62ef92a7619b08ceab8a5582b78531574d91662fe6e24c9b2be8ebb8677279e23796eeb2b52a707fddfd7d8d8aeebf3d854e669e12ea89a01ee00943f8443796ad2807fcc48a5b3de5331b5bff45b5b1bf174e48bfdc6a9dbec0d67e7ad5819e856109a9f9e22353a4798733740321c96135d717c3a9f032455e8de658eba6b663719f1da25acacf482b210b709e37a304cc69211a7e45abdf3f6cff78f63af594b530e1ac87e5537b44d9b1e28e85d626cdfe9454eb0658897339defb409ee1982f9c5950e8aa62eefeeb75d18f170645049a7ca5df49b8ad766fff73051644c60025a8307f74c7d78a5de76f456a084dbdba72ec3778eb5a2bd28767c0291f0babcd3fcdc604153ae93a3fa781245caa8c15bfc709794d565b8cb7042b8bdbe65cebc3d41b3bc228d0c55b7c84926eed74024e4051f7efcd999d79212efa90c547fa3c2ab1646e674ea4566d57b43215f793f3278501cac93bb8717f79deba1625cbbb21c5944426fe61f5980701e8f30ef6d6d37f21bb80c29b2782993646d7290e8015178b97c3a644bad464fd0e2ee89482d4acaf19f451aa4f38c503758310b8ae96adc2e5a736af3a9c252374ffb4927b19b0479c9edd69bbbd57eee976f5e074ed75a4ad105e231f6f63617fa0a10cf5dcc24724f8f18202b53c7c2a0653fb967abb919f36247a90e1336ffa8c3ed8972ac874b8e4ea8d39b9160f059a9e8fe67e7f2bce91a7a484141eb13aedf05a809f5e8ccd61de3702cd0fa7b8ff5572d96ce5c34831c141d19e72813bf145274f4cbd57309dfafc553393fbfeabfe8c1b77cd0d7d6880d9362bccd58c0e47e3cb6766f4e071adad8805649cf1cff5bd2ef7e61b16b3550bc696ac6c80ad0594c1d4909cd1f0d6708d22a812477d7870fe80ceade03c37e322296189fdf6a78093dd7cad0402dfa3e427631b3a92b061ce82ccaab166e410462ed6b0724b8543f9fe244015b38647b885432f1e776c7614a64b8b79ee11206289712743b1e5f22dd35f05a33070f580226dbf624ea569e96d82762b43134b0553dee2aeed45abe44cac18a22c0ec253a7684359fb1ef0e7c72739e99d6e04e7e665662e7b19b0b05ab59b8c5bd5b85759fadec835d087bca5fc59d51b7c8bdf96ab0504eb390e12a58bef03aa0829b10e94384e8ec178de8f42aacc7b6a415f74c5fe907b2d4b86b9f52efbb780fc1755760c189421512b258c97e531d36f662de8aafe5c387cf7bf440068c14cea708de9b701787d416ac1c10b6f12c17707b9b5c932307f695c33de6e140eb0acae62742d0e13c83aa78abafe55a3ee55974333aa9fdc310a72c10b47bccfe1ffcb2a7ee80abbb2e093f0ec602e9ea655a0d4a17bce26c6d93b670a7f9f771f687a3621bbc866eb65d12921420d3c4bb2caae86981fcc7ca2bf5cea656378d5987a7be19666d709e395e5be651fb178db3bb46b5e33c75f4bd7b22e54f03f427a7c0e68e0450c127ec8101f6e7b7e14365268f8cfb3fd59b01d68e39a1ddeb3d3b316784270b3ef76cf681655af767554e6abe2d7051c4ec4ff68f640ab98c23a4af08b32c8397fa9e31ccbe3c7774a8fa7ba1735552820e8150aa4dadbe423faaa0bbc7aa24c2ba4b2dafd3efe4b6717ba79d95bf5cc26b74ace39dcb37d98cb690e1f8c5e1e504bda39f85eaf283813baf4f6c6925863940cf01010c48cef02eab316ad1dcb7ffd26551ed9dc3e62da3fd56dc99dd196947f05d586a0c166de2ebfd2ebdb11bc5169f76538733335755307a9d0b6d5a4cbf56065db28933949351f5cce06c743d277d247f2b9a3eddf553b6b9dbc09f5a7a2f71b938acc9f598a0da11fd15b69145d69c0cce2852bd5bc2f9884db5c8f92ff194510258b30fbaa5d28cdcdb5cf312d622883ac0c0d78d4c8825bc57be4ae2da11f828ab7f5bd6cc940c6cc969ed68c2d60e9a318c2d594d238eb3d3de9e073d6cca2ec0e98771f04d58e6cd4b9bc63aa5954ed4d66606be6c14806de01aa97140347e62787b8c08a2eb13cbd9591e3b1ec6e300c7f6fe292189feb9c41ee9c2147c1afd8c399e53a36b2f632df7b53bfd9d6dc892e9214b3e54a48352407c86da7806b1cc42d3211af49383e9be97da52b35c38ed86fa7c846d85d0f9710b8e569267985bd339258ba252d00c48e6de62d2cf20318d29777a5d72469ff190bcfc37fb2200015d1073302170ae40324661400b80b1aff617d23719dae084003d06b93b91825e271c42cdfff0eb32c244e7d05247f53382ffe0090d5501888d11851484515f0d05f1b00216ffe22b249b12dbde24e2e5390e6f0082b11befde5dbb5491c1e43326a2c575445a86a364b7c86fdc28cea126e0fe9bfa920840d7e883f945d12bdf9fcfd9872e0dfbd4ec85dcbf259416ea23c23ea7a546e8f068a29e13420c594635e64873fa1f3a9bbd28d824c69e2fd22459cdee63fb6f6bf1079dbd7f48dd4e785ff4d55e014c42d3cc6f62d054839ba57006466bc81adb525cd03402d1c8686bfbd44c1e2e02850d05a9706a569b413ad4dd348868aed55ca32104eeeeceae94600fe8134de85bfc78660a1291c84f855d1b3ebeefa7149382f300a59ee8e48c69687fc279a56ba13464860b0f32b9b89165018655c460db68716ce8779adb295add5f020988b57e12bbb47e2c4c744ac8c9f13b5e2adcfaa8801937059124749deda4aeaec5ff5bb18b04b5521a8515ff93c7edce39610699c7051baa4e77585c8637405ebba5e65df588948684f6c8658e0a2938402b4a388d5ed3710fb39c4a847928c2fd23fc220f656599dc7a886610839f0cba9e0af7a93f959de3592bb17db084716df4d51017bc0b287a88192a8ac4036dfa05abc94df55eb475f914e0221dee46192a480bd240fa44ca08be1bf609aaea4091498da6b7b55210162bcce7d8eca8300c9d6b7b8093076d7431b7c2f9df2bcc56880a7cebb139cdef663d2a6f4f839460810277c0ad5a16ec00f581daf4e3f6420372ce65f65df6521a735a70a28ebabbbc3680e3557fe2c7d5ce2cc6fcbbdf3f1140f1877d3f960caff8dfbcdf1fd7a4659d8cde4ad02021dea6a23ac4451507b88d9fcf9b1b0e6a1f2b45247c2c4bb01933ebee10545ab42ebd48d00c559c1df939663e27dfdb065fd7667a0e024131c95633ff1f1109e2205e63b043274180c931b0d4c1d22fa0ec1e3a36aae589a0538f567d4ce9b2a21faaef2f2bcd86fea020ea32880d3a4df09664fae7d9ca5db3594b3812f6397885f5aa7b60a163b67e29091d264aa223f6b8e96789b6f9fca6a4c4beb6e3c3a116ee4801948fd890e061e416c702b836b8162c64689a846df900f92efdc7c4abaa45d48f5c7a44389ff6dea2d1c061372a1306f5e75440376ccb9dea93a3bc742fc6c12f5f00bce5555ad2becc2900ad53bb040a834a2b96f6783c575255dbc1329bfd652df90ba403a77d79d1326ab4df53fb232c7ab3ee53820e6b2cf1a300b1d0e25806775fea296c6052e62fb90db0d84be160ee2e198a938c5cdb39c7c8d4c80f6f96db1b3ddf64cf6d29c1cf8c867997f04873f247ee8ffa5de88d4b017929a257f4025cfd2ffbad184faff9401fe70309bd3eee51f63b4c3c1fa4ac21c33dac5371dbc09e6965a2ba6cbf886f14d7fdb5f9708ea8000b21da21a2c118dc2cd8fd0f7142fcb1996fdcbc4304322bc709d7bcad14e4080b7b40a104e24526cf07ecad76be8c68d9c07c5011abf68e52d77f793afe0ab4a70265753fc425a13a5014357195767ae8acb970ead9f03514d405ee1c2fa7e59e21ffe559cda74674d80c41d2d4fb126ca9bfdb9f813bfc6d9e68c300a6860bbf01d2597d3b70d46ed9d5d1dcc0031bb6724cd3b90fcd1d8adf96b54ffe86e35844a3422c428bbc091b9891b141f202d34b878fc3560266ef86339c990470e417769b4a335d834a44f80f51f84cb5f0505fa2d31abe646636e398519ba565462e19048a58a451bb4927e2d895b609a356a3dc60ea65eddb5e7d9eb824bcac352bccc391483058cf568a662d2fdcae19997e5f181cbd366da7db593012503e23358ccf2c80be69ef014ca28d17a44df9337be6b931f11bd8a758701900ac8f1f7322896180d3f34855c13b3ddc3a08d88479335e5fcb63a735144d19bba431173565ca1948fc19e22f96e4ed899ef0e36fc87cee541bfb88d9ae87d37935c8f7aec99b68b8c27d212f777f0c86131de00f19193dda42d38d94bcd19aea21e815cf95b1f23a4ceebe205b83934583f9a6c4ded2df5be5f4aee5c03e7e5a267bdc80c94a6953859093fa52a6ce0022bfeb2b84fef0b0eaa6dc44787cd231e80392a6909ccca23ac407893192e54be0a1bf18b926ea0e18e751923cdab92c166901e6df134a94139351dbcdeb78ec9d3f61c73325185a07a1e43600d0714f34f594dd4ae8c334373686f2102ee89609a901fcea70cd53c6ef6974c5c63eb5ee8d72af0b2bfb0f86daaaaee126cfc2b99a32d1ee20d82c2465da8c413df673b5dc610952e532d9c4ddf0983344a4ddf99bcad128f9d009066cfa182328e82c3bf6d0b0e2a1d1c896728146785a7359c27d644b3857435729cdac822172f7d72bad8295aaa0f691c86c3c07f001a3ed4971f800805fee7c94e3619e10a4a9067819983f5f259dd802d742ea1bc21cfb158dff8d02a3b13e85f1e56bf517bf5bfcb895e181abc10414844ac6cca1165489426c02936d1663f29bd385df51369958e9758003d1eae7bc08e01904e26bd9c2d5707500a351cbabda15a3eddb55e65b7da35b35a485499fdfaa6e54b56541673930f0bfdb2219408a2acc8c4643f6781db7c6ab351d2dcc433d2604820883c63bd7e0b2d1177303e031d0bff59d38067a507a74351c7e6c9ffd2279c49a6434ae0d4186b20c39bb8417318f96d059d485024e66a2e18e27a6e7307347a9ed6c9af514cc4fc24dfca279e45740ff6ab2cf19ea03e3e50460048e70db5bbd662476eae7df21ec34d9f00fb9b636bece1cb558cfcb9bee1ee36282f8875c66dbc72a4c867f43656f13f3a728283e595e5303ef138cfb1aad7e5661e27b6136f3be6fd846ff76c08f816ad8cbc67515f50ab0cb9f67bb60b3c80c9472c35e14bbf9655b40517fdfe5a18118692284ebf9f652ef6cf1137039431e4f1e3958c55b7cfb8105136e09a41946a06bab85a4a324a4aba20b405fe0ca1af152e3ae62aad9926e32d46c554caa2ecf904eb7bd56ab4bd2fd5e6fecc7ef8a6e7a9530d8fb2c0a54b098eb76456f802594b07003d3f943fefcca1b56a3c26764b721fe725b508d50fbf627e66ef2ea1fa4d8b878fdd57a5b20459d45eb9be91cb17e2b59b599f88fab9c7ed8ab29850cfc91e0db2313f141152499869de8a6463fd664cb0d8a4931ed60cb0e49757858efb5a1425dcab8f7a632b2c6e1613c93c2fa9b0dacc7cfdf33d5cf1b4b744f0b14de233ba1b7e4bb571ecd6e3514c0ffd57522a69c611c405f6ff275107e7ae24439495cbc29d834cb0f8b41c0c8dd47099ba844b0b60d4a029a1392c311dbe4cd66d9c8c298c23feed8beac2bce59856a3ab510263a7c7a6435854d4c78b43df645f56440cf8aee9d9578f9586df0c4fbe58891b86f09962bbf9438c4f3a933da38c3e51078c350cbc45821d21479a6db2a50f7c0aab205d457a8ab5c3f88ccb3230e5c4c52fa511f6b24c373cbac3c88dff24129912bfb184604c8fb50ca1b39395b443af3562d818bbcc12ac2381188d2af2f7e4ca12912c87b7867a7d49c213a52e944a3436c615067e212c2e902fc72a57b702e728b2e34ca2d4f69729622176a1bef9ba41d952e88e6e2cfbf441356f8cb82411347c7cc16eda57aa00daaaf30d1c441c8daad11ca53aabe975d9c9df3ed3f3299c5c46dfdca6d47785cd977415f55a1a433467c6235805897b86d049a7835e5224d82aa57be7f663e11cc621f00253e24c8b581a581821cac7a9d0a2282e44af2ba82efc0c3e8746bae819edb49fef5995cd91c466fd81873dfa70f20a39507d0abea4e3aac1106e502ff890bebff712a86dd2988ceda2055df5be965eeda8a55d6ea9a32332d69de9b38666bf38b47aeda7b42d55c25d9a9f07c2533c6107ac70ae93be8c2ea2959fbbf0fb767d29905fbf9161fbba8175dde139d7e6367d607a63a969b0454d8614e5677ada896a2adcef81d33154a0a221787eacc99dc8c7295e3a18dd54b6740bd7377b8add74f0e944ef38ff53ff3894304985bf3f9e4aacbd13bc610f29d38f0481fb161357f72b9e415686023ef82fca3acb0c02f4bb05061d9ac7f17b9d32e2c05baa15672961e43141509cc5c3ee5a98d60d4d0a911aca16be02f30d671718afcab270a131c5414d0d9035dea64b40437a18dac0656d18fefa9342d5ae83b4cad5d66b4a55c3142b31fce1aeaeb62f9388e327d6d1b23e15ec9abd43e23ba6bde5e5a4cc7fa32a58a6c3c3f815ea9a6bd3532f1268983550c6556c23d1903905db7dc645e6d124b70991765c782527401100d501d8ddc7faca879ea9a8e7b971d435e68a2e8cfe90e78fd6fa02355b8cca263390c7e5f7d5ae8ec06387c6a6eed2f713a24422c7e53504f997ebc77d14c605015afadaf5e1921309e4bda6f6fd52ea48513cc56ce2c412c58e2a6a5235b3d6e13a5aa56ff6c13fbe513ef6123ba8502b73157f9483eeaca21a759b01bcdb33247778b3c4501970462a39bc905cb0594855efff163bb2b86d27f67cd07647ff1db17c35a31829999217a06b7b75edeb674558ff0b8f5424841fec9b3c3beae90af40040d0054e385f49dded1722d17dd1f50f7381a7080ae60793145657c14d0c2d70f48813c84ad40877e98057518f679b94c250f40716115c3d5e8e4db3bd51027b1551a835d9a5e585af790057ffae368b79209651fca478234cc7fedc09ea3a00cfff94f7e03559bd4380ab410aca54716224641ae088185611c8e54fe06f49e174a2090633dcacfcbdedb7c0bd3ea1d83b783508c8369c1b527e721e42731821bc3f69b9726fdeb6f6d19ecdb113f981abbb0dae40a15141183f1f0c9f7468b96e73aa4478f4c511c79f2239bca9b963c19cdaa6ec63f89d7cc34fd442ddd58610645d002b5322a4d8bed5066751a91b74258bbd6240f97709abcbe4a5edca698ea4b72a0f7459b570e7514bdc27ee00c794c284e31ab9f2ef06b0250d6bfecab29d8f85eb8aff0f62a475689e567ca4053fa3b02cc0d642bf7f15dc7f3b14f59f92599235fcaac981a000694a1dd1787d94997b45007f85f9ec91a4aa716172de077df86ebc3e8dbfbf084a9db58be6e0dcc7ad00bc8169bf6febc4eef27e6005551106969b4fe3aa72e0059fb371bae578a9fd22c67f74df5328353ad45032962c10436e08d120e3e3d46c3d6ce64a680463068321de6b2c056d7e2b39e3feff8e2182b38373eff3656044be9b266acd9173017fa3de67bda46c109745dc3cb727e3b63a5442101bff7a490dcaff63aa5532a8611cbecd91c0b88637b9194e592a8ea92ac7c604f37eb52ea6684e8420b2155de56ae4d5c8b9a5cc5b49401a40af1705146190dcdd9cbc0c1b87b4d0850971c60cce90d56d723ef15886aa4758699066130bc0532243794bf3f6da6feb6b5f0b64e8641e91505b9fafb2fad71642ebbfc7af50f7b7135acc37a43dd0cec806faacc481a39ea2a76c15ddd9164e6be83b6ed236d7c25745639b240021bfe5b5015c0a32a9c84aefe45584e2ee0e93fe902e677737411ec28d2852233922fa63e50b6bb3f2916a1c9be5e8b473a06b96b10e9de01d24a68e05fd33a1fad3d3a72ac52c898cbcdccd6036ac27594504630ef1eaac6533bde85b4b4a1b4f028e0da7cf08e6a0166d924a3925a6cefe7654e3bcd7cc2374e61640c075f21fbe1a008d43f6d0773602117a805bc09e2b10a153f7a32354bce9b90c6a2a043fd0c9ddb1208e1bb02d299909025af668ce1634ca2c62c779e5b5a72649ecf736da845ee8b61afbb800d9db3dd7a6536f8f4ce19ebcf840a9e7a5549eb13f7f60412a1411a659f73b068dac5b63a73289f4735e04fa9b43291dfe2a03e471e8443f37048f85591466a887fbdcaaf57611dad9e39d0d1bc8ea8d5d84f707eea209dedc0829c6c87c9c675df8ff908c78ac9fbae341893aa3f97127c0deccb41c8b1ee8bf98353ff4f5415716c7d1e6b86f32247260a5293e4b9d36b268acd46ecd8a7cd154ca4e0549714c4ffd622f72076fbab303ad31f2101e3ab72f79044cb8d5a472e6866ff139ed2433b96c3a39006cc21b2773ec5211f9e6149bbcab4bff6c65b543dcd1504b71a72e44ed39a0c290db565db962969b3a94df184773bb61c6af6513d6489837f1b40bbf0202cc174239d61535406572131dd905cb4259238500728d52da758768be1245dff10f347b6c6b71a165d07cc73cf2d59782a34cd1a856bbc72aed9dd70515cd9fcc26eb09c59559f80cee7fcbfbb5dd6a6236c7c2e2de44f3ab964ff0ba48ec9ccb70159994651ad8e1c83fc2f6ef0b5a9c78441ad624897577004f75cf559d8169af946b1561547ecd4a4d5b73058dd9d25bfff7581ed6f05f21bcaabedc98587081c33c817782efe066f2c8a302c47cafcee717b99870cb50213fdd681944573196ac88238b5064660cd33889274081c30f4b57647e9a5edf0907b2b876bd7ed77155b8ce7578d1c7f9797398149d2cb089f24f4a56f5a7a4ed9eaa4918183acb48e4bd0f35a41b83f8fff53339e0bd4639ff05bb6c5ef913dc66ceded606b4b4a42fb3fdb9ef120e8ca7912f96d7edcbed8128551533da93b6bc5b078f06298d4023a1add0204baf5f06470f9635cf7314e0035c0ef6bf74be0472b7312b2e42dd751c3fcb3e1e5bcd471e3bd3b09043303cac7483c7b06e10df138097fd49860876416fd08cc637eb6d97f1d2c283a6d6818a90edcdaaf69ba5c9003ce172c96d0c756bb380cc0f66dcefa2ba20ebdd9f4631c309ea3a33f1c9c8b80c9a2bc91fb79e40914d1111c55988a5519ac7d232222135f1b6855c0db8ec53dec41d854955748e48ec8c895828d484731d17863b750fd55cbb6e721d9ef2f3401da2a60154acecce14de1005f1024a300a3849c70d7daff8601c2befc04b9267012e7fc7ce201c504609305ea98a1d367239acbdd67d121600520f297d6c91c0c237cf7ad2fc3407e1d18e41587ed508041a2b2451adfda4335214b6c14d7a575032094bd63922c8d4c21f28ae297f09ee0305c6e2e55dfcebda892ed5913a343a255700b603cf67a3cfde7466a0e25e841788dbe6b89689ea61abfb112c2513af3e5f119089d70bce71e954db0a4417d4e810ba749f89ce0b6ab0b5abbfb9df9c6728935e49bfa93d2a2b20a6cd30fe0cf2ef9c44e89f43bfcfce0a3ea27fa5fa55d491e4ea34d277bb418edee222a451e3875132a5094013714d5eeee5bcdc514bb26ac2b7c87bf292576e0f98137b307d86acb3028a0ede8957aea5a03f5945649ba6ec9ace9d51d22f3ea6dd84ebe5c86b6afce12f06c45dd811688d892565ce0f40ba0c7a78ff66d5c2010cab97c97aecdae16d242ac7d145ba4929bd5ad58df06dad7b4972d29f0a78bdffde0eb2ef41d1f453180e98967b5ed11a000cfd290d3725daf22f1ac1fcaf686845328d78e46e0b6acb9d55a887dfc6921a033d367ff519fb465ddbfe8017cc8eb8d4e4a408dc7cd984a1632434420f15de87cf64305d8a844915580ab8d953d284167fee560890b03e9a52f15e56b4125ccfcd492ead670f822024d3a017121a3866b6777c25a28b94dbe838a7b3bba4193601b0c3fe82e6f100a285a4643ebfbcc86903dceb1dd705543793f0fb80dcf2d62b311ba7f465f65e31baf26261574cccfa422cce6395d8bbd025e5101914736b21ffcff934cfa1c95ccfcb1e1bc7d13a17195aa532eee017c2f96a0b2e61b27c678480032f42d46063187e5777a65d0ae31f9761647e63b36819ec9381956b32fa9300f0621d400d1f1eac17edff9a8d419423eaea26172b4a5255debb546a5a529f20a4b1dc083405dab08a32900078f6bc158353e6cc70e734a968315dadcc75e9bb0edfd29205f303b958b354266aa66f142628ec3aea18b5f72c78e14d353182d3aedfe504c36fe9deaaf27baf49a06f92eaf5d8938f4535cd85499e1775d7352ab8eb612c3a68ec003bc12de16b226c3b08ee5e4abfe16644762005bae7fe78ecf7580c6d0183c0b30201afeda544f5d38ea81274e5aedde1624320def7189ab7957213f6f321ffb01bb1dc4025f03394d7e89c3e9200ea8a1ba4418a2dc2d0fd3c61fb47303902337fecceb04374bb5c59bf540a9f1929b1ae9818c6521ab465284ee56002545c7e01f7c21f60df4f3fdfcc6f987cd2f347e06da546b8c11cc307b69e5c0539a519b520d9b83ffeebb822ebf5d5abbfac15f9b4ce86476f27a6f5e1c3890d48dee0db9df9d657cb23b5fff6d1048f1f06771cabe2bb85178a54cbbc52ea8bddb3b41dd8f0b8311e93257a96e4535fda79680527a780a9e5ed3754ba51dfba2560b646248064b45aa4fba949537796b931d79c10a9bc927a8df5bf522d562dd750c640e3052e804379b57f4a4061fff38bfeb7f4e500ba896cd6a9f51719d932b7016d43264312794c5266531c90191f848a99f5da5e18cc4f12e08db90af9df5c651bf9f166b263e2c0cb9f043252902821f97ad5c408052252191945bf4a8a63ee4f0e8c0e17e250522fa4c8aecb0bb5e468f46957ff34e52c85a0e0c62bf20c339155ca677a32258d5488ea22fa84d0cf51b91fc89d99abb644533d210ea8c340840803501118bcc1d8c3f8796259c181888c32ea86a3107147a9d409fca653dd10a3609584bf6a36e7bcbd59102d327bd546e063857b0cd86e65d226b89a8b039092464ad91985fc4ae4ed1aacbcc26587964cde1400d14e56c832741479c23892e8be61fe281f8b1fe166135fd0d748d980757daa44322c0a5a49f1915bf4ed6442d7afe6bc16f691a2e282f25b73c2a93dd347436fad4e691b1df82cc83d9f68f0be1b65223f0c39034030f876db7d164a82db8df18d6e4cb544d21322a301c0ff310c3a0a9e35efb0b0b65c11c47ab27e49d5f326ca51f77240382fa9a27568717861232402d05757ba41242188024d36cbde6bfc39bf647d5df757b0cf589ba198431261a7b883fb04b670d8513dd576dd3bf9d05c2ef0ed74c0c7b06157d2dce53e265f9b55948bf53bd8cebdeba1f8c322e3cb55537d6a8700b4acb47c4a5c533f38311c30dfa7798eb43760fe883038b66a97151e60009fe77c453cbaf9c08d799dfb0ba3b3b4d93fe5495fde43d72849cc4e27fd8796a35ecf25020325857985422138219a9d316d9a9af99ddca7fd9a81435d8cea0adcc43ecc136bf102b13528f8f419548d3759f6bfd2cbc4357a7b6439cb6dea25d04b86d5891a1a3f667049052e77b0a8f6d242a70fd993bc16e842109cb2f590baaa0ea9b860686d3422fa910473570a7a8a453787f4910b86b7cffe4c95005de92f869f3a3d40eadf6cf5a4eee9911a6f1ce1fb20ef4f1bf0777f2c5f1fd4df533cd045ad8a0257dc146918beb9d37f2bb60f9af4b858e25c0436755242f6e23d167b87e0582c2a7c4fc6e9fd85d261ff9e71255eda054673fc194484d3768ad8b71dc4a275aacb9de8b281382ac96d2c7e7a8b81c6ee5cabe97edc3a2f7f0e11240375132b8cfedb06fee66981951ecd2ebfa740e88ccadf3432157477bd4f33c6f48d820e13d4730562098618aadaf968a16fbc9aa1d039a5ea26f393643a720a53be2fac48f64076a1b3bbf04028b8bb33973b906469ad6bdffd257fa31bb685ea333f5a0f5191a31f4be79fedb3eac308e7951bb414ed16032a18cd1d77015c54880054fa6b33008bc817814d0982ccc78831edd75a4865803269622115e462d647d01ffdcbdbd0fa5fd30c5202b471427956c68e850a92d5acabe0e324595a2b2ecc83f82e72b3eb4a42f170ae1dc6030e6525bd563f20a3b68a6fe1bd992263cb7210eff22dd1fd4dd470fbff2727c9996e8859fb7aae65e04689299d9bfe10f1dc5bae3e92d6772792407b6c3d5805a712d545871606a199ccb4a905f89acda6f0dbacb8a77f66fe0c1df3c3c7b483d04f6f9e150f27fbf1eff0e596f9d674805ef24aca5aeeadc8ce35e37a52df0ef9390297ecb06f96282120a03250a07fdaec9755fbdabe33eb2ab36741a756487156f74a364f8f39e39fb391642cc597b41441385c3ab5f954c1082408d4e568f7e3fd97472f3b35e8e45dc894977f34bf9f63acc4ff22382b0c68742226a6d8d417ef0fa515e85e7cf34d247e3e8e16efa8d5c6f90ab496626f900e9c13f41ab4df7b652fafb39946742b99ba117cd2a5a9bb765dc613546d03bc3f35d937e7e29c2e1e6efe97ebefaeeb07568b6127d7852d60f76803ec1527644aff6a74b9588162a362a5944b04b76b2e5b111'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const { spawn } = require('child_process');
|
|
38
|
-
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
const args = process.argv.slice(2);
|
|
41
|
-
|
|
42
|
-
// Create a temporary file for the decrypted script
|
|
43
|
-
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
|
-
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
|
-
|
|
46
|
-
// Execute the decrypted script with arguments using spawn
|
|
47
|
-
const child = spawn(tmpScript, args, {
|
|
48
|
-
stdio: 'inherit',
|
|
49
|
-
env: process.env
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
child.on('exit', (code) => {
|
|
53
|
-
// Clean up temp file
|
|
54
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
55
|
-
process.exit(code || 0);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
child.on('error', (error) => {
|
|
59
|
-
// Clean up temp file on error
|
|
60
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
61
|
-
console.error('Error executing script:', error);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
});
|
|
64
|
-
"
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Protected Shell Script - Devicely
|
|
3
|
-
# This script is encrypted for code protection
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
NODE_BIN="node"
|
|
7
|
-
|
|
8
|
-
# Check if node is available
|
|
9
|
-
if ! command -v node &> /dev/null; then
|
|
10
|
-
echo "Error: Node.js is required to run Devicely"
|
|
11
|
-
exit 1
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
# Decrypt and execute
|
|
15
|
-
$NODE_BIN -e "
|
|
16
|
-
const crypto = require('crypto');
|
|
17
|
-
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
-
|
|
19
|
-
function generateKey() {
|
|
20
|
-
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function decrypt(iv, content) {
|
|
24
|
-
const key = generateKey();
|
|
25
|
-
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
-
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
-
decrypted += decipher.final('utf8');
|
|
28
|
-
return decrypted;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const encrypted = {
|
|
32
|
-
iv: 'ef1a200f0271dbd84ae648cf3366ffd2',
|
|
33
|
-
content: 'c7a9c9c178a1b628f660a91b6781f8fa6fb0965e818fe7ea34c86b2d09fdb51b6b2fae07920a24f8c44308ef81206c3dbae14e43f5a66a769d3a7afbaf0425d70a176652c58042340313f73ddf6288623e138b7bc3140a1afe300ca025c771c58981bbd6e3abd5bfc597fe75fd0399952ac249ad2bb1c30c9382c4500757b4fa06e4336d5d125e69664a7d9c76fdaf96d6c6392fe0e114c62322ee097c2ce6b9b8720944e2b4faf666157a81acd40655557ee34345f95012e71cfd56e1948aa6307f2bc8553bf45687f886e7fbb74d2fe79a46e95799eec0bea498e0970cd0169e10121303a36de498ea10e398c31fb4d7288820efb2f3fdd471d5f55cd60a66131d84bcba906dff56352a1cb4e4f8384ee293e677a1bfd4ceeec225e193d539939964c496f4a8f7e00c8bd6aedc7149494214e926a3c9e6ff8f28e7ce3c2be9499d19296d953740cc73d41f9cc6cf608e9cf1198c96c66a9634e03a63dbb14f1b3818b909e861606efee6681e8011011b2b67c08966733396135c3d0273263acad285013859d15a9031efa63169ddcf9bab5630519df23e4d4ec36b0fc1655f9cbcce22e4593bf3b686e76c608bb00351a5dd287adfae64bdd6b17dbf0b2698aeee538ee6a9d282b50d16dbe7e4f19dac3fb51d152aaa7b4e6437a3acd4f0316a895608fcea0adcb74a2d20408364dc199e6396590c33e99466d610a25ac7ec32d4f7d94be9ccbc4a2aa1ce2dafb1e0c8da848c7d81400662b0fda27069cf6a5ca8dc98ee1c4296d99f92a1a74e6224e1947bf86d42dc7d1b0562e07a8cfb3bf15d256c0d5313b340f575494f18f8269e98329ec95e02944217d7402e73df4e502005e1570bd683e93386694d12b0587407880864da8780e68ae850d506dd1d4037953ef824d58364fdf859ff7ad20b844397dc49e913f07fd9d15c467976983e6ee380f8e2819b0e762694f378d52b1ee363a8f4c3cc451fb3a022b6660a30c60ee2d5ff4e0f84c814643b48db2e0114753fae3eeee9bea719ae4f2e064d1d570decb0be16c798e495d78f9b3d69added053ac96822355aa2088a2a10f2085af50c232048d528fa28bd36e2207ea90da8138a009e102420cd0b7d5318e7575f295391dce55c4ebb4947d83cbe03e6241554d854c666ed7162aae1daf2e303f56484d5085b854595ca5ebc7cd4715f7e8ab83b602378292d47bf000e7a929680a73467f5dbcf3fbd55f9e154cbe34071422d64d0735eb2f03a70141572cc1d84f57e1f4fd268b3c14c168add3fd660b600c078fe6cc80481a4b3356cb70fa4b0d01f4c581a975337d3dbf90e8095dd1f142da1848f143619f46b81401d893099aa510ff396a7a82f39976c4fa8bb7c0e28e2d2dac5e08c9c1ff0a8caed192cfb9bcdc57f8d2e7ed43716f82934e11cde729f21ed48707a1b280211b3d16a9865152e7f49ef153f2d7e26125927a0d46a4ea412f2cf441bc5c49a18c54870d7c163bdea1a262d93b62f0c0cae4b2cebde2bc4af30f96d90d9ec39e94af7bbf7c3228fa6c9831406824b6e3c186639f38f92838d515a58548a6e95e1647754878f6b9d1ebcee4d039855caacd14c6b6368cf9dbd1ff866926ac542a43171599d7031ca3ab3cc15c86ce62d7e6980012764cb22e868376c3b9e198390ab07a39e66d6768461d66c81b52290709c731ffcedb885824517e6cbfe10cae192492edab390e58e334e0cffa3fd0fb479010194c13572da73d97e081e593759ec8e487fdee573d33a02b96b6d7c9c00b31bd424d7d46798fe4bf457b4a86d9f51529c9d0d09d50bb1345f50d3399af1df69beae1de150c658244a1f9d046441fae3e216d39b1601475ba782c2070450a02295408c6b954638263dc44b6d3798ffe95df6a62775da2157aa9a10dde9eaef2c4a7e6918aaefd603e7958c4a155d6a61b7418a48d13e317c5ce6ad4c49c33fb4568e5fcbcfee2ab5355d94d7afca42f6b50ef45e63c6a7e118abfe08a852fc456d42c1f2c5ea932a41e0a426c50825dff0605f3ff9fd201a28de8f53cb2de74e5997ba10a868cffb7af374ee9d28a86b0a9c517673a8559d7e786a27101a3edc5e2d2baa2d58d353352fe7d6a1c09f42671a688e4f3fa2a9ec26e155ee976a2b8890454fc12063579e6d50eb5543e40db28c018991d5ba0ba6eda95ae4d30010c6d7082d522c1b9c4c4cc922898150b34c48dcf19fb3018891be8ab234f95744d8f70df53a3cde5d8750d4bdcbd7e48188648d6a3135525c2acb73566bb659c6f4bfaaf41a6c311201b1e3dd1c5e6c2032d3e3eb4baad0c3adaf7d1d5f09a5f456412eff4033137eeeece347182136e4be4afa7d2067063e687a8f7dbe635e870a88d027c64acc655c3a41c1ae679e542062d6af0fcd368ed2132a2f48d28e51cab1174d28697cd700e58bc0372983428236a9c41ce8c07983a4fb89da34fa713b3988a164651dd17da725a51e676e44369d1887aa9e8d656d5369e7f2e6be9a13001733c2a03f7231f98092550be76b5fb040d75c8cc1167b4b11437186925ae011a2a587ac2289ae999a98cadf290d50a4a7a5735cfb8ad49adbb7cf92f09628356b3691579613ff5944fe16d6c67e9031aa7d5db35c1cba5e2805f85f508a14e98e26fc8f843a6d3d98cb5965029eb6e7dd2f92ef373d53edefaa40c1062599836042edbf780295c0eaae5b26e01081a28de1bfd2beca11132955d2e926f41e66859200c6126089885866b221af3397063ce14771414fc7524f41ab8aef2fda534efdf39c175b1f24276610b47a5328a8d4a6f160dffa1dd0de37933d7050dbf83b9b35797a9953b0fa148bc2aa0456ec0d901d5b7cf850f6db9e0f6e6d613293d47461581f401cb9598db9fb3bbd9143c80968a4b6744327a45d1c2d6f0a62dfd63311423a9627cf51f91e58be31be5495d7dc9760ea790dc619919bee8b6970efd778e16e79312c7d3f1fc3924bcf209d1f822996dd06a2dd6d84552d470c7d3580dbf6cc7e4965ae36a038a36e6b18326238db8b52494022a07f5aea0545bc3c16026170731ab1a30138357642eacad920335a0a5bd73cd5222b5f974d045a6351bf6d21bf1629a33442930fb0e4180f8022915f925add70b53ec85680eadb2c6a915f671bd9e27cf423c0f53bebefdbf274c6d9147ba9e3ab138b9af74480e6fa6c7e0a664b0b7cdd654ac4ee7ce7ccb0ae056049152618b575add5083d8247fee1eaa0c1e3f7539197aa3f943c715cad0a06ecae6711be0714941657734d8423f4f97570ccd9032d0abcd6beed3520e5b05d0d9316d69d4c4119b0badb9f7d0ef1f142315ad7fc7ea0179015e52795211e47d9adcdf40fb461c12a0ea4959bfc3cbffa8f49ded55dc297c645034c966e43764cc10081d2fbdb50f70374bdaafb3f2c303ac1b36c8e4ed4b89501ac82fbf91167c1358fbfd78d22386cab6d956f050f56440338695729c8b1efaa4c407d5f55f5e6f31300e0242c0d4111076def5e939faf0f8ad0075397577134b615c18098abccee66729edb4d9a8141bcd8dd245a503321781ef129d674039ee7f206dbbbeba35d3ff3d94a2b3ab62dd0702fffded27d5451b39889807b208c6101a22110418aa615ea7b223693e3a493c267cbda4e927b791a39ff48028a04dafc5b4d8e26bf380e8dc930c27a681db9dfce2707ff505f475ee12544e77eb276a9db702045573070c301daca5e5535a1a051e2b4db6ac5e7026fec06770edcb65c149f437c2d6675f31b66e02332fe86ad3cf7bdfd6389a907a0a9dfd0f850ebd0bd9435a06d27c7adf77b325d56bec6986ee6c3bcd2947fbc557f4b7a67b3b112187c7c5f6386accbc138458a53bc71d4cc0182955db9ab1ed04ee33b71ce75f644f39d1e7a6943ae3bc6c0e48e638ad75af93663b56acc7fca8d35721b64a6f9cee6aa7a41e593a6b8f0f7b534af01b8e9681502a8978e6f7066fe6899ae785eb0c1971f249a46e75c08686a77cee713ac7883f66e66246d4292f940bd6ddee780ea3622996ba4f6fa5536fed0f0d5f50b06f66cf1e30bf7efbb8c1b25ae5045e658904e0a1b777299b482fd1f37b09d3d43566862c230b31f80525c4021f20fa04c7554b7365890e757ea70675d24b346e3240c2844acae222da2714c9645a3ee1e7cf3d81e194ed715e7daca146891316324f921a71ea161064238433e9f869c27f5fa261163752e002ea5c40b8646c4c3a3259558fd93497f2ebac4b7559b9f23e4c4017ab5d98a31c91b69c0ef2d89868a1c0b99c396ccea71d62c148fc087f5926e6de6a6182a2f54628e082b97f2f55b5e7c117cfb3863b3d407d9ea11150ff9db614575c2e45162194216350abd3c6e064980306c344086716d33a7e9ce69ad6984c737605b161381eb49de91749ba4ca01abd96d44d6c1a84fecdfb753532d19c357fd07daacd3c389d0fabe25e7ca1702d282a70bfd0c4fce2e4c99ffe176448f60766d5d15eff4a0f805c19d01494bf913a241d5fa54dffc60f609780edb7542d93816da5b679015ad527d2db7f78005c4acd1dbea7576f8fae4a348509f1f7f011b292ea6ff9bb36940df99f3b5603f2e54b19bf643145b04f2ff1af707a98b78ef73d524946065e560c6115dd4970397fbf37456ec218b55e2cdfbbe055b412421e47ce3a8f7b2bcf27acc5bf0cf7b11e244d34b4896a497a0519f9e7ab464a71e85841c71dd67fe02776a8c8f67ef2d55d7d56ac7d29453b6be0af12c97fb6b262fb36fe31bc1000a8c4db8a27a29736a2bb4cdc77eeeb2b862f51708db7cf0e3414ee665d1791f4fec9a93c4bbf8ef572659637913145179e40ec6863b34f86a45bf766c767f1eeaf59dcd0a73df6ed5d8861b0966515f5bfcd41ef452e9c8ffa3cd8fde06a038571ca06cecbcb15c3d98d0ba4e8c341a5c0150e48491222431724555c4241ffcf541612d225649d7e46dd154b9b4ba34f552a8592865b64d7cf4d76184d74d0ce7ef4e807e73ada6fe7a110d61c4532a2d93ea96db5aa23130c54b2b62dccf0160a59b9039854edcdbc8a9219e46ea604bc94fc3041d8ccb4f3dd94ff427043986b8815d9b3bd68a3ceff06e3bb17b830ac5dfa7dc52f1173cfb7b0d9b396ea5fa26f45bbf3d33d140734ed3129420046c734eb38e6c44a572e4e77030e73935712572581ac871797d148d36964101686fae479114db426bd5584c246ead16647f9d2c14fade3c718dd507c8cef236fcf67cf6b86e30e24acd28cd6e556b2346afc43e1a45f54af4be28dc5b29d0db64be9782727a3a90cb4993ed770f5babd894722eb8a975bfceaa4e4ada35f98671ee0d86540d6faea4a8e088d0bdada0ac9d0db0ff3c8ec7d8763692026ed82c7b6996f5f5e27922a707b1c0a028c561b1c2ed33667d344296bf6261b261122187e26a2cd40184d1e6b30792faa1cd13a426a4ec61c6ec222382802a3ae0d64f342c958d5a53a3021263484d6f89cd243fae076c46f7a0f313aad1f7e0a182c4a67ffc711d16b13e7c0ec15bb6b6042c20a4d1f908b0f6b154fce79dcf5c6dc3a77a36d80cc51232dd112d1b09009f61d22e99c8d1664bc8a6d9c39a0e4cffe0b733939cc7bd3e7d3f2b3ecadd0baddb7d5b8b3e91101248fcf800231c077b494663e09df3b1d2cd18b7f38079e358aaa55ee2c08aa5a09349dba3f6e463e6c407777047acfa64e80ee97e521f39f2f4a85fea8bf80bda800da81074f17bc868053c6f8c4d8a75bcadec3ab69de3c8d65beadbc98c2eceba784e4c9350569eee9c2fda477f8d905a010d20aa64f527cf34f9ab396ceb38a00782e17eb220be51c7accc4a8bd6634eb342770d5653268cc631c8aaa81de0ab31c1a4bad46802a92dfc873d8a3a8f56d123803077957d9496a1e9f2f1df3d247307a430018902475c6b409553d4f41ac46ede6b0a1fbc426f5786f5f732c29c543e8d85b1fae0e14265a7744aa729c2182bd8623e4ce96531d07ee78487d37fa2a6c32ff2c9f66c0217b70494b797e22a592f33b8b8e47ecc2eafdfae7ff8a0a156902a5ec8cfcf75c26ba1ae5c9fb290c1b7099356b7af5e34d678e50ff7e522cb0fabbadafac0973a0f3ad8e933fe662cb4a6c5b63c4130e9b0d2fbc5241338c61697d9ff9415dec87fc5d99b54d54385acf0acbda7015fbacf75ba55d1c14be459ebc4aa790f58a5b21ed0f82394427b079eb1452cd7ce2ae117b718f3c106878af9ad9329ab8a4d4dbba5cff2ac24e087af99cb00fbd63bf12f31e589fcd7d85eb0142e47593992bb2d1f5ac588c63001cc89af567c97c0dda83c73ce3001a7d55ed9ffc7c14bdc62b7ba29b8ab07277b4ce020243abd4739e898109af8d1c751a357e361abc910342c199542879e55bf57a725dc980bb0f504aa5a4240a5e127327d01220247be531f36436fbd72e174d3fdfa2ced6787e826e84f75af038bdf8de72d1fde88ca8d67b0f994aff4dc11b4c5e8ba1dac51e13cafeb9e2b26b880aaac5c3be304650e34c2268ac81e8af0f675db29e3d3e116267360f26d1a18ff7369a3f1c986de267c44a8e321dd050b817d1cc37e9ba7295e411cab82b88ca4be4b7c101f23a17231b5bbac974e1031af649b0d118171c8f25ae8f1687c5cde6565688705da9838642d262401090b5b98002984c693dae930822de7226e9f803497fe98d846651ea14358a7ad916234e8339716e30dc39e9b90d0fbd2277f6716eb4343a8c032386533a886e44fd4d9cba593c41cc42056af2cfdfe672f18e59350ba905f451234f2d5c3de18ace7c5e450dc64f9f9840f7dc32e92c2d7ef02e01599ca28f617f042e668104bf4b8058bf67df34bb315a342b95d7b0fcea52e44b77f27371984ec0dd3ad1724dd7287b6dcbcd671db573652b6a6aabdb13883f5b806bcba3e8ff985f4d27a4518c6db254a54e76a01ce560ddd2c9ec5bf2c25f9891c54806d916560401bc8ec84304dcf5ab0bce999b4db606bf5da01b590e80dad07e0346fb3708cd43527c816a63250d75c4066b7c28db15c2512e7b29cca39360af1c3c001da386f976b7d1600001ac3f8d328a92bcce399ce070d0d39c3ba46361ae45e896cd913fab309adc615690475692b3b081eaf3ac207c4a8ea28152597575a232430289be86de4e587edaa952a594ee6559a6d6b603341ad07e22e8dc73ca6b640a02337d8e1ae00b58fc823b9026c6c0cbd6326edb0978311e1cf6dc19118030b320858b2ea52812a5ac26d10a38f39cd39948ba369d9ef066efd4e9938abc2d1c523d4c38ac925d1bfb4946aab4efbffe0a5bb2e91be2727cc5256267b29afc6a4d26af1e95eea1a2a3a2cc1e8304a828803d77ca21c2783c655542c599e57697e03cd7943e853853b61c0fb82b91711e3bf307b08561b377144c9da4342c366ab99111b9ff25664878bdbef54f8d7076d832bcdfffba00cb6bb2f20f655d6bd89d4de4a1938c64dadbb4ffd844c1eb897be79c9a971ee80c4335f9a731a6a847eb825bc65c08d2308da4f731ac657641b8d0dda57319e67743b32ea05502c90c048b1a7eee434f232504d1bc53f9f888a1ab33ec342313d355b9018c323d8ffdb6629879696d930da4ac9655ae0e220fd60b35a3c2fa9f7ac166819664967a11a30a37da1960be82f9fefc89ef71a4db4ba3aa21e399e8f097d8fc21c4086aa75847870015fd743e7ada1c91b407df42d5917eecb1789492831c32234308c8739561054ea4a23d3aea014fc94452831d57b2859c9c2077b570058173e9d867f096a618041452fb703ba72566b9eab4e6b2a306264905f77c44abd2c1bad94a348da978bdb412eeb084e4223aaaf051e746a3769c2167c9e71eddccb2539eeaff1b39e51363abaf25b279737dc97e4b185066b92f5d548f885d44a3533c32922d8d38d10533e02053a6feaa113b323a7867ceabca4e4d57c168eea5611071702606f4dc68f293ab6527ec25289539d8f29afcacd54e333cea020fd15d93d8b3399f80821a7c1cca92200967a0b8cc476f72936a685d515657a4c75fb391efa2f6c1b5190ad5b1b28b0f5f1f20e48b67a27a66dcf26ac766fd38af481efdd9d5e2c3b90be25916babe45b24f3b0b129bcde753f62363e5e1d355ff0b17e5333f3408dacfc731bc4f63bf9494533dd0221cfed47c0bf3a6004decbfe15f2c911f91e88358b36bab841425cd235804c9d75b9015658a51c05e2e5b8e5bd347a7e85161367137e51d277ab14bfc6758224e69520fb1ad95d76ed0d140ee1443cbbeb7fd61962934c890c5d2dc75da3d9c8c90b15dff619480f83c027792febcbbf0bf30a6a699a0a1610ba96905a9022d026958dbb3d511c286368fc2fcb639ea12e1e54d821dedd3ecb5a9de671ca4df0d5957f57f0344f54c9eb35030c9782de9196f7b201b7783c9442902c3ca8c5a37c8cc81a1e128ec27519e90cf8a6b596e6983896dfd5d5dcf7d4d16adab46e07359df7cb0ad9f9e05e854e34f58d9b5b1313b88235caee35b42886b763e7e9c8e69e37b1c5767dce1417d8cc0f173ffea93118fef203f0830c672650c8108d0ad4e353a87b8f42a070f4a8b270de4d88f190cd639da4c3c11e371b17056224148e95d473e928513aab5cc435807e39313aa50825d6d7db9c72ad0d60ac7e203ce891448c1a39343c8a858bc0713fc9c76287eb75db25b87cfad9d46563150b974e874c04d90a1271fae1f9026b2f8d0c6ea16e3c6f33891fbe6795dfd8306e14c7420f87c6aaa922bcb8d52937cdca310e1d443ac290a013a6fceb8e6ff50810fa4a2c4e0bf7a2d58845ca9b9e698b7c64379650f62d74d141df348ec76c13b59c56c31a74813ef17456d3e9a4620a3ad1fb66cc338850e69733ecf1bc6c9ff047520aa0f3920aae7a554673b9552431cb1ae1d02d62489fe372f9e8b0aa3d58a8972427350878b805d05dddb92bfe4a4846cb0465f540f1edbd57dd6a5a87afceffce742fe57f3b57267caa50dc1b139549efe8f3666fce51a90bfe0842a67e797e628bab304838607d34fe1e7626feef382fb291bac35a8afd3730849af833c9e5a7c981fbb04ca574154af36d46d89b2af558d47504f4dc5dfb94a44b0db877c80c067a74781b94b0244b0afd5fc615db21833263f0372cf3730883a1c905aa875fce32dcedae3f2ad1f3500136352080d46e4aeb7201a6b6a55d0931ad8d482c2c94abb94a83ef47e0517e256a5dc522e9078c3bef79cfcf2850bcd1d0aad6ac5ad9d1513acbc8391b8d58636dd3ad01195d8e5684a73ee428c00b3c2a1c9a84cbd40687ce90104efd00d77b4c31a005be6566682ed90e45637ed269884cd8d00c4afb0105d0bec28b2906fc6a0e767e2bc4d677be25f4984ed083fd1f3a80079937fe1a48ebceff84cc9b7e17a3f14df80bf7da6ecf2287231fc13b8306c7949727c4564b327bdd20f24b810a5adb55826d5a944ca1ccce8824abdc62f3bbb3085acecdf512703c00bf35740d3a8f87cc33fbd27f7ba592e44b4869acef3d7e0144e39a0f45e077c77e931431ede0685438931e5ff58bdf7e3bcc88a3f3141c0549cba701dcb7fec3a776606b249a155744df1a01d6f814415acc794114e1e2db21a134de9eaa0795b5bdd6fc5222f19979b2d9a2d86c4bed69dbb7d29e45cba30e61087a63f3151bb28178c32e58c9422ab8505b08fba7d5eb38e5c00655bd9081badc84be09b398009fdfdfc1b8bd0a9ab608f29c16492270047e775bc314328f0b6fd714c6c3fadfd21b8c15116b4f08e2dff2095c71318298ed0c152d11e91cebff8e40c5823b804cda3872bddecf508b8d7df813fc472e34057662c0e052fb53cb22f7f0972f21cb52a8ef5d69e7465b9eec95401f4113b422a0673988344c0e140044fa52926ebbbb58e35ffbfe3c6adf49eeed3efd0343445d360d64803074e22343a8f99a8f6d3dbabcc68b2b40bc57ba4c5f2ed6416b0960076e8b9c5bf2836b7cf0bf536837895dd7660ad65d2967f36288a29535518e3093a69720913c081785140e7e69d1e10ae1232644b896d19bdb6e76e6fc2c318d3c7b82e03e8d91a9e371ccfec3812604177ee72df1153bb42342296ca9a5109169656a17ff5f87773f1054de9ce5e6daf4e81385e147278289ded4ddea56888488bb85482ba583135e2c894c5ecc195d6037cad6de98e6c07bddab355332f96e5d7b3e8b3fd007dc7dca3c8bcbd0eb4b6b1f553e5f0f2bfc51da3f271e9be47d1a87f7145b8b6fbbcf379832ff6c43e275720f9eb13ae33caf5716bb4327603e16439e94c6ded6602d650d41e6de76568728a8b4a1cc627e1837336b81dd31acd480b4e606903b697556b65d17319a7d0142c315d417a1d4a8a3e71cbb6c2e816a507a0e78baf492e1fc3db5167b489d1921a0f166fb9dcb1c8aeab96f13d7ce3b5eccdc21e7212a087d2606eed34a95ee8bd6fa1b86a7d6e84b85cdb1d6379309b7f7c0e1bec8f895621388eb98df8d277247d4da09edfdc15852033654b671dc4b93efb612468e1f1627848503dc220f971a9629cf4486cd9c8e4b50998e606aae3f7ac1afefccae08c1df0d515ca661d164d7b97a7459059fcbbc180ea0e826ae856956ca0be03d92aae3c246638453037c19d60273c7f8eb4dc218b22bd7d405a5bf4e44f5f737093e793f9a3b569604905842256722a2d56e4afb62b7fb349433a7f8346c2f2a802effdf68e1a05ce681050543f13ed689c452b127436e0fc15b6c6f5c9fb25d461404f769fd1240d2d3f46ed805cea8eaaa0f3ab77a8415a7428fc4c78bb18f62afa7e130196d309b24c3801766a4a6c968a80ebb90f3331a3b58a813161277d4b42879e6951ce9cfdcdc68a35ef723a6c033768272966775a376672d28e62f948b3cd7fdb3b4dca7e95850e934de4736c287920696e8c4daffa807ab39bda3e9ee8a9a60c9ad565915851dd41ff9f45d8b89920c480f3089a9dda5cef792ea3839e42069bbbcfe6f53125581f75ebe53f688d08524053af60fc0f9ab45b3031a947b49fa785d7d323ea1aaaa925aeb10f6f35a1f95b372775f1681e57e2ed284178270e7c392a2df99eb68fd86941245045f82692255aad766e9db7cb8c12a47397a71abc3220304ac352a9f590d3769574799da01606483c34b7d31534f23abd699b82a690dadf1892a6d178540b20ea17238c478bdc24e94f520b69ec2402b3e3457acf01e1af09a131172f0b0cf355982a5c0925243dc35d008274b6aed02a1ffe45c75137f9b1a4a24b490e599a4504d7760d3d3a80159686b59adcac30153edc9de11ae2700effa2e24ca087f7b2359a777b2d58c424461dfb601abae32c87359f5695ddf19bcf3fbcd1246d0cf8f878ed7273dfa21a716c3baafdd182f3b6402060ffc3af1475b448bc98d7814554dd52bc1c35e4a8a23c2842f70609a4cd65adaafe69c436359587aac70308e98a41c060065d9df74711b8662e8cefbf80d162a5a5693880e087269971639547d54eed91f63cfaa06ff8e84aaf52229e29e37e1467a7ac39896aaad3235e8b759634d8369e641ac69401cde5f3562990415a4e1dec1958f99ecad02562db949b14155b433c2ea2820449b6f13a4991892a30edd5f177eaa678ff4434db1667d0f05ab60db77480f4ab7745ecc1c9371b4bb8f96ba570d7c4cf1f3ec8456fef1ac7967e08eb670a9d16d079479f6133e7ccaf68ad907546c512fee5268c2fe0d78e1ba30e9d2b3ce6c40648dba96366c40b392c94586eb1553438f48a7aac6d1bc23f72cfefd769ea48c9604a8545f5d6e9e49613b01eef13c77a3ad53fa2c1d5cb065d8b6275de5ed5dc2927288c33f028ee2945e099266ffd48e9265b178b365279473e4640369a2405daeee7a4d91adad8fb81d7cbf2735956351dd6672bf1323dfc6b4c5575ec71a344b635ff4e7580082a436b145df39b7597061f919a2fc68b3daba3bbd1b5c84323c01060def0bc10fd73c7d0fa3212ead60b37b8cdcc8ede47d6c4ed001cb420dc84e0f7e5ef26c3ff9932c1d9a232717fa1310e75455090ca3c6d9301ce'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const { spawn } = require('child_process');
|
|
38
|
-
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
const args = process.argv.slice(2);
|
|
41
|
-
|
|
42
|
-
// Create a temporary file for the decrypted script
|
|
43
|
-
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
|
-
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
|
-
|
|
46
|
-
// Execute the decrypted script with arguments using spawn
|
|
47
|
-
const child = spawn(tmpScript, args, {
|
|
48
|
-
stdio: 'inherit',
|
|
49
|
-
env: process.env
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
child.on('exit', (code) => {
|
|
53
|
-
// Clean up temp file
|
|
54
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
55
|
-
process.exit(code || 0);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
child.on('error', (error) => {
|
|
59
|
-
// Clean up temp file on error
|
|
60
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
61
|
-
console.error('Error executing script:', error);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
});
|
|
64
|
-
"
|