From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 09/11] drm/i915: Migrate stolen objects before hibernation Date: Wed, 8 Jun 2016 17:50:39 +0530 Message-ID: <1465388441-23085-10-git-send-email-ankitprasad.r.sharma@intel.com> References: <1465388441-23085-1-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 2ACA96E9E2 for ; Wed, 8 Jun 2016 12:47:15 +0000 (UTC) In-Reply-To: <1465388441-23085-1-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: akash.goel@intel.com, Ankitprasad Sharma List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpWaWxsZSByZW1p bmRlZCB1cyB0aGF0IHN0b2xlbiBtZW1vcnkgaXMgbm90IHByZXNlcnZlZCBhY3Jvc3MKaGliZXJu YXRpb24sIGFuZCBhIHJlc3VsdCBvZiB0aGlzIHdhcyB0aGF0IGNvbnRleHQgb2JqZWN0cyBub3cg YmVpbmcKYWxsb2NhdGVkIGZyb20gc3RvbGVuIHdlcmUgYmVpbmcgY29ycnVwdGVkIG9uIFM0IGFu ZCBwcm9tcHRseSBoYW5naW5nCnRoZSBHUFUgb24gcmVzdW1lLgoKV2Ugd2FudCB0byB1dGlsaXNl IHN0b2xlbiBmb3IgYXMgbXVjaCBhcyBwb3NzaWJsZSAobm90aGluZyBlbHNlIHdpbGwgdXNlCnRo YXQgd2FzdGVkIG1lbW9yeSBvdGhlcndpc2UpLCBzbyB3ZSBuZWVkIGEgc3RyYXRlZ3kgZm9yIGhh bmRsaW5nCmdlbmVyYWwgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBzdG9sZW4gYW5kIGhpYmVybmF0 aW9uLiBBIHNpbXBsZSBzb2x1dGlvbgppcyB0byBkbyBhIENQVSBjb3B5IHRocm91Z2ggdGhlIEdU VCBvZiB0aGUgc3RvbGVuIG9iamVjdCBpbnRvIGEgZnJlc2gKc2htZW1mcyBiYWNraW5nIHN0b3Jl IGFuZCB0aGVuY2Vmb3J0aCB0cmVhdCBpdCBhcyBhIG5vcm1hbCBvYmplY3RzLiBUaGlzCmNhbiBi ZSByZWZpbmVkIGluIGZ1dHVyZSB0byBlaXRoZXIgdXNlIGEgR1BVIGNvcHkgdG8gYXZvaWQgdGhl IHNsb3cKdW5jYWNoZWQgcmVhZHMgKHRob3VnaCBpdCdzIGhpYmVybmF0aW9uISkgYW5kIHJlY3Jl YXRlIHN0b2xlbiBvYmplY3RzCnVwb24gcmVzdW1lL2ZpcnN0LXVzZS4gRm9yIG5vdywgYSBzaW1w bGUgYXBwcm9hY2ggc2hvdWxkIHN1ZmZpY2UgZm9yCnRlc3RpbmcgdGhlIG9iamVjdCBtaWdyYXRp b24uCgp2MjoKU3dhcCBQVEUgZm9yIHBpbm5lZCBiaW5kaW5ncyBvdmVyIHRvIHRoZSBzaG1lbWZz LiBUaGlzIGFkZHMgYQpjb21wbGljYXRlZCBkYW5jZSwgYnV0IGlzIHJlcXVpcmVkIGFzIG1hbnkg c3RvbGVuIG9iamVjdHMgYXJlIGxpa2VseSB0bwpiZSBwaW5uZWQgZm9yIHVzZSBieSB0aGUgaGFy ZHdhcmUuIFN3YXBwaW5nIHRoZSBQVEVzIHNob3VsZCBub3QgcmVzdWx0CmluIGV4dGVybmFsbHkg dmlzaWJsZSBiZWhhdmlvdXIsIGFzIGVhY2ggUFRFIHVwZGF0ZSBzaG91bGQgYmUgYXRvbWljIGFu ZAp0aGUgdHdvIHBhZ2VzIGlkZW50aWNhbC4gKGRhbnZldCkKCnNhZmUtYnktZGVmYXVsdCwgb3Ig dGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS4gV2UgbmVlZCBhIG5ldyBmbGFnCnRvIG1h cmsgb2JqZWN0cyB0aGF0IHdlIGNhbiB3aWxmdWxseSBkaXNjYXJkIGFuZCByZWNyZWF0ZSBhY3Jv c3MKaGliZXJuYXRpb24uIChkYW52ZXQpCgpKdXN0IHVzZSB0aGUgZ2xvYmFsX2xpc3QgcmF0aGVy IHRoYW4gaW52ZW50IGEgbmV3IHN0b2xlbl9saXN0LiBUaGlzIGlzCnRoZSBzbG93cGF0aCBoaWJl cm5hdGUgYW5kIHNvIGFkZGluZyBhIG5ldyBsaXN0IGFuZCB0aGUgYXNzb2NpYXRlZApjb21wbGV4 aXR5IGlzbid0IHdvcnRoIGl0LgoKdjM6IFJlYmFzZWQgb24gZHJtLWludGVsLW5pZ2h0bHkgKEFu a2l0KQoKdjQ6IFVzZSBpbnNlcnRfcGFnZSB0byBtYXAgc3RvbGVuIG1lbW9yeSBiYWNrZWQgcGFn ZXMgZm9yIG1pZ3JhdGlvbiB0bwpzaG1lbSAoQ2hyaXMpCgp2NTogQWNxdWlyZSBtdXRleCBsb2Nr IHdoaWxlIGNvcHlpbmcgc3RvbGVuIGJ1ZmZlciBvYmplY3RzIHRvIHNobWVtIChDaHJpcykKCnY2 OiBIYW5kbGVkIGZpbGUgbGVhaywgU3BsaXR0ZWQgb2JqZWN0IG1pZ3JhdGlvbiBmdW5jdGlvbiwg YWRkZWQga2VybmVsZG9jCmZvciBtaWdyYXRlX3N0b2xlbl90b19zaG1lbWZzKCkgZnVuY3Rpb24g KFR2cnRrbykKVXNlIGk5MTUgd3JhcHBlciBmdW5jdGlvbiBmb3IgZHJtX21tX2luc2VydF9ub2Rl X2luX3JhbmdlKCkKCnY3OiBLZWVwIHRoZSBvYmplY3QgaW4gY3B1IGRvbWFpbiBhZnRlciBnZXRf cGFnZXMsIHJlbW92ZSB0aGUgb2JqZWN0IGZyb20KdGhlIHVuYm91bmQgbGlzdCBvbmx5IHdoZW4g bWFya2VkIFBVUkdFRCwgQ29ycmVjdGVkIHNwbGl0IG9mIG9iamVjdCBtaWdyYXRpb24KZnVuY3Rp b24gKENocmlzKQoKdjg6IFNwbGl0IGk5MTVfZ2VtX2ZyZWV6ZSgpLCByZW1vdmVkIHJlZHVuZGFu dCB1c2Ugb2YgYmFycmllciwgY29ycmVjdGVkCnVzZSBvZiBzZXRfdG9fY3B1X2RvbWFpbigpIChD aHJpcykKCnY5OiBSZXBsYWNlZCBXQVJOX09OIGJ5IEJVR19PTiBhbmQgYWRkZWQgYSBjb21tZW50 IGV4cGxhaW5pbmcgaXQKKERhbmllbC9UdnJ0a28pCgp2MTA6IERvY3VtZW50IHVzZSBvZiBiYXJy aWVycyAoQ2hyaXMpCgp2MTE6IFJlc29sdmVkIGxpc3QgY29ycnVwdGlvbiBkdWUgdG8gbm90IHJl bW92aW5nIG9iaiBmcm9tIGdsb2JhbF9saXN0CmlmIG5vIHJlZmVyZW5jZSB0byBwYWdlcyBpcyBo ZWxkLCBSZWJhc2VkIChBbmtpdCkKCnYxMjogUmViYXNlIChBbmtpdCkKClNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXMgYXQgY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQtb2ZmLWJ5 OiBBbmtpdHByYXNhZCBTaGFybWEgPGFua2l0cHJhc2FkLnIuc2hhcm1hQGludGVsLmNvbT4KUmV2 aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgIDIyICsrKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAxMCArKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgMjA0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYyAgfCAgNDkg KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICB8ICAgMyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jICAgICAgfCAgIDYgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8ICAgNiArCiA4IGZpbGVzIGNoYW5nZWQsIDI4NCBp bnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRl eCA4NzJjNjA2MC4uZGM5ZTA2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0xMDU4LDYg KzEwNTgsMjIgQEAgc3RhdGljIGludCBpOTE1X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 KQogCXJldHVybiBpOTE1X2RybV9zdXNwZW5kKGRybV9kZXYpOwogfQogCisvKiBmcmVlemU6IGJl Zm9yZSBjcmVhdGluZyB0aGUgaGliZXJuYXRpb25faW1hZ2UgKi8KK3N0YXRpYyBpbnQgaTkxNV9w bV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBpOTE1 X2dlbV9mcmVlemUocGNpX2dldF9kcnZkYXRhKHRvX3BjaV9kZXYoZGV2KSkpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpOTE1X3BtX3N1c3BlbmQoZGV2KTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaTkxNV9wbV9z dXNwZW5kX2xhdGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2ID0gZGV2X3RvX2k5MTUoZGV2KS0+ZGV2OwpAQCAtMTEwNywxMiArMTEyMyw2IEBAIHN0 YXRpYyBpbnQgaTkxNV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBpOTE1 X2RybV9yZXN1bWUoZHJtX2Rldik7CiB9CiAKLS8qIGZyZWV6ZTogYmVmb3JlIGNyZWF0aW5nIHRo ZSBoaWJlcm5hdGlvbl9pbWFnZSAqLwotc3RhdGljIGludCBpOTE1X3BtX2ZyZWV6ZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGk5MTVfcG1fc3VzcGVuZChkZXYpOwotfQotCiBzdGF0 aWMgaW50IGk5MTVfcG1fZnJlZXplX2xhdGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCBy ZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBhNGNhZmY0Li44MWUwNTUxIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTIxODIsNiArMjE4MiwxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCB7CiAJICogQWR2aWNlOiBhcmUgdGhlIGJhY2tpbmcgcGFnZXMgcHVyZ2VhYmxl PwogCSAqLwogCXVuc2lnbmVkIGludCBtYWR2OjI7CisJLyoqCisJICogV2hlcmVhcyBtYWR2IGlz IGZvciB1c2Vyc3BhY2UsIHRoZXJlIGFyZSBjZXJ0YWluIHNpdHVhdGlvbnMKKwkgKiB3aGVyZSB3 ZSB3YW50IEk5MTVfTUFEVl9ET05UTkVFRCBiZWhhdmlvdXIgb24gaW50ZXJuYWwgb2JqZWN0cwor CSAqIHdpdGhvdXQgY29uZmxhdGluZyB0aGUgdXNlcnNwYWNlIHNldHRpbmcuCisJICovCisJdW5z aWduZWQgaW50IGludGVybmFsX3ZvbGF0aWxlOjE7CiAKIAkvKioKIAkgKiBDdXJyZW50IHRpbGlu ZyBtb2RlIGZvciB0aGUgb2JqZWN0LgpAQCAtMzMxOSw2ICszMzI1LDkgQEAgaW50IF9fbXVzdF9j aGVjayBpOTE1X2dlbV9pbml0X2h3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1 X2dlbV9pbml0X3N3aXp6bGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaTkxNV9n ZW1fY2xlYW51cF9lbmdpbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IF9fbXVzdF9j aGVjayBpOTE1X2dwdV9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IF9fbXVzdF9j aGVjayBpOTE1X2dlbV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgX19tdXN0 X2NoZWNrCitpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1mcyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fc3Vz cGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogCQkJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKmJhdGNoX29iaiwKQEAgLTM1NDQsNiArMzU1Myw3IEBAIGk5MTVfZ2VtX29iamVjdF9j cmVhdGVfc3RvbGVuX2Zvcl9wcmVhbGxvY2F0ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJ CQkJICAgICAgIHUzMiBzdG9sZW5fb2Zmc2V0LAogCQkJCQkgICAgICAgdTMyIGd0dF9vZmZzZXQs CiAJCQkJCSAgICAgICB1MzIgc2l6ZSk7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX3N0b2xl bl9mcmVlemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogCiAvKiBpOTE1X2dlbV9z aHJpbmtlci5jICovCiB1bnNpZ25lZCBsb25nIGk5MTVfZ2VtX3NocmluayhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAzMDA2OWMw Li5iNWEyNjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTQ4MDAsMTIgKzQ4MDAsMjcg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9v YmplY3Rfb3BzID0gewogCS5wdXRfcGFnZXMgPSBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0 dCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqCitpOTE1X2dlbV9zZXRfaW5v ZGVfZ2ZwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0 cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZV9pbm9kZShmaWxlKS0+aV9tYXBwaW5n OworCWdmcF90IG1hc2s7CisKKwltYXNrID0gR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFC TEU7CisJaWYgKElTX0NSRVNUTElORShkZXYpIHx8IElTX0JST0FEV0FURVIoZGV2KSkgeworCQkv KiA5NjVnbSBjYW5ub3QgcmVsb2NhdGUgb2JqZWN0cyBhYm92ZSA0R2lCLiAqLworCQltYXNrICY9 IH5fX0dGUF9ISUdITUVNOworCQltYXNrIHw9IF9fR0ZQX0RNQTMyOworCX0KKwltYXBwaW5nX3Nl dF9nZnBfbWFzayhtYXBwaW5nLCBtYXNrKTsKKworCXJldHVybiBtYXBwaW5nOworfQorCiBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAotCQkJCQkJICBzaXplX3Qgc2l6ZSkKKwkJCQkJCSAgIHNpemVfdCBzaXpl KQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGFkZHJlc3Nf c3BhY2UgKm1hcHBpbmc7Ci0JZ2ZwX3QgbWFzazsKIAlpbnQgcmV0OwogCiAJb2JqID0gaTkxNV9n ZW1fb2JqZWN0X2FsbG9jKGRldik7CkBAIC00ODE2LDE1ICs0ODMxLDcgQEAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKmk5MTVfZ2VtX29iamVjdF9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQltYXNrID0gR0ZQX0hJR0hVU0VSIHwg X19HRlBfUkVDTEFJTUFCTEU7Ci0JaWYgKElTX0NSRVNUTElORShkZXYpIHx8IElTX0JST0FEV0FU RVIoZGV2KSkgewotCQkvKiA5NjVnbSBjYW5ub3QgcmVsb2NhdGUgb2JqZWN0cyBhYm92ZSA0R2lC LiAqLwotCQltYXNrICY9IH5fX0dGUF9ISUdITUVNOwotCQltYXNrIHw9IF9fR0ZQX0RNQTMyOwot CX0KLQotCW1hcHBpbmcgPSBmaWxlX2lub2RlKG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nOwot CW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIG1hc2spOworCWk5MTVfZ2VtX3NldF9pbm9k ZV9nZnAoZGV2LCBvYmotPmJhc2UuZmlscCk7CiAKIAlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmos ICZpOTE1X2dlbV9vYmplY3Rfb3BzKTsKIApAQCAtNDk5Nyw2ICs1MDA0LDE3OSBAQCBpOTE1X2dl bV9zdG9wX2VuZ2luZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJZGV2X3ByaXYtPmd0LnN0 b3BfZW5naW5lKGVuZ2luZSk7CiB9CiAKK3N0YXRpYyBpbnQKK2NvcHlfY29udGVudChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJc3RydWN0IGk5MTVfZ2d0 dCAqZ2d0dCA9ICZpOTE1LT5nZ3R0OworCXN0cnVjdCBkcm1fbW1fbm9kZSBub2RlOworCWludCBy ZXQsIGk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCBm YWxzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHN0b2xlbiBvYmplY3RzIGFy ZSBhbHJlYWR5IHBpbm5lZCB0byBwcmV2ZW50IHNocmlua2FnZSAqLworCW1lbXNldCgmbm9kZSwg MCwgc2l6ZW9mKG5vZGUpKTsKKwlyZXQgPSBpbnNlcnRfbWFwcGFibGVfbm9kZShpOTE1LCAmbm9k ZSwgUEFHRV9TSVpFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsg aSA8IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBh Z2U7CisJCXZvaWQgKl9faW9tZW0gc3JjOworCQl2b2lkICpkc3Q7CisKKwkJZ2d0dC0+YmFzZS5p bnNlcnRfcGFnZSgmZ2d0dC0+YmFzZSwKKwkJCQkgICAgICAgaTkxNV9nZW1fb2JqZWN0X2dldF9k bWFfYWRkcmVzcyhvYmosIGkpLAorCQkJCSAgICAgICBub2RlLnN0YXJ0LAorCQkJCSAgICAgICBJ OTE1X0NBQ0hFX05PTkUsIDApOworCisJCXBhZ2UgPSBzaG1lbV9yZWFkX21hcHBpbmdfcGFnZSht YXBwaW5nLCBpKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJcmV0ID0gUFRSX0VSUihwYWdl KTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3JjID0gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKGdn dHQtPm1hcHBhYmxlLCBub2RlLnN0YXJ0KTsKKwkJZHN0ID0ga21hcF9hdG9taWMocGFnZSk7CisJ CXdtYigpOyAvKiBmbHVzaCBtb2RpZmljYXRpb25zIHRvIHRoZSBHR1RUIChpbnNlcnRfcGFnZSkg Ki8KKwkJbWVtY3B5X2Zyb21pbyhkc3QsIHNyYywgUEFHRV9TSVpFKTsKKwkJd21iKCk7IAkvKiBm bHVzaCB0aGUgd3JpdGUgYmVmb3JlIHdlIG1vZGlmeSB0aGUgR0dUVCAqLworCQlrdW5tYXBfYXRv bWljKGRzdCk7CisJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKHNyYyk7CisKKwkJcHV0X3BhZ2Uo cGFnZSk7CisJfQorCisJZ2d0dC0+YmFzZS5jbGVhcl9yYW5nZSgmZ2d0dC0+YmFzZSwKKwkJCSAg ICAgICBub2RlLnN0YXJ0LCBub2RlLnNpemUsCisJCQkgICAgICAgdHJ1ZSk7CisJcmVtb3ZlX21h cHBhYmxlX25vZGUoJm5vZGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4g aTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgdHJ1ZSk7Cit9CisKKy8qKgor ICogaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVtZnMoKSAtIG1pZ3JhdGVz IGEgc3RvbGVuIGJhY2tlZAorICogb2JqZWN0IHRvIHNobWVtZnMKKyAqIEBvYmo6IHN0b2xlbiBi YWNrZWQgb2JqZWN0IHRvIGJlIG1pZ3JhdGVkCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNz ZnVsIG1pZ3JhdGlvbiwgZXJybm8gb24gZmFpbHVyZQorICovCisKK2ludAoraTkxNV9nZW1fb2Jq ZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVtZnMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5i YXNlLmRldik7CisJc3RydWN0IGk5MTVfdm1hICp2bWEsICp2bjsKKwlzdHJ1Y3QgZmlsZSAqZmls ZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0 b2xlbl9wYWdlcywgKnNobWVtZnNfcGFnZXM7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OX09O Q0UoaTkxNV9nZW1fb2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkpCisJCXJldHVybiAt RUlOVkFMOworCisJZmlsZSA9IHNobWVtX2ZpbGVfc2V0dXAoImRybSBtbSBvYmplY3QiLCBvYmot PmJhc2Uuc2l6ZSwgVk1fTk9SRVNFUlZFKTsKKwlpZiAoSVNfRVJSKGZpbGUpKQorCQlyZXR1cm4g UFRSX0VSUihmaWxlKTsKKwltYXBwaW5nID0gaTkxNV9nZW1fc2V0X2lub2RlX2dmcChvYmotPmJh c2UuZGV2LCBmaWxlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIHZuLCAmb2Jq LT52bWFfbGlzdCwgb2JqX2xpbmspCisJCWlmIChpOTE1X3ZtYV91bmJpbmQodm1hKSkKKwkJCWNv bnRpbnVlOworCisJaWYgKG9iai0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQgJiYgbGlzdF9l bXB0eSgmb2JqLT52bWFfbGlzdCkpIHsKKwkJLyogRGlzY2FyZCB0aGUgc3RvbGVuIHJlc2VydmF0 aW9uLCBhbmQgcmVwbGFjZSB3aXRoCisJCSAqIGFuIHVucG9wdWxhdGVkIHNobWVtZnMgb2JqZWN0 LgorCQkgKi8KKwkJb2JqLT5tYWR2ID0gX19JOTE1X01BRFZfUFVSR0VEOworCX0gZWxzZSB7CisJ CXJldCA9IGNvcHlfY29udGVudChvYmosIGk5MTUsIG1hcHBpbmcpOworCQlpZiAocmV0KQorCQkJ Z290byBlcnJfZmlsZTsKKwl9CisKKwlzdG9sZW5fcGFnZXMgPSBvYmotPnBhZ2VzOworCW9iai0+ cGFnZXMgPSBOVUxMOworCisJb2JqLT5iYXNlLmZpbHAgPSBmaWxlOworCisJLyogUmVjcmVhdGUg YW55IHBpbm5lZCBiaW5kaW5nIHdpdGggcG9pbnRlcnMgdG8gdGhlIG5ldyBzdG9yYWdlICovCisJ aWYgKCFsaXN0X2VtcHR5KCZvYmotPnZtYV9saXN0KSkgeworCQlyZXQgPSBpOTE1X2dlbV9vYmpl Y3RfZ2V0X3BhZ2VzX2d0dChvYmopOworCQlpZiAocmV0KSB7CisJCQlvYmotPnBhZ2VzID0gc3Rv bGVuX3BhZ2VzOworCQkJZ290byBlcnJfZmlsZTsKKwkJfQorCisJCW9iai0+Z2V0X3BhZ2Uuc2cg PSBvYmotPnBhZ2VzLT5zZ2w7CisJCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7CisKKwkJbGlzdF9m b3JfZWFjaF9lbnRyeSh2bWEsICZvYmotPnZtYV9saXN0LCBvYmpfbGluaykgeworCQkJaWYgKCFk cm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpCisJCQkJY29udGludWU7CisKKwkJCS8q IEFzIHZtYSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgb25seSB0aGUgUFRFcworCQkJICogaGF2 ZSB0byBiZSByZXByb2dyYW1tZWQsIG1ha2VzIHRoaXMgdm1hX2JpbmQKKwkJCSAqIGNhbGwgZXh0 cmVtZWx5IHVubGlrZWx5IHRvIGZhaWwuCisJCQkgKi8KKwkJCUJVR19PTihpOTE1X3ZtYV9iaW5k KHZtYSwKKwkJCQkJICAgICAgb2JqLT5jYWNoZV9sZXZlbCwKKwkJCQkJICAgICAgUElOX1VQREFU RSkpOworCQl9CisJfSBlbHNlIHsKKwkJLyogUmVtb3ZlIG9iamVjdCBmcm9tIGdsb2JhbCBsaXN0 IGlmIG5vIHJlZmVyZW5jZSB0byB0aGUKKwkJICogcGFnZXMgaXMgaGVsZC4KKwkJICovCisJCWxp c3RfZGVsKCZvYmotPmdsb2JhbF9saXN0KTsKKwl9CisKKwkvKiBkcm9wIHRoZSBzdG9sZW4gcGlu IGFuZCBiYWNraW5nICovCisJc2htZW1mc19wYWdlcyA9IG9iai0+cGFnZXM7CisJb2JqLT5wYWdl cyA9IHN0b2xlbl9wYWdlczsKKworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOwor CW9iai0+b3BzLT5wdXRfcGFnZXMob2JqKTsKKwlpZiAob2JqLT5vcHMtPnJlbGVhc2UpCisJCW9i ai0+b3BzLT5yZWxlYXNlKG9iaik7CisKKwlvYmotPm9wcyA9ICZpOTE1X2dlbV9vYmplY3Rfb3Bz OworCW9iai0+cGFnZXMgPSBzaG1lbWZzX3BhZ2VzOworCisJcmV0dXJuIDA7CisKK2Vycl9maWxl OgorCWZwdXQoZmlsZSk7CisJb2JqLT5iYXNlLmZpbHAgPSBOVUxMOworCXJldHVybiByZXQ7Cit9 CisKK2ludAoraTkxNV9nZW1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyog Q2FsbGVkIGJlZm9yZSBpOTE1X2dlbV9zdXNwZW5kKCkgd2hlbiBoaWJlcm5hdGluZyAqLworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOworCWludCByZXQ7CisK KwlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwkvKiBBY3Jvc3MgaGliZXJuYXRpb24sIHRoZSBzdG9sZW4gYXJlYSBp cyBub3QgcHJlc2VydmVkLgorCSAqIEFueXRoaW5nIGluc2lkZSBzdG9sZW4gbXVzdCBjb3BpZWQg YmFjayB0byBub3JtYWwKKwkgKiBtZW1vcnkgaWYgd2Ugd2lzaCB0byBwcmVzZXJ2ZSBpdC4KKwkg Ki8KKwlyZXQgPSBpOTE1X2dlbV9zdG9sZW5fZnJlZXplKGk5MTUpOworCisJbXV0ZXhfdW5sb2Nr KCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogaW50CiBpOTE1X2dlbV9z dXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3N0b2xlbi5jCmluZGV4IDFiMWI5YzEuLjI1MThlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3N0b2xlbi5jCkBAIC04NTMsMyArODUzLDUyIEBAIGVycjoKIAlkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQor CitpbnQgaTkxNV9nZW1fc3RvbGVuX2ZyZWV6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAqdG1wOworCXN0cnVjdCBs aXN0X2hlYWQgKnBoYXNlW10gPSB7CisJCSZpOTE1LT5tbS51bmJvdW5kX2xpc3QsICZpOTE1LT5t bS5ib3VuZF9saXN0LCBOVUxMCisJfSwgKipwOworCWludCByZXQgPSAwOworCisJZm9yIChwID0g cGhhc2U7ICpwOyBwKyspIHsKKwkJc3RydWN0IGxpc3RfaGVhZCBtaWdyYXRlOworCQlpbnQgcmV0 OworCisJCUlOSVRfTElTVF9IRUFEKCZtaWdyYXRlKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKG9iaiwgdG1wLCAqcCwgZ2xvYmFsX2xpc3QpIHsKKwkJCWlmIChvYmotPnN0b2xlbiA9PSBO VUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAob2JqLT5pbnRlcm5hbF92b2xhdGlsZSkKKwkJ CQljb250aW51ZTsKKworCQkJLyogSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhpcyBvYmplY3QgbWF5 IG9ubHkgYmUgYWxpdmUKKwkJCSAqIGR1ZSB0byBhbiBhY3RpdmUgcmVmZXJlbmNlLCBhbmQgdGhh dCBtYXkgZGlzYXBwZWFyCisJCQkgKiB3aGVuIHdlIHVuYmluZCBhbnkgb2YgdGhlIG9iamVjdHMg KGFuZCBzbyB3YWl0IHVwb24KKwkJCSAqIHRoZSBHUFUgYW5kIHJldGlyZSByZXF1ZXN0cykuIFRv IHByZXZlbnQgb25lIG9mIHRoZQorCQkJICogb2JqZWN0cyBmcm9tIGRpc2FwcGVhcmluZyBiZW5l YXRoIHVzLCB3ZSBuZWVkIHRvCisJCQkgKiB0YWtlIGEgcmVmZXJlbmNlIHRvIGVhY2ggYXMgd2Ug YnVpbGQgdGhlIG1pZ3JhdGlvbgorCQkJICogbGlzdC4KKwkJCSAqCisJCQkgKiBUaGlzIGlzIHNp bWlsYXIgdG8gdGhlIHN0cmF0ZWd5IHJlcXVpcmVkIHdoaWxzdAorCQkJICogc2hyaW5raW5nIG9y IGV2aWN0aW5nIG9iamVjdHMgKGZvciB0aGUgc2FtZSByZWFzb24pLgorCQkJICovCisJCQlkcm1f Z2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCQlsaXN0X21vdmUoJm9iai0+Z2xv YmFsX2xpc3QsICZtaWdyYXRlKTsKKwkJfQorCisJCXJldCA9IDA7CisJCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShvYmosIHRtcCwgJm1pZ3JhdGUsIGdsb2JhbF9saXN0KSB7CisJCQlpZiAocmV0 ID09IDApCisJCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVt ZnMob2JqKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCQl9 CisJCWxpc3Rfc3BsaWNlKCZtaWdyYXRlLCAqcCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9 CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4 IDc1NTQ5OGIuLjZjMmJjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAg LTI1MDAsNiArMjUwMCw5IEBAIGludGVsX2FsbG9jX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJLyogTm90IHRvIGJlIHBy ZXNlcnZlZCBhY3Jvc3MgaGliZXJuYXRpb24gKi8KKwlvYmotPmludGVybmFsX3ZvbGF0aWxlID0g dHJ1ZTsKKwogCW9iai0+dGlsaW5nX21vZGUgPSBwbGFuZV9jb25maWctPnRpbGluZzsKIAlpZiAo b2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19YKQogCQlvYmotPnN0cmlkZSA9IGZiLT5w aXRjaGVzWzBdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKaW5kZXggNGRiYjk2YS4uMGI2 MGVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCkBAIC0xNTcsNiArMTU3LDEyIEBA IHN0YXRpYyBpbnQgaW50ZWxmYl9hbGxvYyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAog CQlnb3RvIG91dDsKIAl9CiAKKwkvKiBEaXNjYXJkIHRoZSBjb250ZW50cyBvZiB0aGUgQklPUyBm YiBhY3Jvc3MgaGliZXJuYXRpb24uCisJICogV2UgcmVhbGx5IHdhbnQgdG8gY29tcGxldGVseSB0 aHJvd2F3YXkgdGhlIGVhcmxpZXIgZmJkZXYKKwkgKiBhbmQgcmVjb25maWd1cmUgaXQgYW55d2F5 LgorCSAqLworCW9iai0+aW50ZXJuYWxfdm9sYXRpbGUgPSB0cnVlOworCiAJZmIgPSBfX2ludGVs X2ZyYW1lYnVmZmVyX2NyZWF0ZShkZXYsICZtb2RlX2NtZCwgb2JqKTsKIAlpZiAoSVNfRVJSKGZi KSkgewogCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCmluZGV4IGUxZWU3MWEuLjA2Yjk3MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwpAQCAtNTY1Nyw2ICs1NjU3LDggQEAgc3RhdGljIHZvaWQgdmFsbGV5dmlld19zZXR1cF9w Y3R4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlJOTE1X1dSSVRFKFZMVl9Q Q0JSLCBwY3R4X3BhZGRyKTsKIAogb3V0OgorCS8qIFRoZSBwb3dlciBjb250ZXh0IG5lZWQgbm90 IGJlIHByZXNlcnZlZCBhY3Jvc3MgaGliZXJuYXRpb24gKi8KKwlwY3R4LT5pbnRlcm5hbF92b2xh dGlsZSA9IHRydWU7CiAJRFJNX0RFQlVHX0RSSVZFUigiUENCUjogMHglMDh4XG4iLCBJOTE1X1JF QUQoVkxWX1BDQlIpKTsKIAlkZXZfcHJpdi0+dmx2X3BjdHggPSBwY3R4OwogCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYwppbmRleCAwNWZlMzdhLi42MzNkN2IwIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0yMTg5LDYgKzIxODksMTIgQEAgc3RhdGljIGludCBp bnRlbF9hbGxvY19yaW5nYnVmZmVyX29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWlmIChJ U19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIAorCS8qIFJpbmdidWZmZXIgb2Jq ZWN0cyBhcmUgYnkgZGVmaW5pdGlvbiB2b2xhdGlsZSAtIG9ubHkgdGhlIGNvbW1hbmRzCisJICog YmV0d2VlbiBIRUFEIGFuZCBUQUlMIG5lZWQgdG8gYmUgcHJlc2VydmVkIGFuZCB3aGlsc3QgdGhl cmUgYXJlCisJICogYW55IGNvbW1hbmRzIHRoZXJlLCB0aGUgcmluZ2J1ZmZlciBpcyBwaW5uZWQg YnkgYWN0aXZpdHkuCisJICovCisJb2JqLT5pbnRlcm5hbF92b2xhdGlsZSA9IHRydWU7CisKIAkv KiBtYXJrIHJpbmcgYnVmZmVycyBhcyByZWFkLW9ubHkgZnJvbSBHUFUgc2lkZSBieSBkZWZhdWx0 ICovCiAJb2JqLT5ndF9ybyA9IDE7CiAKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK