60806040523480156200001157600080fd5b506040516200542c3803806200542c83398181016040528101906200003791906200031e565b828281600090816200004a919062000622565b5080600190816200005c919062000622565b5050506000600660006101000a81548160ff0219169083151502179055506200009a6200008e620000bd60201b60201c565b620000c560201b60201c565b6001600a8190555080600c9081620000b3919062000622565b5050505062000709565b600033905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001f482620001a9565b810181811067ffffffffffffffff82111715620002165762000215620001ba565b5b80604052505050565b60006200022b6200018b565b9050620002398282620001e9565b919050565b600067ffffffffffffffff8211156200025c576200025b620001ba565b5b6200026782620001a9565b9050602081019050919050565b60005b838110156200029457808201518184015260208101905062000277565b60008484015250505050565b6000620002b7620002b1846200023e565b6200021f565b905082815260208101848484011115620002d657620002d5620001a4565b5b620002e384828562000274565b509392505050565b600082601f8301126200030357620003026200019f565b5b815162000315848260208601620002a0565b91505092915050565b6000806000606084860312156200033a576200033962000195565b5b600084015167ffffffffffffffff8111156200035b576200035a6200019a565b5b6200036986828701620002eb565b935050602084015167ffffffffffffffff8111156200038d576200038c6200019a565b5b6200039b86828701620002eb565b925050604084015167ffffffffffffffff811115620003bf57620003be6200019a565b5b620003cd86828701620002eb565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042a57607f821691505b60208210810362000440576200043f620003e2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200046b565b620004b686836200046b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000503620004fd620004f784620004ce565b620004d8565b620004ce565b9050919050565b6000819050919050565b6200051f83620004e2565b620005376200052e826200050a565b84845462000478565b825550505050565b600090565b6200054e6200053f565b6200055b81848462000514565b505050565b5b8181101562000583576200057760008262000544565b60018101905062000561565b5050565b601f821115620005d2576200059c8162000446565b620005a7846200045b565b81016020851015620005b7578190505b620005cf620005c6856200045b565b83018262000560565b50505b505050565b600082821c905092915050565b6000620005f760001984600802620005d7565b1980831691505092915050565b6000620006128383620005e4565b9150826002028217905092915050565b6200062d82620003d7565b67ffffffffffffffff811115620006495762000648620001ba565b5b62000655825462000411565b6200066282828562000587565b600060209050601f8311600181146200069a576000841562000685578287015190505b62000691858262000604565b86555062000701565b601f198416620006aa8662000446565b60005b82811015620006d457848901518255600182019150602085019450602081019050620006ad565b86831015620006f45784890151620006f0601f891682620005e4565b8355505b6001600288020188555050505b505050505050565b614d1380620007196000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a6278421161010457806395d89b41116100a2578063bfe8ff4c11610071578063bfe8ff4c146104e0578063c87b56dd14610510578063e985e9c514610540578063f2fde38b14610570576101cf565b806395d89b411461045a578063a22cb46514610478578063a8ef986114610494578063b88d4fde146104c4576101cf565b80637d6eed44116100de5780637d6eed44146103e657806380b0b95d146104165780638456cb59146104325780638da5cb5b1461043c576101cf565b80636a6278421461039057806370a08231146103ac578063715018a6146103dc576101cf565b806332cb6b0c1161017157806342842e0e1161014b57806342842e0e1461030a57806355f804b3146103265780635c975abb146103425780636352211e14610360576101cf565b806332cb6b0c146102c65780633c9d93b8146102e45780633f4ba83a14610300576101cf565b806308f6f8ed116101ad57806308f6f8ed14610252578063095ea7b31461027057806318160ddd1461028c57806323b872dd146102aa576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e99190612f11565b61058c565b6040516101fb9190612f59565b60405180910390f35b61020c61066e565b6040516102199190613004565b60405180910390f35b61023c6004803603810190610237919061305c565b610700565b60405161024991906130ca565b60405180910390f35b61025a610785565b60405161026791906130f4565b60405180910390f35b61028a6004803603810190610285919061313b565b6107a1565b005b6102946108b8565b6040516102a191906130f4565b60405180910390f35b6102c460048036038101906102bf919061317b565b6108c9565b005b6102ce610929565b6040516102db91906130f4565b60405180910390f35b6102fe60048036038101906102f991906131ce565b61092f565b005b610308610c94565b005b610324600480360381019061031f919061317b565b610d1a565b005b610340600480360381019061033b9190613330565b610d3a565b005b61034a610dc9565b6040516103579190612f59565b60405180910390f35b61037a6004803603810190610375919061305c565b610de0565b60405161038791906130ca565b60405180910390f35b6103aa60048036038101906103a591906131ce565b610e91565b005b6103c660048036038101906103c191906131ce565b611134565b6040516103d391906130f4565b60405180910390f35b6103e46111eb565b005b61040060048036038101906103fb91906131ce565b6112a2565b60405161040d91906130f4565b60405180910390f35b610430600480360381019061042b9190613504565b61147f565b005b61043a6118c9565b005b61044461194f565b60405161045191906130ca565b60405180910390f35b610462611979565b60405161046f9190613004565b60405180910390f35b610492600480360381019061048d91906135a8565b611a0b565b005b6104ae60048036038101906104a9919061305c565b611a21565b6040516104bb9190613648565b60405180910390f35b6104de60048036038101906104d99190613704565b611b43565b005b6104fa60048036038101906104f591906131ce565b611ba5565b6040516105079190612f59565b60405180910390f35b61052a6004803603810190610525919061305c565b611c73565b6040516105379190613004565b60405180910390f35b61055a60048036038101906105559190613787565b611ca4565b6040516105679190612f59565b60405180910390f35b61058a600480360381019061058591906131ce565b611d38565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610667575061066682611e2f565b5b9050919050565b60606000805461067d906137f6565b80601f01602080910402602001604051908101604052809291908181526020018280546106a9906137f6565b80156106f65780601f106106cb576101008083540402835291602001916106f6565b820191906000526020600020905b8154815290600101906020018083116106d957829003601f168201915b5050505050905090565b600061070b82611e99565b61074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190613899565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061078f6108b8565b6103e861079c91906138e8565b905090565b60006107ac82610de0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361081c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108139061398e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661083b611f05565b73ffffffffffffffffffffffffffffffffffffffff16148061086a575061086981610864611f05565b611ca4565b5b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613a20565b60405180910390fd5b6108b38383611f0d565b505050565b60006108c4600b611fc6565b905090565b6108da6108d4611f05565b82611fd4565b610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091090613ab2565b60405180910390fd5b6109248383836120b2565b505050565b6103e881565b610937611f05565b73ffffffffffffffffffffffffffffffffffffffff1661095561194f565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290613b1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1190613b8a565b60405180910390fd5b600060098054905011610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613bf6565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060098181548110610aba57610ab9613c16565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090613cb7565b60405180910390fd5b60098181548110610b6d57610b6c613c16565b5b906000526020600020906003020160020154600754610b8c91906138e8565b600781905550600060098281548110610ba857610ba7613c16565b5b906000526020600020906003020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060098281548110610c0d57610c0c613c16565b5b906000526020600020906003020160010181905550600060098281548110610c3857610c37613c16565b5b906000526020600020906003020160020181905550600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555050565b610c9c611f05565b73ffffffffffffffffffffffffffffffffffffffff16610cba61194f565b73ffffffffffffffffffffffffffffffffffffffff1614610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790613b1e565b60405180910390fd5b610d1861230d565b565b610d3583838360405180602001604052806000815250611b43565b505050565b610d42611f05565b73ffffffffffffffffffffffffffffffffffffffff16610d6061194f565b73ffffffffffffffffffffffffffffffffffffffff1614610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613b1e565b60405180910390fd5b80600c9081610dc59190613e83565b5050565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613fc7565b60405180910390fd5b80915050919050565b6002600a5403610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90614033565b60405180910390fd5b6002600a81905550610ee6610dc9565b15610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061409f565b60405180910390fd5b600060098054905011610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6590614131565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060098181548110610fc657610fc5613c16565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90614131565b60405180910390fd5b6000611070336112a2565b116110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906141c3565b60405180910390fd5b6103e86110bd600b611fc6565b106110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614255565b60405180910390fd5b6000611109600b611fc6565b9050611115600b6123af565b61111d6123c5565b6111278382612467565b50506001600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b906142e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f3611f05565b73ffffffffffffffffffffffffffffffffffffffff1661121161194f565b73ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90613b1e565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990614379565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613b8a565b60405180910390fd5b60006009805490501161135a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135190613bf6565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600981815481106113b2576113b1613c16565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890614131565b60405180910390fd5b6009818154811061146557611464613c16565b5b906000526020600020906003020160020154915050919050565b611487611f05565b73ffffffffffffffffffffffffffffffffffffffff166114a561194f565b73ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613b1e565b60405180910390fd5b805182511461153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906143e5565b60405180910390fd5b60005b82518110156118c45760008382815181106115605761155f613c16565b5b60200260200101519050600083838151811061157f5761157e613c16565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613b8a565b60405180910390fd5b6000811161163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614477565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060098054905011156117925760008111156116dc5760006116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce906144e3565b60405180910390fd5b611791565b60096000815481106116f1576116f0613c16565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611787906144e3565b60405180910390fd5b5b5b600960405180606001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200184815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201555050600160098054905061185d91906138e8565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816007546118ae9190614503565b6007819055505050508080600101915050611542565b505050565b6118d1611f05565b73ffffffffffffffffffffffffffffffffffffffff166118ef61194f565b73ffffffffffffffffffffffffffffffffffffffff1614611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613b1e565b60405180910390fd5b61194d612485565b565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611988906137f6565b80601f01602080910402602001604051908101604052809291908181526020018280546119b4906137f6565b8015611a015780601f106119d657610100808354040283529160200191611a01565b820191906000526020600020905b8154815290600101906020018083116119e457829003601f168201915b5050505050905090565b611a1d611a16611f05565b8383612528565b5050565b611a29612e6e565b611a31611f05565b73ffffffffffffffffffffffffffffffffffffffff16611a4f61194f565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90613b1e565b60405180910390fd5b60098281548110611ab957611ab8613c16565b5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815250509050919050565b611b54611b4e611f05565b83611fd4565b611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90613ab2565b60405180910390fd5b611b9f84848484612694565b50505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008110158015611c6b575060098181548110611c0a57611c09613c16565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b915050919050565b6060611c7e826126f0565b604051602001611c8e91906145bf565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d40611f05565b73ffffffffffffffffffffffffffffffffffffffff16611d5e61194f565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613b1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90614653565b60405180910390fd5b611e2c81612797565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f8083610de0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611fdf82611e99565b61201e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612015906146e5565b60405180910390fd5b600061202983610de0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061209857508373ffffffffffffffffffffffffffffffffffffffff1661208084610700565b73ffffffffffffffffffffffffffffffffffffffff16145b806120a957506120a88185611ca4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120d282610de0565b73ffffffffffffffffffffffffffffffffffffffff1614612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e90614809565b60405180910390fd5b6121a283838361285d565b6121ad600082611f0d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121fd91906138e8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122549190614503565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612315610dc9565b612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90614875565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612398611f05565b6040516123a591906130ca565b60405180910390a1565b6001816000016000828254019250508190555050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060016009828154811061241f5761241e613c16565b5b90600052602060002090600302016002015461243b91906138e8565b6009828154811061244f5761244e613c16565b5b90600052602060002090600302016002018190555050565b6124818282604051806020016040528060008152506128b5565b5050565b61248d610dc9565b156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c49061409f565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612511611f05565b60405161251e91906130ca565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d906148e1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126879190612f59565b60405180910390a3505050565b61269f8484846120b2565b6126ab84848484612910565b6126ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e190614973565b60405180910390fd5b50505050565b60606126fb82611e99565b61273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190614a05565b60405180910390fd5b6000612744612a97565b90506000815111612764576040518060200160405280600081525061278f565b8061276e84612b29565b60405160200161277f929190614a25565b6040516020818303038152906040525b915050919050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612865610dc9565b156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c9061409f565b60405180910390fd5b6128b0838383612c89565b505050565b6128bf8383612c8e565b6128cc6000848484612910565b61290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614973565b60405180910390fd5b505050565b60006129318473ffffffffffffffffffffffffffffffffffffffff16612e5b565b15612a8a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261295a611f05565b8786866040518563ffffffff1660e01b815260040161297c9493929190614a9e565b6020604051808303816000875af19250505080156129b857506040513d601f19601f820116820180604052508101906129b59190614aff565b60015b612a3a573d80600081146129e8576040519150601f19603f3d011682016040523d82523d6000602084013e6129ed565b606091505b506000815103612a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2990614973565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a8f565b600190505b949350505050565b6060600c8054612aa6906137f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612ad2906137f6565b8015612b1f5780601f10612af457610100808354040283529160200191612b1f565b820191906000526020600020905b815481529060010190602001808311612b0257829003601f168201915b5050505050905090565b606060008203612b70576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c84565b600082905060005b60008214612ba2578080612b8b90614b2c565b915050600a82612b9b9190614ba3565b9150612b78565b60008167ffffffffffffffff811115612bbe57612bbd613205565b5b6040519080825280601f01601f191660200182016040528015612bf05781602001600182028036833780820191505090505b5090505b60008514612c7d57600182612c0991906138e8565b9150600a85612c189190614bd4565b6030612c249190614503565b60f81b818381518110612c3a57612c39613c16565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c769190614ba3565b9450612bf4565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf490614c51565b60405180910390fd5b612d0681611e99565b15612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d90614cbd565b60405180910390fd5b612d526000838361285d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da29190614503565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612eee81612eb9565b8114612ef957600080fd5b50565b600081359050612f0b81612ee5565b92915050565b600060208284031215612f2757612f26612eaf565b5b6000612f3584828501612efc565b91505092915050565b60008115159050919050565b612f5381612f3e565b82525050565b6000602082019050612f6e6000830184612f4a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fae578082015181840152602081019050612f93565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fd682612f74565b612fe08185612f7f565b9350612ff0818560208601612f90565b612ff981612fba565b840191505092915050565b6000602082019050818103600083015261301e8184612fcb565b905092915050565b6000819050919050565b61303981613026565b811461304457600080fd5b50565b60008135905061305681613030565b92915050565b60006020828403121561307257613071612eaf565b5b600061308084828501613047565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130b482613089565b9050919050565b6130c4816130a9565b82525050565b60006020820190506130df60008301846130bb565b92915050565b6130ee81613026565b82525050565b600060208201905061310960008301846130e5565b92915050565b613118816130a9565b811461312357600080fd5b50565b6000813590506131358161310f565b92915050565b6000806040838503121561315257613151612eaf565b5b600061316085828601613126565b925050602061317185828601613047565b9150509250929050565b60008060006060848603121561319457613193612eaf565b5b60006131a286828701613126565b93505060206131b386828701613126565b92505060406131c486828701613047565b9150509250925092565b6000602082840312156131e4576131e3612eaf565b5b60006131f284828501613126565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61323d82612fba565b810181811067ffffffffffffffff8211171561325c5761325b613205565b5b80604052505050565b600061326f612ea5565b905061327b8282613234565b919050565b600067ffffffffffffffff82111561329b5761329a613205565b5b6132a482612fba565b9050602081019050919050565b82818337600083830152505050565b60006132d36132ce84613280565b613265565b9050828152602081018484840111156132ef576132ee613200565b5b6132fa8482856132b1565b509392505050565b600082601f830112613317576133166131fb565b5b81356133278482602086016132c0565b91505092915050565b60006020828403121561334657613345612eaf565b5b600082013567ffffffffffffffff81111561336457613363612eb4565b5b61337084828501613302565b91505092915050565b600067ffffffffffffffff82111561339457613393613205565b5b602082029050602081019050919050565b600080fd5b60006133bd6133b884613379565b613265565b905080838252602082019050602084028301858111156133e0576133df6133a5565b5b835b8181101561340957806133f58882613126565b8452602084019350506020810190506133e2565b5050509392505050565b600082601f830112613428576134276131fb565b5b81356134388482602086016133aa565b91505092915050565b600067ffffffffffffffff82111561345c5761345b613205565b5b602082029050602081019050919050565b600061348061347b84613441565b613265565b905080838252602082019050602084028301858111156134a3576134a26133a5565b5b835b818110156134cc57806134b88882613047565b8452602084019350506020810190506134a5565b5050509392505050565b600082601f8301126134eb576134ea6131fb565b5b81356134fb84826020860161346d565b91505092915050565b6000806040838503121561351b5761351a612eaf565b5b600083013567ffffffffffffffff81111561353957613538612eb4565b5b61354585828601613413565b925050602083013567ffffffffffffffff81111561356657613565612eb4565b5b613572858286016134d6565b9150509250929050565b61358581612f3e565b811461359057600080fd5b50565b6000813590506135a28161357c565b92915050565b600080604083850312156135bf576135be612eaf565b5b60006135cd85828601613126565b92505060206135de85828601613593565b9150509250929050565b6135f1816130a9565b82525050565b61360081613026565b82525050565b60608201600082015161361c60008501826135e8565b50602082015161362f60208501826135f7565b50604082015161364260408501826135f7565b50505050565b600060608201905061365d6000830184613606565b92915050565b600067ffffffffffffffff82111561367e5761367d613205565b5b61368782612fba565b9050602081019050919050565b60006136a76136a284613663565b613265565b9050828152602081018484840111156136c3576136c2613200565b5b6136ce8482856132b1565b509392505050565b600082601f8301126136eb576136ea6131fb565b5b81356136fb848260208601613694565b91505092915050565b6000806000806080858703121561371e5761371d612eaf565b5b600061372c87828801613126565b945050602061373d87828801613126565b935050604061374e87828801613047565b925050606085013567ffffffffffffffff81111561376f5761376e612eb4565b5b61377b878288016136d6565b91505092959194509250565b6000806040838503121561379e5761379d612eaf565b5b60006137ac85828601613126565b92505060206137bd85828601613126565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380e57607f821691505b602082108103613821576138206137c7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613883602c83612f7f565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138f382613026565b91506138fe83613026565b9250828203905081811115613916576139156138b9565b5b92915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613978602183612f7f565b91506139838261391c565b604082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a0a603883612f7f565b9150613a15826139ae565b604082019050919050565b60006020820190508181036000830152613a39816139fd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613a9c603183612f7f565b9150613aa782613a40565b604082019050919050565b60006020820190508181036000830152613acb81613a8f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b08602083612f7f565b9150613b1382613ad2565b602082019050919050565b60006020820190508181036000830152613b3781613afb565b9050919050565b7f416464726573732063616e6e6f7420626520656d7074792e0000000000000000600082015250565b6000613b74601883612f7f565b9150613b7f82613b3e565b602082019050919050565b60006020820190508181036000830152613ba381613b67565b9050919050565b7f41646472657373206e6f7420666f756e642e0000000000000000000000000000600082015250565b6000613be0601283612f7f565b9150613beb82613baa565b602082019050919050565b60006020820190508181036000830152613c0f81613bd3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4164647265737320746f2062652072656d6f766564206e6f7420666f756e642060008201527f696e206c6973742e000000000000000000000000000000000000000000000000602082015250565b6000613ca1602883612f7f565b9150613cac82613c45565b604082019050919050565b60006020820190508181036000830152613cd081613c94565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613cfc565b613d438683613cfc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613d80613d7b613d7684613026565b613d5b565b613026565b9050919050565b6000819050919050565b613d9a83613d65565b613dae613da682613d87565b848454613d09565b825550505050565b600090565b613dc3613db6565b613dce818484613d91565b505050565b5b81811015613df257613de7600082613dbb565b600181019050613dd4565b5050565b601f821115613e3757613e0881613cd7565b613e1184613cec565b81016020851015613e20578190505b613e34613e2c85613cec565b830182613dd3565b50505b505050565b600082821c905092915050565b6000613e5a60001984600802613e3c565b1980831691505092915050565b6000613e738383613e49565b9150826002028217905092915050565b613e8c82612f74565b67ffffffffffffffff811115613ea557613ea4613205565b5b613eaf82546137f6565b613eba828285613df6565b600060209050601f831160018114613eed5760008415613edb578287015190505b613ee58582613e67565b865550613f4d565b601f198416613efb86613cd7565b60005b82811015613f2357848901518255600182019150602085019450602081019050613efe565b86831015613f405784890151613f3c601f891682613e49565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613fb1602983612f7f565b9150613fbc82613f55565b604082019050919050565b60006020820190508181036000830152613fe081613fa4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061401d601f83612f7f565b915061402882613fe7565b602082019050919050565b6000602082019050818103600083015261404c81614010565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614089601083612f7f565b915061409482614053565b602082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f41646472657373206973206e6f7420616c6c6f77656420746f206d696e74204e60008201527f4654732e00000000000000000000000000000000000000000000000000000000602082015250565b600061411b602483612f7f565b9150614126826140bf565b604082019050919050565b6000602082019050818103600083015261414a8161410e565b9050919050565b7f4e6f206d6f7265204e465420616c6c6f77616e636520666f72206d696e74696e60008201527f672e000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ad602283612f7f565b91506141b882614151565b604082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f4d41585f535550504c5920726561636865642e2043616e6e6f74206d696e742060008201527f6e6577204e46542e000000000000000000000000000000000000000000000000602082015250565b600061423f602883612f7f565b915061424a826141e3565b604082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006142d1602a83612f7f565b91506142dc82614275565b604082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f52656e6f756e63696e67206f776e6572736869702069732070726576656e746560008201527f642e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614363602283612f7f565b915061436e82614307565b604082019050919050565b6000602082019050818103600083015261439281614356565b9050919050565b7f417272617973206c656e677468206d69736d617463682e000000000000000000600082015250565b60006143cf601783612f7f565b91506143da82614399565b602082019050919050565b600060208201905081810360008301526143fe816143c2565b9050919050565b7f4e465420636f756e74206d7573742062652067726561746572207468616e203060008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614461602183612f7f565b915061446c82614405565b604082019050919050565b6000602082019050818103600083015261449081614454565b9050919050565b7f4164647265737320616c7265616479206578697374732e000000000000000000600082015250565b60006144cd601783612f7f565b91506144d882614497565b602082019050919050565b600060208201905081810360008301526144fc816144c0565b9050919050565b600061450e82613026565b915061451983613026565b9250828201905080821115614531576145306138b9565b5b92915050565b600081905092915050565b600061454d82612f74565b6145578185614537565b9350614567818560208601612f90565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145a9600583614537565b91506145b482614573565b600582019050919050565b60006145cb8284614542565b91506145d68261459c565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061463d602683612f7f565b9150614648826145e1565b604082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146cf602c83612f7f565b91506146da82614673565b604082019050919050565b600060208201905081810360008301526146fe816146c2565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614761602983612f7f565b915061476c82614705565b604082019050919050565b6000602082019050818103600083015261479081614754565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f3602483612f7f565b91506147fe82614797565b604082019050919050565b60006020820190508181036000830152614822816147e6565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061485f601483612f7f565b915061486a82614829565b602082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006148cb601983612f7f565b91506148d682614895565b602082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061495d603283612f7f565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006149ef602f83612f7f565b91506149fa82614993565b604082019050919050565b60006020820190508181036000830152614a1e816149e2565b9050919050565b6000614a318285614542565b9150614a3d8284614542565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614a7082614a49565b614a7a8185614a54565b9350614a8a818560208601612f90565b614a9381612fba565b840191505092915050565b6000608082019050614ab360008301876130bb565b614ac060208301866130bb565b614acd60408301856130e5565b8181036060830152614adf8184614a65565b905095945050505050565b600081519050614af981612ee5565b92915050565b600060208284031215614b1557614b14612eaf565b5b6000614b2384828501614aea565b91505092915050565b6000614b3782613026565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b6957614b686138b9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bae82613026565b9150614bb983613026565b925082614bc957614bc8614b74565b5b828204905092915050565b6000614bdf82613026565b9150614bea83613026565b925082614bfa57614bf9614b74565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c3b602083612f7f565b9150614c4682614c05565b602082019050919050565b60006020820190508181036000830152614c6a81614c2e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614ca7601c83612f7f565b9150614cb282614c71565b602082019050919050565b60006020820190508181036000830152614cd681614c9a565b905091905056fea2646970667358221220eb3f92895b13fb9a76d9ede03bf986926299f295d68d6d0caa904ad232e0144164736f6c63430008170033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000474657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003545454000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046874747000000000000000000000000000000000000000000000000000000000