This website is a replication package for the presentation at JCA by (Tolsma and Völker 2022).
It contains R code to replicate all the Figures.
To copy the code click the button in the upper right corner of the code-chunks.
Use the top menu to navigate to the section of interest.
The source code of this website can be found on Github
Questions can be addressed to Jochem Tolsma.
A big Thank You to Thijmen Jeroense for preparing the LISS data!
Introduction
- My chair, supported by the James Coleman Association, has the title: Social Divisions Between Groups.
Inequality
The unequal distribution of resources.
Polarization
The unequal distribution of opinions.
Segregation
The unequal distribution of positions.
Figure 4. Segregation
Segregation along different social dimensions
- Class
- Religion
- Ethnicity
- Age
- Gender
- Education
Segregation in different social contexts.
- Geographical areas
- Schools
- Work
- Social Networks
Why segregation?
- We don’t know much about trends in segregation:
- Is it increasing or decreasing over time?
- Along which social dimension is segregation most prominent and does this change over time?
- Within which social context is segregation most prominent and does this change over time?
- Is segregation mainly the result of polarization and inequality or the cause for polarization and inequality?
- Do we need to take action and, if so, through which policies?
LS0tDQp0aXRsZTogIlNlZ3JlZ2F0aW9uIGluIENvcmUgRGlzY3Vzc2lvbiBOZXR3b3JrcyINCmJpYmxpb2dyYXBoeTogcmVmZXJlbmNlcy5iaWINCmNzczogdHdlYWsuY3NzDQotLS0NCg0KYGBge3IgZ2xvYmFsc2V0dGluZ3MsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHJlc3VsdHM9ImhpZGUifQ0KbGlicmFyeShrbml0cikNCm9wdHNfY2h1bmskc2V0KHRpZHkub3B0cz1saXN0KHdpZHRoLmN1dG9mZj0xMDApLHRpZHk9VFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsY29tbWVudCA9ICIjPiIsIGNhY2hlPVRSVUUsIGVjaG89RkFMU0UsIGNsYXNzLnNvdXJjZT1jKCJ0ZXN0IiksIGNsYXNzLm91dHB1dD1jKCJ0ZXN0MiIpKQ0Kb3B0aW9ucyh3aWR0aCA9IDEwMCkNCmxpYnJhcnkocmdsKQ0KcmdsOjpzZXR1cEtuaXRyKCkNCmtuaXRyOjprbml0X2hvb2tzJHNldCh3ZWJnbD1ob29rX3dlYmdsKQ0KYGBgDQoNCmBgYHtjc3Mgc3R5bGUgc2V0dGluZ3MsIGVjaG8gPSBGQUxTRX0NCmJsb2NrcXVvdGUgew0KICAgIHBhZGRpbmc6IDEwcHggMjBweDsNCiAgICBtYXJnaW46IDAgMCAyMHB4Ow0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwyNTUsMjI0LDEpOw0KfQ0KDQoudGVzdCB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KICBvdmVyZmxvdy15OiBhdXRvOw0KICBvdmVyZmxvdy14OiBhdXRvOw0KICBtYXJnaW46IDBweDsNCn0NCg0KLnRlc3QyIHsNCiAgbWF4LWhlaWdodDogMzAwcHg7DQogIG92ZXJmbG93LXk6IGF1dG87DQogIG92ZXJmbG93LXg6IGF1dG87DQogIG1hcmdpbjogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCiAgY29sb3I6IHJnYigyMDEsIDc2LCA3Nik7DQp9DQoNCg0KaDEsIC5oMSwgaDIsIC5oMiwgaDMsIC5oMyB7DQogIG1hcmdpbi10b3A6IDI0cHg7DQp9DQoNCg0KYGBgDQoNCmBgYHtyIGNvbG9yaXplLCBlY2hvPUZBTFNFfQ0KY29sb3JpemUgPC0gZnVuY3Rpb24oeCwgY29sb3IpIHsNCiAgaWYgKGtuaXRyOjppc19sYXRleF9vdXRwdXQoKSkgew0KICAgIHNwcmludGYoIlxcdGV4dGNvbG9yeyVzfXslc30iLCBjb2xvciwgeCkNCiAgfSBlbHNlIGlmIChrbml0cjo6aXNfaHRtbF9vdXRwdXQoKSkgew0KICAgIHNwcmludGYoIjxzcGFuIHN0eWxlPSdjb2xvcjogJXM7Jz4lczwvc3Bhbj4iLCBjb2xvciwgDQogICAgICAgICAgICB4KQ0KICB9IGVsc2UgeA0KfQ0KDQpgYGANCg0KYGBge3Iga2xpcHB5LCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQprbGlwcHk6OmtsaXBweShwb3NpdGlvbiA9IGMoJ3RvcCcsICdyaWdodCcpKQ0KI2tsaXBweTo6a2xpcHB5KGNvbG9yID0gJ2RhcmtyZWQnKQ0KI2tsaXBweTo6a2xpcHB5KHRvb2x0aXBfbWVzc2FnZSA9ICdDbGljayB0byBjb3B5JywgdG9vbHRpcF9zdWNjZXNzID0gJ0RvbmUnKQ0KYGBgDQoNCg0KLS0tDQoNCg0KVGhpcyBbd2Vic2l0ZV0oaHR0cHM6Ly9qb2NoZW10b2xzbWEuZ2l0aHViLmlvL0pDQS8pIGlzIGEgcmVwbGljYXRpb24gcGFja2FnZSBmb3IgdGhlIHByZXNlbnRhdGlvbiBhdCBKQ0EgYnkgW0BUb2xzbWEyMDIyXS4NCg0KSXQgY29udGFpbnMgUiBjb2RlIHRvIHJlcGxpY2F0ZSBhbGwgdGhlIEZpZ3VyZXMuDQoNClRvIGNvcHkgdGhlIGNvZGUgY2xpY2sgdGhlIGJ1dHRvbiBpbiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIHRoZSBjb2RlLWNodW5rcy4NCg0KVXNlIHRoZSB0b3AgbWVudSB0byBuYXZpZ2F0ZSB0byB0aGUgc2VjdGlvbiBvZiBpbnRlcmVzdC4gDQoNClRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIHdlYnNpdGUgY2FuIGJlIGZvdW5kIG9uIFtHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9Kb2NoZW1Ub2xzbWEvSkNBKQ0KDQpRdWVzdGlvbnMgY2FuIGJlIGFkZHJlc3NlZCB0byBbSm9jaGVtIFRvbHNtYV0obWFpbHRvOmpvY2hlbS50b2xzbWFAcnUubmwpLg0KDQoNCioqQSBiaWcgKlRoYW5rIFlvdSogdG8gYHIgY29sb3JpemUoIlRoaWptZW4gSmVyb2Vuc2UiLCAicmVkIilgIGZvciBwcmVwYXJpbmcgdGhlIExJU1MgZGF0YSEqKiAgDQoNCi0tLSANCg0KIDxicj4gPGJyPiA8YnI+IDxicj4gPGJyPiANCg0KDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KZnBhY2thZ2UuY2hlY2sgPC0gZnVuY3Rpb24ocGFja2FnZXMpIHsNCiAgbGFwcGx5KHBhY2thZ2VzLCBGVU4gPSBmdW5jdGlvbih4KSB7DQogICAgaWYgKCFyZXF1aXJlKHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkpIHsNCiAgICAgIGluc3RhbGwucGFja2FnZXMoeCwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCiAgICAgIGxpYnJhcnkoeCwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQ0KICAgIH0NCiAgfSkNCn0NCg0KcGFja2FnZXMgPSBjKCJWZW5uRGlhZ3JhbSIsICJFbnZTdGF0cyIsICJnZ3Bsb3QyIiwgInRpZHl2ZXJzZSIpDQoNCmZwYWNrYWdlLmNoZWNrKHBhY2thZ2VzKQ0KYGBgDQoNCiMgSW50cm9kdWN0aW9uIA0KDQotIE15IGNoYWlyLCBzdXBwb3J0ZWQgYnkgdGhlIEphbWVzIENvbGVtYW4gQXNzb2NpYXRpb24sIGhhcyB0aGUgdGl0bGU6ICoqU29jaWFsIERpdmlzaW9ucyBCZXR3ZWVuIEdyb3VwcyoqLiANCg0KDQpgYGB7ciwgZmlnLmNhcD0iRmlndXJlIDEuIFNvY2lhbCBEaXZpc2lvbnMgQmV0d2VlbiBHcm91cHMifQ0KDQojIGNyZWF0ZSBWZW5uIGRpYWdyYW0gd2l0aCB0aHJlZSBzZXRzDQp2IDwtIGRyYXcudHJpcGxlLnZlbm4oYXJlYTE9NDAsIGFyZWEyPTQwLCBhcmVhMz00MCwNCgkJCQluMTI9MTAsIG4yMz0xMCwgbjEzPTEwLCBuMTIzPTUsDQoJCQkJY2F0ZWdvcnk9YygiSW5lcXVhbGl0eSIsIlBvbGFyaXphdGlvbiIsICJTZWdyZWdhdGlvbiIpLCBjYXQuZGlzdCA9IC0uMSwgY2F0LmNleD0xLjUsDQoJCQkJY29sPSJSZWQiLGZpbGw9YygiR3JlZW4iLCJZZWxsb3ciLCJCbHVlIiksDQoJCQkJbHdkPTMsDQoJCQkJYWxwaGEgPSAuMywNCgkJCQlsYWJlbC5jb2wgPSAiZGFyayByZWQiLA0KCQkJCWNleD0xLjIsDQoJCQkJbHR5PTIsIA0KCQkJCWluZCA9IEZBTFNFKQ0KDQojbGFwcGx5KHYsIG5hbWVzKQ0KI2xhcHBseSh2LCBmdW5jdGlvbihpKSBpJGxhYmVsKQ0KdltbN11dJGxhYmVsIDwtICIiDQp2W1s4XV0kbGFiZWwgPC0gIiINCnZbWzldXSRsYWJlbCA8LSAiIg0KdltbMTBdXSRsYWJlbCA8LSAiIg0KdltbMTFdXSRsYWJlbCA8LSAiU29jaWFsIERpdmlzaW9ucyBcbiBCZXR3ZWVuIEdyb3VwcyINCnZbWzEyXV0kbGFiZWwgPC0gIiINCnZbWzEzXV0kbGFiZWwgPC0gIiINCg0KZ3JpZC5uZXdwYWdlKCkNCmdyaWQuZHJhdyh2KQ0KZ3JpZC5uZXdwYWdlKCkNCg0KYGBgDQoNCi0tLSAgDQoNCiMgSW5lcXVhbGl0eQ0KDQpUaGUgdW5lcXVhbCBkaXN0cmlidXRpb24gb2YgcmVzb3VyY2VzLiANCjwhLS0tDQo8aWZyYW1lIHNyYz0iaHR0cHM6Ly9qdG9sc21hLnNoaW55YXBwcy5pby9HaW5pMi8iIGhlaWdodD0iNDA1IiB3aWR0aD0iNzIwIiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzQ2NDY0NjsiIGFsbG93ZnVsbHNjcmVlbj0iIiBhbGxvdz0iYXV0b3BsYXkiPjwvaWZyYW1lPg0KLS0tPiANCg0KYGBge3IsIGZpZy5jYXA9IkZpZ3VyZSAyLiBJbmVxdWFsaXR5IiAsIG91dC53aWR0aCA9ICc0MCUnfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi4vZ2luaS5wbmciKQ0KYGBgDQoNCg0KLS0tICANCg0KIyBQb2xhcml6YXRpb24NCg0KVGhlIHVuZXF1YWwgZGlzdHJpYnV0aW9uIG9mIG9waW5pb25zLiANCg0KDQpgYGB7ciwgZmlnLmNhcD0iRmlndXJlIDMuIFBvbGFyaXphdGlvbiJ9DQpzZXQuc2VlZCgxMjM0KQ0KDQpkYXQgPC0gZGF0YS5mcmFtZShncm91cCA9IGZhY3RvcihyZXAoYygiZ3JvdXAgQSIsImdyb3VwIEIiKSwgZWFjaD0yMDApKSwgDQogICAgICAgICAgICAgICAgICAgb3BpbmlvbiA9IGMocm5vcm1UcnVuYygyMDAsIG1lYW4gPSAxLCBzZCA9IDEsIG1pbiA9IDAsIG1heCA9IDcpLHJub3JtVHJ1bmMoMjAwLCBtZWFuID0gNiwgc2QgPSAxLCBtaW4gPSAwLCBtYXggPSA3KSkpDQogDQojIERlbnNpdHkgcGxvdHMgd2l0aCBzZW1pLXRyYW5zcGFyZW50IGZpbGwNCmdncGxvdChkYXQsIGFlcyh4PW9waW5pb24sIGZpbGw9Z3JvdXApKSArDQogIGdlb21fZGVuc2l0eShhbHBoYT0uMywga2VybmVsPSJvIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo3LCBsaW1pdHMgPSBjKC0xLDgpICwgbGFiZWxzID0gYygidG90YWxseSBkaXNhZ3JlZSIsICIiLCAiIiwiIiwgIiIsICIiLCAiIiwgInRvdGFsbHkgYWdyZWUiKSkgDQpgYGANCg0KDQotLS0gDQoNCg0KIyBTZWdyZWdhdGlvbg0KDQpUaGUgdW5lcXVhbCBkaXN0cmlidXRpb24gb2YgcG9zaXRpb25zLiANCg0KDQpgYGB7ciwgd2ViZ2w9VFJVRSwgZmlnLmNhcD0ic2VncmVnYXRpb24ifQ0KDQojY2xlYW4gdXANCnJtKGxpc3QgPSBscygpKQ0KDQojaW5zdGFsbC5wYWNrYWdlcyhjKCdyZ2wnLCdzcGRlcCcsJ2dlb3NwaGVyZScsJ3RydW5jbm9ybScpKQ0KbGlicmFyeShyZ2wpDQpyZXF1aXJlKHNwZGVwKQ0KcmVxdWlyZShnZW9zcGhlcmUpDQpyZXF1aXJlKHRydW5jbm9ybSkNCnJlcXVpcmUoYmFzZSkNCg0KI2RlZmluZSBzb21lIGNvbG9ycw0KcmVkPXJnYigxLDAsMCk7IGdyZWVuPXJnYigwLDEsMCk7IGJsdWU9cmdiKDAsMCwxKTsgd2hpdGU9cmdiKDEsMSwxKSA7IGJsYWNrPXJnYigwLDAsMCkNClJ0b1dyYW5nZTwtY29sb3JSYW1wUGFsZXR0ZShjKHJlZCwgd2hpdGUgKSApDQpCdG9HcmFuZ2U8LWNvbG9yUmFtcFBhbGV0dGUoYyhibGFjaywgZ3JlZW4pICkNCg0KIyMjIyMjIyMjIyMjTW9kZWwjIyMjIyMjIyMjIyMjIyMjIw0KI2Z1bmN0aW9uIGRlZmluZSB3b3JsZA0KaW5pd29ybGQgPC0gZnVuY3Rpb24oTj0yMDAwLCBjbj00LCBoPTEsIHRjPS45LCBwZz1jKDAuNSwwLjUpLCBkaXN0cm9wVE49VFJVRSwgcGxvdHdvcmxkPVRSVUUpIHsNCgkjTj0gbnVtYmVyIG9mIGFnZW50cyAoZXZlbiBudW1iZXIpDQoJI2NuPSBudW1iZXIgb2YgY2x1c3RlcnMgKGV2ZW4gbnVtYmVyKQ0KCSNoPSBjbHVzdGVyIGhvbW9nZW5laXR5ICgwLjUtMSkNCgkjdGM9IHRoaW5uaW5nIGNvbnN0YW50LiAuOSBtZWFucyByZXRhaW4gOTAlDQoJI3BnPSBwcm9wb3J0aW9uIG9mIGdyb3VwczsgbGVuZ3RoIGlzIG51bWJlciBvZiBncm91cHMNCgkjZGlzdHJvcFROPSB1c2UgdHJ1bmNhdGVkIG5vcm1hbCB0byBnZW5lcmF0ZSBvcGluaW9ucywgZGVmYXVsdCA9IGZhbHNlDQoNCgkjaW4gcGFwZXIgb3BpbmlvbnMgWzAsMV0sIGhlcmUgWy0xLDFdDQoJI2luIHBhcGVyIHRjIGlzIDEgLSB0Yw0KDQoJI2Z1bmN0aW9ucw0KCXNwaGVyX3RvX2NhcnQgPC0gZnVuY3Rpb24ociwgdGhldGEsIHBoaSkgew0KCQl4PXIqY29zKHBoaSkqc2luKHRoZXRhKQ0KCQl5PXIqc2luKHRoZXRhKSpzaW4ocGhpKQ0KCQl6PXIqY29zKHRoZXRhKQ0KCQljb29yZGluYXRlc3h5eiA8LSBtYXRyaXgoYyh4LHkseiksIG5jb2w9MykNCgkJcmV0dXJuKGNvb3JkaW5hdGVzeHl6KQ0KCX0NCg0KCWRpc3RsIDwtIGZ1bmN0aW9uKHgpIHtkaXN0VmluY2VudHlTcGhlcmUoeCwgbWF0bG9uZ2xhdCwgcj0xKX0NCg0KCSNpZiB0YzwxIHdlIG5lZWQgdG8gaW5jcmVhc2UgaW5pdGlhbCBOLCBtYWtlIHN1cmUgdG8ga2VlcCBldmVuIG51bWJlcg0KCWlmICh0YzwxKSB7IE4gPC0gdHJ1bmMoTi8odGMqMTApKSAqIDEwIH0NCg0KCSNkZWZpbmUgKHJhbmRvbSkgcG9zaXRpb24gb2YgYWdlbnRzIG9uIHNwaGVyZToNCgkjaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9TcGhlcmVQb2ludFBpY2tpbmcuaHRtbA0KCXIgPC0gMQ0KCXBoaSA8LSAyKnBpKnJ1bmlmKE4pDQoJdGhldGEgPC0gYWNvcygyKnJ1bmlmKE4pIC0gMSkNCgljb29yZGluYXRlc3h5eiA8LSBzcGhlcl90b19jYXJ0KHIsIHRoZXRhLCBwaGkpDQoNCglwaGlfciA8LSAoMzYwKnBoaSkvKDIqcGkpDQoJdGhldGFfciA8LSAoMTgwKnRoZXRhKS9waQ0KCWxhdCA8LSA5MCAtIHRoZXRhX3INCglsb25nIDwtIGlmZWxzZShwaGlfcj49MCAmIHBoaV9yPDE4MCwgLXBoaV9yLCBhYnMocGhpX3IgLSAzNjApKQ0KDQoJbWF0bG9uZ2xhdCA8LSBtYXRyaXgoYyhsb25nLGxhdCksIG5jb2w9MikNCg0KCSNpbXByb3ZlOiB3ZSBvbmx5IG5lZWQgdG8gY2FsY3VsYXRlIGhhbGYNCgltYXRsb25nbGF0bGlzdCA8LSBsYXBwbHkoc2VxX2xlbihucm93KG1hdGxvbmdsYXQpKSwgZnVuY3Rpb24oaSkgbWF0bG9uZ2xhdFtpLF0pDQoNCglkaXN0bCA8LSBmdW5jdGlvbih4KSB7ZGlzdFZpbmNlbnR5U3BoZXJlKHgsIG1hdGxvbmdsYXQsIHI9MSl9DQoNCgltYXRkaXN0IDwtIHNhcHBseShtYXRsb25nbGF0bGlzdCwgZGlzdGwpDQoNCgkjbW9kZWwgc2VncmVnYXRpb246IGNvdWxkIGJlIGltcHJvdmVkLiBjaGVjayBleGlzdGluZyBwYWNrYWdlcy4NCglwYXJlbnRzIDwtIHNhbXBsZSgxOk4sIGNuKQ0KCWdyb3VwcyA8LSByZXAoTkEsIE4pDQoJI2ZpeCBpZiBjbj09MQ0KCWdyb3Vwc1twYXJlbnRzXSA8LSBzYW1wbGUoYyhyZXAoMSwgcm91bmQoY24qcGdbMV0pKSxyZXAoLTEsIGNuIC0gcm91bmQoY24qcGdbMV0pKSksIGNuLCByZXBsYWNlPUZBTFNFKQ0KDQoJI3RvIHdob20gZG8gY2hpbGRyZW4gYmVsb25nDQoJY2x1c3RlcmNoaWxkcmVuIDwtIHJlcChOQSwgTikNCg0KCWZvciAoaSBpbiBjKDE6TikpCXsNCgkJaWYgKCEoaSAlaW4lIHBhcmVudHMpKSAJew0KCQkJI3doaWNoIHBhcmVudHMgaXMgY2xvc2VzdA0KCQkJY2x1c3RlcmNoaWxkcmVuW2ldIDwtIHBhcmVudHNbd2hpY2gobWF0ZGlzdFtpLHBhcmVudHNdPT1taW4obWF0ZGlzdFtpLHBhcmVudHNdKSldDQoJCQkjZ2l2ZSBjaGlsZCBzYW1lIGluaXRpYWwgdmFsdWUgYXMgY2xvc2VzdCBwYXJlbnQNCgkJCWdyb3VwIDwtIGdyb3Vwc1tjbHVzdGVyY2hpbGRyZW5baV1dDQoJCQkjY2hhbmdlIHZhbHVlIGNoaWxkIGRlcGVuZGluZyBvZiBjbHVzdGVyIGhvbW9nZW5laXR5DQoJCQlncm91cHNbaV0gPC0gaWZlbHNlKGdyb3VwPT0tMSAsc2FtcGxlKGMoLTEsMSksIDEsIHByb2I9YyhoLDEtaCkpLCBzYW1wbGUoYygtMSwxKSwgMSwgcHJvYj1jKDEtaCxoKSkpDQoJCX0NCgl9DQoNCgkjZGVmaW5lIG9waW5pb25zIG9mIGFnZW50cw0KCWlmKGRpc3Ryb3BUTj09VFJVRSkge29waW5pb25zIDwtIHJ0cnVuY25vcm0oTiwgYT0tMSwgYj0xLCBtZWFuPTAsIHNkPTAuNDUpfQ0KCSNpZihkaXN0cm9wVE49PUZBTFNFKSB7b3BpbmlvbnMgPC0gcnVuaWYoTiwgbWluID0gLTEsIG1heCA9IDEpfQ0KDQoJI2ZvciAoZnV0dXJlKSBwbG90dGluZw0KCWNvbG9yIDwtIGlmZWxzZShncm91cHM9PTEsICJibHVlIiwgInJlZCIpDQoNCgkjdGhpbiBjbHVzdGVycywgbWFrZSBjbHVzdGVyIGJvdW5kYXJpZXMgc2hhcnBlcg0KCWlmICh0YzwxKSB7DQoJCWNoaWxkSURpIDwtIHNhbXBsZXRjIDwtIE5BDQoJCSNwdXQgaW4gYmlnIGZ1bmN0aW9uDQoJCWZvciAoaSBpbiAxOmNuKSB7DQoJCQljaGlsZElEaSA8LSB3aGljaChjbHVzdGVyY2hpbGRyZW49PXBhcmVudHNbaV0pDQoJCQlkaXN0Y2hpbGRwYXJlbnRpIDwtIG1hdGRpc3RbcGFyZW50c1tpXSwgY2hpbGRJRGkgXQ0KCQkJI3NhbXBsZWkgPC0gc2FtcGxlKGNoaWxkSURpLCB0cnVuYyh0YypsZW5ndGgoY2hpbGRJRGkpKSwgcHJvYj1leHAoLWRpc3RjaGlsZHBhcmVudGkpXjIpDQoJCQljdXRvZmZkaXN0YW5jZSA8LSBxdWFudGlsZShkaXN0Y2hpbGRwYXJlbnRpLCB0YykNCgkJCXNhbXBsZWkgPC0gY2hpbGRJRGlbZGlzdGNoaWxkcGFyZW50aTxjdXRvZmZkaXN0YW5jZV0NCgkJCXNhbXBsZXRjIDwtIGMoc2FtcGxldGMsc2FtcGxlaSkNCgkJfQ0KCQljbHVzdGVyY2hpbGRyZW4gPC0gc2FtcGxldGMgPC0gc2FtcGxldGNbLTFdDQoJCXNhbXBsZXRjIDwtIGMoc2FtcGxldGMscGFyZW50cykNCgkJTiA8LSBsZW5ndGgoc2FtcGxldGMpDQoJfQ0KDQoJaWYgKHRjPT0xKSB7IHNhbXBsZXRjIDwtIE5BIH0NCg0KCWlmIChwbG90d29ybGQgJiB0Yz09MSkgew0KCQkuY2hlY2szZCgpDQoJCXJnbC5jbG9zZSgpDQoJCXBsb3QzZChjb29yZGluYXRlc3h5eiwgY29sPWNvbG9yLCBib3g9RkFMU0UsIGF4ZXM9RkFMU0UsIHhsYWI9IiIsIHlsYWI9IiIsIHpsYWI9IiIsIHNpemU9OCwgeGxpbT1jKC0xLDEpICwgeWxpbT1jKC0xLDEpLCB6bGltPWMoLTEsMSkpDQoJCXJnbC5zcGhlcmVzKDAsMCwwLHJhZGl1cz0uOTk1LGNvbG9yPSJncmV5IikNCgl9DQoNCglpZiAodGM9PTEpIHsNCgkJd29ybGRsaXN0IDwtIGxpc3QoY29vcmRpbmF0ZXN4eXosIGNvbG9yLCBncm91cHMsIG9waW5pb25zLCBtYXRkaXN0LCBOLCBjbiwgaCwgcGFyZW50cywgY2x1c3RlcmNoaWxkcmVuLCBtYXRsb25nbGF0LCBtYXRsb25nbGF0bGlzdCwgbG9uZywgbGF0KQ0KCQluYW1lcyh3b3JsZGxpc3QpIDwtIGMoImNvb3JkaW5hdGVzeHl6IiwgImNvbG9yIiwgImdyb3VwcyIsICJvcGluaW9ucyIsICJtYXRkaXN0IiwgIk4iLCAiY24iLCAiaCIsICJwYXJlbnRzIiwgImNsdXN0ZXJjaGlsZHJlbiIsICJtYXRsb25nbGF0IiwgIm1hdGxvbmdsYXRsaXN0IiwgImxvbmciLCAibGF0IikNCgkJI3JldHVybih3b3JsZGxpc3QpDQoJfQ0KDQoJaWYgKHBsb3R3b3JsZCAmIHRjPDEpIHsNCgkJLmNoZWNrM2QoKQ0KCQlyZ2wuY2xvc2UoKQ0KCQlwbG90M2QoY29vcmRpbmF0ZXN4eXpbc2FtcGxldGMsXSwgY29sPWNvbG9yW3NhbXBsZXRjXSwgYm94PUZBTFNFLCBheGVzPUZBTFNFLCB4bGFiPSIiLCB5bGFiPSIiLCB6bGFiPSIiLCBzaXplPTgsIHhsaW09YygtMSwxKSAsIHlsaW09YygtMSwxKSwgemxpbT1jKC0xLDEpKQ0KCQlyZ2wuc3BoZXJlcygwLDAsMCxyYWRpdXM9Ljk5NSxjb2xvcj0iZ3JleSIpDQoJfQ0KDQoNCglpZiAodGM8MSkgew0KCQl3b3JsZGxpc3QgPC0gbGlzdChjb29yZGluYXRlc3h5eltzYW1wbGV0YyxdLCBjb2xvcltzYW1wbGV0Y10sIGdyb3Vwc1tzYW1wbGV0Y10sIG9waW5pb25zW3NhbXBsZXRjXSwgbWF0ZGlzdFtzYW1wbGV0YyxzYW1wbGV0Y10sIE4sIGNuLCBoLCBwYXJlbnRzLCBjbHVzdGVyY2hpbGRyZW4sIG1hdGxvbmdsYXRbc2FtcGxldGMsXSwgbWF0bG9uZ2xhdGxpc3Rbc2FtcGxldGNdLCBsb25nW3NhbXBsZXRjXSwgbGF0W3NhbXBsZXRjXSwgdGMpDQoJCW5hbWVzKHdvcmxkbGlzdCkgPC0gYygiY29vcmRpbmF0ZXN4eXoiLCAiY29sb3IiLCAiZ3JvdXBzIiwgIm9waW5pb25zIiwgIm1hdGRpc3QiLCAiTiIsICJjbiIsICJoIiwgInBhcmVudHMiLCAiY2x1c3RlcmNoaWxkcmVuIiwgIm1hdGxvbmdsYXQiLCAibWF0bG9uZ2xhdGxpc3QiLCAibG9uZyIsICJsYXQiLCAidGMiKQ0KCQkjcmV0dXJuKHdvcmxkbGlzdCkNCgl9DQoNCg0KfQ0KDQppbml3b3JsZChOPTIwMDAsIGNuPTE2LCBoPTAuOSwgdGM9MC44LCBwZz1jKDAuNywgMC4zKSwgZGlzdHJvcFROPVRSVUUsIHBsb3R3b3JsZD1UUlVFKQ0KYGBgDQoNCkZpZ3VyZSA0LiBTZWdyZWdhdGlvbg0KDQotLS0gICANCg0KDQojIyBTZWdyZWdhdGlvbiBhbG9uZyBkaWZmZXJlbnQgc29jaWFsIGRpbWVuc2lvbnMNCg0KKiBDbGFzcyAgDQoqIFJlbGlnaW9uICANCiogRXRobmljaXR5ICANCiogQWdlICANCiogR2VuZGVyICANCiogRWR1Y2F0aW9uICANCg0KIyMgU2VncmVnYXRpb24gaW4gZGlmZmVyZW50IHNvY2lhbCBjb250ZXh0cy4gDQoNCiogR2VvZ3JhcGhpY2FsIGFyZWFzICANCiogU2Nob29scyAgDQoqIFdvcmsgIA0KKiBTb2NpYWwgTmV0d29ya3MgIA0KDQojIFdoeSBzZWdyZWdhdGlvbj8gIA0KDQotIFdlIGRvbid0IGtub3cgbXVjaCBhYm91dCB0cmVuZHMgaW4gc2VncmVnYXRpb246ICANCiAgKiBJcyBpdCBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgb3ZlciB0aW1lPyAgDQogICogQWxvbmcgd2hpY2ggc29jaWFsIGRpbWVuc2lvbiBpcyBzZWdyZWdhdGlvbiBtb3N0IHByb21pbmVudCBhbmQgZG9lcyB0aGlzIGNoYW5nZSBvdmVyIHRpbWU/ICANCiAgKiBXaXRoaW4gd2hpY2ggc29jaWFsIGNvbnRleHQgaXMgc2VncmVnYXRpb24gbW9zdCBwcm9taW5lbnQgYW5kIGRvZXMgdGhpcyBjaGFuZ2Ugb3ZlciB0aW1lPyAgDQogICogSXMgc2VncmVnYXRpb24gbWFpbmx5IHRoZSByZXN1bHQgb2YgcG9sYXJpemF0aW9uIGFuZCBpbmVxdWFsaXR5IG9yIHRoZSBjYXVzZSBmb3IgcG9sYXJpemF0aW9uIGFuZCBpbmVxdWFsaXR5PyAgDQogICogRG8gd2UgbmVlZCB0byB0YWtlIGFjdGlvbiBhbmQsIGlmIHNvLCB0aHJvdWdoIHdoaWNoIHBvbGljaWVzPyANCg0KLS0tICANCg0KDQojIFJlZmVyZW5jZXMNCg==
Copyright © 2022 Jochem Tolsma