60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506142a480620001336000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c806370a0823111610191578063a22cb465116100e3578063ca15c87311610097578063e8a3d48511610071578063e8a3d485146106a6578063e985e9c5146106ae578063f2fde38b146106f857600080fd5b8063ca15c87314610659578063d53913931461066c578063d547741f1461069357600080fd5b8063b88d4fde116100c8578063b88d4fde14610620578063c042314514610633578063c87b56dd1461064657600080fd5b8063a22cb465146105fa578063a70128161461060d57600080fd5b80639010d07c1161014557806395d89b411161011f57806395d89b41146105d757806398dd69c8146105df578063a217fddf146105f257600080fd5b80639010d07c1461056b57806391d148541461057e578063938e3d7b146105c457600080fd5b806375ceb3411161017657806375ceb34114610527578063885e7a081461053a5780638da5cb5b1461054d57600080fd5b806370a082311461050c578063715018a61461051f57600080fd5b806336568abe1161024a578063439aed34116101fe5780636352211e116101d85780636352211e146104de57806369e2f0fb146104f15780636c0360eb1461050457600080fd5b8063439aed34146104a55780634f6ccce7146104b857806355f804b3146104cb57600080fd5b806340c10f191161022f57806340c10f191461046c57806342842e0e1461047f57806342966c681461049257600080fd5b806336568abe146104465780633dd1eb611461045957600080fd5b806323b872dd116102ac5780632f2ff15d116102865780632f2ff15d1461040b5780632f745c591461041e57806331ae450b1461043157600080fd5b806323b872dd14610396578063248a9ca3146103a95780632a55205a146103cc57600080fd5b8063081812fc116102dd578063081812fc14610336578063095ea7b31461036e57806318160ddd1461038357600080fd5b806301ffc9a7146102f957806306fdde0314610321575b600080fd5b61030c6103073660046136dd565b61070b565b60405190151581526020015b60405180910390f35b61032961073a565b6040516103189190613768565b61034961034436600461377b565b6107cd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610318565b61038161037c3660046137bd565b610802565b005b610193545b604051908152602001610318565b6103816103a43660046137e7565b610993565b6103886103b736600461377b565b60009081526097602052604090206001015490565b6103df6103da366004613823565b610a35565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610318565b610381610419366004613845565b610b2c565b61038861042c3660046137bd565b610b51565b610439610c21565b6040516103189190613871565b610381610454366004613845565b610cdd565b6103816104673660046138cb565b610d90565b61038161047a3660046137bd565b610dc5565b61038161048d3660046137e7565b610df9565b6103816104a036600461377b565b610e14565b6103816104b3366004613902565b610eb5565b6103886104c636600461377b565b610ed1565b6103816104d9366004613a52565b610f91565b6103496104ec36600461377b565b610fa9565b6103816104ff3660046138cb565b611036565b61032961106b565b61038861051a3660046138cb565b6110fa565b6103816111c9565b610381610535366004613b07565b6111dd565b610381610548366004613b55565b611248565b60335473ffffffffffffffffffffffffffffffffffffffff16610349565b610349610579366004613823565b61125d565b61030c61058c366004613845565b600091825260976020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103816105d2366004613a52565b61127c565b610329611294565b6103816105ed366004613b7f565b6112a4565b610388600081565b610381610608366004613c5e565b611470565b61038161061b366004613c9a565b61147b565b61038161062e366004613d2f565b6114ce565b610381610641366004613dab565b611570565b61032961065436600461377b565b6115b2565b61038861066736600461377b565b611618565b6103887f4d494e5445525f524f4c4500000000000000000000000000000000000000000081565b6103816106a1366004613845565b61162f565b610329611654565b61030c6106bc366004613e09565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526101326020908152604080832093909416825291909152205460ff1690565b6103816107063660046138cb565b611662565b600061071682611716565b806107255750610725826117b8565b8061073457506107348261180e565b92915050565b606061012d805461074a90613e33565b80601f016020809104026020016040519081016040528092919081815260200182805461077690613e33565b80156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b60006107d882611819565b506000908152610131602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061080d82610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806108f857506108f881336106bc565b610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108c6565b61098e83836118a5565b505050565b61099e335b82611946565b610a2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108c6565b61098e838383611a07565b600082815260fc6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16928201929092528291610af057506040805180820190915260fb5473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090610b14906bffffffffffffffffffffffff1687613eb5565b610b1e9190613ecc565b915196919550909350505050565b600082815260976020526040902060010154610b4781611d12565b61098e8383611d1c565b6000610b5c836110fa565b8210610bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016108c6565b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815261019160209081526040808320938352929052205490565b60606000610c2e81611618565b905060008167ffffffffffffffff811115610c4b57610c4b61393e565b604051908082528060200260200182016040528015610c74578160200160208202803683370190505b50905060005b82811015610cd657610c8d60008261125d565b828281518110610c9f57610c9f613f07565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280610cce81613f36565b915050610c7a565b5092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610d82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108c6565b610d8c8282611d3e565b5050565b6000610d9b81611d12565b610d8c7f4d494e5445525f524f4c4500000000000000000000000000000000000000000083610b2c565b7f4d494e5445525f524f4c45000000000000000000000000000000000000000000610def81611d12565b61098e8383611d60565b61098e838383604051806020016040528060008152506114ce565b610e1d33610998565b610ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108c6565b610eb281611f97565b50565b6000610ec081611d12565b610ecb848484611fa0565b50505050565b6000610edd6101935490565b8210610f6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016108c6565b6101938281548110610f7f57610f7f613f07565b90600052602060002001549050919050565b6000610f9c81611d12565b6101f661098e8382613fb4565b600081815261012f602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108c6565b600061104181611d12565b610d8c7f4d494e5445525f524f4c450000000000000000000000000000000000000000008361162f565b6101f6805461107990613e33565b80601f01602080910402602001604051908101604052809291908181526020018280546110a590613e33565b80156110f25780601f106110c7576101008083540402835291602001916110f2565b820191906000526020600020905b8154815290600101906020018083116110d557829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff821661119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016108c6565b5073ffffffffffffffffffffffffffffffffffffffff166000908152610130602052604090205490565b6111d161212a565b6111db60006121ab565b565b7f4d494e5445525f524f4c4500000000000000000000000000000000000000000061120781611d12565b60005b8251811015610ecb576112368484838151811061122957611229613f07565b6020026020010151611d60565b8061124081613f36565b91505061120a565b600061125381611d12565b61098e8383612222565b600082815260c960205260408120611275908361239b565b9392505050565b600061128781611d12565b6101f561098e8382613fb4565b606061012e805461074a90613e33565b600054610100900460ff16158080156112c45750600054600160ff909116105b806112de5750303b1580156112de575060005460ff166001145b61136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108c6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156113c857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6113d287876123a7565b6113dd600089611d1c565b6113e78383612222565b6101f66113f48682613fb4565b506101f56114028582613fb4565b50801561146657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b610d8c338383612448565b600061148681611d12565b60005b848110156114c6576114b48686838181106114a6576114a6613f07565b905060200201358585611fa0565b806114be81613f36565b915050611489565b505050505050565b6114d83383611946565b611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108c6565b610ecb84848484612576565b60005b8151811015610ecb576115a0848484848151811061159357611593613f07565b6020026020010151610df9565b806115aa81613f36565b915050611573565b60606115bd82611819565b60006115c7612619565b905060008151116115e75760405180602001604052806000815250611275565b806115f184612629565b6040516020016116029291906140ce565b6040516020818303038152906040529392505050565b600081815260c960205260408120610734906126e7565b60008281526097602052604090206001015461164a81611d12565b61098e8383611d3e565b6101f5805461107990613e33565b61166a61212a565b73ffffffffffffffffffffffffffffffffffffffff811661170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108c6565b610eb2816121ab565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806117a957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806107345750610734826126f1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610734575061073482611716565b6000610734826117b8565b600081815261012f602052604090205473ffffffffffffffffffffffffffffffffffffffff16610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108c6565b60008181526101316020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061190082610fa9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061195283610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119c1575073ffffffffffffffffffffffffffffffffffffffff8082166000908152610132602090815260408083209388168352929052205460ff165b806119ff57508373ffffffffffffffffffffffffffffffffffffffff166119e7846107cd565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611a2782610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108c6565b73ffffffffffffffffffffffffffffffffffffffff8216611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108c6565b611b798383836001612747565b8273ffffffffffffffffffffffffffffffffffffffff16611b9982610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108c6565b60008181526101316020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff878116808652610130855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610eb28133612753565b611d26828261280d565b600082815260c96020526040902061098e9082612901565b611d488282612923565b600082815260c96020526040902061098e90826129de565b73ffffffffffffffffffffffffffffffffffffffff8216611ddd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108c6565b600081815261012f602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108c6565b611e78600083836001612747565b600081815261012f602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108c6565b73ffffffffffffffffffffffffffffffffffffffff82166000818152610130602090815260408083208054600101905584835261012f90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610eb281612a00565b6127106bffffffffffffffffffffffff82161115612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016108c6565b73ffffffffffffffffffffffffffffffffffffffff82166120bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108c6565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff93841681526bffffffffffffffffffffffff9283166020808301918252600096875260fc9052919094209351905190911674010000000000000000000000000000000000000000029116179055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146111db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108c6565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106bffffffffffffffffffffffff821611156122c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016108c6565b73ffffffffffffffffffffffffffffffffffffffff821661233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108c6565b6040805180820190915273ffffffffffffffffffffffffffffffffffffffff9092168083526bffffffffffffffffffffffff9091166020909201829052740100000000000000000000000000000000000000009091021760fb55565b60006112758383612a1a565b600054610100900460ff1661243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c6565b610d8c8282612a44565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108c6565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152610132602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612581848484611a07565b61258d84848484612af6565b610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108c6565b60606101f6805461074a90613e33565b6060600061263683612ce9565b600101905060008167ffffffffffffffff8111156126565761265661393e565b6040519080825280601f01601f191660200182016040528015612680576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461268a57509392505050565b6000610734825490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610734575061073482612dcb565b610ecb84848484612e21565b600082815260976020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610d8c5761279381612fc7565b61279e836020612fe6565b6040516020016127af9291906140fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108c691600401613768565b600082815260976020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610d8c57600082815260976020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556128a33390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006112758373ffffffffffffffffffffffffffffffffffffffff8416613229565b600082815260976020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610d8c57600082815260976020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006112758373ffffffffffffffffffffffffffffffffffffffff8416613278565b612a098161336b565b600090815260fc6020526040812055565b6000826000018281548110612a3157612a31613f07565b9060005260206000200154905092915050565b600054610100900460ff16612adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c6565b61012d612ae88382613fb4565b5061012e61098e8282613fb4565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612cde576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612b6d90339089908890889060040161417e565b6020604051808303816000875af1925050508015612bc6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612bc3918101906141c7565b60015b612c93573d808015612bf4576040519150601f19603f3d011682016040523d82523d6000602084013e612bf9565b606091505b508051600003612c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108c6565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506119ff565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d32577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612d5e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612d7c57662386f26fc10000830492506010015b6305f5e1008310612d94576305f5e100830492506008015b6127108310612da857612710830492506004015b60648310612dba576064830492506002015b600a83106107345760010192915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610734575061073482613454565b6001811115612eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f72746564000000000000000000000060648201526084016108c6565b8173ffffffffffffffffffffffffffffffffffffffff8516612f1d57612f18816101938054600083815261019460205260408120829055600182018355919091527ffc8af01f449989052b52093a58fc9f42d0b11f0c6dd5dca0463dab62346ccc680155565b612f5a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612f5a57612f5a85826134eb565b73ffffffffffffffffffffffffffffffffffffffff8416612f8357612f7e816135a7565b612fc0565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612fc057612fc0848261365c565b5050505050565b606061073473ffffffffffffffffffffffffffffffffffffffff831660145b60606000612ff5836002613eb5565b6130009060026141e4565b67ffffffffffffffff8111156130185761301861393e565b6040519080825280601f01601f191660200182016040528015613042576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061307957613079613f07565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106130dc576130dc613f07565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613118846002613eb5565b6131239060016141e4565b90505b60018111156131c0577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061316457613164613f07565b1a60f81b82828151811061317a5761317a613f07565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936131b9816141f7565b9050613126565b508315611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108c6565b600081815260018301602052604081205461327057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610734565b506000610734565b6000818152600183016020526040812054801561336157600061329c60018361422c565b85549091506000906132b09060019061422c565b90508181146133155760008660000182815481106132d0576132d0613f07565b90600052602060002001549050808760000184815481106132f3576132f3613f07565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806133265761332661423f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610734565b6000915050610734565b600061337682610fa9565b9050613386816000846001612747565b61338f82610fa9565b60008381526101316020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8516808552610130845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061073457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610734565b600060016134f8846110fa565b613502919061422c565b600083815261019260205260409020549091508082146135655773ffffffffffffffffffffffffffffffffffffffff8416600090815261019160209081526040808320858452825280832054848452818420819055835261019290915290208190555b5060009182526101926020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff909416835261019181528383209183525290812055565b610193546000906135ba9060019061422c565b6000838152610194602052604081205461019380549394509092849081106135e4576135e4613f07565b9060005260206000200154905080610193838154811061360657613606613f07565b600091825260208083209091019290925582815261019490915260408082208490558582528120556101938054806136405761364061423f565b6001900381819060005260206000200160009055905550505050565b6000613667836110fa565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526101916020908152604080832086845282528083208590559382526101929052919091209190915550565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610eb257600080fd5b6000602082840312156136ef57600080fd5b8135611275816136af565b60005b838110156137155781810151838201526020016136fd565b50506000910152565b600081518084526137368160208601602086016136fa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611275602083018461371e565b60006020828403121561378d57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146137b857600080fd5b919050565b600080604083850312156137d057600080fd5b6137d983613794565b946020939093013593505050565b6000806000606084860312156137fc57600080fd5b61380584613794565b925061381360208501613794565b9150604084013590509250925092565b6000806040838503121561383657600080fd5b50508035926020909101359150565b6000806040838503121561385857600080fd5b8235915061386860208401613794565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156138bf57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161388d565b50909695505050505050565b6000602082840312156138dd57600080fd5b61127582613794565b80356bffffffffffffffffffffffff811681146137b857600080fd5b60008060006060848603121561391757600080fd5b8335925061392760208501613794565b9150613935604085016138e6565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139b4576139b461393e565b604052919050565b600067ffffffffffffffff8311156139d6576139d661393e565b613a0760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160161396d565b9050828152838383011115613a1b57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613a4357600080fd5b611275838335602085016139bc565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b6119ff84828501613a32565b600082601f830112613a9857600080fd5b8135602067ffffffffffffffff821115613ab457613ab461393e565b8160051b613ac382820161396d565b9283528481018201928281019087851115613add57600080fd5b83870192505b84831015613afc57823582529183019190830190613ae3565b979650505050505050565b60008060408385031215613b1a57600080fd5b613b2383613794565b9150602083013567ffffffffffffffff811115613b3f57600080fd5b613b4b85828601613a87565b9150509250929050565b60008060408385031215613b6857600080fd5b613b7183613794565b9150613868602084016138e6565b600080600080600080600060e0888a031215613b9a57600080fd5b613ba388613794565b9650602088013567ffffffffffffffff80821115613bc057600080fd5b613bcc8b838c01613a32565b975060408a0135915080821115613be257600080fd5b613bee8b838c01613a32565b965060608a0135915080821115613c0457600080fd5b613c108b838c01613a32565b955060808a0135915080821115613c2657600080fd5b50613c338a828b01613a32565b935050613c4260a08901613794565b9150613c5060c089016138e6565b905092959891949750929550565b60008060408385031215613c7157600080fd5b613c7a83613794565b915060208301358015158114613c8f57600080fd5b809150509250929050565b60008060008060608587031215613cb057600080fd5b843567ffffffffffffffff80821115613cc857600080fd5b818701915087601f830112613cdc57600080fd5b813581811115613ceb57600080fd5b8860208260051b8501011115613d0057600080fd5b602092830196509450613d169187019050613794565b9150613d24604086016138e6565b905092959194509250565b60008060008060808587031215613d4557600080fd5b613d4e85613794565b9350613d5c60208601613794565b925060408501359150606085013567ffffffffffffffff811115613d7f57600080fd5b8501601f81018713613d9057600080fd5b613d9f878235602084016139bc565b91505092959194509250565b600080600060608486031215613dc057600080fd5b613dc984613794565b9250613dd760208501613794565b9150604084013567ffffffffffffffff811115613df357600080fd5b613dff86828701613a87565b9150509250925092565b60008060408385031215613e1c57600080fd5b613e2583613794565b915061386860208401613794565b600181811c90821680613e4757607f821691505b602082108103613e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761073457610734613e86565b600082613f02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f6757613f67613e86565b5060010190565b601f82111561098e57600081815260208120601f850160051c81016020861015613f955750805b601f850160051c820191505b818110156114c657828155600101613fa1565b815167ffffffffffffffff811115613fce57613fce61393e565b613fe281613fdc8454613e33565b84613f6e565b602080601f8311600181146140355760008415613fff5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556114c6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561408257888601518255948401946001909101908401614063565b50858210156140be57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600083516140e08184602088016136fa565b8351908301906140f48183602088016136fa565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516141358160178501602088016136fa565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516141728160288401602088016136fa565b01602801949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526141bd608083018461371e565b9695505050505050565b6000602082840312156141d957600080fd5b8151611275816136af565b8082018082111561073457610734613e86565b60008161420657614206613e86565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b8181038181111561073457610734613e86565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122077d8a2f260d61584440eb237b505caaf2525db7d1a33cf1b14ec1253b6ef51c964736f6c63430008130033